浏览代码

refactor:类型文件规范调整;
feat:新增流程全局组件;

zhangchong 1 年之前
父节点
当前提交
19e3ada44d
共有 100 个文件被更改,包括 1257 次插入949 次删除
  1. 0 3
      .eslintignore
  2. 0 5
      plugins.d.ts
  3. 0 13
      shim.d.ts
  4. 0 6
      source.d.ts
  5. 1 1
      src/App.vue
  6. 1 1
      src/api/public/wex.ts
  7. 4 4
      src/components/LogicFlow/PropertySetting/index.vue
  8. 14 5
      src/components/LogicFlow/PropertySetting/summary.vue
  9. 13 5
      src/components/LogicFlow/PropertySetting/task.vue
  10. 14 14
      src/components/LogicFlow/index.vue
  11. 368 0
      src/components/ProcessApproval/index.vue
  12. 1 9
      src/layout/component/columnsAside.vue
  13. 1 7
      src/layout/navBars/breadcrumb/breadcrumb.vue
  14. 0 5
      src/layout/navBars/breadcrumb/search.vue
  15. 1 2
      src/layout/navBars/breadcrumb/telControl.vue
  16. 0 14
      src/layout/navBars/tagsView/tagsView.vue
  17. 3 9
      src/layout/routerView/link.vue
  18. 0 8
      src/layout/routerView/parent.vue
  19. 20 21
      src/stores/appConfig.ts
  20. 0 148
      src/stores/interface/index.ts
  21. 0 1
      src/stores/keepAliveNames.ts
  22. 0 2
      src/stores/requestOldRoutes.ts
  23. 0 1
      src/stores/routesList.ts
  24. 0 1
      src/stores/tagsViewRoutes.ts
  25. 17 2
      src/stores/telStatus.ts
  26. 3 4
      src/stores/themeConfig.ts
  27. 0 1
      src/stores/userInfo.ts
  28. 0 3
      src/types/axios.d.ts
  29. 6 10
      src/types/layout.d.ts
  30. 1 12
      src/types/mitt.d.ts
  31. 120 61
      src/types/pinia.d.ts
  32. 6 5
      src/utils/PhoneScript.ts
  33. 1 1
      src/utils/arrayOperation.ts
  34. 1 1
      src/utils/calendar.ts
  35. 1 1
      src/utils/constants.ts
  36. 1 1
      src/utils/mitt.ts
  37. 2 2
      src/utils/other.ts
  38. 7 7
      src/views/business/backlog/index.vue
  39. 1 1
      src/views/business/delay/components/Order-delay.vue
  40. 6 6
      src/views/business/delay/index.vue
  41. 29 31
      src/views/business/order/accept/orderAdd.vue
  42. 32 34
      src/views/business/order/accept/orderEdit.vue
  43. 13 14
      src/views/business/order/accept/repeatOrderDetail.vue
  44. 5 5
      src/views/business/order/components/Order-circulation-record.vue
  45. 10 9
      src/views/business/order/components/Order-comment.vue
  46. 16 16
      src/views/business/order/components/Order-detail.vue
  47. 0 1
      src/views/business/order/components/Order-expand-detail.vue
  48. 64 8
      src/views/business/order/components/Order-expand-form.vue
  49. 17 17
      src/views/business/order/components/Order-history.vue
  50. 13 15
      src/views/business/order/components/Order-process.vue
  51. 4 4
      src/views/business/order/components/Order-revoke.vue
  52. 5 5
      src/views/business/order/components/Order-supply.vue
  53. 9 10
      src/views/business/order/index.vue
  54. 3 3
      src/views/business/release/index.vue
  55. 5 5
      src/views/forgetPwd/component/Forget-password.vue
  56. 4 4
      src/views/forgetPwd/index.vue
  57. 15 7
      src/views/knowledge/apply/component/Knowledge-apply-detail.vue
  58. 13 7
      src/views/knowledge/apply/component/Knowledge-apply-handle.vue
  59. 17 17
      src/views/knowledge/apply/index.vue
  60. 17 12
      src/views/knowledge/apply/my/component/Knowledge-my-apply-add.vue
  61. 15 7
      src/views/knowledge/apply/my/component/Knowledge-my-apply-detail.vue
  62. 8 4
      src/views/knowledge/apply/my/component/Knowledge-my-apply-edit.vue
  63. 19 19
      src/views/knowledge/apply/my/index.vue
  64. 18 8
      src/views/knowledge/component/Knowledge-preview.vue
  65. 10 10
      src/views/knowledge/component/Knowledge-process.vue
  66. 8 9
      src/views/knowledge/config/standard/index.vue
  67. 6 6
      src/views/knowledge/config/type/component/Knowledge-type-add.vue
  68. 6 6
      src/views/knowledge/config/type/component/Knowledge-type-edit.vue
  69. 9 9
      src/views/knowledge/config/type/index.vue
  70. 4 1
      src/views/knowledge/knowledge/component/Knowledge-standard-info.vue
  71. 7 4
      src/views/knowledge/knowledge/component/Knowledge-update.vue
  72. 15 14
      src/views/knowledge/knowledge/component/knowledge-edit.vue
  73. 12 12
      src/views/knowledge/knowledge/delApply/index.vue
  74. 12 13
      src/views/knowledge/knowledge/draft/index.vue
  75. 30 23
      src/views/knowledge/knowledge/index.vue
  76. 15 15
      src/views/knowledge/process/index.vue
  77. 9 9
      src/views/knowledge/retrieval/index.vue
  78. 8 8
      src/views/login/component/Account.vue
  79. 2 2
      src/views/login/index.vue
  80. 4 4
      src/views/system/config/dict/component/Dict-add.vue
  81. 6 6
      src/views/system/config/dict/component/Dict-edit.vue
  82. 16 19
      src/views/system/config/dict/index.vue
  83. 4 4
      src/views/system/config/holiday/index.vue
  84. 7 8
      src/views/system/config/timeLimit/index.vue
  85. 12 13
      src/views/system/config/workflow/component/Workflow-config.vue
  86. 13 9
      src/views/system/config/workflow/component/Workflow-jump.vue
  87. 10 10
      src/views/system/config/workflow/component/workflowEdit.vue
  88. 6 6
      src/views/system/config/workflow/index.vue
  89. 6 6
      src/views/system/dataAuth/component/Data-auth-add.vue
  90. 7 7
      src/views/system/dataAuth/component/Data-auth-edit.vue
  91. 8 10
      src/views/system/dataAuth/index.vue
  92. 2 2
      src/views/system/menu/component/Menu-add.vue
  93. 2 2
      src/views/system/menu/component/Menu-edit.vue
  94. 10 10
      src/views/system/menu/index.vue
  95. 5 5
      src/views/system/organize/component/Org-add.vue
  96. 3 3
      src/views/system/organize/component/Org-edit.vue
  97. 11 11
      src/views/system/organize/index.vue
  98. 1 1
      src/views/system/parameter/component/Parameter-add.vue
  99. 2 2
      src/views/system/parameter/component/Parameter-edit.vue
  100. 4 5
      src/views/system/parameter/index.vue

+ 0 - 3
.eslintignore

@@ -1,7 +1,6 @@
 
 *.sh
 node_modules
-lib
 *.md
 *.scss
 *.woff
@@ -11,8 +10,6 @@ lib
 dist
 mock
 public
-bin
-build
 config
 index.html
 src/assets

+ 0 - 5
plugins.d.ts

@@ -1,5 +0,0 @@
-declare module 'vue-grid-layout';
-declare module 'sortablejs';
-declare module 'qrcodejs2-fixes';
-declare module 'js-cookie';
-declare module 'vue3-seamless-scroll';

+ 0 - 13
shim.d.ts

@@ -1,13 +0,0 @@
-/* eslint-disable */
-
-// 声明文件,*.vue 后缀的文件交给 vue 模块来处理
-declare module '*.vue' {
-	import type { DefineComponent } from 'vue';
-	const component: DefineComponent<{}, {}, any>;
-	export default component;
-}
-// 声明文件,定义全局变量。其它 app.config.globalProperties.xxx,使用 getCurrentInstance() 来获取
-interface Window {
-	nextLoading: boolean;
-	versionMonitor:any;
-}

+ 0 - 6
source.d.ts

@@ -1,6 +0,0 @@
-declare module '*.json';
-declare module '*.png';
-declare module '*.jpg';
-declare module '*.scss';
-declare module '*.ts';
-declare module '*.js';

+ 1 - 1
src/App.vue

@@ -27,7 +27,6 @@ const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index
 const Setings = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/setings.vue'));
 const CloseFull = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/closeFull.vue'));
 
-const setingsRef = ref<RefType>();
 const route = useRoute();
 const stores = useTagsViewRoutes();
 const storesThemeConfig = useThemeConfig();
@@ -56,6 +55,7 @@ const getGlobalComponentSize = computed(() => {
 	return other.globalComponentSize();
 });
 // 布局配置弹窗打开
+const setingsRef = ref<RefType>();
 const openSetingsDrawer = () => {
 	setingsRef.value.openDrawer();
 };

+ 1 - 1
src/api/public/wex.ts

