Browse Source

refactor:流程调整;

zhangchong 1 year ago
parent
commit
9b1a4ed15b
35 changed files with 1440 additions and 1983 deletions
  1. 16 7
      src/components/CommonAdvice/index.vue
  2. 5 3
      src/components/LogicFlow/PropertySetting/index.vue
  3. 36 25
      src/components/LogicFlow/PropertySetting/summary.vue
  4. 39 24
      src/components/LogicFlow/PropertySetting/task.vue
  5. 1 13
      src/components/LogicFlow/index.vue
  6. 392 81
      src/components/ProcessApproval/index.vue
  7. 1 1
      src/layout/navBars/breadcrumb/telControl.vue
  8. 9 7
      src/stores/userInfo.ts
  9. 0 4
      src/theme/element.scss
  10. 1 0
      src/types/pinia.d.ts
  11. 7 3
      src/utils/PhoneScript.ts
  12. 9 1
      src/views/business/delay/backlog/index.vue
  13. 35 49
      src/views/business/delay/components/Order-delay.vue
  14. 3 6
      src/views/business/delay/index.vue
  15. 24 4
      src/views/business/discern/apply/index.vue
  16. 1 1
      src/views/business/discern/backlog/index.vue
  17. 33 38
      src/views/business/followUp/component/Follow-up-detail.vue
  18. 128 41
      src/views/business/order/accept/index.vue
  19. 0 1069
      src/views/business/order/accept/orderEdit.vue
  20. 359 320
      src/views/business/order/components/Order-detail.vue
  21. 1 1
      src/views/business/order/components/Order-expand-form.vue
  22. 47 18
      src/views/business/order/components/Order-revoke.vue
  23. 48 19
      src/views/business/order/components/Order-supply.vue
  24. 6 5
      src/views/business/order/index.vue
  25. 17 7
      src/views/business/release/index.vue
  26. 53 44
      src/views/business/supervise/components/Order-supervise.vue
  27. 7 7
      src/views/knowledge/component/Knowledge-process.vue
  28. 34 41
      src/views/knowledge/knowledge/index.vue
  29. 0 1
      src/views/system/config/dict/index.vue
  30. 2 2
      src/views/system/config/workflow/component/Workflow-config.vue
  31. 8 8
      src/views/system/config/workflow/component/Workflow-jump.vue
  32. 18 4
      src/views/system/config/workflow/index.vue
  33. 44 50
      src/views/system/dataAuth/component/Data-auth-add.vue
  34. 47 54
      src/views/system/dataAuth/component/Data-auth-edit.vue
  35. 9 25
      src/views/system/roles/component/Role-permission.vue

+ 16 - 7
src/components/CommonAdvice/index.vue

