xiaweibo hace 3 meses
padre
commit
0647bc3b4a
Se han modificado 15 ficheros con 641 adiciones y 296 borrados
  1. 118 2
      src/views/production-safety/productionSafetySystem/collegeFileManagement/components/collegeFileManagementDetail.vue
  2. 5 29
      src/views/production-safety/productionSafetySystem/collegeFileManagement/configs/form.ts
  3. 118 2
      src/views/production-safety/productionSafetySystem/doubleSystemManagement/components/doubleSystemManagementDetail.vue
  4. 5 29
      src/views/production-safety/productionSafetySystem/doubleSystemManagement/configs/form.ts
  5. 5 29
      src/views/production-safety/productionSafetySystem/lawManagement/configs/form.ts
  6. 118 2
      src/views/production-safety/productionSafetySystem/safetyStandardizationSystemManagement/components/safetyStandardizationSystemManagementDetail.vue
  7. 5 29
      src/views/production-safety/productionSafetySystem/safetyStandardizationSystemManagement/configs/form.ts
  8. 7 7
      src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/safetySystemConstructionWorkPlanManagement.vue
  9. 8 8
      src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/safetySystemConstructionWorkPlanManagementItem.vue
  10. 3 74
      src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagementDept/safetySystemConstructionWorkPlanManagementDept.vue
  11. 5 9
      src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagementDept/safetySystemConstructionWorkPlanManagementDeptItem.vue
  12. 163 28
      src/views/production-safety/productionSafetySystem/safetyTraining/components/safetyTrainingDetail.vue
  13. 66 33
      src/views/production-safety/productionSafetySystem/safetyTraining/configs/form.ts
  14. 7 7
      src/views/production-safety/productionSafetySystem/safetyTraining/safetyTraining.vue
  15. 8 8
      src/views/production-safety/productionSafetySystem/safetyTraining/safetyTrainingItem.vue

+ 118 - 2
src/views/production-safety/productionSafetySystem/collegeFileManagement/components/collegeFileManagementDetail.vue

@@ -5,7 +5,44 @@
       :formData="ruleFormData"
       :formRules="isViewMode ? undefined : formRules"
       :formConfig="computedFormConfig"
-    />
+    >
+      <template #fileFormat>
+        <el-radio-group v-model="ruleFormData.fileFormat" :disabled="isViewMode">
+          <el-radio value="PDF">PDF</el-radio>
+          <el-radio value="WORD">WORD</el-radio>
+        </el-radio-group>
+      </template>
+      <template #fileUrl>
+        <UploadFiles
+          v-if="!isViewMode"
+          label="上传文件"
+          :maxCount="1"
+          :fileList="uploadFileList"
+          @uploadSuccess="handleUploadSuccess"
+        />
+        <div v-else-if="ruleFormData.fileUrl" class="file-display">
+          <a :href="ruleFormData.fileUrl" target="_blank" class="file-link">{{ getFileName(ruleFormData.fileUrl) }}</a>
+        </div>
+        <span v-else class="no-file">暂无文件</span>
+      </template>
+      <template #content>
+        <div v-if="!isViewMode" class="editor-container">
+          <Editor
+            v-model="ruleFormData.content"
+            :defaultConfig="editorConfig"
+            style="height: 400px"
+            @onCreated="handleEditorCreated"
+          />
+        </div>
+        <div v-else class="content-display" v-html="ruleFormData.content || '暂无内容'"></div>
+      </template>
+      <template #status>
+        <el-radio-group v-model="ruleFormData.status" :disabled="isViewMode">
+          <el-radio :value="1">启用</el-radio>
+          <el-radio :value="0">禁用</el-radio>
+        </el-radio-group>
+      </template>
+    </BasicForm>
   </main>
   <footer class="safety-platform-container__footer">
     <el-button @click="router.back()">返回</el-button>
@@ -16,10 +53,13 @@
 </template>
 
 <script setup lang="ts">
-  import { computed, onMounted, ref } from 'vue';
+  import { computed, onMounted, ref, shallowRef, onBeforeUnmount } from 'vue';
   import { useRoute, useRouter } from 'vue-router';
   import { ElMessage } from 'element-plus';
   import BasicForm from '@/components/BasicForm.vue';
+  import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
+  import { Editor } from '@wangeditor/editor-for-vue';
+  import '@wangeditor/editor/dist/css/style.css';
   import { useFormConfigHook } from '@/hooks/useFormConfigHook';
   import { ACADEMY_FILE_FORM_CONFIG, ACADEMY_FILE_FORM_DATA, ACADEMY_FILE_FORM_RULES } from '../configs/form';
   import {
@@ -28,6 +68,7 @@
     updateAcademyFile,
     type ProductionSafetyFile,
   } from '@/api/production-safety-system';
+  import type { FileItem } from '@/components/UploadFiles/types';
 
   const router = useRouter();
   const route = useRoute();
@@ -61,6 +102,35 @@
   });
 
   const basicFormRef = ref<InstanceType<typeof BasicForm>>();
+  
+  // 富文本编辑器
+  const editorRef = shallowRef();
+  const editorConfig = {
+    placeholder: '请输入文档内容',
+    MENU_CONF: {},
+  };
+
+  const handleEditorCreated = (editor: any) => {
+    editorRef.value = editor;
+  };
+
+  // 文件上传
+  const uploadFileList = ref<FileItem[]>([]);
+
+  const handleUploadSuccess = (files: FileItem[]) => {
+    uploadFileList.value = files;
+    if (files.length > 0 && files[0].file) {
+      // 这里需要实际上传文件到服务器,获取 fileUrl
+      // 暂时使用文件对象,实际应该调用上传接口
+      ruleFormData.fileUrl = files[0].file.name; // 临时处理,需要替换为实际上传后的URL
+    }
+  };
+
+  const getFileName = (url: string) => {
+    if (!url) return '';
+    const parts = url.split('/');
+    return parts[parts.length - 1];
+  };
 
   const handleValidate = async () => {
     if (!basicFormRef.value) return;
@@ -83,6 +153,18 @@
         ruleFormData.fileUrl = res.fileUrl || '';
         ruleFormData.content = res.content || '';
         ruleFormData.status = res.status ?? 1;
+        
+        // 如果有文件URL,转换为FileItem格式
+        if (res.fileUrl) {
+          uploadFileList.value = [
+            {
+              fileId: Date.now(),
+              fileName: getFileName(res.fileUrl),
+              fileType: res.fileFormat?.toLowerCase() === 'pdf' ? 'pdf' : 'word',
+              fileSize: '0KB',
+            },
+          ];
+        }
       }
       cloneRuleFormData();
     } catch (e) {
@@ -132,9 +214,43 @@
       getDetail();
     }
   });
