Selaa lähdekoodia

qhse相关调整

yanghao 1 viikko sitten
vanhempi
commit
c34e7e5291
2 muutettua tiedostoa jossa 73 lisäystä ja 1 poistoa
  1. 1 0
      src/utils/dict.ts
  2. 72 1
      src/views/pms/qhse/index.vue

+ 1 - 0
src/utils/dict.ts

@@ -320,6 +320,7 @@ export enum DICT_TYPE {
 
   // QHSE
   MEASURE_TYPE = 'measure_type',
+  MEASURE_STATUS = 'measure_status',
   PERSON_CERT = 'person_cert',
   ORG_CERT = 'org_cert',
   DANGER_GRADE = 'danger_grade',

+ 72 - 1
src/views/pms/qhse/index.vue

@@ -148,6 +148,16 @@
                   <dict-tag :type="DICT_TYPE.MEASURE_TYPE" :value="scope.row.classify" />
                 </template>
               </zm-table-column>
+              <zm-table-column label="状态" align="center" prop="status" min-width="100">
+                <template #default="scope">
+                  <dict-tag :type="DICT_TYPE.MEASURE_STATUS" :value="scope.row.status" />
+                </template>
+              </zm-table-column>
+              <zm-table-column label="报废时间" align="center" prop="offTime" min-width="120">
+                <template #default="scope">
+                  {{ formatDateCorrectly(scope.row.offTime) }}
+                </template>
+              </zm-table-column>
               <zm-table-column label="采购日期" align="center" prop="buyDate">
                 <template #default="scope">
                   {{ formatDateCorrectly(scope.row.buyDate) }}
@@ -313,6 +323,37 @@
         </el-col> -->
       </el-row>
 
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="状态" prop="status">
+            <el-select
+              v-model="formData.status"
+              placeholder="请选择状态"
+              clearable
+              class="!w-240px">
+              <el-option
+                v-for="dict in getStrDictOptions(DICT_TYPE.MEASURE_STATUS)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value" />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12" v-if="isScrappedStatus(formData.status)">
+          <div class="flex items-center relative">
+            <span class="text-red absolute left-6 top-[-1px]">*</span>
+            <el-form-item label="报废时间" prop="offTime">
+              <el-date-picker
+                v-model="formData.offTime"
+                type="date"
+                value-format="x"
+                placeholder="请选择报废时间"
+                style="width: 100%" />
+            </el-form-item>
+          </div>
+        </el-col>
+      </el-row>
+
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="价格" prop="measurePrice">
@@ -539,6 +580,8 @@ const formData = ref({
   brand: '',
   modelName: '',
   classify: '',
+  status: '',
+  offTime: null,
   buyDate: null,
   remark: '',
   deptId: '',
@@ -563,16 +606,31 @@ const formatDateCorrectly = (timestamp) => {
   return formatDate(time).substring(0, 10)
 }
 
+const isScrappedStatus = (status) => {
+  const option = getStrDictOptions(DICT_TYPE.MEASURE_STATUS).find((item) => item.value === status)
+  return option?.label === '报废'
+}
+
+const validateOffTime = (_rule, value, callback) => {
+  if (isScrappedStatus(formData.value.status) && !value) {
+    callback(new Error('报废状态必须填写报废时间'))
+    return
+  }
+  callback()
+}
+
 // 表单验证规则
 const formRules = {
   measureName: [{ required: true, message: '计量器具名称不能为空', trigger: 'blur' }],
   dutyPerson: [{ required: true, message: '责任人不能为空', trigger: 'blur' }],
   classify: [{ required: true, message: '分类不能为空', trigger: 'blur' }],
+  status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
   deptId: [{ required: true, message: '部门不能为空', trigger: 'blur' }],
   measureCertNo: [{ required: true, message: '证书编码不能为空', trigger: 'blur' }],
   validity: [{ required: true, message: '有效期不能为空', trigger: 'blur' }],
   serialNo: [{ required: true, message: '序列号不能为空', trigger: 'blur' }],
-  measureUnit: [{ required: true, message: '精度不能为空', trigger: 'blur' }]
+  measureUnit: [{ required: true, message: '精度不能为空', trigger: 'blur' }],
+  offTime: [{ validator: validateOffTime, trigger: ['change', 'blur'] }]
 }
 
 /** 查询列表 */
@@ -688,6 +746,7 @@ const handleEdit = (row) => {
   formData.value = {
     ...row,
     // 确保日期字段正确处理
+    offTime: row.offTime ? ensureMillisecondTimestamp(row.offTime) : null,
     buyDate: row.buyDate ? ensureMillisecondTimestamp(row.buyDate) : null,
     validity: row.validity ? ensureMillisecondTimestamp(row.validity) : null
   }
@@ -801,6 +860,8 @@ const resetForm = () => {
     brand: '',
     modelName: '',
     classify: '',
+    status: '',
+    offTime: null,
     buyDate: null,
     remark: '',
     deptId: '',
@@ -819,6 +880,15 @@ const closeDialog = () => {
   resetForm()
 }
 
+watch(
+  () => formData.value.status,
+  (value) => {
+    if (!isScrappedStatus(value)) {
+      formData.value.offTime = null
+    }
+  }
+)
+
 // 提交表单
 const submitForm = async () => {
   if (!formRef.value) return
@@ -831,6 +901,7 @@ const submitForm = async () => {
     const submitData = {
       ...formData.value,
       // 确保日期字段以正确的格式提交
+      offTime: formData.value.offTime,
       buyDate: formData.value.buyDate,
       validity: formData.value.validity
     }