浏览代码

Merge branch 'release' into dev

zhangchong 1 月之前
父节点
当前提交
70f891542b

+ 1 - 1
.env.development

@@ -3,7 +3,7 @@ VITE_MODE_NAME=development
 # 防止部署多套系统到同一域名不同目录时,变量共用的问题 设置不同的前缀
 VITE_STORAGE_NAME=dev
 # 业务系统基础请求地址
-VITE_API_URL=http://110.188.24.28:50300
+VITE_API_URL=http://110.188.24.28:50100
 # 业务系统socket请求地址
 VITE_API_SOCKET_URL=http://110.188.24.28:50100/hubs/hotline
 # 业务系统文件上传上传请求地址

+ 3 - 1
.env.production

@@ -25,4 +25,6 @@ VITE_JTHS_ERROR_WORD_SIGN=327c474854be9e3c259b34b9df025236b7321a55
 # 捷通华声错别字检测请求Nonce
 VITE_JTHS_ERROR_WORD_NONCE=726061.054747415
 # 捷通华声错别字检测请求KEY
-VITE_JTHS_ERROR_WORD_KEY=MTAwMDAw
+VITE_JTHS_ERROR_WORD_KEY=MTAwMDAw
+# 12345大模型热线赋智请求地址
+VITE_RXFZ_API_URL=https://rxfz.scopenai.com:18027/third

+ 11 - 0
src/api/business/discern.ts

@@ -135,6 +135,17 @@ export const discernUpdate = (data: object) => {
 		data,
 	});
 }