+
+  onBeforeUnmount(() => {
+    const editor = editorRef.value;
+    if (editor == null) return;
+    editor.destroy();
+  });
 </script>
 
 <style scoped lang="scss">
   @use '@/styles/page-details-layout.scss' as *;
+
+  .editor-container {
+    width: 100%;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+  }
+
+  .content-display {
+    min-height: 200px;
+    padding: 12px;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+    background-color: #f5f7fa;
+  }
+
+  .file-display {
+    .file-link {
+      color: #409eff;
+      text-decoration: none;
+      &:hover {
+        text-decoration: underline;
+      }
+    }
+  }
+
+  .no-file {
+    color: rgba(0, 0, 0, 0.65);
+  }
 </style>
 

+ 5 - 29
src/views/production-safety/productionSafetySystem/collegeFileManagement/configs/form.ts

@@ -40,14 +40,7 @@ export const ACADEMY_FILE_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'fileFormat',
     label: '文件格式:',
-    component: 'ElSelect',
-    componentProps: {
-      placeholder: '请选择文件格式',
-    },
-    options: [
-      { label: 'PDF', value: 'PDF' },
-      { label: 'WORD', value: 'WORD' },
-    ],
+    slot: 'fileFormat',
   },
   {
     prop: 'releaseDate',
@@ -62,34 +55,17 @@ export const ACADEMY_FILE_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'fileUrl',
     label: '文件上传:',
-    component: 'ElUpload',
-    componentProps: {
-      action: '', // 需要配置实际的上传接口
-      accept: '.pdf,.doc,.docx',
-      limit: 1,
-    },
+    slot: 'fileUrl',
   },
   {
     prop: 'content',
     label: '文档内容:',
-    component: 'ElInput',
-    componentProps: {
-      type: 'textarea',
-      rows: 8,
-      placeholder: '请输入文档内容(富文本)',
-    },
+    slot: 'content',
   },
   {
     prop: 'status',
-    label: '启用状态:',
-    component: 'ElSelect',
-    componentProps: {
-      placeholder: '请选择启用状态',
-    },
-    options: [
-      { label: '启用', value: 1 },
-      { label: '禁用', value: 0 },
-    ],
+    label: '状态:',
+    slot: 'status',
   },
 ];
 

+ 118 - 2
src/views/production-safety/productionSafetySystem/doubleSystemManagement/components/doubleSystemManagementDetail.vue

@@ -5,7 +5,44 @@
       :formData="ruleFormData"
       :formRules="isViewMode ? undefined : formRules"
       :formConfig="computedFormConfig"
-    />
+    >
+      <template #fileFormat>
+        <el-radio-group v-model="ruleFormData.fileFormat" :disabled="isViewMode">
+          <el-radio value="PDF">PDF</el-radio>
+          <el-radio value="WORD">WORD</el-radio>
+        </el-radio-group>
+      </template>
+      <template #fileUrl>
+        <UploadFiles
+          v-if="!isViewMode"
+          label="上传文件"
+          :maxCount="1"
+          :fileList="uploadFileList"
+          @uploadSuccess="handleUploadSuccess"
+        />
+        <div v-else-if="ruleFormData.fileUrl" class="file-display">
+          <a :href="ruleFormData.fileUrl" target="_blank" class="file-link">{{ getFileName(ruleFormData.fileUrl) }}</a>
+        </div>
+        <span v-else class="no-file">暂无文件</span>
+      </template>
+      <template #content>
+        <div v-if="!isViewMode" class="editor-container">
+          <Editor
+            v-model="ruleFormData.content"
+            :defaultConfig="editorConfig"
+            style="height: 400px"
+            @onCreated="handleEditorCreated"
+          />
+        </div>
+        <div v-else class="content-display" v-html="ruleFormData.content || '暂无内容'"></div>
+      </template>
+      <template #status>
+        <el-radio-group v-model="ruleFormData.status" :disabled="isViewMode">
+          <el-radio :value="1">启用</el-radio>
+          <el-radio :value="0">禁用</el-radio>
+        </el-radio-group>
+      </template>
+    </BasicForm>
   </main>
   <footer class="safety-platform-container__footer">
     <el-button @click="router.back()">返回</el-button>
@@ -16,10 +53,13 @@
 </template>
 
 <script setup lang="ts">
-  import { computed, onMounted, ref } from 'vue';
+  import { computed, onMounted, ref, shallowRef, onBeforeUnmount } from 'vue';
   import { useRoute, useRouter } from 'vue-router';
   import { ElMessage } from 'element-plus';
   import BasicForm from '@/components/BasicForm.vue';
+  import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
+  import { Editor } from '@wangeditor/editor-for-vue';
+  import '@wangeditor/editor/dist/css/style.css';
   import { useFormConfigHook } from '@/hooks/useFormConfigHook';
   import { DUAL_SYSTEM_FORM_CONFIG, DUAL_SYSTEM_FORM_DATA, DUAL_SYSTEM_FORM_RULES } from '../configs/form';
   import {
@@ -28,6 +68,7 @@
     updateDualSystem,
     type ProductionSafetyFile,
   } from '@/api/production-safety-system';
+  import type { FileItem } from '@/components/UploadFiles/types';
 
   const router = useRouter();
   const route = useRoute();
@@ -61,6 +102,35 @@
   });
 
   const basicFormRef = ref<InstanceType<typeof BasicForm>>();
