|
@@ -3,24 +3,6 @@
|
|
|
<el-card shadow="never" style="padding: 0 50px">
|
|
|
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="120px" scroll-to-error>
|
|
|
<el-row :gutter="35">
|
|
|
- <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="attribution" :rules="[{ required: true, message: '请选择知识归属', trigger: 'change' }]">
|
|
|
- <!-- 是否是中心 -->
|
|
|
- <el-select v-model="state.ruleForm.attribution" placeholder="请选择知识归属" class="w100" :disabled="!userInfos.isCenter">
|
|
|
- <el-option label="中心预案库" value="中心预案库" />
|
|
|
- <el-option label="部门预案库" value="部门预案库" />
|
|
|
- </el-select>
|
|
|
- </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>
|
|
@@ -29,14 +11,14 @@
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
<template #default>
|
|
|
- <el-form-item label="预案分类" prop="knowledgeTypeId" :rules="[{ required: true, message: '请选择预案分类', trigger: 'change' }]">
|
|
|
+ <el-form-item label="预案分类" prop="PlanTypeID" :rules="[{ required: true, message: '请选择预案分类', trigger: 'change' }]">
|
|
|
<VTreeDrop
|
|
|
:data="state.typeData"
|
|
|
checkable
|
|
|
keyField="id"
|
|
|
titleField="name"
|
|
|
- v-model="state.ruleForm.knowledgeTypeId"
|
|
|
- @checked-change="getKnowledgeListData1"
|
|
|
+ v-model="state.ruleForm.PlanTypeID"
|
|
|
+ @checked-change="selectType"
|
|
|
:dropHeight="400"
|
|
|
dropPlaceholder="预案分类"
|
|
|
dropdownWidthFixed
|
|
@@ -104,44 +86,6 @@
|
|
|
<el-radio :value="true">是</el-radio>
|
|
|
<el-radio :value="false">否</el-radio>
|
|
|
</el-radio-group>
|
|
|
- <span class="color-danger ml10" v-if="state.ruleForm.isPublic">(公开后将在12345官网进行展示)</span>
|
|
|
- </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>
|
|
|
- <el-form-item label="来源部门" prop="sourceOrganizeId" :rules="[{ required: true, message: '请选择来源部门', trigger: 'change' }]">
|
|
|
- <el-skeleton-item variant="h1" />
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- <template #default>
|
|
|
- <el-form-item label="来源部门" prop="sourceOrganizeId" :rules="[{ required: true, message: '请选择来源部门', trigger: 'change' }]">
|
|
|
- <el-cascader
|
|
|
- :options="orgsOptions"
|
|
|
- filterable
|
|
|
- :props="{ value: 'id', label: 'name', emitPath: false, checkStrictly: true }"
|
|
|
- placeholder="请选择来源部门"
|
|
|
- class="w100"
|
|
|
- v-model="state.ruleForm.sourceOrganizeId"
|
|
|
- ref="orgRef"
|
|
|
- >
|
|
|
- </el-cascader>
|
|
|
- </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>
|
|
|
- <el-form-item label="热点分类">
|
|
|
- <el-skeleton-item variant="h1" />
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- <template #default>
|
|
|
- <el-form-item label="热点分类" prop="hotspotId" :rules="[{ required: false, message: '请选择热点分类', trigger: 'change' }]">
|
|
|
- <hot-spot-select v-model="state.ruleForm.hotspotId" v-model:externalArr="state.hotspotExternal" @change="chooseHotSpot" clearable />
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
</el-skeleton>
|
|
@@ -160,37 +104,6 @@
|
|
|
</template>
|
|
|
</el-skeleton>
|
|
|
</el-col>
|
|
|
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <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="keywordsName" :rules="[{ required: false, message: '关键词', trigger: 'change' }]">
|
|
|
- <el-input v-model="state.ruleForm.keywordsName" readonly placeholder="关键词" max-length="200" clearable>
|
|
|
- </el-input>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
- </el-col>
|
|
|
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <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="template" :rules="[{ required: false, message: '请选择预案库模板', trigger: 'change' }]">
|
|
|
- <el-select v-model="state.ruleForm.template" placeholder="请选择预案库模板" class="w100" @change="selectTemplate" clearable>
|
|
|
- <el-option :label="item.label" :value="item.value" v-for="item in templateList" :key="item.id" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
- </el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
<el-skeleton :loading="state.loading" animated>
|
|
|
<template #template>
|
|
@@ -204,9 +117,9 @@
|
|
|
v-model:get-html="state.ruleForm.content"
|
|
|
:disable="state.disable"
|
|
|
placeholder="请填写预案内容"
|
|
|
- @blur="isRepeat('content')"
|
|
|
:defaultContent="defaultContent"
|
|
|
ref="editorRef"
|
|
|
+ @blur="isRepeat('content')"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</template>
|
|
@@ -259,19 +172,15 @@ import { useUserInfo } from '@/stores/userInfo';
|
|
|
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, KnowledgeInfo, knowledgeKeyword, KnowledgeUpdate } from '@/api/knowledge';
|
|
|
-import { templateList } from '@/views/knowledge/index/template';
|
|
|
+import { KnowledgeAdd, knowledgeContent, KnowledgeInfo, KnowledgeUpdate } from '@/api/knowledge';
|
|
|
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 { planRepeat } from '@/api/plan';
|
|
|
// 引入组件
|
|
|
const Editor = defineAsyncComponent(() => import('@/components/Editor/index.vue')); // 富文本编辑器
|
|
|
const ProcessAudit = defineAsyncComponent(() => import('@/components/ProcessAudit/index.vue')); // 流程审批
|
|
|
const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件组件
|
|
|
-const HotSpotSelect = defineAsyncComponent(() => import('@/components/Hotspot/index.vue')); // 选择热点
|
|
|
const stores = useUserInfo(); // 用户信息
|
|
|
const { userInfos } = storeToRefs(stores); // 用户信息
|
|
|
|
|
@@ -279,61 +188,28 @@ const { userInfos } = storeToRefs(stores); // 用户信息
|
|
|
const state = reactive<any>({
|
|
|
dialogVisible: false,
|
|
|
ruleForm: {
|
|
|
- attribution: userInfos.value.isCenter ? '中心预案库' : '部门预案库', // 预案归属
|
|
|
+ attribution: '中心预案库', // 预案归属
|
|
|
isPublic: true, // 是否公开
|
|
|
- keywords: [], // 关键字
|
|
|
- keywordsName: null, // 关键字名称
|
|
|
- knowledgeTypeId: [], // 知识分类
|
|
|
- hotspotId: null, // 热点分类
|
|
|
- knowledges: [], // 关联知识
|
|
|
files: [], // 附件
|
|
|
- template: null, // 知识库模板
|
|
|
- content: '', // 知识内容
|
|
|
- sourceOrganizeId: null, // 知识来源部门
|
|
|
- title: null, // 知识标题
|
|
|
- source: null, // 知识来源
|
|
|
+ content: '', // 内容
|
|
|
+ title: null, // 标题
|
|
|
},
|
|
|
- typeData: [], // 知识分类
|
|
|
+ typeData: [], // 分类
|
|
|
loading: false,
|
|
|
- hotspotExternal: [],
|
|
|
- knowledgeOptions: [], //关联知识
|
|
|
});
|
|
|
-const storesThemeConfig = useThemeConfig();
|
|
|
-const { themeConfig } = storeToRefs(storesThemeConfig);
|
|
|
const ruleFormRef = ref<any>(); // 表单ref
|
|
|
-// 选择热点分类
|
|
|
-const chooseHotSpot = (val: any, node: any, externalArr: any) => {
|
|
|
- if (val) {
|
|
|
- state.ruleForm.hotspotSpliceName = val.hotSpotFullName; // 热点分类拼接名称
|
|
|
- state.ruleForm.hotspotName = val.hotSpotName; // 热点分类名称
|
|
|
- state.ruleForm.hotspotCode = val.provinceCode; // 热点分类code
|
|
|
- state.ruleForm.hotspotExternal = externalArr.join(',') ?? ''; // 热点分类默认展开项
|
|
|
- } else {
|
|
|
- state.ruleForm.hotspotSpliceName = null;
|
|
|
- state.ruleForm.hotspotName = null;
|
|
|
- state.ruleForm.hotspotCode = null;
|
|
|
- state.ruleForm.hotspotExternal = null;
|
|
|
- }
|
|
|
-};
|
|
|
const validatePassTitle = (rule: any, value: any, callback: any) => {
|
|
|
if (value === '' || value === null) {
|
|
|
- callback(new Error('请填写知识标题'));
|
|
|
+ callback(new Error('请填写案例标题'));
|
|
|
} else if (Repeat.value) {
|
|
|
callback(new Error('有相似标题,请检查!'));
|
|
|
} else {
|
|
|
callback();
|
|
|
}
|
|
|
};
|
|
|
-const validatePassSummary = (rule: any, value: any, callback: any) => {
|
|
|
- if (Repeat.value) {
|
|
|
- callback(new Error('有相似摘要,请检查!'));
|
|
|
- } else {
|
|
|
- callback();
|
|
|
- }
|
|
|
-};
|
|
|
const validatePassContent = (rule: any, value: any, callback: any) => {
|
|
|
if (value === '' || value === null) {
|
|
|
- callback(new Error('请填写知识内容'));
|
|
|
+ callback(new Error('请填写案例内容'));
|
|
|
} else if (Repeat.value) {
|
|
|
callback(new Error('有相似内容,请检查!'));
|
|
|
} else {
|
|
@@ -342,10 +218,9 @@ const validatePassContent = (rule: any, value: any, callback: any) => {
|
|
|
};
|
|
|
// 校验标题/摘要/内容是否重复 根据输入标题检测出关键词填入
|
|
|
const Repeat = ref<boolean>(false);
|
|
|
-const keyWordsNameArr = ref<any>([]);
|
|
|
const isRepeat = (type: string) => {
|
|
|
if (state.ruleForm[type]) {
|
|
|
- knowledgeContent({ [type]: state.ruleForm[type], id: state.ruleForm.id })
|
|
|
+ planRepeat({ [type]: state.ruleForm[type], id: state.ruleForm.id })
|
|
|
.then((res: any) => {
|
|
|
Repeat.value = res.result;
|
|
|
ruleFormRef.value.validateField(type);
|
|
@@ -354,15 +229,6 @@ const isRepeat = (type: string) => {
|
|
|
state.ruleForm[type] = '';
|
|
|
});
|
|
|
}
|
|
|
- knowledgeKeyword({ title: state.ruleForm.title }).then((res) => {
|
|
|
- if (res.result.length) {
|
|
|
- const nameArr = res.result.map((item: any) => item.tag);
|
|
|
- const ids = res.result.map((item: any) => item.id);
|
|
|
- keyWordsNameArr.value = removeDuplicate([...keyWordsNameArr.value, ...nameArr]);
|
|
|
- state.ruleForm.keywordsName = keyWordsNameArr.value.join(',');
|
|
|
- state.ruleForm.keywords = removeDuplicate([...state.ruleForm.keywords, ...ids]);
|
|
|
- }
|
|
|
- });
|
|
|
};
|
|
|
// 默认配置
|
|
|
const defaultContent = ref([
|
|
@@ -372,16 +238,12 @@ const defaultContent = ref([
|
|
|
lineHeight: '2',
|
|
|
},
|
|
|
]);
|
|
|
-const getKnowledgeListData1 = (value: any) => {
|
|
|
- state.ruleForm.knowledgeType = value.map((item: any) => {
|
|
|
- return { KnowledgeTypeName: item.name, KnowledgeTypeId: item.id, KnowledgeTypeSpliceName: item.spliceName };
|
|
|
+const selectType = (value: any) => {
|
|
|
+ state.ruleForm.planType = value.map((item: any) => {
|
|
|
+ return { planTypeName: item.name, PlanTypeID: item.id, planTypeSpliceName: item.spliceName };
|
|
|
});
|
|
|
- state.ruleForm.knowledgeTypeId = value.map((item: any) => item.id);
|
|
|
- ruleFormRef.value.validateField('knowledgeTypeId')
|
|
|
-};
|
|
|
-// 选择知识库模板
|
|
|
-const selectTemplate = (val: any) => {
|
|
|
- state.ruleForm.content = state.ruleForm.content + val;
|
|
|
+ state.ruleForm.PlanTypeID = value.map((item: any) => item.id);
|
|
|
+ ruleFormRef.value.validateField('PlanTypeID');
|
|
|
};
|
|
|
// 提交审核
|
|
|
const processAuditRef = ref<RefType>(); // 流程组件
|
|
@@ -463,9 +325,9 @@ const onPreview = () => {
|
|
|
}
|
|
|
Local.set('previewForm', state.ruleForm);
|
|
|
router.push({
|
|
|
- name: 'knowledgePreview',
|
|
|
+ name: 'planPreview',
|
|
|
params: {
|
|
|
- tagsViewName: '知识预览',
|
|
|
+ tagsViewName: '案例预览',
|
|
|
id: '0',
|
|
|
},
|
|
|
});
|
|
@@ -500,9 +362,9 @@ const onSaveOnly = throttle(async (formEl: FormInstance | undefined) => {
|
|
|
const onCancel = () => {
|
|
|
state.loading = true;
|
|
|
mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
|
|
|
- mittBus.emit('clearCache', 'knowledgeManage');
|
|
|
+ mittBus.emit('clearCache', 'planManage');
|
|
|
router.push({
|
|
|
- path: '/knowledge/index',
|
|
|
+ path: '/plan/index',
|
|
|
});
|
|
|
state.loading = false;
|
|
|
};
|
|
@@ -511,25 +373,19 @@ const handleSuccess = () => {
|
|
|
ElMessage.success('操作成功');
|
|
|
// 关闭当前 tagsView
|
|
|
mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
|
|
|
- mittBus.emit('clearCache', 'knowledgeManage');
|
|
|
+ mittBus.emit('clearCache', 'planManage');
|
|
|
router.push({
|
|
|
- path: '/knowledge/index',
|
|
|
+ path: '/plan/index',
|
|
|
});
|
|
|
};
|
|
|
-const orgsOptions = ref<EmptyArrayType>([]); // 来源单位
|
|
|
-// 知识分类
|
|
|
-const getKnowledgeType = async () => {
|
|
|
+// 获取分类
|
|
|
+const getType = async () => {
|
|
|
state.loading = true;
|
|
|
try {
|
|
|
const [typeDataRes] = await Promise.all([
|
|
|
planTreeList({ IsEnable: true }),
|
|
|
- // KnowledgeGetKnowledge(),
|
|
|
- // getCanUseOrg(),
|
|
|
]);
|
|
|
state.typeData = typeDataRes.result ?? [];
|
|
|
- // state.knowledgeOptions = knowledgeOptionsRes.result ?? [];
|
|
|
- // orgsOptions.value = orgsOptionsRes.result ?? [];
|
|
|
-
|
|
|
state.loading = false;
|
|
|
} catch (error) {
|
|
|
console.log(error);
|
|
@@ -542,19 +398,11 @@ const getDetail = async () => {
|
|
|
const res: any = await KnowledgeInfo(route.params.id); //知识详情
|
|
|
state.ruleForm = res.result ?? {};
|
|
|
state.ruleForm.files = transformFile(state.ruleForm.files);
|
|
|
- if (state.ruleForm.hotspotExternal) {
|
|
|
- //热点分类默认展开
|
|
|
- state.hotspotExternal = state.ruleForm.hotspotExternal.split(',');
|
|
|
- }
|
|
|
- state.ruleForm.knowledges = state.ruleForm.knowledges ?? [];
|
|
|
- if (state.ruleForm.keywordsDto && state.ruleForm.keywordsDto.length) {
|
|
|
- state.ruleForm.keywordsName = state.ruleForm.keywordsDto.map((item: any) => item.tag).join(',');
|
|
|
- }
|
|
|
- state.ruleForm.knowledgeTypeId = state.ruleForm.knowledgeType.map((item: any) => item.knowledgeTypeId);
|
|
|
+ state.ruleForm.PlanTypeID = state.ruleForm.planType.map((item: any) => item.PlanTypeID);
|
|
|
}
|
|
|
};
|
|
|
onMounted(async () => {
|
|
|
- await getKnowledgeType();
|
|
|
+ await getType();
|
|
|
await nextTick();
|
|
|
await getDetail();
|
|
|
});
|