From 49cdc0884a9a4381cd968cffff65e2a332bc675a Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期六, 24 十月 2026 21:05:29 +0800
Subject: [PATCH] feat(cnas-search): 1.标准查新模块  2.印章使用记录

---
 src/views/CNAS/process/method/standardNoveltyRetrieval/component/FormDialog.vue |  231 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 185 insertions(+), 46 deletions(-)

diff --git a/src/views/CNAS/process/method/standardNoveltyRetrieval/component/FormDialog.vue b/src/views/CNAS/process/method/standardNoveltyRetrieval/component/FormDialog.vue
index 1f92114..5f666ba 100644
--- a/src/views/CNAS/process/method/standardNoveltyRetrieval/component/FormDialog.vue
+++ b/src/views/CNAS/process/method/standardNoveltyRetrieval/component/FormDialog.vue
@@ -1,47 +1,89 @@
 <template>
   <div>
-    <el-dialog v-model="formDia" title="鏂板" width="80%" @close="closeDia">
-      <el-form ref="form" :model="form" :rules="formRules" label-width="auto">
-        <el-button size="small" type="primary" @click="addBtn">娣诲姞涓�鏉�</el-button>
+    <el-dialog v-model="formDia" title="鏂板" width="800px" @close="closeDia">
+      <el-form ref="form" :model="form" :rules="formRules" label-width="120px">
         <div class="form-info">
