From 1ff7e79fccfc7396941e3a5a7d6cc24bc952fd32 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期三, 18 六月 2025 14:02:00 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/tms/modules/inbound/InboundModel.vue | 292 +++++++++++++++++++++++++-------------------------------- 1 files changed, 129 insertions(+), 163 deletions(-) diff --git a/src/views/tms/modules/inbound/InboundModel.vue b/src/views/tms/modules/inbound/InboundModel.vue index 006a1c1..bbd4993 100644 --- a/src/views/tms/modules/inbound/InboundModel.vue +++ b/src/views/tms/modules/inbound/InboundModel.vue @@ -8,45 +8,61 @@ @cancel="handleCancel" > <a-spin :spinning="confirmLoading"> - <a-form :form="form"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-row style="width: 100%"> <a-col :span="24 / 2"> - <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱绫诲瀷"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="宸ュ叿鍒嗙被缂栧彿"> + <a-input v-model="model.classifyNum" placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" :disabled="true"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24 / 2"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="宸ュ叿鍒嗙被鍚嶇О"> + <a-input v-model="model.typeName" placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" :disabled="true"></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row style="width: 100%"> + <a-col :span="24 / 2"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱绫诲瀷" prop="inStorehouseType"> <j-dict-select-tag :disabled="disableSubmit" type="list" - v-decorator="['inStorehouseType', validatorRules.inStorehouseType]" + v-model="model.inStorehouseType" :triggerChange="true" dictCode="in_storehouse_type" placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷" @change="handleTypeChange" /> - </a-form-item> + </a-form-model-item> </a-col> <a-col :span="24 / 2"> - <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱鏃堕棿"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱鏃堕棿" prop="inboundTime"> <a-date-picker @change="onChange" :disabled="disableSubmit" style="width: 100%" - v-decorator="['inboundTime', validatorRules.inboundTime]" + v-model="model.inboundTime" /> - </a-form-item> + </a-form-model-item> </a-col> </a-row> - <a-row style="width: 100%"> + + <a-row style="width: 100%"> <a-col :span="24 / 2"> - <a-form-item label="鍏ュ簱鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol"> - <a-input placeholder="璇疯緭鍏ュ叆搴撴暟閲�" :disabled="disableSubmit" v-decorator="['in_number', validatorRules.applicationReason]" /> - </a-form-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="搴撲綅鍙�" prop="locationCodeId"> + <a-select + :triggerChange="true" + :options="locationCodeOptions" + v-model="model.locationCodeId" + /> + </a-form-model-item> </a-col> </a-row> - - </a-form> + </a-form-model> </a-spin> - <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectReturnList()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熺敤鍑哄簱鍗�</a-button> + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectReturnList()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熷嚭宸ュ叿</a-button> <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="toolingShow && !disableSubmit">閫夋嫨宸ュ叿</a-button> - <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectSharpenList()" v-show="sharpenShow && !disableSubmit">閫夋嫨鍒冪(鍑哄簱鍗�</a-button> + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectSharpenList()" v-show="sharpenShow && !disableSubmit">閫夋嫨鍒冪(宸ュ叿</a-button> <a-table ref="table" bordered @@ -62,9 +78,9 @@ <div :key="col.dataIndex"> <a-input-number v-if="col.dataIndex == 'inStorageQuantity'" - :disabled="quantityDisable" + :disabled="record.accuracyClass == '1'" :value="text" - @change="(e) => handleChange(e, record.key, col, index)" + @change="(e) => handleChange(e, record, col, index)" :min="1" /> </div> @@ -83,10 +99,18 @@ <template slot="footer" v-if="disableSubmit == true"> <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button> </template> - <j-select-tooling-modal ref="toolingModalForm" @ok="modalFormOk"></j-select-tooling-modal> - <j-select-return-list-modal ref="returnModalForm" @ok="modalFormOk"></j-select-return-list-modal> - <j-select-sharpen-list-modal ref="sharpenModalForm" @ok="modalFormOk"></j-select-sharpen-list-modal> + <j-select-tooling-modal ref="toolingModalForm" @ok="modalFormOk" :classifyId="classifyId"></j-select-tooling-modal> + <j-select-return-list-modal ref="returnModalForm" @ok="modalFormOk" :classifyId="classifyId"></j-select-return-list-modal> + <j-select-sharpen-list-modal ref="sharpenModalForm" @ok="modalFormOk" :classifyId="classifyId"></j-select-sharpen-list-modal> + + <div id="printArea" style="display: block;"> + <div v-for="(item, index) in qrList" :key="index" class="qrcode-item"> + <img :src="item.base64" alt="QR Code"> + <p>{{ item.content }}</p> + </div> + </div> </a-modal> + </template> <script> @@ -101,9 +125,10 @@ import { filterObj } from '@/utils/util' import JSelectReturnListModal from '.././inboundOrder/JSelectReturnListModal' import JSelectSharpenListModal from '.././inboundOrder/JSelectSharpenListModal' +import printJS from 'print-js'; export default { - name: 'InboundOrderModel', + name: 'InboundModel', components: { JSelectToolingModal, JMultiSelectTag, @@ -126,6 +151,7 @@ showSizeChanger: true, total: 0 }, + form: this.$form.createForm(this), isDisabled: false, selectedRowKeys: {}, state: { @@ -135,18 +161,11 @@ maintenanceState: false, checkState: false, }, - inboundDate: '', - applicationDate: '', - supplierShow: false, disableSubmit: false, - numDisable:false, quantityDisable:false, - onlyCodeDisable:true, returnShow:false, toolingShow:false, sharpenShow:false, - addDisable:false, - toolinngOptions:[], title: '鎿嶄綔', visible: false, model: {}, @@ -160,52 +179,36 @@ }, confirmLoading: false, loading: false, - form: this.$form.createForm(this), dataSource: [], - toolingTreeData:[], - warehouseOptions:[], - locationOptions:[], - allToolingList:[], param: {}, - barcodeCurrentType: false, inboundOrderId:'', validatorRules: { - type: { - rules: [ + inStorehouseType: [ { required: true, message: '璇烽�夋嫨鍏ュ簱绫诲瀷!', }, ], - }, - inboundDate: { - rules: [ + inboundTime:[ { required: true, message: '璇烽�夋嫨鐢宠鍏ュ簱鏃ユ湡!', }, ], - }, - applicant: { - rules: [ + locationCodeId:[ { required: true, - message: '璇烽�夋嫨鐢宠浜�!', + message: '璇烽�夋嫨搴撲綅鍙�!', }, - ], - }, + ] }, url: { - add: '/tms/inboundOrder/add', - edit: '/tms/inboundOrder/edit', - queryByUserName: '/sys/user/queryByUserName', + addInStorage: '/tms/inboundOrder/addInStorage', toolingList:'/tms/baseTools/list', - queryAccountList:'/tooling/storage/queryAccountList', - querySharpenList:'/sharpen/sharpenDetail/querySharpenList', - queryReturnList:'/returnInventory/queryReturnList', + querySharpenList:'/tms/toolLedgerDetail/list', + queryReturnList:'/tms/toolLedgerDetail/list', detailList:'/tms/inboundDetail/list', }, - toolingOptions:[], columns: [ { title: '#', @@ -239,6 +242,12 @@ dataIndex: 'toolModel' }, { + title: '鍞竴缂栫爜', + align: 'center', + dataIndex: 'onlyCode', + width: 150, + }, + { title: '鍏ュ簱鏁伴噺', align: 'center', dataIndex: 'inStorageQuantity', @@ -251,9 +260,20 @@ scopedSlots: { customRender: 'action' }, }, ], + classifyId:'', + locationCodeOptions:[], + qrList: [] } }, - created() {}, + created() { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)); + ajaxGetDictItems("tms_goods_shelves,location_code,id", null).then((res) => { + if (res.success) { + this.locationCodeOptions = res.result + } + }) + }, methods: { modalFormOk() { }, @@ -262,56 +282,42 @@ this.param.pageSize = this.ipagination.pageSize return filterObj(this.param) }, - add() { - this.edit({}) + add (nodeSelected) { + this.classifyId = nodeSelected.key + this.model.classifyNum = nodeSelected.entity.classifyId + this.model.typeName = nodeSelected.entity.typeName + this.dataSource = [] + this.visible = true; }, - edit(record) { - let that = this - this.form.resetFields() - this.model = Object.assign({}, record) - this.visible = true - this.isDisabled = false - this.disableSubmit = false - if (record.id) { - if(record.inStorehouseType == "1"){ - this.toolingShow = true - }else if(record.inStorehouseType == "2"){ - this.returnShow = true - }else if(record.inStorehouseType == "5"){ - this.sharpenShow = true - } - this.inboundOrderId = record.id - this.detailList(this.inboundOrderId) - } - this.initOptions() - this.$nextTick(() => { - this.form.setFieldsValue( - pick(this.model, 'inboundNum', 'inStorehouseType', 'inboundTime', 'applicationReason', 'handler','approvalDate','reviewer','approvalOpinion','remark') - ) - }) - }, - handleChange(value, key, column, index) { + handleChange(value, record, column, index) { //let t = (this.ipaginationm.current - 1) * this.ipaginationm.pageSize + index + let key = record.key const temp = [...this.dataSource] const target = temp.filter(item => key === item.key)[index]; if (target) { target[column.dataIndex] = value - this.dataSource = temp + + if(column.dataIndex === 'inStorageQuantity'){ + if(target['quantity']<value){ + this.$message.error('鍏ュ簱鏁伴噺涓嶈兘澶т簬鍑哄簱鏁伴噺!') + this.isDisabled = true + }else{ + this.isDisabled = false + } + } + this.dataSource = temp } }, close() { this.$emit('close') this.dataSource = [] + this.model = {}, this.visible = false - this.supplierShow = false, this.disableSubmit = false, - this.numDisable = false, this.quantityDisable = false, - this.onlyCodeDisable = true, this.returnShow = false, this.toolingShow = false, - this.sharpenShow = false, - this.addDisable = false + this.sharpenShow = false }, handleTableChange(pagination, filters, sorter) { this.ipagination = pagination @@ -325,16 +331,19 @@ that.confirmLoading = true let formData = Object.assign(this.model, values) formData.detailData = this.dataSource - let http = '' - if(this.model.id){ - http = this.url.edit - }else{ - http = this.url.add - } - postAction(http, formData) + formData.classifyId = this.classifyId + postAction(this.url.addInStorage, formData) .then((res) => { if (res.success) { - that.$message.success(res.message) + if(formData.inStorehouseType === '1'){ + this.qrList = res.result.map((content, i) => ({ + content:res.result[i].content, + base64: res.result[i].image + })); + this.handleBacthPrint(); + }else{ + that.$message.success("淇濆瓨鎴愬姛") + } that.$emit('ok', new Date()) } else { that.$message.warning(res.message) @@ -354,7 +363,7 @@ selectTooling: function () { let ids = [] for (let i = 0; i < this.dataSource.length; i++) { - ids.push(this.dataSource[i].toolCodeId) + ids.push(this.dataSource[i].id) } this.$refs.toolingModalForm.showModal(ids) this.$refs.toolingModalForm.title = '閫夋嫨宸ュ叿' @@ -384,56 +393,28 @@ this.dataSource.splice(index, 1) }, onChange() {}, - //鎺у埗鎵爜鎴栨墜閫� - selectCurrentUserType(e) { - if (e == '0') { - this.barcodeCurrentType = true - } else { - this.barcodeCurrentType = false - } - }, - //鎵嬮�変汉鍛樺�� - selectCurrentUserChange(e) { - console.log('褰撳墠鎵嬮��', e) - // this.form.setFieldsValue({ - // // userName: e, - // userNameId: e, - // }) - }, //鍏ュ簱绫诲瀷 handleTypeChange(value) { this.dataSource = [] if(value == 1){ this.toolingShow = true this.quantityDisable = false - this.addDisable = true - this.numDisable = false }else{ this.toolingShow = false } if(value == 2){ - this.numDisable = true - this.addDisable = false this.returnShow = true this.quantityDisable = true }else{ this.returnShow = false } if (value == 5) { - this.numDisable = true - this.addDisable = false this.sharpenShow = true this.quantityDisable = true } else { this.sharpenShow = false } - }, - //娣诲姞宸ュ叿鎸夐挳 - addTooling() { - const temp = [...this.dataSource]; - temp.push({ indexId: temp.length + 1 }); - this.dataSource = temp; }, detailList(inboundOrderId) { this.param.inboundOrderId = inboundOrderId @@ -444,45 +425,30 @@ } }) }, - initOptions() { - - ajaxGetDictItems("mes_base_warehouse,name,id,del_flag!='1' order by num asc", null).then((res) => { - if (res.success) { - if (res.result) { - for (let i = 0; i < res.result.length; i++) { - res.result[i].label = res.result[i].title; - } - } - this.warehouseOptions = res.result; - } - }) - ajaxGetDictItems("mes_base_storage_area,name,id,del_flag!='1'", null).then((res) => { - if (res.success) { - if (res.result) { - for (let i = 0; i < res.result.length; i++) { - res.result[i].label = res.result[i].title; - } - } - this.locationOptions = res.result; - } - }) - ajaxGetDictItems("mes_base_tooling,num,id,del_flag!='1'", null).then((res) => { - if (res.success) { - if (res.result) { - for (let i = 0; i < res.result.length; i++) { - res.result[i].label = res.result[i].title; - res.result[i].toolingName = res.result[i].name - } - } - this.toolingOptions = res.result; - } - }) - }, filterOption(input, option) { return ( option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 ); }, + + // 鎵ц鎵撳嵃 + handleBacthPrint() { + this.$nextTick(() => { + printJS({ + printable: 'printArea', + type: 'html', + style: ` + .qrcode-item { + page-break-inside: avoid; + margin: 10px; + text-align: center; + } + img { width: 100px; height: 100px; } + `, + scanStyles: false + }); + }); + } }, watch: {}, mounted() { @@ -490,16 +456,16 @@ //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟 for (let i = 0; i < data.length; i++) { this.dataSource.push({ - toolCodeId:data[i].id, - toolingId: data[i].toolingId || data[i].id, + id: data[i].id, + toolCodeId: data[i].toolCodeId, toolCode: data[i].toolCode, chineseName: data[i].chineseName, toolModel: data[i].toolModel, applicationType: data[i].applicationTypeName, - unitName: data[i].unitName || data[i].unitId_dictText, onlyCode:data[i].onlyCode, - noAccountQuantity:data[i].noAccountQuantity, - inStorageQuantity:data[i].storageQuantity + inStorageQuantity:data[i].storageQuantity || data[i].quantity || 1, + quantity:data[i].quantity, + accuracyClass:data[i].accuracyClass }) } //this.ipaginationm.total = this.dataSource.length -- Gitblit v1.9.3