|
@@ -1,17 +1,41 @@
|
|
|
<template>
|
|
|
- <el-form label-width="90px" size="mini">
|
|
|
- <el-row>
|
|
|
- <el-form-item label="组合商品添加记录" label-width="130px">
|
|
|
- <el-input placeholder="选择组合商品" />
|
|
|
- </el-form-item>
|
|
|
- </el-row>
|
|
|
+ <el-form
|
|
|
+ ref="ruleForm"
|
|
|
+ v-loading="loading.full"
|
|
|
+ label-width="90px"
|
|
|
+ size="mini"
|
|
|
+ :model="ruleForm"
|
|
|
+ :rules="rules"
|
|
|
+ >
|
|
|
+ <el-form-item v-loading="loading.product" label="组合商品添加记录" prop="spuCode" label-width="140px">
|
|
|
+ <el-input v-if="!productinfo" placeholder="选择组合商品" @focus="pVisible = true" />
|
|
|
+
|
|
|
+ <div v-else key="product" style="display:flex">
|
|
|
+ <show-data-table border :columns="detailColumns" :sitem="productinfo">
|
|
|
+ <template #status>
|
|
|
+ <el-tag
|
|
|
+ size="mini"
|
|
|
+ :type="productinfo.status == '1' ? 'warning' : ''"
|
|
|
+ >{{(statusOptions.find((item) => item.id == String(productinfo.status)) || {}).label || '--'}}</el-tag>
|
|
|
+ </template>
|
|
|
+ </show-data-table>
|
|
|
+
|
|
|
+ <el-tooltip v-if="type !== 'view'" content="重新选择组合商品" placement="top">
|
|
|
+ <i
|
|
|
+ class="el-icon-circle-close"
|
|
|
+ style="cursor:pointer;font-size:18px;margin-left:10px"
|
|
|
+ @click="resetProduct"
|
|
|
+ />
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="解除库存数">
|
|
|
+ <el-form-item label="解除库存数" prop="stock_num" label-width="110px">
|
|
|
<digital-input
|
|
|
- :values="ruleForm.stock_moq"
|
|
|
- :placeholder="'解除库存数'"
|
|
|
+ :values="ruleForm.stock_num"
|
|
|
+ :placeholder="'添加库存数'"
|
|
|
:min="0"
|
|
|
:max="100000000000"
|
|
|
:position="'right'"
|
|
@@ -19,16 +43,16 @@
|
|
|
:size="'mini'"
|
|
|
:controls="false"
|
|
|
:append="''"
|
|
|
- @reschange="number_change($event, 'stock_moq')"
|
|
|
+ @reschange="number_change($event, 'stock_num')"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="可用库存数">
|
|
|
+ <el-form-item label="可解除库存数" label-width="110px">
|
|
|
<digital-input
|
|
|
- :values="ruleForm.can_stock"
|
|
|
- :placeholder="'可用库存数'"
|
|
|
+ :values="ruleForm.usable_stock"
|
|
|
+ :placeholder="'可解除库存数'"
|
|
|
:min="0"
|
|
|
:max="100000000000"
|
|
|
:position="'right'"
|
|
@@ -37,54 +61,162 @@
|
|
|
:controls="false"
|
|
|
:disabled="true"
|
|
|
:append="''"
|
|
|
- @reschange="number_change($event, 'can_stock')"
|
|
|
+ @reschange="number_change($event, 'usable_stock')"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
|
|
|
<el-form-item label="子商品库存情况" label-width="110px">
|
|
|
- <el-table :data="childTableData" size="mini" border>
|
|
|
- <el-table-column label="子商品成本编号" prop="childNo" min-width="160px" />
|
|
|
- <el-table-column label="子商品名称" prop="goodName" min-width="180px" show-overflow-tooltip />
|
|
|
- <el-table-column label="商品类型" prop="goodType" min-width="100px">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-tag size="mini">
|
|
|
- {{
|
|
|
- (isStockOptions.find(({value}) => value === scope.row.goodType) || {}).label || '--'
|
|
|
- }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
+ <el-table :data="productinfo ? productinfo.combindgood : []" size="mini" border>
|
|
|
+ <el-table-column label="子商品成本编号" prop="childCode" min-width="160px" />
|
|
|
+ <el-table-column label="子商品名称" prop="child_name" min-width="180px" show-overflow-tooltip />
|
|
|
+ <el-table-column label="组合比例" prop="child_num" />
|
|
|
+ <el-table-column label="本次解除库存数">
|
|
|
+ <template
|
|
|
+ slot-scope="{ row }"
|
|
|
+ >{{ ((row.child_num || 0) * ( ruleForm.stock_num || 0)) || 0}}</template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="锁定库存总数">
|
|
|
+ <template slot-scope="{ row }">{{ row.stock || 0 }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="锁定库存可用库存数">
|
|
|
+ <template slot-scope="{ row }">{{ row.usable_stock || 0 }}</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="组合比例" />
|
|
|
- <el-table-column label="锁定库存总数" />
|
|
|
- <el-table-column label="锁定库存可用库存数" />
|
|
|
- <el-table-column label="未锁定库存数" />
|
|
|
</el-table>
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item>
|
|
|
<div class="flex-end" style="width:100%;display:flex;justify-content:flex-end">
|
|
|
- <el-button size="mini" type="primary">保存</el-button>
|
|
|
+ <el-button size="mini" type="primary" @click="submit">保存</el-button>
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
+
|
|
|
+ <stock-modal :visible.sync="sVisible" @selected="handleStockSelected" />
|
|
|
+ <product-modal :visible.sync="pVisible" @selected="handleProductSelected" />
|
|
|
</el-form>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import StockModal from "./stockModal.vue";
|
|
|
+import ProductModal from "./productModal.vue";
|
|
|
+import asyncRequest from "@/apis/service/sellOut/combinedAdd";
|
|
|
+import { stockColumns, productColumns } from "./columnsForm";
|
|
|
+import privateField from "@/mixins/privateField";
|
|
|
+import { detailColumns } from "./../columns";
|
|
|
+import { isnumber } from "@/utils/validate";
|
|
|
+
|
|
|
+const validateNum = (rule, value, callback) => {
|
|
|
+ if (value === "") {
|
|
|
+ callback(new Error("添加库存数不能为空!"));
|
|
|
+ } else {
|
|
|
+ const num = parseInt(value + "");
|
|
|
+ console.log(num);
|
|
|
+ if (!isnumber(value)) {
|
|
|
+ callback(new Error("添加库存数必须是整数!"));
|
|
|
+ } else if (num === NaN) {
|
|
|
+ callback(new Error("添加库存数必须是整数!"));
|
|
|
+ } else if (num === 0) {
|
|
|
+ callback(new Error("添加库存数不能为零!"));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
export default {
|
|
|
name: "BaseForm",
|
|
|
+ components: { StockModal, ProductModal },
|
|
|
+ mixins: [privateField],
|
|
|
data() {
|
|
|
return {
|
|
|
+ detailColumns,
|
|
|
+ stockColumns,
|
|
|
+ productColumns,
|
|
|
+ sVisible: false,
|
|
|
+ pVisible: false,
|
|
|
+ stockinfo: null,
|
|
|
+ productinfo: null,
|
|
|
+ loading: {
|
|
|
+ product: false,
|
|
|
+ stock: false,
|
|
|
+ full: false
|
|
|
+ },
|
|
|
ruleForm: {
|
|
|
- stock_moq: 0,
|
|
|
- can_stock: 0
|
|
|
+ spuCode: "",
|
|
|
+ wsm_code: "",
|
|
|
+ stock_num: 0,
|
|
|
+ usable_stock: 0
|
|
|
+ },
|
|
|
+ statusOptions: [
|
|
|
+ { id: "1", label: "待审核" },
|
|
|
+ { id: "2", label: "审核通过" },
|
|
|
+ { id: "3", label: "审核驳回" }
|
|
|
+ ],
|
|
|
+ rules: {
|
|
|
+ spuCode: [
|
|
|
+ { required: true, trigger: "change", message: "请选择组合商品" }
|
|
|
+ ],
|
|
|
+ wsm_code: [
|
|
|
+ { required: true, trigger: "change", message: "请选择所在仓库" }
|
|
|
+ ],
|
|
|
+ stock_num: [
|
|
|
+ { required: true, trigger: "change", validator: validateNum }
|
|
|
+ ]
|
|
|
}
|
|
|
};
|
|
|
},
|
|
|
methods: {
|
|
|
- number_change(e) {
|
|
|
+ async submit() {
|
|
|
+ try {
|
|
|
+ await this.$refs.ruleForm.validate();
|
|
|
+ const { usable_stock, ...params } = this.ruleForm;
|
|
|
+ for (let item of this.productinfo.combindgood) {
|
|
|
+ const { child_num, stock, child_name } = item;
|
|
|
+ if (child_num * params.stock_num > stock) {
|
|
|
+ this.$message.warning(
|
|
|
+ `子商品 ${child_name} 解除库存数不能超过锁定库存总数`
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.loading.full = true;
|
|
|
+ const { code, message } = await asyncRequest.add({
|
|
|
+ ...params,
|
|
|
+ flag: "0"
|
|
|
+ });
|
|
|
+
|
|
|
+ this.loading.full = false;
|
|
|
+ if (Number(code) === 0) {
|
|
|
+ this.$router.push("/sellOut/combinedRemove");
|
|
|
+ return;
|
|
|
+ } else if (code === 1004) {
|
|
|
+ this.$message.warning(message);
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ number_change(e, key) {
|
|
|
this.ruleForm[key] = e;
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.ruleForm && this.$refs.ruleForm.validateField(key);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ resetProduct() {
|
|
|
+ this.productinfo = null;
|
|
|
+ this.ruleForm.spuCode = "";
|
|
|
+ this.ruleForm.wsm_code = data.wsm_code;
|
|
|
+ },
|
|
|
+ async handleProductSelected(id) {
|
|
|
+ this.loading.product = true;
|
|
|
+ const { code, data } = await asyncRequest.detail({ id });
|
|
|
+ if (code !== 0) return;
|
|
|
+ this.productinfo = data;
|
|
|
+ this.ruleForm.spuCode = data.spuCode;
|
|
|
+ this.ruleForm.wsm_code = data.wsm_code;
|
|
|
+ this.loading.product = false;
|
|
|
}
|
|
|
}
|
|
|
};
|