-          <div v-for="(items,index) in form.taskRel" :key="index">
-            <el-col :span="12">
-              <el-form-item :prop="`taskRel.${index}.newMethodName`" :rules="{required: true, message: '璇峰~鍐欐爣鍑嗗悕绉�',trigger: 'blur',}" label="鏂版爣鍑嗗悕绉帮細">
-                <el-input v-model="items.newMethodName" size="small"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item :prop="`taskRel.${index}.newStandardNo`" :rules="{required: true,message: '璇峰~鍐欐爣鍑嗗彿',trigger: 'blur',}" label="鏂版爣鍑嗗彿锛�">
-                <el-input v-model="items.newStandardNo" size="small"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item :prop="`taskRel.${index}.searchNewSource`" :rules="{required: true,message: '璇烽�夋嫨鏌ユ柊璁板綍鏉ユ簮',trigger: 'change',}" label="鏌ユ柊璁板綍鏉ユ簮锛�">
-                <el-radio-group v-model="items.searchNewSource">
-                  <el-radio :value="0">鏍囧噯缃�</el-radio>
-                  <el-radio :value="1">濮旀墭鎯呮姤</el-radio>
-                  <el-radio :value="2">鏍囧噯鏁�</el-radio>
-                  <el-radio :value="3">鍏朵粬</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item :prop="`taskRel.${index}.remark`" :rules="{required: false,message: '璇烽�夋嫨澶囨敞',trigger: 'change',}" label="澶囨敞锛�">
-                <el-select v-model="items.remark" :prop="`taskRel.${index}.remark`"
-                           :rules="{required: false,message: '璇烽�夋嫨澶囨敞',trigger: 'change',}"
-                           clearable size="small">
-                  <el-option :value="0" label="浣滃簾"></el-option>
-                  <el-option :value="1" label="鏇挎崲"></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="4">
-              <el-button v-if="index !== 0" circle :icon="$icon('el-icon-delete')" size="small" type="danger" @click="deleteHeaderRow(index)"></el-button>
-            </el-col>
-            <el-col :span="24">
-              <el-divider></el-divider>
-            </el-col>
+          <div v-for="(items,index) in form.taskRel" :key="index" class="record-block">
+            <div class="record-head">
+              <span class="record-title">
+                <span class="record-index">{{ index + 1 }}</span>
+                鏌ユ柊璁板綍
+              </span>
+              <el-button v-if="index !== 0" link type="danger" :icon="$icon('el-icon-delete')"
+                @click="deleteHeaderRow(index)">鍒犻櫎鏈潯</el-button>
+            </div>
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item :prop="`taskRel.${index}.methodName`" :rules="{required: true, message: '璇峰~鍐欐爣鍑嗗悕绉�',trigger: 'blur',}" label="鏍囧噯鍚嶇О锛�">
+                  <el-input v-model="items.methodName" size="small"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item :prop="`taskRel.${index}.standardNo`" :rules="{required: true,message: '璇峰~鍐欐爣鍑嗗彿',trigger: 'blur',}" label="鏍囧噯鍙凤細">
+                  <el-input v-model="items.standardNo" size="small"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item :prop="`taskRel.${index}.fileNo`" :rules="{required: true,message: '璇峰~鍐欐枃浠剁紪鍙�',trigger: 'blur',}" label="鏂囦欢缂栧彿锛�">
+                  <el-input v-model="items.fileNo" size="small"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item :prop="`taskRel.${index}.searchNewTime`" :rules="{required: true,message: '璇烽�夋嫨鏌ユ柊鏃ユ湡',trigger: 'change',}" label="鏌ユ柊鏃ユ湡锛�">
+                  <el-date-picker v-model="items.searchNewTime" type="date" value-format="YYYY-MM-DD"
+                                  format="YYYY-MM-DD" placeholder="璇烽�夋嫨鏃ユ湡" size="small"
+                                  style="width: 100%;" @change="refreshDefaultNextSearchDate(items)"></el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="涓嬫鏌ユ柊鏃ユ湡锛�">
+                  <el-input v-if="isSearchRetired(items.searchNewResult)" model-value="涓嶉�傜敤" size="small" disabled />
+                  <el-date-picker v-else v-model="items.nextSearchDate" type="date" value-format="YYYY-MM-DD"
+                                  format="YYYY-MM-DD" placeholder="榛樿涓変釜鏈堝悗锛屽彲淇敼" size="small"
+                                  style="width: 100%;" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="鏌ユ柊浜猴細">
+                  <el-input :model-value="currentUserName" size="small" disabled></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item :prop="`taskRel.${index}.searchNewResult`" :rules="{required: true,message: '璇烽�夋嫨鏌ユ柊缁撴灉',trigger: 'change',}" label="鏌ユ柊缁撴灉锛�">
+                  <el-select v-model="items.searchNewResult" placeholder="璇烽�夋嫨" style="width: 100%"
+                             @change="handleSearchResultChange(items)">
+                    <el-option v-for="result in searchResultOptions" :key="result" :label="result" :value="result" />
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24">
+                <el-form-item :prop="`taskRel.${index}.searchNewSource`" :rules="{required: true,message: '璇烽�夋嫨鏌ユ柊璁板綍鏉ユ簮',trigger: 'change',}" label="鏌ユ柊璁板綍鏉ユ簮锛�">
+                  <el-radio-group v-model="items.searchNewSource">
+                    <el-radio v-for="source in searchSourceOptions" :key="source.value" :value="source.value">{{ source.label }}</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+              </el-col>
+              <el-col v-if="items.searchNewSource === 3" :span="24">
+                <el-form-item :prop="`taskRel.${index}.searchNewWebsite`"
+                              label="鍏朵粬鏉ユ簮鍚嶇О锛�">
+                  <el-input v-model="items.searchNewWebsite" size="small" placeholder="閫夊~锛屾棤闇�濉啓缃戝潃"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col v-if="items.searchNewResult === '宸蹭慨璁�/鏈夋柊鐗堟湰鏇夸唬'" :span="12">
+                <el-form-item :prop="`taskRel.${index}.newMethodName`" :rules="{required: true,message: '璇峰~鍐欐柊鏍囧噯鍚嶇О',trigger: 'blur',}" label="鏂版爣鍑嗗悕绉帮細">
+                  <el-input v-model="items.newMethodName" size="small"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col v-if="items.searchNewResult === '宸蹭慨璁�/鏈夋柊鐗堟湰鏇夸唬'" :span="12">
+                <el-form-item :prop="`taskRel.${index}.newStandardNo`" :rules="{required: true,message: '璇峰~鍐欐柊鏍囧噯鍙�',trigger: 'blur',}" label="鏂版爣鍑嗗彿锛�">
+                  <el-input v-model="items.newStandardNo" size="small"></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
           </div>
+        </div>
+        <div class="add-btn-wrap">
+          <el-button class="add-btn" @click="addBtn">娣诲姞涓�鏉�</el-button>
         </div>
       </el-form>
       <template #footer><span  class="dialog-footer">
@@ -54,6 +96,8 @@
 
 <script>
 import { addMethodSearchNew } from '@/api/cnas/process/method/standardNoveltyRetrieval'
