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