From c95e7e5af5e80d6603b8dfc922201079b27b9056 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期二, 09 九月 2025 19:29:03 +0800 Subject: [PATCH] art: 上料列表、新增页面 --- src/views/mes/MesMaterialLoadingList.vue | 335 ++++++++++++++++----------------- src/views/mes/modules/MesMaterialLoadingForm.vue | 263 ++++++++++++++++---------- 2 files changed, 321 insertions(+), 277 deletions(-) diff --git a/src/views/mes/MesMaterialLoadingList.vue b/src/views/mes/MesMaterialLoadingList.vue index 3a27577..cedc37d 100644 --- a/src/views/mes/MesMaterialLoadingList.vue +++ b/src/views/mes/MesMaterialLoadingList.vue @@ -4,6 +4,44 @@ <div class="table-page-search-wrapper"> <a-form layout="inline" @keyup.enter.native="searchQuery"> <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="浜х嚎"> + <j-dict-select-tag placeholder="璇烽�夋嫨浜х嚎" v-model="queryParam.factoryId" + dictCode="base_factory,factory_name,id,del_flag=0 and factory_category='3'"></j-dict-select-tag> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="绫诲瀷"> + <j-search-select-tag placeholder="璇烽�夋嫨绫诲瀷" v-model="queryParam.category" :dict-options="categoryDictOptions"></j-search-select-tag> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鐗╂枡缂栫爜"> + <j-input placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" v-model="queryParam.materialNumber"></j-input> + </a-form-item> + </a-col> + <template v-if="toggleSearchStatus"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鐗╂枡鍚嶇О"> + <j-input placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" v-model="queryParam.materialName"></j-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鎵规鍙�"> + <j-input placeholder="璇疯緭鍏ユ壒娆″彿" v-model="queryParam.batchNumber"></j-input> + </a-form-item> + </a-col> + </template> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px"> + {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + </a> + </span> + </a-col> </a-row> </a-form> </div> @@ -11,25 +49,14 @@ <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> <div class="table-operator"> - <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> - <a-button type="primary" icon="download" @click="handleExportXls('涓婃枡')">瀵煎嚭</a-button> - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> - <a-button type="primary" icon="import">瀵煎叆</a-button> - </a-upload> - <!-- 楂樼骇鏌ヨ鍖哄煙 --> - <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query> - <a-dropdown v-if="selectedRowKeys.length > 0"> - <a-menu slot="overlay"> - <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> - </a-menu> - <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> - </a-dropdown> + <a-button @click="handleAdd" type="primary" icon="plus">涓婃枡</a-button> </div> <!-- table鍖哄煙-begin --> <div> <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a + style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> </div> @@ -46,46 +73,19 @@ :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" class="j-table-force-nowrap" @change="handleTableChange"> - - <template slot="htmlSlot" slot-scope="text"> - <div v-html="text"></div> - </template> - <template slot="imgSlot" slot-scope="text,record"> - <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> - <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> - </template> - <template slot="fileSlot" slot-scope="text"> - <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> - <a-button - v-else - :ghost="true" - type="primary" - icon="download" - size="small" - @click="downloadFile(text)"> - 涓嬭浇 - </a-button> - </template> - - <span slot="action" slot-scope="text, record"> - <a @click="handleEdit(record)">缂栬緫</a> - - <a-divider type="vertical" /> - <a-dropdown> - <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> - <a-menu slot="overlay"> - <a-menu-item> - <a @click="handleDetail(record)">璇︽儏</a> - </a-menu-item> - <a-menu-item> - <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> - <a>鍒犻櫎</a> - </a-popconfirm> - </a-menu-item> - </a-menu> - </a-dropdown> + <span slot="categorySlot" slot-scope="text, record"> + <a-tag color="orange" v-if="record.category === 'LOADING'">涓婃枡</a-tag> + <a-tag color="blue" v-else-if="record.category === 'UNLOADING'">涓嬫枡</a-tag> </span> - + <span slot="unloadingFlagSlot" slot-scope="text, record"> + <a-tag color="green" v-if="record.unloadingFlag === '0'">姝e父</a-tag> + <a-tag color="red" v-else-if="record.unloadingFlag === '1'">宸蹭笅鏂�</a-tag> + </span> + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">涓嬫枡</a> + <a-divider type="vertical" /> + <a @click="handleDetail(record)">璇︽儏</a> + </span> </a-table> </div> @@ -95,131 +95,118 @@ <script> - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import MesMaterialLoadingModal from './modules/MesMaterialLoadingModal' +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import MesMaterialLoadingModal from './modules/MesMaterialLoadingModal' - export default { - name: 'MesMaterialLoadingList', - mixins:[JeecgListMixin, mixinDevice], - components: { - MesMaterialLoadingModal - }, - data () { - return { - description: '涓婃枡绠$悊椤甸潰', - // 琛ㄥご - columns: [ - { - title: '#', - dataIndex: '', - key:'rowIndex', - width:60, - align:"center", - customRender:function (t,r,index) { - return parseInt(index)+1; - } - }, - { - title:'鍒犻櫎鏍囪', - align:"center", - dataIndex: 'delFlag' - }, - { - title:'宸ュ崟ID', - align:"center", - dataIndex: 'workOrderId' - }, - { - title:'璁惧ID', - align:"center", - dataIndex: 'equipmentId' - }, - { - title:'宸ュ簭缂栫爜', - align:"center", - dataIndex: 'processCode' - }, - { - title:'宸ュ簭鍚嶇О', - align:"center", - dataIndex: 'processName' - }, - { - title:'鐗╂枡缂栫爜', - align:"center", - dataIndex: 'materialNumber' - }, - { - title:'鐗╂枡鍚嶇О', - align:"center", - dataIndex: 'materialName' - }, - { - title:'鎵规鍙�', - align:"center", - dataIndex: 'batchNumber' - }, - { - title:'鏁伴噺', - align:"center", - dataIndex: 'quantity' - }, - { - title:'鍓╀綑鏁伴噺', - align:"center", - dataIndex: 'remainingQuantity' - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - align:"center", - fixed:"right", - width:147, - scopedSlots: { customRender: 'action' } - } - ], - url: { - list: "/mes/mesMaterialLoading/list", - delete: "/mes/mesMaterialLoading/delete", - deleteBatch: "/mes/mesMaterialLoading/deleteBatch", - exportXlsUrl: "/mes/mesMaterialLoading/exportXls", - importExcelUrl: "mes/mesMaterialLoading/importExcel", - +export default { + name: 'MesMaterialLoadingList', + mixins: [JeecgListMixin, mixinDevice], + components: { + MesMaterialLoadingModal + }, + data() { + return { + description: '涓婃枡绠$悊椤甸潰', + categoryDictOptions: [ + { + value: 'LOADING', + text: '涓婃枡' }, - dictOptions:{}, - superFieldList:[], - } - }, - created() { - this.getSuperFieldList(); - }, - computed: { - importExcelUrl: function(){ - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - }, - }, - methods: { - initDictConfig(){ - }, - getSuperFieldList(){ - let fieldList=[]; - fieldList.push({type:'int',value:'delFlag',text:'鍒犻櫎鏍囪',dictCode:''}) - fieldList.push({type:'string',value:'workOrderId',text:'宸ュ崟ID',dictCode:''}) - fieldList.push({type:'string',value:'equipmentId',text:'璁惧ID',dictCode:''}) - fieldList.push({type:'string',value:'processCode',text:'宸ュ簭缂栫爜',dictCode:''}) - fieldList.push({type:'string',value:'processName',text:'宸ュ簭鍚嶇О',dictCode:''}) - fieldList.push({type:'string',value:'materialNumber',text:'鐗╂枡缂栫爜',dictCode:''}) - fieldList.push({type:'string',value:'materialName',text:'鐗╂枡鍚嶇О',dictCode:''}) - fieldList.push({type:'string',value:'batchNumber',text:'鎵规鍙�',dictCode:''}) - fieldList.push({type:'double',value:'quantity',text:'鏁伴噺',dictCode:''}) - fieldList.push({type:'double',value:'remainingQuantity',text:'鍓╀綑鏁伴噺',dictCode:''}) - this.superFieldList = fieldList + { + value: 'UNLOADING', + text: '涓嬫枡' + }, + ], + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '浜х嚎', + align: 'center', + dataIndex: 'factoryId_dictText' + }, + { + title: '绾胯竟搴�', + align: 'center', + dataIndex: 'warehouseId_dictText' + }, + { + title: '鐗╂枡缂栫爜', + align: 'center', + dataIndex: 'materialNumber' + }, + { + title: '鐗╂枡鍚嶇О', + align: 'center', + dataIndex: 'materialName' + }, + { + title: '鎵规鍙�', + align: 'center', + dataIndex: 'batchNumber' + }, + { + title: '鏁伴噺', + align: 'center', + dataIndex: 'quantity' + }, + { + title: '鍓╀綑鏁伴噺', + align: 'center', + dataIndex: 'remainingQuantity' + }, + { + title: '閽㈢悆灏哄', + align: 'center', + dataIndex: 'steelBallSize_dictText' + }, + { + title: '绫诲瀷', + align: 'center', + dataIndex: 'category', + scopedSlots: { + customRender: 'categorySlot' + }, + }, + { + title: '涓嬫枡鏍囪', + align: 'center', + dataIndex: 'unloadingFlag', + scopedSlots: { + customRender: 'unloadingFlagSlot' + }, + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + fixed: 'right', + width: 147, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/mes/mesMaterialLoading/list' } } - } + }, + created() { + }, + computed: {}, + methods: {} +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/src/views/mes/modules/MesMaterialLoadingForm.vue b/src/views/mes/modules/MesMaterialLoadingForm.vue index 45114de..2b7e5cd 100644 --- a/src/views/mes/modules/MesMaterialLoadingForm.vue +++ b/src/views/mes/modules/MesMaterialLoadingForm.vue @@ -4,43 +4,29 @@ <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> <a-row> <a-col :span="12"> - <a-form-model-item label="鍒犻櫎鏍囪" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag"> - <a-input-number v-model="model.delFlag" placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" style="width: 100%" /> - </a-form-model-item> - </a-col> - <a-col :span="12"> - <a-form-model-item label="宸ュ崟ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workOrderId"> - <a-input v-model="model.workOrderId" placeholder="璇疯緭鍏ュ伐鍗旾D" ></a-input> - </a-form-model-item> - </a-col> - <a-col :span="12"> - <a-form-model-item label="璁惧ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId"> - <a-input v-model="model.equipmentId" placeholder="璇疯緭鍏ヨ澶嘔D" ></a-input> - </a-form-model-item> - </a-col> - <a-col :span="12"> - <a-form-model-item label="宸ュ簭缂栫爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processCode"> - <a-input v-model="model.processCode" placeholder="璇疯緭鍏ュ伐搴忕紪鐮�" ></a-input> - </a-form-model-item> - </a-col> - <a-col :span="12"> - <a-form-model-item label="宸ュ簭鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processName"> - <a-input v-model="model.processName" placeholder="璇疯緭鍏ュ伐搴忓悕绉�" ></a-input> + <a-form-model-item label="浜х嚎" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="factoryId"> + <j-search-select-tag placeholder="璇烽�夋嫨浜х嚎" v-model="model.factoryId" + dict="base_factory,factory_name,id,del_flag=0 and factory_category='3'" + @change="factorySelectChange"></j-search-select-tag> </a-form-model-item> </a-col> <a-col :span="12"> <a-form-model-item label="鐗╂枡缂栫爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialNumber"> - <a-input v-model="model.materialNumber" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" ></a-input> + <j-search-select-tag v-model="model.materialNumber" placeholder="璇烽�夋嫨鐗╂枡缂栫爜" + :dict-options="materialNumberDictOptions" + @change="materialNumberSelectChange"></j-search-select-tag> </a-form-model-item> </a-col> <a-col :span="12"> <a-form-model-item label="鐗╂枡鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialName"> - <a-input v-model="model.materialName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" ></a-input> + <a-input v-model="model.materialName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" readOnly></a-input> </a-form-model-item> </a-col> <a-col :span="12"> <a-form-model-item label="鎵规鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="batchNumber"> - <a-input v-model="model.batchNumber" placeholder="璇疯緭鍏ユ壒娆″彿" ></a-input> + <j-search-select-tag v-model="model.batchNumber" placeholder="璇烽�夋嫨鎵规鍙�" + :dict-options="batchNumberDictOptions" + @change="batchNumberSelectChange"></j-search-select-tag> </a-form-model-item> </a-col> <a-col :span="12"> @@ -48,9 +34,10 @@ <a-input-number v-model="model.quantity" placeholder="璇疯緭鍏ユ暟閲�" style="width: 100%" /> </a-form-model-item> </a-col> - <a-col :span="12"> - <a-form-model-item label="鍓╀綑鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remainingQuantity"> - <a-input-number v-model="model.remainingQuantity" placeholder="璇疯緭鍏ュ墿浣欐暟閲�" style="width: 100%" /> + <a-col :span="12" v-if="materialCategory === 'STEEL_BALL'"> + <a-form-model-item label="閽㈢悆灏哄" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="steelBallSize"> + <j-search-select-tag v-model="model.steelBallSize" placeholder="璇烽�夋嫨閽㈢悆灏哄" dict="steel_ball_size" + style="width: 100%" /> </a-form-model-item> </a-col> </a-row> @@ -61,89 +48,159 @@ <script> - import { httpAction, getAction } from '@/api/manage' - import { validateDuplicateValue } from '@/utils/util' +import { httpAction, getAction } from '@/api/manage' +import { validateDuplicateValue } from '@/utils/util' - export default { - name: 'MesMaterialLoadingForm', - components: { - }, - props: { - //琛ㄥ崟绂佺敤 - disabled: { - type: Boolean, - default: false, - required: false +export default { + name: 'MesMaterialLoadingForm', + components: {}, + props: { + //琛ㄥ崟绂佺敤 + disabled: { + type: Boolean, + default: false, + required: false + } + }, + data() { + return { + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + confirmLoading: false, + validatorRules: { + factoryId: [ + { required: true, message: '浜х嚎鏄繀閫夐」', trigger: 'change' } + ], + materialNumber: [ + { required: true, message: '鐗╂枡缂栫爜鏄繀濉」', trigger: 'change' } + ], + materialName: [ + { required: true, message: '鐗╂枡鍚嶇О鏄繀濉」', trigger: 'change' } + ], + batchNumber: [ + { required: true, message: '鎵规鍙锋槸蹇呴�夐」', trigger: 'change' } + ], + quantity: [ + { required: true, message: '鏁伴噺鏄繀濉」', trigger: 'change' } + ], + steelBallSize: [ + { required: false, message: '閽㈢悆灏哄鏄繀濉」', trigger: 'change' } + ] + }, + materialCategory: undefined, + batchNumberDictOptions: [], + inventoryList: [], + url: { + add: '/mes/mesMaterialLoading/add', + edit: '/mes/mesMaterialLoading/edit', + queryById: '/mes/mesMaterialLoading/queryById', + queryMaterialInventory: '/lsw/materialInventory/queryMaterialInventory' } + } + }, + computed: { + formDisabled() { + return this.disabled }, - data () { - return { - model:{ - }, - labelCol: { - xs: { span: 24 }, - sm: { span: 5 }, - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 16 }, - }, - confirmLoading: false, - validatorRules: { - }, - url: { - add: "/mes/mesMaterialLoading/add", - edit: "/mes/mesMaterialLoading/edit", - queryById: "/mes/mesMaterialLoading/queryById" + materialNumberDictOptions() { + let materialNumberArr = new Set() + let materialNumberOptions = [] + for (let item of this.inventoryList) { + if (!materialNumberArr.has(item.materialNumber)) { + materialNumberOptions.push({ + value: item.materialNumber, + text: item.materialNumber + '(' + item.materialName + ')', + materialCategory: item.materialCategory, + materialName: item.materialName + }) + materialNumberArr.add(item.materialNumber) } } + return materialNumberOptions + } + }, + created() { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)) + }, + methods: { + add() { + this.edit(this.modelDefault) }, - computed: { - formDisabled(){ - return this.disabled - }, + edit(record) { + this.model = Object.assign({}, record) + this.visible = true }, - created () { - //澶囦唤model鍘熷鍊� - this.modelDefault = JSON.parse(JSON.stringify(this.model)); - }, - methods: { - add () { - this.edit(this.modelDefault); - }, - edit (record) { - this.model = Object.assign({}, record); - this.visible = true; - }, - submitForm () { - const that = this; - // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.$refs.form.validate(valid => { - if (valid) { - that.confirmLoading = true; - let httpurl = ''; - let method = ''; - if(!this.model.id){ - httpurl+=this.url.add; - method = 'post'; - }else{ - httpurl+=this.url.edit; - method = 'put'; - } - httpAction(httpurl,this.model,method).then((res)=>{ - if(res.success){ - that.$message.success(res.message); - that.$emit('ok'); - }else{ - that.$message.warning(res.message); - } - }).finally(() => { - that.confirmLoading = false; - }) + submitForm() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + let httpurl = '' + let method = '' + if (!this.model.id) { + httpurl += this.url.add + method = 'post' + } else { + httpurl += this.url.edit + method = 'put' } - - }) - }, + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } + + }) + }, + factorySelectChange(val) { + getAction(this.url.queryMaterialInventory, { factoryId: val }).then((res) => { + if (res.success) { + this.inventoryList = res.result.map(item => ({ ...item })) + } + }) + }, + materialNumberSelectChange(val) { + let option = this.materialNumberDictOptions.find(item => item.value === val) + if (option) { + this.model.materialName = option.materialName + this.materialCategory = option.materialCategory + let map = this.inventoryList.filter(item => item.materialNumber === val).map(item => ({ + value: item.batchNumber, + text: item.batchNumber, + quantity: item.quantity + })) + this.batchNumberDictOptions = [...map] + this.validatorRules.steelBallSize[0].required = true + } else { + this.model.materialName = '' + this.materialCategory = undefined + this.batchNumberDictOptions = [] + this.validatorRules.steelBallSize[0].required = false + } + }, + batchNumberSelectChange(val) { + let option = this.batchNumberDictOptions.find(item => item.value === val) + if (option) { + this.model.quantity = option.quantity + } else { + this.model.quantity = null + } } } +} </script> \ No newline at end of file -- Gitblit v1.9.3