From 86c49515065de7729e5b2aa17f1e260d3c4f3669 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期四, 03 四月 2025 17:08:39 +0800
Subject: [PATCH] art: 设备管理-周保-基础代码提交

---
 src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue     |    1 
 src/views/eam/maintenance/modules/EamWeekMaintenanceOrderModal.vue |  291 ++++++++++++++++++++++++++++++++
 src/views/system/modules/SysBusinessCodeRuleModal.vue              |   10 
 src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue          |  208 +++++++++++++++++++++++
 4 files changed, 507 insertions(+), 3 deletions(-)

diff --git a/src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue b/src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue
index 733d4f6..55c9a6a 100644
--- a/src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue
+++ b/src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue
@@ -93,6 +93,7 @@
                 label: res.result[0].text
               }
               this.selectedAsyncValue = { ...obj }
+              this.$emit('autocompleteForm', res.result[0])
             }
             this.options = res.result
           }
diff --git a/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue b/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue
new file mode 100644
index 0000000..612ae38
--- /dev/null
+++ b/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue
@@ -0,0 +1,208 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 鏌ヨ鍖哄煙 -->
+    <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.orderNum"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="璁惧缂栧彿">
+              <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="queryParam.equipmentId"></lx-search-equipment-select>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="淇濆吇鏃ユ湡">
+              <a-date-picker placeholder="璇烽�夋嫨淇濆吇鏃ユ湡" v-model="queryParam.maintenanceDate" format="YYYY-MM-DD" style="width: 100%"/>
+            </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="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      <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>
+      <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>椤�
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        class="j-table-force-nowrap"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @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-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table鍖哄煙-end -->
+
+    <!-- 琛ㄥ崟鍖哄煙 -->
+    <eamWeekMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"></eamWeekMaintenanceOrder-modal>
+  </a-card>
+</template>
+
+<script>
+import '@/assets/less/TableExpand.less'
+import EamWeekMaintenanceOrderModal from './modules/EamWeekMaintenanceOrderModal'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
+
+export default {
+  name: 'EamWeekMaintenanceOrderList',
+  mixins: [JeecgListMixin],
+  components: {
+    LxSearchEquipmentSelect,
+    EamWeekMaintenanceOrderModal
+  },
+  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: 'orderNum'
+        },
+        {
+          title: '璁惧ID',
+          align: 'center',
+          dataIndex: 'equipmentId'
+        },
+        {
+          title: '鏍囧噯ID',
+          align: 'center',
+          dataIndex: 'standardId'
+        },
+        {
+          title: '璁″垝鎵ц鏃ユ湡',
+          align: 'center',
+          dataIndex: 'maintenanceDate'
+        },
+        {
+          title: '瀹為檯寮�濮嬫椂闂�',
+          align: 'center',
+          dataIndex: 'actualStartTime'
+        },
+        {
+          title: '瀹為檯缁撴潫鏃堕棿',
+          align: 'center',
+          dataIndex: 'actualEndTime'
+        },
+        {
+          title: '淇濆吇浜�',
+          align: 'center',
+          dataIndex: 'operator'
+        },
+        {
+          title: '淇濆吇鐘舵��',
+          align: 'center',
+          dataIndex: 'maintenanceStatus'
+        },
+        {
+          title: '鍒涘缓鏂瑰紡',
+          align: 'center',
+          dataIndex: 'creationMethod'
+        },
+        {
+          title: '纭浜�',
+          align: 'center',
+          dataIndex: 'confirmUser'
+        },
+        {
+          title: '纭鏃堕棿',
+          align: 'center',
+          dataIndex: 'confirmTime'
+        },
+        {
+          title: '淇濆吇鎵ц鍥剧墖;id浠ラ�楀彿鍒嗛殧',
+          align: 'center',
+          dataIndex: 'imageFiles'
+        },
+        {
+          title: '澶囨敞',
+          align: 'center',
+          dataIndex: 'remark'
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/eam/weekMaintenanceOrder/list',
+        delete: '/eam/weekMaintenanceOrder/delete',
+        deleteBatch: '/eam/weekMaintenanceOrder/deleteBatch'
+      }
+    }
+  },
+  computed: {},
+  methods: {}
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/eam/maintenance/modules/EamWeekMaintenanceOrderModal.vue b/src/views/eam/maintenance/modules/EamWeekMaintenanceOrderModal.vue
new file mode 100644
index 0000000..8dee667
--- /dev/null
+++ b/src/views/eam/maintenance/modules/EamWeekMaintenanceOrderModal.vue
@@ -0,0 +1,291 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="1200"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row :gutter="24">
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNum" label="宸ュ崟鍙�">
+              <a-input placeholder="宸ュ崟鍙风郴缁熻嚜鍔ㄧ敓鎴�" v-model="model.orderNum" disabled />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栫爜">
+              <maintenance-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId"
+                                            :maintenanceCategory="maintenanceCategory"
+                                            @autocompleteForm="autocompleteForm"></maintenance-equipment-select>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="鏍囧噯鍚嶇О">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.standardName" disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceDate" label="淇濆吇鏃ユ湡">
+              <a-date-picker placeholder="璇烽�夋嫨淇濆吇鏃ユ湡" v-model="model.maintenanceDate" format="YYYY-MM-DD"
+                             style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="淇濆吇浜�">
+              <j-dict-select-tag v-model="model.operator" placeholder="璇烽�夋嫨淇濆吇浜�"
+                                 dictCode="sys_user,realname,username,username!='admin' order by create_time" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.maintenancePeriod" disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="澶囨敞">
+            <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
+          </a-form-model-item>
+        </a-row>
+        <a-row :gutter="24">
+          <j-vxe-table
+            ref="editableDetailTable"
+            :rowNumber="true"
+            :rowSelection="true"
+            :bordered="true"
+            :alwaysEdit="true"
+            :toolbar="true"
+            :toolbarConfig="detail.toolbarConfig"
+            keep-source
+            :height="300"
+            :loading="detail.loading"
+            :dataSource="detail.dataSource"
+            :columns="detail.columns"
+            style="margin-top: 8px;" />
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+import { getAction, httpAction } from '@/api/manage'
+import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
+import { JVXETypes } from '@comp/jeecg/JVxeTable'
+import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
+
+export default {
+  name: 'EamWeekMaintenanceOrderModal',
+  mixins: [JVxeTableModelMixin],
+  components: {
+    MaintenanceEquipmentSelect
+  },
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      editable: false,
+      model: {},
+      maintenanceCategory: 'WEEK_MAINTENANCE',
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+      labelColLong: {
+        xs: { span: 24 },
+        sm: { span: 2 }
+      },
+      wrapperColLong: {
+        xs: { span: 24 },
+        sm: { span: 21 }
+      },
+      confirmLoading: false,
+      validatorRules: {
+        equipmentId: [
+          {}
+        ]
+      },
+      url: {
+        add: '/eam/weekMaintenanceOrder/add',
+        edit: '/eam/weekMaintenanceOrder/edit',
+        standardDetail: '/eam/eamMaintenanceStandardDetail/queryList',
+        detail: '/eam/weekMaintenanceOrderDetail/queryList',
+      },
+      detail: {
+        loading: false,
+        dataSource: [],
+        columns: [
+          {
+            title: 'ID',
+            key: 'id',
+            type: JVXETypes.hidden
+          },
+          {
+            title: 'orderId',
+            key: 'orderId',
+            type: JVXETypes.hidden
+          },
+          {
+            title: '搴忓彿',
+            key: 'itemCode',
+            type: JVXETypes.inputNumber,
+            width: '10%',
+            align: 'center',
+            validateRules: [
+              { required: true, unique: true, message: '搴忓彿涓嶈兘閲嶅' }
+            ]
+          },
+          {
+            title: '淇濆吇椤�',
+            key: 'itemName',
+            type: JVXETypes.textarea,
+            width: '20%',
+            align: 'center',
+            validateRules: [
+              { required: true, message: '淇濆吇椤逛笉鑳戒负绌猴紒' }
+            ]
+          },
+          {
+            title: '瀛愪繚鍏婚」',
+            key: 'subItemName',
+            type: JVXETypes.textarea,
+            width: '25%',
+            align: 'center'
+          },
+          {
+            title: '淇濆吇瑕佹眰',
+            key: 'itemDemand',
+            type: JVXETypes.textarea,
+            width: '30%',
+            align: 'center',
+            validateRules: [
+              { required: true, message: '淇濆吇瑕佹眰涓嶈兘涓虹┖锛�' }
+            ]
+          }
+        ],
+        toolbarConfig: {
+          // prefix 鍓嶇紑锛泂uffix 鍚庣紑
+          slot: ['prefix', 'suffix'],
+          // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
+          btn: ['add', 'remove', 'clearSelection']
+        }
+      }
+    }
+  },
+  created() {
+  },
+  methods: {
+    add() {
+      //鍒濆鍖栭粯璁ゅ��
+      this.model = {};
+      this.visible = true;
+      this.editable = false;
+      this.detail.dataSource = [];
+    },
+    edit(record) {
+      this.model = Object.assign({}, record)
+      this.visible = true
+      this.editable = true;
+      this.detail.dataSource = [];
+      this.loadDetail(record.id);
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    async handleOk() {
+      const that = this
+      let errMap = await that.$refs.editableDetailTable.validateTable();
+      if(errMap){
+        this.$message.warning("鏁版嵁鏍¢獙澶辫触锛�");
+        return;
+      }
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          debugger
+          let tableData = that.$refs.editableDetailTable.getTableData();
+          let removeData = that.$refs.editableDetailTable.getDeleteData();
+          that.model.tableDetailList = [...tableData];
+          that.model.removeDetailList = [...removeData];
+
+          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')
+              that.close()
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+    autocompleteForm(selectObj) {
+      this.model.standardName = selectObj.standardName
+      this.model.maintenancePeriod = selectObj.maintenancePeriod
+      this.model.standardId = selectObj.id
+      this.loadStandardDetail(selectObj.id);
+    },
+    //鍔犺浇璇︽儏鏁版嵁
+    loadStandardDetail(standardId) {
+      if (standardId) {
+        getAction(this.url.standardDetail, { standardId: standardId }).then(res => {
+          if (res.success) {
+            this.detail.dataSource = res.result.map(item => ({
+              itemCode: item.itemCode,
+              itemName: item.itemName,
+              subItemName: item.subItemName,
+              itemDemand: item.itemDemand
+            }))
+          }
+        })
+      }
+    },
+    //鏍囧噯閫夋嫨鍙樺寲
+    loadDetail(orderId) {
+        if (orderId) {
+          getAction(this.url.detail, { orderId: orderId }).then(res => {
+            if (res.success) {
+              this.detail.dataSource = [...res.result]
+            }
+          })
+        }
+    }
+
+  }
+}
+</script>
+
+<style lang="less" scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/system/modules/SysBusinessCodeRuleModal.vue b/src/views/system/modules/SysBusinessCodeRuleModal.vue
index d7a6b51..af61492 100644
--- a/src/views/system/modules/SysBusinessCodeRuleModal.vue
+++ b/src/views/system/modules/SysBusinessCodeRuleModal.vue
@@ -15,7 +15,7 @@
           <a-input placeholder="璇疯緭鍏ヤ笟鍔″悕绉�" v-model="model.businessName" />
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="businessCode" label="涓氬姟缂栫爜">
-          <a-input placeholder="璇疯緭鍏ヤ笟鍔$紪鐮�" v-model="model.businessCode" />
+          <a-input placeholder="璇疯緭鍏ヤ笟鍔$紪鐮�" v-model="model.businessCode" :disabled="editable" />
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="prefix" label="缂栫爜鍓嶇紑">
           <a-input placeholder="璇疯緭鍏ョ紪鐮佸墠缂�" v-model="model.prefix" />
@@ -47,6 +47,7 @@
     return {
       title: '鎿嶄綔',
       visible: false,
+      editable: false,
       model: {},
       labelCol: {
         xs: { span: 24 },
@@ -79,10 +80,13 @@
   },
   methods: {
     add() {
-      //鍒濆鍖栭粯璁ゅ��
-      this.edit({ seqLength: 4 })
+      this.model = {};
+      this.model.seqLength = 4;
+      this.editable = false;
+      this.visible = true
     },
     edit(record) {
+      this.editable = true;
       this.model = Object.assign({}, record)
       this.visible = true
     },

--
Gitblit v1.9.3