Browse Source

reactor:泸州新增对接;

zhangchong 1 month ago
parent
commit
72259524f5

+ 3 - 1
.env.development

@@ -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

+ 3 - 1
.env.luzhou

@@ -13,4 +13,6 @@ VITE_DATASHARE_API_YRL=http://125.65.135.71:50100/hlds
 # 高德地图安全密钥
 VITE_AMAP_SECURITYJSCODE=dd12ddafb11921dbcdc5b9c4484bb4e2
 # 高德地图KEY
-VITE_AMAP_KEY=83f51df235e4008e4eaf515cff63785c
+VITE_AMAP_KEY=83f51df235e4008e4eaf515cff63785c
+# 12345大模型热线赋智请求地址
+VITE_RXFZ_API_URL=https://rxfz.scopenai.com:18027/third

+ 3 - 1
.env.st

@@ -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

+ 80 - 0
src/api/business/lzRXFZ.ts

@@ -0,0 +1,80 @@
+/*
+ * @Author: zc
+ * @description 泸州对接热线赋值
+ */
+import request from '@/utils/request';
+import { Cookie } from '@/utils/storage';
+/**
+ * @description  认证授权
+ */
+export const lzRXFZAuth = (data: object) => {
+	return request({
+		baseURL: import.meta.env.VITE_RXFZ_API_URL,
+		url: `/user/auth/token`,
+		method: 'post',
+		data,
+	});
+};
+/**
+ * @description  知识推荐
+ */
+export const lzRXFZKnowledge = (data: object) => {
+	return request({
+		baseURL: import.meta.env.VITE_RXFZ_API_URL,
+		url: `/integration/api/knowledge/knowledge_following`,
+		method: 'post',
+		data,
+		headers: {
+			Authentication: `Bearer ${Cookie.get('lzRXFZToken')}`,
+		},
+	},{
+		error_message_show: false,
+	});
+};
+/**
+ * @description  办事指南文档类型
+ */
+export const lzRXFZDocumentType = () => {
+	return request({
+		baseURL: import.meta.env.VITE_RXFZ_API_URL,
+		url: `/integration/api/knowledge/document_type`,
+		method: 'get',
+		headers: {
+			Authentication: `Bearer ${Cookie.get('lzRXFZToken')}`,
+		},
+	},{
+		error_message_show: false,
+	});
+};
+/**
+ * @description  办事指南列表
+ */
+export const lzRXFZDocumentList = (data: object) => {
+	return request({
+		baseURL: import.meta.env.VITE_RXFZ_API_URL,
+		url: `/integration/api/knowledge/document_list`,
+		method: 'post',
+		data,
+		headers: {
+			Authentication: `Bearer ${Cookie.get('lzRXFZToken')}`,
+		},
+	},{
+		error_message_show: false,
+	});
+};
+/**
+ * @description  办事指南详情
+ */
+export const lzRXFZDocumentDetail = (params: object) => {
+	return request({
+		baseURL: import.meta.env.VITE_RXFZ_API_URL,
+		url: `/integration/api/knowledge/document_detail`,
+		method: 'get',
+		params,
+		headers: {
+			Authentication: `Bearer ${Cookie.get('lzRXFZToken')}`,
+		},
+	},{
+		error_message_show: false,
+	});
+};

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

@@ -351,7 +351,7 @@ import { trimCompat } from '@/utils/tools';
 import XEUtils from 'xe-utils';
 import { submitLog } from '@/api/public/log';
 import { useTransition } from '@vueuse/core';
-import { busyOff, busyOn, telRestBaseData } from '@/api/public/wex';
+import { busyOff, busyOn } from '@/api/public/wex';
 import { getSpecialNumberDetailByPhone } from '@/api/auxiliary/specialNumber';
 import signalR from '@/utils/signalR';
 import { restApply, restBaseData } from '@/api/tels/restApply';

+ 15 - 283
src/views/todo/seats/accept/Knowledge.vue

@@ -1,295 +1,27 @@
 <template>
