|
@@ -11,287 +11,292 @@
|
|
|
</el-form-item>
|
|
|
</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="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-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>
|
|
|
- <el-form-item label="知识分类">
|
|
|
- <el-skeleton-item variant="h1"/>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- <template #default>
|
|
|
- <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',multiple: true }"
|
|
|
- placeholder="请选择知识分类"
|
|
|
- clearable
|
|
|
- class="w100"
|
|
|
- v-model="state.ruleForm.knowledgeTypeId"
|
|
|
- ref="cascadeRef"
|
|
|
- @change="getKnowledgeList"
|
|
|
- collapse-tags
|
|
|
- collapse-tags-tooltip
|
|
|
- :max-collapse-tags="2"
|
|
|
-
|
|
|
- >
|
|
|
- </el-cascader>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <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="knowledgeTypeId" :rules="[{ required: true, message: '请选择知识分类', trigger: 'change' }]">
|
|
|
+ <el-cascader
|
|
|
+ :options="state.typeData"
|
|
|
+ filterable
|
|
|
+ :props="{ checkStrictly: true, value: 'id', label: 'name', emitPath: false, children: 'children', multiple: true }"
|
|
|
+ placeholder="请选择知识分类"
|
|
|
+ clearable
|
|
|
+ class="w100"
|
|
|
+ v-model="state.ruleForm.knowledgeTypeId"
|
|
|
+ ref="cascadeRef"
|
|
|
+ @change="getKnowledgeList"
|
|
|
+ collapse-tags
|
|
|
+ collapse-tags-tooltip
|
|
|
+ :max-collapse-tags="2"
|
|
|
+ >
|
|
|
+ </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>
|
|
|
- <template #label>
|
|
|
- <div style="height: 34px; display: flex; align-items: center">
|
|
|
- 失效时间
|
|
|
- <el-tooltip placement="top-start">
|
|
|
- <SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
|
|
|
- <template #content> 不设置则代表永久有效;到达预设失效时间,知识将自动下架 </template>
|
|
|
- </el-tooltip>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <el-skeleton-item variant="h1"/>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- <template #default>
|
|
|
- <el-form-item label="失效时间" prop="expiredTime" :rules="[{ required: false, message: '请选择失效时间', trigger: 'change' }]">
|
|
|
- <template #label>
|
|
|
- <div style="height: 34px; display: flex; align-items: center">
|
|
|
- 失效时间
|
|
|
- <el-tooltip placement="top-start">
|
|
|
- <SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
|
|
|
- <template #content> 不设置则代表永久有效;到达预设失效时间,知识将自动下架 </template>
|
|
|
- </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"
|
|
|
- :disabled-date="disabledDate"
|
|
|
- popper-class="no-atTheMoment"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <el-skeleton :loading="state.loading" animated>
|
|
|
+ <template #template>
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>
|
|
|
+ <div style="height: 34px; display: flex; align-items: center">
|
|
|
+ 失效时间
|
|
|
+ <el-tooltip placement="top-start">
|
|
|
+ <SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
|
|
|
+ <template #content> 不设置则代表永久有效;到达预设失效时间,知识将自动下架 </template>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <el-skeleton-item variant="h1" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template #default>
|
|
|
+ <el-form-item label="失效时间" prop="expiredTime" :rules="[{ required: false, message: '请选择失效时间', trigger: 'change' }]">
|
|
|
+ <template #label>
|
|
|
+ <div style="height: 34px; display: flex; align-items: center">
|
|
|
+ 失效时间
|
|
|
+ <el-tooltip placement="top-start">
|
|
|
+ <SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
|
|
|
+ <template #content> 不设置则代表永久有效;到达预设失效时间,知识将自动下架 </template>
|
|
|
+ </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"
|
|
|
+ :disabled-date="disabledDate"
|
|
|
+ popper-class="no-atTheMoment"
|
|
|
+ />
|
|
|
+ </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="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>
|
|
|
- </el-radio-group>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <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="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>
|
|
|
+ </el-radio-group>
|
|
|
+ </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-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: true, message: '请选择热点分类', trigger: 'change' }]">
|
|
|
- <hot-spot-select
|
|
|
- v-model="state.ruleForm.hotspotId"
|
|
|
- class="w100"
|
|
|
- :externalArr="state.hotspotExternal"
|
|
|
- @choose="chooseHotSpot"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <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: true, message: '请选择热点分类', trigger: 'change' }]">
|
|
|
+ <hot-spot-select v-model="state.ruleForm.hotspotId" class="w100" :externalArr="state.hotspotExternal" @choose="chooseHotSpot" />
|
|
|
+ </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="title" :rules="[{ required: true, validator: validatePass, trigger: 'blur' }]">
|
|
|
- <el-input v-model="state.ruleForm.title" placeholder="请输入知识标题" clearable @blur="isRepeat"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <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="title" :rules="[{ required: true, validator: validatePassTitle, trigger: 'blur' }]">
|
|
|
+ <el-input v-model="state.ruleForm.title" placeholder="请输入知识标题" clearable @blur="isRepeat('title')"></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="summary" :rules="[{ required: false, message: '请输入知识摘要', trigger: 'blur' }]">
|
|
|
- <el-input v-model="state.ruleForm.summary" placeholder="请输入知识摘要" clearable></el-input>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <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="summary" :rules="[{ required: false, validator: validatePassSummary, trigger: 'blur' }]">
|
|
|
+ <el-input v-model="state.ruleForm.summary" placeholder="请输入知识摘要" clearable @blur="isRepeat('summary')"></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="知识摘要">
|
|
|
- <template #label>
|
|
|
- <div style="height: 34px; display: flex; align-items: center">
|
|
|
- 关联知识
|
|
|
- <el-tooltip placement="top-start">
|
|
|
- <SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
|
|
|
- <template #content> 关联其它相似或业务相关的知识,方便话务员可以查询其他相似的知识 </template>
|
|
|
- </el-tooltip>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <el-skeleton-item variant="h1"/>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- <template #default>
|
|
|
- <el-form-item label="关联知识" prop="knowledges" :rules="[{ required: false, message: '请选择关联知识', trigger: 'change' }]">
|
|
|
- <template #label>
|
|
|
- <div style="height: 34px; display: flex; align-items: center">
|
|
|
- 关联知识
|
|
|
- <el-tooltip placement="top-start">
|
|
|
- <SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
|
|
|
- <template #content> 关联其它相似或业务相关的知识,方便话务员可以查询其他相似的知识 </template>
|
|
|
- </el-tooltip>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <el-select-v2
|
|
|
- v-model="state.ruleForm.knowledges"
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- :options="state.knowledgeOptions"
|
|
|
- placeholder="请选择关联知识"
|
|
|
- class="w100"
|
|
|
- multiple
|
|
|
- collapse-tags
|
|
|
- collapse-tags-tooltip
|
|
|
- :max-collapse-tags="5"
|
|
|
- :props="{
|
|
|
- label: 'title',
|
|
|
- value: 'id',
|
|
|
- }"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <el-skeleton :loading="state.loading" animated>
|
|
|
+ <template #template>
|
|
|
+ <el-form-item label="知识摘要">
|
|
|
+ <template #label>
|
|
|
+ <div style="height: 34px; display: flex; align-items: center">
|
|
|
+ 关联知识
|
|
|
+ <el-tooltip placement="top-start">
|
|
|
+ <SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
|
|
|
+ <template #content> 关联其它相似或业务相关的知识,方便话务员可以查询其他相似的知识 </template>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <el-skeleton-item variant="h1" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template #default>
|
|
|
+ <el-form-item label="关联知识" prop="knowledges" :rules="[{ required: false, message: '请选择关联知识', trigger: 'change' }]">
|
|
|
+ <template #label>
|
|
|
+ <div style="height: 34px; display: flex; align-items: center">
|
|
|
+ 关联知识
|
|
|
+ <el-tooltip placement="top-start">
|
|
|
+ <SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
|
|
|
+ <template #content> 关联其它相似或业务相关的知识,方便话务员可以查询其他相似的知识 </template>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <el-select-v2
|
|
|
+ v-model="state.ruleForm.knowledges"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ :options="state.knowledgeOptions"
|
|
|
+ placeholder="请选择关联知识"
|
|
|
+ class="w100"
|
|
|
+ multiple
|
|
|
+ collapse-tags
|
|
|
+ collapse-tags-tooltip
|
|
|
+ :max-collapse-tags="5"
|
|
|
+ :props="{
|
|
|
+ label: 'title',
|
|
|
+ value: 'id',
|
|
|
+ }"
|
|
|
+ />
|
|
|
+ </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="keywordsName" :rules="[{ required: false, message: '请添加关键词', trigger: 'change' }]">
|
|
|
- <el-input v-model="state.ruleForm.keywordsName" readonly placeholder="请添加关键词" max-length="200" clearable>
|
|
|
- <template #append>
|
|
|
- <el-button @click="addKeywords">添加</el-button>
|
|
|
- </template>
|
|
|
- </el-input>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <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>
|
|
|
+ <template #append>
|
|
|
+ <el-button @click="addKeywords">添加</el-button>
|
|
|
+ </template>
|
|
|
+ </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-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>
|
|
|
- <el-form-item label="知识内容">
|
|
|
- <el-skeleton-item variant="h1"/>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- <template #default>
|
|
|
- <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>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <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="content" :rules="[{ required: true, validator: validatePassContent, trigger: 'blur' }]">
|
|
|
+ <editor
|
|
|
+ v-model:get-html="state.ruleForm.content"
|
|
|
+ :disable="state.disable"
|
|
|
+ placeholder="请输入知识内容"
|
|
|
+ @blur="isRepeat('content')"
|
|
|
+ />
|
|
|
+ </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="files" :rules="[{ required: false, message: '请选择附件', trigger: 'change' }]">
|
|
|
- <annex-list name="知识附件" v-model="state.ruleForm.files" v-model:format="filesFormat" :businessId="state.ruleForm.id" classify="知识附件" />
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- </el-skeleton>
|
|
|
+ <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="files" :rules="[{ required: false, message: '请选择附件', trigger: 'change' }]">
|
|
|
+ <annex-list
|
|
|
+ name="知识附件"
|
|
|
+ v-model="state.ruleForm.files"
|
|
|
+ v-model:format="filesFormat"
|
|
|
+ :businessId="state.ruleForm.id"
|
|
|
+ classify="知识附件"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-skeleton>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
<el-form-item>
|
|
@@ -323,10 +328,9 @@ import { storeToRefs } from 'pinia';
|
|
|
import { useUserInfo } from '@/stores/userInfo';
|
|
|
import { Local } from '@/utils/storage';
|
|
|
import other from '@/utils/other';
|
|
|
-import {throttle, transformFile} from '@/utils/tools';
|
|
|
+import { throttle, transformFile } from '@/utils/tools';
|
|
|
import { treeList } from '@/api/knowledge/type';
|
|
|
-import { KnowledgeAdd, KnowledgeGetKnowledge, KnowledgeInfo, knowledgeTitle, KnowledgeUpdate } from '@/api/knowledge';
|
|
|
-import { hotSpotType } from '@/api/business/order';
|
|
|
+import { KnowledgeAdd, knowledgeContent, KnowledgeGetKnowledge, KnowledgeInfo, KnowledgeUpdate } from '@/api/knowledge';
|
|
|
import { getCanUseOrg } from '@/api/system/user';
|
|
|
import { templateList } from '@/views/knowledge/index/template';
|
|
|
import { disabledDate } from '@/utils/constants';
|
|
@@ -350,7 +354,7 @@ const state = reactive<any>({
|
|
|
knowledgeTypeId: [], // 知识分类
|
|
|
hotspotId: '', // 热点分类
|
|
|
knowledges: [], // 关联知识
|
|
|
- files: [], // 附件
|
|
|
+ files: [], // 附件
|
|
|
template: '', // 知识库模板
|
|
|
content: '', // 知识内容
|
|
|
sourceOrganizeId: '', // 知识来源部门
|
|
@@ -364,12 +368,12 @@ const state = reactive<any>({
|
|
|
const ruleFormRef = ref<any>(); // 表单ref
|
|
|
// 选择热点分类
|
|
|
const chooseHotSpot = (val: any, e: any) => {
|
|
|
- state.ruleForm.hotspotSpliceName = val.hotSpotFullName; // 热点分类拼接名称
|
|
|
- state.ruleForm.hotspotName = val.hotSpotName; // 热点分类名称
|
|
|
- state.ruleForm.hotspotCode = val.provinceCode; // 热点分类code
|
|
|
- state.ruleForm.hotspotExternal = val?.externalArr?.join(',') ?? ''; // 热点分类默认展开项
|
|
|
+ state.ruleForm.hotspotSpliceName = val.hotSpotFullName; // 热点分类拼接名称
|
|
|
+ state.ruleForm.hotspotName = val.hotSpotName; // 热点分类名称
|
|
|
+ state.ruleForm.hotspotCode = val.provinceCode; // 热点分类code
|
|
|
+ state.ruleForm.hotspotExternal = val?.externalArr?.join(',') ?? ''; // 热点分类默认展开项
|
|
|
};
|
|
|
-const validatePass = (rule: any, value: any, callback: any) => {
|
|
|
+const validatePassTitle = (rule: any, value: any, callback: any) => {
|
|
|
if (value === '' || value === null) {
|
|
|
callback(new Error('请输入知识标题'));
|
|
|
} else if (Repeat.value) {
|
|
@@ -378,18 +382,33 @@ const validatePass = (rule: any, value: any, callback: any) => {
|
|
|
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('请输入知识内容'));
|
|
|
+ } else if (Repeat.value) {
|
|
|
+ callback(new Error('有相似内容,请检查!'));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+};
|
|
|
// 校验标题是否重复
|
|
|
const Repeat = ref<boolean>(false);
|
|
|
-const isRepeat = () => {
|
|
|
- if (state.ruleForm.title) {
|
|
|
- const id = state.ruleForm.id ? state.ruleForm.id : '';
|
|
|
- knowledgeTitle({ Id: id, Title: state.ruleForm.title })
|
|
|
+const isRepeat = (type: string) => {
|
|
|
+ if (state.ruleForm[type]) {
|
|
|
+ knowledgeContent({ [type]: state.ruleForm[type] })
|
|
|
.then((res: any) => {
|
|
|
Repeat.value = res.result;
|
|
|
- ruleFormRef.value.validateField('title');
|
|
|
+ ruleFormRef.value.validateField(type);
|
|
|
})
|
|
|
.catch(() => {
|
|
|
- state.ruleForm.title = '';
|
|
|
+ state.ruleForm[type] = '';
|
|
|
});
|
|
|
}
|
|
|
};
|
|
@@ -402,9 +421,9 @@ const cascadeRef = ref<RefType>();
|
|
|
// 获取选择name值
|
|
|
const getKnowledgeList = () => {
|
|
|
let currentNode = cascadeRef.value.getCheckedNodes();
|
|
|
- state.ruleForm.knowledgeType = currentNode.map((item: any) => {
|
|
|
- return {value:item.label,key: item.value,splice: item.data.spliceName}
|
|
|
- })
|
|
|
+ state.ruleForm.knowledgeType = currentNode.map((item: any) => {
|
|
|
+ return { value: item.label, key: item.value, splice: item.data.spliceName };
|
|
|
+ });
|
|
|
};
|
|
|
// 添加关键词
|
|
|
const knowledgeKeywordsRef = ref<RefType>();
|
|
@@ -430,8 +449,7 @@ const onSubmitReview = async (formEl: FormInstance | undefined) => {
|
|
|
await formEl.validate((valid: boolean) => {
|
|
|
if (!valid) return;
|
|
|
state.loading = true;
|
|
|
- isRepeat();
|
|
|
- state.ruleForm.files = filesFormat.value;
|
|
|
+ state.ruleForm.files = filesFormat.value;
|
|
|
const submitObj = other.deepClone(state.ruleForm);
|
|
|
Reflect.deleteProperty(submitObj, 'creationTime');
|
|
|
//如果已经有ID 说明是已经提交过的数据 提交更新流程
|
|
@@ -513,12 +531,12 @@ const onSaveOnly = throttle(async (formEl: FormInstance | undefined) => {
|
|
|
await formEl.validate((valid: boolean) => {
|
|
|
if (!valid) return;
|
|
|
state.loading = true;
|
|
|
- state.ruleForm.files = filesFormat.value;
|
|
|
+ state.ruleForm.files = filesFormat.value;
|
|
|
const submitObj = other.deepClone(state.ruleForm);
|
|
|
Reflect.deleteProperty(submitObj, 'creationTime');
|
|
|
if (route.params.id) {
|
|
|
// 更新
|
|
|
- KnowledgeUpdate({ data: {...submitObj,status:0} })
|
|
|
+ KnowledgeUpdate({ data: { ...submitObj, status: 0 } })
|
|
|
.then(handleSuccess)
|
|
|
.catch(() => {
|
|
|
state.loading = false;
|
|
@@ -566,7 +584,7 @@ const getKnowledgeType = async () => {
|
|
|
state.typeData = typeDataRes.result ?? [];
|
|
|
state.knowledgeOptions = knowledgeOptionsRes.result ?? [];
|
|
|
orgsOptions.value = orgsOptionsRes.result ?? [];
|
|
|
- await getDetail();
|
|
|
+ await getDetail();
|
|
|
state.loading = false;
|
|
|
} catch (error) {
|
|
|
state.loading = false;
|
|
@@ -576,16 +594,16 @@ const getDetail = async () => {
|
|
|
if (route.params.id) {
|
|
|
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.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.key);
|
|
|
+ state.ruleForm.knowledgeTypeId = state.ruleForm.knowledgeType.map((item: any) => item.key);
|
|
|
}
|
|
|
};
|
|
|
onMounted(() => {
|