Browse Source

feat: 新增整体校验功能,优化作业票内容提交逻辑,调整必填标记显示

xieyong 3 ngày trước cách đây
mục cha
commit
bbd981a3ec

+ 29 - 11
src/views/DangerousWorkList/add.vue

@@ -158,6 +158,7 @@
           :template="frontendTemplate"
           :defaults="templateDefaults"
           :is-view="isView"
+          :show-required="fullCheckEnabled"
         />
         <experimentationProcessNew
           v-else-if="!rawExtension"
@@ -167,7 +168,7 @@
         <!-- 未匹配到前端模板时,降级展示已保存的原始作业票内容 -->
         <div v-else class="raw-extension">
           <div
-            v-for="(value, key) in rawExtension"
+            v-for="(value, key) in displayRawExtension"
             :key="key"
             class="raw-extension-row"
           >
@@ -175,7 +176,7 @@
             <span class="raw-extension-value">{{ value }}</span>
           </div>
           <div
-            v-if="!Object.keys(rawExtension).length"
+            v-if="!Object.keys(displayRawExtension).length"
             class="raw-extension-row"
           >
             暂无作业票内容
@@ -238,6 +239,8 @@
   } from './templates';
   import {
     DRAFT_STATUS,
+    FULL_CHECK_ENABLED,
+    FULL_CHECK_KEY,
     getProcessDefinitionKey,
     getProcessInstanceId
   } from './constants';
@@ -386,6 +389,16 @@
           !!this.rawExtension
         );
       },
+      // 降级展示的原始作业票内容:整体校验标记属于控制参数,不作为票面内容展示
+      displayRawExtension() {
+        const raw = { ...(this.rawExtension || {}) };
+        delete raw[FULL_CHECK_KEY];
+        return raw;
+      },
+      // 是否整体校验作业票内容(按环境区分,不可人工调整)
+      fullCheckEnabled() {
+        return FULL_CHECK_ENABLED;
+      },
       // 模板默认值:取自所属危险作业
       // 作业计划开始/结束时间默认留空,由申请人按实际计划填写
       templateDefaults() {
@@ -723,22 +736,27 @@
         } else {
           delete extension.remark;
         }
+        // 整体校验标记随作业票内容一起保存,便于后端/审批流识别提交时的校验模式
+        extension[FULL_CHECK_KEY] = FULL_CHECK_ENABLED;
         return extension;
       },
       // 业务校验并组装作业票保存参数
       // 校验不通过时给出提示并返回 null
       buildSaveParams() {
-        if (
-          !this.frontendTemplate &&
-          !this.templateData?.id &&
-          !this.rawExtension
-        ) {
-          this.$message.warning('请选择作业票模板');
-          return null;
+        // 整体校验开启:必须选择作业票模板,并完整填写作业票内容
+        if (FULL_CHECK_ENABLED) {
+          if (
+            !this.frontendTemplate &&
+            !this.templateData?.id &&
+            !this.rawExtension
+          ) {
+            this.$message.warning('请选择作业票模板');
+            return null;
+          }
         }
         const extension = this.getExtension();
-        // 前端内置模板按源系统表单做必填校验
-        if (this.frontendTemplate) {
+        // 前端内置模板按源系统表单做必填校验(整体校验开启时才校验)
+        if (FULL_CHECK_ENABLED && this.frontendTemplate) {
           const unfilled = getUnfilledRequiredFields(
             this.frontendTemplate,
             extension

+ 7 - 1
src/views/DangerousWorkList/components/workTicketForm.vue

@@ -42,7 +42,7 @@
             >
               <el-form-item
                 :label="field.label"
-                :required="field.required"
+                :required="showRequired && field.required"
                 class="ticket-form-item"
               >
                 <el-input
@@ -237,6 +237,12 @@
       isView: {
         type: Boolean,
         default: false
+      },
+      // 是否显示必填标记:
+      // 整体校验关闭时作业票内容可留空,此时不展示必填星号,避免误导
+      showRequired: {
+        type: Boolean,
+        default: true
       }
     },
     data() {

+ 22 - 0
src/views/DangerousWorkList/constants.js

@@ -79,6 +79,28 @@ export function getProcessDefinitionKey(workType, workTypeName) {
   return '';
 }
 
+/**
+ * 作业票内容(extensionJson)中的「整体校验」标记字段名
+ *
+ * 该标记随作业票内容一起保存,记录提交该作业票时是否做了整体校验,
+ * 便于后端与审批流识别校验模式。
+ *
+ * 说明:后端 extensionJson 是自由 JSON 字符串,用独立字段承载该标记,
+ * 不会与模板字段 id 冲突。
+ */
+export const FULL_CHECK_KEY = 'needFullCheck';
+
+/**
+ * 是否整体校验作业票内容(按环境区分,不可人工调整)
+ *
+ *  - 开发环境(NODE_ENV=development):false
+ *    只校验作业基本信息(作业类型、申请单位、申请人、作业地点、起止时间),
+ *    作业票内容可留空直接提交,便于本地开发与联调
+ *  - 其它环境(生产、预览等):true
+ *    提交前按模板整体校验,必须选择作业票模板且必填项填写完整
+ */
+export const FULL_CHECK_ENABLED = process.env.NODE_ENV !== 'development';
+
 /**
  * 作业票上流程实例 id 的字段名
  * 后端发起审批流后会把流程实例 id 回写到作业票上,字段名以接口实际返回为准,