+/**
+ * @description 甄别修改理由
+ * @param {object} data
+ */
+export const discernUpdateReason = (data: object) => {
+	return request({
+		url: `/api/v1/Order/order_screen_alter`,
+		method: 'put',
+		data,
+	});
+}
 /**
  * @description 甄别修改提起时限
  * @param {object} data

+ 6 - 0
src/directive/authDirective.ts

@@ -19,6 +19,9 @@ export function authDirective(app: App) {
 	// 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
 	app.directive('auths', {
 		mounted(el, binding) {
+			if (!binding.value) {
+				el.parentNode && el.parentNode.removeChild(el);
+			}
 			let flag = false;
 			const stores = useUserInfo();
 			stores.userInfos.authBtnList?.map((val: string) => {
@@ -32,6 +35,9 @@ export function authDirective(app: App) {
 	// 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
 	app.directive('auth-all', {
 		mounted(el, binding) {
+			if (!binding.value) {
+				el.parentNode && el.parentNode.removeChild(el);
+			}
 			const stores = useUserInfo();
 			const flag = judgementSameArr(binding.value, stores.userInfos.authBtnList);
 			if (!flag) el.parentNode.removeChild(el);

+ 2 - 2
src/views/business/delay/audit.vue

@@ -30,7 +30,7 @@
 						type="primary"
 						@click="onAuditBatch"
 						:disabled="isChecked"
-						v-if="state.queryParams.IsApply === 'false'"
+						v-show="state.queryParams.IsApply === 'false'"
 						:loading="state.loading"
 						v-auth="'business:delay:audit:batch'"
 						><SvgIcon name="ele-Edit" class="mr5" />批量审批<span v-if="checkTable.length">({{ checkTable.length }})</span>
@@ -121,7 +121,7 @@
 								@click="onAudit(row)"
 								title="审批"
 								v-auth="'business:delay:audit:todo'"
-								v-if="state.queryParams.IsApply === 'false'"
+								v-show="state.queryParams.IsApply === 'false'"
 							>
 								审批
 							</el-button>

+ 1 - 1
src/views/business/discern/YBApply.vue

@@ -125,7 +125,7 @@
 								@click="submitDiscern(row)"
 								title="发起甄别申请"
 								v-auth="'business:discern:apply:submit'"
-								v-if="row.isShowOperate"
+								v-show="row.isShowOperate"
 							>
 								发起甄别
 							</el-button>

+ 9 - 9
src/views/business/discern/ZGApply.vue

@@ -6,9 +6,9 @@
 				<el-tab-pane :name="1" label="中心话务甄别" v-if="userInfos.isCenter" :disabled="state.loading"></el-tab-pane>
 			</el-tabs>
 			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline :disabled="state.loading">
-				<el-form-item label="数据范围" prop="DataScope" v-if="state.queryParams.ScreenType === 0" v-auth="'business:discern:apply:dataScope'">
-					<el-segmented
-						:options="[
+					<el-form-item label="数据范围" prop="DataScope"  v-auth="'business:discern:apply:dataScope'" v-show="state.queryParams.ScreenType === 0">
+						<el-segmented
+							:options="[
 							{
 								value: 1,
 								label: '本级部门',
@@ -18,10 +18,10 @@
 								label: '全部',
 							},
 						]"
-						v-model="state.queryParams.DataScope"
-						@change="handleQuery"
-					/>
-				</el-form-item>
+							v-model="state.queryParams.DataScope"
+							@change="handleQuery"
+						/>
+					</el-form-item>
 				<el-form-item label="甄别退回" prop="ScreenSendBack">
 					<el-select v-model="state.queryParams.ScreenSendBack" placeholder="请选择甄别退回" @change="handleQuery">
 						<el-option :value="0" label="全部" />
@@ -129,7 +129,7 @@
 								@click="submitDiscern(row)"
 								title="发起甄别申请"
 								v-auth="'business:discern:apply:submit'"
-								v-if="row.isShowOperate"
+								v-show="row.isShowOperate"
 							>
 								发起甄别
 							</el-button>
@@ -139,7 +139,7 @@
 								@click="onEditApplyTime(row)"
 								title="修改甄别提起时限"
 								v-auth="'business:discern:apply:editApplyTime'"
-								v-if="row.isShowOperate"
+								v-show="row.isShowOperate"
 							>
 								修改提起时限
 							</el-button>

+ 177 - 0
src/views/business/discern/components/Discern-edit-reason.vue

@@ -0,0 +1,177 @@
+<template>
+	<el-dialog
+		v-model="state.dialogVisible"
+		draggable
+		title="甄别修改理由"
+		ref="dialogRef"
+		@mouseup="mouseup"
+		:style="'transform: ' + state.transform + ';'"
+		append-to-body
+		destroy-on-close
+		:close-on-click-modal="false"
+		@close="close"
+	>
+		<div v-loading="state.loading">
+			<el-form :model="state.discernForm" label-width="110px" ref="discernFormRef">
+				<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.order?.title }} </el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="申请人"> {{ state.orderDetail.creatorName }} </el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="申请部门"> {{ state.orderDetail.creatorOrgName }} </el-form-item>
+					</el-col>
+					<el-col>
+						<el-form-item label="申请时间"> {{ formatDate(state.orderDetail.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="申请理由" prop="content" :rules="[{ required: true, message: '请填写甄别申请理由', trigger: 'blur' }]">
+							<common-advice
+								@chooseAdvice="chooseAdviceDiscern"
+								v-model="state.discernForm.content"
+								placeholder="请填写甄别申请理由"
+								:loading="state.loading"
+								:commonEnum="commonEnum.Discriminate"
+								:maxlength="AppConfigInfo.handleOpinionWordLimit"
+							/>
+						</el-form-item>
+					</el-col>
+					<!--					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+						<el-form-item label="附件">
+							<annex-list
+								name="甄别附件"
+								ref="discernAnnexListRef"
+								v-model:format="handleFilesDiscern"
+								:businessId="state.orderDetail.orderId"
+								v-model="state.discernForm.files"
+								classify="甄别上传"
+							/>
+						</el-form-item>
+					</el-col>-->
+				</el-row>
+			</el-form>
+		</div>
+
+		<template #footer>
+			<span class="dialog-footer">
+				<el-button @click="closeDialog" class="default-button">取 消</el-button>
+				<el-button type="primary" @click="onSubmit(discernFormRef)" :loading="state.loading">确定</el-button>
+			</span>
+		</template>
+	</el-dialog>
+</template>
+
+<script setup lang="ts">
+import { defineAsyncComponent, reactive, ref } from 'vue';
+import { ElMessage, FormInstance } from 'element-plus';
+import { commonEnum } from '@/utils/constants';
+import { discernUpdateReason, screenDetail } from '@/api/business/discern';
+import { transformFile } from '@/utils/tools';
+import { formatDate } from '@/utils/formatTime';
+import { useAppConfig } from '@/stores/appConfig';
+import { storeToRefs } from 'pinia';
+
+// 引入组件
+const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
+const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件列表
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['orderProcessSuccess', 'orderProcessFailed']);
+// 定义变量内容
+const state = reactive<any>({
+	dialogVisible: false, // 弹窗显示隐藏
+	discernForm: {
+		//流程表单
+		content: '', // 甄别理由
+		id:null,// 甄别id
+		files:[],// 附件
+	},
+	nextStepOptions: [], // 下一节点
+	handlerOptions: [], // 办理对象
+	transform: 'translate(0px, 0px)', // 滚动条位置
+	loading: false, // 提交按钮loading
+	workflowId: '', // 流程id
+	handlerClassifies: [], //撤回办理对象
+	handleId: '', // 流程处理ID
+	annexName: '', // 附件标题
+	inputPlaceholder: '', // 意见提示
+	orderDetail: {}, // 工单详情
+});
+const appConfigStore = useAppConfig();
+const { AppConfigInfo } = storeToRefs(appConfigStore); // 系统配置信息
+// 打开弹窗
+const openDialog = async (val: any) => {
+	state.dialogVisible = true;
+	state.loading = true;
+	try {
+		const { result } = await screenDetail(val.id);
+		state.discernForm.id = val.id;
+		state.discernForm.content = result.content ?? {};
+		state.orderDetail = result;
+		state.discernForm.files = transformFile(result.files);
+	} finally {
+		state.loading = false;
+	}
+};
+const discernFormRef = ref<RefType>(); //甄别申请表单组件
+// 设置抽屉
+const dialogRef = ref<RefType>();
+const mouseup = () => {
+	state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
+};
+// 关闭弹窗
+const closeDialog = () => {
+	state.dialogVisible = false;
+};
+// 重置表单方法
+const restForm = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	formEl.clearValidate();
+	state.discernForm.files = [];
+};
+// 选择常用意见 填入填写框 甄别
+const chooseAdviceDiscern = (item: any) => {
+	state.discernForm.content += item.content;
+};
+const afterSubmit = (emitType?: 'orderProcessSuccess' | 'orderProcessFailed', showMessage?: boolean, message?: string) => {
+	state.loading = false;
+	closeDialog();
+	const msg = message ?? '操作成功';
+	if (showMessage) ElMessage.success(msg);
+	if (emitType) emit(emitType);
+};
+const close = () => {
+	restForm(discernFormRef.value);
+};
+// 提交
+const handleFilesDiscern = ref<EmptyArrayType>([]); // 甄别附件
+const onSubmit = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		state.loading = true;
+		const request = {
+			screenId: state.discernForm.id,
+			content: state.discernForm.content,
+			files: handleFilesDiscern.value,
+		};
+		discernUpdateReason(request)
+			.then(() => {
+				afterSubmit('orderProcessSuccess', true, '甄别修改理由成功');
+			})
+			.catch(() => {
+				afterSubmit('orderProcessFailed');
+			});
+	});
+};
+// 暴露变量
+defineExpose({
+	openDialog,
+	closeDialog,
+});
+</script>

+ 10 - 1
src/views/business/discern/todo.vue

@@ -121,7 +121,7 @@
 					<vxe-column field="order.acceptType" title="受理类型" width="100"></vxe-column>
 					<vxe-column field="order.sourceChannel" title="来源渠道" width="110"></vxe-column>
 					<vxe-column field="order.hotspotName" title="热点分类" width="150"></vxe-column>
-					<vxe-column title="操作" fixed="right" width="180" align="center" :show-overflow="false" v-if="state.queryParams.TabStatus === 0">
+					<vxe-column title="操作" fixed="right" width="250" align="center" :show-overflow="false" v-if="state.queryParams.TabStatus === 0">
 						<template #default="{ row }">
 							<!--							<el-button link type="primary" @click="onDetail(row)" title="查看甄别详情"> 甄别详情 </el-button>-->
 							<el-button
@@ -145,6 +145,7 @@
 								退回
 							</el-button>
 							<el-button link type="primary" @click="visitDetail(row)" title="查看回访明细"> 回访明细 </el-button>
+							<el-button link type="primary" @click="onEdit(row)" v-auth="'business:discern:audit:edit'" title="修改理由"> 修改理由 </el-button>
 						</template>
 					</vxe-column>
 					<vxe-column title="操作" fixed="right" width="100" align="center" :show-overflow="false" v-else>
@@ -229,6 +230,8 @@
 		<discern-audit ref="discernAuditRef" @updateList="refreshList" />
 		<!-- 甄别退回 -->
 		<discern-return ref="discernReturnRef" @updateList="refreshList" />
+		<!-- 甄别修改理由 -->
+		<discern-edit-reason ref="discernEditReasonRef" @updateList="refreshList" />
 	</div>
 </template>
 <script setup lang="tsx" name="businessDiscernTodo">
@@ -250,6 +253,7 @@ const VisitDetailCom = defineAsyncComponent(() => import('@/views/business/visit
 const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
 const DiscernAudit = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-audit.vue')); // 甄别审批
 const DiscernReturn = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-return.vue')); // 甄别退回
+const DiscernEditReason = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-edit-reason.vue')); // 甄别修改理由
 // 定义变量内容
 const state = reactive<any>({
 	queryParams: {
@@ -363,6 +367,11 @@ const onDetail = async (row: any) => {
 		console.log(e);
 	}
 };
+// 甄别修改理由
+const discernEditReasonRef = ref<RefType>();
+const onEdit = (row: any) => {
+	discernEditReasonRef.value.openDialog(row);
+};
 // 查看回访明细
 const visitDetailRef = ref<RefType>();
 const visitDetail = (row: any) => {

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

@@ -113,7 +113,7 @@
 						@click="onReturn(row)"
 						title="省工单退回"
 						v-auth="'business:order:return:province'"
-						v-if="
+						v-show="
 							row.isProvince &&
 							(row.actualHandleOrgCode === '001' || row.actualHandleOrgCode === null || row.actualHandleOrgCode === '' || row.status === 0) &&
 							row.status < 300 &&

+ 2 - 2
src/views/business/return/audit.vue

@@ -65,7 +65,7 @@
 						:disabled="isChecked"
 						:loading="state.loading"
 						v-auth="'business:return:audit:multiple'"
-						v-if="state.queryParams.AuditState === '1'"
+						v-show="state.queryParams.AuditState === '1'"
 						>批量审批<span v-if="checkTable.length">({{ checkTable.length }})</span>
 					</el-button>
 				</template>
@@ -129,7 +129,7 @@
 					</template>
 					<vxe-column title="操作" fixed="right" width="100" align="center">
 						<template #default="{ row }">
-							<el-button link type="primary" @click="onAudit(row)" title="退回特提" v-auth="'business:return:audit'" v-if="[0].includes(row.state)">
+							<el-button link type="primary" @click="onAudit(row)" title="退回特提" v-auth="'business:return:audit'" v-show="[0].includes(row.state)">
 								审批
 							</el-button>
 							<el-button link type="primary" @click="onAuditDetail(row)" title="查看审批详情" v-if="[1, 2].includes(row.state)"> 审批详情 </el-button>

+ 1 - 1
src/views/business/return/province.vue

@@ -53,7 +53,7 @@
 						@click="onAudit(row)"
 						title="退回审批"
 						v-auth="'business:return:audit:province'"
-						v-if="[0].includes(row.state)"
+						v-show="[0].includes(row.state)"
 					>
 						退回审批
 					</el-button>

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

@@ -51,7 +51,7 @@
 						@click="updateVisitResult(row)"
 						title="修改回访结果"
 						v-auth="'business:visit:visitEdit'"
-						v-if="row.visitState === 30"
+						v-show="row.visitState === 30"
 					>
 						修改回访结果
 					</el-button>

+ 2 - 2
src/views/business/visit/reverse.vue

@@ -33,7 +33,7 @@
 						:disabled="isChecked"
 						:loading="state.loading"
 						v-auth="'business:visit:reverse:multiple'"
-						v-if="state.queryParams.IsIngString === 'true'"
+						v-show="state.queryParams.IsIngString === 'true'"
 						>批量扭转评判<span v-if="checkTable.length">({{ checkTable.length }})</span>
 					</el-button>
 				</template>
@@ -104,7 +104,7 @@
 								@click="onReverse(row)"
 								title="扭转评判"
 								v-auth="'business:visit:reverse'"
-								v-if="[0].includes(row.judgeState)"
+								v-show="[0].includes(row.judgeState)"
 							>
 								扭转评判
 							</el-button>

+ 3 - 3
src/views/business/visit/smart.vue

@@ -76,7 +76,7 @@
 							<el-button
 								link
 								type="primary"
-								v-if="[5].includes(row.taskState)"
+								v-show="[5].includes(row.taskState)"
 								@click="onTermination(row)"
 								title="终止回访任务"
 								v-auth="'business:visit:smart:termination'"
@@ -86,7 +86,7 @@
 							<el-button
 								link
 								type="primary"
-								v-if="[5].includes(row.taskState)"
+								v-show="[5].includes(row.taskState)"
 								@click="onStart(row)"
 								title="启动任务"
 								v-auth="'business:visit:smart:start'"
@@ -96,7 +96,7 @@
 							<el-button
 								link
 								type="primary"
-								v-if="[1, 2].includes(row.taskState)"
+								v-show="[1, 2].includes(row.taskState)"
 								@click="onPause(row)"
 								title="暂停任务"
 								v-auth="'business:visit:smart:pause'"

+ 31 - 0
src/views/knowledge/index/edit.vue

@@ -58,6 +58,36 @@
 							</template>
 						</el-skeleton>
 					</el-col>
+					<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8">
+						<el-skeleton :loading="state.loading" animated>
+							<template #template>
+								<el-form-item label="知识归属部门">
+									<el-skeleton-item variant="h1" />
+								</el-form-item>
+							</template>
+							<template #default>
+								<el-form-item label="知识归属部门" prop="knowledgeOrg" :rules="[{ required: true, message: '请选择知识归属部门', trigger: 'change' }]">
+									<VTreeDrop
+										:data="state.typeData"
+										checkable
+										keyField="id"
+										titleField="name"
+										v-model="state.ruleForm.knowledgeOrg"
+										@checked-change="getKnowledgeListData1"
+										:dropHeight="400"
+										dropPlaceholder="知识归属部门"
+										dropdownWidthFixed
+										clearable
+										searchPlaceholder="归属部门名称"
+										checkedButtonText="查看已选"
+										:show-footer="false"
+										:cascade="false"
+									>
+									</VTreeDrop>
+								</el-form-item>
+							</template>
+						</el-skeleton>
+					</el-col>
 					<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8">
 						<el-skeleton :loading="state.loading" animated>
 							<template #template>
@@ -482,6 +512,7 @@ const state = reactive<any>({
 		indexNo: null, // 索引号
 		fileNo: null, // 文号
 		planTypeId: null, // 预案分类
+		knowledgeOrg:[], // 归属部门
 	},
 	typeData: [], // 知识分类
 	loading: false,

+ 2 - 2
src/views/quality/project/index.vue

@@ -24,10 +24,10 @@
 				}"
 			>
 				<template #buttons>
-					<el-button type="primary" @click="onProjectAdd" v-waves v-auth="'quality:project:add'">
+					<el-button type="primary" @click="onProjectAdd" v-auth="'quality:project:add'">
 						<SvgIcon name="ele-Plus" class="mr5" />新增质检项
 					</el-button>
-					<el-button type="danger" @click="onProjectDelete" v-waves v-auth="'quality:project:delete'" :disabled="isChecked">
+					<el-button type="danger" @click="onProjectDelete" v-auth="'quality:project:delete'" :disabled="isChecked">
 						<SvgIcon name="ele-Delete" class="mr5" />删除
 					</el-button>
 				</template>

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

@@ -70,7 +70,7 @@
 									type="danger"
 									@click="configClear(row)"
 									title="清除配置"
-									v-if="row.definition"
+									v-show="row.definition"
 									v-auth="'system:workflow:template:clear'"
 								>
 									清除配置
@@ -129,7 +129,7 @@
 								<el-button
 									link
 									type="success"
-									v-if="row.status === 0"
+									v-show="row.status === 0"
 									@click="onReleaseTemp(row)"
 									title="发布"
 									v-auth="'system:workflow:template:publish'"
@@ -139,7 +139,7 @@
 								<!-- 发布之后不能修改 -->
 								<el-button
 									link
-									v-if="row.status === 0"
+									v-show="row.status === 0"
 									type="danger"
 									@click="onDeleteTemp(row)"
 									title="删除"

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

@@ -22,7 +22,7 @@
 				}"
 			>
 				<template #buttons>
-					<el-button type="primary" @click="addParameter" v-waves v-auth="'system:parameter:add'">
+					<el-button type="primary" @click="addParameter" v-auth="'system:parameter:add'">
 						<SvgIcon name="ele-Plus" class="mr5" />新增参数
 					</el-button>
 				</template>

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

@@ -69,16 +69,16 @@
 					<vxe-column field="state" title="状态" width="140"></vxe-column>
 					<vxe-column title="操作" fixed="right" width="250" align="center">
 						<template #default="{ row }">
-							<el-button link type="primary" @click="onOpenEditRole(row)" title="修改角色信息" v-auth="'system:role:edit'" v-if="!row.isDeleted">
+							<el-button link type="primary" @click="onOpenEditRole(row)" title="修改角色信息" v-auth="'system:role:edit'" v-show="!row.isDeleted">
 								修改
 							</el-button>
-							<el-button link type="success" @click="onPermissions(row)" title="分配角色权限" v-auth="'system:role:assign'" v-if="!row.isDeleted">
+							<el-button link type="success" @click="onPermissions(row)" title="分配角色权限" v-auth="'system:role:assign'" v-show="!row.isDeleted">
 								分配权限
 							</el-button>
-							<el-button link type="info" @click="onDataAuth(row)" v-auth="'system:role:dataAuth'" title="配置角色数据权限" v-if="!row.isDeleted">
+							<el-button link type="info" @click="onDataAuth(row)" v-auth="'system:role:dataAuth'" title="配置角色数据权限" v-show="!row.isDeleted">
 								数据权限
 							</el-button>
-							<el-button link type="danger" @click="onRowDel(row)" v-auth="'system:role:delete'" title="删除角色" v-if="!row.isDeleted">
+							<el-button link type="danger" @click="onRowDel(row)" v-auth="'system:role:delete'" title="删除角色" v-show="!row.isDeleted">
 								删除
 							</el-button>
 						</template>

+ 4 - 4
src/views/system/user/index.vue

@@ -106,16 +106,16 @@
 							<vxe-column field="state" title="状态" width="140"></vxe-column>
 							<vxe-column title="操作" fixed="right" width="230" align="center">
 								<template #default="{ row }">
-									<el-button link type="primary" @click="onOpenEditUser(row)" v-auth="'system:user:edit'" title="修改" v-if="!row.isDeleted">
+									<el-button link type="primary" @click="onOpenEditUser(row)" v-auth="'system:user:edit'" title="修改" v-show="!row.isDeleted">
 										修改
 									</el-button>
-									<el-button link type="primary" @click="onUnlock(row)" v-auth="'system:user:unlock'" title="解锁" v-if="!row.isDeleted">
+									<el-button link type="primary" @click="onUnlock(row)" v-auth="'system:user:unlock'" title="解锁" v-show="!row.isDeleted">
 										解锁
 									</el-button>
-									<el-button link type="warning" @click="onRestPwd(row)" title="重置密码" v-auth="'system:user:resetPwd'" v-if="!row.isDeleted">
+									<el-button link type="warning" @click="onRestPwd(row)" title="重置密码" v-auth="'system:user:resetPwd'" v-show="!row.isDeleted">
 										重置密码
 									</el-button>
-									<el-button link type="danger" @click="onRowDel(row)" v-auth="'system:user:delete'" title="删除" v-if="!row.isDeleted">
+									<el-button link type="danger" @click="onRowDel(row)" v-auth="'system:user:delete'" title="删除" v-show="!row.isDeleted">
 										删除
 									</el-button>
 								</template>

+ 3 - 3
src/views/tels/callLog/ybCallLog.vue

@@ -43,7 +43,7 @@
 						:disabled="isChecked"
 						:loading="state.loading"
 						v-auth="'tels:callLog:recordTransfer'"
-						v-if="['1', '2', '4'].includes(state.queryParams.type)"
+						v-show="['1', '2', '4'].includes(state.queryParams.type)"
 					>录音转写</el-button
 					>
 				</template>
@@ -243,10 +243,10 @@
 					</vxe-column>
 					<vxe-column title="操作" fixed="right" width="310" align="center" v-if="['1'].includes(state.queryParams.type)">
 						<template #default="{ row }">
-							<el-button link type="primary" @click="onCreate(row)" title="创建失联工单" v-auth="'tels:callLog:connectOrder'" v-if="!row.externalId">
+							<el-button link type="primary" @click="onCreate(row)" title="创建失联工单" v-auth="'tels:callLog:connectOrder'" v-show="!row.externalId">
 								失联工单
 							</el-button>
-							<el-button link type="primary" @click="onConnect(row)" title="关联业务" v-auth="'tels:callLog:connect'" v-if="!row.externalId">
+							<el-button link type="primary" @click="onConnect(row)" title="关联业务" v-auth="'tels:callLog:connect'" v-show="!row.externalId">
 								关联业务
 							</el-button>
 							<el-button type="primary" @click="onPlaySoundRecording(row)" title="播放录音" link v-if="row.recordingAbsolutePath && row.otherAccept"

+ 1 - 1
src/views/tels/callLog/zgCallLog.vue

@@ -103,7 +103,7 @@
 								@click="onCreate(row)"
 								title="创建失联工单"
 								v-auth="'tels:callLog:connectOrder'"
-								v-if="!row.orderId && row.callState !== 0"
+								v-show="!row.orderId && row.callState !== 0"
 							>
 								失联工单
 							</el-button>

+ 107 - 162
src/views/tels/restApply/index.vue

@@ -1,22 +1,13 @@
 <template>
 	<div class="tels-restApply-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
-			<el-tabs v-model="state.queryParams.Type" @tab-change="handleQuery">
-				<el-tab-pane :name="0" label="待审批" :disabled="state.loading"></el-tab-pane>
-				<el-tab-pane :name="1" label="已审批" :disabled="state.loading"></el-tab-pane>
-			</el-tabs>
-			<el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent>
-				<el-form-item label="申请人" prop="ApplyUserName">
-					<el-input v-model="state.queryParams.ApplyUserName" placeholder="申请人" clearable @keyup.enter="handleQuery" class="keyword-input" />
+			<el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent >
+				<el-form-item label="关键词" prop="KeyWords">
+					<el-input v-model="state.queryParams.KeyWords" placeholder="坐席名称/工号" clearable @keyup.enter="queryList" />
 				</el-form-item>
-				<el-form-item label="小休原因" prop="ReasonId">
-					<el-select v-model="state.queryParams.ReasonId" placeholder="请选择小休原因" @change="handleQuery" clearable>
-						<el-option v-for="item in state.restReason" :key="item.dicDataValue" :label="item.dicDataName" :value="item.dicDataValue" />
-					</el-select>
-				</el-form-item>
-				<el-form-item label="申请时间" prop="crTime">
+				<el-form-item label="申请时间" prop="time">
 					<el-date-picker
-						v-model="state.queryParams.crTime"
+						v-model="state.queryParams.time"
 						type="datetimerange"
 						range-separator="至"
 						start-placeholder="开始时间"
@@ -24,14 +15,29 @@
 						value-format="YYYY-MM-DD[T]HH:mm:ss"
 						:shortcuts="shortcuts"
 						:default-time="defaultTimeStartEnd"
-						@change="handleQuery"
+						@change="
+							(val: any[]) => {
+								state.queryParams.BeginTime = val[0];
+								state.queryParams.EndTime = val[1];
+							}
+						"
 					/>
 				</el-form-item>
+				<el-form-item label="小休原因" prop="Reason">
+					<el-select v-model="state.queryParams.Reason" placeholder="请选择小休原因" class="w100">
+						<el-option v-for="item in state.restReason" :key="item.id" :label="item.content" :value="item.content" />
+					</el-select>
+				</el-form-item>
+				<el-form-item label="审批状态" prop="Status">
+					<el-select v-model="state.queryParams.Status" placeholder="请选择审批状态" class="w100">
+						<el-option v-for="item in state.restApplyStatus" :key="item.key" :label="item.value" :value="item.key" />
+					</el-select>
+				</el-form-item>
 				<el-form-item>
-					<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-					<el-button @click="drawer = true" class="default-button" :loading="state.loading">
-						<SvgIcon name="ele-Search" class="mr5" />更多查询</el-button
-					>
+					<el-button type="primary" @click="handleQuery" :loading="state.loading" v-waves> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+					<el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading">
+						<SvgIcon name="ele-Refresh" class="mr5" />重置
+					</el-button>
 				</el-form-item>
 			</el-form>
 			<vxe-toolbar
@@ -41,19 +47,7 @@
 				:refresh="{
 					queryMethod: handleQuery,
 				}"
-				:tools="[{ toolRender: { name: 'exportCurrent' } }, { toolRender: { name: 'exportAll' } }]"
 			>
-				<template #buttons>
-					<el-button
-						type="primary"
-						@click="onAuditBatch"
-						:disabled="isChecked"
-						:loading="state.loading"
-						v-auth="'tels:restApply:audit:batch'"
-						v-if="state.queryParams.Type === 0"
-						>批量审批</el-button
-					>
-				</template>
 			</vxe-toolbar>
 			<div style="overflow: hidden; width: 100%; height: 100%; flex: 1">
 				<vxe-table
@@ -68,32 +62,43 @@
 					auto-resize
 					show-overflow
 					:scrollY="{ enabled: true, gt: 100 }"
-					id="telsRestApply"
+					id="restApply"
 					:custom-config="{ storage: true }"
-					:params="{ exportMethod: restApplyExport, exportParams: requestParams }"
-					@sort-change="sortChange"
-					@checkbox-all="selectAllChangeEvent"
-					@checkbox-change="selectChangeEvent"
 				>
-					<vxe-column type="checkbox" width="50" align="center"></vxe-column>
-					<vxe-column field="reason" title="小休原因"></vxe-column>
-					<vxe-column field="applyUserName" title="申请人"></vxe-column>
-					<vxe-column field="applyTime" title="申请时间" sortable width="160">
+
+					<vxe-column field="userName" title="坐席" width="140"></vxe-column>
+					<vxe-column field="creationTime" title="申请时间" sortable width="160">
 						<template #default="{ row }">
-							{{ formatDate(row.applyTime, 'YYYY-mm-dd HH:MM:SS') }}
+							{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}
 						</template>
 					</vxe-column>
-					<vxe-column field="auditStatusText" title="审核结果"> </vxe-column>
-					<vxe-column field="auditOpinion" title="审核意见" min-width="140"></vxe-column>
-					<vxe-column field="auditUserName" title="审核人" min-width="140"></vxe-column>
-					<vxe-column field="auditTime" title="审核时间" sortable width="160">
+					<vxe-column field="creationTime" title="开始时间" sortable width="160">
 						<template #default="{ row }">
-							{{ formatDate(row.auditTime, 'YYYY-mm-dd HH:MM:SS') }}
+							{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}
 						</template>
 					</vxe-column>
-					<vxe-column title="操作" fixed="right" width="90" align="center">
+					<vxe-column field="creationTime" title="结束时间" sortable width="160">
 						<template #default="{ row }">
-							<el-button link type="primary" @click="onAudit(row)" v-auth="'tels:restApply:audit'" title="审批" v-if="[0].includes(row.auditStatus)">
+							{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}
+						</template>
+					</vxe-column>
+					<vxe-column field="restDuration" title="时长(分钟)" width="140">
+						<template #default="{ row }">
+							{{ (row.restDuration / 60).toFixed(2) }}
+						</template>
+					</vxe-column>
+					<vxe-column field="applyStatus" title="审批状态" width="140">
+						<template #default="{ row }">
+							{{ state.restApplyStatus[row.applyStatus].value }}
+						</template>
+					</vxe-column>
+					<vxe-column field="restReason" title="小休原因" min-width="140"></vxe-column>
+					<vxe-column title="操作" fixed="right" width="140" align="center">
+						<template #default="{ row }">
+							<el-button link type="primary" @click="onRecord(row)" v-auth="'system:workflow:record'" title="审批记录" v-show="row.workflowId">
+								审批记录
+							</el-button>
+							<el-button link type="primary" @click="onSubmit(row)" v-auth="'system:workflow:handle'" title="审批" v-show="[0].includes(row.applyStatus)">
 								审批
 							</el-button>
 						</template>
@@ -108,53 +113,24 @@
 				:disabled="state.loading"
 			/>
 		</div>
-		<!-- 更多查询 -->
-		<el-drawer v-model="drawer" title="更多查询" size="500px">
-			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px" :disabled="state.loading">
-				<template v-if="state.queryParams.Type === 1">
-					<el-form-item label="审批状态" prop="AuditStatus">
-						<el-select v-model="state.queryParams.AuditStatus" placeholder="请选择审批状态" class="w100" @change="handleQuery" clearable>
-							<el-option v-for="item in state.restApplyStatus" :key="item.key" :label="item.value" :value="item.key" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="审批人" prop="AuditUserName">
-						<el-input v-model="state.queryParams.AuditUserName" placeholder="审批人" clearable @keyup.enter="handleQuery" />
-					</el-form-item>
-					<el-form-item label="审批时间" prop="spTime">
-						<el-date-picker
-							v-model="state.queryParams.spTime"
-							type="datetimerange"
-							range-separator="至"
-							start-placeholder="开始时间"
-							end-placeholder="结束时间"
-							value-format="YYYY-MM-DD[T]HH:mm:ss"
-							:shortcuts="shortcuts"
-							:default-time="defaultTimeStartEnd"
-							@change="handleQuery"
-						/>
-					</el-form-item>
-				</template>
-			</el-form>
-			<template #footer>
-				<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-				<el-button @click="resetQuery(drawerRuleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-			</template>
-		</el-drawer>
-		<!-- 审核 -->
-		<rest-audit ref="restAuditRef" @updateList="queryList" />
+		<!-- 流程审配 -->
+		<process-audit ref="processAuditRef" @orderProcessSuccess="orderProcessSuccess" />
+		<!-- 流转记录 -->
+		<audit-record ref="AuditRecordRef" />
 	</div>
 </template>
 
-<script lang="tsx" setup name="telsRestApply">
-import { computed, defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+<script lang="tsx" setup name="restApply">
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
 import type { FormInstance } from 'element-plus';
 import { formatDate } from '@/utils/formatTime';
-import { restBaseData, restApplyExport, restApplyPaged } from '@/api/tels/restApply';
+import { baseData, restApplyPaged } from '@/api/tels/restApply';
 import { debounce } from '@/utils/tools';
-import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
-import Other from '@/utils/other';
+import { commonEnum, defaultTimeStartEnd, shortcuts } from "@/utils/constants";
+import other from '@/utils/other';
 // 引入组件
-const RestAudit = defineAsyncComponent(() => import('@/views/tels/restApply/components/Audit.vue')); // 审批
+const AuditRecord = defineAsyncComponent(() => import('@/components/AuditRecord/index.vue')); // 流转记录
+const ProcessAudit = defineAsyncComponent(() => import('@/components/ProcessAudit/index.vue')); // 审批流程
 const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
 
 // 定义变量内容
@@ -162,19 +138,12 @@ const state = reactive<any>({
 	queryParams: {
 		PageIndex: 1, // 当前页码
 		PageSize: 10, // 每页条数
-		Type: 0, // 默认待审批
-		ApplyUserName: null, // 申请人
-		ReasonId: null, // 小休原因
-		crTime: [], // 申请时间
-		ApplyStartTime: null, // 开始时间
-		ApplyEndTime: null, // 结束时间
-		AuditStatus: null, // 审批状态
-		AuditUserName: null, // 审批人
-		spTime: [], // 审批时间
-		AuditStartTime: null, // 审批开始时间
-		AuditEndTime: null, // 审批结束时间
-		SortRule: null, // 排序规则
-		SortField: null, // 排序字段
+		KeyWords: null, // 关键字
+		Reason: null, // 小休原因
+		Status: null, // 审批状态
+		time: [], // 申请时间
+		BeginTime: null, // 开始时间
+		EndTime: null, // 结束时间
 	},
 	loading: false, // 加载状态
 	total: 0, // 总条数
@@ -184,95 +153,71 @@ const state = reactive<any>({
 });
 const ruleFormRef = ref<FormInstance>(); // 表单实例
 /** 搜索按钮操作 节流操作 */