@@ -110,7 +110,7 @@ const props = defineProps({
   },
   minRows:{
     type: [Number , String , undefined],
-    default: 10,
+    default: 6,
   },
   maxRows:{
     type: [Number , String , undefined],
@@ -157,12 +157,21 @@ const onAddAdvice = async () => {
     ElMessage.warning(props.placeholder);
     return;
   }
-  await addCommon({
-    typeCode: props.commonEnum,
-    content: props.modelValue,
-  });
-  ElMessage.success('操作成功');
-  closeDialog();
+  ElMessageBox.confirm(`确认要添加到常用意见?`, '提示', {
+    confirmButtonText: '确认',
+    cancelButtonText: '取消',
+    type: 'warning',
+    draggable: true,
+    cancelButtonClass: 'default-button',
+    autofocus: false,
+  }).then(async () => {
+    await addCommon({
+      typeCode: props.commonEnum,
+      content: props.modelValue,
+    });
+    ElMessage.success('操作成功');
+    closeDialog();
+  }).catch(() => {});
 };
 // 打开弹窗
 const adviceFormRef = ref<RefType>();

+ 5 - 3
src/components/LogicFlow/PropertySetting/index.vue

@@ -87,7 +87,7 @@ const handleEmitsOther = (propertyName: string, propertyValue: any, type: any, i
 };
 
 // 表单属性keys
-const propertyKeys = [
+const propertyKeys:Array<string> = [
 	// 流程属性
 	'name',
 	'code',
@@ -103,8 +103,10 @@ const propertyKeys = [
 	'form',
 	'CountersignStartCode',
 	'CountersignEndCode',
-  'businessProperty'
-] as string[];
+  'businessProperty',
+  'components',
+  'pathPolicy'
+];
 // 去重后的key
 const propertyKeysSet = Array.from(new Set(propertyKeys));
 // 显示抽屉

+ 36 - 25
src/components/LogicFlow/PropertySetting/summary.vue

@@ -75,9 +75,14 @@
           <el-option v-for="item in businessPropertyOptions" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
-			<el-form-item label="会签" prop="countersignMode" :rules="[{ required: true, message: '请选择会签', trigger: 'change' }]">
-				<el-select v-model="form.countersignMode" class="w100" placeholder="请选择会签">
-					<el-option v-for="item in countersignModeList" :key="item.value" :label="item.label" :value="item.value" />
+      <el-form-item label="会签" prop="countersignMode" :rules="[{ required: true, message: '请选择会签', trigger: 'change' }]">
+        <el-select v-model="form.countersignMode" class="w100" placeholder="请选择会签">
+          <el-option v-for="item in countersignModeList" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+      </el-form-item>
+			<el-form-item label="节点过滤策略" prop="pathPolicy" :rules="[{ required: true, message: '请选择节点过滤策略', trigger: 'change' }]">
+				<el-select v-model="form.pathPolicy" class="w100" placeholder="请选择节点过滤策略">
+					<el-option v-for="item in pathPolicyOptions" :key="item.key" :label="item.value" :value="item.key" />
 				</el-select>
 			</el-form-item>
 			<el-form-item label="会签发起节点" prop="CountersignStartCode" :rules="[{ required: false, message: '请选择会签发起节点', trigger: 'change' }]">
@@ -85,13 +90,11 @@
 					<el-option v-for="item in nodesOptions" :key="item.id" :label="item.text.value" :value="item.id" />
 				</el-select>
 			</el-form-item>
-			<!-- <el-form-item label="结束" prop="CountersignEndCode"
-                :rules="[{ required: true, message: '请选择处理人', trigger: 'change' }]">
-                <el-select v-model="form.CountersignEndCode" class="w100" placeholder="请选择处理人" @change="changeEndCode">
-                    <el-option v-for="item in nodesOptions" :key="item.id" :label="item.text.value"
-                        :value="item.id" />
-                </el-select>
-            </el-form-item> -->
+      <el-form-item label="组件配置" prop="components" :rules="[{ required: false, message: '请选择组件配置', trigger: 'change' }]">
+        <el-checkbox-group v-model="form.components">
+          <el-checkbox :label="item.dicDataValue" v-for="item in stepPropertiesOptions" :key="item.id">{{item.dicDataName}}</el-checkbox>
+        </el-checkbox-group>
+      </el-form-item>
 		</el-form>
 	</div>
 </template>
@@ -115,23 +118,11 @@ const form = reactive<any>({
   businessProperty: '', // 节点属性
   countersignMode: '',  // 会签
   CountersignStartCode: '', // 会签发起节点
-  CountersignEndCode: ''  // 会签结束节点
+  CountersignEndCode: '',  // 会签结束节点
+  pathPolicy: '', // 节点过滤策略
 });
 const emits = defineEmits(['update:modelValue', 'countersignStartCode']); // 定义事件
-// 处理人
-const handlerTypeOptions = ref([] as any);
-// 下拉内容
-const selectList = ref([] as any);
-// 指定用户列表
-const userList = ref([] as any);
-// 会签
-const countersignModeList = ref([] as any);
-// 节点属性
-const businessPropertyOptions = ref([] as any);
-// 部门
-const orgData = ref([] as any);
-// 会签
-const itemName = ref('' as any);
+
 //
 const loading = ref(false); // 加载
 const nodesOptions = ref([] as any);  // 节点
@@ -143,6 +134,12 @@ watch(
 	{ deep: true }
 );
 // 选择处理人获取数据
+// 处理人
+const handlerTypeOptions = ref<EmptyArrayType>() as any;
+// 下拉内容
+const selectList = ref<EmptyArrayType>() as any;
+// 会签
+const itemName = ref<EmptyArrayType>();
 const changeOptions = (e: any) => {
 	form.handlerClassifiesOrgin = [];
 	form.handlerClassifies = '[]';
@@ -181,6 +178,8 @@ const checkChange = () => {
 	form.handlerClassifies = `${JSON.stringify(arr)}`;
 };
 // 远程搜索用户名称
+// 指定用户列表
+const userList = ref<EmptyArrayType>();
 const remoteMethod = (query: string) => {
 	if (query !== '') {
 		loading.value = true;
@@ -250,6 +249,16 @@ const chanStartCode = (val: string) => {
 		}
 	}
 };
+// 会签
+const countersignModeList = ref<EmptyArrayType>() as any;
+// 节点属性
+const businessPropertyOptions = ref<EmptyArrayType>() as any;
+// 部门
+const orgData = ref<EmptyArrayType>() as any;
+// 组件
+const stepPropertiesOptions = ref<EmptyArrayType>() as any;
+//
+const pathPolicyOptions = ref<EmptyArrayType>() as any;
 onMounted(async () => {
 	// 获取页面基础数据
 	const res: any = await baseData();
@@ -268,6 +277,8 @@ onMounted(async () => {
     value: item.key,
     label: item.value,
   }));
+  pathPolicyOptions.value = res.result?.pathPolicyOptions ?? [];
+  stepPropertiesOptions.value = res.result?.stepPropertiesOptions ?? [];
 	// 合并表单
 	Object.assign(form, props.modelValue);
 	if (form.handlerClassifies.includes('[')) {

+ 39 - 24
src/components/LogicFlow/PropertySetting/task.vue

@@ -75,19 +75,27 @@
           <el-option v-for="item in businessPropertyOptions" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
-			<el-form-item label="会签" prop="countersignMode" :rules="[{ required: true, message: '请选择会签', trigger: 'change' }]">
-				<el-select v-model="form.countersignMode" class="w100" placeholder="请选择会签">
-					<el-option v-for="item in countersignModeList" :key="item.value" :label="item.label" :value="item.value" />
-				</el-select>
-			</el-form-item>
+      <el-form-item label="会签" prop="countersignMode" :rules="[{ required: true, message: '请选择会签', trigger: 'change' }]">
+        <el-select v-model="form.countersignMode" class="w100" placeholder="请选择会签">
+          <el-option v-for="item in countersignModeList" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="节点过滤策略" prop="pathPolicy" :rules="[{ required: true, message: '请选择节点过滤策略', trigger: 'change' }]">
+        <el-select v-model="form.pathPolicy" class="w100" placeholder="请选择节点过滤策略">
+          <el-option v-for="item in pathPolicyOptions" :key="item.key" :label="item.value" :value="item.key" />
+        </el-select>
+      </el-form-item>
 			<el-form-item label="会签结束节点" prop="CountersignEndCode" v-if="form.CountersignEndCode">
 				<el-select v-model="form.CountersignEndCode" class="w100" disabled>
 					<el-option v-for="item in nodesOptions" :key="item.id" :label="item.text.value" :value="item.id" />
 				</el-select>
 			</el-form-item>
+      <el-form-item label="组件配置" prop="components" :rules="[{ required: false, message: '请选择组件配置', trigger: 'change' }]">
+        <el-checkbox-group v-model="form.components">
+          <el-checkbox :label="item.dicDataValue" v-for="item in stepPropertiesOptions" :key="item.id">{{item.dicDataName}}</el-checkbox>
+        </el-checkbox-group>
+      </el-form-item>
 		</el-form>
-		<!-- <el-alert title="确定要发起会签" type="warning" :closable="false" show-icon
-            v-if="form.handlerTypeOrigin && form.handlerTypeOrigin.length > 1" /> -->
 	</div>
 </template>
 <script lang="ts" setup name="flowNode">
@@ -109,25 +117,10 @@ const form = reactive<any>({
   businessProperty: '', // 节点属性
   countersignMode: '',  // 会签
   CountersignStartCode: '', // 会签开始节点
-  CountersignEndCode: ''  // 会签结束节点
+  CountersignEndCode: '',  // 会签结束节点
+  pathPolicy: '', // 节点过滤策略
 });
 const emits = defineEmits(['update:modelValue']); // 定义事件
-// 处理人
-const handlerTypeOptions = ref([] as any);
-// 下拉内容
-const selectList = ref([] as any);
-// 指定用户列表
-const userList = ref([] as any);
-// 会签
-const countersignModeList = ref([] as any);
-// 节点属性
-const businessPropertyOptions = ref([] as any);
-// 部门
-const orgData = ref([] as any);
-// 部门
-const nodesOptions = ref([] as any);
-// 会签
-const itemName = ref('' as any);
 const loading = ref(false); // 加载
 watch(
 	() => form,
@@ -137,6 +130,12 @@ watch(
 	{ deep: true }
 );
 // 选择处理人获取数据
+// 处理人
+const handlerTypeOptions = ref<EmptyArrayType>() as any;
+// 下拉内容
+const selectList = ref<EmptyArrayType>() as any;
+// 会签
+const itemName = ref<EmptyArrayType>();
 const changeOptions = (e: any) => {
 	form.handlerClassifiesOrgin = [];
 	form.handlerClassifies = '[]';
@@ -155,6 +154,8 @@ const changeOptions = (e: any) => {
 	}
 };
 // 远程搜索用户名称
+// 指定用户列表
+const userList = ref<EmptyArrayType>();
 const remoteMethod = (query: string) => {
   if (query !== '') {
     loading.value = true;
@@ -198,6 +199,18 @@ const getSelectValue = (query: any[]) => {
 	// 使用模板字符串
 	form.handlerClassifies = `${JSON.stringify(arr)}`;
 };
+// 会签
+const countersignModeList = ref<EmptyArrayType>() as any;
+// 节点属性
+const businessPropertyOptions = ref<EmptyArrayType>() as any;
+// 部门
+const orgData = ref<EmptyArrayType>() as any;
+// 组件
+const stepPropertiesOptions = ref<EmptyArrayType>() as any;
+//
+const pathPolicyOptions = ref<EmptyArrayType>() as any;
+// 会签结束节点
+const nodesOptions = ref([] as any);
 onMounted(async () => {
 	// 获取页面基础数据
 	const res: any = await baseData();
@@ -216,6 +229,8 @@ onMounted(async () => {
     value: item.key,
     label: item.value,
   }));
+  stepPropertiesOptions.value = res.result?.stepPropertiesOptions ?? [];
+  pathPolicyOptions.value = res.result?.pathPolicyOptions ?? [];
 	// 合并表单
 	Object.assign(form, props.modelValue);
 	if (form.handlerClassifies.includes('[')) {

+ 1 - 13
src/components/LogicFlow/index.vue

@@ -14,13 +14,6 @@
 							<el-input v-model="form.code" placeholder="请输入模板编码" clearable></el-input>
 						</el-form-item>
 					</el-col>
-<!--					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">-->
-<!--						<el-form-item label="业务模块" prop="moduleCode" :rules="[{ required: true, message: '请选择业务模块', trigger: 'change' }]">-->
-<!--							<el-select v-model="form.moduleCode" class="w100" placeholder="请选择业务模块" @change="changeModule">-->
-<!--								<el-option v-for="item in moduleList" :key="item.key" :label="item.value" :value="item.key" />-->
-<!--							</el-select>-->
-<!--						</el-form-item>-->
-<!--					</el-col>-->
 				</el-row>
 			</el-form>
 			<!-- 流程图画布内容 -->
@@ -31,11 +24,6 @@
 				</el-radio-group> -->
 				<div class="w100 h100" ref="lfElRef" style="height: 100%"></div>
 			</div>
-			<!-- 操作按钮 -->
-			<!-- <div class="mt10">
-        <el-button @click="saveOnly" class="default-button">暂存</el-button>
-        <el-button @click="release" type="primary">发布</el-button>
-      </div> -->
 			<!-- 节点内容弹窗 -->
 			<PropertySetting ref="propertySettingRef" v-model="formData" @change="handlePropertyChange" @changeOther="handlePropertyChangeOther" />
 		</div>
@@ -63,7 +51,7 @@ const emits = defineEmits(['update:modelValue', 'on-save']);  // 定义组件事
 // 提交表单数据
 let formData = reactive({} as any);
 // 外层表单
-let form = reactive<any>({} as any);
+let form = reactive<any>({});
 const ruleFormRef = ref<RefType>();
 // 定义组件接收的参数
 const props = defineProps({

+ 392 - 81
src/components/ProcessApproval/index.vue

@@ -3,24 +3,175 @@
     <el-dialog
         v-model="state.dialogVisible"
         draggable
-        :title="state.title + '流程'"
+        :title="state.dialogTitle"
         ref="dialogRef"
         @mouseup="mouseup"
         :style="'transform: ' + state.transform + ';'"
         append-to-body
         destroy-on-close
-        @opened="opened"
+        :before-close="handleClose"
     >
-      <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-steps :active="activeStep" align-center finish-status="success" class="mb20" v-if="showStepsArr.includes(state.processType)">
+        <el-step title="业务表单" />
+        <el-step title="流程表单"/>
+      </el-steps>
+
+      <div v-show="activeStep === 0">
+        <el-form :model="state.delayForm" label-width="110px" ref="delayFormRef" v-if="state.processType === '延期申请'">
+          <el-row :gutter="10">
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="工单编号"> {{ state.orderDetail.no }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="工单标题"> {{ state.orderDetail.title }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请人"> {{ userInfos.name }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请部门"> {{ userInfos.orgName }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请时间"> {{ formatDate(Date(), 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="当前期满时间"> {{ formatDate(state.orderDetail.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
+              <el-form-item label="延期申请数量" >
+                <el-row :gutter="10">
+                  <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                    <el-form-item label="" prop="number" :rules="[{ required: true, message: '请输入延期申请数量', trigger: 'blur' }]">
+                      <el-input-number placeholder="延期申请数量" v-model="state.delayForm.number" controls-position="right" class="w100"></el-input-number>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                    <el-form-item label="" label-width="0" prop="unit" :rules="[{ required: true, message: '请选择延期申请单位', trigger: 'change' }]">
+                      <el-select v-model="state.delayForm.unit" placeholder="延期申请单位" clearable>
+                        <el-option v-for="item in acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="延期后期满时间"> {{ state.delayForm.title }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+              <el-form-item label="申请理由" prop="content" :rules="[{ required: true, message: '请填写延期申请理由', trigger: 'blur' }]">
+                <common-advice
+                    @chooseAdvice="chooseAdviceDelay"
+                    v-model="state.delayForm.content"
+                    placeholder="请填写延期申请理由"
+                    :loading="state.loading"
+                    :commonEnum="commonEnum.Delay"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+              <el-form-item label="附件">
+                <annex-list name="延期附件"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <el-form :model="state.discernForm" label-width="110px" ref="discernFormRef" v-if="state.processType === '甄别申请'">
+          <el-row :gutter="10">
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="工单编号"> {{ state.orderDetail.no }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="工单标题"> {{ state.orderDetail.title }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请人"> {{ userInfos.name }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请部门"> {{ userInfos.orgName }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请时间"> {{ formatDate(Date(), 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请类型" prop="unit" :rules="[{ required: true, message: '请选择申请类型', trigger: 'change' }]">
+                <el-select v-model="state.discernForm.unit" placeholder="请选择申请类型" clearable class="w100">
+                  <el-option v-for="item in acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+              <el-form-item label="申请理由" prop="content" :rules="[{ required: true, message: '请填写延期申请理由', trigger: 'blur' }]">
+                <common-advice
+                    @chooseAdvice="chooseAdviceDiscern"
+                    v-model="state.discernForm.content"
+                    placeholder="请填写甄别申请理由"
+                    :loading="state.loading"
+                    :commonEnum="commonEnum.Discriminate"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+              <el-form-item label="附件">
+                <annex-list name="甄别附件"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <el-form :model="state.redoForm" label-width="110px" ref="redoFormRef" v-if="state.processType === '工单重办'">
+          <el-row :gutter="10">
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="工单编号"> {{ state.orderDetail.no }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="工单标题"> {{ state.orderDetail.title }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请人"> {{ userInfos.name }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请部门"> {{ userInfos.orgName }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="申请时间"> {{ formatDate(Date(), 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item label="重办理由" prop="unit" :rules="[{ required: true, message: '请选择重办理由', trigger: 'change' }]">
+                <el-select v-model="state.redoForm.unit" placeholder="请选择重办理由" clearable class="w100">
+                  <el-option v-for="item in acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+              <el-form-item label="重办意见" prop="content" :rules="[{ required: true, message: '请填写重办意见', trigger: 'blur' }]">
+                <common-advice
+                    @chooseAdvice="chooseAdviceRedo"
+                    v-model="state.redoForm.content"
+                    placeholder="请填写重办意见"
+                    :loading="state.loading"
+                    :commonEnum="commonEnum.OrderCirculation"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+              <el-form-item label="附件">
+                <annex-list name="办理附件"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <el-form :model="state.ruleForm" label-width="100px" ref="ruleFormRef" v-show="activeStep === 1">
+        <el-row :gutter="10">
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <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-option v-for="item in state.nextStepOptions" :key="item.code" :label="item.name" :value="item.code" />
               </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-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item label="处理人" prop="nextHandlers" :rules="[{ required: false, message: '请选择处理人', trigger: 'change' }]">
               <el-select
                   v-model="state.ruleForm.nextHandlers"
@@ -29,17 +180,17 @@
                   placeholder="请选择处理人"
                   class="w100"
                   @change="selectHandlers"
-                  value-key="key"
+                  value-key="id"
                   clearable
               >
-                <el-option v-for="item in state.handlerOptions" :key="item.key" :label="item.value" :value="item" />
+                <el-option v-for="item in state.handlerOptions" :key="item.id" :label="item.name" :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-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="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-option v-for="item in state.handlerMainOptions" :key="item.id" :label="item.name" :value="item.id" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -49,7 +200,7 @@
             </el-form-item>
           </el-col> -->
           <!--  办理流程展示期满时间  -->
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="['next'].includes(state.processType)">
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item label="期满时间" prop="expiredTime" :rules="[{ required: true, message: '请选择期满时间', trigger: 'change' }]">
               <el-date-picker
                   v-model="state.ruleForm.expiredTime"
@@ -61,7 +212,7 @@
             </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-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item
                 label="是否发起会签"
                 prop="isStartCountersign"
@@ -70,20 +221,85 @@
               <el-switch v-model="state.ruleForm.isStartCountersign" inline-prompt active-text="是" inactive-text="否" />
             </el-form-item>
           </el-col>
+          <!--  汇总节点需要输入  -->
+          <template v-if="isCollect">
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item
+                  label="办理人姓名"
+                  prop="name"
+                  :rules="[{ required: true, message: '请填写办理人姓名', trigger: 'blur' }]"
+              >
+                <el-input v-model="state.ruleForm.name" placeholder="请填写办理人姓名" clearable> </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item
+                  label="办理人电话"
+                  prop="phone"
+                  :rules="[{ required: true, message: '请填写办理人电话', trigger: 'blur' }]"
+              >
+                <el-input v-model="state.ruleForm.phone" placeholder="请填写办理人电话" clearable> </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item
+                  label="办理人姓名"
+                  prop="name"
+                  :rules="[{ required: true, message: '请填写办理人姓名', trigger: 'blur' }]"
+              >
+                <el-input v-model="state.ruleForm.name" placeholder="请填写办理人姓名" clearable> </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item
+                  label="沟通方式"
+                  prop="way"
+                  :rules="[{ required: true, message: '请选择沟通方式', trigger: 'change' }]"
+              >
+                <el-select v-model="state.ruleForm.way" placeholder="请选择沟通方式" class="w100" filterable>
+                  <el-option v-for="item in state.handlerMainOptions" :key="item.id" :label="item.name" :value="item.id" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+              <el-form-item
+                  label="沟通时间"
+                  prop="time"
+                  :rules="[{ required: true, message: '请选择沟通时间', trigger: 'change' }]"
+              >
+                <el-date-picker
+                    v-model="state.ruleForm.time"
+                    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">
+              <el-form-item
+                  label="沟通地点"
+                  prop="address"
+                  :rules="[{ required: true, message: '请填写沟通地点', trigger: 'blur' }]"
+              >
+                <el-input v-model="state.ruleForm.name" placeholder="请填写沟通地点" clearable> </el-input>
+              </el-form-item>
+            </el-col>
+          </template>
           <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' }]">
+            <el-form-item :label="state.inputPlaceholder" prop="opinion" :rules="[{ required: true, message: `请填写${state.inputPlaceholder}`, trigger: 'blur' }]">
               <common-advice
                   @chooseAdvice="chooseAdvice"
                   v-model="state.ruleForm.opinion"
-                  placeholder="请填写常用意见"
+                  :placeholder="'请填写'+state.inputPlaceholder"
                   :loading="state.loading"
-                  :commonEnum="state.commonEnum"
+                  :commonEnum="commonEnum.OrderCirculation"
               />
             </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>
+              <annex-list name="办理附件"></annex-list>
             </el-form-item>
           </el-col>
         </el-row>
@@ -91,7 +307,9 @@
       <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>
+          <el-button class="default-button" @click="onPrevious" v-if="activeStep === 1 && showStepsArr.includes(state.processType)">上一步</el-button>
+          <el-button class="default-button" @click="onNext" v-if="activeStep === 0 && showStepsArr.includes(state.processType)">下一步</el-button>
+					<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading" v-if="activeStep === 1">提 交</el-button>
 				</span>
       </template>
     </el-dialog>
@@ -99,11 +317,15 @@
 </template>
 
 <script setup lang="ts" name="processApproval">
-import { defineAsyncComponent, reactive, ref, computed } from 'vue';
+import {defineAsyncComponent, reactive, ref, computed, watch, watchEffect} 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';
+import {formatDate} from "/@/utils/formatTime";
+import {useUserInfo} from "/@/stores/userInfo";
+import {storeToRefs} from "pinia";
+import {commonEnum} from "/@/utils/constants";
 
 // 引入组件
 const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
@@ -113,8 +335,7 @@ const emit = defineEmits(['orderProcessSuccess', 'orderProcessFailed']);
 // 定义变量内容
 const state = reactive<any>({
   dialogVisible: false, // 弹窗显示隐藏
-  title: '提交',  // 弹窗标题
-  ruleForm: {
+  ruleForm: { //流程表单
     acceptSms: false, // 是否接收短信
     opinion: '', // 意见
     nextHandlers: [], // 下一节点处理人
@@ -122,6 +343,17 @@ const state = reactive<any>({
     expiredTime: '', //期满时间
     isStartCountersign: false, // 是否发起会签
   },
+  delayForm:{ //延期申请表单
+    number:0,// 延期申请数量
+    content: '', // 延期申请理由
+    unit: '', // 延期申请单位
+  },
+  discernForm:{// 甄别表单
+    content: '', // 甄别理由
+  },
+  redoForm:{// 重办表单
+    content: '', // 重办理由
+  },
   nextStepOptions: [], // 下一节点
   handlerOptions: [], // 处理人
   transform: 'translate(0px, 0px)', // 滚动条位置
@@ -129,102 +361,153 @@ const state = reactive<any>({
   loading: false, // 提交按钮loading
   processType: 'next',  // 流程状态
   workflowId: '', // 流程id
-  commonEnum: '', // 常用意见类型
   handlerClassifies: [], //撤回处理人
   handlerMainOptions: [], // 主办人
   handleId: '', // 流程处理ID
+  dialogTitle: '',  // 弹窗标题
+  annexName: '', // 附件标题
+  inputPlaceholder: '', // 意见提示
+  orderDetail: {}, // 工单详情
 });
 const ruleFormRef = ref<RefType>(); //表单组件
+const storesUserInfo = useUserInfo();
+const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
+const acceptTypeOptions = [
+  {
+    key: '天',
+    value: '天',
+  },
+  {
+    key: '小时',
+    value: '小时',
+  },
+  {
+    key: '分钟',
+    value: '分钟',
+  },
+];// 延期申请单位
+const showStepsArr = ['延期申请','甄别申请','工单重办']; // 显示步骤条的流程
+const ifLength1 = (id:string|number)=>{// 下一节点是否只有一个 默认选中第一个
+  state.ruleForm.nextStepCode = state.nextStepOptions[0].code;
+  getNextStepOption(id, state.nextStepOptions[0].code);
+  isCollect.value = state.nextStepOptions[0].stepType === 3;
+}
 // 打开弹窗
 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 ?? '提交流程'; // 流程标题
+  console.log(val)
+  const { id, processType,extra,orderDetail } = val;
+  state.ruleForm.workflowId = state.workflowId = id ?? ''; // 流程id
+  state.processType = processType ?? '办理流程'; // 业务类型
+  state.orderDetail = orderDetail ?? {}; // 工单详情
+  const {dialogTitle,inputPlaceholder,annexName} = extra ?? {};
+  state.dialogTitle = dialogTitle ?? '提交流程'; // 流程标题
+  state.annexName = annexName ?? '办理附件'; // 附件标题
+  state.inputPlaceholder = inputPlaceholder ?? '办理意见'; // 意见提示
   let res: any = {};
   switch (state.processType) {
-    case 'start': //开始流程
+    case '工单发起': //开始流程
       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);
-      }
+      ifLength1(res.result.id);
       break;
-    case 'recall': // 撤回流程
+    case '工单撤回': // 撤回流程
       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);
-      }
+      ifLength1(res.result.id);
       break;
-    case 'return': // 退回流程
+    case '延期申请': // 延期申请
+      res = await OrderFlowParams(); //获取开启流程参数
+      state.nextStepOptions = res.result.steps;
+      state.handleId = res.result.id;
+      ifLength1(res.result.id);
       break;
-    case 'next': // 默认下一流程
-      res = await workflowNextSteps(state.workflowId);
+    case '甄别申请': // 甄别申请
+      res = await OrderFlowParams(); //获取开启流程参数
       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);
-      }
+      ifLength1(res.result.id);
       break;
-    case 'delay': // 延期
-      res = await workflowNextSteps(state.workflowId);
+    case '工单重办': // 甄别申请
+      res = await OrderFlowParams(); //获取开启流程参数
       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);
-      }
+      ifLength1(res.result.id);
+      break;
+    case '工单退回': // 退回流程
       break;
-    case 'supervise': // 督办
+    case '工单办理': // 默认下一流程 工单办理
       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);
-      }
+      ifLength1(res.result.id);
       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);
-      }
+      ifLength1(res.result.id);
       break;
   }
   state.dialogVisible = true;
 };
-// 打开弹窗清空表单
-const opened = () => {
-  ruleFormRef.value?.clearValidate();
-  ruleFormRef.value?.resetFields();
+const isCollect = ref(false); // 是否是汇总节点(汇总需要填入其他参数)
+// 上一部
+const onPrevious = () => {
+  activeStep.value = 0;
+};
+const delayFormRef = ref<RefType>(); //延期申请表单组件
+const discernFormRef = ref<RefType>(); //甄别申请表单组件
+const redoFormRef = ref<RefType>(); //重办表单组件
+// 下一步
+const onNext = () => {
+  switch (state.processType) {
+    case '延期申请':
+      delayFormRef.value?.validate((valid: boolean) => {
+        if (!valid) return;
+        activeStep.value = 1;
+      });
+      break;
+    case '甄别申请': // 甄别申请
+      discernFormRef.value?.validate((valid: boolean) => {
+        if (!valid) return;
+        activeStep.value = 1;
+      });
+      break;
+    case '工单重办':
+      redoFormRef.value?.validate((valid: boolean) => {
+        if (!valid) return;
+        activeStep.value = 1;
+      });
+      break;
+    default: // 默认下一流程
+      activeStep.value = 1;
+      break;
+  }
 };
+const activeStep = ref(0); //步骤条
+watchEffect(()=>{
+  if(state.dialogVisible){
+    activeStep.value = showStepsArr.includes(state.processType) ? 0 : 1;
+  }
+})
 // 流程选择下一环节
 const selectNextStep = (val: any) => {
-  ruleFormRef.value?.resetFields('nextHandlers');
-  ruleFormRef.value?.resetFields('nextMainHandler');
+  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);
+  next = state.nextStepOptions.find((item: any) => item.code === val);
+  getNextStepOption(state.handleId, next.code);
+  isCollect.value = next.stepType === 3;
 };
 // 查询流程下一节点参数
 const getNextStepOption = async (DefineId: string, Code: string) => {
   try {
     const res: any = await workflowStepOptions({ DefineId, Code });
-    state.handlerOptions = res.result ?? [];
+    state.handlerOptions = res.result.handlers ?? [];
   } catch (error) {
     console.log(error);
   }
@@ -232,6 +515,9 @@ const getNextStepOption = async (DefineId: string, Code: string) => {
 // 选择处理人
 const selectHandlers = () => {
   ruleFormRef.value?.resetFields('nextMainHandler');
+  if(state.ruleForm.nextHandlers.length > 1){
+    state.ruleForm.nextMainHandler = state.ruleForm.nextHandlers[0].id;
+  }
 };
 const showMainHandler = computed(() => {
   return state.ruleForm.nextHandlers.length > 1;
@@ -248,15 +534,37 @@ const mouseup = () => {
 // 关闭弹窗
 const closeDialog = () => {
   state.dialogVisible = false;
+  delayFormRef.value?.clearValidate();
+  delayFormRef.value?.resetFields();
+  discernFormRef.value?.clearValidate();
+  discernFormRef.value?.resetFields();
+  ruleFormRef.value.clearValidate();
+  ruleFormRef.value.resetFields();
 };
 // 取消
 const onCancel = () => {
   closeDialog();
 };
-// 选择常用意见 填入填写框
+const handleClose = (done: any) => {
+  closeDialog();
+  done();
+};
+// 选择常用意见 填入填写框 办理
 const chooseAdvice = (item: any) => {
   state.ruleForm.opinion += item.content;
 };
+// 选择常用意见 填入填写框 延期
+const chooseAdviceDelay = (item: any) => {
+  state.delayForm.content += item.content;
+};
+// 选择常用意见 填入填写框 甄别
+const chooseAdviceDiscern = (item: any) => {
+  state.discernForm.content += item.content;
+};
+// 选择常用意见 填入填写框 重办
+const chooseAdviceRedo = (item: any) => {
+  state.redoForm.content += item.content;
+};
 // 提交
 const onSubmit = (formEl: FormInstance | undefined) => {
   if (!formEl) return;
@@ -275,18 +583,12 @@ const onSubmit = (formEl: FormInstance | undefined) => {
           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': //开始流程
+            case '工单发起': //开始流程
               orderStartFlow(state.workflowId, submitObj)
                   .then(() => {
                     ElMessage.success('操作成功');
@@ -299,7 +601,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
                     state.dialogVisible = false;
                   });
               break;
-            case 'recall': // 撤回流程
+            case '工单撤回': // 撤回流程
               workflowRecall(submitObj)
                   .then(() => {
                     ElMessage.success('操作成功');
@@ -313,7 +615,16 @@ const onSubmit = (formEl: FormInstance | undefined) => {
                     emit('orderProcessFailed');
                   });
               break;
-            case 'return': // 退回流程
+            case '工单延期': // 撤回流程
+
+              break;
+            case '工单甄别': // 撤回流程
+
+              break;
+            case '工单重办': // 撤回流程
+
+              break;
+            case '工单退回': // 退回流程
               workflowPrevious(submitObj)
                   .then(() => {
                     ElMessage.success('操作成功');
@@ -327,7 +638,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
                     emit('orderProcessFailed');
                   });
               break;
-            case 'next': // 默认下一流程
+            case '工单办理': // 默认下一流程
               workflowNext(submitObj)
                   .then(() => {
                     ElMessage.success('操作成功');

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

@@ -408,7 +408,7 @@ import { VoiceInterfaceObject } from '/@/utils/PhoneScript';
 import { WebsocketInterface } from '/@/utils/websocket';
 import signalR from '/@/utils/signalR';
 import { Local } from '/@/utils/storage';
-import {getGroup} from '/src/api/tels/group';
+import {getGroup} from '/@/api/tels/group';
 
 // 引入组件
 const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见

+ 9 - 7
src/stores/userInfo.ts

@@ -19,6 +19,7 @@ export const useUserInfo = defineStore('userInfo', {
 			defaultTelNo: '', // 默认分机号
 			token: '',
 			showTelControl: false, // 是否展示坐席操作电话面板
+			orgName:'', // 组织名称
 		},
 	}),
 	actions: {
@@ -33,18 +34,18 @@ export const useUserInfo = defineStore('userInfo', {
 			try {
 				// 个人信息
 				let userInfo: any = await getUserInfo();
-				this.userInfos.name = userInfo.result.name;
-				this.userInfos.phoneNo = userInfo.result.phoneNo;
-				this.userInfos.staffNo = userInfo.result.staffNo;
-				this.userInfos.defaultTelNo = userInfo.result.defaultTelNo;
-				this.userInfos.id = userInfo.result.id;
-				this.userInfos.token = Cookie.get('token');
+				this.userInfos.name = userInfo.result.name ?? '默认名称';
+				this.userInfos.phoneNo = userInfo.result.phoneNo ?? '';
+				this.userInfos.staffNo = userInfo.result.staffNo ?? '';
+				this.userInfos.defaultTelNo = userInfo.result.defaultTelNo ?? '';
+				this.userInfos.id = userInfo.result.id ?? '';
+				this.userInfos.token = Cookie.get('token') ?? '';
 				this.userInfos.photo = "";
+				this.userInfos.orgName = userInfo.result.organization?.orgName ?? '';
 				//授权按钮
 				this.userInfos.showTelControl = buttons.includes('public:seat:panel'); // 查询是否有展示面板权限
 				this.userInfos.authBtnList = buttons;
 				Session.set('userInfo', this.userInfos);
-
 				return this.userInfos;
 			} catch (error) {
 				this.userInfos = {
@@ -57,6 +58,7 @@ export const useUserInfo = defineStore('userInfo', {
 					defaultTelNo: '', // 默认分机号
 					token: '',
 					showTelControl: false, // 是否展示坐席操作电话面板
+					orgName:'', // 组织名称
 				}
 				Session.set('userInfo', this.userInfos);
 				return this.userInfos;

+ 0 - 4
src/theme/element.scss

@@ -196,10 +196,6 @@
 
 /* Steps 步骤条
 ------------------------------- */
-.el-step__icon-inner {
-	font-size: 30px !important;
-	font-weight: 400 !important;
-}
 .el-step__title {
 	font-size: 14px;
 }

+ 1 - 0
src/types/pinia.d.ts

@@ -14,6 +14,7 @@ declare interface UserInfosState {
 	deletionTime?: string;
 	isDeleted?: boolean;
 	showTelControl: boolean;
+	orgName: string;
 }
 declare interface UserInfosStates {
 	userInfos: UserInfosState;

+ 7 - 3
src/utils/PhoneScript.ts

@@ -82,14 +82,18 @@ export const VoiceInterfaceObject: any = {
 			// 来电才展示弹屏
 			// 跳转到录入工单页面
 			router.push({
-				name: 'orderAdd',
-				params: {
+				name: 'orderAccept',
+				state: {
 					createBy: 'tel',
 					telNo: DialInfo.fromTel,
 					callId: DialInfo.telGuid,
 					transfer: DialInfo.transfer,
-					tagsViewName: '工单受理',
+					telArea: DialInfo.telArea,
 				},
+				params:{
+					callId: DialInfo.telGuid,
+					tagsViewName:'工单受理',
+				}
 			})
 		}
 	},

+ 9 - 1
src/views/business/delay/backlog/index.vue

@@ -191,6 +191,8 @@
 		<order-delay ref="OrderDelayRef" @updateList="queryList" />
     <!-- 审核记录 -->
     <audit-record ref="auditRecordRef" />
+    <!--  流程审批  -->
+    <process-approval ref="processApprovalRef" @orderProcessSuccess="queryList" />
 	</div>
 </template>
 <script setup lang="ts" name="orderDelayBacklog">
@@ -206,6 +208,7 @@ 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 AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));  // 流程明细
+const ProcessApproval = defineAsyncComponent(() => import('/@/components/ProcessApproval/index.vue'));  // 流程审批
 
 // 定义变量内容
 const state = reactive(<any>{
@@ -342,8 +345,13 @@ const processDetail = (row:any) => {
   auditRecordRef.value.openDialog(params);
 };
 // 延期审批
+const processApprovalRef = ref<RefType>();  // 流程审批ref
 const approve = (row: any) => {
-
+  const params = {
+    title: `延期审批 (${row.title})`,
+    ...row,
+  };
+  processApprovalRef.value.openDialog(params);
 };
 // 表格多选
 const multipleTableRef = ref<RefType>();

+ 35 - 49
src/views/business/delay/components/Order-delay.vue

@@ -1,8 +1,8 @@
 <template>
-	<el-dialog v-model="state.dialogVisible" draggable title="延期申请" ref="dialogRef" width="80%" append-to-body destroy-on-close>
+	<el-dialog v-model="state.dialogVisible" draggable title="延期申请" ref="dialogRef" width="50%" append-to-body destroy-on-close>
 		<div class="collapse-container pb1">
-			<el-form label-width="110px" ref="ruleFormRef">
-				<el-row :gutter="35">
+			<el-form label-width="110px" ref="ruleFormRef" :model="state.ruleForm">
+				<el-row :gutter="10">
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="工单编号"> {{ state.ruleForm.no }} </el-form-item>
 					</el-col>
@@ -10,44 +10,45 @@
 						<el-form-item label="工单标题"> {{ state.ruleForm.title }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="申请人"> {{ state.ruleForm.title }} </el-form-item>
+						<el-form-item label="申请人"> {{ userInfos.name }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="申请部门"> {{ state.ruleForm.title }} </el-form-item>
+						<el-form-item label="申请部门"> {{ userInfos.orgName }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="申请时间"> {{ state.ruleForm.title }} </el-form-item>
+						<el-form-item label="申请时间"> {{ formatDate(Date(), 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="当前期满时间"> {{ state.ruleForm.title }} </el-form-item>
+						<el-form-item label="当前期满时间"> {{ formatDate(state.ruleForm.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-row :gutter="10">
-							<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-								<el-form-item label="延期申请数量" prop="handleResult" :rules="[{ required: true, message: '请输入延期申请数量', trigger: 'blur' }]">
-									<el-input placeholder="请输入延期申请数量" v-model="state.ruleForm.handleResult"></el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-								<el-form-item label="" label-width="0" prop="title" :rules="[{ required: true, message: '请选择延期申请单位', trigger: 'change' }]">
-									<el-select v-model="state.ruleForm.title" placeholder="请选择延期申请单位" clearable class="w100">
-										<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-									</el-select>
-								</el-form-item>
-							</el-col>
-						</el-row>
-						<el-form-item label="当前期满时间"> {{ state.ruleForm.title }} </el-form-item>
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
+            <el-form-item label="延期申请数量" >
+              <el-row :gutter="10">
+                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="" prop="handleResult" :rules="[{ required: true, message: '请输入延期申请数量', trigger: 'blur' }]">
+                    <el-input-number placeholder="延期申请数量" v-model="state.ruleForm.handleResult" controls-position="right" class="w100"></el-input-number>
+                  </el-form-item>
+                </el-col>
+                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="" label-width="0" prop="unit" :rules="[{ required: true, message: '请选择延期申请单位', trigger: 'change' }]">
+                    <el-select v-model="state.ruleForm.unit" placeholder="延期申请单位" clearable>
+                      <el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="延期后期满时间"> {{ state.ruleForm.title }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="申请理由" prop="handleResult" :rules="[{ required: true, message: '请填写申请理由', trigger: 'blur' }]">
+						<el-form-item label="申请理由" prop="handleResult" :rules="[{ required: true, message: '请填写延期申请理由', trigger: 'blur' }]">
 							<el-input
 								type="textarea"
 								:autosize="{ minRows: 6, maxRows: 10 }"
 								maxlength="2000"
-								placeholder="请填写申请理由"
+								placeholder="请填写延期申请理由"
 								v-model="state.ruleForm.handleResult"
 							></el-input>
 						</el-form-item>
@@ -72,6 +73,9 @@
 import { defineAsyncComponent, reactive, ref } from 'vue';
 import { ElMessageBox, FormInstance } from 'element-plus';
 import { VoiceInterfaceObject } from '/@/utils/PhoneScript';
+import { formatDate } from '/@/utils/formatTime';
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
 
 // 引入组件
 const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
@@ -83,32 +87,13 @@ const state = reactive<any>({
 	collapseArr: ['1', '2'], // 折叠面板
 	dialogVisible: false, // 是否显示弹窗
 	loading: false, // 是否显示加载
-	ruleForm: {
-		// 表单数据
-		title: '标题内容',
-		content: '内容内容内容内容内容内容内容内容内容内容内容内容内容',
-		result: '办理结果内容',
-		handleResult: '办理结果内容',
-		radio1: '1',
-		departmentList: [
-			{
-				departmentName: '部门名称1',
-				radio: '1',
-			},
-			{
-				departmentName: '部门名称2',
-				radio: '1',
-			},
-			{
-				departmentName: '部门名称3',
-				radio: '1',
-			},
-		],
-	},
+	ruleForm: {},
 });
-const ruleFormRef = ref<RefType>();
+const storesUserInfo = useUserInfo();
+const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
 // 打开弹窗
-const openDialog = () => {
+const openDialog = (value:any) => {
+  state.ruleForm = value ?? {};
 	state.loading = false;
 	state.dialogVisible = true;
 };
@@ -127,6 +112,7 @@ const onCall = () => {
 	VoiceInterfaceObject.DialOut(state.ruleForm.fromPhone);
 };
 // 提交
+const ruleFormRef = ref<RefType>();
 const onSubmit = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {

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

@@ -190,8 +190,7 @@
 		</el-card>
 		<!-- 工单详情 -->
 		<order-detail ref="OrderDetailRef" @updateList="queryList" />
-		<!--  工单延期  -->
-		<order-delay ref="OrderDelayRef" @updateList="queryList" />
+
 	</div>
 </template>
 <script setup lang="ts" name="orderDelay">
@@ -205,7 +204,6 @@ 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 state = reactive(<any>{
@@ -314,10 +312,9 @@ const onExport = () => {
 	console.log('导出');
 };
 const OrderDelayRef = ref<RefType>();
-// 查看延期详情
+// 工单详情
 const onOrderDetail = (row: any) => {
-	console.log(row, '查看延期详情');
-	OrderDelayRef.value.openDialog();
+  OrderDetailRef.value.openDialog(row);
 };
 // 流程明细
 const processDetail = () => {};

+ 24 - 4
src/views/business/discern/apply/index.vue

@@ -174,18 +174,22 @@
 				@pagination="queryList"
 			/>
 		</el-card>
+
+    <!--  流程审批  -->
+    <process-approval ref="processApprovalRef" @orderProcessSuccess="orderProcessSuccess" />
 	</div>
 </template>
 <script setup lang="ts" name="orderDiscernApply">
-import { onMounted, reactive, ref } from 'vue';
+import {defineAsyncComponent, onMounted, reactive, ref} from 'vue';
 import { hotSpotType, listBaseData } from '/@/api/business/order';
 import { ElButton, ElMessage, FormInstance } from 'element-plus';
 import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
-import { shortcuts } from '/@/utils/constants';
+import {commonEnum, shortcuts} from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 import { useRouter } from 'vue-router';
 
+const ProcessApproval = defineAsyncComponent(() => import('/@/components/ProcessApproval/index.vue'));  // 流程审批
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const searchCol = ref(true); // 是否显示搜索栏
@@ -303,13 +307,29 @@ const onExport = () => {
 	console.log('导出');
 };
 // 提交甄别申请
-const submitDiscern = (row: any) => {
-	console.log('提交甄别申请');
+const processApprovalRef = ref<RefType>();
+const params = (row: any) => {
+  const request = {
+    id: row.id,
+    commonEnum: commonEnum.Discriminate,
+    processType: '甄别申请',
+    orderDetail:row,
+    extra:{
+      dialogTitle: '甄别申请',
+      inputPlaceholder:'办理意见',
+      annexName:"甄别附件",
+    }
+  }
+  processApprovalRef.value.openDialog(params);
 };
 onMounted(async () => {
 	await getBaseData();
 	queryList();
 });
+// 流程提交成功
+const orderProcessSuccess = () => {
+  queryList();
+};
 </script>
 
 <style scoped lang="scss">

+ 1 - 1
src/views/business/discern/backlog/index.vue

@@ -163,7 +163,7 @@
         <el-table-column prop="acceptTypeText" label="甄别申请原因" show-overflow-tooltip></el-table-column>
 				<el-table-column label="操作" width="150" fixed="right" align="center">
 					<template #default="{ row }">
-						<el-button link type="primary" @click="approve(row)" title="查看甄别详情" v-auth="'business:discern:backlog:approve'"> 甄别审批 </el-button>
+						<el-button link type="primary" @click="approve(row)" title="甄别审批" v-auth="'business:discern:backlog:approve'"> 甄别审批 </el-button>
 					</template>
 				</el-table-column>
 				<template #empty>

+ 33 - 38
src/views/business/followUp/component/Follow-up-detail.vue

@@ -20,32 +20,32 @@
           <div class="collapse-container pb1">
             <el-form label-width="100px">
               <el-row :gutter="10">
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-                  <el-form-item label="工单编号"> {{ state.ruleForm.channelText }} </el-form-item>
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="工单编号" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-                  <el-form-item label="受理时间"> {{ state.ruleForm.channelText }} </el-form-item>
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="受理时间" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-                  <el-form-item label="受理人"> {{ state.ruleForm.channelText }} </el-form-item>
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="受理人" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-                  <el-form-item label="来源方式"> {{ state.ruleForm.channelText }} </el-form-item>
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="来源方式" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-                  <el-form-item label="受理类型"> {{ state.ruleForm.channelText }} </el-form-item>
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="受理类型" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-                  <el-form-item label="热点分类"> {{ state.ruleForm.channelText }} </el-form-item>
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="热点分类" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
                 <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-                  <el-form-item label="工单标题"> {{ state.ruleForm.channelText }} </el-form-item>
+                  <el-form-item label="工单标题" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
                 <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-                  <el-form-item label="工单内容"> {{ state.ruleForm.channelText }} </el-form-item>
+                  <el-form-item label="工单内容" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
                 <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-                  <el-form-item label="办理结果"> {{ state.ruleForm.channelText }} </el-form-item>
+                  <el-form-item label="办理结果" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
               </el-row>
             </el-form>
@@ -60,12 +60,13 @@
           <div class="collapse-container pb1">
             <el-form label-width="100px">
               <el-row :gutter="10">
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                   <el-form-item label="来电人姓名"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-                  <el-form-item label="来电号码">
-                    {{ state.ruleForm.channelText }} <el-button link type="primary" class="ml5" title="录音文件" @click="onCall">录音文件</el-button>
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="来电号码" class="mb5">
+                    {{ state.ruleForm.channelText }}
+                    <el-button plain title="查看录音文件" size="small" type="primary" class="ml8" @click="onCall">录音文件</el-button>
                     <!-- <el-popover :width="480" trigger="hover">
                         <template #reference>
                           <el-button link type="primary" class="ml5" title="播放录音"><SvgIcon name="ele-Headset" size="16px" /></el-button>
@@ -74,22 +75,22 @@
                       </el-popover> -->
                   </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-                  <el-form-item label="来电人性别"> {{ state.ruleForm.channelText }} </el-form-item>
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+                  <el-form-item label="来电人性别" class="mb5"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                   <el-form-item label="号码归属地"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                   <el-form-item label="邮箱"> {{ state.ruleForm.channelText }} </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                   <el-form-item label="联系电话">
                     {{ state.ruleForm.channelText }}
                     <el-checkbox-group v-model="checkedCities" :min="0" :max="1" class="ml10">
                       <el-checkbox v-for="city in cities" :key="city.value" :label="city.value">{{ city.label }}</el-checkbox>
                     </el-checkbox-group>
-                    <el-button link type="primary" class="ml5" title="呼叫" @click="onCall"><SvgIcon name="ele-Phone" size="16px" /></el-button>
+                    <el-button plain title="呼叫" size="small" type="primary" class="ml8" @click="onCall">外呼</el-button>
                   </el-form-item>
                 </el-col>
                 <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -108,12 +109,12 @@
           <div class="collapse-container pb1">
             <el-form label-width="140px" ref="ruleFormRef" :model="state.ruleForm" label-position="left">
               <el-row :gutter="10">
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                   <el-form-item label="当前回访人">
                     {{ state.ruleForm.title }}
                   </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                   <el-form-item label="当前工单已回访次数">
                     {{ state.ruleForm.title }}次 <el-button type="primary" class="ml5" title="查看回访记录" link>查看回访记录</el-button>
                   </el-form-item>
@@ -123,7 +124,7 @@
                     <el-checkbox v-model="state.ruleForm.switch">未接通</el-checkbox>
                   </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                   <el-form-item label="是否重办">
                     <el-radio-group v-model="state.ruleForm.switch" class="ml-4">
                       <el-radio :label="true">是</el-radio>
@@ -131,7 +132,7 @@
                     </el-radio-group>
                   </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                   <el-form-item label="当前工单已重办次数">
                     {{ state.ruleForm.title }}次 <el-button type="primary" class="ml5" title="查看重办记录" link>查看重办记录</el-button>
                   </el-form-item>
@@ -169,7 +170,7 @@
                 <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
                   <el-divider content-position="left"><span class="font18 bold">{{item.name}}</span></el-divider>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
                   <el-form-item label="部门办件结果" prop="licenceTypeObj" :rules="[{ required: true, message: '请选择部门办件结果', trigger: 'change' }]">
                     <el-select
                         v-model="state.ruleForm.licenceTypeObj"
@@ -181,7 +182,7 @@
                     </el-select>
                   </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
                   <el-form-item label="不满意原因" prop="licenceTypeObj" :rules="[{ required: true, message: '请选择不满意原因', trigger: 'change' }]">
                     <el-select
                         v-model="state.ruleForm.licenceTypeObj"
@@ -193,7 +194,7 @@
                     </el-select>
                   </el-form-item>
                 </el-col>
-                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
                   <el-form-item label="部门办件态度" prop="licenceTypeObj" :rules="[{ required: true, message: '请选择部门办件态度', trigger: 'change' }]">
                     <el-select
                         v-model="state.ruleForm.licenceTypeObj"
@@ -422,12 +423,6 @@ defineExpose({
 	}
 	:deep(.el-collapse-item__content) {
 		padding-bottom: 10px !important;
-		.el-form-item {
-			margin-bottom: 5px;
-			.el-form-item__content {
-				line-height: 24px;
-			}
-		}
 	}
 	.collapse-container {
 		padding: 10px;

+ 128 - 41
src/views/business/order/accept/orderAdd.vue → src/views/business/order/accept/index.vue

@@ -17,14 +17,17 @@
 											placeholder="请选择来源渠道"
 											class="w100"
 											clearable
+                      value-key="dicDataValue"
 											@change="
-												() => {
+												(val) => {
 													ruleFormRef.resetFields('fromPhone');
 													state.ruleForm.fromPhone = '';
+                          state.ruleForm.sourceChannel = val.dicDataName;
+											    state.ruleForm.sourceChannelCode = val.dicDataValue
 												}
 											"
 										>
-											<el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
+											<el-option v-for="item in state.channelOptions" :value="item" :key="item.dicDataValue" :label="item.dicDataName" />
 										</el-select>
 									</el-form-item>
 								</template>
@@ -550,14 +553,15 @@
 		<order-expand-form ref="ExpandFormRef" @saveExpandForm="saveExpandForm" />
 		<!-- 历史工单 -->
 		<order-history ref="HistoryOrderRef" @saveSelect="saveSelect" />
-		<!-- 提交流程 -->
-		<order-process ref="processRef" @orderProcessSuccess="orderProcessSuccess" />
 		<!-- 补充信息 -->
 		<order-supply ref="SupplyRef" @onSupplySuccess="onSupplySuccess" />
+    <!--  流程审批  -->
+    <process-approval ref="processApprovalRef" @orderProcessSuccess="orderProcessSuccess" >
+    </process-approval>
 	</div>
 </template>
 
-<script setup lang="ts" name="orderAdd">
+<script setup lang="ts" name="orderAccept">
 import { defineAsyncComponent, ref, reactive, onMounted, computed } from 'vue';
 import { ElMessage } from 'element-plus';
 import type { FormInstance } from 'element-plus';
@@ -567,26 +571,27 @@ import { useTelStatus } from '/@/stores/telStatus';
 import { throttle } from '/@/utils/tools';
 import {commonEnum} from '/@/utils/constants';
 import { auth } from '/@/utils/authFunction';
-import other from '/@/utils/other';
-import { orderBaseDataAdd, orderAdd, hotSpotType, historyOrder, orderEdit } from '/@/api/business/order';
+import {orderBaseDataAdd, orderAdd, hotSpotType, historyOrder, orderEdit, orderDetail} from '/@/api/business/order';
 import { useUserInfo } from '/@/stores/userInfo';
 import { treeArea } from '/@/api/business/commonP';
 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 CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
 const OrderSupply = defineAsyncComponent(() => import('/@/views/business/order/components/Order-supply.vue')); // 补充信息
 const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
+const ProcessApproval = defineAsyncComponent(() => import('/@/components/ProcessApproval/index.vue'));  // 流程审批
 // 定义变量内容
 const state = reactive<any>({
 	createBy: 'manual', // 工单创建方式 默认手动创建  tel:来电弹单  letter:互联网来信 默认表示手动创建
 	activeName: 'first', // tabs
 	ruleForm: {
 		channel: '', // 来源频道
+    sourceChannel:'', // 来源频道
+    sourceChannelCode:'', //来源频道code
 		transferPhone: '', // 转接来源
 		fromPhone: '', // 来电号码
 		employeeName: '', // 员工姓名
@@ -609,7 +614,6 @@ const state = reactive<any>({
 		acceptType: '', // 受理类型
 		emergencyLevel: 1, // 紧急程度 默认一般
 		hotspotId: '', // 热点问题
-		incidentTime: '', // 事件发生时间
 		areaCode: '', // 区域编码
 		street: '', // 街道
 		isRepeat: 'false', // 是否重复工单 默认否
@@ -676,6 +680,7 @@ state.ruleForm.employeeName = userInfos.value.name; // 员工姓名
 state.ruleForm.employeeStaffNo = userInfos.value.staffNo; // 员工工号
 const route = useRoute(); // 路由
 const router = useRouter(); // 路由
+const historyParams = history.state;
 // 证件号码验证
 const licenceNoPattern = computed(() => {
 	switch (state.ruleForm.licenceTypeCode) {
@@ -771,7 +776,7 @@ const saveExpandForm = (val: any) => {
 };
 // 删除不必要的属性
 const deleteUnnecessaryProperties = (obj: any) => {
-	const propertiesToDelete = ['ageRangeObj', 'pushTypeObj', 'licenceTypeObj'];
+	const propertiesToDelete = ['ageRangeObj', 'pushTypeObj', 'licenceTypeObj','channel'];
 	propertiesToDelete.forEach((prop) => Reflect.deleteProperty(obj, prop));
 	if (obj.acceptType === 30) Reflect.deleteProperty(obj, 'orderComplain');
 	if (obj.acceptType === 35) Reflect.deleteProperty(obj, 'orderReport');
@@ -783,12 +788,14 @@ const save = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {
 		if (!valid) return;
-		state.ruleForm.hotspotExternal = [];
-		state.ruleForm.hotspotExternal = state.hotspotExternal.join(',');
-		let submitObj = other.deepClone(state.ruleForm);
+    let submitObj = {
+      ...state.ruleForm,
+      hotspotExternal:state.hotspotExternal.join(',')
+    }
 		deleteUnnecessaryProperties(submitObj);
+    const operation = state.orderId ? orderEdit : orderAdd;
 		const addOrderAndNavigate = () => {
-			orderAdd(submitObj).then(() => {
+      operation(submitObj).then(() => {
 				ElMessage.success('操作成功');
 				mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
 				mittBus.emit('clearCache', 'order');
@@ -812,24 +819,30 @@ 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) => {
-		ElMessage.success('操作成功');
-		state.orderId = isEdit ? state.orderId : res.result;
-		processRef.value.openDialog({ id: state.orderId, title: '提交', commonEnum: commonEnum.Seat, processType: 'start' });
-	});
+// 流程审批
+const processApprovalRef = ref<RefType>();
+const processOrder = (submitObj: any) => {
+    const params = {
+      id: state.orderId,
+      processType: '工单发起',
+      extra:{
+        dialogTitle: '提交流程',
+        inputPlaceholder:'办理意见',
+        annexName:"办理附件",
+      },
+      submitObj
+    }
+    processApprovalRef.value.openDialog(params);
 };
-const handleForm = (submitObj: any, isEdit: boolean) => {
+const handleForm = (submitObj: any) => {
 	if (submitObj.orderType === 1 && submitObj.acceptType) {
 		if (ExpandFormRef.value.state.validated) {
-			processOrder(submitObj, isEdit);
+			processOrder(submitObj);
 		} else {
 			ExpandFormRef.value.openDialog(submitObj.acceptType, true);
 		}
 	} else {
-		processOrder(submitObj, isEdit);
+		processOrder(submitObj);
 	}
 };
 // 提交
@@ -837,13 +850,15 @@ const submit = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {
 		if (!valid) return;
-		state.ruleForm.hotspotExternal = state.hotspotExternal.join(',');
-		let submitObj = other.deepClone(state.ruleForm);
+    let submitObj = {
+      ...state.ruleForm,
+      hotspotExternal:state.hotspotExternal.join(',')
+    }
 		deleteUnnecessaryProperties(submitObj);
 		if (state.orderId) {
-			handleForm(submitObj, true);
+			handleForm(submitObj);
 		} else {
-			handleForm(submitObj, false);
+			handleForm(submitObj);
 		}
 	});
 }, 500);
@@ -916,7 +931,7 @@ const searchHistory = throttle(() => {
 		let request = {
 			...state.queryParams,
 			PhoneNo: state.ruleForm.fromPhone,
-			OrderId: route.params.id, //传入id 排除重复工单选择自己
+			OrderId: historyParams.id, //传入id 排除重复工单选择自己
 		};
 		historyOrder(request)
 			.then((response: any) => {
@@ -952,6 +967,7 @@ const onPreview = (row: any) => {
 };
 onMounted(async () => {
 	state.formLoading = true;
+  state.historyOrderLoading = true;
 	state.loading = true;
 	try {
 		const [area, res, hotspot] = await Promise.all([treeArea(), orderBaseDataAdd(), getKeyWord()]);
@@ -968,25 +984,96 @@ onMounted(async () => {
 
 		state.areaOptions = area.result ?? []; //省市区数据
 		state.hotWords = hotspot.result ?? []; // 知识库热词
-		//  route.query.createBy  createBy 代表来源  tel:来电弹单  letter:互联网来信 默认表示手动创建
-		if (route.params.createBy) {
-			state.createBy = route.params.createBy;
-			if (route.params.createBy === 'tel') {
+		//  historyParams.createBy  createBy 代表来源  tel:来电弹单  letter:互联网来信 默认表示手动创建
+    console.log(historyParams,route.params);
+		if (historyParams.createBy) {
+			state.createBy = historyParams.createBy;
+			if (historyParams.createBy === 'tel') {
 				//通话
 				state.ruleForm.channel = 'RGDH'; //电话
-				state.ruleForm.fromPhone = route.params.telNo;
-				state.ruleForm.callId = route.params.callId;
-				state.ruleForm.transferPhone = route.params.transfer;
+				state.ruleForm.fromPhone = historyParams.telNo;
+				state.ruleForm.callId = historyParams.callId;
+				state.ruleForm.transferPhone = historyParams.transfer;
 				searchHistory(); // 查询历史订单
 			}
-			console.log(route.params);
 		}
+    if(route.params.id){// 如果 有id
+      state.orderId = route.params.id;
+      const response = await orderDetail(route.params.id );
+      // 如果获取到id 调用查询详情
+      state.ruleForm = response.result;
+      if (state.ruleForm.channel === 'RGDH') {
+        // 来源渠道为电话查询历史工单
+        searchHistory();
+      }
+      if (state.ruleForm.orderType === 1) {
+        // 工单类型 选择了12315市场监管受理单
+        state.acceptTypeOptions = state.acceptTypeOptions.map((item: any) => {
+          if ([30, 35].includes(item.key)) {
+            //直接投诉或者建议
+            return {
+              key: item.key,
+              value: item.value,
+              disabled: false,
+            };
+          } else {
+            return {
+              key: item.key,
+              value: item.value,
+              disabled: true,
+            };
+          }
+        });
+        state.expandFormMounted = true;
+      }
+      state.ruleForm.channel = {
+        // 来源渠道
+        dicDataValue: state.ruleForm.sourceChannelCode,
+        dicDataName: state.ruleForm.sourceChannel,
+      };
+      if (response.result.duplicateId) {
+        // 是否重复
+        state.ruleForm.isRepeat = 'true';
+        state.tableRadio = state.ruleForm.duplicateId;
+      } else {
+        state.ruleForm.isRepeat = 'false';
+      }
+      if (response.result.hotspotExternal) {
+        //热点分类默认展开
+        state.hotspotExternal = state.ruleForm.hotspotExternal.split(',');
+      }
+      state.ruleForm.ageRangeObj = {
+        // 年龄段
+        dicDataValue: state.ruleForm.ageRangeCode,
+        dicDataName: state.ruleForm.ageRange,
+      };
+      state.ruleForm.licenceTypeObj = {
+        // 证件类型
+        dicDataValue: state.ruleForm.licenceTypeCode,
+        dicDataName: state.ruleForm.licenceType,
+      };
+      state.ruleForm.pushTypeObj = {
+        // 推送分类
+        dicDataValue: state.ruleForm.pushTypeCode,
+        dicDataName: state.ruleForm.pushType,
+      };
+      knowledgeRetrievalPaged(state.ruleForm.hotspotName);
+      state.formLoading = false;
+      state.historyOrderLoading = false;
+      state.loading = false;
+    }
 	} catch (error) {
-		state.formLoading = false;
-		state.loading = false;
-	}
+    state.formLoading = false;
+    state.historyOrderLoading = false;
+    state.loading = false;
+	} finally {
+    state.formLoading = false;
+    state.historyOrderLoading = false;
+    state.loading = false;
+  }
 	state.formLoading = false;
 	state.loading = false;
+  state.historyOrderLoading = false;
 });
 </script>
 

+ 0 - 1069
src/views/business/order/accept/orderEdit.vue

@@ -1,1069 +0,0 @@
-<template>
-	<div class="order-edit-container layout-padding">
-		<el-row :gutter="15" class="h100">
-			<!-- 左边工单信息 -->
-			<el-col :span="12" class="left-content mb20 h100">
-				<el-scrollbar class="box pd20">
-					<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="110px" label-position="right" scroll-to-error v-loading="state.formLoading">
-						<p class="border-title mb10">来电信息</p>
-						<el-row :gutter="0">
-							<!-- 来源渠道 -->
-							<el-col :span="12">
-								<!-- 手动创建 -->
-								<template v-if="state.createFrom === 'manual'">
-									<el-form-item label="来源渠道" prop="channel" :rules="[{ required: true, message: '请选择来源渠道', trigger: 'change' }]">
-										<el-select
-											v-model="state.ruleForm.channel"
-											placeholder="请选择来源渠道"
-											class="w100"
-											@change="
-												() => {
-													ruleFormRef.resetFields('fromPhone');
-													state.ruleForm.fromPhone = '';
-												}
-											"
-										>
-											<el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
-										</el-select>
-									</el-form-item>
-								</template>
-								<!-- 来电弹单 -->
-								<template v-else-if="state.createFrom === 'tel'">
-									<el-form-item label="来源渠道">
-										<span>[{{ telStatusInfo.telsNo }}]</span>
-									</el-form-item>
-								</template>
-								<!-- 互联网来信 -->
-								<template v-else-if="state.createFrom === 'letter'">
-									<el-form-item label="来源渠道">
-										<span>[{{ telStatusInfo.telsNo }}]</span>
-									</el-form-item>
-								</template>
-							</el-col>
-							<!-- 转接来源 -->
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<!-- 手动创建 -->
-								<template v-if="state.createBy === 'manual'">
-									<el-form-item label="转接来源" prop="transferPhone"> 暂无 </el-form-item>
-								</template>
-								<!-- 来电弹单 -->
-								<template v-if="state.createBy === 'tel'">
-									<el-form-item label="转接来源" prop="transferPhone">
-										<span>[{{ state.ruleForm.transferPhone }}]</span>
-									</el-form-item>
-								</template>
-								<!-- 互联网来信 -->
-								<template v-if="state.createBy === 'letter'">
-									<el-form-item label="转接来源" prop="transferPhone">
-										<span>[{{ state.ruleForm.transferPhone }}]</span>
-									</el-form-item>
-								</template>
-							</el-col>
-							<!-- 来电号码 -->
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="state.ruleForm.channel === 'RGDH'">
-								<!-- 手动创建 -->
-								<template v-if="state.createFrom === 'manual'">
-									<el-form-item
-										label="来电号码"
-										prop="fromPhone"
-										:rules="[
-											{ required: true, message: '请填写来电号码', trigger: 'blur' },
-											{
-												pattern: /^((0\d{2,3}(-)?\d{7,8})|(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8})$/,
-												message: '来电号码格式错误',
-												trigger: 'blur',
-											},
-										]"
-									>
-										<el-input v-model="state.ruleForm.fromPhone" placeholder="请填写来电号码" clearable @blur="searchHistory"> </el-input>
-									</el-form-item>
-								</template>
-								<!-- 来电弹单 -->
-								<template v-else-if="state.createFrom === 'tel'">
-									<el-form-item label="来电号码">
-										<span>[{{ telStatusInfo.telsNo }}]</span>
-									</el-form-item>
-								</template>
-								<!-- 互联网来信 -->
-								<template v-else-if="state.createFrom === 'letter'">
-									<el-form-item label="来电号码">
-										<span>[{{ phoneNumber }}]</span>
-									</el-form-item>
-								</template>
-							</el-col>
-							<!-- 服务坐席 -->
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="服务坐席">
-									<!-- 手动创建 -->
-									<template v-if="state.createFrom === 'manual'">
-										<span>{{ state.ruleForm.employeeName + '[' + state.ruleForm.employeeStaffNo + ']' }}</span>
-									</template>
-									<!-- 来电弹单 -->
-									<template v-else-if="state.createFrom === 'tel'">
-										<span>[{{ telStatusInfo.telsNo }}]</span>
-									</template>
-									<!-- 互联网来信 -->
-									<template v-else-if="state.createFrom === 'letter'">
-										<span>[{{ telStatusInfo.telsNo }}]</span>
-									</template>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="来电/信人" prop="fromName" :rules="[{ required: true, message: '请填写来电/信人', trigger: 'blur' }]">
-									<el-input v-model="state.ruleForm.fromName" placeholder="请填写来电/信人" clearable> </el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item
-									label="来电/信人性别"
-									prop="fromGender"
-									:rules="[{ required: true, message: '请选择来电/信人性别', trigger: 'change' }]"
-								>
-									<el-radio-group v-model="state.ruleForm.fromGender">
-										<el-radio :label="item.key" v-for="item in state.genderOptions" :key="item.key">{{ item.value }}</el-radio>
-									</el-radio-group>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item
-									label="来电/信人身份"
-									prop="identityType"
-									:rules="[{ required: true, message: '请选择来电/信人身份', trigger: 'change' }]"
-								>
-									<el-radio-group v-model="state.ruleForm.identityType" @change="selectIdentity">
-										<el-radio :label="item.key" v-for="item in state.identityTypeOptions" :key="item.key">{{ item.value }}</el-radio>
-									</el-radio-group>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="证件类型" prop="licenceTypeObj" :rules="[{ required: false, message: '请选择证件类型', trigger: 'change' }]">
-									<el-select
-										v-model="state.ruleForm.licenceTypeObj"
-										placeholder="请选择证件类型"
-										class="w100"
-										value-key="dicDataValue"
-										@change="(val:any) => {
-											state.ruleForm.licenceType = val.dicDataName;
-											state.ruleForm.licenceTypeCode = val.dicDataValue;
-										}
-											"
-									>
-										<el-option v-for="item in state.licenceTypeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
-									</el-select>
-								</el-form-item>
-							</el-col>
-							<!-- 若“证件类型”有值,则证件号码必填 -->
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item
-									label="证件号码"
-									prop="licenceNo"
-									:rules="[
-										{ required: state.ruleForm.licenceTypeCode, message: '请填写证件号码', trigger: 'blur' },
-										{
-											pattern: licenceNoPattern,
-											message: '证件号码格式错误',
-											trigger: 'blur',
-										},
-									]"
-								>
-									<el-input v-model="state.ruleForm.licenceNo" placeholder="请填写证件号码" clearable> </el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="年龄段" prop="ageRangeObj" :rules="[{ required: false, message: '请选择年龄段', trigger: 'change' }]">
-									<el-select
-										v-model="state.ruleForm.ageRangeObj"
-										placeholder="请选择年龄段"
-										class="w100"
-										value-key="dicDataValue"
-										@change="(val:any) => {
-											state.ruleForm.ageRange = val.dicDataName;
-											state.ruleForm.ageRangeCode = val.dicDataValue;
-										}
-											"
-									>
-										<el-option v-for="item in state.ageRangeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
-									</el-select>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item
-									label="联系电话"
-									prop="contact"
-									:rules="[
-										{ required: true, message: '请填写联系电话', trigger: 'blur' },
-										{
-											pattern: /^((0\d{2,3}(-)?\d{7,8})|(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8})$/,
-											message: '联系电话格式错误',
-											trigger: 'blur',
-										},
-									]"
-								>
-									<el-input v-model="state.ruleForm.contact" placeholder="请填写联系电话" clearable> </el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="" prop="acceptSms" :rules="[{ required: false, message: '请选择', trigger: 'blur' }]">
-									<el-checkbox v-model="state.ruleForm.acceptSms" label="受理短信" />
-									<el-checkbox v-model="state.ruleForm.needContact" label="是否保密" />
-								</el-form-item>
-							</el-col>
-							<!-- 当“来电/信人身份”为“企业”时必填 -->
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-form-item
-									label="工作单位"
-									prop="company"
-									:rules="[{ required: state.ruleForm.identityType === 2, message: '请填写工作单位', trigger: 'blur' }]"
-								>
-									<el-input v-model="state.ruleForm.company" placeholder="请填写工作单位" clearable> </el-input>
-								</el-form-item>
-							</el-col>
-						</el-row>
-						<p class="border-title mb10">诉求信息</p>
-						<el-row>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="工单编码"> {{ state.ruleForm.no }} </el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-form-item label="工单标题" prop="title" :rules="[{ required: true, message: '请填写工单标题', trigger: 'blur' }]">
-									<el-input v-model="state.ruleForm.title" placeholder="请填写工单标题" clearable> </el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-row :gutter="0">
-									<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-										<el-form-item label="工单类型" prop="orderType" :rules="[{ required: true, message: '请选择工单类型', trigger: 'change' }]">
-											<el-select v-model="state.ruleForm.orderType" placeholder="请选择工单类型" class="w100" @change="selectOrderType">
-												<el-option v-for="item in state.orderTypeOptions" :key="item.key" :label="item.value" :value="item.key" />
-											</el-select>
-										</el-form-item>
-									</el-col>
-									<!-- 当“工单类型”为非通用工单时,展示【拓展信息】按钮 -->
-									<el-col :xs="6" :sm="6" :md="6" :lg="6" :xl="6" :offset="1" v-if="state.ruleForm.orderType === 1 && state.ruleForm.acceptType">
-										<el-form-item label="" label-width="0px">
-											<el-button @click="showExpandForm"> <SvgIcon name="ele-CirclePlus" class="mr3" size="16px" /> 拓展信息 </el-button>
-										</el-form-item>
-									</el-col>
-								</el-row>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="受理类型" prop="acceptType" :rules="[{ required: true, message: '请选择受理类型', trigger: 'change' }]">
-									<el-select v-model="state.ruleForm.acceptType" placeholder="请选择受理类型" class="w100">
-										<el-option
-											v-for="item in state.acceptTypeOptions"
-											:key="item.key"
-											:disabled="item.disabled"
-											:label="item.value"
-											:value="item.key"
-										/>
-									</el-select>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="紧急程度" prop="emergencyLevel" :rules="[{ required: true, message: '请选择紧急程度', trigger: 'change' }]">
-									<el-select v-model="state.ruleForm.emergencyLevel" placeholder="请选择紧急程度" class="w100">
-										<el-option v-for="item in state.emergencyLevelOptions" :key="item.key" :label="item.value" :value="item.key" />
-									</el-select>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-form-item label="热点分类" prop="hotspotId" :rules="[{ required: true, message: '请选择热点分类', trigger: 'change' }]">
-									<el-tree-select
-										class="w100"
-										v-model="state.ruleForm.hotspotId"
-										filterable
-										clearable
-										placeholder="请选择热点分类"
-										:props="HotspotProps"
-										lazy
-										:load="load"
-										node-key="id"
-										check-strictly
-										:render-after-expand="false"
-										@node-click="hotSpotChange"
-										:default-expanded-keys="state.hotspotExternal"
-									/>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="事发时间" prop="incidentTime" :rules="[{ required: false, message: '请选择事发时间', trigger: 'change' }]">
-									<el-date-picker
-										v-model="state.ruleForm.incidentTime"
-										type="datetime"
-										placeholder="请选择事发时间"
-										value-format="YYYY-MM-DD[T]HH:mm:ss"
-										class="w100"
-									/>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-row :gutter="0">
-									<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-										<el-form-item label="事发地址" prop="areaCode" :rules="[{ required: true, message: '请选择事发地址', trigger: 'change' }]">
-											<el-cascader
-												:options="state.areaOptions"
-												filterable
-												:props="{ value: 'id', label: 'areaName', emitPath: false }"
-												placeholder="请选择事发地址"
-												class="w100"
-												v-model="state.ruleForm.areaCode"
-												ref="areaRef"
-												@change="changeArea"
-											>
-												<template #default="{ node, data }">
-													<span>{{ data.areaName }}</span>
-													<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
-												</template>
-											</el-cascader>
-										</el-form-item>
-									</el-col>
-									<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-										<el-form-item
-											label=""
-											prop="street"
-											:rules="[{ required: false, message: '请填写详细地址', trigger: 'blur' }]"
-											label-width="10px"
-										>
-											<el-input v-model="state.ruleForm.street" placeholder="请填写详细地址" clearable> </el-input>
-										</el-form-item>
-									</el-col>
-								</el-row>
-							</el-col>
-
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-row :gutter="0">
-									<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-										<el-form-item label="是否重复" prop="isRepeat" :rules="[{ required: true, message: '请选择是否重复', trigger: 'change' }]">
-											<el-select v-model="state.ruleForm.isRepeat" placeholder="请选择是否重复" class="w100" @change="isRepeatChange">
-												<el-option v-for="item in state.repeatOptions" :key="item.key" :label="item.value" :value="item.key" />
-											</el-select>
-										</el-form-item>
-									</el-col>
-									<!-- 必填,若“是否重复”为“是”,则展示重复件选择框 -->
-									<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="state.ruleForm.isRepeat === 'true'">
-										<el-form-item
-											label=""
-											prop="duplicateTitle"
-											label-width="10px"
-											:rules="[{ required: true, message: '请选择重复件', trigger: 'change' }]"
-										>
-											<el-input v-model="state.ruleForm.duplicateTitle" placeholder="请选择重复件" readonly>
-												<template #suffix>
-													<el-button link type="danger" v-if="state.ruleForm.duplicateTitle" @click="clearRepeat">
-														<SvgIcon name="ele-Delete" size="16px" />
-													</el-button>
-													<el-button link type="primary" class="ml1" @click="selectRepeat">
-														<SvgIcon name="iconfont icon-tianjiatuozhanxinxi" size="18px" />
-													</el-button>
-												</template>
-											</el-input>
-										</el-form-item>
-									</el-col>
-								</el-row>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="推送分类" prop="pushTypeObj" :rules="[{ required: false, message: '请选择推送分类', trigger: 'change' }]">
-									<el-select
-										v-model="state.ruleForm.pushTypeObj"
-										placeholder="请选择推送分类"
-										class="w100"
-										clearable
-										value-key="dicDataValue"
-										@change="(val:any) => {
-											state.ruleForm.pushType = val.dicDataName;
-											state.ruleForm.pushTypeCode = val.dicDataValue;
-										}
-											"
-									>
-										<el-option v-for="item in state.pushTypeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
-									</el-select>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-form-item label="诉求详情" prop="content" :rules="[{ required: true, message: '请填写诉求详情', trigger: 'blur' }]">
-                  <common-advice
-                      @chooseAdvice="chooseAdvice"
-                      v-model="state.ruleForm.content"
-                      placeholder="请填写诉求详情"
-                      :loading="state.formLoading"
-                      :commonEnum="commonEnum.Seat"
-                      modal
-                  />
-								</el-form-item>
-							</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></annex-list>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
-								<el-form-item>
-									<el-button class="default-button" @click="save(ruleFormRef)" v-auth="'business:order:add'"> 保存 </el-button>
-									<el-button type="primary" v-waves @click="submit(ruleFormRef)" v-auth="'business:order:startWorkflow'"> 提交 </el-button>
-								</el-form-item>
-							</el-col>
-						</el-row>
-					</el-form>
-				</el-scrollbar>
-			</el-col>
-			<!-- 右侧内容 -->
-			<el-col :span="12" class="right-content h100">
-				<el-scrollbar>
-					<div class="right-content-box box pd20">
-						<!-- <el-tabs v-model="state.activeName">
-							<el-tab-pane label="历史工单" name="first"> </el-tab-pane>
-							<el-tab-pane label="市民画像" name="second"> 市民画像 </el-tab-pane>
-						</el-tabs> -->
-						<el-form :model="state.queryParams" ref="queryParamsRef" :inline="true" @submit.native.prevent>
-							<el-form-item label="关键词" prop="Keyword">
-								<el-input v-model="state.queryParams.Keyword" placeholder="工单标题/工单编码" clearable @keyup.enter="handleQuery" />
-							</el-form-item>
-							<el-form-item>
-								<el-button type="primary" @click="handleQuery" :loading="state.historyOrderLoading">
-									<SvgIcon name="ele-Search" class="mr5" />查询
-								</el-button>
-								<el-button @click="resetQuery(queryParamsRef)" :loading="state.historyOrderLoading" class="default-button">
-									<SvgIcon name="ele-Refresh" class="mr5" />重置
-								</el-button>
-							</el-form-item>
-						</el-form>
-						<el-table
-							:data="state.tableData"
-							v-loading="state.historyOrderLoading"
-							@selection-change="handleSelectionChange"
-							max-height="300"
-							ref="multipleTableRef"
-							row-key="id"
-						>
-							<el-table-column type="selection" label="重复件" width="80" v-if="state.ruleForm.isRepeat === 'true'" />
-							<el-table-column type="index" width="60" label="序号" />
-							<el-table-column prop="phoneNo" label="工单标题" show-overflow-tooltip width="180">
-								<template #default="{ row }">
-									<span style="color: var(--el-color-primary)">{{ row.title }}</span>
-								</template>
-							</el-table-column>
-							<el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip> </el-table-column>
-							<el-table-column prop="no" label="工单编码" show-overflow-tooltip> </el-table-column>
-							<el-table-column prop="currentStepName" label="当前环节" show-overflow-tooltip></el-table-column>
-							<el-table-column prop="statusText" label="状态" width="70" fixed="right" align="center">
-								<template #default="{ row }">
-									<!-- 草稿 -->
-									<span style="color: var(--el-color-info)" v-if="row.status === 0">{{ row.statusText }}</span>
-									<!-- 待签收 -->
-									<span style="color: var(--el-color-success)" v-if="row.status === 10">{{ row.statusText }}</span>
-									<!-- 办理中 -->
-									<span style="color: var(--el-color-primary)" v-if="row.status === 20">{{ row.statusText }}</span>
-									<!-- 会签中 -->
-									<span style="color: var(--el-color-primary)" v-if="row.status === 30">{{ row.statusText }}</span>
-									<!-- 退回 -->
-									<span style="color: var(--el-color-danger)" v-if="row.status === 40">{{ row.statusText }}</span>
-									<!-- 办理完成 -->
-									<span style="color: var(--el-color-success)" v-if="row.status === 50">{{ row.statusText }}</span>
-									<!-- 已归档 -->
-									<span style="color: var(--el-color-info)" v-if="row.status === 60">{{ row.statusText }}</span>
-								</template>
-							</el-table-column>
-							<el-table-column prop="statusText" label="操作" width="70" fixed="right" align="center">
-								<template #default="{ row }">
-									<el-button link type="primary" @click="onSupply(row)"> 补充 </el-button>
-								</template>
-							</el-table-column>
-						</el-table>
-						<!-- 分页 -->
-						<pagination
-							:total="state.total"
-							v-model:page="state.queryParams.PageIndex"
-							v-model:limit="state.queryParams.PageSize"
-							@pagination="searchHistory"
-						/>
-					</div>
-					<div class="right-content-knowledge mt20 box pd20">
-						<div class="flex-center-between mb20">
-							<p class="table-title">知识检索</p>
-						</div>
-						<div class="knowledge-container">
-							<el-input
-								v-model="state.KnowledgeKeyword"
-								class="knowledge-input mb20"
-								placeholder="请填写搜索内容"
-								@keyup.enter="searchKnowledge(state.KnowledgeKeyword)"
-							>
-								<template #prefix>
-									<SvgIcon name="ele-Search" size="16px" />
-								</template>
-								<template #suffix>
-									<el-button
-										class="knowledge-search-button"
-										type="primary"
-										:loading="state.loading"
-										round
-										@click="searchKnowledge(state.KnowledgeKeyword)"
-									>
-										<SvgIcon name="ele-Search" size="16px" color="#fff" />
-									</el-button>
-								</template>
-							</el-input>
-							<div>
-								<span class="mr10" v-if="state.items.length">搜索热词</span>
-								<el-tag
-									v-for="(item, index) in state.hotWords"
-									:key="index"
-									class="mr10 mb10"
-									style="cursor: pointer"
-									@click="knowledgeRetrievalPaged(item)"
-									round
-								>
-									{{ item }}
-								</el-tag>
-							</div>
-							<ul class="mt10" v-loading="state.loading">
-								<el-empty description="暂无数据" v-if="!state.knowledgeList.length" class="mb20">
-									<template #image>
-										<span></span>
-									</template>
-								</el-empty>
-								<li v-for="(item, index) in state.knowledgeList" :key="index" class="mb20" v-else>
-									<p class="font16">
-										<SvgIcon name="iconfont icon-dian" size="16px" /> <b>{{ item.title }}</b>
-									</p>
-									<p class="pt6 indent text-ellipsis2" v-html="item.content"></p>
-								</li>
-							</ul>
-						</div>
-						<!-- 分页 -->
-						<pagination
-							:total="state.knowledgeTotal"
-							v-model:page="state.knowledgeQuery.PageIndex"
-							v-model:limit="state.knowledgeQuery.PageSize"
-							@pagination="knowledgeRetrievalPaged(state.KnowledgeKeyword)"
-							:pageSizes="[5, 10, 15, 20]"
-							layout="total, prev, pager, next"
-						/>
-					</div>
-				</el-scrollbar>
-			</el-col>
-		</el-row>
-		<!-- 拓展表单 -->
-		<order-expand-form ref="ExpandFormRef" @saveExpandForm="saveExpandForm" />
-		<!-- 历史工单 -->
-		<order-history ref="HistoryOrderRef" @saveSelect="saveSelect" />
-		<!-- 提交流程 -->
-		<order-process ref="processRef" @orderProcessSuccess="orderProcessSuccess" />
-		<!-- 补充信息 -->
-		<order-supply ref="SupplyRef" @onSupplySuccess="onSupplySuccess" />
-	</div>
-</template>
-
-<script setup lang="ts" name="orderEdit">
-import { defineAsyncComponent, ref, reactive, computed, onMounted, nextTick } from 'vue';
-import { ElMessage } from 'element-plus';
-import type { FormInstance } from 'element-plus';
-import { storeToRefs } from 'pinia';
-import { useRoute, useRouter } from 'vue-router';
-import { useTelStatus } from '/@/stores/telStatus';
-import { desensitizationPhone, throttle } from '/@/utils/tools';
-import { commonEnum } from '/@/utils/constants';
-import { orderBaseDataAdd, hotSpotType, historyOrder, orderDetail, orderEdit } from '/@/api/business/order';
-import { useUserInfo } from '/@/stores/userInfo';
-import { treeArea } from '/@/api/business/commonP';
-import { knowPopScreen, getKeyWord } from '/@/api/knowledge';
-import other from '/@/utils/other';
-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 CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.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:互联网来信 默认表示手动创建
-	activeName: 'first', // tabs
-	ruleForm: {
-		channel: '', // 来源频道
-		transferPhone: '', // 转接来源
-		fromPhone: '', // 来电号码
-		employeeName: '', // 员工姓名
-		employeeStaffNo: '', // 员工工号
-		fromName: '', // 来电人姓名
-		fromGender: 1, // 来电人性别 默认先生
-		identityType: 1, // 来电/信人身份 默认市民
-		licenceType: '', // 证件类型
-		licenceTypeCode: '', // 证件类型code
-		licenceNo: '', // 证件号码
-		ageRange: '', // 年龄段
-		ageRangeCode: '', // 年龄段code
-		contact: '', // 联系电话
-		acceptSms: false, // 是否接收短信 默认false
-		isSecret: false, // 是否保密 默认false
-		company: '', // 工作单位
-		no: '', // 工单编号
-		title: '', // 工单标题
-		orderType: 0, // 工单类型 默认通用工单
-		acceptType: '', // 受理类型
-		emergencyLevel: 1, // 紧急程度 默认一般
-		hotspotId: '', // 热点问题
-		incidentTime: '', // 事件发生时间
-		areaCode: '', // 区域编码
-		street: '', // 街道
-		isRepeat: 'false', // 是否重复工单 默认否
-		duplicateId: '', //重复工单id
-		duplicateTitle: '', // 重复工单标题
-		pushType: '', // 推送类型
-		pushTypeCode: '', // 推送类型code
-		content: '', // 工单内容
-	},
-	formLoading: false, // 表单加载状态
-	historyOrderLoading: false, // 历史工单加载状态
-	loading: false, // 知识检索加载状态
-	acceptTypeOptions: [], // 受理类型
-	channelOptions: [], // 来源频道
-	emergencyLevelOptions: [], // 紧急程度
-	genderOptions: [], // 性别
-	identityTypeOptions: [], //来电人身份
-	licenceTypeOptions: [], // 证件类型
-	ageRangeOptions: [], // 年龄段
-	orderTypeOptions: [], // 工单类型
-	pushTypeOptions: [], //推送分类
-	areaOptions: [], //省市区
-	repeatOptions: [
-		//是否重复
-		{
-			value: '是',
-			key: 'true',
-		},
-		{
-			value: '否',
-			key: 'false',
-		},
-	],
-	orgData: [],  // 机构数据
-	tableData: [], // 历史工单
-	total: 0, // 历史工单总条数
-	queryParams: {
-		PageIndex: 1, // 当前页
-		PageSize: 10, // 每页条数
-		Keyword: '',  // 关键字
-	},
-	KnowledgeKeyword: '', //知识检索内容
-	items: [],  // 知识检索列表
-	knowledgeList: [], //知识检索列表
-	external: [], // 知识检索展开
-	hotspotExternal: [], // 热点分类展开
-	knowledgeQuery: {
-		// 知识库查询
-		PageIndex: 1, // 当前页
-		PageSize: 5,  // 每页条数
-		Keyword: '',  // 关键字
-	},
-	knowledgeTotal: 0, // 知识库总条数
-	fileList: [], // 附件列表
-	expandFormMounted: false, // 是否展开
-});
-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) {
-		case '10': // 身份证
-			return /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/;
-		default: //默认只允许数字字母
-			return /^[A-Za-z0-9]+$/;
-	}
-});
-// 热点分类远程搜索
-const HotspotProps = {
-	label: 'hotSpotFullName',
-	children: 'children',
-	isLeaf: 'isLeaf',
-};
-// 热点分类懒加载
-const load = async (node: any, resolve: any) => {
-	if (node.isLeaf) return resolve([]);
-	const res: any = await hotSpotType({ id: node.data.id ? node.data.id : '' });
-	resolve(res.result);
-};
-// 选择热点分类
-const hotSpotChange = (val: any, e: any) => {
-	state.hotspotExternal = <EmptyArrayType>[];
-	state.external = <EmptyArrayType>[];
-	state.hotspotExternal = getParentId(e, state.external);
-	state.ruleForm.hotspotSpliceName = val.hotSpotFullName;
-	state.ruleForm.hotspotName = val.hotSpotName;
-	knowledgeRetrievalPaged(val.hotSpotName);
-};
-//  知识检索
-const knowledgeRetrievalPaged = async (val?: string) => {
-	if (val) {
-		state.knowledgeQuery.Keyword = val;
-		state.KnowledgeKeyword = val;
-	} else {
-		state.knowledgeQuery.Keyword = '';
-		state.KnowledgeKeyword = '';
-	}
-	try {
-		state.loading = true;
-		const res: any = await knowPopScreen(state.knowledgeQuery);
-		state.knowledgeList = res.result?.items ?? [];
-		state.knowledgeTotal = res.result?.total ?? 0;
-		state.loading = false;
-	} catch (error) {
-		state.loading = false;
-	}
-};
-// 递归查找父级Id
-const getParentId = (val: any, arr: string[]) => {
-	if (val.data.parentId) {
-		arr.push(val.data.parentId);
-		getParentId(val.parent, arr);
-	}
-	return arr;
-};
-// 手机号码脱敏处理
-const phoneNumber = computed(() => {
-	return desensitizationPhone(telStatusInfo.value.onCallArr[0]?.from);
-});
-// 选择工单类型 处理受理类型选择数据
-const selectOrderType = (val: any) => {
-	ruleFormRef.value.resetFields('acceptType');
-	state.acceptTypeOptions = state.acceptTypeOptions.map((item: any) => {
-		let isDisabled = val === 1 && ![30, 35].includes(item.key); // 选择了12315 市场监管受理单 举报:30 投诉:35
-		return {
-			key: item.key,
-			value: item.value,
-			disabled: isDisabled,
-		};
-	});
-};
-const areaRef = ref<RefType>();
-// 选择省市区
-const changeArea = () => {
-	const currentNode = areaRef.value.getCheckedNodes();
-	state.ruleForm.province = currentNode[0]?.pathLabels[0] ?? '';
-	state.ruleForm.city = currentNode[0]?.pathLabels[1] ?? '';
-	state.ruleForm.county = currentNode[0]?.pathLabels[2] ?? '';
-};
-const ExpandFormRef = ref<RefType>();
-// 打开拓展表单
-const showExpandForm = () => {
-	ExpandFormRef.value.openDialog(state.ruleForm.acceptType);
-};
-// 拓展表单保存
-const saveExpandForm = (val: any) => {
-	const acceptTypeMap: any = {
-		30: 'orderReport',
-		35: 'orderComplain',
-	};
-	const property = acceptTypeMap[state.ruleForm.acceptType];
-	if (property) {
-		state.ruleForm[property] = val;
-	}
-};
-// 选择来点人身份如果是企业 推送分类自动选择助企纾困
-const selectIdentity = (val: number) => {
-	if (val === 2) {
-		state.ruleForm.pushTypeObj = state.pushTypeOptions.find((item: any) => item.dicDataValue === '8'); // 助企纾困
-		state.ruleForm.pushType = state.ruleForm.pushTypeObj.dicDataName;
-		state.ruleForm.pushTypeCode = state.ruleForm.pushTypeObj.dicDataValue;
-	}
-};
-// 删除不必要的属性
-const deleteUnnecessaryProperties = (obj: any) => {
-	const propertiesToDelete = ['ageRangeObj', 'pushTypeObj', 'licenceTypeObj'];
-	propertiesToDelete.forEach((prop) => Reflect.deleteProperty(obj, prop));
-	if (obj.acceptType === 30) Reflect.deleteProperty(obj, 'orderComplain');
-	if (obj.acceptType === 35) Reflect.deleteProperty(obj, 'orderReport');
-};
-// 是否打开拓展表单
-const shouldOpenDialog = (obj: any) => obj.orderType === 1 && obj.acceptType && !ExpandFormRef.value.state.validated;
-// 保存
-const save = throttle((formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.validate((valid: boolean) => {
-		if (!valid) return;
-		state.ruleForm.hotspotExternal = state.hotspotExternal.join(',');
-		let submitObj = other.deepClone(state.ruleForm);
-		deleteUnnecessaryProperties(submitObj);
-		const editOrderAndNavigate = () => {
-			orderEdit(submitObj).then(() => {
-				ElMessage.success('操作成功');
-				// 关闭当前 tagsView
-				mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
-				mittBus.emit('clearCache', 'order');
-				router.replace({
-					path: '/business/order/index',
-				});
-			});
-		};
-		if (shouldOpenDialog(submitObj)) {
-			ExpandFormRef.value.openDialog(submitObj.acceptType, true);
-		} else {
-			editOrderAndNavigate();
-		}
-	});
-}, 500);
-// 提交
-const processRef = ref<RefType>();
-const submit = throttle((formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.validate((valid: boolean) => {
-		if (!valid) return;
-		state.ruleForm.hotspotExternal = state.hotspotExternal.join(',');
-		let submitObj = other.deepClone(state.ruleForm);
-		deleteUnnecessaryProperties(submitObj);
-
-		const proceedWithSubmission = () => {
-			orderEdit(submitObj).then(() => {
-				processRef.value.openDialog({ id: route.params.id, title: '提交', commonEnum: commonEnum.Seat, processType: 'start' });
-			});
-		};
-
-		if (submitObj.orderType === 1 && submitObj.acceptType && !ExpandFormRef.value.state.validated) {
-			//如果没有通过展示弹窗
-			ExpandFormRef.value.openDialog(submitObj.acceptType, true);
-		} else {
-			proceedWithSubmission();
-		}
-	});
-}, 500);
-// 选择是否重复
-const isRepeatChange = (val: string) => {
-	if (val === 'false') clearRepeat();
-};
-const multipleSelection = ref<any[]>([]); // 重复件表格选中项
-const multipleTableRef = ref<RefType>(); // 重复件表格ref
-// 清除重复件
-const clearRepeat = () => {
-	state.ruleForm.duplicateTitle = '';
-	state.ruleForm.duplicateId = '';
-	multipleTableRef.value.clearSelection();
-};
-// 选择重复件
-const HistoryOrderRef = ref<RefType>();
-const selectRepeat = () => {
-	HistoryOrderRef.value.openDialog(state.ruleForm);
-};
-// 弹窗确定选择重复件
-const saveSelect = (multipleSelection: any) => {
-	multipleTableRef.value.clearSelection();
-	state.ruleForm.duplicateTitle = '已选择';
-	console.log(multipleSelection);
-	if (multipleSelection) {
-		multipleSelection.forEach((row: any) => {
-			multipleTableRef.value!.toggleRowSelection(row, true);
-		});
-	}
-
-	multipleSelection.value = multipleSelection;
-	console.log(multipleSelection.value, '121');
-	HistoryOrderRef.value.closeDialog();
-};
-// 右边表格选中重复件
-const handleSelectionChange = (row: any) => {
-	multipleSelection.value = row;
-};
-// 历史工单搜索
-const searchKnowledge = (value?: string) => {
-	if (value) state.KnowledgeKeyword = value;
-	state.historyOrderLoading = true;
-	state.historyOrderLoading = false;
-};
-// 选中常用意见
-const chooseAdvice = (item: any) => {
-	state.ruleForm.content += item.content;
-};
-// 流程提交成功
-const orderProcessSuccess = () => {
-	// 关闭当前 tagsView
-	mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
-	mittBus.emit('clearCache', 'order');
-	router.push({
-		path: '/business/order/index',
-	});
-};
-/** 搜索按钮操作 */
-const handleQuery = throttle(() => {
-	state.queryParams.PageIndex = 1;
-	searchHistory();
-}, 500);
-/** 重置按钮操作 */
-const resetQuery = throttle((formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.resetFields();
-	handleQuery();
-}, 500);
-/** 获取历史工单 */
-const searchHistory = throttle(() => {
-	if (!auth('business:order:history')) ElMessage.error('抱歉,您没有权限查询历史工单!');
-	else {
-		if (!state.ruleForm.fromPhone) return; // 如果没有来电号码 不进行查询
-		state.historyOrderLoading = true;
-		let request = {
-			...state.queryParams,
-			PhoneNo: state.ruleForm.fromPhone,
-			OrderId: route.params.id, //传入id 排除重复工单选择自己
-		};
-		historyOrder(request)
-			.then((response: any) => {
-				state.tableData = response?.result.items ?? [];
-				state.total = response?.result.total;
-				setTimeout(() => {
-					state.historyOrderLoading = false;
-				}, 300);
-			})
-			.catch(() => {
-				state.historyOrderLoading = false;
-			});
-	}
-}, 500);
-// 补充信息
-const SupplyRef = ref<RefType>();
-const onSupply = (val: any) => {
-	SupplyRef.value.openDialog(val);
-};
-// 补充意见提交成功
-const onSupplySuccess = () => {
-	searchHistory();
-};
-onMounted(() => {
-	nextTick(async () => {
-		state.formLoading = true;
-		state.historyOrderLoading = true;
-		state.loading = true;
-		if (!route.params.id) {
-			ElMessage.warning('参数有误,请重新进入');
-			state.historyOrderLoading = false;
-			state.formLoading = false;
-			state.loading = false;
-			return;
-		}
-
-		try {
-			const [area, res, hotspot, response] = await Promise.all([treeArea(), orderBaseDataAdd(), getKeyWord(), orderDetail(route.params.id)]);
-			state.acceptTypeOptions = res.result?.acceptTypeOptions ?? [];
-			state.channelOptions = res.result?.channelOptions ?? [];
-			state.emergencyLevelOptions = res.result?.emergencyLevelOptions ?? [];
-			state.genderOptions = res.result?.genderOptions ?? [];
-			state.identityTypeOptions = res.result?.identityTypeOptions ?? [];
-			state.orderTypeOptions = res.result?.orderTypeOptions ?? [];
-			state.pushTypeOptions = res.result?.pushTypeOptions ?? [];
-			state.licenceTypeOptions = res.result?.licenceTypeOptions ?? [];
-			state.ageRangeOptions = res.result?.ageRangeOptions ?? [];
-			state.ruleForm.seats = `${userInfos.value.name} [${userInfos.value.staffNo}]`;
-			state.areaOptions = area.result ?? []; //省市区数据
-			state.hotWords = hotspot.result ?? []; // 知识库热词
-			// 如果获取到id 调用查询详情
-			state.ruleForm = response.result;
-			if (state.ruleForm.channel === 'RGDH') {
-				// 来源渠道为电话查询历史工单
-				searchHistory();
-			}
-			if (state.ruleForm.orderType === 1) {
-				// 工单类型 选择了12315市场监管受理单
-				state.acceptTypeOptions = state.acceptTypeOptions.map((item: any) => {
-					if ([30, 35].includes(item.key)) {
-						//直接投诉或者建议
-						return {
-							key: item.key,
-							value: item.value,
-							disabled: false,
-						};
-					} else {
-						return {
-							key: item.key,
-							value: item.value,
-							disabled: true,
-						};
-					}
-				});
-				state.expandFormMounted = true;
-			}
-			if (response.result.duplicateId) {
-				// 是否重复
-				state.ruleForm.isRepeat = 'true';
-				state.tableRadio = state.ruleForm.duplicateId;
-			} else {
-				state.ruleForm.isRepeat = 'false';
-			}
-			if (response.result.hotspotExternal) {
-				//热点分类默认展开
-				state.hotspotExternal = state.ruleForm.hotspotExternal.split(',');
-			}
-			state.ruleForm.ageRangeObj = {
-				// 年龄段
-				dicDataValue: state.ruleForm.ageRangeCode,
-				dicDataName: state.ruleForm.ageRange,
-			};
-			state.ruleForm.licenceTypeObj = {
-				// 证件类型
-				dicDataValue: state.ruleForm.licenceTypeCode,
-				dicDataName: state.ruleForm.licenceType,
-			};
-			state.ruleForm.pushTypeObj = {
-				// 推送分类
-				dicDataValue: state.ruleForm.pushTypeCode,
-				dicDataName: state.ruleForm.pushType,
-			};
-			knowledgeRetrievalPaged(state.ruleForm.hotspotName);
-			state.historyOrderLoading = false;
-			state.formLoading = false;
-			state.loading = false;
-		} catch (error) {
-			state.historyOrderLoading = false;
-			state.formLoading = false;
-			state.loading = false;
-		}
-	});
-});
-</script>
-
-<style scoped lang="scss">
-.box {
-	background-color: var(--el-color-white);
-	border-radius: 8px;
-}
-
-:deep(.el-divider--horizontal) {
-	margin-top: 0;
-}
-
-.order-edit-container {
-	color: var(--hotline-color-text-main);
-
-	.right-content {
-		&-knowledge {
-			.knowledge-container {
-				position: relative;
-
-				.knowledge-input {
-					:deep(.el-input__wrapper) {
-						border-radius: 20px;
-						background: var(--hotline-bg-main-color);
-					}
-				}
-
-				.knowledge-search-button {
-					height: calc(100% - 6px);
-				}
-
-				.indent {
-					text-indent: 1em;
-					color: var(--hotline-color-text-main-light);
-					line-height: 20px;
-				}
-			}
-		}
-	}
-}
-</style>

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

@@ -1,310 +1,333 @@
 <template>
-	<div>
-		<el-dialog v-model="state.dialogVisible" draggable title="工单详情" ref="dialogRef" width="80%" append-to-body destroy-on-close>
-			<el-tabs v-model="state.activeName" class="demo-tabs" @tab-change="handleClick">
-				<el-tab-pane :name="item.value" v-for="item in state.tabPaneList" :key="item.value" :label="item.label"></el-tab-pane>
-			</el-tabs>
-			<!-- 工单详情 -->
-			<el-collapse v-model="state.collapseArr" v-if="state.activeName === '0'" class="collapse-box" v-loading="state.loading">
-				<!-- 来电信息 -->
-				<el-collapse-item name="1">
-					<template #title>
-						<p class="pl20">
-							<b class="font14">来电信息</b>
-						</p>
-					</template>
-					<div class="collapse-container pb1">
-						<el-form label-width="100px" ref="ruleFormRef">
-							<el-row :gutter="35">
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
-									<el-form-item label="来源渠道"> {{ state.ruleForm.channelText }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
-									<el-form-item label="转接来源"> {{ state.ruleForm.transferPhone }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.fromPhone">
-									<el-form-item label="来电号码">
-										{{ state.ruleForm.fromPhone }}
-										<!-- <el-popover :width="480" trigger="hover">
-											<template #reference>
-												<el-button link type="primary" class="ml5" title="播放录音"><SvgIcon name="ele-Headset" size="16px" /></el-button>
-											</template>
-											<AudioPlayer ref="AudioPlayerRef" :url="state.ruleForm.url" />
-										</el-popover> -->
-									</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
-									<el-form-item label="服务坐席"> {{ state.ruleForm.employeeName }}[{{ state.ruleForm.employeeStaffNo }}] </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
-									<el-form-item label="来电/信人">
-										{{ state.ruleForm.fromName }} <span v-if="state.ruleForm.fromGenderText !== '未知'"> {{ state.ruleForm.fromGenderText }}</span>
-									</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
-									<el-form-item label="来电/信人身份"> {{ state.ruleForm.identityTypeText }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.licenceType">
-									<el-form-item label="证件类型"> {{ state.ruleForm.licenceType }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.licenceNo">
-									<el-form-item label="证件号码"> {{ state.ruleForm.licenceNo }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.ageRange">
-									<el-form-item label="年龄段"> {{ state.ruleForm.ageRange }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.needContact">
-									<el-form-item label="联系电话"> 无需联系 </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-else>
-									<el-form-item label="联系电话"> {{ state.ruleForm.contactMask }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
-									<el-form-item label="受理短信">
-										<span style="color: var(--el-color-danger)" v-if="state.ruleForm.acceptSms"
-											>未发送<el-button link type="primary" class="ml5" title="重新发送"
-												><SvgIcon name="iconfont icon-zhongxinfasong" size="16px" /></el-button
-										></span>
-									</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
-									<el-form-item label="受理时间"> {{ formatDate(state.ruleForm.startTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.company">
-									<el-form-item label="工作单位"> {{ state.ruleForm.company }} </el-form-item>
-								</el-col>
-							</el-row>
-						</el-form>
-					</div>
-				</el-collapse-item>
-				<!-- 诉求信息 -->
-				<el-collapse-item name="2">
-					<template #title>
-						<p class="pl20">
-							<b class="font14">诉求信息</b>
-						</p>
-					</template>
-					<div class="collapse-container pb1">
-						<el-form label-width="100px" ref="ruleFormRef">
-							<el-row :gutter="35">
-								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-									<el-form-item label="工单标题">
-										{{ state.ruleForm.title }} <el-tag class="ml10">{{ state.ruleForm.statusText }}</el-tag>
-									</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
-									<el-form-item label="工单编码"> {{ state.ruleForm.no }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
-									<el-form-item label="紧急程度"> {{ state.ruleForm.emergencyLevelText }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
-									<el-form-item label="受理类型"> {{ state.ruleForm.acceptTypeText }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
-									<el-form-item label="工单类型">
-										{{ state.ruleForm.orderTypeText }}
-										<!-- 投诉或者建议并且是12315工单才有扩展信息 -->
-										<el-button
-											link
-											type="primary"
-											v-if="state.ruleForm.orderType === 1 && (state.ruleForm.acceptType === 30 || state.ruleForm.acceptType === 35)"
-											class="ml10"
-											@click="showExpandInfo"
-											><SvgIcon name="ele-Document" class="mr2" /> 拓展信息</el-button
-										>
-									</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16">
-									<el-form-item label="热点分类"> {{ state.ruleForm.hotspotSpliceName }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" v-if="state.ruleForm.incidentTime">
-									<el-form-item label="事发时间"> {{ formatDate(state.ruleForm.incidentTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16" v-if="state.ruleForm.address">
-									<el-form-item label="事发地址"> {{ state.ruleForm.address }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-									<el-form-item label="重复工单" v-if="state.ruleForm.duplicateTitle">
-										<el-button link type="primary" @click="showDuplicateInfo"> {{ state.ruleForm.duplicateTitle }}</el-button>
-									</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.pushType">
-									<el-form-item label="推送分类"> {{ state.ruleForm.pushType }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-									<el-form-item label="投诉详情">
-										{{ state.ruleForm.content }}
-									</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.additions && state.ruleForm.additions.length">
-									<el-form-item label="附件"> </el-form-item>
-								</el-col>
-							</el-row>
-						</el-form>
-					</div>
-				</el-collapse-item>
-				<!-- 补充信息 -->
-				<el-collapse-item name="3" v-if="state.supplements && state.supplements.length">
-					<template #title>
-						<p class="pl20">
-							<b class="font14">补充信息</b>
-						</p>
-					</template>
-					<div class="collapse-container">
-						<div v-for="(i, index) in state.supplements" :key="i" class="plug-container">
-							<p class="plug-container-title">第{{ verifyNumberCnUppercase(index + 1) }}次</p>
-							<el-form label-width="100px" ref="ruleFormRef" class="pt10 pb10">
-								<el-row :gutter="35">
-									<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-										<el-form-item label="补充人">
-											{{ i.creator.name }} <span v-if="i.creator.staffNo">[{{ i.creator.staffNo }} ]</span>
-										</el-form-item>
-									</el-col>
-									<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-										<el-form-item label="补充时间"> {{ formatDate(i.creationTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
-									</el-col>
-									<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-										<el-form-item label="补充详情">
-											{{ i.opinion }}
-										</el-form-item>
-									</el-col>
-									<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="i.additions && i.additions.length">
-										<el-form-item label="附件"> </el-form-item>
-									</el-col>
-								</el-row>
-							</el-form>
-						</div>
-					</div>
-				</el-collapse-item>
-				<!-- 办件结果 -->
-				<el-collapse-item name="4" v-if="state.workflow.assignOrgs">
-					<template #title>
-						<p class="pl20">
-							<b class="font14">办件结果</b>
-						</p>
-					</template>
-					<div class="collapse-container pb1">
-						<el-form label-width="100px" ref="ruleFormRef">
-							<el-row :gutter="35">
-								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-									<el-form-item label="接办部门"> {{ state.workflow.assignOrgs }}</el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6">
-									<el-form-item label="交办时间"> {{ formatDate(state.workflow.assignTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6">
-									<el-form-item label="办理时限"> {{ state.workflow.timeLimit }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6">
-									<el-form-item label="办理期限"> {{ formatDate(state.workflow.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
-								</el-col>
-								<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6">
-									<el-form-item label="办理时间"> {{ formatDate(state.workflow.completeTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
-								</el-col>
-								<!-- <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6">
-									<el-form-item label="办理时间">
-										{{ formatDate(state.ruleForm.workflow.completeTime, 'YYYY-mm-dd HH:MM:SS') }}
-										<el-popover placement="top-start" popper-class="demo-tabs-form" :width="state.extensionList.length >= 1 ? 400 : 300" trigger="hover">
-											<template #reference>
-												<el-tag class="ml10" style="cursor: pointer" type="danger">已延期 </el-tag>
-											</template>
-											<p class="title"><b>延期申请记录</b></p>
-											<template v-if="state.extensionList.length >= 1">
-												<el-tabs tab-position="left" v-model="state.extensionState">
-													<el-tab-pane :label="'第' + index + '次'" :name="item.id" v-for="(item, index) in state.extensionList" :key="index">
-														<template v-if="state.extensionState === index + 1">
-															<el-form label-width="100px" ref="ruleFormRef">
-																<el-row :gutter="0">
-																	<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-																		<el-form-item label="原办理期限">{{ formatDate(state.ruleForm.startTime, 'YYYY-mm-dd HH:MM:SS') }}</el-form-item>
-																	</el-col>
-																	<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-																		<el-form-item label="申请部门">市场监管部门</el-form-item>
-																	</el-col>
-																	<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-																		<el-form-item label="申请时间">{{ formatDate(state.ruleForm.startTime, 'YYYY-mm-dd HH:MM:SS') }}</el-form-item>
-																	</el-col>
-																	<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-																		<el-form-item label="申请延期">{{ index + 1 }}个工作日</el-form-item>
-																	</el-col>
-																	<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-																		<el-form-item label="新办理期限">{{ formatDate(state.ruleForm.startTime, 'YYYY-mm-dd HH:MM:SS') }}</el-form-item>
-																	</el-col>
-																</el-row>
-															</el-form>
-														</template>
-													</el-tab-pane>
-													<template> </template>
-												</el-tabs>
-											</template>
-											<template v-else>
-												<el-form label-width="100px" ref="ruleFormRef">
-													<el-form-item label="原办理期限">{{ formatDate(state.ruleForm.startTime, 'YYYY-mm-dd HH:MM:SS') }}</el-form-item>
-													<el-form-item label="申请部门">市场监管部门</el-form-item>
-													<el-form-item label="申请时间">{{ formatDate(state.ruleForm.startTime, 'YYYY-mm-dd HH:MM:SS') }}</el-form-item>
-													<el-form-item label="申请延期">3个工作日</el-form-item>
-													<el-form-item label="新办理期限">{{ formatDate(state.ruleForm.startTime, 'YYYY-mm-dd HH:MM:SS') }}</el-form-item>
-												</el-form>
-											</template>
-										</el-popover>
-									</el-form-item>
-								</el-col> -->
-								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-									<el-form-item label="办理意见"> {{ state.workflow.opinion }} </el-form-item>
-								</el-col>
-							</el-row>
-						</el-form>
-					</div>
-				</el-collapse-item>
-			</el-collapse>
+    <el-dialog v-model="state.dialogVisible" class="order-detail-dialog"  draggable ref="dialogRef" width="80%" append-to-body destroy-on-close>
+        <template #header>
+          <el-tabs v-model="state.activeName" @tab-change="handleClick">
+            <el-tab-pane :name="item.value" v-for="item in state.tabPaneList" :key="item.value" :label="item.label"></el-tab-pane>
+          </el-tabs>
+        </template>
 
-			<template #footer>
+        <el-collapse v-model="state.collapseArr" v-if="state.activeName === '0'" class="collapse-box" v-loading="state.loading">
+          <el-collapse-item name="1">
+            <template #title>
+              <p class="pl20">
+                <b class="font14">来电人信息</b>
+              </p>
+            </template>
+            <div class="collapse-container pb1">
+              <el-form label-width="100px" ref="ruleFormRef">
+                <el-row :gutter="10">
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="转接来源"> {{ state.ruleForm.sourceChannel }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.fromPhone">
+                    <el-form-item label="来电号码">
+                      {{ state.ruleForm.fromPhone }}
+                      <el-button plain title="录音文件" size="small" type="primary" class="ml8" @click="callPhone(state.ruleForm.fromPhone)">录音文件</el-button>
+                      <!-- <el-popover :width="480" trigger="hover">
+                        <template #reference>
+                          <el-button link type="primary" class="ml5" title="播放录音"><SvgIcon name="ele-Headset" size="16px" /></el-button>
+                        </template>
+                        <AudioPlayer ref="AudioPlayerRef" :url="state.ruleForm.url" />
+                      </el-popover> -->
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="来电人姓名">
+                      {{ state.ruleForm.fromName }} <span class="ml5"> {{ state.ruleForm.fromGenderText }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="号码归属地">
+                      {{ state.ruleForm.fromName }}
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="来电人性别">
+                      {{ state.ruleForm.fromGenderText }}
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.contact">
+                    <el-form-item label="联系电话">
+                      <span v-if="showMaskNumber"> {{ state.ruleForm.contactMask }}</span>
+                      <span v-else>{{ state.ruleForm.contact }}</span>
+                      <el-button plain title="外呼" size="small" type="primary" class="ml8" @click="callPhone(state.ruleForm.contact)">外呼</el-button>
+                      <el-button plain title="查看号码" size="small" type="primary" class="ml8" @click="showMaskNumber = !showMaskNumber">{{ showMaskNumber? '查看号码' : '隐藏号码'  }}</el-button>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="来电人身份"> {{ state.ruleForm.identityTypeText }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="受理短信"> {{ state.ruleForm.smsSendedText }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                    <el-form-item label="事发地址"> {{ state.ruleForm.address }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.company">
+                    <el-form-item label="工作单位"> {{ state.ruleForm.company }} </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form>
+            </div>
+          </el-collapse-item>
+          <el-collapse-item name="2">
+            <template #title>
+              <p class="pl20">
+                <b class="font14">工单信息</b>
+              </p>
+            </template>
+            <div class="collapse-container pb1">
+              <el-form label-width="100px" ref="ruleFormRef">
+                <el-row :gutter="10">
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="来源方式"> {{ state.ruleForm.no }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="受理类型"> {{ state.ruleForm.acceptTypeText }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="工单编码"> {{ state.ruleForm.no }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="省工单编码"> {{ state.ruleForm.no }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="工单类型">
+                      {{ state.ruleForm.orderTypeText }}
+                      <!-- 投诉或者建议并且是12315工单才有扩展信息 -->
+                      <el-button
+                          link
+                          type="primary"
+                          v-if="state.ruleForm.orderType === 1 && (state.ruleForm.acceptType === 30 || state.ruleForm.acceptType === 35)"
+                          class="ml10"
+                          @click="showExpandInfo"
+                      ><SvgIcon name="ele-Document" class="mr2" /> 拓展信息</el-button>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="是否重复">
+                      {{ state.ruleForm.isDuplicateText }}
+                      <el-button plain title="查看重复工单" size="small" type="primary" class="ml8" @click="showDuplicateInfo">查看重复工单</el-button>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="紧急程度"> {{ state.ruleForm.emergencyLevelText }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="热点分类"> {{ state.ruleForm.hotspotSpliceName }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.incidentTime">
+                    <el-form-item label="受理人"> {{ formatDate(state.ruleForm.incidentTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.incidentTime">
+                    <el-form-item label="受理时间"> {{ formatDate(state.ruleForm.incidentTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-if="state.ruleForm.pushType">
+                    <el-form-item label="推送分类"> {{ state.ruleForm.pushType }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                    <el-form-item label="工单标题">
+                      {{ state.ruleForm.title }} <el-tag class="ml10">{{ state.ruleForm.statusText }}</el-tag>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                    <el-form-item label="受理内容">
+                      {{ state.ruleForm.content }}
+                    </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.additions && state.ruleForm.additions.length">
+                    <el-form-item label="附件"> </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form>
+            </div>
+          </el-collapse-item>
+          <el-collapse-item name="3" v-if="state.workflow.assignOrgs">
+            <template #title>
+              <p class="pl20">
+                <b class="font14">结果信息</b>
+              </p>
+            </template>
+            <div class="collapse-container pb1">
+              <el-form label-width="100px" ref="ruleFormRef">
+                <el-row :gutter="10">
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                    <el-form-item label="交办部门"> {{ state.workflow.assignOrgs }}</el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6">
+                    <el-form-item label="交办时间"> {{ formatDate(state.workflow.assignTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="办理部门"> {{ state.workflow.assignOrgs }}</el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="办理时间"> {{ state.workflow.timeLimit }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="工单办理期限"> {{ formatDate(state.workflow.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="工单期满时间"> {{ formatDate(state.workflow.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                    <el-form-item label="办理结果"> {{ state.workflow.opinion }} </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form>
+            </div>
+          </el-collapse-item>
+          <el-collapse-item name="4" v-if="state.supplements && state.supplements.length">
+            <template #title>
+              <p class="pl20">
+                <b class="font14">补充信息</b>
+              </p>
+            </template>
+            <div class="collapse-container">
+              <div v-for="i in state.supplements" :key="i" class="plug-container">
+                <el-form label-width="100px" ref="ruleFormRef" class="pt10 pb10">
+                  <el-row :gutter="10">
+                    <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                      <el-form-item label="补充部门">
+                        {{ i.creator.organization }}
+                      </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                      <el-form-item label="补充时间"> {{ formatDate(i.creationTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                      <el-form-item label="补充人"> {{ i.creator.name }} <span v-if="i.creator.staffNo">[{{ i.creator.staffNo }} ]</span></el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                      <el-form-item label="补充详情">
+                        {{ i.opinion }}
+                      </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                      <el-form-item label="附件">
+                        <annex-list></annex-list>
+                      </el-form-item>
+                    </el-col>
+                  </el-row>
+                </el-form>
+              </div>
+            </div>
+          </el-collapse-item>
+          <el-collapse-item name="5" v-if="state.workflow.assignOrgs">
+            <template #title>
+              <p class="pl20">
+                <b class="font14">回访信息</b>
+              </p>
+            </template>
+            <div class="collapse-container pb1">
+              <el-form label-width="100px" ref="ruleFormRef">
+                <el-row :gutter="10">
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="语音评价"> {{ state.workflow.assignOrgs }}</el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="话务员评价"> {{ formatDate(state.workflow.assignTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="补充人"> {{ state.workflow.timeLimit }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="被回访部门"> {{ formatDate(state.workflow.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="办件结果"> {{ formatDate(state.workflow.completeTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="办件态度"> {{ formatDate(state.workflow.completeTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                    <el-form-item label="回访内容"> {{ formatDate(state.workflow.completeTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="被回访部门"> {{ formatDate(state.workflow.completeTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="办件结果"> {{ formatDate(state.workflow.completeTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="办件态度"> {{ formatDate(state.workflow.completeTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                    <el-form-item label="回访内容"> {{ state.workflow.opinion }} </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form>
+            </div>
+          </el-collapse-item>
+          <el-collapse-item name="6" v-if="state.workflow.assignOrgs">
+            <template #title>
+              <p class="pl20">
+                <b class="font14">重办信息</b>
+              </p>
+            </template>
+            <div class="collapse-container pb1">
+              <el-form label-width="100px" ref="ruleFormRef">
+                <el-row :gutter="10">
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="被重办部门"> {{ state.workflow.assignOrgs }}</el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="重办时间"> {{ formatDate(state.workflow.assignTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                    <el-form-item label="重办理由"> {{ state.workflow.timeLimit }} </el-form-item>
+                  </el-col>
+                  <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                    <el-form-item label="重办原因"> {{ state.workflow.opinion }} </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form>
+            </div>
+          </el-collapse-item>
+        </el-collapse>
+
+        <template #footer>
 				<span class="dialog-footer">
 					<el-button type="primary" @click="onRecord" :loading="state.loading" v-auth="'system:workflow:record'">流转记录</el-button>
-					<!-- 工单未归档和可以办理展示办理按钮 -->
+          <!-- 工单未归档和可以办理展示办理按钮 -->
 					<el-button
-						type="primary"
-						@click="onSubmit('提交', 'next')"
-						:loading="state.loading"
-						v-if="state.ruleForm.workflow?.status !== 60 && state.workflow.canHandle"
-						v-auth="'system:workflow:handle'"
-						>办 理</el-button
-					>
+              type="primary"
+              @click="onSubmit('工单办理')"
+              :loading="state.loading"
+              v-if="state.ruleForm.workflow?.status !== 60 && state.workflow.canHandle"
+              v-auth="'business:order:handle'"
+          >办 理</el-button
+          >
 					<el-button type="primary" @click="onDelay" v-auth="'business:order:delay'" :loading="state.loading">延 期</el-button>
-					<!-- 流程结束之后不展示补充按钮 -->
+          <!-- 流程结束之后不展示补充按钮 -->
 					<el-button type="primary" @click="onSupply" :loading="state.loading" v-if="state.workflow.status === 0" v-auth="'business:order:supply'"
-						>补 充</el-button
-					>
+          >补 充</el-button
+          >
 					<el-button type="primary" @click="onSupervise" :loading="state.loading" v-auth="'business:order:supervise'">督 办</el-button>
 					<el-button type="primary" @click="onRevoke" :loading="state.loading" v-auth="'business:order:revoke'">撤 销</el-button>
-					<!-- 工单未归档都可以撤回 -->
+          <!-- 工单未归档都可以撤回 -->
 					<el-button
-						type="primary"
-						@click="onSubmit('撤回', 'recall')"
-						:loading="state.loading"
-						v-if="state.ruleForm.workflow?.status === 0"
-						v-auth="'system:workflow:recall'"
-						>撤 回</el-button
-					>
-					<!-- 工单未归档和可以办理展示退回按钮 -->
+              type="primary"
+              @click="onSubmit('工单撤回')"
+              :loading="state.loading"
+              v-if="state.ruleForm.workflow?.status === 0"
+              v-auth="'business:order:recall'"
+          >撤 回</el-button
+          >
+          <!-- 工单未归档和可以办理展示退回按钮 -->
 					<el-button
-						type="primary"
-						@click="onSubmit('退回', 'return')"
-						:loading="state.loading"
-						v-if="state.ruleForm.workflow?.status !== 60 && state.workflow.canHandle"
-						v-auth="'system:workflow:return'"
-						>退 回</el-button
-					>
+              type="primary"
+              @click="onSubmit('工单退回')"
+              :loading="state.loading"
+              v-if="state.ruleForm.workflow?.status !== 60 && state.workflow.canHandle"
+              v-auth="'business:order:return'"
+          >退 回</el-button
+          >
 				</span>
-			</template>
-		</el-dialog>
-		<!-- 处理流程 -->
-		<order-process ref="OrderProcessRef" @orderProcessSuccess="orderProcessSuccess" @orderProcessFailed="orderProcessFailed" />
+        </template>
+      </el-dialog>
 		<!-- 扩展信息 -->
 		<order-expand-detail ref="orderExpandDetailRef" />
 		<!-- 流转记录 -->
-		<!--		<order-circulation-record ref="orderCirculationRecordRef" />-->
 		<audit-record ref="AuditRecordRef">
 			<template #header>
 				<el-form label-width="90px" ref="ruleFormRef">
@@ -327,7 +350,8 @@
 		<order-delay ref="orderDelayRef" @OnDelaySuccess="OnDelaySuccess" />
 		<!-- 工单督办 -->
 		<order-super-vise ref="orderSuperviseRef" @onSuperviseSuccess="onSuperviseSuccess" />
-	</div>
+    <!--  流程审批  -->
+    <process-approval ref="processApprovalRef" @orderProcessSuccess="orderProcessSuccess" />
 </template>
 
 <script setup lang="ts" name="orderDetail">
@@ -335,20 +359,20 @@ import { defineAsyncComponent, reactive, ref } from 'vue';
 import { useRouter } from 'vue-router';
 import { throttle } from '/@/utils/tools';
 import { commonEnum } from '/@/utils/constants';
-import { verifyNumberCnUppercase } from '/@/utils/toolsValidate';
 import { orderDetail } from '/@/api/business/order';
 import { formatDate } from '/@/utils/formatTime';
 import {ElMessage} from "element-plus";
+import { VoiceInterfaceObject } from '/@/utils/PhoneScript';
 
 // 引入组件
 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 AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
+const ProcessApproval = defineAsyncComponent(() => import('/@/components/ProcessApproval/index.vue'));  // 流程审批
 // const AudioPlayer = defineAsyncComponent(() => import('/@/components/AudioPlayer/index.vue'));
 
 // 定义子组件向父组件传值/事件
@@ -404,6 +428,7 @@ const state = reactive<any>({
 	workflow: {},
 	orderId: '',
 });
+const showMaskNumber = ref<boolean>(true); // 是否展示号码
 const ruleFormRef = ref<RefType>(); // 表单ref
 const router = useRouter(); // 路由
 // 打开弹窗
@@ -447,7 +472,7 @@ const showExpandInfo = () => {
 	}
 	orderExpandDetailRef.value.openDialog(form);
 };
-// 展示重复工单详情
+// 展示重复工单列表
 const showDuplicateInfo = () => {
 	state.dialogVisible = false;
 	router.push({
@@ -462,6 +487,10 @@ const showDuplicateInfo = () => {
 const closeDialog = () => {
 	state.dialogVisible = false;
 };
+// 电话外呼
+const callPhone = (number:number|string)=>{
+  VoiceInterfaceObject.DialOut(number);// 呼叫
+}
 // 切换tab 查询列表
 const handleClick = (val: string) => {
 	console.log(val);
@@ -476,20 +505,25 @@ 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 });
+const processApprovalRef = ref<RefType>(); // 处理流程
+const onSubmit = throttle((val: string) => {
+  const params = {
+    id: state.ruleForm.workflowId,
+    commonEnum: commonEnum.OrderCirculation,
+    processType: val,
+    extra:{
+      dialogTitle: val,
+      inputPlaceholder:'办理意见',
+      annexName:"办理附件",
+    }
+  }
+  processApprovalRef.value.openDialog(params);
 }, 1000);
 // 流程提交成功
 const orderProcessSuccess = () => {
 	closeDialog();
 	emit('updateList');
 };
-// 流程提交失败
-const orderProcessFailed = () => {
-	closeDialog();
-	emit('updateList');
-};
 // 补充信息
 const orderSupplyRef = ref<RefType>(); // 工单补充
 const onSupply = () => {
@@ -503,7 +537,18 @@ const onSupplySuccess = () => {
 // 延期
 const orderDelayRef = ref<RefType>(); // 工单延期
 const onDelay = () => {
-	orderDelayRef.value.openDialog(state.ruleForm);
+  const params = {
+    id: state.orderId,
+    commonEnum: commonEnum.Delay,
+    processType: '延期申请',
+    orderDetail:state.ruleForm,
+    extra:{
+      dialogTitle: '延期申请',
+      inputPlaceholder:'办理意见',
+      annexName:"延期附件",
+    }
+  }
+  processApprovalRef.value.openDialog(params);
 };
 // 延期提交成功
 const OnDelaySuccess = () => {
@@ -558,24 +603,18 @@ defineExpose({
 			&:last-child {
 				margin-bottom: 0;
 			}
-			.plug-container-title {
-				padding: 10px 15px;
-				font-weight: bold;
-				border-bottom: var(--el-border);
-				font-size: var(--el-font-size-medium);
-			}
 		}
 	}
 }
+:deep(.el-tabs__item){
+  font-size: var(--el-font-size-base);
+}
 </style>
 <style lang="scss">
-.demo-tabs-form {
-	.title {
-		font-size: var(--el-font-size-medium);
-		padding: 10px 15px 20px 15px;
-	}
-	.el-form-item {
-		margin-bottom: 0 !important;
-	}
+.order-detail-dialog{
+  .el-dialog__header{
+    border:0 !important;
+    padding:10px 20px !important;
+  }
 }
 </style>

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

@@ -627,7 +627,7 @@ const state = reactive<any>({
     industryClassifyCode: '', //行业分类code
     brand: '', //商品分类/品牌
     brandCode: '', //商品分类/品牌code
-    amount: '', // 消费金额
+    amount: 0, // 消费金额
     objectClassify: '', //客体类别
     objectClassifyCode: '', //客体类别code
     objectName: '', //客体名称

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

@@ -1,6 +1,15 @@
 <template>
 	<div>
-		<el-dialog v-model="state.dialogVisible" draggable title="撤销工单" append-to-body>
+		<el-dialog
+			v-model="state.dialogVisible"
+			draggable
+			title="撤销工单"
+			@mouseup="mouseup"
+			:style="'transform: ' + state.transform + ';'"
+			ref="dialogRef"
+			append-to-body
+      :before-close="handleClose"
+		>
 			<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
@@ -15,35 +24,33 @@
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="撤销人">
-							{{ state.ruleForm.title }}
+							{{ userInfos.name }}
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="撤销部门">
-							{{ state.ruleForm.title }}
+							{{ userInfos.orgName }}
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="撤销时间">
-							{{ state.ruleForm.title }}
+							{{ formatDate(dateNow, 'YYYY-mm-dd HH:MM:SS') }}
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="发送撤销短信" prop="acceptSms" :rules="[{ required: false, message: '请选择发送督办短信', trigger: 'change' }]">
+						<el-form-item label="撤销短信" prop="acceptSms" :rules="[{ required: false, message: '请选择发送督办短信', trigger: 'change' }]">
 							<el-checkbox v-model="state.ruleForm.acceptSms" label="发送撤销短信" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="撤销原因" class="textarea" prop="opinion" :rules="[{ required: true, message: '请填写撤销原因', trigger: 'blur' }]">
-							<el-input
-								v-model="state.ruleForm.opinion"
-								type="textarea"
-								:autosize="{ minRows: 10, maxRows: 10 }"
+						<el-form-item label="撤销原因" class="textarea" prop="content" :rules="[{ required: true, message: '请填写撤销原因', trigger: 'blur' }]">
+							<common-advice
+								@chooseAdvice="chooseAdvice"
+								v-model="state.ruleForm.content"
 								placeholder="请填写撤销原因"
-								clearable
-								max-length="2000"
-							>
-							</el-input>
+								:loading="state.loading"
+								:commonEnum="commonEnum.OrderCirculation"
+							/>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -68,9 +75,14 @@ import { reactive, ref, defineAsyncComponent } from 'vue';
 import { ElMessageBox, FormInstance } from 'element-plus';
 import { throttle } from '/@/utils/tools';
 import { supplement } from '/@/api/system/workflow';
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
+import { formatDate } from '/@/utils/formatTime';
+import { commonEnum } from '/@/utils/constants';
 
 // 引入组件
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue')); // 附件列表
+const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['onSupplySuccess']);
@@ -78,30 +90,47 @@ const emit = defineEmits(['onSupplySuccess']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		opinion: '',  // 撤销原因
+		opinion: '', // 撤销原因
 		additions: [], // 附件
 		workflowId: '', // 流程id
 	},
 	fileList: [], // 附件列表
 	loading: false, // 提交按钮loading
+  transform: 'translate(0px, 0px)', // 滚动条位置
 });
 const ruleFormRef = ref<RefType>();
+const storesUserInfo = useUserInfo();
+const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
+const dateNow = new Date(); // 当前时间
 // 打开弹窗
 const openDialog = async (val: any) => {
-	ruleFormRef.value?.clearValidate();
-	ruleFormRef.value?.resetFields();
 	state.ruleForm = val;
 	state.ruleForm.workflowId = val.workflowId;
 	state.dialogVisible = true;
 };
 // 关闭弹窗
 const closeDialog = () => {
+  ruleFormRef.value.clearValidate();
+  ruleFormRef.value.resetFields();
 	state.dialogVisible = false;
 };
 // 取消
 const onCancel = () => {
 	closeDialog();
 };
+const handleClose = (done: any) => {
+  closeDialog();
+  done();
+};
+// 选中常用意见
+const chooseAdvice = (item: any) => {
+	state.ruleForm.content += item.content;
+};
+// 设置抽屉
+const dialogRef = ref<RefType>();
+const mouseup = () => {
+	state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
+};
 // 提交
 const onSubmit = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;

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

@@ -1,6 +1,15 @@
 <template>
 	<div>
-		<el-dialog v-model="state.dialogVisible" draggable title="补充信息" append-to-body>
+		<el-dialog
+			v-model="state.dialogVisible"
+			draggable
+			title="补充信息"
+			append-to-body
+			@mouseup="mouseup"
+			:style="'transform: ' + state.transform + ';'"
+      ref="dialogRef"
+      :before-close="handleClose"
+		>
 			<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
@@ -15,35 +24,33 @@
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="补充人">
-							{{ state.showForm.title }}
+							{{ userInfos.name }}
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="补充部门">
-							{{ state.showForm.title }}
+							{{ userInfos.orgName }}
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="补充时间">
-							{{ state.showForm.title }}
+							{{ formatDate(dateNow, 'YYYY-mm-dd HH:MM:SS') }}
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="补充内容" class="textarea" prop="opinion" :rules="[{ required: true, message: '请填写补充内容', trigger: 'blur' }]">
-							<el-input
-								v-model="state.ruleForm.opinion"
-								type="textarea"
-								:autosize="{ minRows: 10, maxRows: 10 }"
-								placeholder="请填写补充内容"
-								clearable
-								max-length="2000"
-							>
-							</el-input>
+						<el-form-item label="补充内容" class="textarea" prop="content" :rules="[{ required: true, message: '请填写补充内容', trigger: 'blur' }]">
+              <common-advice
+                  @chooseAdvice="chooseAdvice"
+                  v-model="state.ruleForm.content"
+                  placeholder="请填写补充内容"
+                  :loading="state.loading"
+                  :commonEnum="commonEnum.HandleAgain"
+              />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="附件" prop="additions">
-							<annex-list />
+							<annex-list name="补充附件" />
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -63,9 +70,14 @@ import { reactive, ref, defineAsyncComponent } from 'vue';
 import { ElMessageBox, FormInstance } from 'element-plus';
 import { throttle } from '/@/utils/tools';
 import { supplement } from '/@/api/system/workflow';
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
+import { formatDate } from '/@/utils/formatTime';
+import {commonEnum} from "/@/utils/constants";
 
 // 引入组件
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue')); // 附件列表
+const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['onSupplySuccess']);
@@ -73,31 +85,48 @@ const emit = defineEmits(['onSupplySuccess']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		opinion: '',  // 补充内容
+		opinion: '', // 补充内容
 		additions: [], // 附件
 		workflowId: '', // 流程id
 	},
 	showForm: {}, // 工单信息
 	fileList: [], // 附件列表
 	loading: false, // 提交按钮loading
+  transform: 'translate(0px, 0px)', // 滚动条位置
 });
 const ruleFormRef = ref<RefType>();
+const storesUserInfo = useUserInfo();
+const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
+const dateNow = new Date(); // 当前时间
 // 打开弹窗
 const openDialog = async (val: any) => {
-	ruleFormRef.value?.clearValidate();
-	ruleFormRef.value?.resetFields();
 	state.showForm = val;
 	state.ruleForm.workflowId = val.workflowId;
 	state.dialogVisible = true;
 };
 // 关闭弹窗
 const closeDialog = () => {
+  ruleFormRef.value.clearValidate();
+  ruleFormRef.value.resetFields();
 	state.dialogVisible = false;
 };
 // 取消
 const onCancel = () => {
 	closeDialog();
 };
+const handleClose = (done: any) => {
+  closeDialog();
+  done();
+};
+// 选中常用意见
+const chooseAdvice = (item: any) => {
+  state.ruleForm.content += item.content;
+};
+// 设置抽屉
+const dialogRef = ref<RefType>();
+const mouseup = () => {
+  state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
+};
 // 提交
 const onSubmit = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;

+ 6 - 5
src/views/business/order/index.vue

@@ -469,11 +469,12 @@ const onOrderDetail = (row: any) => {
 // 编辑工单
 const onOrderEdit = (row: any) => {
 	router.push({
-		name: 'orderEdit',
-		params: {
-			id: row.id,
-			tagsViewName: '工单受理-' + row.no,
-		},
+		name: 'orderAccept',
+    params:{
+      tagsViewName: '工单受理-' + row.no,
+      id: row.id,
+      callId:'0',
+    }
 	});
 };
 // 删除工单

+ 17 - 7
src/views/business/release/index.vue

@@ -178,8 +178,8 @@
 		</el-card>
 		<!-- 工单发布详情 -->
 		<order-release ref="orderReleaseRef" @updateList="queryList" />
-    <!-- 工单重办 -->
-    <order-re-do ref="orderRedoRef" @updateList="queryList" />
+    <!--  流程审批  -->
+    <process-approval ref="processApprovalRef" @orderProcessSuccess="queryList" />
 	</div>
 </template>
 <script setup lang="ts" name="orderRelease">
@@ -188,11 +188,11 @@ import { hotSpotType, listBaseData } from '/@/api/business/order';
 import { ElButton, ElMessage, FormInstance } from 'element-plus';
 import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
-import { shortcuts } from '/@/utils/constants';
+import {commonEnum, shortcuts} from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 // 引入组件
 const OrderRelease = defineAsyncComponent(() => import('/@/views/business/release/component/Order-release.vue'));
-const OrderReDo = defineAsyncComponent(() => import('/@/views/business/release/component/Order-reDo.vue'));
+const ProcessApproval = defineAsyncComponent(() => import('/@/components/ProcessApproval/index.vue'));  // 流程审批
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const searchCol = ref(true); // 是否显示搜索栏
@@ -317,10 +317,20 @@ const releaseContent = (row: any) => {
   console.log('发布内容');
 };
 // 工单重办
-const orderRedoRef = ref<RefType>();  // 工单重办ref
+const processApprovalRef = ref<RefType>();  // 流程审批ref
 const OnOrderRedo = (row: any) => {
-  console.log('重办');
-  orderRedoRef.value.openDialog();
+  const params = {
+    id: row.id,
+    commonEnum: commonEnum.Discriminate,
+    processType: '工单重办',
+    orderDetail:row,
+    extra:{
+      dialogTitle: '工单重办',
+      inputPlaceholder:'重办意见',
+      annexName:"办理附件",
+    }
+  }
+  processApprovalRef.value.openDialog(params);
 };
 // 发布详情
 const releaseDetail = (row: any) => {

+ 53 - 44
src/views/business/supervise/components/Order-supervise.vue

@@ -1,7 +1,18 @@
 <template>
-	<el-dialog v-model="state.dialogVisible" draggable title="发起督办" ref="dialogRef" width="50%" append-to-body destroy-on-close>
+	<el-dialog
+		v-model="state.dialogVisible"
+		draggable
+		title="发起督办"
+		@mouseup="mouseup"
+		:style="'transform: ' + state.transform + ';'"
+		ref="dialogRef"
+		width="50%"
+		append-to-body
+		destroy-on-close
+    :before-close="handleClose"
+	>
 		<div class="collapse-container pb1">
-			<el-form label-width="110px" ref="ruleFormRef">
+			<el-form label-width="110px" ref="ruleFormRef" :model="state.ruleForm">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="工单编号"> {{ state.ruleForm.no }} </el-form-item>
@@ -10,20 +21,20 @@
 						<el-form-item label="工单标题"> {{ state.ruleForm.title }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="督办人"> {{ state.ruleForm.title }} </el-form-item>
+						<el-form-item label="督办人"> {{ userInfos.name }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="督办部门"> {{ state.ruleForm.title }} </el-form-item>
+						<el-form-item label="督办部门"> {{ userInfos.orgName }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="督办时间"> {{ state.ruleForm.title }} </el-form-item>
+						<el-form-item label="督办时间"> {{ formatDate(dateNow, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="督办回复时限" prop="incidentTime" :rules="[{ required: true, message: '请输入延期申请数量', trigger: 'blur' }]">
+						<el-form-item label="督办回复时限" prop="incidentTime" :rules="[{ required: true, message: '请选择督办回复时限', trigger: 'change' }]">
 							<el-date-picker
 								v-model="state.ruleForm.incidentTime"
 								type="datetime"
-								placeholder="请选择事发时间"
+								placeholder="请选择督办回复时限"
 								value-format="YYYY-MM-DD[T]HH:mm:ss"
 								class="w100"
 							/>
@@ -42,19 +53,19 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="督办内容" prop="handleResult" :rules="[{ required: true, message: '请填写督办内容', trigger: 'blur' }]">
-							<el-input
-								type="textarea"
-								:autosize="{ minRows: 6, maxRows: 10 }"
-								maxlength="2000"
+						<el-form-item label="督办内容" prop="content" :rules="[{ required: true, message: '请填写督办内容', trigger: 'blur' }]">
+							<common-advice
+								@chooseAdvice="chooseAdvice"
+								v-model="state.ruleForm.content"
 								placeholder="请填写督办内容"
-								v-model="state.ruleForm.handleResult"
-							></el-input>
+								:loading="state.loading"
+								:commonEnum="commonEnum.Supervise"
+							/>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="附件" prop="handleResult" :rules="[{ required: false, message: '请选择附件', trigger: 'change' }]">
-							<annex-list />
+							<annex-list name="督办附件" />
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -71,10 +82,14 @@
 <script setup lang="ts" name="businessSuperviseDialog">
 import { defineAsyncComponent, reactive, ref } from 'vue';
 import { ElMessageBox, FormInstance } from 'element-plus';
-import { VoiceInterfaceObject } from '/@/utils/PhoneScript';
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
+import { formatDate } from '/@/utils/formatTime';
+import { commonEnum } from '/@/utils/constants';
 
 // 引入组件
 const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
@@ -84,47 +99,42 @@ const state = reactive<any>({
 	dialogVisible: false, // 是否显示弹窗
 	loading: false, // 是否显示加载
 	ruleForm: {
-		// 表单数据
-		title: '标题内容',
-		content: '内容内容内容内容内容内容内容内容内容内容内容内容内容',
-		result: '办理结果内容',
-		handleResult: '办理结果内容',
-		radio1: '1',
-		departmentList: [
-			{
-				departmentName: '部门名称1',
-				radio: '1',
-			},
-			{
-				departmentName: '部门名称2',
-				radio: '1',
-			},
-			{
-				departmentName: '部门名称3',
-				radio: '1',
-			},
-		],
+		acceptSms: false, // 发送督办短信
 	},
+  transform: 'translate(0px, 0px)', // 滚动条位置
 });
 const ruleFormRef = ref<RefType>();
+const storesUserInfo = useUserInfo();
+const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
+const dateNow = new Date(); // 当前时间
 // 打开弹窗
-const openDialog = () => {
+const openDialog = (val: any) => {
 	state.loading = false;
+	state.ruleForm = val;
 	state.dialogVisible = true;
 };
 // 关闭弹窗
 const closeDialog = () => {
 	state.dialogVisible = false;
-	state.ruleForm = {};
+  ruleFormRef.value.clearValidate();
+  ruleFormRef.value.resetFields();
 };
 // 取消
 const onCancel = () => {
 	closeDialog();
 };
-// 呼叫
-const onCall = () => {
-	// 呼叫外部电话
-	VoiceInterfaceObject.DialOut(state.ruleForm.fromPhone);
+const handleClose = (done: any) => {
+  closeDialog();
+  done();
+};
+// 选中常用意见
+const chooseAdvice = (item: any) => {
+	state.ruleForm.content += item.content;
+};
+// 设置抽屉
+const dialogRef = ref<RefType>();
+const mouseup = () => {
+  state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
 };
 // 提交
 const onSubmit = (formEl: FormInstance | undefined) => {
@@ -155,5 +165,4 @@ defineExpose({
 });
 </script>
 
-<style lang="scss" scoped>
-</style>
+<style lang="scss" scoped></style>

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

@@ -15,7 +15,7 @@
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<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-option v-for="item in state.nextStepOptions" :key="item.code" :label="item.name" :value="item.code" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -28,10 +28,10 @@
 								placeholder="请选择处理人"
 								class="w100"
 								@change="selectHandlers"
-								value-key="key"
+								value-key="id"
 								clearable
 							>
-								<el-option v-for="(item, index) in state.handlerOptions" :key="index" :label="item.value" :value="item" />
+                <el-option v-for="item in state.handlerOptions" :key="item.id" :label="item.name" :value="item" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -44,7 +44,7 @@
 							:rules="[{ required: false, message: '请选择主办', trigger: 'change' }]"
 						>
 							<el-select v-model="state.ruleForm.nextMainHandler" placeholder="请选择主办" class="w100">
-								<el-option v-for="item in state.handlerMainOptions" :key="item.key" :label="item.value" :value="item.key" />
+                <el-option v-for="item in state.handlerMainOptions" :key="item.id" :label="item.name" :value="item.id" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -162,8 +162,8 @@ const openDialog = async (val: any) => {
 			state.nextStepOptions = res.result.steps;
 			state.handleId = res.result.id;
 			if (state.nextStepOptions.length === 1) {
-				state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
-				await getNextStepOption(res.result.id, state.nextStepOptions[0].key);
+        state.ruleForm.nextStepCode = state.nextStepOptions[0].code;
+        getNextStepOption(res.result.id, state.nextStepOptions[0].code);
 			}
 			break;
 		case 'deleteStart':
@@ -244,7 +244,7 @@ const selectNextStep = (val: any) => {
 const getNextStepOption = async (DefineId: string, Code: string) => {
 	try {
 		const res: any = await workflowStepOptions({ DefineId, Code });
-		state.handlerOptions = res.result ?? [];
+    state.handlerOptions = res.result.handlers ?? [];
 	} catch (error) {
 		console.log(error);
 	}

+ 34 - 41
src/views/knowledge/knowledge/index.vue

@@ -16,9 +16,10 @@
 								<el-input v-model="filterHot" placeholder="请输入热点名称" class="input-with-select mt10 mb10" clearable> </el-input>
 							</el-tab-pane>
 						</el-tabs>
-						<div v-show="state.activeName === '0'" style="height: calc(100% - 100px);'">
+						<div style="height: calc(100% - 100px);'">
 							<el-scrollbar>
 								<el-tree
+                  v-show="state.activeName === '0'"
 									:data="state.orgData"
 									highlight-current
 									:expand-on-click-node="false"
@@ -28,52 +29,44 @@
 									v-loading="state.loading"
 									:filter-node-method="filterNode"
 									node-key="orgCode"
-									style="min-width: 100%; display: inline-block"
+                  :style="state.activeName === '0'? 'display:inline-block' : 'display:none'"
 									:default-expanded-keys="state.defaultExpandedOrgKeys"
 								>
 								</el-tree>
-							</el-scrollbar>
-						</div>
-						<div v-show="state.activeName === '1'" style="height: calc(100% - 100px);'">
-							<el-scrollbar>
-								<el-tree
-									:data="state.knowledgeOptions"
-									highlight-current
-									:expand-on-click-node="false"
-									:props="{ children: 'children', label: 'name' }"
-									@node-click="handleNodeClick"
-									ref="typeRef"
-									v-loading="state.loading"
-									:filter-node-method="filterNodeType"
-									node-key="id"
-									style="min-width: 100%; display: inline-block"
-									:default-expanded-keys="state.defaultExpandedTypeKeys"
-								>
-								</el-tree>
-							</el-scrollbar>
-						</div>
-						<div v-show="state.activeName === '2'" style="height: calc(100% - 100px);'">
-							<el-scrollbar>
-								<el-tree
-									filterable
-									highlight-current
-									placeholder="请选择热点分类"
-									:props="HotspotProps"
-									@node-click="handleNodeClick"
-									lazy
-									:load="load"
-									node-key="id"
-									ref="hotRef"
-									:filter-node-method="filterNodeHot"
-									:expand-on-click-node="false"
-									style="min-width: 100%; display: inline-block"
-								>
-									<template #default="{ data }">
+                <el-tree
+                    :data="state.knowledgeOptions"
+                    highlight-current
+                    :expand-on-click-node="false"
+                    :props="{ children: 'children', label: 'name' }"
+                    @node-click="handleNodeClick"
+                    ref="typeRef"
+                    v-loading="state.loading"
+                    :filter-node-method="filterNodeType"
+                    node-key="id"
+                    :style="state.activeName === '1'? 'display:inline-block' : 'display:none'"
+                    :default-expanded-keys="state.defaultExpandedTypeKeys"
+                >
+                </el-tree>
+                <el-tree
+                    filterable
+                    highlight-current
+                    placeholder="请选择热点分类"
+                    :props="HotspotProps"
+                    @node-click="handleNodeClick"
+                    lazy
+                    :load="load"
+                    node-key="id"
+                    ref="hotRef"
+                    :filter-node-method="filterNodeHot"
+                    :expand-on-click-node="false"
+                    :style="state.activeName === '2'? 'display:inline-block' : 'display:none'"
+                >
+                  <template #default="{ data }">
 										<span :title="data.hotSpotName">
 											{{ data.hotSpotName }}
 										</span>
-									</template>
-								</el-tree>
+                  </template>
+                </el-tree>
 							</el-scrollbar>
 						</div>
 					</div>

+ 0 - 1
src/views/system/config/dict/index.vue

@@ -111,7 +111,6 @@ const state = reactive<any>({
 	queryParams: {
 		keyword: '',  // 关键字
 		typeid: '',  // 字典类型
-		loading: false, // 加载状态
 	},
 	tableData: [],  // 表格数据
 	staticArr: [],  // 静态数据

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

@@ -60,7 +60,7 @@
 <script lang="ts" setup name="workflowConfig">
 import { ref, reactive } from 'vue';
 import {ElMessage, ElMessageBox, FormInstance} from 'element-plus';
-import { WorkflowLatest, wfmodulesMatch} from '/@/api/system/workflow';
+import { workflowList, wfmodulesMatch} from '/@/api/system/workflow';
 import {formatDate} from "/@/utils/formatTime";
 import {throttle} from "/@/utils/tools";
 
@@ -102,7 +102,7 @@ const openDialog = async (row: any) => {
 
 const queryList = () => {
   state.loading = true;
-  WorkflowLatest(state.queryParams).then((res:any)=>{
+  workflowList(state.queryParams).then((res:any)=>{
     state.tableData = res.result?.items ?? [];
     state.total = res.result?.total ?? 0;
     state.loading = false;

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

@@ -21,14 +21,14 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 						<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-option v-for="item in state.nextStepOptions" :key="item.code" :label="item.name" :value="item.code" />
 							</el-select>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 						<el-form-item label="处理人" prop="nextHandlers" :rules="[{ required: true, message: '请选择处理人', trigger: 'change' }]">
-							<el-select v-model="state.ruleForm.nextHandlers" multiple filterable placeholder="请选择处理人" class="w100" value-key="key" clearable>
-								<el-option v-for="item in state.handerOptions" :key="item.key" :label="item.value" :value="item" />
+							<el-select v-model="state.ruleForm.nextHandlers" multiple filterable placeholder="请选择处理人" class="w100" value-key="id" clearable>
+								<el-option v-for="item in state.handerOptions" :key="item.id" :label="item.name" :value="item" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -104,14 +104,14 @@ const openDialog = async (row: any) => {
 const selectNextStep = (val: any) => {
 	ruleFormRef.value?.resetFields('nextHandlers');
 	ruleFormRef.value?.resetFields('nextMainHandler');
-	const next = state.nextStepOptions.find((item: any) => item.key === val);
-	getNextStepOption(state.handleId, next.key);
+	const next = state.nextStepOptions.find((item: any) => item.code === val);
+	getNextStepOption(state.handleId, next.code);
 };
 // 查询流程下一节点参数
 const getNextStepOption = async (DefineId: string, Code: string) => {
 	try {
 		const res: any = await workflowStepOptions({ DefineId, Code });
-		state.handerOptions = res.result ?? [];
+		state.handerOptions = res.result.handlers ?? [];
 	} catch (error) {
 		console.log(error);
 	}
@@ -138,8 +138,8 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
           if (submitObj.nextHandlers && submitObj.nextHandlers.length) {
             submitObj.nextHandlers = submitObj.nextHandlers.map((item: any) => {
               return {
-                id: item.key,
-                name: item.value,
+                id: item.id,
+                name: item.name,
               };
             });
           }

+ 18 - 4
src/views/system/config/workflow/index.vue

@@ -17,12 +17,12 @@
 						<el-form-item label="关键字查询" prop="Keyword">
 							<el-input v-model="state.queryParams.Keyword" :placeholder="state.activeName ==='1' ? '模板名称/模板编码' : '流程标题/流程ID'" clearable @keyup.enter="queryList" />
 						</el-form-item>
-            <el-form-item label="模板状态" prop="Status"  v-if="state.activeName === '1'">
+            <el-form-item label="模板状态" prop="Status"  v-show="state.activeName === '1'">
               <el-select v-model="state.queryParams.Status" class="w100" placeholder="请选择模板状态" v-show="state.activeName === '1'">
                 <el-option v-for="item in state.statusList" :key="item.value" :label="item.label" :value="item.value" />
               </el-select>
             </el-form-item>
-						<el-form-item label="业务模块" prop="ModuleCode"  v-if="state.activeName === '2'">
+						<el-form-item label="业务模块" prop="ModuleCode"  v-show="state.activeName === '2'">
 							<el-select v-model="state.queryParams.ModuleCode" class="w100" placeholder="请选择业务模块">
 								<el-option v-for="item in state.moduleOptions" :key="item.key" :label="item.value" :value="item.key" />
 							</el-select>
@@ -192,6 +192,7 @@ const state = reactive(<any>{
 		PageIndex: 1, // 当前页
 		PageSize: 10, // 每页条数
 		Keyword: '',// 关键字
+    Status:"",
 		ModuleCode: '', // 模块编码
 	},
 	tableList: [], // 表格数据
@@ -213,6 +214,11 @@ const route = useRoute();
 /** 获取列表 */
 const queryList = () => {
 	state.loading = true;
+  let req:any = {
+    PageIndex: state.queryParams.PageIndex,
+    PageSize: state.queryParams.PageSize,
+    Keyword: state.queryParams.Keyword,
+  }
 	switch (state.activeName) {
 		case '0':
 			wfmodules()
@@ -225,7 +231,11 @@ const queryList = () => {
 				});
 			break;
 		case '1':
-			workflowList(state.queryParams)
+      req = {
+        ...req,
+        Status:state.queryParams.Status
+      }
+			workflowList(req)
 				.then((response: any) => {
 					state.tableList = response.result.items ?? [];
 					state.total = response.result.total;
@@ -236,7 +246,11 @@ const queryList = () => {
 				});
 			break;
 		case '2':
-			workflowPaged(state.queryParams)
+      req = {
+        ...req,
+        ModuleCode:state.queryParams.ModuleCode
+      }
+			workflowPaged(req)
 				.then((response: any) => {
 					state.tableList = response.result?.items ?? [];
 					state.total = response.result?.total ?? 0;

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

@@ -1,23 +1,17 @@
 <template>
 	<div class="system-dataAuth-add-container">
-		<el-dialog v-model="state.dialogVisible" width="700px" draggable title="新增数据权限" ref="dialogRef">
+		<el-dialog v-model="state.dialogVisible" width="500px" draggable title="新增数据权限" ref="dialogRef">
 			<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
-				<el-row :gutter="10">
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="数据表" prop="table" :rules="[{ required: true, message: '请选择数据表', trigger: 'change' }]">
-							<el-select v-model="state.ruleForm.table" placeholder="请选择数据表" class="w100" value-key="key">
-								<el-option v-for="item in state.tableData" :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">
-						<el-form-item label="可见等级" prop="accessLevel" :rules="[{ required: true, message: '请选择可见等级', trigger: 'change' }]">
-							<el-select v-model="state.ruleForm.accessLevel" placeholder="请选择可见等级" class="w100">
-								<el-option v-for="item in state.accessLevelOptions" :key="item.key" :label="item.value" :value="item.key" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-				</el-row>
+				<el-form-item label="数据表" prop="table" :rules="[{ required: true, message: '请选择数据表', trigger: 'change' }]">
+					<el-select v-model="state.ruleForm.table" placeholder="请选择数据表" class="w100" value-key="key">
+						<el-option v-for="item in state.tableData" :key="item.key" :label="item.value" :value="item" />
+					</el-select>
+				</el-form-item>
+				<el-form-item label="可见等级" prop="accessLevel" :rules="[{ required: true, message: '请选择可见等级', trigger: 'change' }]">
+					<el-select v-model="state.ruleForm.accessLevel" placeholder="请选择可见等级" class="w100">
+						<el-option v-for="item in state.accessLevelOptions" :key="item.key" :label="item.value" :value="item.key" />
+					</el-select>
+				</el-form-item>
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
@@ -31,7 +25,7 @@
 
 <script setup lang="ts" name="systemDataAuthAdd">
 import { reactive, ref, onMounted } from 'vue';
-import {ElMessage, FormInstance} from 'element-plus';
+import { ElMessage, FormInstance } from 'element-plus';
 import { useRoute } from 'vue-router';
 import { throttle } from '/@/utils/tools';
 
@@ -45,10 +39,10 @@ const state = reactive<any>({
 	ruleForm: {
 		roleId: '', // 角色id
 		roleCode: 0, // 角色code
-		accessLevel: '',  // 可见等级
-		tableName: '',  // 数据表
+		accessLevel: '', // 可见等级
+		tableName: '', // 数据表
 	},
-	tableData: [],  // 数据表列表
+	tableData: [], // 数据表列表
 	loading: false, // 加载状态
 	accessLevelOptions: [], // 可见等级列表
 });
@@ -72,35 +66,35 @@ const onCancel = () => {
 	closeDialog();
 };
 // 新增
-const onSubmit = throttle(async(formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  await formEl.validate((valid: boolean) => {
-    if (!valid) return;
-    state.loading = true;
-    const req = {
-      roleId: state.ruleForm.roleId, // 角色id
-      roleCode: state.ruleForm.roleCode, // 角色code
-      accessLevel: state.ruleForm.accessLevel,
-      tableName: state.ruleForm.table.key,
-      tableDisplay: state.ruleForm.table.value,
-      roleDisplay:state.ruleForm.roleDisplay,
-    };
-    addDataAuth(req)
-        .then(() => {
-          ElMessage({
-            message: '新增成功',
-            type: 'success',
-          });
-          state.loading = false;
-          closeDialog();
-          emit('updateList');
-        })
-        .catch(() => {
-          // 新增失败
-          state.loading = false;
-          closeDialog();
-        });
-  })
+const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	await formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		state.loading = true;
+		const req = {
+			roleId: state.ruleForm.roleId, // 角色id
+			roleCode: state.ruleForm.roleCode, // 角色code
+			accessLevel: state.ruleForm.accessLevel,
+			tableName: state.ruleForm.table.key,
+			tableDisplay: state.ruleForm.table.value,
+			roleDisplay: state.ruleForm.roleDisplay,
+		};
+		addDataAuth(req)
+			.then(() => {
+				ElMessage({
+					message: '新增成功',
+					type: 'success',
+				});
+				state.loading = false;
+				closeDialog();
+				emit('updateList');
+			})
+			.catch(() => {
+				// 新增失败
+				state.loading = false;
+				closeDialog();
+			});
+	});
 }, 1000);
 onMounted(() => {
 	state.ruleForm.roleId = route.query.id;

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

@@ -1,23 +1,17 @@
 <template>
 	<div class="system-dataAuth-edit-container">
-		<el-dialog v-model="state.dialogVisible" width="700px" draggable title="修改数据权限" ref="dialogRef">
+		<el-dialog v-model="state.dialogVisible" width="500px" draggable title="修改数据权限" ref="dialogRef">
 			<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
-				<el-row :gutter="10">
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="数据表" prop="table" :rules="[{ required: true, message: '请选择数据表', trigger: 'change' }]">
-							<el-select v-model="state.ruleForm.table" placeholder="请选择数据表" class="w100" value-key="key" disabled>
-								<el-option v-for="item in state.tableData" :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">
-						<el-form-item label="可见等级" prop="accessLevel" :rules="[{ required: true, message: '请选择可见等级', trigger: 'change' }]">
-							<el-select v-model="state.ruleForm.accessLevel" placeholder="请选择可见等级" class="w100">
-								<el-option v-for="item in state.accessLevelOptions" :key="item.key" :label="item.value" :value="item.key" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-				</el-row>
+				<el-form-item label="数据表" prop="table" :rules="[{ required: true, message: '请选择数据表', trigger: 'change' }]">
+					<el-select v-model="state.ruleForm.table" placeholder="请选择数据表" class="w100" value-key="key" disabled>
+						<el-option v-for="item in state.tableData" :key="item.key" :label="item.value" :value="item" />
+					</el-select>
+				</el-form-item>
+				<el-form-item label="可见等级" prop="accessLevel" :rules="[{ required: true, message: '请选择可见等级', trigger: 'change' }]">
+					<el-select v-model="state.ruleForm.accessLevel" placeholder="请选择可见等级" class="w100">
+						<el-option v-for="item in state.accessLevelOptions" :key="item.key" :label="item.value" :value="item.key" />
+					</el-select>
+				</el-form-item>
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
@@ -31,10 +25,9 @@
 
 <script setup lang="ts" name="systemDataAuthEdit">
 import { reactive, ref, onMounted } from 'vue';
-import {ElMessage, FormInstance} from 'element-plus';
+import { ElMessage, FormInstance } from 'element-plus';
 import { useRoute } from 'vue-router';
 import { throttle } from '/@/utils/tools';
-
 import { dataAuthList, editDataAuth } from '/@/api/system/roles';
 
 // 定义子组件向父组件传值/事件
@@ -45,10 +38,10 @@ const state = reactive<any>({
 	ruleForm: {
 		roleId: '', // 角色id
 		roleCode: 0, // 角色code
-		accessLevel: '',  // 可见等级
-		tableName: '',  // 数据表
+		accessLevel: '', // 可见等级
+		tableName: '', // 数据表
 	},
-	tableData: [],  // 数据表列表
+	tableData: [], // 数据表列表
 	loading: false, // 按钮loading
 	accessLevelOptions: [], // 可见等级列表
 });
@@ -61,9 +54,9 @@ const openDialog = async (row: any, accessLevelOptions: any) => {
 	const res: any = await dataAuthList();
 	state.tableData = res.result ?? [];
 	state.ruleForm.table = {
-		key:row.tableName,
-		value:row.tableDisplay
-	}
+		key: row.tableName,
+		value: row.tableDisplay,
+	};
 	state.dialogVisible = true;
 };
 // 关闭弹窗
@@ -76,35 +69,35 @@ const onCancel = () => {
 };
 // 新增
 const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  await formEl.validate((valid: boolean) => {
-    if (!valid) return;
-    state.loading = true;
-    const req = {
-      roleId: state.ruleForm.roleId, // 角色id
-      roleCode: state.ruleForm.roleCode, // 角色code
-      accessLevel: state.ruleForm.accessLevel,
-      tableName: state.ruleForm.table.key,
-      tableDisplay: state.ruleForm.table.value,
-      roleDisplay:state.ruleForm.RoleDisplay,
-      id: state.ruleForm.id
-    };
-    editDataAuth(req)
-        .then(() => {
-          ElMessage({
-            message: '操作成功',
-            type: 'success',
-          });
-          state.loading = false;
-          closeDialog();
-          emit('updateList');
-        })
-        .catch(() => {
-          // 新增失败
-          state.loading = false;
-          closeDialog();
-        });
-  })
+	if (!formEl) return;
+	await formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		state.loading = true;
+		const req = {
+			roleId: state.ruleForm.roleId, // 角色id
+			roleCode: state.ruleForm.roleCode, // 角色code
+			accessLevel: state.ruleForm.accessLevel,
+			tableName: state.ruleForm.table.key,
+			tableDisplay: state.ruleForm.table.value,
+			roleDisplay: state.ruleForm.RoleDisplay,
+			id: state.ruleForm.id,
+		};
+		editDataAuth(req)
+			.then(() => {
+				ElMessage({
+					message: '操作成功',
+					type: 'success',
+				});
+				state.loading = false;
+				closeDialog();
+				emit('updateList');
+			})
+			.catch(() => {
+				// 新增失败
+				state.loading = false;
+				closeDialog();
+			});
+	});
 }, 1000);
 onMounted(() => {
 	state.ruleForm.roleId = route.query.id;

+ 9 - 25
src/views/system/roles/component/Role-permission.vue

@@ -21,16 +21,6 @@
 							inactive-text="全选"
 						></el-switch>
 					</el-col>
-					<!-- <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
-						父子联动:<el-switch
-							v-model="state.menuCheckStrictly"
-							@change="handleCheckedTreeConnect"
-							inline-prompt
-							active-text="联动"
-							inactive-text="不联动"
-							disabled
-						></el-switch>
-					</el-col> -->
 				</el-row>
 				<el-tree
 					class="tree-border mt20"
@@ -40,7 +30,6 @@
 					node-key="permissionCode"
 					check-on-click-node
 					:expand-on-click-node="false"
-					:check-strictly="!state.menuCheckStrictly"
 					:props="{ label: 'pageName', children: 'children', class: customNodeClass }"
 				>
 					<template #default="{ data }">
@@ -86,7 +75,6 @@ const state = reactive<any>({
 	rowName: '',  // 当前行名称
 	menuExpand: false, // 展开
 	menuNodeAll: false, // 全选
-	menuCheckStrictly: false, // 是否联动
 	loading: false, // 加载
 });
 const menuRef = ref<RefType>();
@@ -167,23 +155,19 @@ const handleCheckedTreeExpand = (value: boolean) => {
 	// expandNodes(menuRef.value.root, value);
 };
 // 遍历树形数据,设置每一项的expanded属性,实现展开收起
-// const expandNodes = (node: any, value: boolean) => {
-// 	node.expanded = value;
-// 	for (let i = 0; i < node.childNodes.length; i++) {
-// 		node.childNodes[i].expanded = value;
-// 		if (node.childNodes[i].childNodes.length > 0) {
-// 			expandNodes(node.childNodes[i], value);
-// 		}
-// 	}
-// };
+const expandNodes = (node: any, value: boolean) => {
+	node.expanded = value;
+	for (let i = 0; i < node.childNodes.length; i++) {
+		node.childNodes[i].expanded = value;
+		if (node.childNodes[i].childNodes.length > 0) {
+			expandNodes(node.childNodes[i], value);
+		}
+	}
+};
 /** 树权限(全选/全不选) */
 const handleCheckedTreeNodeAll = (value: boolean) => {
 	menuRef.value.setCheckedKeys(value ? getCode(state.menuTableData) : []);
 };
-/** 树权限(父子联动) */
-// const handleCheckedTreeConnect = (value: boolean) => {
-// 	state.menuCheckStrictly = value ? true : false;
-// };
 // 保存
 const onSubmit = () => {
 	let systemMenuArr: EmptyArrayType;