Bläddra i källkod

reactor:对接知识库导入;

zhangchong 3 månader sedan
förälder
incheckning
8d6a5ed68f
5 ändrade filer med 303 tillägg och 264 borttagningar
  1. 1 1
      package.json
  2. 48 0
      src/App.vue
  3. 6 16
      src/views/knowledge/index/components/knowledge-import.vue
  4. 8 7
      src/views/knowledge/index/edit.vue
  5. 240 240
      yarn.lock

+ 1 - 1
package.json

@@ -27,7 +27,7 @@
 		"axios": "^1.4.0",
 		"dayjs": "^1.11.9",
 		"echarts": "^5.5.0",
-		"element-plus": "^2.7.7",
+		"element-plus": "^2.9.2",
 		"file-saver": "^2.0.5",
 		"html-docx-js-typescript": "^0.1.5",
 		"html2canvas": "^1.4.1",

+ 48 - 0
src/App.vue

@@ -30,6 +30,7 @@ import { initFrontEndControlRoutes } from '@/router/frontEnd';
 import { initBackEndControlRoutes } from '@/router/backEnd';
 import { VxeUI, VxeButton } from 'vxe-pc-ui';
 import MenuSvgIcon from '@/views/system/menu/components/Menu-svgIcon.vue';
+import {getTokenByUrl} from "@/api/home";
 
 // 式化日期,默认 yyyy-MM-dd HH:mm:ss
 VxeUI.formats.add('formatDate', {
@@ -365,6 +366,53 @@ onMounted(() => {
         console.log(index, data);
       });*/
 
+    /*  // 通过url判断单点登录
+      // 获取url特殊参数 实现登录跳转
+      // 单点登录进来的参数
+      const urlParams = new URLSearchParams(window.location.search);
+      const source = urlParams.get('source');
+      const username = urlParams.get('username');
+      // 判断是否是单点登录
+      const isSingleSignOn = source === 'oldHotline' && username;
+      if (isSingleSignOn) {
+        Cookie.remove('token');
+        getTokenByUrl({ userName: username })
+            .then(async (res: any) => {
+              //登录
+              // 存储 token 到浏览器缓存
+              Cookie.set('token', res.result);
+              window.history.replaceState({}, document.title, window.location.pathname);
+              if (!themeConfig.value.isRequestRoutes) {
+                // 前端控制路由,2、请注意执行顺序
+                const isNoPower = await initFrontEndControlRoutes();
+                signInSuccess(isNoPower);
+              } else {
+                // 模拟后端控制路由,isRequestRoutes 为 true,则开启后端控制路由
+                // 添加完动态路由,再进行 router 跳转,否则可能报错 No match found for location with path "/"
+                const isNoPower = await initBackEndControlRoutes();
+                // 执行完 initBackEndControlRoutes,再执行 signInSuccess
+                signInSuccess(isNoPower);
+              }
+            })
+            .catch((err) => {
+              const message = err.response.data.message;
+              ElMessageBox.alert(message, '登录失败', {
+                confirmButtonText: '确定',
+                type: 'error',
+                showClose: false,
+                draggable: true,
+                callback: () => {
+                  window.history.replaceState({}, document.title, window.location.pathname);
+                  // 清除缓存/token等
+                  Local.clear();
+                  Session.clear();
+                  Cookie.clear();
+                  // 使用 reload 时,不需要调用 resetRoute() 重置路由
+                  window.location.reload();
+                },
+              });
+            });
+      }*/
 			// 通过url判断单点登录
 			// 获取url特殊参数 实现登录跳转
 			// 单点登录进来的参数

+ 6 - 16
src/views/knowledge/index/components/knowledge-import.vue

@@ -13,19 +13,13 @@
 			class="mt10"
 			:disabled="state.loading"
 		>
-			<el-button type="primary" :loading="state.loading"> <SvgIcon name="ele-Upload" class="mr5" /> 上传文件 </el-button>
+			<el-button type="primary" :loading="state.loading"> <SvgIcon name="ele-Upload" class="mr5" /> 导入知识 </el-button>
 		</el-upload>
 		<vxe-tip title="注意" status="error" class="mt10">
-			<p>1、文件大小不超过xxM,导入知识内容不超过xx条</p>
-			<p>2、如需导入分类,请现在分类管理中创建好分类再导入;</p>
-			<p>3、导入可能需要一段时间,请耐心等待(数据越多越久);</p>
+			<p>1、如需导入分类,请先在分类管理中创建好分类再导入;</p>
+			<p>2、导入可能需要一段时间,请耐心等待(数据越多越久);</p>
+      <!--			<p>3、文件大小不超过xxM,导入知识内容不超过xx条</p>-->
 		</vxe-tip>
-		<template #footer>
-			<span class="dialog-footer">
-				<el-button @click="closeDialog" class="default-button">取 消</el-button>
-				<el-button type="primary" @click="onSave" :loading="state.loading">导入</el-button>
-			</span>
-		</template>
 	</el-dialog>
 </template>
 
@@ -33,7 +27,7 @@
 import { reactive, ref } from 'vue';
 import { ElNotification } from 'element-plus';
 import { downloadFileByStream } from '@/utils/tools';
-import {knowledgeImport, knowledgeTemplate} from '@/api/knowledge';
+import { knowledgeImport, knowledgeTemplate } from '@/api/knowledge';
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
 
@@ -50,8 +44,6 @@ const state = reactive<any>({
 	},
 	loading: false,
 });
-// 获取模板下载链接
-const getKnowledgeTemplate = async () => {};
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 const openDialog = () => {
@@ -89,7 +81,7 @@ const onImport = async (file: any) => {
 		const { result } = await knowledgeImport(fd);
 		ElNotification({
 			title: '导入完成',
-			message: `总条数:${result.count}条,新增:${result.addCount}条,失败:${result.errorCount}条`,
+			message: result,
 			type: 'success',
 		});
 		closeDialog();
@@ -100,8 +92,6 @@ const onImport = async (file: any) => {
 		state.loading = false;
 	}
 };
-// 导入
-const onSave = () => {};
 defineExpose({
 	openDialog,
 	closeDialog,

+ 8 - 7
src/views/knowledge/index/edit.vue

@@ -437,14 +437,13 @@ import { Local } from '@/utils/storage';
 import other from '@/utils/other';
 import { throttle, transformFile } from '@/utils/tools';
 import { treeList } from '@/api/knowledge/type';
-import { KnowledgeAdd, knowledgeContent, knowledgeDraft, knowledgeDraftAudit, knowledgeDraftEdit, KnowledgeInfo, knowledgeKeyword, KnowledgeUpdate } from '@/api/knowledge';
+import { knowledgeContent, knowledgeDraft, knowledgeDraftAudit, knowledgeDraftEdit, KnowledgeInfo, knowledgeKeyword } from '@/api/knowledge';
 import { templateList } from '@/views/knowledge/index/template';
 import { disabledDate } from '@/utils/constants';
 import { removeDuplicate } from '@/utils/arrayOperation';
 import { useThemeConfig } from '@/stores/themeConfig';
 import { VTreeDrop } from '@wsfe/vue-tree';
 import { planTreeList } from '@/api/plan/type';
-import { addPlanDraftAudit } from '@/api/plan';
 // 引入组件
 const Editor = defineAsyncComponent(() => import('@/components/Editor/index.vue')); // 富文本编辑器
 const ProcessAudit = defineAsyncComponent(() => import('@/components/ProcessAudit/index.vue')); // 流程审批
@@ -454,7 +453,6 @@ const KnowledgeKeywords = defineAsyncComponent(() => import('@/views/knowledge/c
 const HotSpotSelect = defineAsyncComponent(() => import('@/components/Hotspot/index.vue')); // 选择热点
 const EditSubmitAudit = defineAsyncComponent(() => import('@/views/knowledge/index/components/Edit-submit-audit.vue')); // 删除或者更新 提交审核
 
-
 const stores = useUserInfo(); // 用户信息
 const { userInfos } = storeToRefs(stores); // 用户信息
 
@@ -479,7 +477,7 @@ const state = reactive<any>({
 		versionDescription: null, // 版本说明
 		indexNo: null, // 索引号
 		fileNo: null, // 文号
-		planTypeId:null, // 预案分类
+		planTypeId: null, // 预案分类
 	},
 	typeData: [], // 知识分类
 	loading: false,
@@ -549,6 +547,7 @@ const isRepeat = (type: string) => {
 			const ids = res.result.map((item: any) => item.id);
 			keyWordsNameArr.value = removeDuplicate([...keyWordsNameArr.value, ...nameArr]);
 			state.ruleForm.keywordsName = keyWordsNameArr.value.join(',');
+      if(!state.ruleForm.keywords) state.ruleForm.keywords = [];
 			state.ruleForm.keywords = removeDuplicate([...state.ruleForm.keywords, ...ids]);
 		}
 	});
@@ -587,6 +586,7 @@ const selectKeyword = (val: any) => {
 		const nameArr = val.name;
 		keyWordsNameArr.value = removeDuplicate([...keyWordsNameArr.value, ...nameArr]);
 		state.ruleForm.keywordsName = keyWordsNameArr.value.join(',');
+    if(!state.ruleForm.keywords) state.ruleForm.keywords = [];
 		state.ruleForm.keywords = removeDuplicate([...state.ruleForm.keywords, ...val.ids]);
 	} else {
 		keyWordsNameArr.value = [];
@@ -599,7 +599,7 @@ const selectTemplate = (val: any) => {
 	state.ruleForm.content = state.ruleForm.content + val;
 };
 // 提交审核
-const editSubmitAuditRef = ref<RefType>();  // 编辑提交审核
+const editSubmitAuditRef = ref<RefType>(); // 编辑提交审核
 const processAuditRef = ref<RefType>(); // 流程组件
 const route = useRoute(); // 获取路由
 const router = useRouter(); // 路由跳转
@@ -641,6 +641,7 @@ const knowledgeProcessSuccess = () => {
 // 预览
 const onPreview = () => {
 	if (route.params.id) {
+		/* empty */
 	} else {
 		state.ruleForm.creatorName = userInfos.value?.name ?? '';
 		state.ruleForm.creationTime = new Date();
@@ -666,14 +667,14 @@ const onSaveOnly = throttle(async (formEl: FormInstance | undefined) => {
 		Reflect.deleteProperty(submitObj, 'creationTime');
 		if (route.params.id) {
 			// 更新草稿
-			knowledgeDraftEdit(submitObj )
+			knowledgeDraftEdit(submitObj)
 				.then(handleSuccess)
 				.catch(() => {
 					state.loading = false;
 				});
 		} else {
 			// 新增
-			knowledgeDraft(submitObj )
+			knowledgeDraft(submitObj)
 				.then(handleSuccess)
 				.catch(() => {
 					state.loading = false;

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 240 - 240
yarn.lock


Vissa filer visades inte eftersom för många filer har ändrats