Procházet zdrojové kódy

reactor:权限调整;会签查询对接;
feat:对接文件上传;

zhangchong před 1 rokem
rodič
revize
d6e591e410
50 změnil soubory, kde provedl 470 přidání a 578 odebrání
  1. 1 1
      .env.development
  2. 1 1
      .env.production
  3. 0 4
      src/api/public/system.ts
  4. 20 0
      src/api/public/upload.ts
  5. 0 11
      src/api/system/organize.ts
  6. 1 1
      src/components/Editor/index.vue
  7. 1 1
      src/views/auxiliary/advice/index.vue
  8. 50 53
      src/views/auxiliary/area/component/Area-edit.vue
  9. 1 1
      src/views/auxiliary/businessTag/index.vue
  10. 1 1
      src/views/auxiliary/message/index.vue
  11. 50 53
      src/views/auxiliary/noticeAudit/index.vue
  12. 15 84
      src/views/business/order/index.vue
  13. 1 1
      src/views/business/publish/index.vue
  14. 7 7
      src/views/business/visit/component/Assign-return-visitors.vue
  15. 28 19
      src/views/business/visit/component/Visit-detail.vue
  16. 0 22
      src/views/business/visit/index.vue
  17. 1 1
      src/views/knowledge/collect/index.vue
  18. 132 140
      src/views/knowledge/component/Knowledge-keywords.vue
  19. 1 1
      src/views/knowledge/config/standard/index.vue
  20. 1 1
      src/views/knowledge/config/type/index.vue
  21. 2 2
      src/views/knowledge/error/index.vue
  22. 1 4
      src/views/knowledge/index/index.vue
  23. 3 3
      src/views/knowledge/index/preview.vue
  24. 1 1
      src/views/knowledge/question/index.vue
  25. 3 3
      src/views/quality/done/index.vue
  26. 4 4
      src/views/quality/index/index.vue
  27. 9 26
      src/views/query/countersign/index.vue
  28. 1 1
      src/views/system/config/dict/index.vue
  29. 1 1
      src/views/system/config/holiday/index.vue
  30. 0 2
      src/views/system/config/timeLimit/component/Time-limit-add.vue
  31. 0 2
      src/views/system/config/timeLimit/component/Time-limit-detail.vue
  32. 0 2
      src/views/system/config/timeLimit/component/Time-limit-edit.vue
  33. 0 1
      src/views/system/config/timeLimit/index.vue
  34. 0 1
      src/views/system/config/workflow/index.vue
  35. 14 3
      src/views/system/dataAuth/component/Data-auth-add.vue
  36. 14 1
      src/views/system/dataAuth/component/Data-auth-edit.vue
  37. 0 1
      src/views/system/dataAuth/index.vue
  38. 5 3
      src/views/system/menu/component/Menu-add.vue
  39. 21 21
      src/views/system/menu/component/Menu-edit.vue
  40. 1 1
      src/views/system/menu/index.vue
  41. 27 30
      src/views/system/organize/component/Org-edit.vue
  42. 1 1
      src/views/system/organize/index.vue
  43. 2 3
      src/views/system/parameter/index.vue
  44. 17 16
      src/views/system/roles/component/Role-permission.vue
  45. 1 2
      src/views/system/roles/component/Role-user-list.vue
  46. 3 4
      src/views/system/roles/index.vue
  47. 21 29
      src/views/system/user/index.vue
  48. 1 1
      src/views/tels/blacklist/index.vue
  49. 0 1
      src/views/tels/restApply/index.vue
  50. 5 5
      src/views/todo/visit/index.vue

+ 1 - 1
.env.development

@@ -14,7 +14,7 @@ VITE_API_IDENTITY_URL=http://identity.fengwo.com
 VITE_API_SOCKET_URL=http://110.188.24.28:50100/hubs/hotline
 
 # #上传 API
-VITE_API_UPLOAD_URL=http://110.188.24.28:50100/hubs/hotline
+VITE_API_UPLOAD_URL=http://110.188.24.28:50120/file/upload
 
 # #上传 API
 VITE_SOCKET_GROUP_NAME=ws://110.188.24.28:50100/hubs/hotline

+ 1 - 1
.env.production

@@ -14,7 +14,7 @@ VITE_API_IDENTITY_URL=http://identity.fengwo.com
 VITE_API_SOCKET_URL=http://110.188.24.28:50100/hubs/hotline
 
 # #上传 API
-VITE_API_UPLOAD_URL=http://110.188.24.28:50100/hubs/hotline
+VITE_API_UPLOAD_URL=http://110.188.24.28:50120/file/upload
 
 # #上传 API
 VITE_SOCKET_GROUP_NAME=http://110.188.24.28:50100/hubs/hotline

+ 0 - 4
src/api/public/system.ts

@@ -1,10 +1,6 @@
 /*
  * @Author: zc
  * @description 系统配置
- * @version:
- * @Date: 2022-08-09 16:19:55
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-11-16 14:49:01
  */
 import request from '/@/utils/request';
 /**

+ 20 - 0
src/api/public/upload.ts

@@ -0,0 +1,20 @@
+/*
+ * @Author: zc
+ * @description 文件上传
+ */
+import request from '/@/utils/request';
+/**
+ * @description 文件上传
+ * @param {object}  data
+ */
+export const uploadFile = (data: object) => {
+    return request({
+        baseURL:import.meta.env.VITE_API_UPLOAD_URL, // 请求地址  可以在不同url中修改
+        url: `/api/v1/File/upload`,
+        method: 'post',
+        headers: {
+            'Content-Type':'multipart/form-data'
+        },
+        data,
+    });
+}

+ 0 - 11
src/api/system/organize.ts

@@ -53,17 +53,6 @@ export const updateOrg = (data: object) => {
 		data
 	});
 };