-const handleQuery = () => {
+const handleQuery = debounce(() => {
 	state.queryParams.PageIndex = 1;
 	queryList();
+}, 300);
+const orderProcessSuccess = () => {
+	console.log('审批成功');
+	handleQuery();
 };
 /** 获取用户列表 */
-const requestParams = ref<EmptyObjectType>({});
 const queryList = () => {
 	state.loading = true;
-	requestParams.value = Other.deepClone(state.queryParams);
-	requestParams.value.ApplyStartTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
-	requestParams.value.ApplyEndTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
-	Reflect.deleteProperty(requestParams.value, 'crTime'); // 申请时间
-	requestParams.value.AuditStartTime = state.queryParams.spTime === null ? null : state.queryParams.spTime[0];
-	requestParams.value.AuditEndTime = state.queryParams.spTime === null ? null : state.queryParams.spTime[1];
-	Reflect.deleteProperty(requestParams.value, 'spTime'); // 审批时间
-	restApplyPaged(requestParams.value)
+	let request = other.deepClone(state.queryParams);
+	Reflect.deleteProperty(request, 'time'); // 删除无用的参数
+	restApplyPaged(request)
 		.then((response: any) => {
 			state.tableData = response?.result.items;
 			state.total = response?.result.total;
-			tableRef.value?.clearCheckboxRow();
-			checkTable.value = [];
 			state.loading = false;
 		})
 		.catch(() => {
 			state.loading = false;
 		});
 };
-// 排序
-const sortChange = (val: any) => {
-	state.queryParams.SortField = val.order ? val.field : null;
-	// 0 升序 1 降序
-	state.queryParams.SortRule = val.order ? (val.order == 'desc' ? 1 : 0) : null;
-	handleQuery();
-};
 /** 重置按钮操作 */
-const drawer = ref(false);
-const drawerRuleFormRef = ref();
 const resetQuery = debounce((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
+	state.queryParams.BeginTime = null;
+	state.queryParams.EndTime = null;
 	formEl.resetFields();
-	ruleFormRef.value?.resetFields();
 	handleQuery();
 }, 300);
-// 审核
-const restAuditRef = ref<RefType>();
-const onAudit = (row: any) => {
-	restAuditRef.value.openDialog([row.id]);
-};
-const checkTable = ref<EmptyArrayType>([]);
-const selectAllChangeEvent = ({ checked }) => {
-	if (tableRef.value) {
-		const records = tableRef.value.getCheckboxRecords();
-		checkTable.value = records;
-		console.log(checked ? '所有勾选事件' : '所有取消事件', records);
-	}
-};
-
-const selectChangeEvent = ({ checked }) => {
-	if (tableRef.value) {
-		const records = tableRef.value.getCheckboxRecords();
-		checkTable.value = records;
-		console.log(checked ? '勾选事件' : '取消事件', records);
-	}
-};
-const isChecked = computed(() => {
-	return !checkTable.value.length;
-});
-// 批量审批
-const onAuditBatch = () => {
-	const ids = checkTable.value.map((row: any) => row.id);
-	restAuditRef.value.openDialog(ids);
+// 办理 下一步
+const processAuditRef = ref<RefType>();
+const onSubmit = debounce((row: any) => {
+	const params = {
+		id: row.workflowId,
+		commonEnum: commonEnum.OrderCirculation,
+		processType: '小休办理',
+		extra: {
+			dialogTitle: '小休办理',
+			inputPlaceholder: '办理意见',
+			annexName: '办理附件',
+		},
+	};
+	processAuditRef.value.openDialog(params);
+}, 1000);
+// 审核记录
+const AuditRecordRef = ref<RefType>();
+const onRecord = (row: any) => {
+	const params = {
+		dialogTitle: '审核记录 (小休申请)',
+		...row,
+	};
+	console.log(params);
+	AuditRecordRef.value.openDialog(params);
 };
 // 获取基础数据
 const baseDataFn = () => {
-	restBaseData().then((res: any) => {
-		state.restApplyStatus = res.result?.auditStatus;
-		state.restApplyStatus = state.restApplyStatus.filter((item: any) => {
-			return [1, 2].includes(item.key);
-		});
+	baseData().then((res: any) => {
+		state.restApplyStatus = res.result?.restApplyStatus;
 		state.restReason = res.result?.restReason;
+		queryList();
 	});
 };
-const toolbarRef = ref<RefType>();
-const tableRef = ref<RefType>();
 onMounted(() => {
-	queryList();
 	baseDataFn();
-	if (tableRef.value && toolbarRef.value) {
-		tableRef.value.connect(toolbarRef.value);
-	}
 });
 </script>

+ 2 - 2
src/views/todo/center/index.vue

@@ -32,8 +32,8 @@
 					<order-detail :order="row" @updateList="refreshList">{{ row.title }}</order-detail>
 				</template>
 				<template #action="{ row }">
-					<el-button link type="primary" @click="onSign(row)" title="签收工单" v-if="row.canSign" v-auth="'todo:center:sign'"> 签收 </el-button>
-					<el-button link type="success" @click="onOrderEdit(row)" title="编辑工单" v-if="row.canEdit" v-auth="'todo:center:edit'"> 修改 </el-button>
+					<el-button link type="primary" @click="onSign(row)" title="签收工单" v-show="row.canSign" v-auth="'todo:center:sign'"> 签收 </el-button>
+					<el-button link type="success" @click="onOrderEdit(row)" title="编辑工单" v-show="row.canEdit" v-auth="'todo:center:edit'"> 修改 </el-button>
 					<el-button link type="primary" @click="onMigration(row)" title="平级移动" v-auth="'todo:center:migration'"> 平级移动 </el-button>
 				</template>
 				<template #pager>

+ 1 - 1
src/views/todo/order/index.vue

@@ -16,7 +16,7 @@
 								label="快捷查询"
 								prop="QueryType"
 								v-auth="'todo:order:fastSearch'"
-								v-if="['ZiGong', 'LuZhou'].includes(themeConfig.appScope) && state.queryParams.IsHandled === 'false'"
+								v-show="['ZiGong', 'LuZhou'].includes(themeConfig.appScope) && state.queryParams.IsHandled === 'false'"
 							>
 								<el-segmented
 									:options="[

+ 1 - 1
src/views/todo/seats/accept/Knowledge.vue

@@ -46,7 +46,7 @@
 				<div v-for="(v, i) in state.knowledgeList" :key="i" class="retrieval-content-item" @click="onPreview(v)">
 					<div class="mb10" style="display: flex">
 						<p class="text-no-wrap" style="flex: 1">{{ v.title }}</p>
-						<el-button type="primary" size="small" @click.stop="changeYYType(v)" v-if="['ZiGong'].includes(themeConfig.appScope)">{{
+						<el-button type="primary" size="small" @click.stop="changeYYType(v)" v-if="['ZiGong','YiBin'].includes(themeConfig.appScope)">{{
 							v.isChoose ? '取消引用' : '引用'
 						}}</el-button>
 					</div>

+ 3 - 2
src/views/todo/seats/accept/lzAccept.vue

@@ -638,12 +638,13 @@ const changeArea = () => {
 	if (currentNode[0].pathLabels.length <= 4) {
 		state.ruleForm.city = currentNode[0].pathLabels[0] ?? ''; // 市
 		state.ruleForm.county = currentNode[0].pathLabels[1] ?? ''; // 区
-		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 地区
+		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 乡镇
 	} else {
 		// 如果数组长度大于4
 		state.ruleForm.city = currentNode[0].pathLabels[0] ?? ''; // 市
 		state.ruleForm.county = currentNode[0].pathLabels[1] ?? ''; // 区
-		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 地区
+		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 乡镇
+		state.ruleForm.village = currentNode[0].pathLabels[3] ?? ''; // 村社区
 		state.ruleForm.areaText = currentNode[0].pathLabels.slice(3).join('') ?? ''; // 地区
 		console.log(state.ruleForm.areaText);
 	}

+ 10 - 4
src/views/todo/seats/accept/ybAccept.vue

@@ -458,7 +458,7 @@
 											type="primary"
 											@click="agentHandle(ruleFormRef)"
 											:loading="buttonLoading"
-											v-if="state.ruleForm?.canInsteadHandle && isSaveSuccess"
+											v-show="state.ruleForm?.canInsteadHandle && isSaveSuccess"
 											v-auth="'business:order:handle:instead'"
 											>代办</el-button
 										>
@@ -482,7 +482,7 @@
 								<repeat-event ref="repeatEventRef" @orderAddRepeat="orderAddRepeat" :repeatIds="state.ruleForm.repeatableEventDetails" />
 							</el-tab-pane>
 							<el-tab-pane label="知识库" name="knowledge">
-								<Knowledge ref="knowledgeRef" :formData="state.ruleForm" />
+								<Knowledge ref="knowledgeRef" :formData="state.ruleForm" @changeYYType="changeYYType"/>
 							</el-tab-pane>
 						</el-tabs>
 					</el-card>
@@ -613,6 +613,7 @@ const state = reactive<any>({
 			dicDataValue: '10',
 			dicDataName: '咨询',
 		},
+		knowledgeQuote: [], // 知识库引用
 	},
 	formLoading: false, // 表单加载状态
 	hotspotExternal: [], // 热点分类外部数据
@@ -731,12 +732,13 @@ const changeArea = () => {
 	if (currentNode[0].pathLabels.length <= 4) {
 		state.ruleForm.city = currentNode[0].pathLabels[0] ?? ''; // 市
 		state.ruleForm.county = currentNode[0].pathLabels[1] ?? ''; // 区
-		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 地区
+		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 乡镇
 	} else {
 		// 如果数组长度大于4
 		state.ruleForm.city = currentNode[0].pathLabels[0] ?? ''; // 市
 		state.ruleForm.county = currentNode[0].pathLabels[1] ?? ''; // 区
-		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 地区
+		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 乡镇
+		state.ruleForm.village = currentNode[0].pathLabels[3] ?? ''; // 村社区
 		state.ruleForm.areaText = currentNode[0].pathLabels.slice(3).join('') ?? ''; // 地区
 		console.log(state.ruleForm.areaText);
 	}
@@ -985,6 +987,10 @@ const canHandle = computed(() => {
 		return state.ruleForm?.canHandle;
 	}
 });
+// 知识库引用
+const changeYYType = (data: any) => {
+	state.ruleForm.knowledgeQuote = data;
+};
 const buttonLoading = ref<boolean>(false);
 const isSaveSuccess = ref<boolean>(false); // 是否保存成功 保存成功后才展示办理按钮
 // 保存

+ 4 - 3
src/views/todo/seats/accept/zgAccept.vue

@@ -383,7 +383,7 @@
 											type="primary"
 											@click="agentHandle(ruleFormRef)"
 											:loading="buttonLoading"
-											v-if="state.ruleForm?.canInsteadHandle && isSaveSuccess"
+											v-show="state.ruleForm?.canInsteadHandle && isSaveSuccess"
 											v-auth="'business:order:handle:instead'"
 											>代办</el-button
 										>
@@ -668,12 +668,13 @@ const changeArea = () => {
 	if (currentNode[0].pathLabels.length <= 4) {
 		state.ruleForm.city = currentNode[0].pathLabels[0] ?? ''; // 市
 		state.ruleForm.county = currentNode[0].pathLabels[1] ?? ''; // 区
-		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 地区
+		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 乡镇
 	} else {
 		// 如果数组长度大于4
 		state.ruleForm.city = currentNode[0].pathLabels[0] ?? ''; // 市
 		state.ruleForm.county = currentNode[0].pathLabels[1] ?? ''; // 区
-		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 地区
+		state.ruleForm.town = currentNode[0].pathLabels[2] ?? ''; // 乡镇
+		state.ruleForm.village = currentNode[0].pathLabels[3] ?? ''; // 村社区
 		state.ruleForm.areaText = currentNode[0].pathLabels.slice(3).join('') ?? ''; // 地区
 		console.log(state.ruleForm.areaText);
 	}

+ 2 - 2
src/views/todo/seats/index.vue

@@ -44,8 +44,8 @@
 						<order-detail :order="row" @updateList="refreshList">{{ row.title }}</order-detail>
 					</template>
 					<template #action="{ row }">
-						<el-button link type="success" @click="onOrderEdit(row)" title="编辑工单" v-if="row.canEdit" v-auth="'todo:seats:edit'"> 修改 </el-button>
-						<el-button link type="primary" @click="onSign(row)" title="签收工单" v-if="row.canSign" v-auth="'todo:seats:sign'"> 签收 </el-button>
+						<el-button link type="success" @click="onOrderEdit(row)" title="编辑工单" v-show="row.canEdit" v-auth="'todo:seats:edit'"> 修改 </el-button>
+						<el-button link type="primary" @click="onSign(row)" title="签收工单" v-show="row.canSign" v-auth="'todo:seats:sign'"> 签收 </el-button>
 					</template>
 					<template #pager>
 						<pagination