+  
+  // 富文本编辑器
+  const editorRef = shallowRef();
+  const editorConfig = {
+    placeholder: '请输入文档内容',
+    MENU_CONF: {},
+  };
+
+  const handleEditorCreated = (editor: any) => {
+    editorRef.value = editor;
+  };
+
+  // 文件上传
+  const uploadFileList = ref<FileItem[]>([]);
+
+  const handleUploadSuccess = (files: FileItem[]) => {
+    uploadFileList.value = files;
+    if (files.length > 0 && files[0].file) {
+      // 这里需要实际上传文件到服务器,获取 fileUrl
+      // 暂时使用文件对象,实际应该调用上传接口
+      ruleFormData.fileUrl = files[0].file.name; // 临时处理,需要替换为实际上传后的URL
+    }
+  };
+
+  const getFileName = (url: string) => {
+    if (!url) return '';
+    const parts = url.split('/');
+    return parts[parts.length - 1];
+  };
 
   const handleValidate = async () => {
     if (!basicFormRef.value) return;
@@ -83,6 +153,18 @@
         ruleFormData.fileUrl = res.fileUrl || '';
         ruleFormData.content = res.content || '';
         ruleFormData.status = res.status ?? 1;
+        
+        // 如果有文件URL,转换为FileItem格式
+        if (res.fileUrl) {
+          uploadFileList.value = [
+            {
+              fileId: Date.now(),
+              fileName: getFileName(res.fileUrl),
+              fileType: res.fileFormat?.toLowerCase() === 'pdf' ? 'pdf' : 'word',
+              fileSize: '0KB',
+            },
+          ];
+        }
       }
       cloneRuleFormData();
     } catch (e) {
@@ -132,9 +214,43 @@
       getDetail();
     }
   });
+
+  onBeforeUnmount(() => {
+    const editor = editorRef.value;
+    if (editor == null) return;
+    editor.destroy();
+  });
 </script>
 
 <style scoped lang="scss">
   @use '@/styles/page-details-layout.scss' as *;
+
+  .editor-container {
+    width: 100%;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+  }
+
+  .content-display {
+    min-height: 200px;
+    padding: 12px;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+    background-color: #f5f7fa;
+  }
+
+  .file-display {
+    .file-link {
+      color: #409eff;
+      text-decoration: none;
+      &:hover {
+        text-decoration: underline;
+      }
+    }
+  }
+
+  .no-file {
+    color: rgba(0, 0, 0, 0.65);
+  }
 </style>
 

+ 5 - 29
src/views/production-safety/productionSafetySystem/doubleSystemManagement/configs/form.ts

@@ -40,14 +40,7 @@ export const DUAL_SYSTEM_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'fileFormat',
     label: '文件格式:',
-    component: 'ElSelect',
-    componentProps: {
-      placeholder: '请选择文件格式',
-    },
-    options: [
-      { label: 'PDF', value: 'PDF' },
-      { label: 'WORD', value: 'WORD' },
-    ],
+    slot: 'fileFormat',
   },
   {
     prop: 'releaseDate',
@@ -62,34 +55,17 @@ export const DUAL_SYSTEM_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'fileUrl',
     label: '文件上传:',
-    component: 'ElUpload',
-    componentProps: {
-      action: '', // 需要配置实际的上传接口
-      accept: '.pdf,.doc,.docx',
-      limit: 1,
-    },
+    slot: 'fileUrl',
   },
   {
     prop: 'content',
     label: '文档内容:',
-    component: 'ElInput',
-    componentProps: {
-      type: 'textarea',
-      rows: 8,
-      placeholder: '请输入文档内容(富文本)',
-    },
+    slot: 'content',
   },
   {
     prop: 'status',
-    label: '启用状态:',
-    component: 'ElSelect',
-    componentProps: {
-      placeholder: '请选择启用状态',
-    },
-    options: [
-      { label: '启用', value: 1 },
-      { label: '禁用', value: 0 },
-    ],
+    label: '状态:',
+    slot: 'status',
   },
 ];
 

+ 5 - 29
src/views/production-safety/productionSafetySystem/lawManagement/configs/form.ts

@@ -40,14 +40,7 @@ export const LAW_REGULATION_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'fileFormat',
     label: '文件格式:',
-    component: 'ElSelect',
-    componentProps: {
-      placeholder: '请选择文件格式',
-    },
-    options: [
-      { label: 'PDF', value: 'PDF' },
-      { label: 'WORD', value: 'WORD' },
-    ],
+    slot: 'fileFormat',
   },
   {
     prop: 'releaseDate',
@@ -62,34 +55,17 @@ export const LAW_REGULATION_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'fileUrl',
     label: '文件上传:',
-    component: 'ElUpload',
-    componentProps: {
-      action: '', // 需要配置实际的上传接口
-      accept: '.pdf,.doc,.docx',
-      limit: 1,
-    },
+    slot: 'fileUrl',
   },
   {
     prop: 'content',
     label: '文档内容:',
-    component: 'ElInput',
-    componentProps: {
-      type: 'textarea',
-      rows: 8,
-      placeholder: '请输入文档内容(富文本)',
-    },
+    slot: 'content',
   },
   {
     prop: 'status',
-    label: '启用状态:',
-    component: 'ElSelect',
-    componentProps: {
-      placeholder: '请选择启用状态',
-    },
-    options: [
-      { label: '启用', value: 1 },
-      { label: '禁用', value: 0 },
-    ],
+    label: '状态:',
+    slot: 'status',
   },
 ];
 

+ 118 - 2
src/views/production-safety/productionSafetySystem/safetyStandardizationSystemManagement/components/safetyStandardizationSystemManagementDetail.vue

@@ -5,7 +5,44 @@
       :formData="ruleFormData"
       :formRules="isViewMode ? undefined : formRules"
       :formConfig="computedFormConfig"