-/**
- * @description 删除组织
- * @param {object} id
- * @return {*}
- */
-export const removeOrg = (id: string) => {
-	return request({
-		url: `/api/v1/Sys/removemenu/${id}`,
-		method: 'delete',
-	});
-};
 /**
  * @description 获取组织详情根据id
  * @param {object} id

+ 1 - 1
src/components/Editor/index.vue

@@ -61,7 +61,7 @@ const state = reactive<any>({
 state.editorConfig.MENU_CONF['uploadImage'] = {
 	server: import.meta.env.VITE_API_UPLOAD_URL,
 	// form-data fieldName ,默认值 'wangeditor-uploaded-image'
-	fieldName: 'file',
+	fieldName: 'fileData',
 	// 单个文件的最大体积限制,默认为 2M
 	maxFileSize: 5 * 1024 * 1024, // 1M
 	// 最多可上传几个文件,默认为 100

+ 1 - 1
src/views/auxiliary/advice/index.vue

@@ -115,7 +115,7 @@ const getBaseData = async ()=>{
 // 获取参数列表
 const queryList = () => {
 	state.loading = true;
-  if (!auth('auxiliary:advice:query')) ElMessage.error('抱歉,您没有权限获取公开意见列表!');
+  if (!auth('auxiliary:advice:query')) ElMessage.error('抱歉,您没有权限获取常用意见!');
   else {
     publicCommonList(state.queryParams)
         .then((res) => {

+ 50 - 53
src/views/auxiliary/area/component/Area-edit.vue

@@ -1,41 +1,41 @@
 <template>
-		<el-dialog title="修改区域" v-model="state.dialogVisible" width="769px" draggable>
-			<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="80px">
-				<el-row :gutter="10">
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-            <el-form-item label="区域名称" prop="areaName" :rules="[{ required: true, message: '请输入区域名称', trigger: 'blur' }]">
-              <el-input v-model="state.ruleForm.areaName" 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="areaNameAbbreviation" :rules="[{ required: true, message: '请输入区域简称', trigger: 'blur' }]">
-              <el-input v-model="state.ruleForm.areaNameAbbreviation" placeholder="请输入区域简称" clearable></el-input>
-            </el-form-item>
-          </el-col>
+	<el-dialog title="修改区域" v-model="state.dialogVisible" width="769px" draggable>
+		<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="80px">
+			<el-row :gutter="10">
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="区域名称" prop="areaName" :rules="[{ required: true, message: '请输入区域名称', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.areaName" 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="areaNameAbbreviation" :rules="[{ required: true, message: '请输入区域简称', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.areaNameAbbreviation" placeholder="请输入区域简称" clearable></el-input>
+					</el-form-item>
+				</el-col>
 
-          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-            <el-form-item label="上级区域" prop="parentId" :rules="[{ required: false, message: '请选择上级区域', trigger: 'change' }]">
-              <el-cascader
-                  :options="state.areaData"
-                  filterable
-                  :props="{ checkStrictly: true, value: 'id', label: 'areaName', emitPath: false }"
-                  placeholder="请选择上级区域"
-                  clearable
-                  class="w100"
-                  v-model="state.ruleForm.parentId"
-              >
-              </el-cascader>
-            </el-form-item>
-          </el-col>
-				</el-row>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="closeDialog" class="default-button">取 消</el-button>
-					<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading">修 改 </el-button>
-				</span>
-			</template>
-		</el-dialog>
+				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+					<el-form-item label="上级区域" prop="parentId" :rules="[{ required: false, message: '请选择上级区域', trigger: 'change' }]">
+						<el-cascader
+							:options="state.areaData"
+							filterable
+							:props="{ checkStrictly: true, value: 'id', label: 'areaName', emitPath: false }"
+							placeholder="请选择上级区域"
+							clearable
+							class="w100"
+							v-model="state.ruleForm.parentId"
+						>
+						</el-cascader>
+					</el-form-item>
+				</el-col>
+			</el-row>
+		</el-form>
+		<template #footer>
+			<span class="dialog-footer">
+				<el-button @click="closeDialog" class="default-button">取 消</el-button>
+				<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading">修 改 </el-button>
+			</span>
+		</template>
+	</el-dialog>
 </template>
 
 <script setup lang="ts" name="systemEditArea">
@@ -55,26 +55,23 @@ const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
 		orgName: '', // 部门名称
-    areaNameAbbreviation: '', // 部门编码
+		areaNameAbbreviation: '', // 部门编码
 		parentId: '', // 上级部门id
 	},
 	loading: false, // 按钮loading
-  areaData:[],
+	areaData: [],
 });
 // 打开弹窗
-const openDialog = async (row: any, areaData: any,) => {
-	if (!auth('system:organize:detail')) ElMessage.error('抱歉,您没有获取区域详情的权限!');
-	else {
-		try {
-			ruleFormRef.value?.resetFields();
-			state.areaData = other.deepClone(areaData);
-			state.areaData = excludeSelfById(state.areaData, row.id);
-			const res: any = await treeAreaDetail(row.id);
-			state.ruleForm = res.result;
-			state.dialogVisible = true;
-		} catch (error) {
-			console.log(error);
-		}
+const openDialog = async (row: any, areaData: any) => {
+	try {
+		ruleFormRef.value?.resetFields();
+		state.areaData = other.deepClone(areaData);
+		state.areaData = excludeSelfById(state.areaData, row.id);
+		const res: any = await treeAreaDetail(row.id);
+		state.ruleForm = res.result;
+		state.dialogVisible = true;
+	} catch (error) {
+		console.log(error);
 	}
 };
 // 关闭弹窗
@@ -87,7 +84,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 	formEl.validate((valid: boolean) => {
 		if (!valid) return;
 		state.loading = true;
-    treeAreaEdit(state.ruleForm)
+		treeAreaEdit(state.ruleForm)
 			.then(() => {
 				emit('updateList');
 				closeDialog(); // 关闭弹窗
@@ -95,7 +92,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 				state.loading = false;
 			})
 			.catch(() => {
-        emit('updateList');
+				emit('updateList');
 				state.loading = false;
 			});
 	});

+ 1 - 1
src/views/auxiliary/businessTag/index.vue

@@ -115,7 +115,7 @@ const getBaseData = async ()=>{
 // 获取参数列表
 const queryList = () => {
   state.loading = true;
-  if (!auth('auxiliary:businessTag:query')) ElMessage.error('抱歉,您没有权限获取数据权限列表!');
+  if (!auth('auxiliary:businessTag:query')) ElMessage.error('抱歉,您没有权限获取标签列表!');
   else {
     businessTagList(state.queryParams)
         .then((res) => {

+ 1 - 1
src/views/auxiliary/message/index.vue

@@ -122,7 +122,7 @@ const getBaseData = async () => {
 // 获取参数列表
 const queryList = () => {
 	state.loading = true;
-	if (!auth('auxiliary:message:query')) ElMessage.error('抱歉,您没有权限获取短信列表!');
+	if (!auth('auxiliary:message:query')) ElMessage.error('抱歉,您没有权限获取短信中心!');
 	else {
     const request = other.deepClone(state.queryParams);
     Reflect.deleteProperty(request, 'crTime'); // 删除无用的参数

+ 50 - 53
src/views/auxiliary/noticeAudit/index.vue

@@ -121,7 +121,7 @@
 </template>
 
 <script lang="ts" setup name="auxiliaryNoticeAudit">
-import {onActivated, onMounted, reactive, ref} from 'vue';
+import { onActivated, onMounted, reactive, ref } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { shortcuts } from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
@@ -185,50 +185,47 @@ const getBaseData = async () => {
 // 获取参数列表
 const queryList = () => {
 	state.loading = true;
-	if (!auth('auxiliary:notice:query')) ElMessage.error('抱歉,您没有权限获取通知公告列表!');
-	else {
-		switch (listType.value) {
-			case '0':
-				const requestCircular = {
-					title: state.queryParams.Title,
-					CircularTypeId: state.queryParams.CircularTypeId,
-					CircularTimeStart: state.queryParams.CircularTimeStart,
-					CircularTimeEnd: state.queryParams.CircularTimeEnd,
-					CircularState: state.queryParams.CircularState,
-					PageIndex: state.queryParams.PageIndex,
-					PageSize: state.queryParams.PageSize,
-				};
-				circularList(requestCircular)
-					.then((res) => {
-						state.loading = false;
-						state.tableData = res.result.items ?? [];
-						state.total = res.result.total ?? 0;
-					})
-					.finally(() => {
-						state.loading = false;
-					});
-				break;
-			case '1':
-				const requestBulletin = {
-					title: state.queryParams.Title,
-					BulletinTypeId: state.queryParams.BulletinTypeId,
-					BulletinTimeStart: state.queryParams.BulletinTimeStart,
-					BulletinTimeEnd: state.queryParams.BulletinTimeEnd,
-					BulletinState: state.queryParams.BulletinState,
-					PageIndex: state.queryParams.PageIndex,
-					PageSize: state.queryParams.PageSize,
-				};
-				bulletinList(requestBulletin)
-					.then((res) => {
-						state.loading = false;
-						state.tableData = res.result.items ?? [];
-						state.total = res.result.total ?? 0;
-					})
-					.finally(() => {
-						state.loading = false;
-					});
-				break;
-		}
+	switch (listType.value) {
+		case '0':
+			const requestCircular = {
+				title: state.queryParams.Title,
+				CircularTypeId: state.queryParams.CircularTypeId,
+				CircularTimeStart: state.queryParams.CircularTimeStart,
+				CircularTimeEnd: state.queryParams.CircularTimeEnd,
+				CircularState: state.queryParams.CircularState,
+				PageIndex: state.queryParams.PageIndex,
+				PageSize: state.queryParams.PageSize,
+			};
+			circularList(requestCircular)
+				.then((res) => {
+					state.loading = false;
+					state.tableData = res.result.items ?? [];
+					state.total = res.result.total ?? 0;
+				})
+				.finally(() => {
+					state.loading = false;
+				});
+			break;
+		case '1':
+			const requestBulletin = {
+				title: state.queryParams.Title,
+				BulletinTypeId: state.queryParams.BulletinTypeId,
+				BulletinTimeStart: state.queryParams.BulletinTimeStart,
+				BulletinTimeEnd: state.queryParams.BulletinTimeEnd,
+				BulletinState: state.queryParams.BulletinState,
+				PageIndex: state.queryParams.PageIndex,
+				PageSize: state.queryParams.PageSize,
+			};
+			bulletinList(requestBulletin)
+				.then((res) => {
+					state.loading = false;
+					state.tableData = res.result.items ?? [];
+					state.total = res.result.total ?? 0;
+				})
+				.finally(() => {
+					state.loading = false;
+				});
+			break;
 	}
 };
 // 重置表单
@@ -263,15 +260,15 @@ const onDetail = (row: any) => {
 const params = history.state;
 // 页面加载时
 onMounted(() => {
-  getBaseData();
-  if (params.index) {
-    listType.value = params.index as string;
-  }
-  queryList();
+	getBaseData();
+	if (params.index) {
+		listType.value = params.index as string;
+	}
+	queryList();
 });
 onActivated(() => {
-  if (params.index) {
-    listType.value = params.index as string;
-  }
+	if (params.index) {
+		listType.value = params.index as string;
+	}
 });
 </script>

+ 15 - 84
src/views/business/order/index.vue

@@ -9,8 +9,19 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-						<el-form-item label="诉求详情" prop="Content">
-							<el-input v-model="state.queryParams.Content" placeholder="诉求详情" clearable @keyup.enter="queryList" />
+						<el-form-item label="工单状态" prop="Status">
+							<el-select
+								v-model="state.queryParams.Status"
+								placeholder="请选择工单状态"
+								multiple
+								clearable
+								class="w100"
+								collapse-tags
+								collapse-tags-tooltip
+								:max-collapse-tags="2"
+							>
+								<el-option v-for="item in state.orderStatusOptions" :value="item.key" :key="item.key" :label="item.value" />
+							</el-select>
 						</el-form-item>
 					</el-col>
 					<transition name="el-zoom-in-top">
@@ -119,82 +130,6 @@
 							</el-form-item>
 						</el-col>
 					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="转接来源" prop="TransferPhone">
-								<el-input v-model="state.queryParams.TransferPhone" placeholder="请填写转接来源" clearable @keyup.enter="queryList" />
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="紧急程度" prop="EmergencyLevel">
-								<el-select
-									v-model="state.queryParams.EmergencyLevel"
-									placeholder="请选择受理类型"
-									multiple
-									clearable
-									class="w100"
-									collapse-tags
-									collapse-tags-tooltip
-									:max-collapse-tags="2"
-								>
-									<el-option v-for="item in state.emergencyLevelOptions" :value="item.key" :key="item.key" :label="item.value" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="办理期限" prop="exTime">
-								<el-date-picker
-									v-model="state.queryParams.exTime"
-									type="datetimerange"
-									unlink-panels
-									range-separator="至"
-									start-placeholder="开始时间"
-									end-placeholder="结束时间"
-									:shortcuts="shortcuts"
-									@change="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="电话号码" prop="PhoneNo">
-								<el-input v-model="state.queryParams.PhoneNo" placeholder="来电号码/联系电话" clearable @keyup.enter="queryList" />
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="推送分类" prop="PushTypeCode">
-								<el-select v-model="state.queryParams.PushTypeCode" placeholder="请选择推送分类" clearable class="w100">
-									<el-option v-for="item in state.pushTypeOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="工单状态" prop="Status">
-								<el-select
-									v-model="state.queryParams.Status"
-									placeholder="请选择工单状态"
-									multiple
-									clearable
-									class="w100"
-									collapse-tags
-									collapse-tags-tooltip
-									:max-collapse-tags="2"
-								>
-									<el-option v-for="item in state.orderStatusOptions" :value="item.key" :key="item.key" :label="item.value" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
 					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
 						<el-form-item label=" ">
 							<div class="flex-end w100">
@@ -273,7 +208,7 @@
 				<el-table-column prop="actualHandleOrgName" label="接办部门" show-overflow-tooltip width="170"></el-table-column>
 				<el-table-column prop="acceptType" label="受理类型" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column prop="counterSignTypeText" label="中心会签" show-overflow-tooltip width="100"></el-table-column>
-        <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip width="100"></el-table-column>
+				<el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip width="100"></el-table-column>
 				<el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip width="200"></el-table-column>
 				<el-table-column prop="tagNames" label="工单标签" show-overflow-tooltip width="200"></el-table-column>
 				<el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="120">
@@ -288,7 +223,7 @@
 						<el-button link type="success" @click="onOrderEdit(row)" title="编辑工单" v-if="row.canEdit" v-auth="'business:order:edit'">
 							修改
 						</el-button>
-            <order-detail :order="row"/>
+						<order-detail :order="row" />
 					</template>
 				</el-table-column>
 				<template #empty>
@@ -401,10 +336,6 @@ const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
 const timeStartChangeCr = (val: string[]) => {
 	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
 };
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-	handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
 // 获取查询条件基础信息
 const getBaseData = async () => {
 	const res: any = await listBaseData();

+ 1 - 1
src/views/business/publish/index.vue

@@ -68,7 +68,7 @@
 				</el-table-column>
         <el-table-column label="更新时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.publishTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span>{{ formatDate(row.lastModificationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
           </template>
         </el-table-column>
 				<el-table-column prop="publishState" label="是否公开" show-overflow-tooltip width="100">

+ 7 - 7
src/views/business/visit/component/Assign-return-visitors.vue

@@ -1,5 +1,5 @@
 <template>
-	<el-dialog v-model="state.dialogVisible" width="600px" draggable title="分配回访人" @close="close">
+	<el-dialog v-model="state.dialogVisible" width="500px" draggable title="分配回访人" @close="close">
 		<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
 			<el-form-item label="回访人" prop="employee" :rules="[{ required: true, message: '请选择回访人', trigger: 'change' }]">
 				<el-select
@@ -29,7 +29,7 @@
 
 <script setup lang="ts" name="assignReturnVisitors">
 import { reactive, ref } from 'vue';
-import { ElMessage, FormInstance } from 'element-plus';
+import {ElMessage, ElNotification, FormInstance} from 'element-plus';
 import { throttle } from '/@/utils/tools';
 import { queryUser } from '/@/api/system/workflow';
 import { removeDuplicate } from '/@/utils/arrayOperation';
@@ -94,14 +94,14 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 			employeeId: state.ruleForm.employee.id,
 		};
 		distribution(request)
-			.then(() => {
-				ElMessage({
-					message: '操作成功',
-					type: 'success',
-				});
+			.then((res) => {
 				loading.value = false;
 				closeDialog();
 				emit('updateList');
+        ElNotification({
+          title: '分配完成',
+          message: `成功分配${res.result?.successCount}条,失败${res.result?.errorCount}条`,
+        });
 			})
 			.finally(() => {
 				loading.value = false;

+ 28 - 19
src/views/business/visit/component/Visit-detail.vue

@@ -92,7 +92,7 @@
 							<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
 								<el-form-item label="联系电话">
 									{{ state.orderDetail.contact }}
-<!--									<el-checkbox-group v-model="checkedCities" :min="0" :max="1" class="ml10">
+									<!--									<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 plain title="呼叫" size="small" type="primary" class="ml8" @click="onCall">外呼</el-button>
@@ -120,13 +120,10 @@
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-								<el-form-item label="当前工单已回访次数" label-width="140px">
-									{{ visitCount }}次
-<!--                  <el-button type="primary" class="ml5" title="查看回访记录" link v-if="visitCount > 0">查看回访记录</el-button>-->
-								</el-form-item>
+								<el-form-item label="当前工单已回访次数" label-width="140px"> {{ visitCount }}次 </el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-form-item label="回访标签">
+								<el-form-item label="回访标签" prop="isPutThrough" :rules="[{ required: false, message: '请选择回访标签', trigger: 'change' }]">
 									<el-checkbox v-model="state.ruleForm.isPutThrough" :disabled="disabled">未接通</el-checkbox>
 								</el-form-item>
 							</el-col>
@@ -139,7 +136,7 @@
 									<el-form-item
 										label="语音评价"
 										:prop="`visitDetails.${index}.voiceEvaluate`"
-										:rules="[{ required: !state.ruleForm.isPutThrough, message: '请选择语音评价', trigger: 'change' }]"
+										:rules="[{ required: notGetThrough, message: '请选择语音评价', trigger: 'change' }]"
 									>
 										<el-radio-group v-model="item.voiceEvaluate" :disabled="disabled">
 											<el-radio :label="item.key" v-for="item in viceEvaluate" :key="item.key">{{ item.value }}</el-radio>
@@ -150,7 +147,7 @@
 									<el-form-item
 										label="话务员评价"
 										:prop="`visitDetails.${index}.seatEvaluate`"
-										:rules="[{ required: !state.ruleForm.isPutThrough, message: '请选择话务员评价', trigger: 'change' }]"
+										:rules="[{ required: notGetThrough, message: '请选择话务员评价', trigger: 'change' }]"
 									>
 										<el-radio-group v-model="item.seatEvaluate" :disabled="disabled">
 											<el-radio :label="item.key" v-for="item in seatEvaluate" :key="item.key">{{ item.value }}</el-radio>
@@ -161,7 +158,7 @@
 									<el-form-item
 										label="话务员回访内容"
 										:prop="`visitDetails.${index}.visitContent`"
-										:rules="[{ required: !state.ruleForm.isPutThrough, message: '请填写话务员回访内容', trigger: 'blur' }]"
+										:rules="[{ required: notGetThrough, message: '请填写话务员回访内容', trigger: 'blur' }]"
 									>
 										<common-advice
 											@chooseAdvice="chooseAdvice($event, index)"
@@ -188,7 +185,7 @@
 									<el-form-item
 										label="部门办件结果"
 										:prop="`visitDetails.${index}.orgProcessingResults`"
-										:rules="[{ required: !state.ruleForm.isPutThrough, message: '请选择部门办件结果', trigger: 'change' }]"
+										:rules="[{ required: notGetThrough, message: '请选择部门办件结果', trigger: 'change' }]"
 									>
 										<el-select
 											v-model="item.orgProcessingResults"
@@ -207,12 +204,12 @@
 										</el-select>
 									</el-form-item>
 								</el-col>
-                <!-- 不满意才会选择不满意原因 -->
-								<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="['1','2'].includes(item.orgProcessingResults?.key)">
+								<!-- 不满意才会选择不满意原因 -->
+								<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="['1', '2'].includes(item.orgProcessingResults?.key)">
 									<el-form-item
 										label="不满意原因"
 										:prop="`visitDetails.${index}.orgNoSatisfiedReason`"
-										:rules="[{ required: !state.ruleForm.isPutThrough, message: '请选择不满意原因', trigger: 'change' }]"
+										:rules="[{ required: notGetThrough, message: '请选择不满意原因', trigger: 'change' }]"
 									>
 										<el-select
 											v-model="item.orgNoSatisfiedReason"
@@ -233,7 +230,7 @@
 									<el-form-item
 										label="部门办件态度"
 										:prop="`visitDetails.${index}.orgHandledAttitude`"
-										:rules="[{ required: !state.ruleForm.isPutThrough, message: '请选择部门办件态度', trigger: 'change' }]"
+										:rules="[{ required: notGetThrough, message: '请选择部门办件态度', trigger: 'change' }]"
 									>
 										<el-select
 											v-model="item.orgHandledAttitude"
@@ -256,7 +253,7 @@
 									<el-form-item
 										label="部门回访内容"
 										:prop="`visitDetails.${index}.visitContent`"
-										:rules="[{ required: !state.ruleForm.isPutThrough, message: '请填写部门回访内容', trigger: 'blur' }]"
+										:rules="[{ required: notGetThrough, message: '请填写部门回访内容', trigger: 'blur' }]"
 									>
 										<common-advice
 											@chooseAdvice="chooseAdvice($event, index)"
@@ -291,7 +288,7 @@
 	</el-dialog>
 </template>
 <script setup lang="ts" name="orderFollowUpDetail">
-import { computed, defineAsyncComponent, reactive, ref } from 'vue';
+import { computed, defineAsyncComponent, reactive, ref, watch } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { commonEnum } from '/@/utils/constants';
 import { storeToRefs } from 'pinia';
@@ -344,6 +341,11 @@ const getBaseData = async (id: string) => {
 		visitSatisfaction.value = res.result?.visitSatisfaction ?? [];
 		visitId.value = res.result?.orderVisitModel?.id ?? '';
 		state.orderDetail = res.result?.orderVisitModel?.order ?? {};
+    if(res.result?.orderVisitModel?.isPutThrough){
+      state.ruleForm.isPutThrough = !res.result?.orderVisitModel?.isPutThrough ?? false;
+    }else{
+      state.ruleForm.isPutThrough = false;
+    }
 		state.ruleForm.visitDetails = res.result?.orderVisitModel?.orderVisitDetails ?? {};
 		for (let i of state.ruleForm.visitDetails) {
 			if (i.visitTarget === 20) {
@@ -380,6 +382,14 @@ const getBaseData = async (id: string) => {
 		state.loading = false;
 	}
 };
+const notGetThrough = ref(false);
+watch(
+	() => state.ruleForm.isPutThrough,
+	(val) => {
+		notGetThrough.value = !val;
+	},
+	{ immediate: true, deep: true }
+);
 // 打开弹窗
 const openDialog = (row: any, type: string = '回访') => {
 	getBaseData(row.id);
@@ -397,7 +407,6 @@ const mouseup = () => {
 // 关闭弹窗
 const closeDialog = () => {
 	state.dialogVisible = false;
-	state.ruleForm = {};
 };
 // 呼叫
 const dialOut = (phoneNumber: string) => {
@@ -430,8 +439,8 @@ const selectReason = (val: any, index: number | string) => {
 	});
 };
 const close = () => {
-	ruleFormRef.value.clearValidate();
-	ruleFormRef.value.resetFields();
+	ruleFormRef.value?.clearValidate();
+	ruleFormRef.value?.resetFields();
 };
 // 提交
 const onSubmit = (formEl: FormInstance | undefined) => {

+ 0 - 22
src/views/business/visit/index.vue

@@ -94,28 +94,6 @@
                 <span v-if="item.visitTarget===10">{{item.seatEvaluateText}}</span>
               </span>
           </template>
-        </el-table-column>
-        <el-table-column label="被回访部门" show-overflow-tooltip width="150">
-          <template #default="{ row }">
-            <span v-if="row.visitTarget===20">{{row.visitOrgName}}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="部门办件结果" show-overflow-tooltip width="150">
-          <template #default="{ row }">
-            <span v-if="row.visitTarget===20">{{row.orgProcessingResults?.value}}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="部门办件态度" show-overflow-tooltip width="150">
-          <template #default="{ row }">
-            <span v-if="row.visitTarget===20">{{row.orgHandledAttitude?.value}}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="不满意原因" show-overflow-tooltip width="150">
-          <template #default="{ row }">
-            <span v-if="row.visitTarget===20">
-              {{row.orgNoSatisfiedReason?.map(item => item.value).join(',')}}
-            </span>
-          </template>
         </el-table-column>
 				<el-table-column label="操作" width="170" fixed="right" align="center">
 					<template #default="{ row }">

+ 1 - 1
src/views/knowledge/collect/index.vue

@@ -26,7 +26,7 @@
         </el-table-column>
         <el-table-column label="操作" width="140" fixed="right" align="center">
           <template #default="{ row }">
-            <el-button link type="primary" @click="onPreview(row)" v-auth="'knowledge:index:preview'" title="知识详情"> 知识详情 </el-button>
+            <el-button link type="primary" @click="onPreview(row)" title="知识详情"> 知识详情 </el-button>
           </template>
         </el-table-column>
         <template #empty>

+ 132 - 140
src/views/knowledge/component/Knowledge-keywords.vue

@@ -1,189 +1,181 @@
 <template>
-  <el-drawer title="知识关键词" v-model="drawerVisible" size="40%">
-      <el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
-        <el-form-item label="关键词" prop="Tag">
-          <el-input v-model="state.queryParams.Tag" placeholder="请输入关键词" clearable @keyup.enter="queryList" />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-          <el-button @click="resetQuery(ruleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-        </el-form-item>
-      </el-form>
-      <div class="mb20">
-        <el-button type="primary" @click="addParameter" v-auth="'auxiliary:knowledgeLexicon:add'">
-          <SvgIcon name="ele-Plus" class="mr5" />新增
-        </el-button>
-        <el-button type="primary" @click="businessTagRemove" v-auth="'auxiliary:knowledgeLexicon:delete'" :disabled="!multipleSelection.length">
-          <SvgIcon name="ele-Delete" class="mr5" />删除
-        </el-button>
-      </div>
-      <!-- 表格 -->
-      <el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" :reserve-selection="true"/>
-        <el-table-column prop="tag" label="关键词" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="synonym" label="同义词" show-overflow-tooltip></el-table-column>
-        <el-table-column label="操作" width="120" fixed="right" align="center">
-          <template #default="{ row }">
-            <el-button link type="primary" @click="updateLexicon(row)" v-auth="'auxiliary:knowledgeLexicon:edit'" title="编辑知识库词库">
-              编辑
-            </el-button>
-          </template>
-        </el-table-column>
-        <template #empty>
-          <Empty />
-        </template>
-      </el-table>
-      <!-- 分页 -->
-      <pagination
-          :total="state.total"
-          v-model:page="state.queryParams.PageIndex"
-          v-model:limit="state.queryParams.PageSize"
-          @pagination="queryList"
-      />
-    <template #footer>
+	<el-drawer title="知识关键词" v-model="drawerVisible" size="40%">
+		<el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
+			<el-form-item label="关键词" prop="Tag">
+				<el-input v-model="state.queryParams.Tag" placeholder="请输入关键词" clearable @keyup.enter="queryList" />
+			</el-form-item>
+			<el-form-item>
+				<el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+				<el-button @click="resetQuery(ruleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
+			</el-form-item>
+		</el-form>
+		<div class="mb20">
+			<el-button type="primary" @click="addParameter">
+				<SvgIcon name="ele-Plus" class="mr5" />新增
+			</el-button>
+			<el-button type="primary" @click="businessTagRemove" :disabled="!multipleSelection.length">
+				<SvgIcon name="ele-Delete" class="mr5" />删除
+			</el-button>
+		</div>
+		<!-- 表格 -->
+		<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
+			<el-table-column type="selection" width="55" :reserve-selection="true" />
+			<el-table-column prop="tag" label="关键词" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="synonym" label="同义词" show-overflow-tooltip></el-table-column>
+			<el-table-column label="操作" width="120" fixed="right" align="center">
+				<template #default="{ row }">
+					<el-button link type="primary" @click="updateLexicon(row)" title="编辑知识库词库">
+						编辑
+					</el-button>
+				</template>
+			</el-table-column>
+			<template #empty>
+				<Empty />
+			</template>
+		</el-table>
+		<!-- 分页 -->
+		<pagination :total="state.total" v-model:page="state.queryParams.PageIndex" v-model:limit="state.queryParams.PageSize" @pagination="queryList" />
+		<template #footer>
 			<span class="dialog-footer">
 				<el-button @click="drawerVisible = false" class="default-button">取 消</el-button>
 				<el-button type="primary" @click="onConfirm" :loading="state.loading">提 交</el-button>
 			</span>
-    </template>
-  </el-drawer>
-  <!--  新增知识库词库  -->
-  <knowledge-lexicon-add ref="knowledgeLexiconAddRef" @updateList="queryList" :knowledgeWordClassify="knowledgeWordClassify"/>
-  <!--  编辑知识库词库  -->
-  <knowledge-lexicon-edit ref="knowledgeLexiconEditRef" @updateList="queryList" :knowledgeWordClassify="knowledgeWordClassify"/>
+		</template>
+	</el-drawer>
+	<!--  新增知识库词库  -->
+	<knowledge-lexicon-add ref="knowledgeLexiconAddRef" @updateList="queryList" :knowledgeWordClassify="knowledgeWordClassify" />
+	<!--  编辑知识库词库  -->
+	<knowledge-lexicon-edit ref="knowledgeLexiconEditRef" @updateList="queryList" :knowledgeWordClassify="knowledgeWordClassify" />
 </template>
 <script setup lang="ts">
-import {defineAsyncComponent, reactive, ref} from "vue";
-import {knowledgeLexiconDelete, knowledgeLexiconList, orderKnowledgeBaseData} from '/@/api/auxiliary/knowledgeLexicon';
-import {auth} from "/@/utils/authFunction";
-import {ElMessage, ElMessageBox, FormInstance} from "element-plus";
+import { defineAsyncComponent, reactive, ref } from 'vue';
+import { knowledgeLexiconDelete, knowledgeLexiconList, orderKnowledgeBaseData } from '/@/api/auxiliary/knowledgeLexicon';
+import { auth } from '/@/utils/authFunction';
+import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 
 // 引入组件
 const KnowledgeLexiconAdd = defineAsyncComponent(() => import('/@/views/auxiliary/knowledgeLexicon/components/Knowledge-lexicon-add.vue')); // 新增知识库词库
 const KnowledgeLexiconEdit = defineAsyncComponent(() => import('/@/views/auxiliary/knowledgeLexicon/components/Knowledge-lexicon-edit.vue')); // 编辑知识库词库
 
-const emit = defineEmits(['selectKeyword'])
+const emit = defineEmits(['selectKeyword']);
 
 const drawerVisible = ref<boolean>(false);
 
 const state = reactive<any>({
-  queryParams: {
-    // 查询参数
-    PageIndex: 1,
-    PageSize: 10,
-    Tag: null, // 标签
-    Classify: null, // 标签类型
-    Synonym: null, // 近义词
-  },
-  total: 0, // 总条数
-  tableData: [], // 表格数据
+	queryParams: {
+		// 查询参数
+		PageIndex: 1,
+		PageSize: 10,
+		Tag: null, // 标签
+		Classify: null, // 标签类型
+		Synonym: null, // 近义词
+	},
+	total: 0, // 总条数
+	tableData: [], // 表格数据
 });
 const ruleFormRef = ref<any>(null); // 表单ref
-const knowledgeWordClassify = ref<EmptyArrayType>();// 标签类型
-const keywordIds = ref<EmptyArrayType>();// 关键词ID
+const knowledgeWordClassify = ref<EmptyArrayType>(); // 标签类型
+const keywordIds = ref<EmptyArrayType>(); // 关键词ID
 // 获取基础数据
-const getBaseData = async ()=>{
-  try {
-    const res = await orderKnowledgeBaseData();
-    knowledgeWordClassify.value = res.result?.knowledgeWordClassify ?? [];
-  }catch (error){
-    console.log(error)
-  }
-}
+const getBaseData = async () => {
+	try {
+		const res = await orderKnowledgeBaseData();
+		knowledgeWordClassify.value = res.result?.knowledgeWordClassify ?? [];
+	} catch (error) {
+		console.log(error);
+	}
+};
 // 获取参数列表
 const queryList = () => {
-  state.loading = true;
-  if (!auth('auxiliary:knowledgeLexicon:query')) ElMessage.error('抱歉,您没有权限获取知识库词库列表!');
-  else {
-    knowledgeLexiconList(state.queryParams)
-        .then((res) => {
-          state.loading = false;
-          state.tableData = res.result.items ?? [];
-          state.total = res.result.total ?? 0;
-          multipleTableRef.value!.clearSelection();
-          if(keywordIds.value && keywordIds.value.length){
-            for (let i of keywordIds.value) {
-              for (let j of state.tableData) {
-                if (i === j.id) {
-                  setTimeout(() => {
-                    multipleTableRef.value!.toggleRowSelection(j, true);
-                    multipleSelection.value.push(j);
-                  }, 0);
-                }
-              }
-            }
-          } else {
-            multipleSelection.value = [];
-            multipleTableRef.value!.clearSelection();
-          }
-        })
-        .finally(() => {
-          state.loading = false;
-        });
-  }
+	state.loading = true;
+	knowledgeLexiconList(state.queryParams)
+		.then((res) => {
+			state.loading = false;
+			state.tableData = res.result.items ?? [];
+			state.total = res.result.total ?? 0;
+			multipleTableRef.value!.clearSelection();
+			if (keywordIds.value && keywordIds.value.length) {
+				for (let i of keywordIds.value) {
+					for (let j of state.tableData) {
+						if (i === j.id) {
+							setTimeout(() => {
+								multipleTableRef.value!.toggleRowSelection(j, true);
+								multipleSelection.value.push(j);
+							}, 0);
+						}
+					}
+				}
+			} else {
+				multipleSelection.value = [];
+				multipleTableRef.value!.clearSelection();
+			}
+		})
+		.finally(() => {
+			state.loading = false;
+		});
 };
 // 重置表单
 const resetQuery = (formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-  queryList();
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
 };
 // 新增词库
 const knowledgeLexiconAddRef = ref<RefType>();
 const addParameter = () => {
-  knowledgeLexiconAddRef.value.openDialog();
+	knowledgeLexiconAddRef.value.openDialog();
 };
 // 编辑知识库词库
 const knowledgeLexiconEditRef = ref<RefType>();
 const updateLexicon = (row: any) => {
-  knowledgeLexiconEditRef.value.openDialog(row.id);
+	knowledgeLexiconEditRef.value.openDialog(row.id);
 };
 // 表格多选
 const multipleTableRef = ref<RefType>();
 const multipleSelection = ref<any>([]);
 const handleSelectionChange = (val: any[]) => {
-  multipleSelection.value = val;
+	multipleSelection.value = val;
 };
 // 删除词库
 const businessTagRemove = () => {
-  const ids = multipleSelection.value.map((item: any) => item.id);
-  const names = multipleSelection.value.map((item: any) => item.tag);
-  ElMessageBox.confirm(`您确定要删除:【${names}】,是否继续?`, '提示', {
-    confirmButtonText: '确认',
-    cancelButtonText: '取消',
-    type: 'warning',
-    draggable: true,
-    cancelButtonClass: 'default-button',
-    autofocus: false,
-  })
-      .then(() => {
-        knowledgeLexiconDelete({ids}).then(() => {
-          ElMessage.success('操作成功');
-          queryList();
-        });
-      })
-      .catch(() => {});
+	const ids = multipleSelection.value.map((item: any) => item.id);
+	const names = multipleSelection.value.map((item: any) => item.tag);
+	ElMessageBox.confirm(`您确定要删除:【${names}】,是否继续?`, '提示', {
+		confirmButtonText: '确认',
+		cancelButtonText: '取消',
+		type: 'warning',
+		draggable: true,
+		cancelButtonClass: 'default-button',
+		autofocus: false,
+	})
+		.then(() => {
+			knowledgeLexiconDelete({ ids }).then(() => {
+				ElMessage.success('操作成功');
+				queryList();
+			});
+		})
+		.catch(() => {});
 };
 // 确定选择关键词
-const onConfirm = ()=>{
-  const ids = multipleSelection.value.map((item: any) => item.id);
-  const name = multipleSelection.value.map((item: any) => item.tag).join(',');
-  emit('selectKeyword',{ids,name});
-  drawerVisible.value = false;
-}
+const onConfirm = () => {
+	const ids = multipleSelection.value.map((item: any) => item.id);
+	const name = multipleSelection.value.map((item: any) => item.tag).join(',');
+	emit('selectKeyword', { ids, name });
+	drawerVisible.value = false;
+};
 // 打开弹窗
-const openDialog = (keywords:any[]) => {
-  keywordIds.value = keywords;
-  getBaseData();
-  queryList();
-  drawerVisible.value = true;
+const openDialog = (keywords: any[]) => {
+	keywordIds.value = keywords;
+	getBaseData();
+	queryList();
+	drawerVisible.value = true;
 };
 // 关闭弹窗
 const closeDialog = () => {
-  drawerVisible.value = false;
+	drawerVisible.value = false;
 };
 defineExpose({
-  openDialog,
-  closeDialog,
+	openDialog,
+	closeDialog,
 });
-</script>
+</script>

+ 1 - 1
src/views/knowledge/config/standard/index.vue

@@ -73,7 +73,7 @@ const onPreview = () => {
 };
 // 查询规范详情
 const standardInfoFn = async () => {
-	if (!auth('knowledge:standard:query')) ElMessage.error('抱歉,您没有权限查询知识规范');
+	if (!auth('knowledge:standard:query')) ElMessage.error('抱歉,您没有权限获取知识规范');
 	else {
 		try {
 			state.loading = true;

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

@@ -243,7 +243,7 @@ const onDelete = (row: any) => {
 };
 // 获取知识库类型
 const queryList = () => {
-	if (!auth('knowledge:type:query')) ElMessage.error('抱歉,您没有权限查询知识库类型');
+	if (!auth('knowledge:type:query')) ElMessage.error('抱歉,您没有权限获取知识库类型');
 	else {
 		state.loading = true;
 		treeList()

+ 2 - 2
src/views/knowledge/error/index.vue

@@ -44,11 +44,11 @@
 				</el-table-column>
 				<el-table-column label="操作" width="200" fixed="right" align="center">
 					<template #default="{ row }">
-						<el-button link type="primary" @click="onPreview(row)" v-auth="'knowledge:index:preview'" title="知识详情"> 知识详情 </el-button>
+						<el-button link type="primary" @click="onPreview(row)" title="知识详情"> 知识详情 </el-button>
 						<el-button link type="primary" @click="onReply(row)" v-auth="'knowledge:error:reply'" title="答复" v-if="[0].includes(row.state)">
 							答复
 						</el-button>
-            <el-button link type="primary" @click="onEdit(row)" title="编辑" v-if="[0, 4].includes(row.knowledge?.status)">
+            <el-button link type="primary" @click="onEdit(row)" title="编辑" v-if="[0, 4].includes(row.knowledge?.status)" v-auth="'knowledge:error:edit'">
               编辑
             </el-button>
 					</template>

+ 1 - 4
src/views/knowledge/index/index.vue

@@ -104,16 +104,13 @@
 						</el-form>
 						<div class="mb20">
 							<el-button type="primary" @click="onOpenAddUser" v-auth="'knowledge:index:add'">
-								<SvgIcon name="ele-Plus" class="mr5" />新增知识
+								<SvgIcon name="ele-Plus" class="mr5" />创建知识
 							</el-button>
 						</div>
 						<!-- 表格 -->
 						<el-table :data="state.tableData" v-loading="state.tableLoading" row-key="id">
 							<el-table-column prop="title" label="标题" show-overflow-tooltip width="300">
 								<template #default="{ row }">
-<!--									<el-link type="primary" :underline="false" @click="onPreview(row)">
-										{{ row.title }}
-									</el-link>-->
                   <span class="color-primary">
                     {{ row.title }}
                   </span>

+ 3 - 3
src/views/knowledge/index/preview.vue

@@ -13,10 +13,10 @@
 					<span class="mr10">知识分类:{{ state.info.knowledgeTypeName }}</span>
 					<template v-if="route.params.id">
             <span class="mr10">已阅:{{ state.info.pageView }}</span>
-            <el-button link class="flex-center-align" type="info" @click="onCollect">
+            <el-button link class="flex-center-align" type="info" @click="onCollect" v-auth="'knowledge:collect:collect'">
               <SvgIcon :name="state.info?.collect?.collect ? 'ele-StarFilled' : 'ele-Star'" class="mr4" size="18px"/>{{ state.info?.collect?.collect ? '取消收藏' : '收藏' }}
             </el-button>
-            <el-button link class="flex-center-align" type="info"> <el-rate v-model="state.info.score" allow-half @change="onRate"/> 评分</el-button>
+            <el-button link class="flex-center-align" type="info" v-auth="'knowledge:collect:rate'"> <el-rate v-model="state.info.score" allow-half @change="onRate"/> 评分</el-button>
             <el-button link class="flex-center-align" type="info" @click="onError"> <SvgIcon name="ele-EditPen" class="mr4" />知识纠错</el-button>
             <el-button link class="flex-center-align" type="info" @click="onQuestion">
               <SvgIcon name="ele-QuestionFilled" class="mr4" />知识提问</el-button
@@ -52,7 +52,7 @@
         @click="onAudit"
         title="审批"
         v-if="[1, 2].includes(state.info.status) && state.info.isCanHandle"
-        v-auth="'business:order:handle'"
+        v-auth="'knowledge:index:audit'"
       >
         审批
       </el-button>

+ 1 - 1
src/views/knowledge/question/index.vue

@@ -44,7 +44,7 @@
         </el-table-column>
 				<el-table-column label="操作" width="180" fixed="right" align="center">
 					<template #default="{ row }">
-						<el-button link type="primary" @click="onPreview(row)" v-auth="'knowledge:index:preview'" title="知识详情"> 知识详情 </el-button>
+						<el-button link type="primary" @click="onPreview(row)" title="知识详情"> 知识详情 </el-button>
 						<el-button link type="primary" @click="onReply(row)" v-auth="'knowledge:question:reply'" title="答复" v-if="[0].includes(row.state)"> 答复 </el-button>
             <el-button link type="primary" @click="onEdit(row)" title="编辑" v-if="[0, 4].includes(row.knowledge?.status)">
               编辑

+ 3 - 3
src/views/quality/done/index.vue

@@ -217,9 +217,9 @@ const timeStartChangeCr = (val: string[]) => {
 };
 // 获取参数列表
 const queryList = () => {
+  /*if (!auth('quality:query')) ElMessage.error('抱歉,您没有权限获已质检列表!');
+  else {*/
   state.loading = true;