@@ -120,7 +120,7 @@ export const blacklistPaged = (data:object) => {
  */
 export const callLogPaged = (data:object) => {
     return request({
-        url: `/api/record/page`,
+        url: `/api/record/list_page`,
         method: 'post',
         baseURL:import.meta.env.VITE_WEX_API_URL,
         data

+ 4 - 4
src/components/LogicFlow/PropertySetting/index.vue

@@ -22,10 +22,10 @@ import { reactive, ref, computed, defineAsyncComponent, unref } from 'vue';
 import { NodeTypeEnum } from '../enums';
 const task = defineAsyncComponent(() => import('./task.vue'));
 const summary = defineAsyncComponent(() => import('./summary.vue'));
-const showDrawer = ref(false);
-const drawerRef = ref(null);
-let formData = reactive<any>({} as any);
-const ruleFormRef = ref<RefType>();
+const showDrawer = ref(false);  // 是否显示抽屉
+const drawerRef = ref(null);  // 抽屉ref
+let formData = reactive<any>({} as any);  // 表单数据
+const ruleFormRef = ref<RefType>(); // 表单ref
 const NODE_NAME_LIST = ['hotline:summary', 'hotline:task'] as string[];
 // 组件列表
 const COMPONENT_LIST:any = {

+ 14 - 5
src/components/LogicFlow/PropertySetting/summary.vue

@@ -101,14 +101,23 @@ import { ElMessageBox } from 'element-plus';
 import { removeDuplicate } from '/@/utils/arrayOperation';
 import { baseData, getSelectList,queryUser } from '/@/api/system/workflow';
 import { getCanUseOrg } from '/@/api/system/user';
-// 注意:ref不能与model一样,相同的话表单双向绑定将会失效
-const form = reactive<any>({} as any);
 const ruleFormRef = ref<RefType>();
 // 定义属性
 const props = defineProps<{
 	modelValue: any;
 }>();
-const emits = defineEmits(['update:modelValue', 'countersignStartCode']);
+// 注意:ref不能与model一样,相同的话表单双向绑定将会失效
+const form = reactive<any>({
+  ...props.modelValue,  // 传入的数据
+  handlerClassifiesOrgin: [], // 选择的数据
+  handlerClassifies: [],  // 选择的数据
+  handlerType: '',  // 处理人类型
+  businessProperty: '', // 节点属性
+  countersignMode: '',  // 会签
+  CountersignStartCode: '', // 会签发起节点
+  CountersignEndCode: ''  // 会签结束节点
+});
+const emits = defineEmits(['update:modelValue', 'countersignStartCode']); // 定义事件
 // 处理人
 const handlerTypeOptions = ref([] as any);
 // 下拉内容
@@ -124,8 +133,8 @@ const orgData = ref([] as any);
 // 会签
 const itemName = ref('' as any);
 //
-const loading = ref(false);
-const nodesOptions = ref([] as any);
+const loading = ref(false); // 加载
+const nodesOptions = ref([] as any);  // 节点
 watch(
 	() => form,
 	() => {

+ 13 - 5
src/components/LogicFlow/PropertySetting/task.vue

@@ -95,14 +95,23 @@ import { reactive, watch, onMounted, ref } from 'vue';
 import { baseData, getSelectList,queryUser } from '/@/api/system/workflow';
 import { getCanUseOrg } from '/@/api/system/user';
 import { removeDuplicate } from '/@/utils/arrayOperation';
-// 注意:ref不能与model一样,相同的话表单双向绑定将会失效
-const form = reactive<any>({} as any);
 const ruleFormRef = ref<RefType>();
 // 定义属性
 const props = defineProps<{
 	modelValue: any;
 }>();
-const emits = defineEmits(['update:modelValue']);
+// 注意:ref不能与model一样,相同的话表单双向绑定将会失效
+const form = reactive<any>({
+  ...props.modelValue,  // 传入的数据
+  handlerClassifiesOrgin: [], // 选择的数据
+  handlerClassifies: [],  // 选择的数据
+  handlerType: '',  // 处理人类型
+  businessProperty: '', // 节点属性
+  countersignMode: '',  // 会签
+  CountersignStartCode: '', // 会签开始节点
+  CountersignEndCode: ''  // 会签结束节点
+});
+const emits = defineEmits(['update:modelValue']); // 定义事件
 // 处理人
 const handlerTypeOptions = ref([] as any);
 // 下拉内容
@@ -119,8 +128,7 @@ const orgData = ref([] as any);
 const nodesOptions = ref([] as any);
 // 会签
 const itemName = ref('' as any);
-//
-const loading = ref(false);
+const loading = ref(false); // 加载
 watch(
 	() => form,
 	() => {

+ 14 - 14
src/components/LogicFlow/index.vue

@@ -55,26 +55,16 @@ import mittBus from '/@/utils/mitt';
 import { throttle } from '/@/utils/tools';
 import {ElMessage, ElMessageBox, FormInstance} from 'element-plus';
 // 引入组件
-const PropertySetting = defineAsyncComponent(() => import('./PropertySetting/index.vue'));
+const PropertySetting = defineAsyncComponent(() => import('./PropertySetting/index.vue'));  // 节点属性设置
 
-const route = useRoute();
-const router = useRouter();
-const emits = defineEmits(['update:modelValue', 'on-save']);
-// 定义挂载元素Ref
-const lfElRef: Ref = ref(null);
-// 定义LogicFlow实例
-const lfInstance = ref(null) as Ref<LogicFlow | null>;
-// 定义表单信息
-const propertySettingRef = ref(null) as any;
-// 当前操作节点/或边id
-const currentOpId = ref('');
+const route = useRoute(); // 当前路由信息
+const router = useRouter(); // 路由实例
+const emits = defineEmits(['update:modelValue', 'on-save']);  // 定义组件事件
 // 提交表单数据
 let formData = reactive({} as any);
 // 外层表单
 let form = reactive<any>({} as any);
 const ruleFormRef = ref<RefType>();
-//
-const moduleList = ref([] as any);
 // 定义组件接收的参数
 const props = defineProps({
 	modelValue: {
@@ -131,6 +121,12 @@ watch(
 	}
 );
 // 初始化
+// 定义挂载元素Ref
+const lfElRef: Ref = ref(null);
+// 定义LogicFlow实例
+const lfInstance = ref(null) as Ref<LogicFlow | null>;
+//
+const moduleList = ref([] as any);
 const init = async () => {
 	// 画布配置
 	LogicFlow.use(Snapshot);
@@ -299,6 +295,10 @@ const initOp = () => {
 	]);
 };
 // 初始化事件
+// 定义表单信息
+const propertySettingRef = ref(null) as any;
+// 当前操作节点/或边id
+const currentOpId = ref('');
 const initEvent = () => {
 	if (props.viewer) return;
 	// 初始化事件

+ 368 - 0
src/components/ProcessApproval/index.vue

@@ -0,0 +1,368 @@
+<template>
+  <div>
+    <el-dialog
+        v-model="state.dialogVisible"
+        draggable
+        :title="state.title + '流程'"
+        ref="dialogRef"
+        @mouseup="mouseup"
+        :style="'transform: ' + state.transform + ';'"
+        append-to-body
+        destroy-on-close
+        @opened="opened"
+    >
+      <el-form :model="state.ruleForm" label-width="100px" ref="ruleFormRef">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!['return'].includes(state.processType)">
+            <el-form-item label="下一环节" prop="nextStepCode" :rules="[{ required: true, message: '请选择下一环节', trigger: 'change' }]">
+              <el-select v-model="state.ruleForm.nextStepCode" placeholder="请选择下一环节" class="w100" @change="selectNextStep">
+                <el-option v-for="item in state.nextStepOptions" :key="item.key" :label="item.value" :value="item.key" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!['return'].includes(state.processType)">
+            <el-form-item label="处理人" prop="nextHandlers" :rules="[{ required: false, message: '请选择处理人', trigger: 'change' }]">
+              <el-select
+                  v-model="state.ruleForm.nextHandlers"
+                  multiple
+                  filterable
+                  placeholder="请选择处理人"
+                  class="w100"
+                  @change="selectHandlers"
+                  value-key="key"
+                  clearable
+              >
+                <el-option v-for="item in state.handlerOptions" :key="item.key" :label="item.value" :value="item" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!['return'].includes(state.processType) && showMainHandler">
+            <el-form-item label="主办" prop="nextMainHandler" :rules="[{ required: false, message: '请选择主办', trigger: 'change' }]">
+              <el-select v-model="state.ruleForm.nextMainHandler" placeholder="请选择主办" class="w100" filterable>
+                <el-option v-for="item in state.handlerMainOptions" :key="item.key" :label="item.value" :value="item.key" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <!-- <el-col :xs="24" :sm="12" :md="8" :lg="12" :xl="12">
+            <el-form-item label="" prop="acceptSms">
+              <el-checkbox v-model="state.ruleForm.acceptSms" label="短信通知" />
+            </el-form-item>
+          </el-col> -->
+          <!--  办理流程展示期满时间  -->
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="['next'].includes(state.processType)">
+            <el-form-item label="期满时间" prop="expiredTime" :rules="[{ required: true, message: '请选择期满时间', trigger: 'change' }]">
+              <el-date-picker
+                  v-model="state.ruleForm.expiredTime"
+                  type="datetime"
+                  placeholder="请选择期满时间"
+                  value-format="YYYY-MM-DD[T]HH:mm:ss"
+                  class="w100"
+              />
+            </el-form-item>
+          </el-col>
+          <!--  办理流程和开始流程是否发起会签  -->
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="['next', 'start'].includes(state.processType)">
+            <el-form-item
+                label="是否发起会签"
+                prop="isStartCountersign"
+                :rules="[{ required: false, message: '请选择是否发起会签', trigger: 'change' }]"
+            >
+              <el-switch v-model="state.ruleForm.isStartCountersign" inline-prompt active-text="是" inactive-text="否" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item :label="state.title + '意见'" prop="opinion" :rules="[{ required: true, message: '请填写常用意见', trigger: 'blur' }]">
+              <Comment
+                  @chooseComment="chooseComment"
+                  v-model="state.ruleForm.opinion"
+                  placeholder="请填写常用意见"
+                  :loading="state.loading"
+                  :commonEnum="state.commonEnum"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="附件" prop="additions" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
+              <annex-list></annex-list>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+				<span class="dialog-footer">
+					<el-button @click="onCancel" class="default-button">取 消</el-button>
+					<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading">提 交</el-button>
+				</span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup lang="ts" name="processApproval">
+import { defineAsyncComponent, reactive, ref, computed } from 'vue';
+import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
+import other from '/@/utils/other';
+import { OrderFlowParams, orderStartFlow } from '/@/api/business/order';
+import { workflowNextSteps, workflowNext, workflowRecall, workflowPrevious, workflowRecallParams, workflowStepOptions } from '/@/api/system/workflow';
+
+// 引入组件
+const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue')); // 常用意见
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['orderProcessSuccess', 'orderProcessFailed']);
+// 定义变量内容
+const state = reactive<any>({
+  dialogVisible: false, // 弹窗显示隐藏
+  title: '提交',  // 弹窗标题
+  ruleForm: {
+    acceptSms: false, // 是否接收短信
+    opinion: '', // 意见
+    nextHandlers: [], // 下一节点处理人
+    nextMainHandler: '', // 主办人
+    expiredTime: '', //期满时间
+    isStartCountersign: false, // 是否发起会签
+  },
+  nextStepOptions: [], // 下一节点
+  handlerOptions: [], // 处理人
+  transform: 'translate(0px, 0px)', // 滚动条位置
+  fileList: [], // 附件列表
+  loading: false, // 提交按钮loading
+  processType: 'next',  // 流程状态
+  workflowId: '', // 流程id
+  commonEnum: '', // 常用意见类型
+  handlerClassifies: [], //撤回处理人
+  handlerMainOptions: [], // 主办人
+  handleId: '', // 流程处理ID
+});
+const ruleFormRef = ref<RefType>(); //表单组件
+// 打开弹窗
+const openDialog = async (val: any) => {
+  state.processType = val.processType ?? 'next'; // 流程状态
+  state.ruleForm.workflowId = state.workflowId = val.id ?? ''; // 流程id
+  state.commonEnum = val.commonEnum ?? ''; // 常用意见类型
+  state.title = val.title ?? '提交流程'; // 流程标题
+  let res: any = {};
+  switch (state.processType) {
+    case 'start': //开始流程
+      res = await OrderFlowParams(); //获取开启流程参数
+      state.nextStepOptions = res.result.steps;
+      state.handleId = res.result.id;
+      if (state.nextStepOptions.length === 1) {
+        state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
+        getNextStepOption(res.result.id, state.nextStepOptions[0].key);
+      }
+      break;
+    case 'recall': // 撤回流程
+      res = await workflowRecallParams(state.workflowId); //撤回参数
+      state.nextStepOptions = res.result.steps;
+      state.handleId = res.result.id;
+      if (state.nextStepOptions.length === 1) {
+        state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
+        getNextStepOption(res.result.id, state.nextStepOptions[0].key);
+      }
+      break;
+    case 'return': // 退回流程
+      break;
+    case 'next': // 默认下一流程
+      res = await workflowNextSteps(state.workflowId);
+      state.nextStepOptions = res.result.steps;
+      state.ruleForm.expiredTime = res.result?.expiredTime ?? '';
+      state.handleId = res.result.id;
+      if (state.nextStepOptions.length === 1) {
+        state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
+        getNextStepOption(res.result.id, state.nextStepOptions[0].key);
+      }
+      break;
+    case 'delay': // 延期
+      res = await workflowNextSteps(state.workflowId);
+      state.nextStepOptions = res.result.steps;
+      state.ruleForm.expiredTime = res.result?.expiredTime ?? '';
+      state.handleId = res.result.id;
+      if (state.nextStepOptions.length === 1) {
+        state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
+        getNextStepOption(res.result.id, state.nextStepOptions[0].key);
+      }
+      break;
+    case 'supervise': // 督办
+      res = await workflowNextSteps(state.workflowId);
+      state.nextStepOptions = res.result.steps;
+      state.ruleForm.expiredTime = res.result?.expiredTime ?? '';
+      state.handleId = res.result.id;
+      if (state.nextStepOptions.length === 1) {
+        state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
+        getNextStepOption(res.result.id, state.nextStepOptions[0].key);
+      }
+      break;
+
+    default: // 默认下一流程
+      res = await workflowNextSteps(state.workflowId);
+      state.nextStepOptions = res.result.steps;
+      state.ruleForm.expiredTime = res.result?.expiredTime ?? '';
+      state.handleId = res.result.id;
+      if (state.nextStepOptions.length === 1) {
+        state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
+        getNextStepOption(res.result.id, state.nextStepOptions[0].key);
+      }
+      break;
+  }
+  state.dialogVisible = true;
+};
+// 打开弹窗清空表单
+const opened = () => {
+  ruleFormRef.value?.clearValidate();
+  ruleFormRef.value?.resetFields();
+};
+// 流程选择下一环节
+const selectNextStep = (val: any) => {
+  ruleFormRef.value?.resetFields('nextHandlers');
+  ruleFormRef.value?.resetFields('nextMainHandler');
+  let next: any;
+  next = state.nextStepOptions.find((item: any) => item.key === val);
+  getNextStepOption(state.handleId, next.key);
+};
+// 查询流程下一节点参数
+const getNextStepOption = async (DefineId: string, Code: string) => {
+  try {
+    const res: any = await workflowStepOptions({ DefineId, Code });
+    state.handlerOptions = res.result ?? [];
+  } catch (error) {
+    console.log(error);
+  }
+};
+// 选择处理人
+const selectHandlers = () => {
+  ruleFormRef.value?.resetFields('nextMainHandler');
+};
+const showMainHandler = computed(() => {
+  return state.ruleForm.nextHandlers.length > 1;
+});
+// 主办从处理人中选择
+state.handlerMainOptions = computed(() => {
+  return state.ruleForm.nextHandlers;
+});
+// 设置抽屉
+const dialogRef = ref<RefType>();
+const mouseup = () => {
+  state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
+};
+// 关闭弹窗
+const closeDialog = () => {
+  state.dialogVisible = false;
+};
+// 取消
+const onCancel = () => {
+  closeDialog();
+};
+// 选择常用意见 填入填写框
+const chooseComment = (item: any) => {
+  state.ruleForm.opinion += item.content;
+};
+// 提交
+const onSubmit = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.validate((valid: boolean) => {
+    if (!valid) return;
+    ElMessageBox.confirm(`确认提交?`, '提示', {
+      confirmButtonText: '确认',
+      cancelButtonText: '取消',
+      type: 'warning',
+      draggable: true,
+      cancelButtonClass: 'default-button',
+      autofocus: false,
+    })
+        .then(() => {
+          state.loading = true;
+          state.ruleForm.additions = state.fileList;
+          let submitObj = other.deepClone(state.ruleForm);
+          if (submitObj.nextHandlers && submitObj.nextHandlers.length) {
+            submitObj.nextHandlers = submitObj.nextHandlers.map((item: any) => {
+              return {
+                id: item.key,
+                name: item.value,
+              };
+            });
+            if (submitObj.nextHandlers.length === 1) {
+              submitObj.nextMainHandler = submitObj.nextHandlers[0].id;
+            }
+          }
+          switch (state.processType) {
+            case 'start': //开始流程
+              orderStartFlow(state.workflowId, submitObj)
+                  .then(() => {
+                    ElMessage.success('操作成功');
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessSuccess');
+                  })
+                  .catch(() => {
+                    state.loading = false;
+                    state.dialogVisible = false;
+                  });
+              break;
+            case 'recall': // 撤回流程
+              workflowRecall(submitObj)
+                  .then(() => {
+                    ElMessage.success('操作成功');
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessSuccess');
+                  })
+                  .catch(() => {
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessFailed');
+                  });
+              break;
+            case 'return': // 退回流程
+              workflowPrevious(submitObj)
+                  .then(() => {
+                    ElMessage.success('操作成功');
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessSuccess');
+                  })
+                  .catch(() => {
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessFailed');
+                  });
+              break;
+            case 'next': // 默认下一流程
+              workflowNext(submitObj)
+                  .then(() => {
+                    ElMessage.success('操作成功');
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessSuccess');
+                  })
+                  .catch(() => {
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessFailed');
+                  });
+              break;
+            default: // 默认下一流程
+              workflowNext(submitObj)
+                  .then(() => {
+                    ElMessage.success('操作成功');
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessSuccess');
+                  })
+                  .catch(() => {
+                    state.loading = false;
+                    state.dialogVisible = false;
+                    emit('orderProcessFailed');
+                  });
+              break;
+          }
+        })
+        .catch(() => {});
+  });
+};
+// 暴露变量
+defineExpose({
+  openDialog,
+  closeDialog,
+});
+</script>

+ 1 - 9
src/layout/component/columnsAside.vue

@@ -56,15 +56,7 @@ import { useThemeConfig } from '/@/stores/themeConfig';
 import mittBus from '/@/utils/mitt';
 
 // 定义接口来定义对象的类型
-interface ColumnsAsideState {
-	columnsAsideList: any[];
-	liIndex: number;
-	liOldIndex: null | number;
-	liHoverIndex: null | number;
-	liOldPath: null | string;
-	difference: number;
-	routeSplit: string[];
-}
+
 const columnsAsideOffsetTopRefs: any = ref([]);
 const columnsAsideActiveRef = ref<RefType>();
 const stores = useRoutesList();

+ 1 - 7
src/layout/navBars/breadcrumb/breadcrumb.vue

@@ -27,17 +27,11 @@ import other from '/@/utils/other';
 import { storeToRefs } from 'pinia';
 import { useThemeConfig } from '/@/stores/themeConfig';
 import { useRoutesList } from '/@/stores/routesList';
-import {useUserInfo} from "/@/stores/userInfo";
+import {useUserInfo} from "/@/stores/userInfo"
 const storesUserInfo = useUserInfo();
 const { userInfos } = storeToRefs(storesUserInfo);
 
 // 定义接口来定义对象的类型
-interface BreadcrumbState {
-	breadcrumbList: Array<any>;
-	routeSplit: Array<string>;
-	routeSplitFirst: string;
-	routeSplitIndex: number;
-}
 // 定义变量内容
 const stores = useRoutesList();
 const storesThemeConfig = useThemeConfig();

+ 0 - 5
src/layout/navBars/breadcrumb/search.vue

@@ -34,11 +34,6 @@ import { storeToRefs } from 'pinia';
 import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
 
 // 定义接口来定义对象的类型
-interface SearchState {
-	isShowSearch: boolean;
-	menuQuery: string;
-	tagsViewList: object[];
-}
 interface Restaurant {
 	path: string;
 	meta: {

+ 1 - 2
src/layout/navBars/breadcrumb/telControl.vue

@@ -436,7 +436,7 @@ import {reactive, ref, computed, watch, defineAsyncComponent, onMounted, onBefor
 import { useRouter } from 'vue-router';
 import {ElMessageBox, ElNotification, ElMessage, FormInstance} from 'element-plus';
 import { storeToRefs } from 'pinia';
-import { useTelStatus } from '/@/stores/telStatus';
+import { useTelStatus,TelStates, RestStates } from '/@/stores/telStatus';
 import { useUserInfo } from '/@/stores/userInfo';
 import { useAppConfig } from '/@/stores/appConfig';
 import {debounce, getImageUrl} from '/@/utils/tools';
@@ -444,7 +444,6 @@ import { formatDuration } from '/@/utils/formatTime';
 import { commonEnum } from '/@/utils/constants';
 import other from '/@/utils/other';
 import mittBus from '/@/utils/mitt';
-import { TelStates, RestStates } from '/@/stores/interface';
 import { workflowStepOptions } from '/@/api/system/workflow';
 import { restFlowStart,restFlowDel,restFlowStartWex,getTelList } from '/@/api/public/wex'
 import { commonList } from '/@/api/business/commonP';

+ 0 - 14
src/layout/navBars/tagsView/tagsView.vue

@@ -64,20 +64,6 @@ import { Session } from '/@/utils/storage';
 import { isObjectValueEqual } from '/@/utils/arrayOperation';
 import other from '/@/utils/other';
 import mittBus from '/@/utils/mitt';
-// 定义接口来定义对象的类型
-interface TagsViewState {
-	routeActive: string;
-	routePath: string | unknown;
-	dropdown: {
-		x: string | number;
-		y: string | number;
-	};
-	sortable: any;
-	tagsRefsIndex: number;
-	tagsViewList: any[];
-	tagsViewRoutesList: any[];
-	from: any;
-}
 interface CurrentContextmenu {
 	meta: {
 		isDynamic: boolean;

+ 3 - 9
src/layout/routerView/link.vue

@@ -19,15 +19,9 @@ import { useRoute, RouteMeta } from 'vue-router';
 import { verifyUrl } from '/@/utils/toolsValidate';
 
 // 定义接口来定义对象的类型
-interface LinkViewState {
-	currentRouteMeta: {
-		isLink: string;
-		title: string;
-	};
-}
-interface LinkViewRouteMeta extends RouteMeta {
-	isLink: string;
-	title: string;
+declare interface LinkViewRouteMeta extends RouteMeta {
+  isLink: string;
+  title: string;
 }
 
 // 定义变量内容

+ 0 - 8
src/layout/routerView/parent.vue

@@ -23,14 +23,6 @@ import { useThemeConfig } from '/@/stores/themeConfig';
 import { Session } from '/@/utils/storage';
 import mittBus from '/@/utils/mitt';
 
-// 定义接口来定义对象的类型
-interface ParentViewState {
-	refreshRouterViewKey: string;
-	iframeRefreshKey: string;
-	keepAliveNameList: string[];
-	iframeList: string[];
-}
-
 // 引入组件
 const Iframes = defineAsyncComponent(() => import('/@/layout/routerView/iframes.vue'));
 

+ 20 - 21
src/stores/appConfig.ts

@@ -1,28 +1,27 @@
 import { defineStore } from 'pinia';
-import { AppConfigState } from './interface';
 /**
  * @description AppConfig 系统配置信息
  * @methods getAppInfo 获取系统信息
  * @methods setAppConfigInfo 设置系统信息
  */
 export const useAppConfig = defineStore('AppConfig', {
-    state: (): AppConfigState => ({
-        AppConfigInfo: {
-            IsRestApproval: false, // 电话控件小休是否要进行审批
-            IsAutoTalkingDeal: false, // 呼叫中心是否自动事后处理
-            TalkingDealTime: 0, // 呼叫中心自动事后处理时间
-        }
-    }),
-    actions: {
-        getAppInfo() {
-            return this.AppConfigInfo;
-        },
-        // 设置系统信息
-        setAppConfigInfo(data: object): void {
-            this.AppConfigInfo = {
-                ...this.AppConfigInfo,
-                ...data
-            };
-        },
-    }
-})
+	state: (): AppConfigState => ({
+		AppConfigInfo: {
+			IsRestApproval: false, // 电话控件小休是否要进行审批
+			IsAutoTalkingDeal: false, // 呼叫中心是否自动事后处理
+			TalkingDealTime: 0, // 呼叫中心自动事后处理时间
+		},
+	}),
+	actions: {
+		getAppInfo() {
+			return this.AppConfigInfo;
+		},
+		// 设置系统信息
+		setAppConfigInfo(data: object): void {
+			this.AppConfigInfo = {
+				...this.AppConfigInfo,
+				...data,
+			};
+		},
+	},
+});

+ 0 - 148
src/stores/interface/index.ts

@@ -1,148 +0,0 @@
-/*
- * @Author: zc
- * @Description:
- * @version: 
- * @Date: 2022-08-09 16:19:56
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-11-16 15:10:29
- */
-/**
- * 定义接口来定义对象的类型
- * `stores` 全部类型定义在这里
- */
-
-// 用户信息
-export interface UserInfosState {
-	authBtnList: string[];
-	photo: string;
-	token?: string;
-	id: string;
-	name: string;
-	phoneNo: string;
-	staffNo?: string;
-	defaultTelNo?: string;
-	deletionTime?: string;
-	isDeleted?: boolean;
-	showTelControl: boolean;
-}
-export interface UserInfosStates {
-	userInfos: UserInfosState;
-}
-
-// 路由缓存列表
-export interface KeepAliveNamesState {
-	keepAliveNames: string[];
-	cachedViews: string[];
-}
-
-// 后端返回原始路由(未处理时)
-export interface RequestOldRoutesState {
-	requestOldRoutes: string[];
-}
-
-// TagsView 路由列表
-export interface TagsViewRoutesState {
-	tagsViewRoutes: string[];
-	isTagsViewCurrenFull: Boolean;
-}
-
-// 路由列表
-export interface RoutesListState {
-	routesList: string[];
-	isColumnsMenuHover: Boolean;
-	isColumnsNavHover: Boolean;
-}
-
-// 布局配置
-export interface ThemeConfigState {
-	isDrawer: boolean;
-	primary: string;
-	topBar: string;
-	topBarColor: string;
-	isTopBarColorGradual: boolean;
-	menuBar: string;
-	menuBarColor: string;
-	isMenuBarColorGradual: boolean;
-	columnsMenuBar: string;
-	columnsMenuBarColor: string;
-	isColumnsMenuBarColorGradual: boolean;
-	isColumnsMenuHoverPreload: boolean;
-	isCollapse: boolean;
-	isUniqueOpened: boolean;
-	isFixedHeader: boolean;
-	isFixedHeaderChange: boolean;
-	isClassicSplitMenu: boolean;
-	isLockScreen: boolean;
-	lockScreenTime: number;
-	isShowLogo: boolean;
-	isShowLogoChange: boolean;
-	isBreadcrumb: boolean;
-	isTagsview: boolean;
-	isBreadcrumbIcon: boolean;
-	isTagsviewIcon: boolean;
-	isCacheTagsView: boolean;
-	isSortableTagsView: boolean;
-	isShareTagsView: boolean;
-	isFooter: boolean;
-	isGrayscale: boolean;
-	isInvert: boolean;
-	isIsDark: boolean;
-	isWatermark: boolean;
-	watermarkText: string;
-	tagsStyle: string;
-	animation: string;
-	columnsAsideStyle: string;
-	columnsAsideLayout: string;
-	layout: string;
-	isRequestRoutes: boolean;
-	globalTitle: string;
-	globalViceTitle: string;
-	globalI18n: string;
-	globalComponentSize: string;
-	loginImage: string;
-}
-export interface ThemeConfigStates {
-	themeConfig: ThemeConfigState;
-}
-export enum TelStates {
-	dutyOff = 'dutyOff', // 签出
-	dutyOn = 'dutyOn', // 签入
-	rest = 'rest',  // 小休
-	ring = 'ring', // 来电响铃
-	onHold = 'onHold', // 保持中
-	oneHoldOneCall = 'oneHoldOneCall', // 一通电话保持中,一通电话通话中 可以三方通话
-	onCall = 'onCall', // 一通电话通话中
-	onTalkingDeal = 'onTalkingDeal', 		// 事后处理中
-	onConference = 'onConference' // 一通电话通话中,会议中
-}
-export enum RestStates {
-	resting = 'resting', // 小休中
-	InReview = 'InReview', // 小休审批中
-	unRest = 'unRest' // 未小休
-}
-export interface TelsStateInfos {
-	telStatusInfo: {
-		isDutyOn: boolean;  // 是否签入
-		isRest: RestStates; // 是否小休
-		isTalkingDeal: boolean; // 是否事后处理
-		isMeeting: boolean; // 是否会议中
-		isHold:boolean; // 是否保持中
-		phoneControlState: TelStates;  // 电话控件状态
-		telsNo: string | number; // 电话号码
-		telGongHao: string | number; // 电话工号
-		telArea: string | number; // 电话区号
-		telGuid: string | number; // 电话guid
-		telIVR: string | number; // 电话IVR
-		telType: string | number; //来电 外呼 转接
-		fromTel: string | number; // 来电号码
-		callTime?: number; // 通话时长
-	}
-}
-export interface AppConfigState {
-	AppConfigInfo: {
-		IsRestApproval: boolean; // 电话控件小休是否要进行审批
-		IsAutoTalkingDeal: boolean; // 呼叫中心是否自动事后处理
-		TalkingDealTime: number; // 呼叫中心事后处理时间
-		[x: string]: any
-	}
-}

+ 0 - 1
src/stores/keepAliveNames.ts

@@ -1,5 +1,4 @@
 import { defineStore } from 'pinia';
-import { KeepAliveNamesState } from './interface';
 
 /**
  * @description 路由缓存列表

+ 0 - 2
src/stores/requestOldRoutes.ts

@@ -1,6 +1,4 @@
 import { defineStore } from 'pinia';
-import { RequestOldRoutesState } from './interface';
-
 /**
  * @description 后端返回原始路由(未处理时)
  * @methods setCacheKeepAlive 设置接口原始路由数据

+ 0 - 1
src/stores/routesList.ts

@@ -1,5 +1,4 @@
 import { defineStore } from 'pinia';
-import { RoutesListState } from './interface';
 
 /**
  * @description 路由列表

+ 0 - 1
src/stores/tagsViewRoutes.ts

@@ -1,5 +1,4 @@
 import { defineStore } from 'pinia';
-import { TagsViewRoutesState } from './interface';
 import { Session } from '/@/utils/storage';
 
 /**

+ 17 - 2
src/stores/telStatus.ts

@@ -1,5 +1,3 @@
-import { defineStore } from 'pinia';
-import { TelsStateInfos, TelStates, RestStates } from './interface';
 /**
  * 
  * @description telStatus 当前用户签入的状态
@@ -12,6 +10,23 @@ import { TelsStateInfos, TelStates, RestStates } from './interface';
  * @method  setCallInfo 设置当前通话信息
  * @method resetState 重置状态
  */
+import { defineStore } from 'pinia';
+export enum TelStates {
+	dutyOff = 'dutyOff', // 签出
+	dutyOn = 'dutyOn', // 签入
+	rest = 'rest',  // 小休
+	ring = 'ring', // 来电响铃
+	onHold = 'onHold', // 保持中
+	oneHoldOneCall = 'oneHoldOneCall', // 一通电话保持中,一通电话通话中 可以三方通话
+	onCall = 'onCall', // 一通电话通话中
+	onTalkingDeal = 'onTalkingDeal', 		// 事后处理中
+	onConference = 'onConference' // 一通电话通话中,会议中
+}
+export enum RestStates {
+	resting = 'resting', // 小休中
+	InReview = 'InReview', // 小休审批中
+	unRest = 'unRest' // 未小休
+}
 export const useTelStatus = defineStore('telStatus', {
 	state: (): TelsStateInfos => ({
 		telStatusInfo: {

+ 3 - 4
src/stores/themeConfig.ts

@@ -1,7 +1,3 @@
-import { defineStore } from 'pinia';
-import { ThemeConfigStates, ThemeConfigState } from './interface';
-import {Cookie, Session} from '/@/utils/storage';
-import { getImageUrl } from '/@/utils/tools';
 /**
  * @description 布局配置
  * @methods setThemeConfig 设置布局配置
@@ -11,6 +7,9 @@ import { getImageUrl } from '/@/utils/tools';
  * 1、需要每次都清理 `window.localStorage` 浏览器永久缓存
  * 2、或者点击布局配置最底部 `一键恢复默认` 按钮即可看到效果
  */
+import { defineStore } from 'pinia';
+import {Cookie} from '/@/utils/storage';
+import { getImageUrl } from '/@/utils/tools';
 export const useThemeConfig = defineStore('themeConfig', {
 	state: (): ThemeConfigStates => ({
 		themeConfig: {

+ 0 - 1
src/stores/userInfo.ts

@@ -1,5 +1,4 @@
 import { defineStore } from 'pinia';
-import { UserInfosStates } from './interface';
 import {Cookie, Session} from '/@/utils/storage';
 import { getUserInfo } from "/@/api/login/user"
 

+ 0 - 3
src/types/axios.d.ts

@@ -1,6 +1,3 @@
-/* eslint-disable */
-import * as axios from 'axios';
-
 // 扩展 axios 数据返回类型,可自行扩展
 declare module 'axios' {
 	export interface AxiosResponse<T = any> {

+ 6 - 10
src/types/layout.d.ts

@@ -1,9 +1,3 @@
-// aside
-declare type AsideState = {
-	menuList: RouteRecordRaw[];
-	clientWidth: number;
-};
-
 // columnsAside
 declare type ColumnsAsideState<T = any> = {
 	columnsAsideList: T[];
@@ -53,7 +47,9 @@ declare type ParentViewState<T = any> = {
 };
 
 // navBars link
-declare type LinkViewState = {
-	title: string;
-	isLink: string;
-};
+declare interface LinkViewState {
+	currentRouteMeta: {
+		isLink: string;
+		title: string;
+	};
+}

+ 1 - 12
src/types/mitt.d.ts

@@ -14,15 +14,4 @@ export type MittType = {
 	clearCache?: any; //清除某个页面的缓存
 	startTalkTime?: any; //开始通话时间
 	endTalkTime?: any; //结束通话时间
-};
-// mitt 参数类型定义
-declare type LayoutMobileResize = {
-	layout: string;
-	clientWidth: number;
-};
-
-// mitt 参数菜单类型
-declare type MittMenu = {
-	children: RouteRecordRaw[];
-	item?: RouteItem;
-};
+};

+ 120 - 61
src/types/pinia.d.ts

@@ -1,17 +1,32 @@
+/*
+ * @Author: zc
+ * @Description:
+ * @version:
+ * @Date: 2022-08-09 16:19:56
+ * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2022-11-16 15:10:29
+ */
 /**
- * pinia 类型定义
+ * 定义接口来定义对象的类型
+ * `stores` 全部类型定义在这里
  */
 
 // 用户信息
-declare interface UserInfosState<T = any> {
-	userInfos: {
-		authBtnList: string[];
-		photo: string;
-		roles: string[];
-		time: number;
-		userName: string;
-		[key: string]: T;
-	};
+declare interface UserInfosState {
+	authBtnList: string[];
+	photo: string;
+	token?: string;
+	id: string;
+	name: string;
+	phoneNo: string;
+	staffNo?: string;
+	defaultTelNo?: string;
+	deletionTime?: string;
+	isDeleted?: boolean;
+	showTelControl: boolean;
+}
+declare interface UserInfosStates {
+	userInfos: UserInfosState;
 }
 
 // 路由缓存列表
@@ -26,65 +41,109 @@ declare interface RequestOldRoutesState {
 }
 
 // TagsView 路由列表
-declare interface TagsViewRoutesState<T = any> {
-	tagsViewRoutes: T[];
+declare interface TagsViewRoutesState {
+	tagsViewRoutes: string[];
 	isTagsViewCurrenFull: Boolean;
 }
 
 // 路由列表
-declare interface RoutesListState<T = any> {
-	routesList: T[];
+declare interface RoutesListState {
+	routesList: string[];
 	isColumnsMenuHover: Boolean;
 	isColumnsNavHover: Boolean;
 }
 
 // 布局配置
 declare interface ThemeConfigState {
-	themeConfig: {
-		isDrawer: boolean;
-		primary: string;
-		topBar: string;
-		topBarColor: string;
-		isTopBarColorGradual: boolean;
-		menuBar: string;
-		menuBarColor: string;
-		isMenuBarColorGradual: boolean;
-		columnsMenuBar: string;
-		columnsMenuBarColor: string;
-		isColumnsMenuBarColorGradual: boolean;
-		isColumnsMenuHoverPreload: boolean;
-		isCollapse: boolean;
-		isUniqueOpened: boolean;
-		isFixedHeader: boolean;
-		isFixedHeaderChange: boolean;
-		isClassicSplitMenu: boolean;
-		isLockScreen: boolean;
-		lockScreenTime: number;
-		isShowLogo: boolean;
-		isShowLogoChange: boolean;
-		isBreadcrumb: boolean;
-		isTagsview: boolean;
-		isBreadcrumbIcon: boolean;
-		isTagsviewIcon: boolean;
-		isCacheTagsView: boolean;
-		isSortableTagsView: boolean;
-		isShareTagsView: boolean;
-		isFooter: boolean;
-		isGrayscale: boolean;
-		isInvert: boolean;
-		isIsDark: boolean;
-		isWatermark: boolean;
-		watermarkText: string;
-		tagsStyle: string;
-		animation: string;
-		columnsAsideStyle: string;
-		columnsAsideLayout: string;
-		layout: string;
-		isRequestRoutes: boolean;
-		globalTitle: string;
-		globalViceTitle: string;
-		globalViceTitleMsg: string;
-		globalI18n: string;
-		globalComponentSize: string;
-	};
+	isDrawer: boolean;
+	primary: string;
+	topBar: string;
+	topBarColor: string;
+	isTopBarColorGradual: boolean;
+	menuBar: string;
+	menuBarColor: string;
+	isMenuBarColorGradual: boolean;
+	columnsMenuBar: string;
+	columnsMenuBarColor: string;
+	isColumnsMenuBarColorGradual: boolean;
+	isColumnsMenuHoverPreload: boolean;
+	isCollapse: boolean;
+	isUniqueOpened: boolean;
+	isFixedHeader: boolean;
+	isFixedHeaderChange: boolean;
+	isClassicSplitMenu: boolean;
+	isLockScreen: boolean;
+	lockScreenTime: number;
+	isShowLogo: boolean;
+	isShowLogoChange: boolean;
+	isBreadcrumb: boolean;
+	isTagsview: boolean;
+	isBreadcrumbIcon: boolean;
+	isTagsviewIcon: boolean;
+	isCacheTagsView: boolean;
+	isSortableTagsView: boolean;
+	isShareTagsView: boolean;
+	isFooter: boolean;
+	isGrayscale: boolean;
+	isInvert: boolean;
+	isIsDark: boolean;
+	isWatermark: boolean;
+	watermarkText: string;
+	tagsStyle: string;
+	animation: string;
+	columnsAsideStyle: string;
+	columnsAsideLayout: string;
+	layout: string;
+	isRequestRoutes: boolean;
+	globalTitle: string;
+	globalViceTitle: string;
+	globalI18n: string;
+	globalComponentSize: string;
+	loginImage: string;
+}
+declare interface ThemeConfigStates {
+	themeConfig: ThemeConfigState;
+}
+declare interface AppConfigState {
+	AppConfigInfo: {
+		IsRestApproval: boolean; // 电话控件小休是否要进行审批
+		IsAutoTalkingDeal: boolean; // 呼叫中心是否自动事后处理
+		TalkingDealTime: number; // 呼叫中心事后处理时间
+		[x: string]: any
+	}
+}
+
+enum TelStates {
+	dutyOff = 'dutyOff', // 签出
+	dutyOn = 'dutyOn', // 签入
+	rest = 'rest',  // 小休
+	ring = 'ring', // 来电响铃
+	onHold = 'onHold', // 保持中
+	oneHoldOneCall = 'oneHoldOneCall', // 一通电话保持中,一通电话通话中 可以三方通话
+	onCall = 'onCall', // 一通电话通话中
+	onTalkingDeal = 'onTalkingDeal', 		// 事后处理中
+	onConference = 'onConference' // 一通电话通话中,会议中
+}
+enum RestStates {
+	resting = 'resting', // 小休中
+	InReview = 'InReview', // 小休审批中
+	unRest = 'unRest' // 未小休
 }
+declare interface TelsStateInfos {
+	telStatusInfo: {
+		isDutyOn: boolean;  // 是否签入
+		isRest: RestStates; // 是否小休
+		isTalkingDeal: boolean; // 是否事后处理
+		isMeeting: boolean; // 是否会议中
+		isHold:boolean; // 是否保持中
+		phoneControlState: TelStates;  // 电话控件状态
+		telsNo: string | number; // 电话号码
+		telGongHao: string | number; // 电话工号
+		telArea: string | number; // 电话区号
+		telGuid: string | number; // 电话guid
+		telIVR: string | number; // 电话IVR
+		telType: string | number; //来电 外呼 转接
+		fromTel: string | number; // 来电号码
+		callTime?: number; // 通话时长
+	}
+}

+ 6 - 5
src/utils/PhoneScript.ts

@@ -2,12 +2,10 @@ import { ElMessage, ElNotification } from 'element-plus';
 import router from '/@/router';
 import { storeToRefs } from 'pinia';
 import { WebsocketInterface } from './websocket';
-import { useTelStatus } from '/@/stores/telStatus';
+import { useTelStatus,TelStates, RestStates } from '/@/stores/telStatus';
 import { useAppConfig } from '/@/stores/appConfig';
-import { TelStates, RestStates } from '/@/stores/interface';
 import { telRestAdd, telRestProcess, telUnrestWex, restFlowDel } from '/@/api/public/wex';
 import mittBus from '/@/utils/mitt';
-
 const useTelStatusStore = useTelStatus();
 const { telStatusInfo } = storeToRefs(useTelStatusStore);
 const appConfigStore = useAppConfig();
@@ -57,7 +55,7 @@ export const VoiceInterfaceObject: any = {
 	//弹屏 回调
 	Back_TelPhoneEvent: function (returnVal: { Message: string; Params: any }) {
 		let DialArray = returnVal.Message.split(',');
-		let DialInfo: any = {};
+		let DialInfo: any = <EmptyObjectType>{};
 		DialInfo.fromTel = DialArray[0]; //来电号码
 		DialInfo.telGongHao = DialArray[1]; //来电工号
 		DialInfo.telArea = DialArray[3]; //来电区域
@@ -193,7 +191,7 @@ export const VoiceInterfaceObject: any = {
 		const returnVal = WebsocketInterface('Send', JSON.stringify(modelJson));
 		ElMessage.success('语音系统退出成功!');
 		// 关闭websocket
-		const a = WebsocketInterface('Close');
+		WebsocketInterface('Close');
 		if (returnVal != 1) {
 			console.info(WebsocketInterface('GetError', returnVal));
 		}
@@ -349,6 +347,7 @@ export const VoiceInterfaceObject: any = {
 			ElMessage('取消保持');
 		} else {
 			console.info(returnVal.Message);
+			ElMessage.error(returnVal.Message);
 		}
 	},
 	//开启事后
@@ -413,6 +412,8 @@ export const VoiceInterfaceObject: any = {
 			console.info(returnVal.Message);
 			// 设置电话状态
 			useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
+			// 清空时间
+			mittBus.emit('endTalkTime');
 		} else {
 			console.info(returnVal.Message);
 			ElMessage.error(returnVal.Message);

+ 1 - 1
src/utils/arrayOperation.ts

@@ -56,7 +56,7 @@ export function removeDuplicate(arr: EmptyArrayType, attr?: string): Array<any>
 		return arr;
 	} else {
 		if (attr) {
-			const obj: any = {};
+			const obj: EmptyObjectType = {};
 			return arr.reduce((cur: any, item: any) => {
 				obj[item[attr]] ? '' : (obj[item[attr]] = item[attr] && cur.push(item));
 				return cur;

+ 1 - 1
src/utils/calendar.ts

@@ -138,7 +138,7 @@ const calendar = {
 	 * @description 按照lFestival的格式输入数据,设置农历节日
 	 * @param param {Object}
 	 */
-	setLunarFestival(param = {}) {
+	setLunarFestival(param = <EmptyObjectType>{}) {
 		// @ts-ignore
 		this.lFestival = param
 	},

+ 1 - 1
src/utils/constants.ts

@@ -102,4 +102,4 @@ export const commonEnum = {
     KnowledgeLocution: 'KnowledgeLocution', // 知识诉求惯用语
     RestReason: 'RestReason', // 小休原因
     Rest: 'Rest', // 小休常用意见
-};
+};

+ 1 - 1
src/utils/mitt.ts

@@ -1,6 +1,6 @@
 // https://www.npmjs.com/package/mitt 全局事件总线
 import mitt, { Emitter } from 'mitt';
-import { MittType } from '../types/mitt';
+import { MittType } from '/@/types/mitt';
 
 // 类型
 const emitter: Emitter<MittType> = mitt<MittType>();

+ 2 - 2
src/utils/other.ts

@@ -104,9 +104,9 @@ export const globalComponentSize = (): string => {
 export function deepClone(obj: any) {
 	let newObj: any;
 	try {
-		newObj = obj.push ? [] : {};
+		newObj = obj.push ? <EmptyArrayType>[] : <EmptyObjectType>{};
 	} catch (error) {
-		newObj = {};
+		newObj = <EmptyObjectType>{};
 	}
 	for (let attr in obj) {
 		if (obj[attr] && typeof obj[attr] === 'object') {

+ 7 - 7
src/views/business/backlog/index.vue

@@ -190,18 +190,14 @@ import {shortcuts} from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 import {useRouter} from "vue-router";
 // 引入组件
-const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));
+const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));  // 工单详情
 
 // 定义变量内容
-const ruleFormRef = ref<RefType>(); // 表单ref
-const searchCol = ref(true); // 是否显示搜索栏
-const OrderDetailRef = ref<RefType>(); // 工单详情ref
-const router = useRouter(); // 路由
 const state = reactive(<any>{
   queryParams: {
     // 查询条件
-    PageIndex: 1,
-    PageSize: 10,
+    PageIndex: 1, // 当前页
+    PageSize: 10, // 每页条数
     Keyword: '', // 关键字
     Content: '', // 工单内容
     AcceptType: '', // 受理类型
@@ -233,6 +229,9 @@ const state = reactive(<any>{
   pushTypeOptions: [], //推送分类
   orgData: [], // 机构数据
 });
+const ruleFormRef = ref<RefType>(); // 表单ref
+const searchCol = ref(true); // 展开/收起
+const router = useRouter(); // 路由
 // 热点分类远程搜索
 const HotspotProps = {
   label: 'hotSpotName',
@@ -310,6 +309,7 @@ const onExport = () => {
   console.log('导出');
 };
 // 查看详情
+const OrderDetailRef = ref<RefType>(); // 工单详情ref
 const onOrderDetail = (row: any) => {
   OrderDetailRef.value.openDialog(row);
 };

+ 1 - 1
src/views/business/delay/components/Order-delay.vue

@@ -74,7 +74,7 @@ import { ElMessageBox, FormInstance } from 'element-plus';
 import { VoiceInterfaceObject } from '/@/utils/PhoneScript';
 
 // 引入组件
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);

+ 6 - 6
src/views/business/delay/index.vue

@@ -204,14 +204,10 @@ import { shortcuts } from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 import { useRouter } from 'vue-router';
 // 引入组件
-const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));
-const OrderDelay = defineAsyncComponent(() => import('/@/views/business/delay/components/Order-delay.vue'));
+const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));  // 工单详情
+const OrderDelay = defineAsyncComponent(() => import('/@/views/business/delay/components/Order-delay.vue'));  // 工单延期
 
 // 定义变量内容
-const ruleFormRef = ref<RefType>(); // 表单ref
-const searchCol = ref(true); // 是否显示搜索栏
-const OrderDetailRef = ref<RefType>(); // 工单详情ref
-const router = useRouter(); // 路由
 const state = reactive(<any>{
 	queryParams: {
 		// 查询条件
@@ -248,6 +244,10 @@ const state = reactive(<any>{
 	pushTypeOptions: [], //推送分类
 	orgData: [], // 机构数据
 });
+const ruleFormRef = ref<RefType>(); // 表单ref
+const searchCol = ref(true); // 展开/收起
+const OrderDetailRef = ref<RefType>(); // 工单详情ref
+const router = useRouter(); // 路由
 // 热点分类远程搜索
 const HotspotProps = {
 	label: 'hotSpotName',

+ 29 - 31
src/views/business/order/accept/orderAdd.vue

@@ -284,7 +284,6 @@
 										check-strictly
 										:render-after-expand="false"
 										@node-click="hotSpotChange"
-										ref="hotspotRef"
 										:default-expanded-keys="state.hotspotExternal"
 									/>
 								</el-form-item>
@@ -396,7 +395,7 @@
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 								<el-form-item label="附件" prop="remark" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
-									<annex-list ref="AnnexListRef"></annex-list>
+									<annex-list></annex-list>
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
@@ -576,12 +575,12 @@ import { knowPopScreen, getKeyWord } from '/@/api/knowledge';
 import mittBus from '/@/utils/mitt';
 
 // 引入组件
-const OrderProcess = defineAsyncComponent(() => import('/@/views/business/order/components/Order-process.vue'));
-const OrderExpandForm = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-form.vue'));
-const OrderHistory = defineAsyncComponent(() => import('/@/views/business/order/components/Order-history.vue'));
-const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue'));
-const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue'));
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const OrderProcess = defineAsyncComponent(() => import('/@/views/business/order/components/Order-process.vue'));  // 提交流程
+const OrderExpandForm = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-form.vue')); // 拓展表单
+const OrderHistory = defineAsyncComponent(() => import('/@/views/business/order/components/Order-history.vue'));  // 历史工单
+const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue')); // 常用意见
+const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue')); // 补充信息
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
 // 定义变量内容
 const state = reactive<any>({
 	createBy: 'manual', // 工单创建方式 默认手动创建  tel:来电弹单  letter:互联网来信 默认表示手动创建
@@ -645,43 +644,38 @@ const state = reactive<any>({
 		},
 	],
 	tableRadio: null as any, // 重复件选择
-	orgData: [],
+	orgData: [],  // 机构数据
 	tableData: [], // 历史工单
-	total: 0,
+	total: 0, // 历史工单总条数
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		Keyword: '',
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页条数
+		Keyword: '',  // 关键字
 	},
 	KnowledgeKeyword: '', //知识检索内容
 	hotWords: [], // 知识检索热点
 	knowledgeList: [], //知识检索列表
-	external: [],
+	external: [], // 知识检索展开
 	hotspotExternal: [], // 热点分类展开
 	knowledgeQuery: {
 		// 知识库查询
-		PageIndex: 1,
-		PageSize: 5,
-		Keyword: '',
+		PageIndex: 1, // 当前页
+		PageSize: 5,  // 每页条数
+		Keyword: '',  // 关键字
 	},
 	knowledgeTotal: 0, // 知识库总条数
 	fileList: [],
 	orderId: '', // 工单id
 });
-const ruleFormRef = ref<RefType>();
-const queryParamsRef = ref<RefType>();
-const useTelStatusStore = useTelStatus();
-const { telStatusInfo } = storeToRefs(useTelStatusStore);
-const processRef = ref<RefType>();
-const storesUserInfo = useUserInfo();
-const { userInfos } = storeToRefs(storesUserInfo);
-state.ruleForm.employeeName = userInfos.value.name;
-state.ruleForm.employeeStaffNo = userInfos.value.staffNo;
-const route = useRoute();
-const router = useRouter();
-const HistoryOrderRef = ref<RefType>();
-const hotspotRef = ref<RefType>();
-const SupplyRef = ref<RefType>();
+const queryParamsRef = ref<RefType>(); // 历史工单查询参数
+const useTelStatusStore = useTelStatus(); // 来电弹屏
+const { telStatusInfo } = storeToRefs(useTelStatusStore); // 来电弹屏信息
+const storesUserInfo = useUserInfo(); // 用户信息
+const { userInfos } = storeToRefs(storesUserInfo);  // 用户信息
+state.ruleForm.employeeName = userInfos.value.name; // 员工姓名
+state.ruleForm.employeeStaffNo = userInfos.value.staffNo; // 员工工号
+const route = useRoute(); // 路由
+const router = useRouter(); // 路由
 // 证件号码验证
 const licenceNoPattern = computed(() => {
 	switch (state.ruleForm.licenceTypeCode) {
@@ -739,6 +733,7 @@ const getParentId = (val: any, arr: string[]) => {
 	return arr;
 };
 // 选择工单类型 处理受理类型选择数据
+const ruleFormRef = ref<RefType>();
 const selectOrderType = (val: any) => {
 	ruleFormRef.value.resetFields('acceptType');
 	state.acceptTypeOptions = state.acceptTypeOptions.map((item: any) => {
@@ -817,6 +812,7 @@ const selectIdentity = (val: number) => {
 		state.ruleForm.pushTypeCode = state.ruleForm.pushTypeObj.dicDataValue;
 	}
 };
+const processRef = ref<RefType>();
 const processOrder = (submitObj: any, isEdit: boolean) => {
 	const operation = isEdit ? orderEdit : orderAdd;
 	operation(submitObj).then((res) => {
@@ -865,6 +861,7 @@ const clearRepeat = () => {
 	multipleTableRef.value.clearSelection();
 };
 // 选择重复件
+const HistoryOrderRef = ref<RefType>();
 const selectRepeat = () => {
 	HistoryOrderRef.value.openDialog(state.ruleForm);
 };
@@ -935,6 +932,7 @@ const searchHistory = throttle(() => {
 	}
 }, 500);
 // 补充信息
+const SupplyRef = ref<RefType>();
 const onSupply = (val: any) => {
 	SupplyRef.value.openDialog(val);
 };

+ 32 - 34
src/views/business/order/accept/orderEdit.vue

@@ -281,7 +281,6 @@
 										check-strictly
 										:render-after-expand="false"
 										@node-click="hotSpotChange"
-										ref="hotspotRef"
 										:default-expanded-keys="state.hotspotExternal"
 									/>
 								</el-form-item>
@@ -394,7 +393,7 @@
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 								<el-form-item label="附件" prop="remark" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
-									<annex-list ref="AnnexListRef"></annex-list>
+									<annex-list></annex-list>
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
@@ -573,12 +572,12 @@ import { auth } from '/@/utils/authFunction';
 import mittBus from '/@/utils/mitt';
 
 // 引入组件
-const OrderProcess = defineAsyncComponent(() => import('/@/views/business/order/components/Order-process.vue'));
-const OrderExpandForm = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-form.vue'));
-const OrderHistory = defineAsyncComponent(() => import('/@/views/business/order/components/Order-history.vue'));
-const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue'));
-const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue'));
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const OrderProcess = defineAsyncComponent(() => import('/@/views/business/order/components/Order-process.vue'));  // 提交流程
+const OrderExpandForm = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-form.vue')); // 拓展表单
+const OrderHistory = defineAsyncComponent(() => import('/@/views/business/order/components/Order-history.vue'));  // 历史工单
+const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue')); // 常用意见
+const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue'));  // 补充信息
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
 // 定义变量内容
 const state = reactive<any>({
 	createFrom: 'manual', // 工单创建方式 默认手动创建  tel:来电弹单  letter:互联网来信 默认表示手动创建
@@ -641,43 +640,39 @@ const state = reactive<any>({
 			key: 'false',
 		},
 	],
-	orgData: [],
+	orgData: [],  // 机构数据
 	tableData: [], // 历史工单
-	total: 0,
+	total: 0, // 历史工单总条数
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		Keyword: '',
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页条数
+		Keyword: '',  // 关键字
 	},
 	KnowledgeKeyword: '', //知识检索内容
-	items: [],
+	items: [],  // 知识检索列表
 	knowledgeList: [], //知识检索列表
-	external: [],
+	external: [], // 知识检索展开
 	hotspotExternal: [], // 热点分类展开
 	knowledgeQuery: {
 		// 知识库查询
-		PageIndex: 1,
-		PageSize: 5,
-		Keyword: '',
+		PageIndex: 1, // 当前页
+		PageSize: 5,  // 每页条数
+		Keyword: '',  // 关键字
 	},
 	knowledgeTotal: 0, // 知识库总条数
-	fileList: [],
-	expandFormMounted: false,
+	fileList: [], // 附件列表
+	expandFormMounted: false, // 是否展开
 });
-const ruleFormRef = ref<RefType>();
-const queryParamsRef = ref<RefType>();
-const useTelStatusStore = useTelStatus();
-const { telStatusInfo } = storeToRefs(useTelStatusStore);
-const processRef = ref<RefType>();
-const storesUserInfo = useUserInfo();
-const { userInfos } = storeToRefs(storesUserInfo);
-state.ruleForm.employeeName = userInfos.value.name;
-state.ruleForm.employeeStaffNo = userInfos.value.staffNo;
-const route = useRoute();
-const router = useRouter();
-const HistoryOrderRef = ref<RefType>();
-const hotspotRef = ref<RefType>();
-const SupplyRef = ref<RefType>();
+const ruleFormRef = ref<RefType>(); // 表单ref
+const queryParamsRef = ref<RefType>();  // 历史工单查询参数ref
+const useTelStatusStore = useTelStatus(); // 来电弹单状态
+const { telStatusInfo } = storeToRefs(useTelStatusStore); // 来电弹单状态
+const storesUserInfo = useUserInfo(); // 用户信息
+const { userInfos } = storeToRefs(storesUserInfo);  // 用户信息
+state.ruleForm.employeeName = userInfos.value.name; // 员工姓名
+state.ruleForm.employeeStaffNo = userInfos.value.staffNo; // 员工工号
+const route = useRoute(); // 路由
+const router = useRouter(); // 路由
 // 证件号码验证
 const licenceNoPattern = computed(() => {
 	switch (state.ruleForm.licenceTypeCode) {
@@ -819,6 +814,7 @@ const save = throttle((formEl: FormInstance | undefined) => {
 	});
 }, 500);
 // 提交
+const processRef = ref<RefType>();
 const submit = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {
@@ -854,6 +850,7 @@ const clearRepeat = () => {
 	multipleTableRef.value.clearSelection();
 };
 // 选择重复件
+const HistoryOrderRef = ref<RefType>();
 const selectRepeat = () => {
 	HistoryOrderRef.value.openDialog(state.ruleForm);
 };
@@ -931,6 +928,7 @@ const searchHistory = throttle(() => {
 	}
 }, 500);
 // 补充信息
+const SupplyRef = ref<RefType>();
 const onSupply = (val: any) => {
 	SupplyRef.value.openDialog(val);
 };

+ 13 - 14
src/views/business/order/accept/repeatOrderDetail.vue

@@ -261,22 +261,21 @@
 
 <script setup lang="ts" name="repeatOrderDetail">
 import { defineAsyncComponent, reactive, ref, onMounted } from 'vue';
-// import { ElMessage } from 'element-plus';
 import { useRoute, useRouter } from 'vue-router';
 import { orderDetail } from '/@/api/business/order';
 import { formatDate } from '/@/utils/formatTime';
 import { verifyNumberCnUppercase } from '/@/utils/toolsValidate';
 
 // 引入组件
-const OrderExpandDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-detail.vue'));
+const OrderExpandDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-detail.vue')); // 扩展信息
 // const AudioPlayer = defineAsyncComponent(() => import('/@/components/AudioPlayer/index.vue'));
 
 // 定义变量内容
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗
 	ruleForm: { url: '' },
-	activeName: 'default',
-	tabPaneList: [
+	activeName: 'default',  // tab切换
+	tabPaneList: [  //
 		{
 			label: '工单详情',
 			value: 'default',
@@ -299,17 +298,16 @@ const state = reactive<any>({
 		},
 	],
 	collapseArr: ['1', '2', '3', '4'], //展开列表
-	extensionState: 1,
+	extensionState: 1,  // 扩展信息状态
 	extensionList: [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }],
-	loading: false,
-	supplements: [],
-	workflow: {},
-	orderId: '',
+	loading: false, // 加载
+	supplements: <EmptyArrayType>[],  // 补充信息
+	workflow: <EmptyObjectType>{}, // 工作流
+	orderId: <string>'',  // 工单id
 });
-const ruleFormRef = ref<RefType>();
-const ExpandDetailRef = ref<RefType>();
-const route = useRoute();
-const router = useRouter();
+const ruleFormRef = ref<RefType>(); // 表单ref
+const route = useRoute(); // 路由
+const router = useRouter(); // 路由
 // 查看详情
 const getDetail = async (id: string | string[]) => {
 	state.loading = true;
@@ -326,6 +324,7 @@ const getDetail = async (id: string | string[]) => {
 	}
 };
 // 展示扩展表单
+const ExpandDetailRef = ref<RefType>();
 const showExpandInfo = () => {
 	let form: any = {};
 	if (state.ruleForm.acceptType === 30) {

+ 5 - 5
src/views/business/order/components/Order-circulation-record.vue

@@ -27,14 +27,14 @@
 import { reactive, ref, defineAsyncComponent } from 'vue';
 import { workflowTraces } from '/@/api/system/workflow';
 
-const ProcessTimeLine = defineAsyncComponent(() => import('/@/components/ProcessTimeLine/index.vue'));
+const ProcessTimeLine = defineAsyncComponent(() => import('/@/components/ProcessTimeLine/index.vue'));  // 流程时间轴
 
 // 定义变量内容
 const state = reactive<any>({
-	dialogVisible: false,
-	ruleForm: {},
-	loading: false,
-	traces: []
+	dialogVisible: false, // 弹窗显示隐藏
+	ruleForm: {}, // 表单数据
+	loading: false, // 加载状态
+	traces: []  // 流转记录
 });
 const ruleFormRef = ref<RefType>();
 // 打开弹窗

+ 10 - 9
src/views/business/order/components/Order-comment.vue

@@ -120,18 +120,18 @@ const value = computed({
 });
 // 定义变量内容
 const state = reactive<any>({
-	showDrawer: false,
-	commentsList: [],
-	commentsForm: {
+	showDrawer: false,  // 是否显示弹窗
+	commentsList: [], // 常用意见列表
+	commentsForm: { // 新增常用意见
 		content: '',
 	},
-	chooseCommentList: [],
-	active: 'default',
-	manage: false,
-	loading: false,
-	typecode: '',
+	chooseCommentList: [],  // 选中的常用意见
+	active: 'default',  // 当前状态
+	manage: false,  // 是否是管理状态
+	loading: false, // 是否显示loading
+	typecode: '', // 类型
 });
-const commentsFormRef = ref<RefType>();
+
 // 打开常用意见管理
 const showComments = () => {
 	openDialog();
@@ -150,6 +150,7 @@ const onAddComments = async () => {
 	closeDialog();
 };
 // 打开弹窗
+const commentsFormRef = ref<RefType>();
 const openDialog = async () => {
 	state.typecode = props.commonEnum;
 	state.active = 'default';

+ 16 - 16
src/views/business/order/components/Order-detail.vue

@@ -340,14 +340,14 @@ import { orderDetail } from '/@/api/business/order';
 import { formatDate } from '/@/utils/formatTime';
 
 // 引入组件
-const OrderExpandDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-detail.vue'));
+const OrderExpandDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-detail.vue')); // 扩展信息
 // const OrderCirculationRecord = defineAsyncComponent(() => import('/@/views/business/order/components/Order-circulation-record.vue'));
-const OrderProcess = defineAsyncComponent(() => import('/@/views/business/order/components/Order-process.vue'));
-const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue'));
-const OrderRevoke = defineAsyncComponent(() => import('/@/views/business/order/components/Order-revoke.vue'));
-const OrderDelay = defineAsyncComponent(() => import('/@/views/business/delay/components/Order-delay.vue'));
-const OrderSuperVise = defineAsyncComponent(() => import('/@/views/business/supervise/components/Order-supervise.vue'));
-const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));
+const OrderProcess = defineAsyncComponent(() => import('/@/views/business/order/components/Order-process.vue'));  // 处理流程
+const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue'));  // 工单补充
+const OrderRevoke = defineAsyncComponent(() => import('/@/views/business/order/components/Order-revoke.vue'));  // 工单撤销
+const OrderDelay = defineAsyncComponent(() => import('/@/views/business/delay/components/Order-delay.vue'));  // 工单延期
+const OrderSuperVise = defineAsyncComponent(() => import('/@/views/business/supervise/components/Order-supervise.vue'));  // 工单督办
+const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));  // 审核记录
 // const AudioPlayer = defineAsyncComponent(() => import('/@/components/AudioPlayer/index.vue'));
 
 // 定义子组件向父组件传值/事件
@@ -403,15 +403,8 @@ const state = reactive<any>({
 	workflow: {},
 	orderId: '',
 });
-const ruleFormRef = ref<RefType>();
-const OrderProcessRef = ref<RefType>(); // 处理流程
-const orderExpandDetailRef = ref<RefType>(); // 扩展信息
-const AuditRecordRef = ref<RefType>(); // 流转记录
-const orderSupplyRef = ref<RefType>(); // 工单补充
-const orderRevokeRef = ref<RefType>(); // 工单撤销
-const orderDelayRef = ref<RefType>(); // 工单延期
-const orderSuperviseRef = ref<RefType>(); // 工单督办
-const router = useRouter();
+const ruleFormRef = ref<RefType>(); // 表单ref
+const router = useRouter(); // 路由
 // 打开弹窗
 const openDialog = (val: any) => {
 	state.orderId = val.id;
@@ -433,6 +426,7 @@ const getDetail = async (id: string) => {
 	}
 };
 // 展示扩展表单
+const orderExpandDetailRef = ref<RefType>(); // 扩展信息
 const showExpandInfo = () => {
 	let form: any = {};
 	if (state.ruleForm.acceptType === 30) {
@@ -468,6 +462,7 @@ const handleClick = (val: string) => {
 	console.log(val);
 };
 // 流转记录
+const AuditRecordRef = ref<RefType>(); // 流转记录
 const onRecord = () => {
 	const params = {
 		dialogTitle: '流转记录',
@@ -476,6 +471,7 @@ const onRecord = () => {
 	AuditRecordRef.value.openDialog(params);
 };
 // 办理 下一步
+const OrderProcessRef = ref<RefType>(); // 处理流程
 const onSubmit = throttle((val: string, type?: string) => {
 	OrderProcessRef.value.openDialog({ id: state.ruleForm.workflowId, title: val, processType: type, commonEnum: commonEnum.OrderCirculation });
 }, 1000);
@@ -490,6 +486,7 @@ const orderProcessFailed = () => {
 	emit('updateList');
 };
 // 补充信息
+const orderSupplyRef = ref<RefType>(); // 工单补充
 const onSupply = () => {
 	// 穿入当前流程id
 	orderSupplyRef.value.openDialog(state.ruleForm);
@@ -499,6 +496,7 @@ const onSupplySuccess = () => {
 	getDetail(state.orderId);
 };
 // 延期
+const orderDelayRef = ref<RefType>(); // 工单延期
 const onDelay = () => {
 	orderDelayRef.value.openDialog(state.ruleForm);
 };
@@ -507,6 +505,7 @@ const OnDelaySuccess = () => {
 	getDetail(state.orderId);
 };
 // 撤销
+const orderRevokeRef = ref<RefType>(); // 工单撤销
 const onRevoke = () => {
 	orderRevokeRef.value.openDialog(state.ruleForm);
 };
@@ -515,6 +514,7 @@ const onRevokeSuccess = () => {
 	getDetail(state.orderId);
 };
 // 督办
+const orderSuperviseRef = ref<RefType>(); // 工单督办
 const onSupervise = () => {
 	orderSuperviseRef.value.openDialog(state.ruleForm);
 };

+ 0 - 1
src/views/business/order/components/Order-expand-detail.vue

@@ -219,7 +219,6 @@
 <script setup lang="ts" name="orderDetailExpand">
 import { reactive, ref } from 'vue';
 import { formatDate } from '/@/utils/formatTime';
-// import { ElMessage } from 'element-plus';
 
 // 定义变量内容
 const state = reactive<any>({

+ 64 - 8
src/views/business/order/components/Order-expand-form.vue

@@ -602,9 +602,66 @@ const state = reactive<any>({
 	dialogVisible: false,
 	acceptType: 30, // 受理类型 30: 举报 35: 投诉
 	expandForm: {
-		licenceTypeCode: '',
-		identityTypeCode: '',
-		salesModeCode: '',
+    licenceType: '', //证件类型
+    licenceTypeCode: '', //证件类型code
+    licenceNo: '', //证件号码
+    identityType: '', //提供方类型
+    identityTypeCode: '', //提供方类型code
+    identity: '', //提供方身份
+    identityCode:'', // 提供方身份code
+    nationality: '', //国籍/地区
+    nationalityCode: '', //国籍/地区code
+    nation: '', //民族
+    nationCode: '', //民族code
+    postalCode: '', //邮政编码
+    email: '', //电子邮箱
+    otherContact: '', //其他联系方式
+    enterpriseName: '', //企业名称
+    unifiedSocialCreditCode: '', //统一社会信用代码
+    registerAddress: '', //注册地址
+    registerNumber: '', //注册号
+    enterpriseContact: '', //企业联系人
+    marketType: '', //市场主体类型
+    marketTypeCode: '', //市场主体类型code
+    industryClassify: '', //行业分类
+    industryClassifyCode: '', //行业分类code
+    brand: '', //商品分类/品牌
+    brandCode: '', //商品分类/品牌code
+    amount: '', // 消费金额
+    objectClassify: '', //客体类别
+    objectClassifyCode: '', //客体类别code
+    objectName: '', //客体名称
+    reportClassifyCode: '', //举报问题类别code
+    reportClassify: '', //举报问题类别
+    complainClassifyCode: '', //投诉问题类别code
+    occurrenceTime: '', //争议发生时间
+    salesMode: '', //销售方式
+    salesModeCode: '', //销售方式code
+    reportTarget: '', //举报目标
+    reportTargetCode: '', //举报目标code
+    affairTarget: '', //投诉目标
+    affairTargetCode: '', //投诉目标code
+    eCommercePlatform: '', //电商平台
+    eCommercePlatformCode: '', //电商平台code
+    externalOrderNo: '', //外部订单号
+    businessArea: '', //经营地区
+    businessAddress: '', //经营地址
+    channel: '', //渠道
+    patentee: '', //专利权人
+    patentName: '', //专利名称
+    patentType: '', //专利类型
+    patentTypeCode: '', //专利类型code
+    patentNo: '', //专利号
+    productName: '', //产品名称
+    approvalNumber: '', //批准文号
+    productModel: '', //产品型号
+    productBatchNo: '', //产品批号
+    productSpecification: '', //产品规格
+    productExpiredTime: '', //产品有效期
+    manufacturer: '', //生产企业
+    salesEnterprise: '', //销售企业
+    consumerAddress: '', //消费者地址
+    complainTypes: [], //诉求
 	},
 	licenceTypeOptions: [], //证件类型
 	identityTypeOptions: [], //提供方类型
@@ -625,12 +682,10 @@ const state = reactive<any>({
 	areaOptions: [], //省市区
 	isPatent: false, // 举报或者投诉问题类别为专利
 	validated: false, // 是否验证通过
-	isValidate: false,
-	loading: false,
+	isValidate: false,  // 是否需要验证
+	loading: false, // 保存按钮loading
 });
-const expandFormRef = ref<RefType>();
-const route = useRoute();
-
+const route = useRoute(); // 路由
 // 证件号码验证
 const licenceNoPattern = computed(() => {
 	switch (state.expandForm.licenceTypeCode) {
@@ -653,6 +708,7 @@ const openDialog = async (type: any, isValidate?: boolean) => {
 	state.dialogVisible = true;
 };
 // 打开表单如果需要立即校验
+const expandFormRef = ref<RefType>();
 const opened = () => {
 	if (state.isValidate) {
 		// 如果需要验证

+ 17 - 17
src/views/business/order/components/Order-history.vue

@@ -80,29 +80,27 @@ import { historyOrder } from '/@/api/business/order';
 import { useRoute } from 'vue-router';
 // import { ElMessage } from 'element-plus';
 // 引入组件
-const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue'));
-const OrderRevoke = defineAsyncComponent(() => import('/@/views/business/order/components/Order-revoke.vue'));
+const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue'));  // 补充组件
+const OrderRevoke = defineAsyncComponent(() => import('/@/views/business/order/components/Order-revoke.vue'));  // 撤销组件
 const emit = defineEmits(['saveSelect']);
 // 定义变量内容
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗显示隐藏
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		Keyword: '',
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页条数
+		Keyword: '',  // 关键字
 	},
-	tableData: [],
-	total: 0,
-	loading: false,
-	selectRow: null as any,
-	ruleForm: {},
+	tableData: [], // 表格数据
+	total: 0,   // 总条数
+	loading: false, // 加载状态
+	selectRow: null as any, // 选中行
+	ruleForm: {}, // 表单数据
 });
-const ruleFormRef = ref<RefType>();
-const orderSupplyRef = ref<RefType>()
-const orderRevokeRef = ref<RefType>()
-const route = useRoute();
-const multipleSelection = ref<any[]>([]);
-const multipleTableRef = ref<RefType>();
+const ruleFormRef = ref<RefType>(); // 表单ref
+const route = useRoute(); // 路由
+const multipleSelection = ref<any[]>([]); // 选中的数据
+const multipleTableRef = ref<RefType>();  // 表格ref
 // 打开弹窗
 const openDialog = (row: any) => {
 	state.ruleForm = row;
@@ -152,6 +150,7 @@ const handleSelectionChange = (row: any) => {
 	}
 };
 // 补充
+const orderSupplyRef = ref<RefType>(); // 补充ref
 const onSupply = (row: any) => {
   // 穿入当前流程id
   orderSupplyRef.value.openDialog(row);
@@ -164,6 +163,7 @@ const onSupplySuccess = () => {
   getList();
 };
 // 撤销
+const orderRevokeRef = ref<RefType>()
 const onRevoke = (row: any)=>{
   orderRevokeRef.value.openDialog(row);
 }

+ 13 - 15
src/views/business/order/components/Order-process.vue

@@ -83,7 +83,7 @@
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="附件" prop="additions" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
-							<annex-list ref="AnnexListRef"></annex-list>
+							<annex-list></annex-list>
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -106,14 +106,14 @@ import { OrderFlowParams, orderStartFlow } from '/@/api/business/order';
 import { workflowNextSteps, workflowNext, workflowRecall, workflowPrevious, workflowRecallParams, workflowStepOptions } from '/@/api/system/workflow';
 
 // 引入组件
-const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue'));
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue')); // 常用意见
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['orderProcessSuccess', 'orderProcessFailed']);
 // 定义变量内容
 const state = reactive<any>({
-	dialogVisible: false,
-	title: '提交',
+	dialogVisible: false, // 弹窗显示隐藏
+	title: '提交',  // 弹窗标题
 	ruleForm: {
 		acceptSms: false, // 是否接收短信
 		opinion: '', // 意见
@@ -124,20 +124,17 @@ const state = reactive<any>({
 	},
 	nextStepOptions: [], // 下一节点
 	handlerOptions: [], // 处理人
-	transform: 'translate(0px, 0px)',
-	fileList: [],
-	loading: false,
-	isStartFlow: false, //是否开启流程
-	processType: 'next',
-	workflowId: '', //工单id
-	commonEnum: '',
+	transform: 'translate(0px, 0px)', // 滚动条位置
+	fileList: [], // 附件列表
+	loading: false, // 提交按钮loading
+	processType: 'next',  // 流程状态
+	workflowId: '', // 流程id
+	commonEnum: '', // 常用意见类型
 	handlerClassifies: [], //撤回处理人
 	handlerMainOptions: [], // 主办人
 	handleId: '', // 流程处理ID
 });
-const ruleFormRef = ref<RefType>();
-const dialogRef = ref<RefType>();
-const AnnexListRef = ref<RefType>(); //附件组件
+const ruleFormRef = ref<RefType>(); //表单组件
 // 打开弹窗
 const openDialog = async (val: any) => {
 	state.processType = val.processType ?? 'next'; // 流程状态
@@ -244,6 +241,7 @@ state.handlerMainOptions = computed(() => {
 	return state.ruleForm.nextHandlers;
 });
 // 设置抽屉
+const dialogRef = ref<RefType>();
 const mouseup = () => {
 	state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
 };

+ 4 - 4
src/views/business/order/components/Order-revoke.vue

@@ -70,7 +70,7 @@ import { throttle } from '/@/utils/tools';
 import { supplement } from '/@/api/system/workflow';
 
 // 引入组件
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['onSupplySuccess']);
@@ -78,12 +78,12 @@ const emit = defineEmits(['onSupplySuccess']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		opinion: '',
+		opinion: '',  // 撤销原因
 		additions: [], // 附件
 		workflowId: '', // 流程id
 	},
-	fileList: [],
-	loading: false,
+	fileList: [], // 附件列表
+	loading: false, // 提交按钮loading
 });
 const ruleFormRef = ref<RefType>();
 // 打开弹窗

+ 5 - 5
src/views/business/order/components/Order-supply.vue

@@ -65,7 +65,7 @@ import { throttle } from '/@/utils/tools';
 import { supplement } from '/@/api/system/workflow';
 
 // 引入组件
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['onSupplySuccess']);
@@ -73,13 +73,13 @@ const emit = defineEmits(['onSupplySuccess']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		opinion: '',
+		opinion: '',  // 补充内容
 		additions: [], // 附件
 		workflowId: '', // 流程id
 	},
-	showForm: {},
-	fileList: [],
-	loading: false,
+	showForm: {}, // 工单信息
+	fileList: [], // 附件列表
+	loading: false, // 提交按钮loading
 });
 const ruleFormRef = ref<RefType>();
 // 打开弹窗

+ 9 - 10
src/views/business/order/index.vue

@@ -313,19 +313,14 @@ import { formatDate } from '/@/utils/formatTime';
 import { listBaseData, orderList, hotSpotType, orderDelete } from '/@/api/business/order';
 
 // 引入组件
-const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));
+const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));  // 工单详情
 
 // 定义变量内容
-const ruleFormRef = ref<RefType>();
-const searchCol = ref(true);
-const route = useRoute();
-const router = useRouter();
-const OrderDetailRef = ref<RefType>();
 const state = reactive(<any>{
 	queryParams: {
 		// 查询条件
-		PageIndex: 1,
-		PageSize: 10,
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页条数
 		Keyword: '', // 关键字
 		Content: '', // 工单内容
 		AcceptType: '', // 受理类型
@@ -349,7 +344,6 @@ const state = reactive(<any>{
 	tableList: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
-
 	acceptTypeOptions: [], //受理类型
 	channelOptions: [], // 来源频道
 	emergencyLevelOptions: [], // 紧急程度
@@ -358,7 +352,10 @@ const state = reactive(<any>{
 	pushTypeOptions: [], //推送分类
 	orgData: [], // 机构数据
 });
-const cascadeRef = ref<RefType>();
+const ruleFormRef = ref<RefType>(); // 表单ref
+const searchCol = ref(true);  // 展开/收起
+const route = useRoute(); // 路由
+const router = useRouter(); // 路由
 // 热点分类远程搜索
 const HotspotProps = {
 	label: 'hotSpotName',
@@ -372,6 +369,7 @@ const load = async (node: any, resolve: any) => {
 	resolve(res.result);
 };
 // 获取选择组织name值
+const cascadeRef = ref<RefType>();
 const getKnowledgeList = () => {
 	let currentNode = cascadeRef.value.getCheckedNodes();
 	state.queryParams.orgCode = currentNode[0]?.data.orgCode ?? '';
@@ -462,6 +460,7 @@ const onExport = () => {
 	console.log('导出');
 };
 // 查看详情
+const OrderDetailRef = ref<RefType>();
 const onOrderDetail = (row: any) => {
 	OrderDetailRef.value.openDialog(row);
 };

+ 3 - 3
src/views/business/release/index.vue

@@ -193,7 +193,7 @@ import { formatDate } from '/@/utils/formatTime';
 import OrderReDo from "/@/views/business/release/component/Order-reDo.vue";
 // 引入组件
 const OrderRelease = defineAsyncComponent(() => import('/@/views/business/release/component/Order-release.vue'));
-const OrderRedo = defineAsyncComponent(() => import('/@/views/business/release/component/Order-reDo.vue'));
+const OrderReDo = defineAsyncComponent(() => import('/@/views/business/release/component/Order-reDo.vue'));
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const searchCol = ref(true); // 是否显示搜索栏
@@ -245,8 +245,6 @@ const load = async (node: any, resolve: any) => {
 	let res: any = await hotSpotType({ id: node.data.id ? node.data.id : '' });
 	resolve(res.result);
 };
-const orderReleaseRef = ref<RefType>(); // 工单发布详情ref
-const orderRedoRef = ref<RefType>();  // 工单重办ref
 // 展开/收起
 const closeSearch = () => {
 	searchCol.value = !searchCol.value;
@@ -306,6 +304,7 @@ const releaseMultiple = () => {
   console.log('批量发布');
 };
 // 发布
+const orderReleaseRef = ref<RefType>(); // 工单发布详情ref
 const release = (row: any) => {
   console.log('发布');
   orderReleaseRef.value.openDialog();
@@ -319,6 +318,7 @@ const releaseContent = (row: any) => {
   console.log('发布内容');
 };
 // 工单重办
+const orderRedoRef = ref<RefType>();  // 工单重办ref
 const orderRedo = (row: any) => {
   console.log('重办');
   orderRedoRef.value.openDialog();

+ 5 - 5
src/views/forgetPwd/component/Forget-password.vue

@@ -91,13 +91,13 @@ interface ChangePwdState {
 const router = useRouter();
 const state = reactive({
 	ruleForm: <ChangePwdState>{
-		currentPassword: '',
-		newPassword: '',
-		confirmPassword: '',
+		currentPassword: '',  // 旧密码
+		newPassword: '',  // 新密码
+		confirmPassword: '',  // 确认密码
 	},
-	loading: false,
+	loading: false, // 确认修改按钮loading
 });
-const forgetPwdRef = ref<FormInstance>();
+const forgetPwdRef = ref<FormInstance>(); // 表单ref
 // 确认重置
 const onChangeConfirm = async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;

+ 4 - 4
src/views/forgetPwd/index.vue

@@ -28,13 +28,13 @@ interface LoginState {
 }
 
 // 引入组件
-const ForgetPwd = defineAsyncComponent(() => import('/@/views/forgetPwd/component/Forget-password.vue'));
+const ForgetPwd = defineAsyncComponent(() => import('/@/views/forgetPwd/component/Forget-password.vue')); // 忘记密码
 
-const storesThemeConfig = useThemeConfig();
+const storesThemeConfig = useThemeConfig(); // 主题配置
 const { themeConfig } = storeToRefs(storesThemeConfig);
 const state = reactive<LoginState>({
-	tabsActiveName: 'account',
-	isScan: false,
+	tabsActiveName: 'account',  // 账号密码登录
+	isScan: false,  // 是否扫码登录
 });
 let bgImg = themeConfig.value.loginImage ?? `url(${getImageUrl('login/bg.png')})`;
 // 获取布局配置信息

+ 15 - 7
src/views/knowledge/apply/component/Knowledge-apply-detail.vue

@@ -77,17 +77,25 @@ import { formatDate } from '/@/utils/formatTime';
 import { KnowledgeApplyDetail } from '/@/api/knowledge/apply';
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
-const router = useRouter();
+const ruleFormRef = ref<any>(); // 表单ref
+const router = useRouter(); // 路由
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗
 	ruleForm: {
-		knowledgeApplyType: 1,
-		KnowledgeId: '',
+    knowledgeApplyType: 1,  // 申请类型
+    department: '',  // 诉求处理部门
+    creationName: '',  // 申请人
+    creationBMName: '',  // 申请部门
+    expiredTime: '',  // 截止时间
+    content: '',  // 诉求内容
+		KnowledgeId: '',  // 关联知识
+    processor: '',  // 处理人
+    handleTime: '',  // 处理完成时间
+    returnTime: '',  // 退回时间
+    opinion: '',  // 退回原因
 	},
 	orgData: [], // 上级
-	loading: false,
-	identityTypeOptions: [],
+	loading: false, // 加载
 });
 // 打开弹窗
 const openDialog = async (row: any) => {

+ 13 - 7
src/views/knowledge/apply/component/Knowledge-apply-handle.vue

@@ -104,17 +104,23 @@ import { KnowledgeGetKnowledge } from '/@/api/knowledge';
 const emit = defineEmits(['updateList']);
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
+const ruleFormRef = ref<any>(); // 表单
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗
 	ruleForm: {
-		knowledgeApplyType: 1,
-		KnowledgeId: '',
-		code: '',
+		knowledgeApplyType: 1,  // 诉求类型
+    department: '',  // 部门
+    creationName: '',  // 诉求人
+    creationBMName: '',  // 诉求人部门
+    expiredTime: '',  // 截至时间
+    kbTitle: '',  // 关联知识
+    content: '',  // 诉求内容
+    knowledgeId: '',  // 关联知识id
+    opinion: '',  // 备注
 	},
 	orgData: [], // 上级
-	loading: false,
-	knowledgeOptions: [],
+	loading: false, // 加载
+	knowledgeOptions: [], // 关联知识数据
 });
 const router = useRouter();
 // 打开弹窗

+ 17 - 17
src/views/knowledge/apply/index.vue

@@ -131,29 +131,27 @@ import {shortcuts} from '/@/utils/constants';
 import { handleList, KnowledgeReturn, baseData } from '/@/api/knowledge/apply';
 
 // 引入组件
-const KnowledgeApplyDetail = defineAsyncComponent(() => import('/@/views/knowledge/apply/component/Knowledge-apply-detail.vue'));
-const KnowledgeApplyHandle = defineAsyncComponent(() => import('/@/views/knowledge/apply/component/Knowledge-apply-handle.vue'));
+const KnowledgeApplyDetail = defineAsyncComponent(() => import('/@/views/knowledge/apply/component/Knowledge-apply-detail.vue')); // 详情组件
+const KnowledgeApplyHandle = defineAsyncComponent(() => import('/@/views/knowledge/apply/component/Knowledge-apply-handle.vue')); // 处理组件
 
 // 定义变量内容
 const state = reactive(<any>{
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		Status: ' ',
-		ApplyType: '',
-		IsOvertime: '',
-		StartTime: '',
-		EndTime: '',
+    PageSize: 10, // 每页条数
+		PageIndex: 1, // 当前页码
+		Status: ' ',  // 状态
+		ApplyType: '',  // 申请类型
+		IsOvertime: '', // 是否超时
+		StartTime: '',  // 开始时间
+		EndTime: '',  // 结束时间
 	},
-	tableList: [],
-	loading: false,
-	total: 0,
-	eKnowledgeApplyType: [],
-	statusOptions: [],
+	tableList: [],  // 表格数据
+	loading: false, // 加载状态
+	total: 0, // 总条数
+	eKnowledgeApplyType: [],  // 申请类型数据
+	statusOptions: [],  // 状态数据
 });
-const ruleFormRef = ref<FormInstance>();
-const KnowledgeApplyDetailRef = ref<RefType>();
-const KnowledgeApplyHandleRef = ref<RefType>();
+const ruleFormRef = ref<FormInstance>();  // 表单ref
 // 创建时间
 const timeChange = (val: string[]) => {
 	state.queryParams.StartTime = val[0];
@@ -191,10 +189,12 @@ const handleClick = () => {
 	queryList();
 };
 // 查看详情
+const KnowledgeApplyDetailRef = ref<RefType>();
 const onDetail = (row: any) => {
 	KnowledgeApplyDetailRef.value.openDialog(row);
 };
 // 处理
+const KnowledgeApplyHandleRef = ref<RefType>();
 const onHandle = (row: any) => {
 	KnowledgeApplyHandleRef.value.openDialog(row);
 };

+ 17 - 12
src/views/knowledge/apply/my/component/Knowledge-my-apply-add.vue

@@ -20,7 +20,7 @@
 								:options="state.knowledgeOptions"
 								placeholder="请选择关联知识"
 								class="w100"
-								@change="changeKonwledge"
+								@change="changeKnowledge"
 							/>
 						</el-form-item>
 					</el-col>
@@ -47,8 +47,8 @@
 								clearable
 								class="w100"
 								v-model="state.ruleForm.departmentId"
-								ref="cascaderRef"
-								@change="getselKnowledgeList"
+								ref="cascadeRef"
+								@change="getKnowledgeList"
 							>
 								<template #default="{ node, data }">
 									<span>{{ data.orgName }}</span>
@@ -103,14 +103,19 @@ import { KnowledgeApplyAdd } from '/@/api/knowledge/apply';
 const emit = defineEmits(['updateList']);
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
+const ruleFormRef = ref<any>(); // 表单ref
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗显示隐藏
 	ruleForm: {
-		knowledgeApplyType: 0,
+		knowledgeApplyType: 0,  // 申请类型
+    knowledgeId: null, // 关联知识id
+    content: '', // 申请内容
+    departmentId: '', // 处理部门id
+    department: '', // 处理部门
+    expiredTime: '', // 截止日期
 	},
-	orgData: [], // 上级
-	loading: false,
+	orgData: [],  // 处理部门列表
+	loading: false, // 确定按钮loading
 	knowledgeOptions: [], //关联知识列表
 });
 // 打开弹窗
@@ -129,14 +134,14 @@ const closeDialog = () => {
 const onCancel = () => {
 	closeDialog();
 };
-const cascaderRef = ref<RefType>();
+const cascadeRef = ref<RefType>();
 // 获取选择name值
-const getselKnowledgeList = () => {
-	let currentNode = cascaderRef.value.getCheckedNodes();
+const getKnowledgeList = () => {
+	let currentNode = cascadeRef.value.getCheckedNodes();
 	state.ruleForm.department = currentNode[0]?.label ?? '';
 };
 // 选择关联知识
-const changeKonwledge = (val: any) => {
+const changeKnowledge = (val: any) => {
 	const item = state.knowledgeOptions.find((v: any) => v.id === val);
 	if (item) {
 		state.ruleForm.department = item.department;

+ 15 - 7
src/views/knowledge/apply/my/component/Knowledge-my-apply-detail.vue

@@ -77,17 +77,25 @@ import { formatDate } from '/@/utils/formatTime';
 import { KnowledgeApplyDetail } from '/@/api/knowledge/apply';
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
-const router = useRouter();
+const ruleFormRef = ref<any>(); // 表单ref
+const router = useRouter(); // 路由
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		knowledgeApplyType: 1,
-		KnowledgeId: '',
+    knowledgeApplyType: 1,  // 申请类型
+    department: '', // 诉求处理部门
+    creationName: '', // 申请人
+    creationBMName: '', // 申请部门
+    expiredTime: '', // 截止时间
+    content: '', // 诉求内容
+    kbTitle: '', // 关联知识
+    processor: '', // 处理人
+    handleTime: '', // 处理完成时间
+    returnTime: '', // 退回时间
+    opinion: '', // 备注
 	},
-	orgData: [], // 上级
-	loading: false,
-	identityTypeOptions: [],
+	orgData: [], // 机构数据
+	loading: false, // 加载状态
 });
 // 打开弹窗
 const openDialog = async (row: any) => {

+ 8 - 4
src/views/knowledge/apply/my/component/Knowledge-my-apply-edit.vue

@@ -103,12 +103,16 @@ import { KnowledgeApplyUpdate, KnowledgeApplyDetail } from '/@/api/knowledge/app
 const emit = defineEmits(['updateList']);
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
+const ruleFormRef = ref<any>(); // 表单ref
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗显示隐藏
 	ruleForm: {
-		knowledgeApplyType: 1,
-		KnowledgeId: '',
+    knowledgeApplyType: 1,  // 申请类型
+    knowledgeId: null, // 关联知识id
+    content: '', // 申请内容
+    departmentId: '', // 处理部门id
+    department: '', // 处理部门
+    expiredTime: '', // 截止日期
 	},
 	orgData: [], // 上级
 	loading: false,

+ 19 - 19
src/views/knowledge/apply/my/index.vue

@@ -140,24 +140,24 @@ import { getOrgList } from '/@/api/system/organize';
 import { KnowledgeGetKnowledge } from '/@/api/knowledge';
 
 // 引入组件
-const KnowledgeMyApplyAdd = defineAsyncComponent(() => import('/@/views/knowledge/apply/my/component/Knowledge-my-apply-add.vue'));
-const KnowledgeMyApplyEdit = defineAsyncComponent(() => import('/@/views/knowledge/apply/my/component/Knowledge-my-apply-edit.vue'));
-const KnowledgeMyApplyDetail = defineAsyncComponent(() => import('/@/views/knowledge/apply/my/component/Knowledge-my-apply-detail.vue'));
+const KnowledgeMyApplyAdd = defineAsyncComponent(() => import('/@/views/knowledge/apply/my/component/Knowledge-my-apply-add.vue')); // 新增组件
+const KnowledgeMyApplyEdit = defineAsyncComponent(() => import('/@/views/knowledge/apply/my/component/Knowledge-my-apply-edit.vue')); // 修改组件
+const KnowledgeMyApplyDetail = defineAsyncComponent(() => import('/@/views/knowledge/apply/my/component/Knowledge-my-apply-detail.vue')); // 详情组件
 // 定义变量内容
 const state = reactive(<any>{
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		Status: ' ',
-		ApplyType: '',
-		IsOvertime: '',
-		StartTime: '',
-		EndTime: '',
+		PageIndex: 1, // 当前页码
+		PageSize: 10, // 每页条数
+		Status: ' ',  // 状态
+		ApplyType: '',  // 申请类型
+		IsOvertime: '', // 是否超时
+		StartTime: '',  // 开始时间
+		EndTime: '',  // 结束时间
 	},
-	tableList: [],
-	loading: false,
-	total: 0,
-	ApplyTypeOptions: [
+	tableList: [],  // 表格数据
+	loading: false,   // 加载状态
+	total: 0, // 总条数
+	ApplyTypeOptions: [ // 申请类型数据
 		{
 			label: '新增',
 			value: 0,
@@ -167,12 +167,9 @@ const state = reactive(<any>{
 			value: 1,
 		},
 	],
-	orgData: [],
+	orgData: [],  // 组织机构数据
 });
-const ruleFormRef = ref<FormInstance>();
-const KnowledgeMyApplyAddRef = ref<RefType>();
-const KnowledgeMyApplyEditRef = ref<RefType>();
-const KnowledgeMyApplyDetailRef = ref<RefType>();
+const ruleFormRef = ref<FormInstance>();  // 表单实例
 // 创建时间
 const timeChange = (val: string[]) => {
 	if (val) {
@@ -212,14 +209,17 @@ const handleClick = () => {
 	queryList();
 };
 // 查看详情
+const KnowledgeMyApplyDetailRef = ref<RefType>(); // 详情实例
 const onDetail = (row: any) => {
 	KnowledgeMyApplyDetailRef.value.openDialog(row);
 };
 // 发起申请
+const KnowledgeMyApplyAddRef = ref<RefType>();  // 新增实例
 const onApply = () => {
 	KnowledgeMyApplyAddRef.value.openDialog(state.orgData, state.knowledgeOptions);
 };
 // 修改申请
+const KnowledgeMyApplyEditRef = ref<RefType>(); // 修改实例
 const onEdit = (row: any) => {
 	KnowledgeMyApplyEditRef.value.openDialog(row, state.orgData, state.knowledgeOptions);
 };

+ 18 - 8
src/views/knowledge/component/Knowledge-preview.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="knowledge-preview-container layout-pd">
 		<el-card shadow="never">
-			<el-row :gutter="35" v-loading="state.loading">
+			<el-row :gutter="35" v-loading="loading">
 				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb30">
 					<h1 class="font18">{{ state.info.title }}</h1></el-col
 				>
@@ -22,7 +22,7 @@
 </template>
 
 <script setup lang="ts" name="knowledgePreview">
-import { reactive, onMounted, onBeforeUnmount } from 'vue';
+import {reactive, onMounted, onBeforeUnmount, ref} from 'vue';
 import { useRoute } from 'vue-router';
 import { Local } from '/@/utils/storage';
 import { KnowledgeInfo } from '/@/api/knowledge';
@@ -30,25 +30,35 @@ import { formatDate } from '/@/utils/formatTime';
 
 // 定义变量内容
 const state = reactive<any>({
-	info: {},
+	info: {
+    knowledgeTypeName: '', // 类别
+    hotspotName: '', // 热点
+    keywords: '', // 关键词
+    isPublic: false, // 是否公开
+    creatorName: '', // 创建人
+    creationTime: '', // 创建时间
+    summary: '', // 摘要
+    content: '', // 内容
+  },
 });
-const route = useRoute();
+const loading = ref<Boolean>(false); // 加载状态
 // 查询知识详情
+const route = useRoute(); //  获取路由参数
 onMounted(async () => {
-	state.loading = true;
+  loading.value = true;
 	if (route.params.id) {
 		try {
 			const { isAddPv } = route.params;
 			let IsAddPv = isAddPv ? 'true' : false;
 			const res: any = await KnowledgeInfo(route.params.id, { isAddPv: IsAddPv });
 			state.info = res.result ?? {};
-			state.loading = false;
+      loading.value = false;
 		} catch (error) {
-			state.loading = false;
+      loading.value = false;
 		}
 	} else {
 		state.info = Local.get('previewForm') ?? {};
-		state.loading = false;
+    loading.value = false;
 	}
 });
 onBeforeUnmount(() => {

+ 10 - 10
src/views/knowledge/component/Knowledge-process.vue

@@ -93,7 +93,7 @@
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="附件" prop="additions" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
-							<annex-list ref="AnnexListRef"></annex-list>
+							<annex-list></annex-list>
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -115,8 +115,8 @@ import { KnowledgeAddStartFlowParams, KnowledgeDeleteStartFlowParams, KnowledgeA
 import { workflowNextSteps, workflowNext, workflowRecall, workflowRecallParams, workflowStepOptions } from '/@/api/system/workflow';
 import other from '/@/utils/other';
 // 引入组件
-const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue'));
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const Comment = defineAsyncComponent(() => import('/@/views/business/order/components/Order-comment.vue')); // 常用意见
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['knowledgeProcessSuccess', 'knowledgeProcessFailed']);
@@ -136,19 +136,18 @@ const state = reactive<any>({
 	},
 	nextStepOptions: [], // 下一个节点
 	handlerOptions: [], // 处理人
-	transform: 'translate(0px, 0px)',
-	fileList: [],
-	loading: false,
+	transform: 'translate(0px, 0px)', // 附件弹窗位置
+	fileList: [], // 附件列表
+	loading: false, // 提交按钮loading
 	isStartFlow: false, //是否开启流程
-	processType: 'next',
+	processType: 'next',  // 流程状态
 	workflowId: '', //流程id
-	commonEnum: '',
+	commonEnum: '', // 常用意见类型
 	handlerClassifies: [], //撤回处理人
 	handlerMainOptions: [], // 主办人
 	handleId: '', // 流程处理ID
 });
-const ruleFormRef = ref<RefType>();
-const dialogRef = ref<RefType>();
+const ruleFormRef = ref<RefType>(); // 表单ref
 // 打开弹窗
 const openDialog = async (val: any) => {
 	console.log(val);
@@ -262,6 +261,7 @@ state.handlerMainOptions = computed(() => {
 	return state.ruleForm.nextHandlers;
 });
 // 设置抽屉
+const dialogRef = ref<RefType>(); // 弹窗ref
 const mouseup = () => {
 	state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
 };

+ 8 - 9
src/views/knowledge/config/standard/index.vue

@@ -39,22 +39,21 @@ import mittBus from '/@/utils/mitt';
 import '@wangeditor/editor/dist/css/style.css'; // 引入 css
 
 // 引入组件
-const Editor = defineAsyncComponent(() => import('/@/components/Editor/index.vue'));
+const Editor = defineAsyncComponent(() => import('/@/components/Editor/index.vue'));  // 富文本编辑器
 
 // 定义变量内容
-const ruleFormRef = ref<RefType>();
 const state = reactive<any>({
 	ruleForm: {
-		content: '',
-		title: '',
+		content: '',  // 内容
+		title: '',  // 标题
 	},
-	disable: false,
-	loading: false,
-	dialogVisible: false,
+	disable: false, // 是否禁用
+	loading: false, // 是否加载中
+	dialogVisible: false, // 是否显示预览弹窗
 });
-
-const route = useRoute();
 // 新增
+const route = useRoute(); // 路由
+const ruleFormRef = ref<RefType>(); // 表单ref
 const onSubmit = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {

+ 6 - 6
src/views/knowledge/config/type/component/Knowledge-type-add.vue

@@ -54,18 +54,18 @@ import { addType } from '/@/api/knowledge/type';
 const emit = defineEmits(['updateList']);
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗
 	ruleForm: {
-		name: '',
-		sort: 0,
-		parentId: '',
+		name: '', // 类型名称
+		sort: 0,  // 排序
+		parentId: '', // 上级类型
 	},
 	treeData: [], // 上级
-	loading: false,
+	loading: false, // 加载
 });
 // 打开弹窗
+const ruleFormRef = ref<any>(); // 表单ref
 const openDialog = (treeData: any) => {
 	state.treeData = treeData ?? [];
 	ruleFormRef.value?.clearValidate();

+ 6 - 6
src/views/knowledge/config/type/component/Knowledge-type-edit.vue

@@ -56,18 +56,18 @@ import { updateType, typeDetail } from '/@/api/knowledge/type';
 const emit = defineEmits(['updateList']);
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗
 	ruleForm: {
-		name: '',
-		sort: 0,
-		parentId: '',
+		name: '', // 类型名称
+		sort: 0,  // 排序
+		parentId: '', // 上级类型
 	},
 	treeData: [], // 上级
-	loading: false,
+	loading: false, // 加载
 });
 // 打开弹窗
+const ruleFormRef = ref<any>(); // 表单ref
 const openDialog = async (row: any, treeData: any) => {
 	try {
 		const res: any = await typeDetail(row.id);

+ 9 - 9
src/views/knowledge/config/type/index.vue

@@ -57,22 +57,20 @@ import { throttle } from '/@/utils/tools';
 import other from '/@/utils/other';
 import type { FormInstance } from 'element-plus';
 // 引入组件
-const KnowledgeTypeAdd = defineAsyncComponent(() => import('/@/views/knowledge/config/type/component/Knowledge-type-add.vue'));
-const KnowledgeTypeEdit = defineAsyncComponent(() => import('/@/views/knowledge/config/type/component/Knowledge-type-edit.vue'));
+const KnowledgeTypeAdd = defineAsyncComponent(() => import('/@/views/knowledge/config/type/component/Knowledge-type-add.vue')); // 新增组件
+const KnowledgeTypeEdit = defineAsyncComponent(() => import('/@/views/knowledge/config/type/component/Knowledge-type-edit.vue')); // 修改组件
 
 // 定义变量内容
-const knowledgeTypeAddRef = ref<RefType>();
-const knowledgeTypeEditRef = ref<RefType>();
-const ruleFormRef = ref<RefType>();
+const ruleFormRef = ref<RefType>(); // 表单ref
 const state = reactive({
 	tableData: <EmptyArrayType>[], // 获取所有菜单
 	staticArr: <EmptyArrayType>[], // 获取所有菜单
-	loading: false,
-	isExpand: false,
-	queryParams: {
+	loading: false, // 加载状态
+	isExpand: false,  // 是否展开
+	queryParams: {  // 查询参数
 		keyword: '',
 	},
-	expandedRowKeys: <EmptyArrayType>[],
+	expandedRowKeys: <EmptyArrayType>[],  // 展开的行
 	columns: [
 		{
 			key: 'name',
@@ -252,10 +250,12 @@ const getAllIds = (arr: any) => {
 	});
 };
 // 打开新增分类弹窗
+const knowledgeTypeAddRef = ref<RefType>(); // 新增ref
 const onOpenAdd = () => {
 	knowledgeTypeAddRef.value.openDialog(state.tableData);
 };
 // 打开编辑分类弹窗
+const knowledgeTypeEditRef = ref<RefType>();  // 修改ref
 const onOpenEdit = (row: any) => {
 	knowledgeTypeEditRef.value.openDialog(row, state.tableData);
 };

+ 4 - 1
src/views/knowledge/knowledge/component/Knowledge-standard-info.vue

@@ -21,7 +21,10 @@ import { standardInfo } from '/@/api/knowledge/standard';
 // 定义变量内容
 const state = reactive<any>({
 	dialogVisible: false,
-	info: {},
+	info: {
+    title: '', // 标题
+    content: '', // 内容
+  },
 });
 // 打开弹窗
 const openDialog = () => {

+ 7 - 4
src/views/knowledge/knowledge/component/Knowledge-update.vue

@@ -4,7 +4,7 @@
 			<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="100px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="关联知识" prop="knowledgeId" :rules="[{ required: true, message: '请选择关联知识', trigger: 'change' }]">
+						<el-form-item label="关联知识" prop="knowledgeName" :rules="[{ required: true, message: '请选择关联知识', trigger: 'change' }]">
 							{{ state.ruleForm.knowledgeName }}
 						</el-form-item>
 					</el-col>
@@ -67,16 +67,19 @@ import { KnowledgeApplyAdd } from '/@/api/knowledge/apply';
 const emit = defineEmits(['updateList']);
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		knowledgeApplyType: 1,
-		expiredTime: [],
+    knowledgeName: '', //关联知识
+    department: '', //部门名称
+    departmentId: '', //部门id
+		knowledgeApplyType: 1, //申请类型 1更新 2删除
+		expiredTime: [], //截止日期
 	},
 	loading: false,
 	knowledgeOptions: [], //关联知识列表
 });
+const ruleFormRef = ref<any>(); //表单ref
 // 打开弹窗
 const openDialog = (row: any) => {
 	state.ruleForm.knowledgeApplyType = 1; //更新

+ 15 - 14
src/views/knowledge/knowledge/component/knowledge-edit.vue

@@ -158,20 +158,20 @@ import { KnowledgeDetail, KnowledgeAdd, KnowledgeGetKnowledge, KnowledgeUpdate }
 import { hotSpotType } from '/@/api/business/order';
 
 // 引入组件
-const Editor = defineAsyncComponent(() => import('/@/components/Editor/index.vue'));
-const KnowledgeProcess = defineAsyncComponent(() => import('/@/views/knowledge/component/Knowledge-process.vue'));
-const KnowledgeStandard = defineAsyncComponent(() => import('/@/views/knowledge/knowledge/component/Knowledge-standard-info.vue'));
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const Editor = defineAsyncComponent(() => import('/@/components/Editor/index.vue'));  // 富文本编辑器
+const KnowledgeProcess = defineAsyncComponent(() => import('/@/views/knowledge/component/Knowledge-process.vue'));  // 流程组件
+const KnowledgeStandard = defineAsyncComponent(() => import('/@/views/knowledge/knowledge/component/Knowledge-standard-info.vue')); // 编写规范
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件组件
 
 // 定义变量内容
-const ruleFormRef = ref<any>();
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		isPublic: true,
-		knowledgeTypeId: '',
-		hotspotId: '',
-		knowledges: [],
+		isPublic: true, // 是否公开
+    keywords: '', // 关键字
+		knowledgeTypeId: '',// 知识分类
+		hotspotId: '', // 热点分类
+		knowledges: [], // 关联知识
 	},
 	typeData: [], // 知识分类
 	loading: false,
@@ -179,11 +179,7 @@ const state = reactive<any>({
 	knowledgeOptions: [], //关联知识
 	knowledgeId: '', // 当前id
 });
-const route = useRoute();
-const router = useRouter();
-const KnowledgeProcessRef = ref<RefType>();
-const stores = useUserInfo();
-const { userInfos } = storeToRefs(stores);
+const ruleFormRef = ref<any>(); // 表单ref
 // 热点分类远程搜索
 const HotspotProps = {
 	label: 'hotSpotFullName',
@@ -226,12 +222,15 @@ const getKnowledgeList = () => {
 	state.ruleForm.knowledgeTypeName = currentNode[0]?.text ?? '';
 };
 // 提交审核
+const KnowledgeProcessRef = ref<RefType>(); // 流程组件
 const handleOperation = async (submitObj: any, operation: Function) => {
 	await operation(submitObj).then((res: any) => {
 		const id = res.result || submitObj.id;
 		KnowledgeProcessRef.value.openDialog({ id, title: '创建知识', commonEnum: commonEnum.KnowledgeLocution, processType: 'addStart' });
 	});
 };
+const route = useRoute(); // 获取路由
+const router = useRouter(); // 路由跳转
 const onSubmitReview = async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	await formEl.validate((valid: boolean) => {
@@ -265,6 +264,8 @@ const knowledgeProcessSuccess = () => {
 	});
 };
 // 预览
+const stores = useUserInfo(); // 用户信息
+const { userInfos } = storeToRefs(stores);  // 用户信息
 const onPreview = () => {
 	state.ruleForm.creatorName = userInfos.value?.name ?? '';
 	state.ruleForm.creationTime = new Date();

+ 12 - 12
src/views/knowledge/knowledge/delApply/index.vue

@@ -114,24 +114,23 @@ import { KnowledgeDeleteList, deleteBase } from '/@/api/knowledge';
 import { workflowTerminate } from '/@/api/system/workflow';
 
 // 引入组件
-const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));
+const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));  // 审核记录
 
 // 定义变量内容
 const state = reactive(<any>{
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		EKnowledgeWorkFlowStatus: ' ',
-		StartApplyTime: '',
-		EndApplyTime: '',
+		PageIndex: 1, // 页码
+		PageSize: 10, // 每页条数
+		EKnowledgeWorkFlowStatus: ' ', // 状态
+		StartApplyTime: '', // 开始时间
+		EndApplyTime: '', // 结束时间
 	},
-	tableList: [],
-	loading: false,
-	total: 0,
-	statusOptions: [],
+	tableList: [], // 表格数据
+	loading: false, // 加载状态
+	total: 0, // 总条数
+	statusOptions: [], // 状态下拉
 });
-const ruleFormRef = ref<FormInstance>();
-const auditRecordRef = ref<RefType>();
+const ruleFormRef = ref<FormInstance>();  // 表单ref
 // 创建时间
 const timeChange = (val: string[]) => {
 	state.queryParams.StartApplyTime = val[0];
@@ -168,6 +167,7 @@ const handleClick = () => {
 	queryList();
 };
 // 查看申请记录
+const auditRecordRef = ref<RefType>();  // 审核记录ref
 const onRecord = (row: any) => {
 	const params = {
 		title: `审核记录 (${row.title})`,

+ 12 - 13
src/views/knowledge/knowledge/draft/index.vue

@@ -91,22 +91,21 @@ import { KnowledgeDel, myDraftsList } from '/@/api/knowledge';
 // 定义变量内容
 const state = reactive(<any>{
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		Status: '0',
-		ApplyType: '',
-		IsOvertime: '',
-		StartTime: '',
-		EndTime: '',
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页显示条数
+		Status: '0',  // 状态 0 草稿箱 1 已发布
+		ApplyType: '',  // 申请类型
+		IsOvertime: '',   // 是否超时
+		StartTime: '',  // 开始时间
+		EndTime: '',  // 结束时间
 	},
 	typeData: [], // 知识分类
-	tableList: [],
-	loading: false,
-	total: 0,
-	multipleSelection: [],
+	tableList: [],  // 表格数据
+	loading: false, // 加载状态
+	total: 0, // 总条数
 });
-const router = useRouter();
-const ruleFormRef = ref<FormInstance>();
+const router = useRouter(); // 路由
+const ruleFormRef = ref<FormInstance>();  // 表单ref
 // 创建时间
 const timeChange = (val: string[]) => {
 	state.queryParams.StartTime = val[0];

+ 30 - 23
src/views/knowledge/knowledge/index.vue

@@ -287,36 +287,39 @@ import { treeList } from '/@/api/knowledge/type';
 import { hotSpotType } from '/@/api/business/order';
 
 // 引入组件
-const KnowledgeProcess = defineAsyncComponent(() => import('/@/views/knowledge/component/Knowledge-process.vue'));
-const KnowledgeUpdate = defineAsyncComponent(() => import('/@/views/knowledge/knowledge/component/Knowledge-update.vue'));
-const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));
+const KnowledgeProcess = defineAsyncComponent(() => import('/@/views/knowledge/component/Knowledge-process.vue'));  //流程组件
+const KnowledgeUpdate = defineAsyncComponent(() => import('/@/views/knowledge/knowledge/component/Knowledge-update.vue'));  //更新申请
+const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));  //审核记录
 
 // 定义变量内容
 const state = reactive<any>({
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		Keyword: '',
-		Status: ' ',
+		PageIndex: 1, //页码
+		PageSize: 10, //每页条数
+		Keyword: '',  //关键字
+		Status: ' ',  //状态
+    OrgId: '',    //组织机构
+    HotSpotTypeId: '', //热点分类
+    CreationStartTime: '', //创建开始时间
+    CreationEndTime: '', //创建结束时间
+    StartOnShelfTime: '', //上架开始时间
+    EndOnShelfTime: '', //上架结束时间
+    StartOffShelfTime: '', //下架开始时间
+    EndOffShelfTime: '', //下架结束时间
 	},
-	activeName: '0',
-	tableData: [],
-	total: 0,
-	loading: false,
-	tableLoading: false,
-	orgData: [],
-	knowledgeOptions: [],
-	options: [],
-	statusOptions: [],
-	defaultExpandedOrgKeys: [],
-	defaultExpandedTypeKeys: [],
+	activeName: '0', //tab切换
+	tableData: [],  //表格数据
+	total: 0, //总条数
+	loading: false, //表格loading
+	tableLoading: false,  //表格loading
+	orgData: [],  //组织机构数据
+	knowledgeOptions: [], //知识库类型数据
+	statusOptions: [], //状态数据
+	defaultExpandedOrgKeys: [], //默认展开的组织机构
+	defaultExpandedTypeKeys: [],  //默认展开的知识库类型
 });
-const router = useRouter();
+const router = useRouter(); //路由
 const ruleFormRef = ref<FormInstance>(); //表单ref
-const rightScrollRef = ref<RefType>();
-const auditRecordRef = ref<RefType>();
-const knowledgeProcessRef = ref<RefType>();
-const knowledgeUpdateRef = ref<RefType>();
 // 热点分类远程搜索
 const HotspotProps = {
 	label: 'hotSpotFullName',
@@ -414,6 +417,7 @@ const getOrgListApi = async () => {
 	}
 };
 /** 获取知识列表 */
+const rightScrollRef = ref<RefType>();  //右侧滚动条ref
 const queryList = () => {
 	if (!auth('knowledge:query')) ElMessage.error('抱歉,您没有权限获取知识库');
 	else {
@@ -500,6 +504,7 @@ const onPreview = (row: any) => {
 	});
 };
 // 查看审核记录
+const auditRecordRef = ref<RefType>();  //审核记录ref
 const onRecord = (row: any) => {
 	const params = {
 		dialogTitle: `审核记录 (${row.title})`,
@@ -508,6 +513,7 @@ const onRecord = (row: any) => {
 	auditRecordRef.value.openDialog(params);
 };
 // 发起更新
+const knowledgeUpdateRef = ref<RefType>();  //更新申请ref
 const onRenew = (row: any) => {
 	knowledgeUpdateRef.value.openDialog(row, state.orgData, state.knowledgeOptions);
 };
@@ -612,6 +618,7 @@ const onRecall = (row: any) => {
 		.catch(() => {});
 };
 // 删除知识
+const knowledgeProcessRef = ref<RefType>(); //流程组件ref
 const onRowDel = (row: any) => {
 	knowledgeProcessRef.value.openDialog({ id: row.id, title: '删除知识', commonEnum: commonEnum.Seat, processType: 'deleteStart' });
 };

+ 15 - 15
src/views/knowledge/process/index.vue

@@ -122,27 +122,25 @@ import {commonEnum} from '/@/utils/constants';
 import { KnowledgeApprovedList, approvedBaseData } from '/@/api/knowledge';
 
 // 引入组件
-const KnowledgeProcess = defineAsyncComponent(() => import('/@/views/knowledge/component/Knowledge-process.vue'));
-const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));
+const KnowledgeProcess = defineAsyncComponent(() => import('/@/views/knowledge/component/Knowledge-process.vue'));  // 流程组件
+const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));  // 审核记录组件
 
 // 定义变量内容
 const state = reactive(<any>{
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		EKnowledgeWorkFlowStatus: ' ',
-		EKnowledgeApplyType: '',
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页显示条数
+		EKnowledgeWorkFlowStatus: ' ',  // 审核状态
+		EKnowledgeApplyType: '',  // 审核类型
 	},
-	tableList: [],
-	loading: false,
-	total: 0,
-	eKnowledgeApplyType: [], // 审核类型
-	statusOptions: [], // 状态
+	tableList: [],  // 表格数据
+	loading: false, // 加载状态
+	total: 0, // 总条数
+	eKnowledgeApplyType: [],  // 审核类型数据
+	statusOptions: [], // 审核状态数据
 });
-const ruleFormRef = ref<FormInstance>();
-const router = useRouter();
-const auditRecordRef = ref<RefType>();
-const knowledgeProcessRef = ref<RefType>();
+const ruleFormRef = ref<FormInstance>();  // 表单ref
+const router = useRouter(); // 路由
 /** 获取审核列表 */
 const queryList = throttle(() => {
 	if (!auth('knowledge:process:query')) ElMessage.error('抱歉,您没有权限查询知识审核列表');
@@ -180,6 +178,7 @@ const onPreview = (row: any) => {
 	});
 };
 // 审核
+const knowledgeProcessRef = ref<RefType>(); // 流程组件ref
 const onProcess = (row: any) => {
   knowledgeProcessRef.value.openDialog({ id: row.workflowId, title: '提交', processType: 'next', commonEnum: commonEnum.KnowledgeLocution });
 };
@@ -188,6 +187,7 @@ const knowledgeProcessSuccess = () => {
 	queryList();
 };
 // 查看审核记录
+const auditRecordRef = ref<RefType>();  // 审核记录ref
 const onRecord = (row: any) => {
   const params = {
     title: `审核记录 (${row.title})`,

+ 9 - 9
src/views/knowledge/retrieval/index.vue

@@ -50,14 +50,14 @@ import {knowledgeRetrieval} from '/@/api/knowledge/retrieval';
 const state = reactive<any>({
 	queryParams: {
 		// 查询条件
-		PageIndex: 1,
-		PageSize: 10,
-		Keyword: '',
-		RetrievalType: 0,
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页条数
+		Keyword: '',  // 关键词
+		RetrievalType: 0, // 检索类型
 	},
-	total: 0,
-	loading: false,
-	typeList: [
+	total: 0, // 总条数
+	loading: false, // 加载状态
+	typeList: [ // 检索类型
 		{
 			label: '全文',
 			value: 0,
@@ -71,9 +71,9 @@ const state = reactive<any>({
 			value: 2,
 		},
 	],
-	retrievalList: [],
+	retrievalList: [],  // 检索列表
 });
-const router = useRouter();
+const router = useRouter(); // 路由
 // 预览
 const onPreview = (row: any) => {
 	router.push({

+ 8 - 8
src/views/login/component/Account.vue

@@ -73,18 +73,18 @@ import type { FormInstance } from 'element-plus';
 import { signIn } from '/@/api/login';
 import { JSEncrypt } from 'jsencrypt'; // rsa加密
 // 定义变量内容
-const storesThemeConfig = useThemeConfig();
-const { themeConfig } = storeToRefs(storesThemeConfig);
-const route = useRoute();
-const router = useRouter();
+const storesThemeConfig = useThemeConfig(); // 主题配置
+const { themeConfig } = storeToRefs(storesThemeConfig); // 主题配置
+const route = useRoute(); // 路由
+const router = useRouter(); // 路由
 const state = reactive<any>({
 	ruleForm: {
-		userName: '',
-		password: '',
+		userName: '', // 账号
+		password: '', // 密码
 	},
-	loading: false,
+	loading: false, // 加载
 });
-const ruleFormRef = ref<FormInstance>();
+const ruleFormRef = ref<FormInstance>();  // 表单ref
 // 时间获取
 const currentTime = computed(() => {
 	return formatAxis(new Date());

+ 2 - 2
src/views/login/index.vue

@@ -45,8 +45,8 @@ const Account = defineAsyncComponent(() => import('/@/views/login/component/Acco
 const storesThemeConfig = useThemeConfig();
 const { themeConfig } = storeToRefs(storesThemeConfig);
 const state = reactive<LoginState>({
-	tabsActiveName: 'account',
-	isScan: false,
+	tabsActiveName: 'account',  // 默认显示账号密码登录
+	isScan: false,  // 是否显示扫码登录
 });
 let bgImg = themeConfig.value.loginImage ?? `url(${getImageUrl('login/bg.png')})`;
 // 获取布局配置信息

+ 4 - 4
src/views/system/config/dict/component/Dict-add.vue

@@ -65,12 +65,12 @@ const state = reactive<any>({
 		dicTypeId: '', // 分类id
 		dicDataName: '', // 名称
 		dicDataValue: '', // 值
-		parentId: '',
+		parentId: '', // 父级id
 	},
-	dicTypeList: [],
-	parentData: [],
+	dicTypeList: [],  // 分类列表
+	parentData: [], // 父级列表
 });
-let loading = ref<boolean>(false);
+let loading = ref<boolean>(false);  // 按钮loading
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 const openDialog = async (typeId:string) => {

+ 6 - 6
src/views/system/config/dict/component/Dict-edit.vue

@@ -68,14 +68,14 @@ const state = reactive<any>({
 		dicTypeId: '', // 分类id
 		dicDataName: '', // 名称
 		dicDataValue: '', // 值
-		parentId: '',
+		parentId: '', // 父级id
 	},
-	dicTypeList: [],
-	parentData: [],
-	currentId: '',
+	dicTypeList: [],  // 分类列表
+	parentData: [], // 父级列表
+	currentId: '',  // 当前id
 });
-const ruleFormRef = ref<FormInstance>();
-let loading = ref<boolean>(false);
+const ruleFormRef = ref<FormInstance>();  // 表单ref
+let loading = ref<boolean>(false);  // 加载状态
 // 打开弹窗
 const openDialog = async (row: any, tableData: any) => {
 	state.currentId = row.id ?? '';

+ 16 - 19
src/views/system/config/dict/index.vue

@@ -15,7 +15,6 @@
 								:props="{ children: 'children', label: 'dicTypeName' }"
 								@node-click="handleNodeClick"
 								:current-node-key="state.dicTypeList[0].id"
-								ref="treRef"
 								style="min-width: 100%; display: inline-block"
 							>
 							</el-tree>
@@ -104,23 +103,22 @@ import { throttle } from '/@/utils/tools';
 import { dicTypeList, getDataByTypeId } from '/@/api/system/dict';
 
 // 引入组件
-const DictAdd = defineAsyncComponent(() => import('/@/views/system/config/dict/component/Dict-add.vue'));
-const DictEdit = defineAsyncComponent(() => import('/@/views/system/config/dict/component/Dict-edit.vue'));
+const DictAdd = defineAsyncComponent(() => import('/@/views/system/config/dict/component/Dict-add.vue')); // 新增组件
+const DictEdit = defineAsyncComponent(() => import('/@/views/system/config/dict/component/Dict-edit.vue')); // 编辑组件
 
 // 定义变量内容
 const state = reactive<any>({
 	queryParams: {
-		keyword: '',
-		typeid: '',
-		loading: false,
+		keyword: '',  // 关键字
+		typeid: '',  // 字典类型
+		loading: false, // 加载状态
 	},
-	tableData: [],
-	staticArr: [],
-	total: 0,
-	loading: false,
-	tableLoading: false,
-	dicTypeList: [],
-	options: [],
+	tableData: [],  // 表格数据
+	staticArr: [],  // 静态数据
+	total: 0, // 总条数
+	loading: false, // 加载状态
+	tableLoading: false,  // 表格加载状态
+	dicTypeList: [],  // 字典类型列表
 	columns: [
 		{
 			key: 'dicDataName',
@@ -170,13 +168,10 @@ const state = reactive<any>({
 			},
 		},
 	],
-	expandedRowKeys: [],
-	isExpand: false,
+	expandedRowKeys: [],  // 展开行
+	isExpand: false,  // 是否展开
 });
-const dictAddRef = ref<RefType>(); //新增字典
-const dickEditRef = ref<RefType>(); //修改字典
-const treRef = ref<RefType>();
-const ruleFormRef = ref<RefType>();
+const ruleFormRef = ref<RefType>(); // 表单组件
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(() => {
 	if (state.queryParams.keyword) {
@@ -280,10 +275,12 @@ const handleNodeClick = (data: any) => {
 	resetQuery(ruleFormRef.value);
 };
 // 打开新增字典弹窗
+const dictAddRef = ref<RefType>(); //新增字典
 const onOpenAddUser = () => {
 	dictAddRef.value.openDialog(state.queryParams.typeid);
 };
 // 打开修改字典弹窗
+const dickEditRef = ref<RefType>(); //修改字典
 const onOpenEditUser = (row: any) => {
 	dickEditRef.value.openDialog(row.rowData, state.tableData);
 };

+ 4 - 4
src/views/system/config/holiday/index.vue

@@ -62,10 +62,6 @@ import dayjs from "dayjs";
 import calendar from '/@/utils/calendar.js'
 import {getDaysSetting, setHolidayApi} from '/@/api/system/holiday';
 
-const today = ref(new Date()); // 当前日期
-const month = ref(new Date()); // 月份
-const dialogVisible = ref(false); // 是否显示弹窗
-const loading = ref(false); // 加载状态
 const state = reactive<any>({
 	ruleForm: {
     time: '',
@@ -73,6 +69,10 @@ const state = reactive<any>({
 	},
   calendarData : [] // 日历数据
 });
+const today = ref(new Date()); // 当前日期
+const month = ref(new Date()); // 月份
+const dialogVisible = ref(false); // 是否显示弹窗
+const loading = ref(false); // 加载状态
 // 选择月份
 const selectMonth = async (val: Date) => {
   state.calendarData = [];

+ 7 - 8
src/views/system/config/timeLimit/index.vue

@@ -55,16 +55,15 @@ const TimeLimitDetail = defineAsyncComponent(() => import('/@/views/system/confi
 
 // 定义变量内容
 const state = reactive<any>({
-	loading: false,
+	loading: false, // 加载状态
 	queryParams: {
-		PageIndex: 1,
-		PageSize: 10,
-		Keyword: '',
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页显示条数
+		Keyword: '',  // 关键字
 	},
-	total: 0,
-	tableData: [],
-	multipleSelection: [],
-	baseData: {},
+	total: 0, // 总条数
+	tableData: [],  // 表格数据
+	baseData: {}, // 基础数据
 });
 const timeLimitAddRef = ref<RefType>();
 const timeLimitEditRef = ref<RefType>();

+ 12 - 13
src/views/system/config/workflow/component/Workflow-config.vue

@@ -68,23 +68,22 @@ import {throttle} from "/@/utils/tools";
 const emit = defineEmits(['updateList', 'openDialog', 'closeDialog']);
 
 // 定义变量内容
-const ruleDialogFormRef = ref<FormInstance>();
-const dialogVisible = ref(false); // 弹窗
-const dialogTitle = ref(''); // 弹窗标题
-
 const state = reactive<any>({
-  tableData: [],
-  total: 0,
-  loading:false,
+  tableData: [],  // 表格数据
+  total: 0, // 总条数
+  loading:false,  // 加载
   queryParams: {
-    PageIndex: 1,
-    PageSize: 10,
-    Keyword: '',
-    Status: '1',
+    PageIndex: 1, // 当前页
+    PageSize: 10, // 每页条数
+    Keyword: '',  // 关键字
+    Status: '1',  // 状态
   },
-  tableRadio:'',
-  rowCode:'',
+  tableRadio:'',  // 选择的模板
+  rowCode:'', // 行数据code
 })
+const ruleDialogFormRef = ref<FormInstance>();  // 表单
+const dialogVisible = ref(false); // 弹窗
+const dialogTitle = ref(''); // 弹窗标题
 
 // 打开弹窗
 const openDialog = async (row: any) => {

+ 13 - 9
src/views/system/config/workflow/component/Workflow-jump.vue

@@ -65,20 +65,24 @@ import { workflowJump, workflowGetJump, workflowStepOptions } from '/@/api/syste
 const emit = defineEmits(['updateList', 'openDialog', 'closeDialog']);
 
 // 定义变量内容
-const ruleFormRef = ref<RefType>();
 const state = reactive<any>({
 	ruleForm: {
-		nextStepCode: '',
-		nextHandlers: [],
-		opinion: '',
+    workflowId: '', // 流程ID
+		nextStepCode: '', // 下一环节
+		nextHandlers: [], // 下一处理人
+		opinion: '',  // 情况说明
 	},
-	showForm: {},
-	dialogVisible: false,
-	nextStepOptions: [],
-	personList: [],
-	loading: false,
+	showForm: {
+    title: '', // 流程标题
+    currentStepName: '', // 当前环节
+  },
+	dialogVisible: false, // 弹窗显示隐藏
+	nextStepOptions: [],  // 下一环节
+	personList: [], // 人员列表
+	loading: false, // 加载状态
 	handleId: '', // 流程处理ID
 });
+const ruleFormRef = ref<RefType>(); // 表单ref
 // 打开弹窗
 const openDialog = async (row: any) => {
 	try {

+ 10 - 10
src/views/system/config/workflow/component/workflowEdit.vue

@@ -9,15 +9,15 @@ import { ElMessage } from 'element-plus';
 import { useRoute } from 'vue-router';
 import { getWorkFlowDetail } from '/@/api/system/workflow';
 import { auth } from '/@/utils/authFunction';
-const LogicFlow = defineAsyncComponent(() => import('/@/components/LogicFlow/index.vue'));
+const LogicFlow = defineAsyncComponent(() => import('/@/components/LogicFlow/index.vue'));  // 流程设计器
 const designerRef = ref(null as any);
 let flowData = ref({
-	name: '',
-	code: '',
-	id: '',
-	moduleName: '',
-	moduleCode: '',
-	nodes: [
+	name: '', // 流程名称
+	code: '', // 流程编码
+	id: '', // 流程id
+	moduleName: '', // 模块名称
+	moduleCode: '', // 模块编码
+	nodes: [  // 节点
 		{
 			id: 'start',
 			type: 'hotline:start',
@@ -35,7 +35,7 @@ let flowData = ref({
 			type: 'hotline:end',
 			x: 780,
 			y: 400,
-			properties: {},
+			properties: <EmptyObjectType>{},
 			text: {
 				x: 780,
 				y: 440,
@@ -45,8 +45,8 @@ let flowData = ref({
 	],
 	edges: [],
 });
-const route = useRoute();
-const loading = ref(false);
+const route = useRoute(); // 路由
+const loading = ref(false); // 加载状态
 onMounted(async () => {
 	// 查询详情
 	if (route.params.id) {

+ 6 - 6
src/views/system/config/workflow/index.vue

@@ -182,8 +182,8 @@ import {
 
 
 // 引入组件
-const WorkflowJump = defineAsyncComponent(() => import('/@/views/system/config/workflow/component/Workflow-jump.vue'));
-const WorkflowConfig = defineAsyncComponent(() => import('/@/views/system/config/workflow/component/Workflow-config.vue'));
+const WorkflowJump = defineAsyncComponent(() => import('/@/views/system/config/workflow/component/Workflow-jump.vue')); // 流程跳转
+const WorkflowConfig = defineAsyncComponent(() => import('/@/views/system/config/workflow/component/Workflow-config.vue')); // 流程配置
 
 // 定义变量内容
 const state = reactive(<any>{
@@ -205,10 +205,10 @@ const state = reactive(<any>{
   ]
 });
 
-const ruleFormRef = ref<FormInstance>();
-const workflowJumpRef = ref(null as any);
-const workflowConfigRef = ref(null as any);
-const router = useRouter();
+const ruleFormRef = ref<FormInstance>();  // 表单ref
+const workflowJumpRef = ref(null as any); // 跳转ref
+const workflowConfigRef = ref(null as any); // 配置ref
+const router = useRouter(); // 路由
 const route = useRoute();
 /** 获取列表 */
 const queryList = () => {

+ 6 - 6
src/views/system/dataAuth/component/Data-auth-add.vue

@@ -45,14 +45,14 @@ const state = reactive<any>({
 	ruleForm: {
 		roleId: '', // 角色id
 		roleCode: 0, // 角色code
-		accessLevel: '',
-		tableName: '',
+		accessLevel: '',  // 可见等级
+		tableName: '',  // 数据表
 	},
-	tableData: [],
-	loading: false,
-	accessLevelOptions: [],
+	tableData: [],  // 数据表列表
+	loading: false, // 加载状态
+	accessLevelOptions: [], // 可见等级列表
 });
-const route = useRoute();
+const route = useRoute(); // 路由
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 const openDialog = async (accessLevelOptions: any) => {

+ 7 - 7
src/views/system/dataAuth/component/Data-auth-edit.vue

@@ -41,18 +41,18 @@ import { dataAuthList, editDataAuth } from '/@/api/system/roles';
 const emit = defineEmits(['updateList']);
 // 定义变量内容
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗显示隐藏
 	ruleForm: {
 		roleId: '', // 角色id
 		roleCode: 0, // 角色code
-		accessLevel: '',
-		tableName: '',
+		accessLevel: '',  // 可见等级
+		tableName: '',  // 数据表
 	},
-	tableData: [],
-	loading: false,
-	accessLevelOptions: [],
+	tableData: [],  // 数据表列表
+	loading: false, // 按钮loading
+	accessLevelOptions: [], // 可见等级列表
 });
-const route = useRoute();
+const route = useRoute(); // 路由
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 const openDialog = async (row: any, accessLevelOptions: any) => {

+ 8 - 10
src/views/system/dataAuth/index.vue

@@ -45,29 +45,24 @@ import { throttle } from '/@/utils/tools';
 import { getDataAuthorityByRole, deleteDataAuth, baseData } from '/@/api/system/roles';
 
 // 引入组件
-const DataAuthAdd = defineAsyncComponent(() => import('/@/views/system/dataAuth/component/Data-auth-add.vue'));
-const DataAuthEdit = defineAsyncComponent(() => import('/@/views/system/dataAuth/component/Data-auth-edit.vue'));
+const DataAuthAdd = defineAsyncComponent(() => import('/@/views/system/dataAuth/component/Data-auth-add.vue')); //新增数据权限
+const DataAuthEdit = defineAsyncComponent(() => import('/@/views/system/dataAuth/component/Data-auth-edit.vue')); //修改数据权限
 
 // 定义接口来定义对象的类型
 interface QueryState {
 	roleId: string | any[];
 	tableData: Array<any>;
 	loading: boolean;
-	multipleSelection: Array<any>;
 	accessLevelOptions: Array<any>;
 }
 
 // 定义变量内容
 const state = reactive<QueryState>({
-	roleId: '',
-	tableData: [],
-	loading: false,
-	multipleSelection: [],
+	roleId: '', //角色id
+	tableData: [],  //表格数据
+	loading: false, //加载状态
 	accessLevelOptions: <EmptyArrayType>[], //可用组织
 });
-const dataAuthAddRef = ref<RefType>(); //新增数据权限
-const dataAuthEditRef = ref<RefType>(); //修改数据权限
-const route = useRoute();
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(() => {
 	getList();
@@ -89,10 +84,12 @@ const getList = throttle(() => {
 }, 500);
 
 // 新增数据权限
+const dataAuthAddRef = ref<RefType>(); //新增数据权限
 const onAddAuth = () => {
 	dataAuthAddRef.value.openDialog(state.accessLevelOptions);
 };
 // 打开修改数据权限弹窗
+const dataAuthEditRef = ref<RefType>(); //修改数据权限
 const onEditAuth = (row: any) => {
 	dataAuthEditRef.value.openDialog(row, state.accessLevelOptions);
 };
@@ -122,6 +119,7 @@ const getBaseData = async () => {
 		console.log(error);
 	}
 };
+const route = useRoute(); //路由
 onMounted(() => {
 	if (route.query.id) {
 		state.roleId = route.query.id;

+ 2 - 2
src/views/system/menu/component/Menu-add.vue

@@ -174,7 +174,7 @@ import { FormInstance } from 'element-plus';
 import { addMenu, getMenuList } from '/@/api/system/menu';
 
 // 引入组件
-const IconSelector = defineAsyncComponent(() => import('/@/components/IconSelector/index.vue'));
+const IconSelector = defineAsyncComponent(() => import('/@/components/IconSelector/index.vue'));  // 图标选择器
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
@@ -206,7 +206,7 @@ const state = reactive<any>({
 		forePermissionCode: '', //前端权限编码
 	},
 	menuData: [], // 上级菜单数据
-	loading: false,
+	loading: false, // 加载状态
 	imgList: [
 		{
 			label: 'home/sllb.png',

+ 2 - 2
src/views/system/menu/component/Menu-edit.vue

@@ -174,7 +174,7 @@ import { auth } from '/@/utils/authFunction';
 import { updateMenu, getMenuList, getMenuById } from '/@/api/system/menu';
 
 // 引入组件
-const IconSelector = defineAsyncComponent(() => import('/@/components/IconSelector/index.vue'));
+const IconSelector = defineAsyncComponent(() => import('/@/components/IconSelector/index.vue'));  // 图标选择器
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
@@ -206,7 +206,7 @@ const state = reactive<any>({
 		forePermissionCode: '', //前端权限编码
 	},
 	menuData: <EmptyArrayType>[], // 上级菜单数据
-	loading: false,
+	loading: false, // 加载状态
 	imgList: [
 		{
 			label: 'home/sllb.png',

+ 10 - 10
src/views/system/menu/index.vue

@@ -60,21 +60,18 @@ import MenuSvgIcon from '/@/views/system/menu/component/Menu-svgIcon.vue';
 import { throttle } from '/@/utils/tools';
 import other from '/@/utils/other';
 // 引入组件
-const MenuAdd = defineAsyncComponent(() => import('/@/views/system/menu/component/Menu-add.vue'));
-const MenuEdit = defineAsyncComponent(() => import('/@/views/system/menu/component/Menu-edit.vue'));
+const MenuAdd = defineAsyncComponent(() => import('/@/views/system/menu/component/Menu-add.vue'));  // 新增菜单组件
+const MenuEdit = defineAsyncComponent(() => import('/@/views/system/menu/component/Menu-edit.vue'));  // 编辑菜单组件
 
 // 定义变量内容
-const menuAddRef = ref<RefType>();
-const menuEditRef = ref<RefType>();
-const ruleFormRef = ref<RefType>();
 const state = reactive({
 	menuTableData: <EmptyArrayType>[], // 获取所有菜单
-	staticArr: <EmptyArrayType>[],
-	loading: false,
+	staticArr: <EmptyArrayType>[],  // 静态路由
+	loading: false, // 加载状态
 	queryParams: {
-		keyword: '',
+		keyword: '',  // 关键字
 	},
-	expandedRowKeys: <EmptyArrayType>[],
+	expandedRowKeys: <EmptyArrayType>[],  // 展开的行
 	columns: [
 		{
 			key: 'pageName',
@@ -220,8 +217,9 @@ const state = reactive({
 			},
 		},
 	],
-	isExpand: false,
+	isExpand: false,  // 是否展开
 });
+const ruleFormRef = ref<RefType>(); // 表单ref
 const formatTable = (list: any[], keyword: string) => {
 	if (!list.length || !Array.isArray(list)) return [];
 	let emptyArr: any[] = [];
@@ -273,10 +271,12 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	emptyArr = [];
 };
 // 打开新增菜单弹窗
+const menuAddRef = ref<RefType>();  // 新增菜单弹窗
 const onOpenAddMenu = () => {
 	menuAddRef.value.openDialog();
 };
 // 打开编辑菜单弹窗
+const menuEditRef = ref<RefType>(); // 修改菜单弹窗
 const onOpenEditMenu = (row: RouteRecordRaw) => {
 	menuEditRef.value.openDialog(row);
 };

+ 5 - 5
src/views/system/organize/component/Org-add.vue

@@ -90,7 +90,7 @@ const emit = defineEmits(['updateList']);
 // 定义变量内容
 const ruleFormRef = ref<FormInstance>();
 const state = reactive<any>({
-	dialogVisible: false,
+	dialogVisible: false, // 弹窗显示隐藏
 	ruleForm: {
 		orgName: '', // 部门名称
 		orgCode: '', // 部门编码
@@ -101,13 +101,13 @@ const state = reactive<any>({
 		areaName: '', // 所属区域名称
 		areaCode: '', // 所属区域编码
 		isEnable: true, // 是否启用
-		children: [],
+		children: [], // 子部门
 	},
 	orgData: [], // 上级部门数据
 	orgType: [], // 部门类型
-	loading: false,
-	disabled: false,
-	telsList: [],
+	loading: false, // 确定按钮loading
+	disabled: false,  // 是否禁用
+	telsList: [], // 分机列表
 });
 // 打开弹窗
 const openDialog = async (orgData: any, orgType: any, row?: any) => {

+ 3 - 3
src/views/system/organize/component/Org-edit.vue

@@ -104,12 +104,12 @@ const state = reactive<any>({
 		areaName: '', // 所属区域名称
 		areaCode: '', // 所属区域编码
 		isEnable: true, // 是否启用
-		children: [],
+		children: [], // 子部门
 	},
 	orgData: [], // 上级部门数据
 	orgType: [], // 部门类型
-	loading: false,
-	telsList: [],
+	loading: false, // 按钮loading
+	telsList: [], // 分机列表
 });
 // 打开弹窗
 const openDialog = async (row: any, orgData: any, orgType: any) => {

+ 11 - 11
src/views/system/organize/index.vue

@@ -57,20 +57,18 @@ import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
 import other from '/@/utils/other';
 // 引入组件
-const OrgAdd = defineAsyncComponent(() => import('/@/views/system/organize/component/Org-add.vue'));
-const OrgEdit = defineAsyncComponent(() => import('/@/views/system/organize/component/Org-edit.vue'));
+const OrgAdd = defineAsyncComponent(() => import('/@/views/system/organize/component/Org-add.vue'));  // 新增组织机构
+const OrgEdit = defineAsyncComponent(() => import('/@/views/system/organize/component/Org-edit.vue'));  // 编辑组织机构
 
 // 定义变量内容
-const orgAddRef = ref<RefType>();
-const orgEditRef = ref<RefType>();
 const state = reactive({
 	orgTableData: <EmptyArrayType>[], // 获取所有菜单
-	staticArr: <EmptyArrayType>[],
-	loading: false,
+	staticArr: <EmptyArrayType>[],  // 静态数据
+	loading: false, // 加载状态
 	queryParams: {
-		keyword: '',
+		keyword: '',  // 关键字
 	},
-	expandedRowKeys: <EmptyArrayType>[],
+	expandedRowKeys: <EmptyArrayType>[],  // 展开行
 	columns: [
 		{
 			key: 'orgName',
@@ -154,10 +152,10 @@ const state = reactive({
 			},
 		},
 	],
-	isExpand: true,
-	orgType: [],
+	isExpand: true, // 是否展开
+	orgType: [],  // 部门类别
 });
-const ruleFormRef = ref<RefType>();
+const ruleFormRef = ref<RefType>(); // 搜索表单ref
 // 搜索
 const formatTable = (list: any[], keyword: string) => {
 	if (!list.length || !Array.isArray(list)) return [];
@@ -210,10 +208,12 @@ const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	emptyArr = [];
 }, 500);
 // 打开新增菜单弹窗
+const orgAddRef = ref<RefType>(); // 新增组织机构ref
 const onOpenAddOrg = (row?: any) => {
 	orgAddRef.value.openDialog(state.orgTableData, state.orgType, row);
 };
 // 打开编辑菜单弹窗
+const orgEditRef = ref<RefType>();  // 编辑组织机构ref
 const onOpenEditOrg = (row: any) => {
 	orgEditRef.value.openDialog(row, state.orgTableData, state.orgType);
 };

+ 1 - 1
src/views/system/parameter/component/Parameter-add.vue

@@ -65,7 +65,7 @@ const state = reactive<any>({
 		remark: '', // 参数说明
 	},
 });
-let loading = ref<boolean>(false);
+let loading = ref<boolean>(false);  // 加载状态
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 const openDialog = async (typeId: string) => {

+ 2 - 2
src/views/system/parameter/component/Parameter-edit.vue

@@ -72,7 +72,7 @@ const state = reactive<any>({
 	},
 	isDisabled: false, // 是否禁用
 });
-let loading = ref<boolean>(false);
+let loading = ref<boolean>(false);  // 加载状态
 const dialogTitle = computed(() => {
 	return state.isDisabled ? '查看参数' : '编辑参数';
 });
@@ -82,7 +82,7 @@ const openDialog = async (id: string, isDisabled?: boolean) => {
 	ruleFormRef.value?.resetFields();
 	try {
 		const res: any = await setitngsDetail(id);
-		state.ruleForm = res.result ?? {};
+		state.ruleForm = res.result ?? <EmptyObjectType>{};
 		state.ruleForm.settingValue = state.ruleForm.settingValue?.join('|');
 		state.isDisabled = isDisabled ?? false;
 		state.dialogVisible = true;

+ 4 - 5
src/views/system/parameter/index.vue

@@ -70,8 +70,8 @@ import { throttle } from '/@/utils/tools';
 import { formatDate } from '/@/utils/formatTime';
 
 // 引入组件
-const ParameterAdd = defineAsyncComponent(() => import('/@/views/system/parameter/component/Parameter-add.vue'));
-const ParameterEdit = defineAsyncComponent(() => import('/@/views/system/parameter/component/Parameter-edit.vue'));
+const ParameterAdd = defineAsyncComponent(() => import('/@/views/system/parameter/component/Parameter-add.vue')); // 参数新增
+const ParameterEdit = defineAsyncComponent(() => import('/@/views/system/parameter/component/Parameter-edit.vue')); // 参数编辑
 
 // 定义变量内容
 const state = reactive<any>({
@@ -87,9 +87,6 @@ const state = reactive<any>({
 	tableData: [], // 表格数据
 });
 const ruleFormRef = ref<any>(null); // 表单ref
-const ParameterAddRef = ref<RefType>(); // 参数新增
-const ParameterEditRef = ref<RefType>(); // 参数编辑
-
 // 获取参数列表
 const queryList = throttle(() => {
 	state.loading = true;
@@ -110,10 +107,12 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	queryList();
 };
 // 新增参数
+const ParameterAddRef = ref<RefType>(); // 参数新增
 const addParameter = () => {
 	ParameterAddRef.value.openDialog();
 };
 // 修改参数
+const ParameterEditRef = ref<RefType>(); // 参数编辑
 const updateParameter = (row: any) => {
 	ParameterEditRef.value.openDialog(row.id);
 };

部分文件因为文件数量过多而无法显示