|
@@ -6,23 +6,18 @@
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
<el-form-item label="温馨提示">
|
|
|
<span style="color: var(--el-color-danger)">
|
|
|
- 发布知识前请仔细阅读 <el-link type="primary" @click="showStandard">【知识编写规范】</el-link>,以免知识无法通过审核,浪费您的时间!
|
|
|
+ 发布知识前请仔细阅读 <el-link type="primary"
|
|
|
+ @click="showStandard">【知识编写规范】</el-link>,以免知识无法通过审核,浪费您的时间!
|
|
|
</span>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="知识分类" prop="knowledgeTypeId" :rules="[{ required: true, message: '请选择知识分类', trigger: 'change' }]">
|
|
|
- <el-cascader
|
|
|
- :options="state.typeData"
|
|
|
- filterable
|
|
|
+ <el-form-item label="知识分类" prop="knowledgeTypeId"
|
|
|
+ :rules="[{ required: true, message: '请选择知识分类', trigger: 'change' }]">
|
|
|
+ <el-cascader :options="state.typeData" filterable
|
|
|
:props="{ checkStrictly: true, value: 'id', label: 'name', emitPath: false, children: 'children' }"
|
|
|
- placeholder="请选择上知识分类"
|
|
|
- clearable
|
|
|
- class="w100"
|
|
|
- v-model="state.ruleForm.knowledgeTypeId"
|
|
|
- ref="cascadeRef"
|
|
|
- @change="getKnowledgeList"
|
|
|
- >
|
|
|
+ placeholder="请选择上知识分类" clearable class="w100" v-model="state.ruleForm.knowledgeTypeId"
|
|
|
+ ref="cascadeRef" @change="getKnowledgeList">
|
|
|
<template #default="{ node, data }">
|
|
|
<span>{{ data.name }}</span>
|
|
|
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
|
|
@@ -31,46 +26,45 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="热点分类" prop="hotspotId" :rules="[{ required: true, message: '请选择热点分类', trigger: 'change' }]">
|
|
|
- <el-tree-select
|
|
|
- class="w100"
|
|
|
- v-model="state.ruleForm.hotspotId"
|
|
|
- filterable
|
|
|
- placeholder="请选择热点分类"
|
|
|
- :props="HotspotProps"
|
|
|
- lazy
|
|
|
- :load="load"
|
|
|
- node-key="id"
|
|
|
- check-strictly
|
|
|
- :render-after-expand="false"
|
|
|
- @node-click="hotSpotChange"
|
|
|
- ref="hotspotRef"
|
|
|
- :default-expanded-keys="state.hotspotExternal"
|
|
|
- />
|
|
|
+ <el-form-item label="热点分类" prop="hotspotId"
|
|
|
+ :rules="[{ required: true, message: '请选择热点分类', trigger: 'change' }]">
|
|
|
+ <el-tree-select class="w100" v-model="state.ruleForm.hotspotId" filterable placeholder="请选择热点分类"
|
|
|
+ :props="HotspotProps" lazy :load="load" node-key="id" check-strictly
|
|
|
+ :render-after-expand="false" @node-click="hotSpotChange" ref="hotspotRef"
|
|
|
+ :default-expanded-keys="state.hotspotExternal" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="标题" prop="title" :rules="[{ required: true, message: '请填写标题', trigger: 'blur' }]">
|
|
|
- <el-input v-model="state.ruleForm.title" placeholder=" 输入标题,不超过30个字" max-length="30" clearable></el-input>
|
|
|
+ <el-form-item label="标题" prop="title"
|
|
|
+ :rules="[{ required: true, message: '请填写标题', trigger: 'blur' }]">
|
|
|
+ <el-input v-model="state.ruleForm.title" placeholder=" 输入标题,不超过30个字" max-length="30"
|
|
|
+ clearable></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="摘要" prop="summary" :rules="[{ required: false, message: '请填写摘要', trigger: 'blur' }]">
|
|
|
- <el-input v-model="state.ruleForm.summary" placeholder="输入摘要,不超过200个字" max-length="200" clearable></el-input>
|
|
|
+ <el-form-item label="摘要" prop="summary"
|
|
|
+ :rules="[{ required: false, message: '请填写摘要', trigger: 'blur' }]">
|
|
|
+ <el-input v-model="state.ruleForm.summary" placeholder="输入摘要,不超过200个字" max-length="200"
|
|
|
+ clearable></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="正文" prop="content" :rules="[{ required: true, message: '请输入正文内容', trigger: 'blur' }]">
|
|
|
- <editor v-model:get-html="state.ruleForm.content" :disable="state.disable" placeholder="请输入正文内容" />
|
|
|
+ <el-form-item label="正文" prop="content"
|
|
|
+ :rules="[{ required: true, message: '请输入正文内容', trigger: 'blur' }]">
|
|
|
+ <editor v-model:get-html="state.ruleForm.content" :disable="state.disable"
|
|
|
+ placeholder="请输入正文内容" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="关键词" prop="keywords" :rules="[{ required: false, message: '请填写关键词要', trigger: 'blur' }]">
|
|
|
- <el-input v-model="state.ruleForm.keywords" placeholder="请输入关键词,多个关键词用英文“,”分开" max-length="200" clearable></el-input>
|
|
|
+ <el-form-item label="关键词" prop="keywords"
|
|
|
+ :rules="[{ required: false, message: '请填写关键词要', trigger: 'blur' }]">
|
|
|
+ <el-input v-model="state.ruleForm.keywords" placeholder="请输入关键词,多个关键词用英文“,”分开" max-length="200"
|
|
|
+ clearable></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="是否公开" prop="isPublic" :rules="[{ required: false, message: '请选择是否公开', trigger: 'change' }]">
|
|
|
+ <el-form-item label="是否公开" prop="isPublic"
|
|
|
+ :rules="[{ required: false, message: '请选择是否公开', trigger: 'change' }]">
|
|
|
<el-radio-group v-model="state.ruleForm.isPublic">
|
|
|
<el-radio :label="true">是</el-radio>
|
|
|
<el-radio :label="false">否</el-radio>
|
|
@@ -78,7 +72,8 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="关联知识" prop="knowledges" :rules="[{ required: false, message: '请选择关联知识', trigger: 'change' }]">
|
|
|
+ <el-form-item label="关联知识" prop="knowledges"
|
|
|
+ :rules="[{ required: false, message: '请选择关联知识', trigger: 'change' }]">
|
|
|
<template #label>
|
|
|
<div style="height: 34px; display: flex; align-items: center">
|
|
|
关联知识
|
|
@@ -88,19 +83,13 @@
|
|
|
</el-tooltip>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <el-select-v2
|
|
|
- v-model="state.ruleForm.knowledges"
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- :options="state.knowledgeOptions"
|
|
|
- placeholder="请选择关联知识"
|
|
|
- class="w100"
|
|
|
- multiple
|
|
|
- />
|
|
|
+ <el-select-v2 v-model="state.ruleForm.knowledges" filterable clearable
|
|
|
+ :options="state.knowledgeOptions" placeholder="请选择关联知识" class="w100" multiple />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="失效时间" prop="expiredTime" :rules="[{ required: false, message: '请选择失效时间', trigger: 'change' }]">
|
|
|
+ <el-form-item label="失效时间" prop="expiredTime"
|
|
|
+ :rules="[{ required: false, message: '请选择失效时间', trigger: 'change' }]">
|
|
|
<template #label>
|
|
|
<div style="height: 34px; display: flex; align-items: center">
|
|
|
失效时间
|
|
@@ -110,25 +99,23 @@
|
|
|
</el-tooltip>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <el-date-picker
|
|
|
- v-model="state.ruleForm.expiredTime"
|
|
|
- type="datetime"
|
|
|
- placeholder="请选择失效时间"
|
|
|
- class="w100"
|
|
|
- value-format="YYYY-MM-DD[T]HH:mm:ss"
|
|
|
- />
|
|
|
+ <el-date-picker v-model="state.ruleForm.expiredTime" type="datetime" placeholder="请选择失效时间"
|
|
|
+ class="w100" value-format="YYYY-MM-DD[T]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="additions" :rules="[{ required: false, message: '请选择附件', trigger: 'change' }]">
|
|
|
+ <el-form-item label="附件" prop="additions"
|
|
|
+ :rules="[{ required: false, message: '请选择附件', trigger: 'change' }]">
|
|
|
<Upload :fileList="state.fileList" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
<el-form-item>
|
|
|
- <el-button type="primary" @click="onSubmitReview(ruleFormRef)" :loading="state.loading">提交审核</el-button>
|
|
|
+ <el-button type="primary" @click="onSubmitReview(ruleFormRef)"
|
|
|
+ :loading="state.loading">提交审核</el-button>
|
|
|
<el-button class="default-button" @click="onPreview" :loading="state.loading">预览 </el-button>
|
|
|
- <el-button @click="onSaveOnly(ruleFormRef)" class="default-button" :loading="state.loading">{{ state.saveText }}</el-button>
|
|
|
+ <el-button @click="onSaveOnly(ruleFormRef)" class="default-button" :loading="state.loading">{{
|
|
|
+ saveText }}</el-button>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
@@ -168,15 +155,14 @@ const state = reactive<any>({
|
|
|
isShowDialog: false,
|
|
|
ruleForm: {
|
|
|
isPublic: true,
|
|
|
- knowledgeTypeId:'',
|
|
|
- hotspotId:'',
|
|
|
+ knowledgeTypeId: '',
|
|
|
+ hotspotId: '',
|
|
|
knowledges: [],
|
|
|
},
|
|
|
typeData: [], // 知识分类
|
|
|
loading: false,
|
|
|
hotspotExternal: [],
|
|
|
knowledgeOptions: [], //关联知识
|
|
|
- saveText: '保存到草稿箱',
|
|
|
knowledgeId: '', // 当前id
|
|
|
});
|
|
|
const route = useRoute();
|
|
@@ -216,7 +202,7 @@ const getParentId = (val: any, arr: string[]) => {
|
|
|
// 展示编写规范
|
|
|
const KnowledgeStandardRef = ref<RefType>();
|
|
|
const showStandard = () => {
|
|
|
- KnowledgeStandardRef.value.openDialog();
|
|
|
+ KnowledgeStandardRef.value.openDialog();
|
|
|
};
|
|
|
const cascadeRef = ref<RefType>();
|
|
|
// 获取选择name值
|
|
@@ -226,6 +212,12 @@ const getKnowledgeList = () => {
|
|
|
state.ruleForm.knowledgeTypeName = currentNode[0]?.text ?? '';
|
|
|
};
|
|
|
// 提交审核
|
|
|
+const handleOperation = async (submitObj: any, operation: Function) => {
|
|
|
+ await operation(submitObj).then((res: any) => {
|
|
|
+ const id = res.result || submitObj.id;
|
|
|
+ KnowledgeProcessRef.value.openDialog({ id, title: '创建知识', commonEnum: commonEnum.KnowledgeLocution, processType: 'addStart' });
|
|
|
+ });
|
|
|
+};
|
|
|
const onSubmitReview = async (formEl: FormInstance | undefined) => {
|
|
|
if (!formEl) return;
|
|
|
await formEl.validate((valid) => {
|
|
@@ -235,30 +227,16 @@ const onSubmitReview = async (formEl: FormInstance | undefined) => {
|
|
|
if (route.params.id) {
|
|
|
// 更新
|
|
|
submitObj.id = route.params.id;
|
|
|
- if (route.params.isDraft) {
|
|
|
- // 如果从草稿进来 // 更新
|
|
|
- KnowledgeUpdate(submitObj).then(() => {
|
|
|
- KnowledgeProcessRef.value.openDialog({ id: submitObj.id, title: '创建知识', commonEnum: commonEnum.KnowledgeLocution, processType: 'addStart' });
|
|
|
- });
|
|
|
- } else {
|
|
|
- //如果是直接从知识库编辑 新增
|
|
|
- KnowledgeAdd(submitObj).then((res: any) => {
|
|
|
- KnowledgeProcessRef.value.openDialog({ id: res.result, title: '创建知识', commonEnum: commonEnum.KnowledgeLocution, processType: 'addStart' });
|
|
|
- });
|
|
|
- }
|
|
|
+ const operation = route.params.isDraft ? KnowledgeUpdate : KnowledgeAdd;
|
|
|
+ handleOperation(submitObj, operation);
|
|
|
} else {
|
|
|
if (state.knowledgeId) {
|
|
|
// 更新
|
|
|
submitObj.id = state.knowledgeId;
|
|
|
- KnowledgeUpdate(submitObj).then(() => {
|
|
|
- KnowledgeProcessRef.value.openDialog({ id: submitObj.id, title: '创建知识', commonEnum: commonEnum.KnowledgeLocution, processType: 'addStart' });
|
|
|
- });
|
|
|
+ handleOperation(submitObj, KnowledgeUpdate);
|
|
|
} else {
|
|
|
//知识流程提交
|
|
|
- KnowledgeAdd(submitObj).then((res: any) => {
|
|
|
- state.knowledgeId = res.result;
|
|
|
- KnowledgeProcessRef.value.openDialog({ id: res.result, title: '创建知识', commonEnum: commonEnum.KnowledgeLocution, processType: 'addStart' });
|
|
|
- });
|
|
|
+ handleOperation(submitObj, KnowledgeAdd);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -285,6 +263,16 @@ const onPreview = () => {
|
|
|
});
|
|
|
};
|
|
|
// 保存到草稿箱
|
|
|
+const handleSuccess = () => {
|
|
|
+ ElMessage.success('操作成功');
|
|
|
+ // 关闭当前 tagsView
|
|
|
+ mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
|
|
|
+ mittBus.emit('clearCache', 'knowledge');
|
|
|
+ mittBus.emit('clearCache', 'knowledgeDraft');
|
|
|
+ router.push({
|
|
|
+ path: '/knowledge/draft',
|
|
|
+ });
|
|
|
+};
|
|
|
const onSaveOnly = throttle(async (formEl: FormInstance | undefined) => {
|
|
|
if (!formEl) return;
|
|
|
await formEl.validate((valid) => {
|
|
@@ -296,55 +284,19 @@ const onSaveOnly = throttle(async (formEl: FormInstance | undefined) => {
|
|
|
submitObj.id = route.params.id;
|
|
|
if (route.params.isDraft) {
|
|
|
// 如果从草稿进来 // 更新
|
|
|
- KnowledgeUpdate(submitObj).then(() => {
|
|
|
- ElMessage.success('操作成功');
|
|
|
- // 关闭当前 tagsView
|
|
|
- mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
|
|
|
- mittBus.emit('clearCache', 'knowledge');
|
|
|
- mittBus.emit('clearCache', 'knowledgeDraft');
|
|
|
- router.push({
|
|
|
- path: '/knowledge/draft',
|
|
|
- });
|
|
|
- });
|
|
|
+ KnowledgeUpdate(submitObj).then(handleSuccess);
|
|
|
} else {
|
|
|
//如果是直接从知识库编辑 新增
|
|
|
- KnowledgeAdd(submitObj).then(() => {
|
|
|
- ElMessage.success('操作成功');
|
|
|
- // 关闭当前 tagsView
|
|
|
- mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
|
|
|
- mittBus.emit('clearCache', 'knowledge');
|
|
|
- mittBus.emit('clearCache', 'knowledgeDraft');
|
|
|
- router.push({
|
|
|
- path: '/knowledge/draft',
|
|
|
- });
|
|
|
- });
|
|
|
+ KnowledgeAdd(submitObj).then(handleSuccess);
|
|
|
}
|
|
|
} else {
|
|
|
if (state.knowledgeId) {
|
|
|
// 更新
|
|
|
submitObj.id = state.knowledgeId;
|
|
|
- KnowledgeUpdate(submitObj).then(() => {
|
|
|
- ElMessage.success('操作成功');
|
|
|
- // 关闭当前 tagsView
|
|
|
- mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
|
|
|
- mittBus.emit('clearCache', 'knowledge');
|
|
|
- mittBus.emit('clearCache', 'knowledgeDraft');
|
|
|
- router.push({
|
|
|
- path: '/knowledge/draft',
|
|
|
- });
|
|
|
- });
|
|
|
+ KnowledgeUpdate(submitObj).then(handleSuccess);
|
|
|
} else {
|
|
|
// 新增
|
|
|
- KnowledgeAdd(submitObj).then(() => {
|
|
|
- ElMessage.success('操作成功');
|
|
|
- // 关闭当前 tagsView
|
|
|
- mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
|
|
|
- mittBus.emit('clearCache', 'knowledge');
|
|
|
- mittBus.emit('clearCache', 'knowledgeDraft');
|
|
|
- router.push({
|
|
|
- path: '/knowledge/draft',
|
|
|
- });
|
|
|
- });
|
|
|
+ KnowledgeAdd(submitObj).then(handleSuccess);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -367,19 +319,20 @@ const getKnowledgeType = async () => {
|
|
|
state.loading = false;
|
|
|
}
|
|
|
};
|
|
|
+const saveText = ref('保存为草稿');
|
|
|
onMounted(async () => {
|
|
|
await getKnowledgeType();
|
|
|
- if (route.params.id) {
|
|
|
- const res: any = await KnowledgeDetail(route.params.id); //知识详情
|
|
|
- if (route.params.isDraft) {
|
|
|
- state.saveText = '保存';
|
|
|
- }
|
|
|
- state.ruleForm = res.result ?? {};
|
|
|
- if (res.result.hotspotExternal) {
|
|
|
- //热点分类默认展开
|
|
|
- state.hotspotExternal = state.ruleForm.hotspotExternal.split(',');
|
|
|
- }
|
|
|
- state.ruleForm.knowledges = state.ruleForm.knowledges ?? [];
|
|
|
+ if (route.params.id) {
|
|
|
+ const res: any = await KnowledgeDetail(route.params.id); //知识详情
|
|
|
+ if (route.params.isDraft) {
|
|
|
+ saveText.value = '保存';
|
|
|
}
|
|
|
+ state.ruleForm = res.result ?? {};
|
|
|
+ if (res.result.hotspotExternal) {
|
|
|
+ //热点分类默认展开
|
|
|
+ state.hotspotExternal = state.ruleForm.hotspotExternal.split(',');
|
|
|
+ }
|
|
|
+ state.ruleForm.knowledges = state.ruleForm.knowledges ?? [];
|
|
|
+ }
|
|
|
});
|
|
|
</script>
|