-  if (!auth('quality:query')) ElMessage.error('抱歉,您没有权限获取质检词库列表!');
-  else {
     qualityList(state.queryParams)
         .then((res) => {
           state.loading = false;
@@ -229,7 +229,7 @@ const queryList = () => {
         .finally(() => {
           state.loading = false;
         });
-  }
+  // }
 };
 // 重置表单
 const resetQuery = (formEl: FormInstance | undefined) => {

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

@@ -208,9 +208,9 @@ const timeStartChangeCr = (val: string[]) => {
 };
 // 获取参数列表
 const queryList = () => {
-  state.loading = true;
-  if (!auth('quality:query')) ElMessage.error('抱歉,您没有权限获取质检词库列表!');
-  else {
+  /*if (!auth('')) ElMessage.error('抱歉,您没有权限获取质检列表!');
+  else {*/
+    state.loading = true;
     qualityList(state.queryParams)
         .then((res) => {
           state.loading = false;
@@ -220,7 +220,7 @@ const queryList = () => {
         .finally(() => {
           state.loading = false;
         });
-  }
+  // }
 };
 // 重置表单
 const resetQuery = (formEl: FormInstance | undefined) => {

+ 9 - 26
src/views/query/countersign/index.vue

@@ -29,16 +29,9 @@
 			</el-form>
 		</el-card>
 		<el-card shadow="never">
-			<!-- 功能按钮 -->
-			<div class="mb20">
-				<el-button type="primary" @click="onExport" v-auth="'business:countersign:export'" :disabled="!multipleSelection.length">
-					<SvgIcon name="iconfont icon-daochu" class="mr5" />导出
-				</el-button>
-			</div>
 			<!-- 表格 -->
-			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
-				<el-table-column type="selection" width="55" />
-				<el-table-column prop="no" label="会签编码" show-overflow-tooltip></el-table-column>
+			<el-table :data="state.tableData" v-loading="state.loading">
+				<el-table-column prop="id" label="会签编码" show-overflow-tooltip width="300"></el-table-column>
 				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
 				<el-table-column width="100" label="省/市工单" prop="isProvince">
@@ -46,6 +39,11 @@
 						<span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
 					</template>
 				</el-table-column>
+        <el-table-column label="工单标题" prop="no" show-overflow-tooltip width="300">
+          <template #default="{ row }">
+            <span class="color-primary">{{ row.order?.title }}</span>
+          </template>
+        </el-table-column>
 				<el-table-column label="工单期满时间" show-overflow-tooltip width="170">
 					<template #default="{ row }">
 						<span>{{ formatDate(row.order?.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
@@ -58,19 +56,14 @@
 				</el-table-column>
 				<el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column label="工单状态" show-overflow-tooltip width="100" prop="order.statusText"></el-table-column>
-				<el-table-column label="工单标题" prop="no" show-overflow-tooltip width="150">
-					<template #default="{ row }">
-						<span>{{ row.order?.title }}</span>
-					</template>
-				</el-table-column>
 				<el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip width="170"></el-table-column>
 				<el-table-column label="接办时间" show-overflow-tooltip width="170">
 					<template #default="{ row }">
 						<span>{{ formatDate(row.order?.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
 					</template>
 				</el-table-column>
-				<el-table-column prop="order.hotspotName" label="热点分类" show-overflow-tooltip width="200"></el-table-column>
-				<el-table-column prop="starterOrgName" label="会签发起部门" show-overflow-tooltip width="120"></el-table-column>
+				<el-table-column prop="order.hotspotName" label="热点分类" show-overflow-tooltip width="150"></el-table-column>
+				<el-table-column prop="starterOrgName" label="会签发起部门" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column prop="starterName" label="会签发起人" show-overflow-tooltip width="120"></el-table-column>
 				<el-table-column label="会签发起时间" show-overflow-tooltip width="170">
 					<template #default="{ row }">
@@ -154,16 +147,6 @@ const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	formEl.resetFields();
 	queryList();
 }, 300);
-// 表格多选
-const multipleTableRef = ref<RefType>();
-const multipleSelection = ref<any>([]);
-const handleSelectionChange = (val: any[]) => {
-	multipleSelection.value = val;
-};
-// 导出
-const onExport = () => {
-	console.log('导出');
-};
 // 会签明细
 const countersignDetailRef = ref<RefType>(); // 会签明细ref
 const onCountersignDetail = (row: any) => {

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

@@ -156,7 +156,7 @@ const state = reactive<any>({
 			fixed: 'right',
 			align: 'center',
 			cellRenderer: (data: any) => {
-				if (auth('system:dict:query')) {
+				if (auth('system:dict:edit')) {
 					// 权限判断
 					return h(
 						ElButton,

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

@@ -6,7 +6,7 @@
 					<div>
 						<el-date-picker v-model="month" type="month" :clearable="false" placeholder="请选择月份" @change="selectMonth" />
 					</div>
-					<el-button-group v-ath="'system:holiday:workDay'">
+					<el-button-group v-auth="'system:holiday:workDay'">
 						<el-button type="primary" @click="setHoliday" :disabled="!multipleDates.length">
 							<SvgIcon name="ele-Sunny" class="mr3" /> 设定休息日</el-button
 						>

+ 0 - 2
src/views/system/config/timeLimit/component/Time-limit-add.vue

@@ -73,7 +73,6 @@
 							</div>
 							<!-- 参数表格 -->
 							<el-table :data="state.currentParam.paramValue" class="mt20" v-if="state.currentParam">
-								<el-table-column label="序号" type="index" width="70"></el-table-column>
 								<el-table-column :label="state.currentParam.name" prop="paramTypeValue">
 									<template #default="{ row }">
 										<template v-if="state.currentParam.typeCode === 'HotPots'">
@@ -213,7 +212,6 @@
 			<!-- 组合参数表格 -->
 			<div class="pd20" v-if="state.ruleForm.workflowCode === 'Order'">
 				<el-table :data="state.combination">
-					<el-table-column label="序号" type="index" width="70"></el-table-column>
 					<el-table-column label="组合名称" prop="combinationName">
 						<template #default="{ row }">
 							<el-input v-model="row.combinationName" placeholder="请填写组合名称" class="w100" max-length="30"></el-input>

+ 0 - 2
src/views/system/config/timeLimit/component/Time-limit-detail.vue

@@ -57,7 +57,6 @@
 							</div>
 							<!-- 参数表格 -->
 							<el-table :data="state.currentParam.paramValue" class="mt20" v-if="state.currentParam">
-								<el-table-column label="序号" type="index" width="70" align="center"></el-table-column>
 								<el-table-column :label="state.currentParam.name" prop="paramTypeValue" align="center" show-overflow-tooltip>
 									<template #default="{row}">
 										{{ row.paramTypeName }}
@@ -118,7 +117,6 @@
 					<!-- 组合参数表格 -->
 					<div class="pd20">
 						<el-table :data="state.combination">
-							<el-table-column label="序号" type="index" width="70"></el-table-column>
 							<el-table-column label="组合名称" prop="combinationName" align="center" width="300">
 								<template #default="{ row }">
 									{{ row.combinationName }}

+ 0 - 2
src/views/system/config/timeLimit/component/Time-limit-edit.vue

@@ -73,7 +73,6 @@
 							</div>
 							<!-- 参数表格 -->
 							<el-table :data="state.currentParam.paramValue" class="mt20" v-if="state.currentParam">
-								<el-table-column label="序号" type="index" width="70"></el-table-column>
 								<el-table-column :label="state.currentParam.name" prop="paramTypeValue">
 									<template #default="{ row }">
 										<template v-if="state.currentParam.typeCode === 'HotPots'">
@@ -213,7 +212,6 @@
 			<!-- 组合参数表格 -->
 			<div class="pd20" v-if="state.ruleForm.workflowCode === 'Order'">
 				<el-table :data="state.combination">
-					<el-table-column label="序号" type="index" width="70"></el-table-column>
 					<el-table-column label="组合名称" prop="combinationName">
 						<template #default="{ row }">
 							<el-input v-model="row.combinationName" placeholder="请填写组合名称" class="w100" max-length="30"></el-input>

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

@@ -8,7 +8,6 @@
       </div>
       <!-- 表格 -->
       <el-table :data="state.tableData" v-loading="state.loading">
-        <el-table-column type="index" width="60" label="序号" />
         <el-table-column prop="timeLimitName" label="配置名称" show-overflow-tooltip></el-table-column>
         <el-table-column prop="workflowName" label="业务名称" show-overflow-tooltip width="130"></el-table-column>
         <el-table-column prop="morningEnd" label="创建人" show-overflow-tooltip width="130"></el-table-column>

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

@@ -41,7 +41,6 @@
 					</div>
 					<!-- 表格 -->
 					<el-table :data="state.tableList" v-loading="state.loading" row-key="id">
-						<el-table-column type="index" width="60" label="序号" />
 						<!-- 配置 -->
 						<template v-if="state.activeName === '0'">
 							<el-table-column prop="name" label="业务模块" show-overflow-tooltip></el-table-column>

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

@@ -1,5 +1,14 @@
 <template>
-	<el-dialog v-model="state.dialogVisible" width="500px" draggable title="新增数据权限" ref="dialogRef">
+	<el-dialog
+		v-model="state.dialogVisible"
+		width="500px"
+		draggable
+		title="新增数据权限"
+		ref="dialogRef"
+		append-to-body
+		destroy-on-close
+		@close="close"
+	>
 		<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
 			<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">
@@ -48,8 +57,6 @@ const route = useRoute(); // 路由
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 const openDialog = async (accessLevelOptions: any) => {
-	ruleFormRef.value?.clearValidate();
-	ruleFormRef.value?.resetFields();
 	state.accessLevelOptions = accessLevelOptions;
 	const res: any = await dataAuthList();
 	state.tableData = res.result ?? [];
@@ -59,6 +66,10 @@ const openDialog = async (accessLevelOptions: any) => {
 const closeDialog = () => {
 	state.dialogVisible = false;
 };
+const close = () => {
+	ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.clearValidate();
+};
 // 新增
 const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;

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

@@ -1,5 +1,14 @@
 <template>
-	<el-dialog v-model="state.dialogVisible" width="500px" draggable title="修改数据权限" ref="dialogRef">
+	<el-dialog
+		v-model="state.dialogVisible"
+		width="500px"
+		draggable
+		title="修改数据权限"
+		ref="dialogRef"
+		append-to-body
+		destroy-on-close
+		@close="close"
+	>
 		<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
 			<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>
@@ -61,6 +70,10 @@ const openDialog = async (row: any, accessLevelOptions: any) => {
 const closeDialog = () => {
 	state.dialogVisible = false;
 };
+const close = () => {
+	ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.clearValidate();
+};
 // 新增
 const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;

+ 0 - 1
src/views/system/dataAuth/index.vue

@@ -9,7 +9,6 @@
 					</el-button>
 				</div>
 				<el-table :data="state.tableData" v-loading="state.loading" row-key="id">
-					<el-table-column type="index" width="60" label="序号" />
 					<el-table-column prop="tableName" label="表编码" show-overflow-tooltip></el-table-column>
 					<el-table-column prop="tableDisplay" label="表名称" show-overflow-tooltip> </el-table-column>
 					<el-table-column prop="roleDisplay" label="角色名称" show-overflow-tooltip></el-table-column>

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

@@ -1,5 +1,5 @@
 <template>
-	<el-dialog title="新增菜单" v-model="state.dialogVisible" width="769px" draggable>
+	<el-dialog title="新增菜单" v-model="state.dialogVisible" width="769px" draggable destroy-on-close append-to-body @close="close">
 		<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="90px" label-poistion="left">
 			<el-row :gutter="10">
 				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -201,8 +201,6 @@ const getMenuData = (routes: any) => {
 // 打开弹窗
 const openDialog = () => {
 	getMenuList().then((res: any) => {
-		ruleFormRef.value?.resetFields();
-		ruleFormRef.value?.resetFields();
 		state.dialogVisible = true;
 		state.menuData = getMenuData(res.result);
 	});
@@ -211,6 +209,10 @@ const openDialog = () => {
 const closeDialog = () => {
 	state.dialogVisible = false;
 };
+const close = () => {
+  ruleFormRef.value?.resetFields();
+  ruleFormRef.value?.clearValidate();
+};
 // 是否内嵌下拉改变
 const onSelectIframeChange = () => {
 	state.ruleForm.isLink = state.ruleForm.isIframe;

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

@@ -1,5 +1,5 @@
 <template>
-	<el-dialog title="修改菜单" v-model="state.dialogVisible" width="769px" draggable>
+	<el-dialog title="修改菜单" v-model="state.dialogVisible" width="769px" draggable destroy-on-close append-to-body @close="close">
 		<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="90px" label-poistion="left">
 			<el-row :gutter="10">
 				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -89,14 +89,14 @@
 				<template v-if="[1, 2].includes(state.ruleForm.menuType)">
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="快捷入口">
-              <template #label>
-                <p class="flex-center-align">
-                  <el-tooltip content="首页常用入口可选" placement="top-start" trigger="hover">
-                    <SvgIcon name="ele-QuestionFilled" class="mr3"></SvgIcon>
-                  </el-tooltip>
-                  快捷入口
-                </p>
-              </template>
+							<template #label>
+								<p class="flex-center-align">
+									<el-tooltip content="首页常用入口可选" placement="top-start" trigger="hover">
+										<SvgIcon name="ele-QuestionFilled" class="mr3"></SvgIcon>
+									</el-tooltip>
+									快捷入口
+								</p>
+							</template>
 							<el-switch v-model="state.ruleForm.isFast" inline-prompt active-text="是" inactive-text="否" />
 						</el-form-item>
 					</el-col>
@@ -200,24 +200,24 @@ const getMenuData = (routes: any) => {
 };
 // 打开弹窗
 const openDialog = async (row: any) => {
-	if (!auth('system:menu:detail')) ElMessage.error('抱歉,您没有权限获取菜单详情!');
-	else {
-		ruleFormRef.value?.resetFields();
-		try {
-			const res: any = await Promise.all([getMenuList(), getMenuById(row.id)]);
-			state.menuData = getMenuData(res[0].result);
-			state.menuData = excludeSelfById(state.menuData, row.id);
-			state.ruleForm = res[1].result;
-			state.dialogVisible = true;
-		} catch (error) {
-			console.log(error);
-		}
+	try {
+		const res: any = await Promise.all([getMenuList(), getMenuById(row.id)]);
+		state.menuData = getMenuData(res[0].result);
+		state.menuData = excludeSelfById(state.menuData, row.id);
+		state.ruleForm = res[1].result;
+		state.dialogVisible = true;
+	} catch (error) {
+		console.log(error);
 	}
 };
 // 关闭弹窗
 const closeDialog = () => {
 	state.dialogVisible = false;
 };
+const close = () => {
+	ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.clearValidate();
+};
 // 是否内嵌下拉改变
 const onSelectIframeChange = () => {
 	state.ruleForm.isLink = state.ruleForm.isIframe;

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

@@ -24,7 +24,7 @@
                 class="mr5"
             />{{ state.isExpand ? '收起' : '展开' }}</el-button
           >
-          <el-button type="primary" @click="onOpenAddMenu" v-auth="'system:menu:add'"> <SvgIcon name="ele-Plus" class="mr5" />新增 </el-button>
+          <el-button type="primary" @click="onOpenAddMenu" v-auth="'system:menu:add'"> <SvgIcon name="ele-Plus" class="mr5" /> 新增菜单 </el-button>
         </el-col>
       </el-row>
 			<!-- 表格 -->

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

@@ -24,7 +24,7 @@
 							v-model="state.ruleForm.parentId"
 							ref="cascadeRef"
 							@change="getKnowledgeList"
-              disabled
+							disabled
 						>
 						</el-cascader>
 					</el-form-item>
@@ -68,13 +68,13 @@
 </template>
 
 <script setup lang="ts" name="systemEditOrg">
-import {reactive, ref} from 'vue';
-import {ElMessage, FormInstance} from 'element-plus';
+import { reactive, ref } from 'vue';
+import { ElMessage, FormInstance } from 'element-plus';
 import mittBus from '/@/utils/mitt';
-import {auth} from '/@/utils/authFunction';
-import {excludeSelfById} from '/@/utils/tools';
+import { auth } from '/@/utils/authFunction';
+import { excludeSelfById } from '/@/utils/tools';
 import other from '/@/utils/other';
-import {getOrgById, updateOrg} from '/@/api/system/organize';
+import { getOrgById, updateOrg } from '/@/api/system/organize';
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
@@ -84,16 +84,16 @@ const ruleFormRef = ref<FormInstance>();
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-    name: '', // 部门名称
-    orgCode: '', // 部门编码
-    parentId: '', // 上级部门id
-    parentName: '', // 上级部门名称
-    shortName: '', // 部门简称
-    orgType: '', // 部门类别
-    areaName: '', // 所属区域名称
-    areaCode: '', // 所属区域编码
-    isEnable: true, // 是否启用
-    children: [], // 子部门
+		name: '', // 部门名称
+		orgCode: '', // 部门编码
+		parentId: '', // 上级部门id
+		parentName: '', // 上级部门名称
+		shortName: '', // 部门简称
+		orgType: '', // 部门类别
+		areaName: '', // 所属区域名称
+		areaCode: '', // 所属区域编码
+		isEnable: true, // 是否启用
+		children: [], // 子部门
 	},
 	orgData: [], // 上级部门数据
 	orgType: [], // 部门类型
@@ -102,20 +102,17 @@ const state = reactive<any>({
 });
 // 打开弹窗
 const openDialog = async (row: any, orgData: any, orgType: any, areas: any) => {
-	if (!auth('system:organize:detail')) ElMessage.error('抱歉,您没有获取部门详情的权限!');
-	else {
-		try {
-			ruleFormRef.value?.resetFields();
-			state.orgData = other.deepClone(orgData);
-			state.orgType = orgType;
-			state.orgData = excludeSelfById(state.orgData, row.id);
-			const res: any = await getOrgById(row.id);
-			state.ruleForm = res.result;
-			state.areaOptions = areas ?? []; //省市区数据
-			state.dialogVisible = true;
-		} catch (error) {
-			console.log(error);
-		}
+	try {
+		ruleFormRef.value?.resetFields();
+		state.orgData = other.deepClone(orgData);
+		state.orgType = orgType;
+		state.orgData = excludeSelfById(state.orgData, row.id);
+		const res: any = await getOrgById(row.id);
+		state.ruleForm = res.result;
+		state.areaOptions = areas ?? []; //省市区数据
+		state.dialogVisible = true;
+	} catch (error) {
+		console.log(error);
 	}
 };
 // 关闭弹窗

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

@@ -23,7 +23,7 @@
             />
               {{ state.isExpand ? '收起' : '展开' }}</el-button
             >
-            <el-button type="primary" @click="onOpenAddOrg('')" v-auth="'system:organize:add'"> <SvgIcon name="ele-Plus" class="mr5" />新增 </el-button>
+            <el-button type="primary" @click="onOpenAddOrg('')" v-auth="'system:organize:add'"> <SvgIcon name="ele-Plus" class="mr5" /> 新增部门 </el-button>
           </el-col>
         </el-row>
 			<!-- 表格 -->

+ 2 - 3
src/views/system/parameter/index.vue

@@ -17,12 +17,11 @@
 		<el-card shadow="never">
 			<div class="mb20">
 				<el-button type="primary" @click="addParameter" v-waves v-auth="'system:parameter:add'">
-					<SvgIcon name="ele-Plus" class="mr5" />新增
+					<SvgIcon name="ele-Plus" class="mr5" />创建参数
 				</el-button>
 			</div>
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading">
-				<el-table-column type="index" width="60" label="序号" />
 				<el-table-column prop="settingName" label="参数名称" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="code" label="参数" show-overflow-tooltip width="130"></el-table-column>
 				<el-table-column prop="settingValue" label="参数值" show-overflow-tooltip>
@@ -41,7 +40,7 @@
 				<el-table-column label="操作" width="200" fixed="right" align="center">
 					<template #default="{ row }">
 						<el-button link type="primary" @click="updateParameter(row)" v-auth="'system:parameter:edit'" title="修改参数"> 修改 </el-button>
-						<el-button link type="info" @click="viewParameter(row)" v-auth="'system:parameter:detail'" title="查看详情"> 查看 </el-button>
+						<el-button link type="info" @click="viewParameter(row)" title="查看详情"> 查看 </el-button>
 						<!--              <el-button link type="danger" @click="parameterDelete(row)" v-auth="'system:timeLimit:detail'" title="删除参数"> 删除 </el-button>-->
 					</template>
 				</el-table-column>

+ 17 - 16
src/views/system/roles/component/Role-permission.vue

@@ -1,5 +1,5 @@
 <template>
-	<el-dialog :title="`【${state.rowName}】权限配置`" v-model="state.dialogVisible" draggable @opened="opened">
+	<el-dialog :title="`【${state.rowName}】权限配置`" v-model="state.dialogVisible" draggable @opened="opened" @closed="closed">
 		<div class="custom-tree-node-container" v-loading="state.loading">
 			<el-row :gutter="10">
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
@@ -108,21 +108,22 @@ const treeFlat = (source: any[]) => {
 };
 //  打开弹窗后查询已有权限
 const opened = () => {
-	if (!auth('system:role:detail')) ElMessage.error('抱歉,您没有权限获取当前角色权限!');
-	else {
-		getRolePower({ roleid: state.currentRow.id })
-			.then((res: any) => {
-				let arr: string[] = res.result?.systemMenuArr ?? [];
-				arr = arr.map((v: any) => v.code);
-				menuRef.value.setCheckedKeys(arr);
-				const arr1 = treeFlat(state.menuTableData);
-				if (arr.length === arr1.length) state.menuNodeAll = true;
-				state.loading = false;
-			})
-			.catch(() => {
-				state.loading = false;
-			});
-	}
+	getRolePower({ roleid: state.currentRow.id })
+		.then((res: any) => {
+			let arr: string[] = res.result?.systemMenuArr ?? [];
+			arr = arr.map((v: any) => v.code);
+			menuRef.value.setCheckedKeys(arr);
+			const arr1 = treeFlat(state.menuTableData);
+			if (arr.length === arr1.length) state.menuNodeAll = true;
+			state.loading = false;
+		})
+		.catch(() => {
+			state.loading = false;
+		});
+};
+
+const closed = () => {
+	filterText.value = '';
 };
 const filterText = ref('');
 watch(filterText, (val) => {

+ 1 - 2
src/views/system/roles/component/Role-user-list.vue

@@ -2,8 +2,7 @@
 	<el-dialog v-model="state.dialogVisible" draggable :title="`用户列表(${state.currentRow.displayName})`" width="900px">
 		<!-- 表格 -->
 		<el-table :data="state.tableData" max-height="500px">
-			<el-table-column type="index" width="60" label="序号" fixed="left" />
-			<el-table-column prop="name" label="姓名" show-overflow-tooltip width="200" fixed="left"></el-table-column>
+			<el-table-column prop="name" label="姓名" show-overflow-tooltip width="150" fixed="left"></el-table-column>
 			<el-table-column prop="userName" label="账号" show-overflow-tooltip width="200"></el-table-column>
 			<el-table-column prop="organization.name" label="所属部门" show-overflow-tooltip width="190"></el-table-column>
 			<el-table-column prop="phoneNo" label="电话号码" show-overflow-tooltip width="130"></el-table-column>

+ 3 - 4
src/views/system/roles/index.vue

@@ -21,10 +21,9 @@
 		</el-card>
 		<el-card shadow="never">
 			<div class="mb20">
-				<el-button type="primary" @click="onOpenAddRole" v-waves v-auth="'system:role:add'"> <SvgIcon name="ele-Plus" class="mr5" />新增 </el-button>
+				<el-button type="primary" @click="onOpenAddRole" v-auth="'system:role:add'"> <SvgIcon name="ele-Plus" class="mr5" />新增角色 </el-button>
 			</div>
 			<el-table :data="state.tableData.data" v-loading="state.loading" row-key="id">
-				<el-table-column type="index" width="60" label="序号" />
 				<el-table-column prop="displayName" label="角色名称" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="name" label="角色编码" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="description" label="角色说明" show-overflow-tooltip width="400"></el-table-column>
@@ -47,10 +46,10 @@
 						<el-button link type="success" @click="onPermissions(row)" title="分配角色权限" v-auth="'system:role:assign'" v-if="!row.isDeleted">
 							分配权限
 						</el-button>
-						<el-button link type="info" @click="onDataAuth(row)" v-auth="'system:role:dataAuth:query'" title="配置角色数据权限" v-if="!row.isDeleted">
+						<el-button link type="info" @click="onDataAuth(row)" v-auth="'system:role:dataAuth'" title="配置角色数据权限" v-if="!row.isDeleted">
 							数据权限
 						</el-button>
-						<el-button link type="danger" @click="onRowDel(row)" v-auth="'system:role:edit'" title="删除角色" v-if="!row.isDeleted"> 删除 </el-button>
+						<el-button link type="danger" @click="onRowDel(row)" v-auth="'system:role:delete'" title="删除角色" v-if="!row.isDeleted"> 删除 </el-button>
 					</template>
 				</el-table-column>
 				<template #empty>

+ 21 - 29
src/views/system/user/index.vue

@@ -52,7 +52,6 @@
 						</div>
 						<!-- 表格 -->
 						<el-table :data="state.tableData" v-loading="state.tableLoading" row-key="id">
-							<el-table-column type="index" width="60" label="序号" />
 							<el-table-column prop="name" label="姓名" show-overflow-tooltip width="170"></el-table-column>
 							<el-table-column prop="userName" label="账号" show-overflow-tooltip width="170"></el-table-column>
 							<el-table-column prop="organization.name" label="所属部门" show-overflow-tooltip width="190"></el-table-column>
@@ -108,8 +107,7 @@ import { ElMessage, ElMessageBox } from 'element-plus';
 import { formatDate } from '/@/utils/formatTime';
 import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
-import { delUser, getRoles, getUserListPaged, restPwd } from '/@/api/system/user';
-import { getOrgList } from '/@/api/system/organize';
+import {delUser, getCanUseOrg, getRoles, getUserListPaged, restPwd} from '/@/api/system/user';
 
 // 引入组件
 const UserAdd = defineAsyncComponent(() => import('/@/views/system/user/component/User-add.vue')); // 新增用户组件
@@ -150,24 +148,21 @@ const handleQuery = throttle(() => {
 }, 300);
 // 获取所有组织结构
 const getOrgListApi = () => {
-	if (!auth('system:organize:query')) ElMessage.error('抱歉,您没有权限获取组织架构!');
-	else {
-		state.loading = true;
-		getOrgList()
-			.then((res: any) => {
-				state.orgData = res?.result ?? [];
-				state.defaultExpandedKeys = state.orgData.map((v: any) => {
-					return v.children.map((i: any) => {
-						return i.id;
-					});
+	state.loading = true;
+  getCanUseOrg()
+		.then((res: any) => {
+			state.orgData = res?.result ?? [];
+			state.defaultExpandedKeys = state.orgData.map((v: any) => {
+				return v.children.map((i: any) => {
+					return i.id;
 				});
-				state.defaultExpandedKeys.push(state.orgData[0].id); //默认展开一级部门
-				state.loading = false;
-			})
-			.catch(() => {
-				state.loading = false;
 			});
-	}
+			state.defaultExpandedKeys.push(state.orgData[0].id); //默认展开一级部门
+			state.loading = false;
+		})
+		.catch(() => {
+			state.loading = false;
+		});
 };
 /** 获取用户列表 */
 const rightScrollRef = ref<RefType>();
@@ -189,16 +184,13 @@ const getList = () => {
 };
 // 获取角色
 const getRolesFn = () => {
-	if (!auth('system:role:query')) ElMessage.error('抱歉,您没有权限获取角色列表!');
-	else {
-		getRoles({ PageIndex: 1, PageSize: 999, IsDeleted: false }).then((res: any) => {
-			state.options = res?.result.items ?? [];
-			state.options = state.options.map((item: any) => ({
-				value: item.id,
-				label: item.displayName,
-			}));
-		});
-	}
+	getRoles({ PageIndex: 1, PageSize: 999, IsDeleted: false }).then((res: any) => {
+		state.options = res?.result.items ?? [];
+		state.options = state.options.map((item: any) => ({
+			value: item.id,
+			label: item.displayName,
+		}));
+	});
 };
 // 点击节点
 const handleNodeClick = (data: any) => {

+ 1 - 1
src/views/tels/blacklist/index.vue

@@ -38,7 +38,7 @@
 				</el-table-column>
         <el-table-column label="操作" width="200" fixed="right" align="center">
           <template #default="{ row }">
-            <el-button link type="primary" @click="onRemove(row)" v-auth="'system:parameter:edit'" title="删除黑名单"> 删除 </el-button>
+            <el-button link type="primary" @click="onRemove(row)" title="删除黑名单"> 删除 </el-button>
           </template>
         </el-table-column>
 				<template #empty>

+ 0 - 1
src/views/tels/restApply/index.vue

@@ -44,7 +44,6 @@
 		<el-card shadow="never">
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id">
-				<el-table-column type="index" width="60" label="序号" />
 				<el-table-column prop="userName" label="坐席" show-overflow-tooltip>
 					<template #default="{ row }">
 						<span

+ 5 - 5
src/views/todo/visit/index.vue

@@ -87,11 +87,11 @@
 					</template>
 				</el-table-column>
 				<el-table-column prop="employeeName" label="回访人" show-overflow-tooltip width="150"></el-table-column>
-				<el-table-column label="是否接通" show-overflow-tooltip width="150">
-					<template #default="{ row }">
-						<span>{{ row.isPutThrough ? '未接通' : '已接通' }}</span>
-					</template>
-				</el-table-column>
+        <el-table-column label="是否接通" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <span v-if="row.isPutThrough">{{ row.isPutThrough ? '未接通' : '已接通' }}</span>
+          </template>
+        </el-table-column>
 				<el-table-column label="操作" width="140" fixed="right" align="center">
 					<template #default="{ row }">
 						<el-button link type="primary" @click="onManpower(row)" title="工单回访" v-auth="'todo:visit:manpower'"> 回访 </el-button>