-    />
+    >
+      <template #fileFormat>
+        <el-radio-group v-model="ruleFormData.fileFormat" :disabled="isViewMode">
+          <el-radio value="PDF">PDF</el-radio>
+          <el-radio value="WORD">WORD</el-radio>
+        </el-radio-group>
+      </template>
+      <template #fileUrl>
+        <UploadFiles
+          v-if="!isViewMode"
+          label="上传文件"
+          :maxCount="1"
+          :fileList="uploadFileList"
+          @uploadSuccess="handleUploadSuccess"
+        />
+        <div v-else-if="ruleFormData.fileUrl" class="file-display">
+          <a :href="ruleFormData.fileUrl" target="_blank" class="file-link">{{ getFileName(ruleFormData.fileUrl) }}</a>
+        </div>
+        <span v-else class="no-file">暂无文件</span>
+      </template>
+      <template #content>
+        <div v-if="!isViewMode" class="editor-container">
+          <Editor
+            v-model="ruleFormData.content"
+            :defaultConfig="editorConfig"
+            style="height: 400px"
+            @onCreated="handleEditorCreated"
+          />
+        </div>
+        <div v-else class="content-display" v-html="ruleFormData.content || '暂无内容'"></div>
+      </template>
+      <template #status>
+        <el-radio-group v-model="ruleFormData.status" :disabled="isViewMode">
+          <el-radio :value="1">启用</el-radio>
+          <el-radio :value="0">禁用</el-radio>
+        </el-radio-group>
+      </template>
+    </BasicForm>
   </main>
   <footer class="safety-platform-container__footer">
     <el-button @click="router.back()">返回</el-button>
@@ -16,10 +53,13 @@
 </template>
 
 <script setup lang="ts">
-  import { computed, onMounted, ref } from 'vue';
+  import { computed, onMounted, ref, shallowRef, onBeforeUnmount } from 'vue';
   import { useRoute, useRouter } from 'vue-router';
   import { ElMessage } from 'element-plus';
   import BasicForm from '@/components/BasicForm.vue';
+  import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
+  import { Editor } from '@wangeditor/editor-for-vue';
+  import '@wangeditor/editor/dist/css/style.css';
   import { useFormConfigHook } from '@/hooks/useFormConfigHook';
   import {
     SAFETY_STANDARDIZATION_FORM_CONFIG,
@@ -32,6 +72,7 @@
     updateSafetyStandardization,
     type ProductionSafetyFile,
   } from '@/api/production-safety-system';
+  import type { FileItem } from '@/components/UploadFiles/types';
 
   const router = useRouter();
   const route = useRoute();
@@ -69,6 +110,35 @@
   });
 
   const basicFormRef = ref<InstanceType<typeof BasicForm>>();
+  
+  // 富文本编辑器
+  const editorRef = shallowRef();
+  const editorConfig = {
+    placeholder: '请输入文档内容',
+    MENU_CONF: {},
+  };
+
+  const handleEditorCreated = (editor: any) => {
+    editorRef.value = editor;
+  };
+
+  // 文件上传
+  const uploadFileList = ref<FileItem[]>([]);
+
+  const handleUploadSuccess = (files: FileItem[]) => {
+    uploadFileList.value = files;
+    if (files.length > 0 && files[0].file) {
+      // 这里需要实际上传文件到服务器,获取 fileUrl
+      // 暂时使用文件对象,实际应该调用上传接口
+      ruleFormData.fileUrl = files[0].file.name; // 临时处理,需要替换为实际上传后的URL
+    }
+  };
+
+  const getFileName = (url: string) => {
+    if (!url) return '';
+    const parts = url.split('/');
+    return parts[parts.length - 1];
+  };
 
   const handleValidate = async () => {
     if (!basicFormRef.value) return;
@@ -91,6 +161,18 @@
         ruleFormData.fileUrl = res.fileUrl || '';
         ruleFormData.content = res.content || '';
         ruleFormData.status = res.status ?? 1;
+        
+        // 如果有文件URL,转换为FileItem格式
+        if (res.fileUrl) {
+          uploadFileList.value = [
+            {
+              fileId: Date.now(),
+              fileName: getFileName(res.fileUrl),
+              fileType: res.fileFormat?.toLowerCase() === 'pdf' ? 'pdf' : 'word',
+              fileSize: '0KB',
+            },
+          ];
+        }
       }
       cloneRuleFormData();
     } catch (e) {
@@ -140,9 +222,43 @@
       getDetail();
     }
   });
+
+  onBeforeUnmount(() => {
+    const editor = editorRef.value;
+    if (editor == null) return;
+    editor.destroy();
+  });
 </script>
 
 <style scoped lang="scss">
   @use '@/styles/page-details-layout.scss' as *;
+
+  .editor-container {
+    width: 100%;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+  }
+
+  .content-display {
+    min-height: 200px;
+    padding: 12px;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+    background-color: #f5f7fa;
+  }
+
+  .file-display {
+    .file-link {
+      color: #409eff;
+      text-decoration: none;
+      &:hover {
+        text-decoration: underline;
+      }
+    }
+  }
+
+  .no-file {
+    color: rgba(0, 0, 0, 0.65);
+  }
 </style>
 

+ 5 - 29
src/views/production-safety/productionSafetySystem/safetyStandardizationSystemManagement/configs/form.ts

@@ -40,14 +40,7 @@ export const SAFETY_STANDARDIZATION_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'fileFormat',
     label: '文件格式:',
-    component: 'ElSelect',
-    componentProps: {
-      placeholder: '请选择文件格式',
-    },
-    options: [
-      { label: 'PDF', value: 'PDF' },
-      { label: 'WORD', value: 'WORD' },
-    ],
+    slot: 'fileFormat',
   },
   {
     prop: 'releaseDate',
@@ -62,34 +55,17 @@ export const SAFETY_STANDARDIZATION_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'fileUrl',
     label: '文件上传:',
-    component: 'ElUpload',
-    componentProps: {
-      action: '', // 需要配置实际的上传接口
-      accept: '.pdf,.doc,.docx',
-      limit: 1,
-    },
+    slot: 'fileUrl',
   },
   {
     prop: 'content',
     label: '文档内容:',
-    component: 'ElInput',
-    componentProps: {
-      type: 'textarea',
-      rows: 8,
-      placeholder: '请输入文档内容(富文本)',
-    },
+    slot: 'content',
   },
   {
     prop: 'status',
-    label: '启用状态:',
-    component: 'ElSelect',
-    componentProps: {
-      placeholder: '请选择启用状态',
-    },
-    options: [
-      { label: '启用', value: 1 },
-      { label: '禁用', value: 0 },
-    ],
+    label: '状态:',
+    slot: 'status',
   },
 ];
 

