优化商品的多属性

This commit is contained in:
季圣华
2021-07-24 00:18:28 +08:00
parent 0cf1b293fb
commit c93fb4e45a
2 changed files with 181 additions and 13 deletions

View File

@@ -130,6 +130,7 @@ const checkMaterial = (params)=>getAction("/material/checkIsExist",params);
const getMaterialBySelect = (params)=>getAction("/material/findBySelect",params); const getMaterialBySelect = (params)=>getAction("/material/findBySelect",params);
const getSerialMaterialBySelect = (params)=>getAction("/material/getMaterialEnableSerialNumberList",params); const getSerialMaterialBySelect = (params)=>getAction("/material/getMaterialEnableSerialNumberList",params);
const getMaterialByBarCode = (params)=>getAction("/material/getMaterialByBarCode",params); const getMaterialByBarCode = (params)=>getAction("/material/getMaterialByBarCode",params);
const getMaxBarCode = (params)=>getAction("/material/getMaxBarCode",params);
const checkMaterialBarCode = (params)=>getAction("/materialsExtend/checkIsBarCodeExist",params); const checkMaterialBarCode = (params)=>getAction("/materialsExtend/checkIsBarCodeExist",params);
//序列号 //序列号
const addSerialNumber = (params)=>postAction("/serialNumber/add",params); const addSerialNumber = (params)=>postAction("/serialNumber/add",params);
@@ -140,6 +141,7 @@ const batAddSerialNumber = (params)=>postAction("/serialNumber/batAddSerialNumbe
const addMaterialAttribute = (params)=>postAction("/materialAttribute/add",params); const addMaterialAttribute = (params)=>postAction("/materialAttribute/add",params);
const editMaterialAttribute = (params)=>putAction("/materialAttribute/update",params); const editMaterialAttribute = (params)=>putAction("/materialAttribute/update",params);
const checkMaterialAttribute = (params)=>getAction("/materialAttribute/checkIsNameExist",params); const checkMaterialAttribute = (params)=>getAction("/materialAttribute/checkIsNameExist",params);
const getAllMaterialAttribute = (params)=>getAction("/materialAttribute/getAll",params);
//功能管理 //功能管理
const addFunction = (params)=>postAction("/function/add",params); const addFunction = (params)=>postAction("/function/add",params);
const editFunction = (params)=>putAction("/function/update",params); const editFunction = (params)=>putAction("/function/update",params);
@@ -255,6 +257,7 @@ export {
getMaterialBySelect, getMaterialBySelect,
getSerialMaterialBySelect, getSerialMaterialBySelect,
getMaterialByBarCode, getMaterialByBarCode,
getMaxBarCode,
checkMaterialBarCode, checkMaterialBarCode,
addSerialNumber, addSerialNumber,
editSerialNumber, editSerialNumber,
@@ -263,6 +266,7 @@ export {
addMaterialAttribute, addMaterialAttribute,
editMaterialAttribute, editMaterialAttribute,
checkMaterialAttribute, checkMaterialAttribute,
getAllMaterialAttribute,
addFunction, addFunction,
editFunction, editFunction,
checkFunction, checkFunction,

View File

@@ -67,7 +67,7 @@
</a-col> </a-col>
<a-col :lg="8" :md="12" :sm="24"> <a-col :lg="8" :md="12" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="序列号"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="序列号">
<a-select placeholder="请选择序列号" v-decorator="[ 'enableSerialNumber' ]"> <a-select placeholder="有无序列号" v-decorator="[ 'enableSerialNumber' ]">
<a-select-option value="1">有</a-select-option> <a-select-option value="1">有</a-select-option>
<a-select-option value="0">无</a-select-option> <a-select-option value="0">无</a-select-option>
</a-select> </a-select>
@@ -79,17 +79,78 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="8" :md="12" :sm="24"> <a-col :lg="8" :md="12" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="多属性">
<a-switch checked-children="启用" un-checked-children="关闭" @change="onSkuChange"></a-switch>
</a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<j-editable-table <a-card v-if="skuSwitch">
ref="editableMeTable" <a-row class="form-row" :gutter="24">
:loading="meTable.loading" <a-col :lg="8" :md="12" :sm="24">
:columns="meTable.columns" <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="sku.manyColor">
:dataSource="meTable.dataSource" <a-select mode="multiple" v-decorator="[ 'manyColor' ]" showSearch optionFilterProp="children">
:maxHeight="300" <a-select-option v-for="(item,index) in sku.manyColorList" :key="index" :value="item.value">
:rowNumber="true" {{ item.name }}
:rowSelection="true" </a-select-option>
:actionButton="true"/> </a-select>
</a-form-item>
</a-col>
<a-col :lg="8" :md="12" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="sku.manySize">
<a-select mode="multiple" v-decorator="[ 'manySize' ]" showSearch optionFilterProp="children">
<a-select-option v-for="(item,index) in sku.manySizeList" :key="index" :value="item.value">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :lg="8" :md="12" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="sku.other1">
<a-select mode="multiple" v-decorator="[ 'other1' ]" showSearch optionFilterProp="children">
<a-select-option v-for="(item,index) in sku.other1List" :key="index" :value="item.value">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row class="form-row" :gutter="24">
<a-col :lg="8" :md="12" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="sku.other2">
<a-select mode="multiple" v-decorator="[ 'other2' ]" showSearch optionFilterProp="children">
<a-select-option v-for="(item,index) in sku.other2List" :key="index" :value="item.value">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :lg="8" :md="12" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="sku.other3">
<a-select mode="multiple" v-decorator="[ 'other3' ]" showSearch optionFilterProp="children">
<a-select-option v-for="(item,index) in sku.other3List" :key="index" :value="item.value">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :lg="8" :md="12" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="生成条码">
<a-switch v-model="barCodeSwitch" @change="onBarCodeChange"></a-switch>
</a-form-item>
</a-col>
</a-row>
</a-card>
<div style="margin-top:8px;">
<j-editable-table
ref="editableMeTable"
:loading="meTable.loading"
:columns="meTable.columns"
:dataSource="meTable.dataSource"
:maxHeight="300"
:rowNumber="true"
:rowSelection="true"
:actionButton="true"/>
</div>
<a-row class="form-row" :gutter="24"> <a-row class="form-row" :gutter="24">
<a-col :lg="24" :md="24" :sm="24"> <a-col :lg="24" :md="24" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="{xs: { span: 24 },sm: { span: 24 }}" label=""> <a-form-item :labelCol="labelCol" :wrapperCol="{xs: { span: 24 },sm: { span: 24 }}" label="">
@@ -158,7 +219,7 @@
import pick from 'lodash.pick' import pick from 'lodash.pick'
import JEditableTable from '@/components/jeecg/JEditableTable' import JEditableTable from '@/components/jeecg/JEditableTable'
import { FormTypes, VALIDATE_NO_PASSED, getRefPromise, validateFormAndTables } from '@/utils/JEditableTableUtil' import { FormTypes, VALIDATE_NO_PASSED, getRefPromise, validateFormAndTables } from '@/utils/JEditableTableUtil'
import {queryMaterialCategoryTreeList,checkMaterial,checkMaterialBarCode} from '@/api/api' import {queryMaterialCategoryTreeList,checkMaterial,checkMaterialBarCode,getAllMaterialAttribute,getMaxBarCode} from '@/api/api'
import { httpAction, getAction } from '@/api/manage' import { httpAction, getAction } from '@/api/manage'
import JImageUpload from '@/components/jeecg/JImageUpload' import JImageUpload from '@/components/jeecg/JImageUpload'
import JDate from '@/components/jeecg/JDate' import JDate from '@/components/jeecg/JDate'
@@ -181,6 +242,20 @@
unitStatus: false, unitStatus: false,
manyUnitStatus: true, manyUnitStatus: true,
unitChecked: false, unitChecked: false,
skuSwitch: false, //sku开启状态
barCodeSwitch: false, //生成条码开关
sku: {
manyColor: '颜色',
manySize: '尺寸',
other1: '自定义1',
other2: '自定义2',
other3: '自定义3',
manyColorList: [],
manySizeList: [],
other1List: [],
other2List: [],
other3List: [],
},
model: {}, model: {},
isReadOnly: false, isReadOnly: false,
labelCol: { labelCol: {
@@ -202,16 +277,19 @@
dataSource: [], dataSource: [],
columns: [ columns: [
{ {
title: '条码', key: 'barCode', width: '30%', type: FormTypes.input, defaultValue: '', placeholder: '请输入${title}', title: '条码', key: 'barCode', width: '20%', type: FormTypes.input, defaultValue: '', placeholder: '请输入${title}',
validateRules: [{ required: true, message: '${title}不能为空' }, validateRules: [{ required: true, message: '${title}不能为空' },
{ pattern: /^[1-9]\d*$/, message: '请输入零以上的正整数' }, { pattern: /^[1-9]\d*$/, message: '请输入零以上的正整数' },
{ pattern: /^\d{4,13}$/, message: '4到13位数字' }, { pattern: /^\d{4,13}$/, message: '4到13位数字' },
{ handler: this.validateBarCode}] { handler: this.validateBarCode}]
}, },
{ {
title: '单位', key: 'commodityUnit', width: '12%', type: FormTypes.input, defaultValue: '', placeholder: '请输入${title}', title: '单位', key: 'commodityUnit', width: '10%', type: FormTypes.input, defaultValue: '', placeholder: '请输入${title}',
validateRules: [{ required: true, message: '${title}不能为空' }] validateRules: [{ required: true, message: '${title}不能为空' }]
}, },
{
title: '多属性', key: 'sku', width: '12%', type: FormTypes.input, defaultValue: '', readonly:true
},
{ {
title: '采购价', key: 'purchaseDecimal', width: '12%', type: FormTypes.input, defaultValue: '', placeholder: '请输入${title}' title: '采购价', key: 'purchaseDecimal', width: '12%', type: FormTypes.input, defaultValue: '', placeholder: '请输入${title}'
}, },
@@ -297,6 +375,7 @@
this.form.setFieldsValue(pick(this.model, 'name', 'standard', 'unit', 'unitId', 'model', 'color', this.form.setFieldsValue(pick(this.model, 'name', 'standard', 'unit', 'unitId', 'model', 'color',
'categoryId','enableSerialNumber','safetyStock','remark','mfrs','otherField1','otherField2','otherField3')) 'categoryId','enableSerialNumber','safetyStock','remark','mfrs','otherField1','otherField2','otherField3'))
}); });
this.initMaterialAttribute()
// 加载子表数据 // 加载子表数据
if (this.model.id) { if (this.model.id) {
// 判断是否是多单位 // 判断是否是多单位
@@ -530,6 +609,91 @@
} }
}) })
}, },
onSkuChange(checked) {
this.skuSwitch = checked
},
onBarCodeChange(checked) {
let unit = this.form.getFieldValue('unit')
if(unit) {
if(checked){
//计算多属性已经选择了几个
let count = this.getNumByField('manyColor') + this.getNumByField('manySize')
+ this.getNumByField('other1') + this.getNumByField('other2') + this.getNumByField('other3')
if(count === 2) {
let skuArr = []
if(this.getNumByField('manyColor')) {
skuArr.push(this.form.getFieldValue('manyColor'))
}
if(this.getNumByField('manySize')) {
skuArr.push(this.form.getFieldValue('manySize'))
}
if(this.getNumByField('other1')) {
skuArr.push(this.form.getFieldValue('other1'))
}
if(this.getNumByField('other2')) {
skuArr.push(this.form.getFieldValue('other2'))
}
if(this.getNumByField('other3')) {
skuArr.push(this.form.getFieldValue('other3'))
}
let skuArrOne = skuArr[0]
let skuArrTwo = skuArr[1]
let barCodeSku = []
for (let i = 0; i < skuArrOne.length; i++) {
for (let j = 0; j < skuArrTwo.length; j++) {
barCodeSku.push(skuArrOne[i] + ',' + skuArrTwo[j])
}
}
let meTableData = []
getMaxBarCode({}).then((res)=>{
if(res && res.code===200) {
let maxBarCode = res.data.barCode-0
for (let i = 0; i < barCodeSku.length; i++) {
let currentBarCode = maxBarCode + i + 1
meTableData.push({barCode: currentBarCode, commodityUnit: unit, sku: barCodeSku[i]})
}
this.meTable.dataSource = meTableData
}
})
} else {
this.$message.warning('请选择两个属性!');
this.barCodeSwitch = false;
}
} else {
this.meTable.dataSource = []
}
} else {
this.$message.warning('请填写单位,注意不要勾选多单位!');
this.barCodeSwitch = false;
}
},
getNumByField(field) {
let num = 0
if(this.form.getFieldValue(field)) {
if(this.form.getFieldValue(field).length>0) {
num = 1
}
}
return num
},
initMaterialAttribute() {
getAllMaterialAttribute({}).then((res)=>{
if(res && res.code===200) {
if(res.data) {
this.sku.manyColor = res.data.manyColorName;
this.sku.manySize = res.data.manySizeName;
this.sku.other1 = res.data.other1Name;
this.sku.other2 = res.data.other2Name;
this.sku.other3 = res.data.other3Name;
this.sku.manyColorList = res.data.manyColorValue;
this.sku.manySizeList = res.data.manySizeValue;
this.sku.other1List = res.data.other1Value;
this.sku.other2List = res.data.other2Value;
this.sku.other3List = res.data.other3Value;
}
}
});
},
loadParseMaterialProperty() { loadParseMaterialProperty() {
let mpList = Vue.ls.get('materialPropertyList') let mpList = Vue.ls.get('materialPropertyList')
for (let i = 0; i < mpList.length; i++) { for (let i = 0; i < mpList.length; i++) {