-	<div class="knowledge-container">
-		<el-tabs v-model="state.queryParams.Attribution" @tab-change="handleQuery">
-			<el-tab-pane label="推荐知识库" name=""> </el-tab-pane>
-			<el-tab-pane label="中心知识库" name="中心知识库"> </el-tab-pane>
-			<el-tab-pane label="部门知识库" name="部门知识库"> </el-tab-pane>
-			<el-tab-pane label="问答" name="issue" v-if="['LuZhou'].includes(themeConfig.appScope)"> </el-tab-pane>
-		</el-tabs>
-		<div class="knowledge-input" v-if="['', '中心知识库', '部门知识库'].includes(state.queryParams.Attribution)">
-			<el-input v-model="state.queryParams.Keyword" placeholder="关键词" clearable class="mr10 w100" @keyup.enter="knowledgeRetrievalPaged">
-				<template #prefix>
-					<SvgIcon name="ele-Search" size="16px" />
-				</template>
-				<template #append>
-					<el-button type="primary" @click="knowledgeRetrievalPaged" class="search-button" size="small" round
-					><SvgIcon name="ele-Search" class="mr4" /> 查询
-					</el-button>
-				</template>
-			</el-input>
-		</div>
-		<div class="mt5" style="display: flex; flex-wrap: wrap; justify-content: space-between" v-if="state.queryParams.Attribution === ''">
-			<div style="display: flex">
-				<div style="height: 32px; line-height: 32px">推荐类型:</div>
-				<el-radio-group v-model="state.queryParams.recommendType" @change="changeRecommendType">
-					<el-radio value="1">关键词推荐</el-radio>
-					<el-radio value="2">热点推荐</el-radio>
-				</el-radio-group>
-			</div>
-			<div style="display: flex">
-				<div style="height: 32px; line-height: 32px">排序:</div>
-				<el-radio-group v-model="state.queryParams.Sort" @change="handleQuery">
-					<el-radio value="1">浏览量</el-radio>
-					<el-radio value="2">收藏量</el-radio>
-					<el-radio value="3">创建时间</el-radio>
-				</el-radio-group>
-			</div>
-		</div>
-		<div class="mt10 retrieval-content" v-loading="state.loading" v-if="['', '中心知识库', '部门知识库'].includes(state.queryParams.Attribution)">
-			<el-empty description="暂无数据" v-if="!state.knowledgeList.length" class="mb20">
-				<template #image>
-					<span></span>
-				</template>
-			</el-empty>
-			<el-scrollbar>
-				<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)">{{
-								v.isChoose ? '取消引用' : '引用'
-							}}</el-button>
-					</div>
-					<!--					<div class="text-ellipsis2">{{ v.summary }}</div>-->
-					<div class="flex-center-between mt10 color-info">
-						<div>
-							<span class="mr10">创建部门:{{ v.creatorOrgName }}</span>
-							<span>创建时间:{{ formatDate(v.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-						</div>
-						<div class="flex-center-align">
-							<span class="flex-center-align"><SvgIcon name="ele-StarFilled" size="18px" class="mr3" />{{ v.score }}</span>
-							<!--							<span class="flex-center-align ml10"><SvgIcon name="ele-ChatDotSquare" size="16px" class="mr3" />{{ v.commentNum }}</span>-->
-							<span class="flex-center-align ml10"><SvgIcon name="ele-View" size="16px" class="mr3" />{{ v.pageView }}</span>
-						</div>
-					</div>
-				</div>
-			</el-scrollbar>
-		</div>
-	</div>
-	<pagination
-		@pagination="knowledgeRetrievalPaged"
-		:total="state.knowledgeTotal"
-		v-model:current-page="state.queryParams.PageIndex"
-		v-model:page-size="state.queryParams.PageSize"
-		layout="prev, pager, next"
-		class="pt10"
-		v-if="['', '中心知识库', '部门知识库'].includes(state.queryParams.Attribution)"
-	/>
-	<div v-if="['issue'].includes(state.queryParams.Attribution)">
-		<el-input v-model="issueKeyword" placeholder="关键词" clearable class="mr10 w100" @keyup.enter="sendQIssue">
-			<template #prefix>
-				<SvgIcon name="ele-Search" size="16px" />
-			</template>
-			<template #append>
-				<el-button type="primary" @click="sendQIssue" size="small" round>发送 </el-button>
-			</template>
-		</el-input>
-		<el-empty description="暂无数据" v-if="!issueList" class="mb20"> </el-empty>
-		<el-scrollbar max-height="400px"> </el-scrollbar>
-	</div>
+	<component :is="currentCity" />
 </template>
-<script setup lang="ts" name="orderAcceptKnowledge">
-// 定义变量内容
-import { onMounted, reactive, defineAsyncComponent, ref, watch } from 'vue';
-import { useRouter } from 'vue-router';
-import { formatDate } from '@/utils/formatTime';
-import { knowledgeRetrieval, knowledgeRetrievalAccept } from '@/api/knowledge/retrieval';
-import { throttle } from '@/utils/tools';
+
+<script lang="tsx" setup name="orderAccept">
+import { defineAsyncComponent, computed } from 'vue';
 import { useThemeConfig } from '@/stores/themeConfig';
 import { storeToRefs } from 'pinia';
-import { removeDuplicate } from '@/utils/arrayOperation';
-
-const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
 
-const props = defineProps({
-	type: {
-		// 知识库类型 (中心|部门)
-		type: String,
-		default: '',
-	},
-	formData: {
-		// 表单填写的数据
-		type: Object,
-		default: () => {
-			return {};
-		},
-	},
-});
+// 引入组件
+const YiBin = defineAsyncComponent(() => import('@/views/todo/seats/accept/ybKnowledge.vue')); // 宜宾知识库
+const ZiGong = defineAsyncComponent(() => import('@/views/todo/seats/accept/zgKnowledge.vue')); // 自贡知识库
+const LuZhou = defineAsyncComponent(() => import('@/views/todo/seats/accept/lzKnowledge.vue')); // 泸州知识库
 
 const storesThemeConfig = useThemeConfig();
 const { themeConfig } = storeToRefs(storesThemeConfig);
-const state = reactive<any>({
-	loading: false, // 知识检索加载状态
-	knowledgeList: [],
-	knowledgeTotal: 0,
-	queryParams: {
-		PageIndex: 1,
-		PageSize: 5,
-		Keyword: null,
-		RetrievalType: 0, // 检索类型
-		Attribution: '',
-		Sort: '1',
-		recommendType: '1',
-	},
-});
-// 手动查询,将页码设置为1
-const handleQuery = () => {
-	if (state.queryParams.Attribution === 'issue') return;
-	state.queryParams.PageIndex = 1;
-	knowledgeRetrievalPaged();
-};
-//  知识查询
-const knowledgeRetrievalPaged = throttle(async () => {
-	try {
-		state.loading = true;
-		let request: EmptyObjectType = {};
-		if (state.queryParams.recommendType === '1') {
-			//关键词
-			request = {
-				...state.queryParams,
-				Content: props.formData.content,
-			};
 
-			Reflect.deleteProperty(request, 'HotspotId');
-		}
-		if (state.queryParams.recommendType === '2') {
-			//关键词
-			request = {
-				...state.queryParams,
-				HotspotId: props.formData.hotspotId,
-			};
-			Reflect.deleteProperty(request, 'Content');
-		}
-		const { result } = await knowledgeRetrievalAccept(request);
-		state.knowledgeList = result?.items ?? [];
-		state.knowledgeTotal = result?.total ?? 0;
-		if (props.formData.knowledgeQuote) {
-			for (let i of state.knowledgeList) {
-				for (let j of props.formData.knowledgeQuote) {
-					if (i.id === j.key) {
-						i.isChoose = true;
-					}
-				}
-			}
-		}
-		state.loading = false;
-	} catch (error) {
-		console.log(error);
-		state.loading = false;
-	}
-}, 300);
-const router = useRouter(); //
-// 预览知识
-const onPreview = (row: any) => {
-	router.push({
-		name: 'knowledgePreview',
-		params: {
-			id: row.id,
-			tagsViewName: '知识查看',
-		},
-	});
-};
-// 提供外部查询
-const HotspotName = ref('');
-const querySearch = async (name: string) => {
-	try {
-		// state.queryParams.Keyword = name;
-		HotspotName.value = name;
-		state.loading = true;
-		const request = {
-			...state.queryParams,
-			HotspotName: name,
-		};
-		const res: any = await knowledgeRetrieval(request);
-		state.knowledgeList = res.result?.items ?? [];
-		state.knowledgeTotal = res.result?.total ?? 0;
-		if (props.formData.knowledgeQuote) {
-			for (let i of state.knowledgeList) {
-				for (let j of props.formData.knowledgeQuote) {
-					if (i.id === j.key) {
-						i.isChoose = true;
-					}
-				}
-			}
-		}
-		state.loading = false;
-	} catch (error) {
-		console.log(error);
-		state.loading = false;
-	}
+const COMPONENT_LIST = {
+	YiBin,
+	ZiGong,
+	LuZhou,
 };
-// 切换推荐类型查询
-const changeRecommendType = () => {
-	knowledgeRetrievalPaged();
-};
-const emit = defineEmits(['changeYYType']);
-const chooseArray = ref<EmptyArrayType>([]);
-const changeYYType = (row: any) => {
-	// 为了实现分页也能选中
-	row.isChoose = !row.isChoose;
-	if (row.isChoose) {
-		chooseArray.value.push(row);
-		removeDuplicate(chooseArray.value, row.id);
-	}
-	// 获取选中的数据
-	const data = chooseArray.value.filter((v: any) => v.isChoose);
-	const reData = data.map((v: any) => {
-		return {
-			key: v.id,
-			value: v.title,
-		};
-	});
-	console.log(reData);
-	emit('changeYYType', reData);
-};
-watch(
-	() => props.formData.hotspotId,
-	() => {
-		knowledgeRetrievalPaged();
-	},
-	{ immediate: true, deep: true }
-);
-// 问答关键词
-const issueKeyword = ref('');
-// 发送问题
-const issueList = ref<EmptyArrayType>([]); // 问答列表
-const sendQIssue = () => {
-	if (!issueKeyword.value) {
-		return;
-	}
-};
-onMounted(() => {
-	knowledgeRetrievalPaged();
-});
-defineExpose({
-	knowledgeRetrievalPaged,
-	querySearch,
+// 当前地州市
+const currentCity = computed(() => {
+	return COMPONENT_LIST[themeConfig.value.appScope];
 });
 </script>
-
-<style scoped lang="scss">
-.knowledge-container {
-	position: relative;
-	.el-radio {
-		margin-right: 10px;
-		line-height: 32px;
-	}
-	.knowledge-search-button {
-		height: calc(100% - 6px);
-	}
-	.retrieval-content {
-		&-item {
-			border-bottom: var(--el-border);
-			padding: 5px 15px;
-			margin-bottom: 10px;
-			cursor: pointer;
-			&:last-child {
-				margin-bottom: 0;
-				border: none;
-			}
-			&:hover {
-				color: var(--el-color-primary);
-			}
-		}
-	}
-}
-</style>

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

@@ -1127,9 +1127,8 @@ const loadCreatedBy = () => {
 			};
 			const isNumberIdentityType = parseInt(<string>route.query.identityType);
 			if ([1, 2].includes(isNumberIdentityType)) {
-				// 按键接收(2:市民 1:企业) 默认市民
-				if (isNumberIdentityType == 2) state.ruleForm.identityType = 1;
-				else state.ruleForm.identityType = 2;
+				// 按键接收(1:市民 2:企业) 默认市民
+				state.ruleForm.identityType = isNumberIdentityType;
 			} else {
 				state.ruleForm.identityType = 1;
 			}

+ 332 - 0
src/views/todo/seats/accept/lzKnowledge.vue

@@ -0,0 +1,332 @@
+<template>
+	<div class="knowledge-container">
+		<el-tabs v-model="state.queryParams.Attribution" @tab-change="handleQuery">
+			<el-tab-pane label="推荐知识库" name=""> </el-tab-pane>
+			<el-tab-pane label="中心知识库" name="中心知识库"> </el-tab-pane>
+			<el-tab-pane label="部门知识库" name="部门知识库"> </el-tab-pane>
+			<el-tab-pane label="办事指南" name="guide"> </el-tab-pane>
+			<el-tab-pane label="知识推荐" name="recommend"> </el-tab-pane>
+		</el-tabs>
+		<div class="knowledge-input" v-if="['', '中心知识库', '部门知识库'].includes(state.queryParams.Attribution)">
+			<el-input v-model="state.queryParams.Keyword" placeholder="关键词" clearable class="mr10 w100" @keyup.enter="knowledgeRetrievalPaged">
+				<template #prefix>
+					<SvgIcon name="ele-Search" size="16px" />
+				</template>
+				<template #append>
+					<el-button type="primary" @click="knowledgeRetrievalPaged" class="search-button" size="small" round
+						><SvgIcon name="ele-Search" class="mr4" /> 查询
+					</el-button>
+				</template>
+			</el-input>
+		</div>
+		<div class="mt5" style="display: flex; flex-wrap: wrap; justify-content: space-between" v-if="state.queryParams.Attribution === ''">
+			<div style="display: flex">
+				<div style="height: 32px; line-height: 32px">推荐类型:</div>
+				<el-radio-group v-model="state.queryParams.recommendType" @change="changeRecommendType">
+					<el-radio value="1">关键词推荐</el-radio>
+					<el-radio value="2">热点推荐</el-radio>
+				</el-radio-group>
+			</div>
+			<div style="display: flex">
+				<div style="height: 32px; line-height: 32px">排序:</div>
+				<el-radio-group v-model="state.queryParams.Sort" @change="handleQuery">
+					<el-radio value="1">浏览量</el-radio>
+					<el-radio value="2">收藏量</el-radio>
+					<el-radio value="3">创建时间</el-radio>
+				</el-radio-group>
+			</div>
+		</div>
+		<div class="mt10 retrieval-content" v-loading="state.loading" v-if="['', '中心知识库', '部门知识库'].includes(state.queryParams.Attribution)">
+			<el-empty description="暂无数据" v-if="!state.knowledgeList.length" class="mb20">
+				<template #image>
+					<span></span>
+				</template>
+			</el-empty>
+			<el-scrollbar>
+				<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)">{{
+							v.isChoose ? '取消引用' : '引用'
+						}}</el-button>
+					</div>
+					<!--					<div class="text-ellipsis2">{{ v.summary }}</div>-->
+					<div class="flex-center-between mt10 color-info">
+						<div>
+							<span class="mr10">创建部门:{{ v.creatorOrgName }}</span>
+							<span>创建时间:{{ formatDate(v.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</div>
+						<div class="flex-center-align">
+							<span class="flex-center-align"><SvgIcon name="ele-StarFilled" size="18px" class="mr3" />{{ v.score }}</span>
+							<!--							<span class="flex-center-align ml10"><SvgIcon name="ele-ChatDotSquare" size="16px" class="mr3" />{{ v.commentNum }}</span>-->
+							<span class="flex-center-align ml10"><SvgIcon name="ele-View" size="16px" class="mr3" />{{ v.pageView }}</span>
+						</div>
+					</div>
+				</div>
+			</el-scrollbar>
+		</div>
+	</div>
+	<pagination
+		@pagination="knowledgeRetrievalPaged"
+		:total="state.knowledgeTotal"
+		v-model:current-page="state.queryParams.PageIndex"
+		v-model:page-size="state.queryParams.PageSize"
+		layout="prev, pager, next"
+		class="pt10"
+		v-if="['', '中心知识库', '部门知识库'].includes(state.queryParams.Attribution)"
+	/>
+	<div v-if="['guide'].includes(state.queryParams.Attribution)">
+		<el-input v-model="guideKeyword" placeholder="请输入搜索内容" clearable class="mr10 w100" @keyup.enter="sendGuide">
+			<template #prepend>
+				<el-select v-model="selectType" style="width: 80px">
+					<el-option label="个人" value="1" />
+					<el-option label="企业" value="2" />
+				</el-select>
+			</template>
+			<template #append>
+				<el-button type="primary" @click="sendGuide" size="small" round>搜索</el-button>
+			</template>
+		</el-input>
+		<el-empty description="暂无数据" v-if="!guideList.length" class="mb20"> </el-empty>
+		<el-scrollbar max-height="400px"> </el-scrollbar>
+	</div>
+	<div v-if="['recommend'].includes(state.queryParams.Attribution)">
+		<el-input v-model="recommendKeyword" placeholder="请输入问题内容" clearable class="mr10 w100" @keyup.enter="sendRecommend">
+			<template #append>
+				<el-button type="primary" @click="sendRecommend" size="small" round>搜索</el-button>
+			</template>
+		</el-input>
+		<el-empty description="暂无数据" v-if="!recommendList.length" class="mb20"> </el-empty>
+		<el-scrollbar max-height="400px"> </el-scrollbar>
+	</div>
+</template>
+<script setup lang="ts" name="orderAcceptKnowledge">
+// 定义变量内容
+import { onMounted, reactive, defineAsyncComponent, ref, watch } from 'vue';
+import { useRouter } from 'vue-router';
+import { formatDate } from '@/utils/formatTime';
+import { knowledgeRetrieval, knowledgeRetrievalAccept } from '@/api/knowledge/retrieval';
+import { throttle } from '@/utils/tools';
+import { useThemeConfig } from '@/stores/themeConfig';
+import { storeToRefs } from 'pinia';
+import { removeDuplicate } from '@/utils/arrayOperation';
+import { lzRXFZAuth } from '@/api/business/lzRXFZ';
+import { useUserInfo } from '@/stores/userInfo';
+
+const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
+
+const props = defineProps({
+	type: {
+		// 知识库类型 (中心|部门)
+		type: String,
+		default: '',
+	},
+	formData: {
+		// 表单填写的数据
+		type: Object,
+		default: () => {
+			return {};
+		},
+	},
+});
+
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const state = reactive<any>({
+	loading: false, // 知识检索加载状态
+	knowledgeList: [],
+	knowledgeTotal: 0,
+	queryParams: {
+		PageIndex: 1,
+		PageSize: 5,
+		Keyword: null,
+		RetrievalType: 0, // 检索类型
+		Attribution: '',
+		Sort: '1',
+		recommendType: '1',
+	},
+});
+// 手动查询,将页码设置为1
+const handleQuery = () => {
+	if (['guide', 'recommend'].includes(state.queryParams.Attribution)) return;
+	state.queryParams.PageIndex = 1;
+	knowledgeRetrievalPaged();
+};
+//  知识查询
+const knowledgeRetrievalPaged = throttle(async () => {
+	try {
+		state.loading = true;
+		let request: EmptyObjectType = {};
+		if (state.queryParams.recommendType === '1') {
+			//关键词
+			request = {
+				...state.queryParams,
+				Content: props.formData.content,
+			};
+
+			Reflect.deleteProperty(request, 'HotspotId');
+		}
+		if (state.queryParams.recommendType === '2') {
+			//关键词
+			request = {
+				...state.queryParams,
+				HotspotId: props.formData.hotspotId,
+			};
+			Reflect.deleteProperty(request, 'Content');
+		}
+		const { result } = await knowledgeRetrievalAccept(request);
+		state.knowledgeList = result?.items ?? [];
+		state.knowledgeTotal = result?.total ?? 0;
+		if (props.formData.knowledgeQuote) {
+			for (let i of state.knowledgeList) {
+				for (let j of props.formData.knowledgeQuote) {
+					if (i.id === j.key) {
+						i.isChoose = true;
+					}
+				}
+			}
+		}
+		state.loading = false;
+	} catch (error) {
+		console.log(error);
+		state.loading = false;
+	}
+}, 300);
+const router = useRouter(); //
+// 预览知识
+const onPreview = (row: any) => {
+	router.push({
+		name: 'knowledgePreview',
+		params: {
+			id: row.id,
+			tagsViewName: '知识查看',
+		},
+	});
+};
+// 提供外部查询
+const HotspotName = ref('');
+const querySearch = async (name: string) => {
+	try {
+		// state.queryParams.Keyword = name;
+		HotspotName.value = name;
+		state.loading = true;
+		const request = {
+			...state.queryParams,
+			HotspotName: name,
+		};
+		const res: any = await knowledgeRetrieval(request);
+		state.knowledgeList = res.result?.items ?? [];
+		state.knowledgeTotal = res.result?.total ?? 0;
+		if (props.formData.knowledgeQuote) {
+			for (let i of state.knowledgeList) {
+				for (let j of props.formData.knowledgeQuote) {
+					if (i.id === j.key) {
+						i.isChoose = true;
+					}
+				}
+			}
+		}
+		state.loading = false;
+	} catch (error) {
+		console.log(error);
+		state.loading = false;
+	}
+};
+// 切换推荐类型查询
+const changeRecommendType = () => {
+	knowledgeRetrievalPaged();
+};
+const emit = defineEmits(['changeYYType']);
+const chooseArray = ref<EmptyArrayType>([]);
+const changeYYType = (row: any) => {
+	// 为了实现分页也能选中
+	row.isChoose = !row.isChoose;
+	if (row.isChoose) {
+		chooseArray.value.push(row);
+		removeDuplicate(chooseArray.value, row.id);
+	}
+	// 获取选中的数据
+	const data = chooseArray.value.filter((v: any) => v.isChoose);
+	const reData = data.map((v: any) => {
+		return {
+			key: v.id,
+			value: v.title,
+		};
+	});
+	console.log(reData);
+	emit('changeYYType', reData);
+};
+watch(
+	() => props.formData.hotspotId,
+	() => {
+		knowledgeRetrievalPaged();
+	},
+	{ immediate: true, deep: true }
+);
+// 指南关键词
+const guideKeyword = ref('');
+const selectType = ref('1'); // 选择类型 1 个人 2 企业
+// 发送问题
+const guideList = ref<EmptyArrayType>([]); // 指南列表
+const sendGuide = () => {
+	if (!guideKeyword.value) {
+		return;
+	}
+};
+// 推荐知识关键词
+const recommendKeyword = ref('');
+// 搜索
+const recommendList = ref<EmptyArrayType>([]); // 推荐列表
+const sendRecommend = () => {
+	if (!recommendKeyword.value) {
+		return;
+	}
+};
+// 热线赋值授权
+const stores = useUserInfo(); // 用户信息
+const { userInfos } = storeToRefs(stores); // 用户信息
+const getRXFZAuth = ()=>{
+	console.log(userInfos.value,'111')
+	lzRXFZAuth({uuid:'08dbba85-02b4-4c0d-83e9-a6e35977c105'}).then((res:any)=>{
+		console.log(res);
+	}).catch((err:any)=>{
+		console.log(err);
+	})
+}
+onMounted(() => {
+	knowledgeRetrievalPaged();
+	getRXFZAuth();
+});
+defineExpose({
+	knowledgeRetrievalPaged,
+	querySearch,
+});
+</script>
+
+<style scoped lang="scss">
+.knowledge-container {
+	position: relative;
+	.el-radio {
+		margin-right: 10px;
+		line-height: 32px;
+	}
+	.knowledge-search-button {
+		height: calc(100% - 6px);
+	}
+	.retrieval-content {
+		&-item {
+			border-bottom: var(--el-border);
+			padding: 5px 15px;
+			margin-bottom: 10px;
+			cursor: pointer;
+			&:last-child {
+				margin-bottom: 0;
+				border: none;
+			}
+			&:hover {
+				color: var(--el-color-primary);
+			}
+		}
+	}
+}
+</style>

+ 271 - 0
src/views/todo/seats/accept/ybKnowledge.vue

@@ -0,0 +1,271 @@
+<template>
+	<div class="knowledge-container">
+		<el-tabs v-model="state.queryParams.Attribution" @tab-change="handleQuery">
+			<el-tab-pane label="推荐知识库" name=""> </el-tab-pane>
+			<el-tab-pane label="中心知识库" name="中心知识库"> </el-tab-pane>
+			<el-tab-pane label="部门知识库" name="部门知识库"> </el-tab-pane>
+		</el-tabs>
+		<div class="knowledge-input">
+			<el-input v-model="state.queryParams.Keyword" placeholder="关键词" clearable class="mr10 w100" @keyup.enter="knowledgeRetrievalPaged">
+				<template #prefix>
+					<SvgIcon name="ele-Search" size="16px" />
+				</template>
+				<template #append>
+					<el-button type="primary" @click="knowledgeRetrievalPaged" class="search-button" size="small" round
+					><SvgIcon name="ele-Search" class="mr4" /> 查询
+					</el-button>
+				</template>
+			</el-input>
+		</div>
+		<div class="mt5" style="display: flex; flex-wrap: wrap; justify-content: space-between" v-if="state.queryParams.Attribution === ''">
+			<div style="display: flex">
+				<div style="height: 32px; line-height: 32px">推荐类型:</div>
+				<el-radio-group v-model="state.queryParams.recommendType" @change="changeRecommendType">
+					<el-radio value="1">关键词推荐</el-radio>
+					<el-radio value="2">热点推荐</el-radio>
+				</el-radio-group>
+			</div>
+			<div style="display: flex">
+				<div style="height: 32px; line-height: 32px">排序:</div>
+				<el-radio-group v-model="state.queryParams.Sort" @change="handleQuery">
+					<el-radio value="1">浏览量</el-radio>
+					<el-radio value="2">收藏量</el-radio>
+					<el-radio value="3">创建时间</el-radio>
+				</el-radio-group>
+			</div>
+		</div>
+		<div class="mt10 retrieval-content" v-loading="state.loading">
+			<el-empty description="暂无数据" v-if="!state.knowledgeList.length" class="mb20">
+				<template #image>
+					<span></span>
+				</template>
+			</el-empty>
+			<el-scrollbar>
+				<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)">{{
+								v.isChoose ? '取消引用' : '引用'
+							}}</el-button>
+					</div>
+					<!--					<div class="text-ellipsis2">{{ v.summary }}</div>-->
+					<div class="flex-center-between mt10 color-info">
+						<div>
+							<span class="mr10">创建部门:{{ v.creatorOrgName }}</span>
+							<span>创建时间:{{ formatDate(v.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</div>
+						<div class="flex-center-align">
+							<span class="flex-center-align"><SvgIcon name="ele-StarFilled" size="18px" class="mr3" />{{ v.score }}</span>
+							<!--							<span class="flex-center-align ml10"><SvgIcon name="ele-ChatDotSquare" size="16px" class="mr3" />{{ v.commentNum }}</span>-->
+							<span class="flex-center-align ml10"><SvgIcon name="ele-View" size="16px" class="mr3" />{{ v.pageView }}</span>
+						</div>
+					</div>
+				</div>
+			</el-scrollbar>
+		</div>
+	</div>
+	<pagination
+		@pagination="knowledgeRetrievalPaged"
+		:total="state.knowledgeTotal"
+		v-model:current-page="state.queryParams.PageIndex"
+		v-model:page-size="state.queryParams.PageSize"
+		layout="prev, pager, next"
+		class="pt10"
+	/>
+</template>
+<script setup lang="ts" name="orderAcceptKnowledge">
+// 定义变量内容
+import { onMounted, reactive, defineAsyncComponent, ref, watch } from 'vue';
+import { useRouter } from 'vue-router';
+import { formatDate } from '@/utils/formatTime';
+import { knowledgeRetrieval, knowledgeRetrievalAccept } from '@/api/knowledge/retrieval';
+import { throttle } from '@/utils/tools';
+import { useThemeConfig } from '@/stores/themeConfig';
+import { storeToRefs } from 'pinia';
+import { removeDuplicate } from '@/utils/arrayOperation';
+
+const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
+
+const props = defineProps({
+	type: {
+		// 知识库类型 (中心|部门)
+		type: String,
+		default: '',
+	},
+	formData: {
+		// 表单填写的数据
+		type: Object,
+		default: () => {
+			return {};
+		},
+	},
+});
+
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const state = reactive<any>({
+	loading: false, // 知识检索加载状态
+	knowledgeList: [],
+	knowledgeTotal: 0,
+	queryParams: {
+		PageIndex: 1,
+		PageSize: 5,
+		Keyword: null,
+		RetrievalType: 0, // 检索类型
+		Attribution: '',
+		Sort: '1',
+		recommendType: '1',
+	},
+});
+// 手动查询,将页码设置为1
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	knowledgeRetrievalPaged();
+};
+//  知识查询
+const knowledgeRetrievalPaged = throttle(async () => {
+	try {
+		state.loading = true;
+		let request: EmptyObjectType = {};
+		if (state.queryParams.recommendType === '1') {
+			//关键词
+			request = {
+				...state.queryParams,
+				Content: props.formData.content,
+			};
+
+			Reflect.deleteProperty(request, 'HotspotId');
+		}
+		if (state.queryParams.recommendType === '2') {
+			//关键词
+			request = {
+				...state.queryParams,
+				HotspotId: props.formData.hotspotId,
+			};
+			Reflect.deleteProperty(request, 'Content');
+		}
+		const { result } = await knowledgeRetrievalAccept(request);
+		state.knowledgeList = result?.items ?? [];
+		state.knowledgeTotal = result?.total ?? 0;
+		if (props.formData.knowledgeQuote) {
+			for (let i of state.knowledgeList) {
+				for (let j of props.formData.knowledgeQuote) {
+					if (i.id === j.key) {
+						i.isChoose = true;
+					}
+				}
+			}
+		}
+		state.loading = false;
+	} catch (error) {
+		console.log(error);
+		state.loading = false;
+	}
+}, 300);
+const router = useRouter(); //
+// 预览知识
+const onPreview = (row: any) => {
+	router.push({
+		name: 'knowledgePreview',
+		params: {
+			id: row.id,
+			tagsViewName: '知识查看',
+		},
+	});
+};
+// 提供外部查询
+const HotspotName = ref('');
+const querySearch = async (name: string) => {
+	try {
+		// state.queryParams.Keyword = name;
+		HotspotName.value = name;
+		state.loading = true;
+		const request = {
+			...state.queryParams,
+			HotspotName: name,
+		};
+		const res: any = await knowledgeRetrieval(request);
+		state.knowledgeList = res.result?.items ?? [];
+		state.knowledgeTotal = res.result?.total ?? 0;
+		if (props.formData.knowledgeQuote) {
+			for (let i of state.knowledgeList) {
+				for (let j of props.formData.knowledgeQuote) {
+					if (i.id === j.key) {
+						i.isChoose = true;
+					}
+				}
+			}
+		}
+		state.loading = false;
+	} catch (error) {
+		console.log(error);
+		state.loading = false;
+	}
+};
+// 切换推荐类型查询
+const changeRecommendType = () => {
+	knowledgeRetrievalPaged();
+};
+const emit = defineEmits(['changeYYType']);
+const chooseArray = ref<EmptyArrayType>([]);
+const changeYYType = (row: any) => {
+	// 为了实现分页也能选中
+	row.isChoose = !row.isChoose;
+	if (row.isChoose) {
+		chooseArray.value.push(row);
+		removeDuplicate(chooseArray.value, row.id);
+	}
+	// 获取选中的数据
+	const data = chooseArray.value.filter((v: any) => v.isChoose);
+	const reData = data.map((v: any) => {
+		return {
+			key: v.id,
+			value: v.title,
+		};
+	});
+	console.log(reData);
+	emit('changeYYType', reData);
+};
+watch(
+	() => props.formData.hotspotId,
+	() => {
+		knowledgeRetrievalPaged();
+	},
+	{ immediate: true, deep: true }
+);
+onMounted(() => {
+	knowledgeRetrievalPaged();
+});
+defineExpose({
+	knowledgeRetrievalPaged,
+	querySearch,
+});
+</script>
+
+<style scoped lang="scss">
+.knowledge-container {
+	position: relative;
+	.el-radio {
+		margin-right: 10px;
+		line-height: 32px;
+	}
+	.knowledge-search-button {
+		height: calc(100% - 6px);
+	}
+	.retrieval-content {
+		&-item {
+			border-bottom: var(--el-border);
+			padding: 5px 15px;
+			margin-bottom: 10px;
+			cursor: pointer;
+			&:last-child {
+				margin-bottom: 0;
+				border: none;
+			}
+			&:hover {
+				color: var(--el-color-primary);
+			}
+		}
+	}
+}
+</style>

+ 264 - 0
src/views/todo/seats/accept/zgKnowledge.vue

@@ -0,0 +1,264 @@
+<template>
+	<div class="knowledge-container">
+		<el-tabs v-model="state.queryParams.Attribution" @tab-change="handleQuery">
+			<el-tab-pane label="推荐知识库" name=""> </el-tab-pane>
+			<el-tab-pane label="中心知识库" name="中心知识库"> </el-tab-pane>
+			<el-tab-pane label="部门知识库" name="部门知识库"> </el-tab-pane>
+		</el-tabs>
+		<div class="knowledge-input">
+			<el-input v-model="state.queryParams.Keyword" placeholder="关键词" clearable class="mr10 w100" @keyup.enter="knowledgeRetrievalPaged">
+				<template #prefix>
+					<SvgIcon name="ele-Search" size="16px" />
+				</template>
+				<template #append>
+					<el-button type="primary" @click="knowledgeRetrievalPaged" class="search-button" size="small" round
+						><SvgIcon name="ele-Search" class="mr4" /> 查询
+					</el-button>
+				</template>
+			</el-input>
+		</div>
+		<div class="mt5" style="display: flex; flex-wrap: wrap; justify-content: space-between" v-if="state.queryParams.Attribution === ''">
+			<div style="display: flex">
+				<div style="height: 32px; line-height: 32px">推荐类型:</div>
+				<el-radio-group v-model="state.queryParams.recommendType" @change="changeRecommendType">
+					<el-radio value="1">关键词推荐</el-radio>
+					<el-radio value="2">热点推荐</el-radio>
+				</el-radio-group>
+			</div>
+			<div style="display: flex">
+				<div style="height: 32px; line-height: 32px">排序:</div>
+				<el-radio-group v-model="state.queryParams.Sort" @change="handleQuery">
+					<el-radio value="1">浏览量</el-radio>
+					<el-radio value="2">收藏量</el-radio>
+					<el-radio value="3">创建时间</el-radio>
+				</el-radio-group>
+			</div>
+		</div>
+		<div class="mt10 retrieval-content" v-loading="state.loading">
+			<el-empty description="暂无数据" v-if="!state.knowledgeList.length" class="mb20">
+				<template #image>
+					<span></span>
+				</template>
+			</el-empty>
+			<el-scrollbar>
+				<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.isChoose ? '取消引用' : '引用' }}</el-button>
+					</div>
+					<!--					<div class="text-ellipsis2">{{ v.summary }}</div>-->
+					<div class="flex-center-between mt10 color-info">
+						<div>
+							<span class="mr10">创建部门:{{ v.creatorOrgName }}</span>
+							<span>创建时间:{{ formatDate(v.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</div>
+						<div class="flex-center-align">
+							<span class="flex-center-align"><SvgIcon name="ele-StarFilled" size="18px" class="mr3" />{{ v.score }}</span>
+							<!--							<span class="flex-center-align ml10"><SvgIcon name="ele-ChatDotSquare" size="16px" class="mr3" />{{ v.commentNum }}</span>-->
+							<span class="flex-center-align ml10"><SvgIcon name="ele-View" size="16px" class="mr3" />{{ v.pageView }}</span>
+						</div>
+					</div>
+				</div>
+			</el-scrollbar>
+		</div>
+	</div>
+	<pagination
+		@pagination="knowledgeRetrievalPaged"
+		:total="state.knowledgeTotal"
+		v-model:current-page="state.queryParams.PageIndex"
+		v-model:page-size="state.queryParams.PageSize"
+		layout="prev, pager, next"
+		class="pt10"
+	/>
+</template>
+<script setup lang="ts" name="orderAcceptKnowledge">
+// 定义变量内容
+import { onMounted, reactive, defineAsyncComponent, ref, watch } from 'vue';
+import { useRouter } from 'vue-router';
+import { formatDate } from '@/utils/formatTime';
+import { knowledgeRetrieval, knowledgeRetrievalAccept } from '@/api/knowledge/retrieval';
+import { throttle } from '@/utils/tools';
+import { removeDuplicate } from '@/utils/arrayOperation';
+
+const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
+
+const props = defineProps({
+	type: {
+		// 知识库类型 (中心|部门)
+		type: String,
+		default: '',
+	},
+	formData: {
+		// 表单填写的数据
+		type: Object,
+		default: () => {
+			return {};
+		},
+	},
+});
+const state = reactive<any>({
+	loading: false, // 知识检索加载状态
+	knowledgeList: [],
+	knowledgeTotal: 0,
+	queryParams: {
+		PageIndex: 1,
+		PageSize: 5,
+		Keyword: null,
+		RetrievalType: 0, // 检索类型
+		Attribution: '',
+		Sort: '1',
+		recommendType: '1',
+	},
+});
+// 手动查询,将页码设置为1
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	knowledgeRetrievalPaged();
+};
+//  知识查询
+const knowledgeRetrievalPaged = throttle(async () => {
+	try {
+		state.loading = true;
+		let request: EmptyObjectType = {};
+		if (state.queryParams.recommendType === '1') {
+			//关键词
+			request = {
+				...state.queryParams,
+				Content: props.formData.content,
+			};
+
+			Reflect.deleteProperty(request, 'HotspotId');
+		}
+		if (state.queryParams.recommendType === '2') {
+			//关键词
+			request = {
+				...state.queryParams,
+				HotspotId: props.formData.hotspotId,
+			};
+			Reflect.deleteProperty(request, 'Content');
+		}
+		const { result } = await knowledgeRetrievalAccept(request);
+		state.knowledgeList = result?.items ?? [];
+		state.knowledgeTotal = result?.total ?? 0;
+		if (props.formData.knowledgeQuote) {
+			for (let i of state.knowledgeList) {
+				for (let j of props.formData.knowledgeQuote) {
+					if (i.id === j.key) {
+						i.isChoose = true;
+					}
+				}
+			}
+		}
+		state.loading = false;
+	} catch (error) {
+		console.log(error);
+		state.loading = false;
+	}
+}, 300);
+const router = useRouter(); //
+// 预览知识
+const onPreview = (row: any) => {
+	router.push({
+		name: 'knowledgePreview',
+		params: {
+			id: row.id,
+			tagsViewName: '知识查看',
+		},
+	});
+};
+// 提供外部查询
+const HotspotName = ref('');
+const querySearch = async (name: string) => {
+	try {
+		// state.queryParams.Keyword = name;
+		HotspotName.value = name;
+		state.loading = true;
+		const request = {
+			...state.queryParams,
+			HotspotName: name,
+		};
+		const res: any = await knowledgeRetrieval(request);
+		state.knowledgeList = res.result?.items ?? [];
+		state.knowledgeTotal = res.result?.total ?? 0;
+		if (props.formData.knowledgeQuote) {
+			for (let i of state.knowledgeList) {
+				for (let j of props.formData.knowledgeQuote) {
+					if (i.id === j.key) {
+						i.isChoose = true;
+					}
+				}
+			}
+		}
+		state.loading = false;
+	} catch (error) {
+		console.log(error);
+		state.loading = false;
+	}
+};
+// 切换推荐类型查询
+const changeRecommendType = () => {
+	knowledgeRetrievalPaged();
+};
+const emit = defineEmits(['changeYYType']);
+const chooseArray = ref<EmptyArrayType>([]);
+const changeYYType = (row: any) => {
+	// 为了实现分页也能选中
+	row.isChoose = !row.isChoose;
+	if (row.isChoose) {
+		chooseArray.value.push(row);
+		removeDuplicate(chooseArray.value, row.id);
+	}
+	// 获取选中的数据
+	const data = chooseArray.value.filter((v: any) => v.isChoose);
+	const reData = data.map((v: any) => {
+		return {
+			key: v.id,
+			value: v.title,
+		};
+	});
+	console.log(reData);
+	emit('changeYYType', reData);
+};
+watch(
+	() => props.formData.hotspotId,
+	() => {
+		knowledgeRetrievalPaged();
+	},
+	{ immediate: true, deep: true }
+);
+onMounted(() => {
+	knowledgeRetrievalPaged();
+});
+defineExpose({
+	knowledgeRetrievalPaged,
+	querySearch,
+});
+</script>
+
+<style scoped lang="scss">
+.knowledge-container {
+	position: relative;
+	.el-radio {
+		margin-right: 10px;
+		line-height: 32px;
+	}
+	.knowledge-search-button {
+		height: calc(100% - 6px);
+	}
+	.retrieval-content {
+		&-item {
+			border-bottom: var(--el-border);
+			padding: 5px 15px;
+			margin-bottom: 10px;
+			cursor: pointer;
+			&:last-child {
+				margin-bottom: 0;
+				border: none;
+			}
+			&:hover {
+				color: var(--el-color-primary);
+			}
+		}
+	}
+}
+</style>