|
|
@@ -0,0 +1,129 @@
|
|
|
+<template>
|
|
|
+ <el-dialog
|
|
|
+ :title="isEdit ? '编辑知识' : '新增知识'"
|
|
|
+ :visible="visible"
|
|
|
+ width="700px"
|
|
|
+ @close="handleClose"
|
|
|
+ >
|
|
|
+ <el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
|
+ <el-form-item label="标题" prop="title">
|
|
|
+ <el-input v-model="form.title" placeholder="知识标题" maxlength="200" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="内容" prop="content">
|
|
|
+ <el-input
|
|
|
+ v-model="form.content"
|
|
|
+ type="textarea"
|
|
|
+ :rows="6"
|
|
|
+ placeholder="知识内容"
|
|
|
+ maxlength="5000"
|
|
|
+ show-word-limit
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="维度">
|
|
|
+ <dimension-selector v-model="form.dimensionIds" :multiple="true" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="标签">
|
|
|
+ <tag-selector v-model="form.tagIds" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="排序">
|
|
|
+ <el-input-number v-model="form.sort" :min="0" :max="9999" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="状态">
|
|
|
+ <el-radio-group v-model="form.status">
|
|
|
+ <el-radio :label="1">启用</el-radio>
|
|
|
+ <el-radio :label="0">禁用</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="备注">
|
|
|
+ <el-input v-model="form.remark" type="textarea" :rows="2" maxlength="500" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <span slot="footer">
|
|
|
+ <el-button @click="handleClose">取消</el-button>
|
|
|
+ <el-button type="primary" :loading="submitting" @click="handleSubmit">保存</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import DimensionSelector from '@/components/DimensionSelector'
|
|
|
+import TagSelector from '@/components/TagSelector'
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'KnowledgeDialog',
|
|
|
+ components: { DimensionSelector, TagSelector },
|
|
|
+ props: {
|
|
|
+ visible: { type: Boolean, default: false },
|
|
|
+ knowledge: { type: Object, default: () => null }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ submitting: false,
|
|
|
+ form: this.initForm(),
|
|
|
+ rules: {
|
|
|
+ title: [{ required: true, message: '请输入知识标题', trigger: 'blur' }],
|
|
|
+ content: [{ required: true, message: '请输入知识内容', trigger: 'blur' }]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ isEdit() {
|
|
|
+ return !!this.knowledge
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ knowledge(val) {
|
|
|
+ if (val) {
|
|
|
+ this.form = {
|
|
|
+ id: val.id,
|
|
|
+ title: val.title,
|
|
|
+ content: val.content,
|
|
|
+ dimensionIds: val.dimensionIds || [],
|
|
|
+ tagIds: val.tagIds || [],
|
|
|
+ sort: val.sort || 0,
|
|
|
+ status: val.status !== undefined ? val.status : 1,
|
|
|
+ remark: val.remark || ''
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.form = this.initForm()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ initForm() {
|
|
|
+ return {
|
|
|
+ id: null,
|
|
|
+ title: '',
|
|
|
+ content: '',
|
|
|
+ dimensionIds: [],
|
|
|
+ tagIds: [],
|
|
|
+ sort: 0,
|
|
|
+ status: 1,
|
|
|
+ remark: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleClose() {
|
|
|
+ this.$refs.form.resetFields()
|
|
|
+ this.$emit('update:visible', false)
|
|
|
+ },
|
|
|
+ async handleSubmit() {
|
|
|
+ try {
|
|
|
+ await this.$refs.form.validate()
|
|
|
+ } catch {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.submitting = true
|
|
|
+ try {
|
|
|
+ await this.$store.dispatch('dimension/saveKnowledge', this.form)
|
|
|
+ this.$message.success('保存成功')
|
|
|
+ this.handleClose()
|
|
|
+ this.$emit('saved')
|
|
|
+ } catch (e) {
|
|
|
+ this.$message.error('保存失败: ' + (e.message || '未知错误'))
|
|
|
+ } finally {
|
|
|
+ this.submitting = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|