From 19aff1ac87030b21d2b01cdca5d5604c840ba7c0 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期一, 21 七月 2025 21:36:31 +0800
Subject: [PATCH] 维修工单

---
 src/views/eam/repair/modules/EamRepairOrderList/EamRepairOrderModal.vue |  202 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 202 insertions(+), 0 deletions(-)

diff --git a/src/views/eam/repair/modules/EamRepairOrderList/EamRepairOrderModal.vue b/src/views/eam/repair/modules/EamRepairOrderList/EamRepairOrderModal.vue
new file mode 100644
index 0000000..70eaaa5
--- /dev/null
+++ b/src/views/eam/repair/modules/EamRepairOrderList/EamRepairOrderModal.vue
@@ -0,0 +1,202 @@
+<template>
+  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" @ok="handleOk"
+           @cancel="handleCancel" cancelText="鍏抽棴" centered>
+    <a-spin :spinning="spinning">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-row>
+          <a-col :span="customSpan">
+            <a-form-model-item label="缁翠慨寮�濮嬫椂闂�" prop="actualStartTime" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-date-picker show-time v-model="model.actualStartTime" :allowClear="false"
+                             value-format="YYYY-MM-DD HH:mm:ss"
+                             style="width:100%"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="customSpan">
+            <a-form-model-item label="缁翠慨缁撴潫鏃堕棿" prop="actualEndTime" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-date-picker show-time v-model="model.actualEndTime" :allowClear="false"
+                             value-format="YYYY-MM-DD HH:mm:ss"
+                             style="width:100%"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="customSpan">
+            <a-form-model-item label="鏁呴殰鍘熷洜">
+              <a-textarea placeholder="璇疯緭鍏ユ晠闅滃師鍥�" v-model="model.faultReason"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="customSpan">
+            <a-form-model-item label="鏁呴殰鍒嗘瀽">
+              <a-textarea placeholder="璇疯緭鍏ユ晠闅滃垎鏋�" v-model="model.faultAnalysis"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="customSpan">
+            <a-form-model-item label="鎺掓晠杩囩▼">
+              <a-textarea placeholder="璇疯緭鍏ユ帓鏁呰繃绋�" v-model="model.faultProcess"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="customSpan">
+            <a-form-model-item label="棰勯槻鎺柦">
+              <a-textarea placeholder="璇疯緭鍏ラ闃叉帾鏂�" v-model="model.faultPrevent"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <j-vxe-table ref="editableDetailTable" rowNumber rowSelection bordered alwaysEdit toolbar
+                     :toolbarConfig="detail.toolbarConfig" keep-source :height="300"
+                     :dataSource="detail.dataSource" :columns="detail.columns">
+
+        </j-vxe-table>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+  import { postAction, getAction } from '@/api/manage'
+  import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
+  import { JVXETypes } from '@comp/jeecg/JVxeTable'
+
+  export default {
+    name: 'EamRepairOrderModal',
+    components: { LxSearchEquipmentSelect },
+    data() {
+      return {
+        title: '鎿嶄綔',
+        visible: false,
+        model: {},
+        customSpan: 12,
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 6 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 }
+        },
+        confirmLoading: false,
+        spinning: false,
+        validatorRules: {
+          actualStartTime: [{ required: true, message: '璇烽�夋嫨缁翠慨寮�濮嬫椂闂�', trigger: 'change' }],
+          actualEndTime: [{ required: true, message: '璇烽�夋嫨缁翠慨缁撴潫鏃堕棿', trigger: 'change' }]
+        },
+        detail: {
+          dataSource: [],
+          columns: [
+            {
+              title: 'ID',
+              key: 'id',
+              type: JVXETypes.hidden
+            },
+            {
+              title: '缁翠慨浜�',
+              key: 'repairUser',
+              align: 'center',
+              placeholder: '璇疯緭鍏�${title}',
+              type: JVXETypes.input,
+              validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }]
+            },
+            {
+              title: '鏄惁鏄富缁翠慨浜�',
+              key: 'repairPrimary',
+              align: 'center',
+              type: JVXETypes.select,
+              placeholder: '璇烽�夋嫨${title}',
+              dictCode: 'yn',
+              validateRules: [{ required: true, message: '璇烽�夋嫨${title}' }]
+            },
+            {
+              title: '缁翠慨鏃堕暱',
+              key: 'repairDuration',
+              align: 'center',
+              placeholder: '璇疯緭鍏�${title}',
+              type: JVXETypes.inputNumber,
+              validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }]
+            },
+            {
+              title: '澶囨敞',
+              key: 'remark',
+              align: 'center',
+              type: JVXETypes.textarea,
+              placeholder: '璇疯緭鍏�${title}'
+            }
+          ],
+          toolbarConfig: {
+            // prefix 鍓嶇紑锛泂uffix 鍚庣紑
+            slot: ['prefix', 'suffix'],
+            // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
+            btn: ['add', 'remove', 'clearSelection']
+          }
+        },
+        url: {
+          report: '/eam/eamRepairOrder/report',
+          detail: '/eam/eamRepairPerson/list'
+        }
+      }
+    },
+    methods: {
+      handleFillIn(record) {
+        this.visible = true
+        this.model = Object.assign({}, record)
+        this.getRepairDetailByApi(record.id)
+      },
+
+      getRepairDetailByApi(repairId) {
+        this.spinning = true
+        this.detail.dataSource = []
+        getAction(this.url.detail, { repairId })
+          .then(res => {
+            if (res.success) this.detail.dataSource = res.result
+          })
+          .finally(() => {
+            this.spinning = false
+          })
+      },
+
+      async handleOk() {
+        const errMap = await this.$refs.editableDetailTable.validateTable()
+        if (errMap) return
+
+        const that = this
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = that.spinning = true
+
+            that.model.eamRepairPersonList = that.$refs.editableDetailTable.getTableData()
+
+            postAction(that.url.report, that.model)
+              .then((res) => {
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                  that.$emit('ok')
+                  that.close()
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that.confirmLoading = that.spinning = false
+              })
+          } else {
+            return false
+          }
+        })
+      },
+
+      close() {
+        this.$emit('close')
+        this.visible = false
+        if (this.$refs.form) this.$refs.form.clearValidate()
+      },
+
+      handleCancel() {
+        this.close()
+      }
+    }
+  }
+</script>
\ No newline at end of file

--
Gitblit v1.9.3