+import useUserStore from '@/store/modules/user'
+import { calculateNextSearchDate, isSearchRetired, searchResultOptions, searchSourceOptions } from '../options'
 
 export default {
   name: 'FormDialog',
@@ -63,13 +107,21 @@
     // 杩欓噷瀛樻斁鏁版嵁
     return {
       formDia: false,
+      searchResultOptions,
+      searchSourceOptions,
       form: {
         taskRel: [
           {
+            methodName: '',
+            standardNo: '',
+            fileNo: '',
+            searchNewTime: '',
+            nextSearchDate: '',
+            searchNewResult: '',
+            searchNewWebsite: '',
+            searchNewSource: '',
             newMethodName: '',
             newStandardNo: '',
-            searchNewSource: '',
-            remark: '',
           }
         ]
       },
@@ -78,14 +130,34 @@
       info: {},
     };
   },
+  computed: {
+    currentUserName() {
+      const user = useUserStore()
+      return user.nickName || user.name || user.userName
+    }
+  },
   // 鏂规硶闆嗗悎
   methods: {
+    isSearchRetired,
     openDia (row) {
       this.formDia = true
     },
     // 娣诲姞涓�鏉�
     addBtn() {
-      this.form.taskRel.push({ newMethodName: '', newStandardNo:'', searchNewSource: '', remark: ''});
+      this.form.taskRel.push({ methodName: '', standardNo: '', fileNo: '', searchNewTime: '',
+        nextSearchDate: '', searchNewResult: '', searchNewWebsite: '', searchNewSource: '',
+        newMethodName: '', newStandardNo: '' });
+    },
+    refreshDefaultNextSearchDate(item) {
+      item.nextSearchDate = isSearchRetired(item.searchNewResult) ? null
+        : calculateNextSearchDate(item.searchNewTime)
+    },
+    handleSearchResultChange(item) {
+      if (isSearchRetired(item.searchNewResult)) {
+        item.nextSearchDate = null
+      } else if (!item.nextSearchDate) {
+        this.refreshDefaultNextSearchDate(item)
+      }
     },
     // 鍒犻櫎涓�鏉�
     deleteHeaderRow (index) {
@@ -95,7 +167,14 @@
       this.$refs['form'].validate((valid) => {
         if (valid) {
           this.editLoad = true
-          addMethodSearchNew(this.form.taskRel).then(res => {
+          const records = this.form.taskRel.map(item => ({
+            ...item,
+            searchNewTime: `${item.searchNewTime} 00:00:00`,
+            searchNewWebsite: item.searchNewSource === 3 ? item.searchNewWebsite : null,
+            newMethodName: item.searchNewResult === '宸蹭慨璁�/鏈夋柊鐗堟湰鏇夸唬' ? item.newMethodName : null,
+            newStandardNo: item.searchNewResult === '宸蹭慨璁�/鏈夋柊鐗堟湰鏇夸唬' ? item.newStandardNo : null
+          }))
+          addMethodSearchNew(records).then(res => {
             this.editLoad = false
             this.$message.success('鎿嶄綔鎴愬姛')
             this.closeDia()
@@ -120,10 +199,70 @@
 
 <style scoped>
 .form-info {
-  display: inline-block;
-  max-height: 42em;
+  max-height: 52vh;
   overflow-y: auto;
+  padding-right: 4px;
 }
+
+.record-block {
+  background: #fafafa;
+  border: 1px solid #ebeef5;
+  border-radius: 6px;
+  padding: 14px 16px 0;
+  margin-bottom: 14px;
+}
+
+.record-head {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding-bottom: 10px;
+  margin-bottom: 14px;
+  border-bottom: 1px dashed #e4e7ed;
+}
+
+.record-title {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+  font-size: 14px;
+  font-weight: 600;
+  color: var(--el-text-color-primary);
+}
+
+.record-index {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  width: 20px;
+  height: 20px;
+  border-radius: 50%;
+  background: var(--el-color-primary);
+  color: #fff;
+  font-size: 12px;
+}
+
+.add-btn-wrap {
+  margin-top: 4px;
+}
+
+.add-btn {
+  width: 100%;
+  color: var(--el-color-primary);
+  border: 1px dashed var(--el-color-primary);
+  background: transparent;
+}
+
+.add-btn:hover {
+  color: var(--el-color-primary);
+  border-color: var(--el-color-primary);
+  background: var(--el-color-primary-light-9);
+}
+
+:deep(.record-block .el-form-item) {
+  margin-bottom: 16px;
+}
+
 :deep(.el-dialog) {
   margin: 6vh auto 50px !important;
 }

--
Gitblit v1.9.3