+ 7 - 7
src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/safetySystemConstructionWorkPlanManagement.vue

@@ -213,19 +213,19 @@
 
   const handleCreate = () => {
     router.push({
-      name: 'InventoryItem',
+      name: 'SafetySystemConstructionWorkPlanManagementItem',
       query: {
-        operate: 'inventory-create',
+        operate: 'work-plan-create',
       },
     });
   };
 
   const handleEdit = (id: number) => {
     router.push({
-      name: 'InventoryItem',
+      name: 'SafetySystemConstructionWorkPlanManagementItem',
       query: {
         id,
-        operate: 'inventory-edit',
+        operate: 'work-plan-edit',
       },
     });
   };
@@ -236,17 +236,17 @@
       ElMessage.success('删除成功');
       getTableData();
     } catch (e) {
-      console.error('删除物品库存失败:', e);
+      console.error('删除工作计划失败:', e);
       ElMessage.error('删除失败,请重试');
     }
   };
 
   const handleView = (id: number) => {
     router.push({
-      name: 'InventoryItem',
+      name: 'SafetySystemConstructionWorkPlanManagementItem',
       query: {
         id,
-        operate: 'inventory-view',
+        operate: 'work-plan-view',
       },
     });
   };

+ 8 - 8
src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/safetySystemConstructionWorkPlanManagementItem.vue

@@ -4,7 +4,7 @@
       <BreadcrumbBack />
       <span class="breadcrumb-title">{{ headerTitle }}</span>
     </header>
-    <InventoryDetail />
+    <SafetySystemConstructionWorkPlanManagementDetail />
   </div>
 </template>
 
@@ -12,19 +12,19 @@
   import { computed } from 'vue';
   import { useRoute } from 'vue-router';
   import BreadcrumbBack from '@/components/BreadcrumbBack.vue';
-  import InventoryDetail from './components/InventoryDetail.vue';
+  import SafetySystemConstructionWorkPlanManagementDetail from './components/safetySystemConstructionWorkPlanManagementDetail.vue';
 
   const route = useRoute();
   const operate = route.query.operate as string;
 
   const headerTitle = computed(() => {
     switch (operate) {
-      case 'inventory-create':
-        return '新增物品';
-      case 'inventory-edit':
-        return '编辑物品';
-      case 'inventory-view':
-        return '查看物品';
+      case 'work-plan-create':
+        return '新增安全体系建设工作计划';
+      case 'work-plan-edit':
+        return '编辑安全体系建设工作计划';
+      case 'work-plan-view':
+        return '查看安全体系建设工作计划';
       default:
         return '未知操作';
     }

+ 3 - 74
src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagementDept/safetySystemConstructionWorkPlanManagementDept.vue

@@ -7,12 +7,6 @@
       <div class="search-table-container">
         <header>
           <div style="position: relative">
-            <el-button type="primary" class="search-table-container--button" @click="handleCreate">
-              添加
-            </el-button>
-            <el-button plain class="search-table-container--button" @click="handleImport">
-              导入
-            </el-button>
             <el-button plain class="search-table-container--button" @click="handleDownload">
               导出
             </el-button>
@@ -62,14 +56,6 @@
             </template>
             <template #action="scope">
               <div class="action-container--div" style="justify-content: left">
-                <ActionButton text="编辑" @click="handleEdit(scope.row.id)" />
-                <ActionButton
-                  text="删除"
-                  :popconfirm="{
-                    title: '确定要删除?',
-                  }"
-                  @confirm="handleDelete(scope.row.id)"
-                />
                 <ActionButton text="查看" @click="handleView(scope.row.id)" />
               </div>
             </template>
@@ -77,16 +63,6 @@
         </div>
       </div>
     </main>
-    <BatchImport
-      v-if="batchImportVisible"
-      :visible="batchImportVisible"
-      :import-api-url="importApiUrl"
-      :template-url="templateUrl"
-      template-name="下载模板"
-      :show-template="false"
-      @close="batchImportVisible = false"
-      @update="handleUpdate"
-    />
   </div>
 </template>
 
@@ -99,11 +75,8 @@
   import { TABLE_OPTIONS, INVENTORY_TABLE_COLUMNS } from './configs/tables';
   import { useRouter } from 'vue-router';
   import type { QueryPageRequest } from '@/types/basic-query';
-  import { queryInventoryManage, deleteInventory, exportInventory } from '@/api/inventory';
+  import { queryInventoryManage, exportInventory } from '@/api/inventory';
   import { downloadByData } from '@/utils/file/download';
-  import BatchImport from '@/components/batch-import/BatchImport.vue';
-  import { useGlobSetting } from '@/hooks/setting';
-  import urlJoin from 'url-join';
 
   const router = useRouter();
 
@@ -177,20 +150,6 @@
     handleSearch();
   };
 
-  // 批量导入
-  const batchImportVisible = ref(false);
-  const { urlPrefix } = useGlobSetting();
-  const importApiUrl = ref(urlJoin(urlPrefix, '/inventory/importInventory'));
-  const templateUrl = ref('./skyeye-file-upload/sfysecurity/TEMPLATE/import-inventory-template.xlsx');
-
-  const handleImport = () => {
-    batchImportVisible.value = true;
-  };
-
-  const handleUpdate = () => {
-    batchImportVisible.value = false;
-    getTableData();
-  };
 
   const handleDownload = async () => {
     try {
@@ -211,42 +170,12 @@
     }
   };
 
-  const handleCreate = () => {
-    router.push({
-      name: 'InventoryItem',
-      query: {
-        operate: 'inventory-create',
-      },
-    });
-  };
-
-  const handleEdit = (id: number) => {
-    router.push({
-      name: 'InventoryItem',
-      query: {
-        id,
-        operate: 'inventory-edit',
-      },
-    });
-  };
-
-  const handleDelete = async (id: number) => {
-    try {
-      await deleteInventory(id);
-      ElMessage.success('删除成功');
-      getTableData();
-    } catch (e) {
-      console.error('删除物品库存失败:', e);
-      ElMessage.error('删除失败,请重试');
-    }
-  };
-
   const handleView = (id: number) => {
     router.push({
-      name: 'InventoryItem',
+      name: 'SafetySystemConstructionWorkPlanManagementDeptItem',
       query: {
         id,
-        operate: 'inventory-view',
+        operate: 'work-plan-dept-view',
       },
     });
   };

