From 31c934ffa51796508fb4d16ad2b135636a085905 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期四, 12 十二月 2024 10:59:57 +0800 Subject: [PATCH] 1、计划与非计划管理页面查询区域日期选择器改为日期范围选择器 2、新增零件加工管理页面及完成相关功能 --- src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingForm.vue | 191 +++++++++++++++++++ src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingModal.vue | 64 ++++++ src/views/mdc/base/modules/MdcPlanCloseManagement/MdcPlanCloseList.vue | 3 src/views/mdc/base/modules/MdcUnplannedCloseManagement/MdcUnplannedCloseList.vue | 3 src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingList.vue | 322 ++++++++++++++++++++++++++++++++ 5 files changed, 579 insertions(+), 4 deletions(-) diff --git a/src/views/mdc/base/modules/MdcPlanCloseManagement/MdcPlanCloseList.vue b/src/views/mdc/base/modules/MdcPlanCloseManagement/MdcPlanCloseList.vue index 1769d5b..9fdef5c 100644 --- a/src/views/mdc/base/modules/MdcPlanCloseManagement/MdcPlanCloseList.vue +++ b/src/views/mdc/base/modules/MdcPlanCloseManagement/MdcPlanCloseList.vue @@ -17,8 +17,7 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="鏃ユ湡"> - <a-range-picker v-model="dates" format="YYYY-MM-DD" style="width: 100%" - @change="dateParamChange"></a-range-picker> + <a-range-picker v-model="dates" style="width: 100%" @change="dateParamChange"></a-range-picker> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> diff --git a/src/views/mdc/base/modules/MdcUnplannedCloseManagement/MdcUnplannedCloseList.vue b/src/views/mdc/base/modules/MdcUnplannedCloseManagement/MdcUnplannedCloseList.vue index 54efec4..0626f74 100644 --- a/src/views/mdc/base/modules/MdcUnplannedCloseManagement/MdcUnplannedCloseList.vue +++ b/src/views/mdc/base/modules/MdcUnplannedCloseManagement/MdcUnplannedCloseList.vue @@ -17,8 +17,7 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="鏃ユ湡"> - <a-range-picker v-model="dates" format="YYYY-MM-DD" style="width: 100%" - @change="dateParamChange"></a-range-picker> + <a-range-picker v-model="dates" style="width: 100%" @change="dateParamChange"></a-range-picker> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> diff --git a/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingForm.vue b/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingForm.vue new file mode 100644 index 0000000..444bae8 --- /dev/null +++ b/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingForm.vue @@ -0,0 +1,191 @@ +<template> + <a-spin :spinning="confirmLoading"> + <j-form-container :disabled="formDisabled"> + <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> + <a-row> + <a-col :span="24"> + <a-form-model-item label="璁惧缁�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentIds"> + <a-input-search :readOnly="true" v-model="model.equipmentIds" + @search="deviceSearch" :disabled="disableSelectDevice" enter-button + placeholder="璇烽�夋嫨璁惧"></a-input-search> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="闆朵欢鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="partId"> + <a-input placeholder="璇疯緭鍏ラ浂浠跺彿" v-model="model.partId" allowClear/> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鏍囧噯鍔犲伐宸ユ椂(min)" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="standardProcessLong"> + <a-input-number :min="0" placeholder="璇疯緭鍏ユ爣鍑嗗姞宸ュ伐鏃�(min)" v-model="model.standardProcessLong" + @change="inputNumberChange"/> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鍔犲伐闆朵欢鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="processCount"> + <a-input-number :min="0" v-model="model.processCount" placeholder="璇疯緭鍏ュ姞宸ラ浂浠舵暟閲�" + @change="inputNumberChange"></a-input-number> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鍚堟牸闆朵欢鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="passCount"> + <a-input-number :min="0" v-model="model.passCount" placeholder="璇疯緭鍏ュ悎鏍奸浂浠舵暟閲�"></a-input-number> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鍔犲伐鎬绘椂闀�" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-input v-model="model.totalProcessLong" placeholder="鍔犲伐闆朵欢鏁伴噺 X 鏍囧噯鍔犲伐宸ユ椂" readOnly></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鏃ユ湡" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="theDate"> + <a-date-picker v-model="model.theDate" :disabled="disabled" format="YYYY-MM-DD" + value-format="YYYY-MM-DD" style="width: 100%"></a-date-picker> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </j-form-container> + + <select-device-drawer ref="selectDeviceDrawer" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> + </a-spin> +</template> + +<script> + import { httpAction, getAction } from '@/api/manage' + import SelectDeviceDrawer from '@/views/system/modules/SelectDeviceDrawer' + + export default { + name: 'PartsMatchingForm', + components: { SelectDeviceDrawer }, + props: { + //琛ㄥ崟绂佺敤 + disabled: { + type: Boolean, + default: false, + required: false + }, + disableSelectDevice: { + type: Boolean, + default: false + } + }, + data() { + return { + model: { + passCount: 0 + }, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + confirmLoading: false, + validatorRules: { + equipmentIds: [ + { required: true, message: '璇烽�夋嫨璁惧!' } + ], + partId: [ + { required: true, message: '璇疯緭鍏ラ浂浠跺彿!' } + ], + standardProcessLong: [ + { required: true, message: '璇疯緭鍏ユ爣鍑嗗姞宸ュ伐鏃�(min)!' } + ], + processCount: [ + { required: true, message: '璇疯緭鍏ュ姞宸ラ浂浠舵暟閲�!' } + ], + passCount: [ + { required: true, message: '璇疯緭鍏ュ悎鏍奸浂浠舵暟閲�!' } + ], + theDate: [ + { required: true, message: '璇烽�夋嫨鏃ユ湡!' } + ] + }, + url: { + add: '/mdc/mdcPartProcessInfo/add', + edit: '/mdc/mdcPartProcessInfo/edit' + } + } + }, + computed: { + formDisabled() { + return this.disabled + } + }, + created() { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)) + }, + methods: { + add() { + this.edit(this.modelDefault) + }, + edit(record) { + this.model = Object.assign({}, { equipmentIds: record.equipmentId }, record) + console.log('model', this.model) + this.visible = true + }, + inputNumberChange() { + if (this.model.standardProcessLong && this.model.processCount) { + this.model.totalProcessLong = this.model.standardProcessLong * this.model.processCount + } + }, + submitForm() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + let httpUrl = '' + let method = 'post' + if (!this.model.id) { + httpUrl += this.url.add + } else { + httpUrl += this.url.edit + } + httpAction(httpUrl, this.model, method).then((res) => { + if (res.success) { + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.$emit('ok') + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }).finally(() => { + that.confirmLoading = false + }) + } + + }) + }, + deviceSearch() { + this.$refs.selectDeviceDrawer.visible = true + this.$refs.selectDeviceDrawer.selectedRowKeys = [] + this.$refs.selectDeviceDrawer.selectedRows = [] + this.$refs.selectDeviceDrawer.checkedKeys = this.model.equipmentIds ? this.model.equipmentIds.split(',') : [] + }, + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶� + */ + selectOK(data) { + this.$set(this.model, 'equipmentIds', data.join(',')) + if (this.model.equipmentIds) this.$refs.form.clearValidate('equipmentIds') + } + } + } +</script> +<style scoped lang="less"> + /deep/ .ant-input-number { + width: 100% !important; + } +</style> \ No newline at end of file diff --git a/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingList.vue b/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingList.vue new file mode 100644 index 0000000..0c0e4fc --- /dev/null +++ b/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingList.vue @@ -0,0 +1,322 @@ +<template> + <div class="device_list"> + <!-- 鏌ヨ鍖哄煙 --> + <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="璁惧缂栧彿"> + <a-input placeholder="璇疯緭鍏ヨ澶囩紪鍙�" v-model="queryParam.equipmentId" allowClear/> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="闆朵欢鍙�"> + <a-input placeholder="璇疯緭鍏ラ浂浠跺彿" v-model="queryParam.partId" allowClear/> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鏃ユ湡"> + <a-range-picker v-model="dates" style="width: 100%" @change="dateParamChange"></a-range-picker> + </a-form-item> + </a-col> + <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="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <a-button type="primary" icon="download" @click="importTemplate('闆朵欢鍔犲伐绠$悊')">瀵煎叆妯℃澘</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> + + <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> + </div> + + <!-- table鍖哄煙-begin --> + <div id="DeviceList" style="flex: 1;overflow: hidden"> + <a-table + id="planClose" + ref="table" + size="middle" + :scroll="{x:'max-content',y:scrollY}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + class="j-table-force-nowrap" + @change="handleTableChange"> + + <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> + + </a-table> + </div> + + <PartsMatchingModal ref="modalForm" @ok="modalFormOk"/> + </div> +</template> + +<script> + import moment from 'moment' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import PartsMatchingModal from './PartsMatchingModal' + + export default { + name: 'PartsMatchingList', + mixins: [JeecgListMixin], + components: { + PartsMatchingModal + }, + props: { nodeTree: '', Type: '', nodePeople: '' }, + data() { + return { + description: 'partsMatching绠$悊椤甸潰', + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 30, + pageSizeOptions: ['30', '50', '100'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + queryParam: {}, + disableMixinCreated: true, + dates: [moment().subtract(1, 'day'), moment()], + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '鏃ユ湡', + align: 'center', + dataIndex: 'theDate', + width: 200 + }, + { + title: '璁惧缂栧彿', + align: 'center', + dataIndex: 'equipmentId', + width: 230 + }, + { + title: '闆朵欢鍙�', + align: 'center', + dataIndex: 'partId', + width: 150 + }, + { + title: '鏍囧噯鍔犲伐宸ユ椂(min)', + align: 'center', + dataIndex: 'standardProcessLong', + width: 150 + }, + { + title: '鍔犲伐闆朵欢鏁伴噺', + align: 'center', + dataIndex: 'processCount', + width: 150 + }, + { + title: '鍚堟牸闆朵欢鏁伴噺', + align: 'center', + dataIndex: 'passCount', + width: 150 + }, + { + title: '鍔犲伐鎬绘椂闀�', + align: 'center', + dataIndex: 'totalProcessLong', + width: 150 + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + fixed: 'right', + width: 150, + scopedSlots: { customRender: 'action' } + } + ], + scrollY: 465, + url: { + list: '/mdc/mdcPartProcessInfo/list', + delete: '/mdc/mdcPartProcessInfo/delete', + deleteBatch: '/mdc/mdcPartProcessInfo/deleteBatch', + exportXlsUrl: '/mdc/mdcPartProcessInfo/exportXls', + importExcelUrl: '/mdc/mdcPartProcessInfo/importExcel' + }, + } + }, + watch: { + Type(valmath) { + this.dataList = [] + this.queryParam.typeTree = valmath + // console.log(this.queryParam.typeTree) + }, + nodeTree(val) { //鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢 + if (JSON.stringify(val) != '{}') { + if (val.equipmentId) { + this.queryParam.parentId = '' + this.queryParam.equipmentId = val.equipmentId + } else { + this.queryParam.parentId = val.key + this.queryParam.equipmentId = '' + } + this.searchQuery() + } + }, + nodePeople(val) { + if (JSON.stringify(val) != '{}') { + if (val.equipmentId) { + this.queryParam.parentId = '' + this.queryParam.equipmentId = val.equipmentId + } else { + this.queryParam.parentId = val.key + this.queryParam.equipmentId = '' + } + this.searchQuery() + } + } + }, + computed: { + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` + } + }, + methods: { + dateParamChange(v1, v2) { + this.queryParam.startTime = v2[0] + this.queryParam.endTime = v2[1] + this.dates = [v1[0], v1[1]] + }, + importTemplate(fileName) { + var a = document.createElement('a') + a.href = `/static/${fileName}.xls` + a.download = `${fileName}.xls` + a.style.display = 'none' + document.body.appendChild(a) + a.click() + a.remove() + }, + searchReset() { + this.dates = [moment().subtract(1, 'day'), moment()] + this.queryParam = { + startTime: this.dates[0].format('YYYY-MM-DD'), + endTime: this.dates[1].format('YYYY-MM-DD') + } + this.loadData(1) + }, + /** + * 褰撴祻瑙堝櫒鍙绐楀彛灏哄鍙戠敓鏀瑰彉鏃惰Е鍙� + */ + handleWindowResize() { + const boxHeight = +window.getComputedStyle(document.getElementById('DeviceList')).height.slice(0, -2) + const tableHeadHeight = +window.getComputedStyle(document.querySelector('.ant-table-thead th')).height.slice(0, -2) + this.scrollY = boxHeight - tableHeadHeight - 50 + } + }, + created() { + this.queryParam.startTime = this.dates[0].format('YYYY-MM-DD') + this.queryParam.endTime = this.dates[1].format('YYYY-MM-DD') + this.loadData() + }, + mounted() { + window.addEventListener('resize', this.handleWindowResize) + this.handleWindowResize() + }, + beforeDestroy() { + window.removeEventListener('resize', this.handleWindowResize) + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; + + .device_list { + display: flex; + flex-direction: column; + overflow: hidden; + } + + @media screen and (min-width: 1920px) { + .device_list { + height: 811px !important; + } + } + + @media screen and (min-width: 1680px) and (max-width: 1920px) { + .device_list { + height: 811px !important; + } + } + + @media screen and (min-width: 1400px) and (max-width: 1680px) { + .device_list { + height: 663px !important; + } + } + + @media screen and (min-width: 1280px) and (max-width: 1400px) { + .device_list { + height: 564px !important; + } + } + + @media screen and (max-width: 1280px) { + .device_list { + height: 564px !important; + } + } +</style> \ No newline at end of file diff --git a/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingModal.vue b/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingModal.vue new file mode 100644 index 0000000..704d338 --- /dev/null +++ b/src/views/mdc/base/modules/PartsMatchingManagement/PartsMatchingModal.vue @@ -0,0 +1,64 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + switchFullscreen + @ok="handleOk" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <PartsMatchingForm ref="realForm" @ok="submitCallback" :disabled="disableSubmit" + :disableSelectDevice="disableSelectDevice"/> + </j-modal> +</template> + +<script> + import PartsMatchingForm from './PartsMatchingForm' + + export default { + name: 'PartsMatchingModal', + components: { + PartsMatchingForm + }, + data() { + return { + title: '', + width: 800, + visible: false, + disableSubmit: false, + disableSelectDevice: false + } + }, + methods: { + add() { + this.visible = true + this.disableSelectDevice = false + this.$nextTick(() => { + this.$refs.realForm.add() + }) + }, + edit(record) { + this.visible = true + this.disableSelectDevice = true + this.$nextTick(() => { + this.$refs.realForm.edit(record) + }) + }, + close() { + this.$emit('close') + this.visible = false + }, + handleOk() { + this.$refs.realForm.submitForm() + }, + submitCallback() { + this.$emit('ok') + this.visible = false + }, + handleCancel() { + this.close() + } + } + } +</script> \ No newline at end of file -- Gitblit v1.9.3