+ 5 - 9
src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagementDept/safetySystemConstructionWorkPlanManagementDeptItem.vue

@@ -4,7 +4,7 @@
       <BreadcrumbBack />
       <span class="breadcrumb-title">{{ headerTitle }}</span>
     </header>
-    <InventoryDetail />
+    <SafetySystemConstructionWorkPlanManagementDeptDetail />
   </div>
 </template>
 
@@ -12,21 +12,17 @@
   import { computed } from 'vue';
   import { useRoute } from 'vue-router';
   import BreadcrumbBack from '@/components/BreadcrumbBack.vue';
-  import InventoryDetail from './components/InventoryDetail.vue';
+  import SafetySystemConstructionWorkPlanManagementDeptDetail from './components/safetySystemConstructionWorkPlanManagementDeptDetail.vue';
 
   const route = useRoute();
   const operate = route.query.operate as string;
 
   const headerTitle = computed(() => {
     switch (operate) {
-      case 'inventory-create':
-        return '新增物品';
-      case 'inventory-edit':
-        return '编辑物品';
-      case 'inventory-view':
-        return '查看物品';
+      case 'work-plan-dept-view':
+        return '查看安全体系建设工作计划';
       default:
-        return '未知操作';
+        return '查看安全体系建设工作计划';
     }
   });
 </script>

+ 163 - 28
src/views/production-safety/productionSafetySystem/safetyTraining/components/safetyTrainingDetail.vue

@@ -5,7 +5,44 @@
       :formData="ruleFormData"
       :formRules="isViewMode ? undefined : formRules"
       :formConfig="computedFormConfig"
-    />
+    >
+      <template #fileFormat>
+        <el-radio-group v-model="ruleFormData.fileFormat" :disabled="isViewMode">
+          <el-radio value="PDF">PDF</el-radio>
+          <el-radio value="WORD">WORD</el-radio>
+        </el-radio-group>
+      </template>
+      <template #fileUrl>
+        <UploadFiles
+          v-if="!isViewMode"
+          label="上传文件"
+          :maxCount="1"
+          :fileList="uploadFileList"
+          @uploadSuccess="handleUploadSuccess"
+        />
+        <div v-else-if="ruleFormData.fileUrl" class="file-display">
+          <a :href="ruleFormData.fileUrl" target="_blank" class="file-link">{{ getFileName(ruleFormData.fileUrl) }}</a>
+        </div>
+        <span v-else class="no-file">暂无文件</span>
+      </template>
+      <template #content>
+        <div v-if="!isViewMode" class="editor-container">
+          <Editor
+            v-model="ruleFormData.content"
+            :defaultConfig="editorConfig"
+            style="height: 400px"
+            @onCreated="handleEditorCreated"
+          />
+        </div>
+        <div v-else class="content-display" v-html="ruleFormData.content || '暂无内容'"></div>
+      </template>
+      <template #status>
+        <el-radio-group v-model="ruleFormData.status" :disabled="isViewMode">
+          <el-radio :value="1">启用</el-radio>
+          <el-radio :value="0">禁用</el-radio>
+        </el-radio-group>
+      </template>
+    </BasicForm>
   </main>
   <footer class="safety-platform-container__footer">
     <el-button @click="router.back()">返回</el-button>
@@ -16,30 +53,46 @@
 </template>
 
 <script setup lang="ts">
-  import { computed, onMounted, ref } from 'vue';
+  import { computed, onMounted, ref, shallowRef, onBeforeUnmount } from 'vue';
   import { useRoute, useRouter } from 'vue-router';
   import { ElMessage } from 'element-plus';
   import BasicForm from '@/components/BasicForm.vue';
+  import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
+  import { Editor } from '@wangeditor/editor-for-vue';
+  import '@wangeditor/editor/dist/css/style.css';
   import { useFormConfigHook } from '@/hooks/useFormConfigHook';
-  import { INVENTORY_FORM_CONFIG, INVENTORY_FORM_DATA, INVENTORY_FORM_RULES } from '../configs/form';
-  import { queryInventoryDetail, saveInventory, updateInventory } from '@/api/inventory';
+  import {
+    INDUSTRY_STANDARD_FORM_CONFIG,
+    INDUSTRY_STANDARD_FORM_DATA,
+    INDUSTRY_STANDARD_FORM_RULES,
+  } from '../configs/form';
+  import {
+    queryIndustryStandardById,
+    saveIndustryStandard,
+    updateIndustryStandard,
+    type ProductionSafetyFile,
+  } from '@/api/production-safety-system';
+  import type { FileItem } from '@/components/UploadFiles/types';
 
   const router = useRouter();
   const route = useRoute();
 
-  const operate = computed(() => (route.query.operate as string) || 'inventory-create');
+  const operate = computed(() => (route.query.operate as string) || 'industry-standard-create');
   const currentId = computed(() => Number(route.query.id));
 
-  const isCreateMode = computed(() => operate.value === 'inventory-create');
-  const isEditMode = computed(() => operate.value === 'inventory-edit');
-  const isViewMode = computed(() => operate.value === 'inventory-view');
+  const isCreateMode = computed(() => operate.value === 'industry-standard-create');
+  const isEditMode = computed(() => operate.value === 'industry-standard-edit');
+  const isViewMode = computed(() => operate.value === 'industry-standard-view');
 
-  const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } =
-    useFormConfigHook(INVENTORY_FORM_CONFIG, INVENTORY_FORM_DATA, INVENTORY_FORM_RULES);
+  const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } = useFormConfigHook(
+    INDUSTRY_STANDARD_FORM_CONFIG,
+    INDUSTRY_STANDARD_FORM_DATA,
+    INDUSTRY_STANDARD_FORM_RULES,
+  );
 
   // 查看模式下,所有字段设为只读
   const viewFormConfig = ref(
-    INVENTORY_FORM_CONFIG.map((item) => ({
+    INDUSTRY_STANDARD_FORM_CONFIG.map((item) => ({
       ...item,
       componentProps: {
         ...item.componentProps,
@@ -57,6 +110,35 @@
 
   const basicFormRef = ref<InstanceType<typeof BasicForm>>();
 
+  // 富文本编辑器
+  const editorRef = shallowRef();
+  const editorConfig = {
+    placeholder: '请输入文档内容',
+    MENU_CONF: {},
+  };
+
+  const handleEditorCreated = (editor: any) => {
+    editorRef.value = editor;
+  };
+
+  // 文件上传
+  const uploadFileList = ref<FileItem[]>([]);
+
+  const handleUploadSuccess = (files: FileItem[]) => {
+    uploadFileList.value = files;
+    if (files.length > 0 && files[0].file) {
+      // 这里需要实际上传文件到服务器,获取 fileUrl
+      // 暂时使用文件对象,实际应该调用上传接口
+      ruleFormData.fileUrl = files[0].file.name; // 临时处理,需要替换为实际上传后的URL
+    }
+  };
+
+  const getFileName = (url: string) => {
+    if (!url) return '';
+    const parts = url.split('/');
+    return parts[parts.length - 1];
+  };
+
   const handleValidate = async () => {
     if (!basicFormRef.value) return;
     const res = await basicFormRef.value.validateForm();
@@ -66,17 +148,34 @@
   const getDetail = async () => {
     if (!currentId.value) return;
     try {
-      const res = await queryInventoryDetail(currentId.value);
+      const res = await queryIndustryStandardById(currentId.value);
       if (res) {
         // 映射接口字段到表单字段
-        ruleFormData.itemName = res.stuffName; // 物品名称
-        ruleFormData.warehouseDate = res.inStoreTime ? res.inStoreTime.split('T')[0] : ''; // 入库日期(YYYY-MM-DD)
-        ruleFormData.itemQuantity = res.stuffQty; // 物品数量
-        ruleFormData.remarks = res.remark || ''; // 备注
+        ruleFormData.fileName = res.fileName || '';
+        ruleFormData.classifyName = res.classifyName || '';
+        ruleFormData.fileCode = res.fileCode || '';
+        ruleFormData.fileVersion = res.fileVersion || '';
+        ruleFormData.fileFormat = res.fileFormat || '';
+        ruleFormData.releaseDate = res.releaseDate || '';
+        ruleFormData.fileUrl = res.fileUrl || '';
+        ruleFormData.content = res.content || '';
+        ruleFormData.status = res.status ?? 1;
+
+        // 如果有文件URL,转换为FileItem格式
+        if (res.fileUrl) {
+          uploadFileList.value = [
+            {
+              fileId: Date.now(),
+              fileName: getFileName(res.fileUrl),
+              fileType: res.fileFormat?.toLowerCase() === 'pdf' ? 'pdf' : 'word',
+              fileSize: '0KB',
+            },
+          ];
+        }
       }
       cloneRuleFormData();
     } catch (e) {
-      console.error('获取物品库存详情失败:', e);
+      console.error('获取行业标准详情失败:', e);
       ElMessage.error('获取详情失败');
     }
   };
@@ -85,20 +184,23 @@
     const res = await handleValidate();
     if (!res) return;
     try {
-      const basePayload = {
-        stuffName: ruleFormData.itemName,
-        inStoreTime: ruleFormData.warehouseDate
-          ? new Date(ruleFormData.warehouseDate).toISOString()
-          : '',
-        stuffQty: ruleFormData.itemQuantity,
-        remark: ruleFormData.remarks || '',
+      const basePayload: ProductionSafetyFile = {
+        fileName: ruleFormData.fileName,
+        classifyName: ruleFormData.classifyName,
+        fileCode: ruleFormData.fileCode,
+        fileVersion: ruleFormData.fileVersion,
+        fileFormat: ruleFormData.fileFormat,
+        releaseDate: ruleFormData.releaseDate,
+        fileUrl: ruleFormData.fileUrl || undefined,
+        content: ruleFormData.content || undefined,
+        status: ruleFormData.status ?? 1,
       };
 
       if (isCreateMode.value) {
-        await saveInventory(basePayload);
+        await saveIndustryStandard(basePayload);
         ElMessage.success('创建成功');
       } else if (isEditMode.value && currentId.value) {
-        await updateInventory({
+        await updateIndustryStandard({
           id: currentId.value,
           ...basePayload,
         });
@@ -107,7 +209,7 @@
 
       router.back();
     } catch (e) {
-      console.error('保存物品库存失败:', e);
+      console.error('保存行业标准失败:', e);
       ElMessage.error('保存失败,请重试');
     }
   };
@@ -119,9 +221,42 @@
       getDetail();
     }
   });
+
+  onBeforeUnmount(() => {
+    const editor = editorRef.value;
+    if (editor == null) return;
+    editor.destroy();
+  });
 </script>
 
 <style scoped lang="scss">
   @use '@/styles/page-details-layout.scss' as *;
-</style>
 
+  .editor-container {
+    width: 100%;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+  }
+
+  .content-display {
+    min-height: 200px;
+    padding: 12px;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+    background-color: #f5f7fa;
+  }
+
+  .file-display {
+    .file-link {
+      color: #409eff;
+      text-decoration: none;
+      &:hover {
+        text-decoration: underline;
+      }
+    }
+  }
+
+  .no-file {
+    color: rgba(0, 0, 0, 0.65);
+  }
+</style>

+ 66 - 33
src/views/production-safety/productionSafetySystem/safetyTraining/configs/form.ts

@@ -1,58 +1,91 @@
 import { FormConfig } from '@/types/basic-form';
 
-export const INVENTORY_FORM_CONFIG: FormConfig[] = [
+export const INDUSTRY_STANDARD_FORM_CONFIG: FormConfig[] = [
   {
-    prop: 'itemName',
-    label: '物品名称:',
+    prop: 'fileName',
+    label: '文件名称:',
     component: 'ElInput',
     componentProps: {
-      placeholder: '请输入物品名称',
+      placeholder: '请输入文件名称',
     },
   },
   {
-    prop: 'warehouseDate',
-    label: '入库日期:',
-    component: 'ElDatePicker',
+    prop: 'classifyName',
+    label: '分类名称:',
+    component: 'ElSelect',
     componentProps: {
-      type: 'date',
-      placeholder: '请选择入库日期',
-      valueFormat: 'YYYY-MM-DD',
+      placeholder: '请选择分类名称',
     },
+    options: [
+      { label: '外部行业标准', value: '外部行业标准' },
+      { label: '内部行业标准', value: '内部行业标准' },
+    ],
   },
   {
-    prop: 'itemQuantity',
-    label: '物品数量:',
-    component: 'ElInputNumber',
+    prop: 'fileCode',
+    label: '文件编号:',
+    component: 'ElInput',
     componentProps: {
-      min: 1,
-      precision: 0, // 不允许小数点,只能输入整数
-      placeholder: '请输入物品数量',
+      placeholder: '请输入文件编号',
     },
   },
   {
-    label: '备注:',
-    prop: 'remarks',
+    prop: 'fileVersion',
+    label: '文件版本号:',
     component: 'ElInput',
     componentProps: {
-      type: 'textarea',
-      rows: 5,
-      placeholder: '请输入备注',
+      placeholder: '请输入文件版本号,如:V1.0',
     },
   },
+  {
+    prop: 'fileFormat',
+    label: '文件格式:',
+    slot: 'fileFormat',
+  },
+  {
+    prop: 'releaseDate',
+    label: '发布日期:',
+    component: 'ElDatePicker',
+    componentProps: {
+      type: 'date',
+      placeholder: '请选择发布日期',
+      valueFormat: 'YYYY-MM-DD',
+    },
+  },
+  {
+    prop: 'fileUrl',
+    label: '文件上传:',
+    slot: 'fileUrl',
+  },
+  {
+    prop: 'content',
+    label: '文档内容:',
+    slot: 'content',
+  },
+  {
+    prop: 'status',
+    label: '状态:',
+    slot: 'status',
+  },
 ];
 
-export const INVENTORY_FORM_DATA = {
-  itemName: '',
-  warehouseDate: '',
-  itemQuantity: 1, // 最小值为1
-  remarks: '',
+export const INDUSTRY_STANDARD_FORM_DATA = {
+  fileName: '',
+  classifyName: '',
+  fileCode: '',
+  fileVersion: '',
+  fileFormat: '',
+  releaseDate: '',
+  fileUrl: '',
+  content: '',
+  status: 1, // 默认启用
 };
 
-export const INVENTORY_FORM_RULES = {
-  itemName: [{ required: true, message: '请输入物品名称', trigger: 'blur' }],
-  warehouseDate: [{ required: true, message: '请选择入库日期', trigger: 'change' }],
-  itemQuantity: [
-    { required: true, message: '请输入物品数量', trigger: 'blur' },
-    { type: 'number', min: 1, message: '物品数量不能小于1', trigger: 'blur' },
-  ],
+export const INDUSTRY_STANDARD_FORM_RULES = {
+  fileName: [{ required: true, message: '请输入文件名称', trigger: 'blur' }],
+  classifyName: [{ required: true, message: '请选择分类名称', trigger: 'change' }],
+  fileCode: [{ required: true, message: '请输入文件编号', trigger: 'blur' }],
+  fileVersion: [{ required: true, message: '请输入文件版本号', trigger: 'blur' }],
+  fileFormat: [{ required: true, message: '请选择文件格式', trigger: 'change' }],
+  releaseDate: [{ required: true, message: '请选择发布日期', trigger: 'change' }],
 };

+ 7 - 7
src/views/production-safety/productionSafetySystem/safetyTraining/safetyTraining.vue

@@ -213,19 +213,19 @@
 
   const handleCreate = () => {
     router.push({
-      name: 'InventoryItem',
+      name: 'SafetyTrainingItem',
       query: {
-        operate: 'inventory-create',
+        operate: 'industry-standard-create',
       },
     });
   };
 
   const handleEdit = (id: number) => {
     router.push({
-      name: 'InventoryItem',
+      name: 'SafetyTrainingItem',
       query: {
         id,
-        operate: 'inventory-edit',
+        operate: 'industry-standard-edit',
       },
     });
   };
@@ -236,17 +236,17 @@
       ElMessage.success('删除成功');
       getTableData();
     } catch (e) {
-      console.error('删除物品库存失败:', e);
+      console.error('删除行业标准失败:', e);
       ElMessage.error('删除失败,请重试');
     }
   };
 
   const handleView = (id: number) => {
     router.push({
-      name: 'InventoryItem',
+      name: 'SafetyTrainingItem',
       query: {
         id,
-        operate: 'inventory-view',
+        operate: 'industry-standard-view',
       },
     });
   };

+ 8 - 8
src/views/production-safety/productionSafetySystem/safetyTraining/safetyTrainingItem.vue

@@ -4,7 +4,7 @@
       <BreadcrumbBack />
       <span class="breadcrumb-title">{{ headerTitle }}</span>
     </header>
-    <InventoryDetail />
+    <SafetyTrainingDetail />
   </div>
 </template>
 
@@ -12,19 +12,19 @@
   import { computed } from 'vue';
   import { useRoute } from 'vue-router';
   import BreadcrumbBack from '@/components/BreadcrumbBack.vue';
-  import InventoryDetail from './components/InventoryDetail.vue';
+  import SafetyTrainingDetail from './components/safetyTrainingDetail.vue';
 
   const route = useRoute();
   const operate = route.query.operate as string;
 
   const headerTitle = computed(() => {
     switch (operate) {
-      case 'inventory-create':
-        return '新增物品';
-      case 'inventory-edit':
-        return '编辑物品';
-      case 'inventory-view':
-        return '查看物品';
+      case 'industry-standard-create':
+        return '新增行业标准';
+      case 'industry-standard-edit':
+        return '编辑行业标准';
+      case 'industry-standard-view':
+        return '查看行业标准';
       default:
         return '未知操作';
     }