diff --git a/src/mixins/table.js b/src/mixins/table.js index 8498a716..3de60111 100644 --- a/src/mixins/table.js +++ b/src/mixins/table.js @@ -55,23 +55,7 @@ export default { }) }, tableDataSort (item) { - /*let orderBy = '' - if (item.order === 'ascending') { - if (item.prop === 'lastTime') { - orderBy = chartTableOrderOptionsMapping[item.prop] - } else { - orderBy = item.prop - } - orderBy = chartTableOrderOptionsMapping[item.prop] || item.prop - } - if (item.order === 'descending') { - if (item.prop === 'lastTime') { - orderBy = '-' + chartTableOrderOptionsMapping[item.prop] - } else { - orderBy = '-' + item.prop - } - }*/ - const orderBy = (item.order === 'descending' ? '-' : '') + (chartTableOrderOptionsMapping[item.prop] || item.prop) + const orderBy = (item.order === 'descending' ? '-' : '') + (item.prop ? (chartTableOrderOptionsMapping[item.prop] || item.prop) : '') this.$emit('orderBy', orderBy) } } diff --git a/src/views/setting/KnowledgeBase.vue b/src/views/setting/KnowledgeBase.vue index 1b4f986a..144364c3 100644 --- a/src/views/setting/KnowledgeBase.vue +++ b/src/views/setting/KnowledgeBase.vue @@ -42,7 +42,7 @@ import cnDataList from '@/components/table/CnDataList' import dataListMixin from '@/mixins/data-list' import KnowledgeBaseTable from '@/components/table/setting/KnowledgeBaseTable' import { api } from '@/utils/api' -import { del, get } from '@/utils/http' +import axios from 'axios' export default { name: 'knowledgeBase', @@ -59,10 +59,9 @@ export default { }, methods: { edit (u) { - get(`${this.url}`, { ids: u.id }).then(response => { - if (response.code === 200) { - this.object = response.data.list[0] - this.rightBox.show = true + axios.get(`${this.url}`, { params: { ids: u.id } }).then(response => { + if (response.data.code === 200) { + this.object = response.data.data.list[0] } }) }, @@ -73,13 +72,13 @@ export default { type: 'warning' }).then(() => { this.tools.loading = true - del(this.url + '?ids=' + row.id).then(response => { - if (response.code === 200) { + axios.delete(this.url + '?ids=' + row.id).then(response => { + if (response.data.code === 200) { this.delFlag = true this.$message({ duration: 2000, type: 'success', message: this.$t('tip.deleteSuccess') }) this.getTableData() } else { - this.$message.error(response.msg) + this.$message.error(response.data.message) } }).finally(() => { this.tools.loading = false diff --git a/src/views/setting/KnowledgeBaseForm.vue b/src/views/setting/KnowledgeBaseForm.vue index 5b4f251b..668b0aca 100644 --- a/src/views/setting/KnowledgeBaseForm.vue +++ b/src/views/setting/KnowledgeBaseForm.vue @@ -27,7 +27,7 @@ - + @@ -44,9 +44,10 @@ :on-remove="onRemove" :before-upload="beforeUpload" :on-progress="onUpload" + :on-error="uploadError" :class="uploadErrorTip ? 'el-upload--error' : ''" drag - accept=".csv" + :accept="fileTypeLimit" ref="upload" > @@ -126,7 +127,6 @@ import { useRoute } from 'vue-router' import { ref } from 'vue' import _ from 'lodash' import { knowledgeBaseType, storageKey, unitTypes } from '@/utils/constants' -import i18n from '@/i18n' import Pagination from '@/components/common/Pagination' import ChartNoData from '@/views/charts/charts/ChartNoData' import axios from 'axios' @@ -140,11 +140,65 @@ export default { ChartNoData, Loading }, + data () { + const nameValidator = (rule, value, callback) => { + let validate = true + // /^[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFA-Za-z0-9\-\_]*$/ + const reg = /^[\u4e00-\u9fa5A-Za-z0-9\-\_]*$/ + validate = reg.test(value) + return validate + } + const nameAndTypeValidator = async (rule, value, callback) => { + this.$refs.form.clearValidate('tagType') + let validate = true + const response = await this.getKnowledgeBaseList() + if (response.data.code === 200) { + const find = response.data.data.list.find(d => d.tagName === value && d.tagType === this.editObject.tagType) + if (find) { + validate = false + callback(new Error()) + } + } + return validate + } + const typeAndNameValidator = async (rule, value, callback) => { + this.$refs.form.clearValidate('tagName') + let validate = true + const response = await this.getKnowledgeBaseList() + if (response.data.code === 200) { + const find = response.data.data.list.find(d => d.tagName === this.editObject.tagName && d.tagType === value) + if (find) { + validate = false + callback(new Error()) + } + } + return validate + } + return { + rules: { + tagName: [ + { required: true, message: this.$t('validate.required'), trigger: 'blur' }, + { validator: nameValidator, message: this.$t('validate.onlyAllowNumberLetterChinese-_'), trigger: 'blur' }, + { validator: nameAndTypeValidator, message: this.$t('validate.duplicateRecord', { columns: '(' + this.$t('config.roles.name') + '+' + this.$t('overall.type') + ')' }), trigger: 'blur' } + ], + tagType: [ + { required: true, message: this.$t('validate.required'), trigger: 'change' }, + { validator: typeAndNameValidator, message: this.$t('validate.duplicateRecord', { columns: '(' + this.$t('config.roles.name') + '+' + this.$t('overall.type') + ')' }), trigger: 'change' } + ], + remark: [ + { validator: nameValidator, message: this.$t('validate.onlyAllowNumberLetterChinese-_'), trigger: 'blur' } + ] + } + } + }, methods: { fileChange (files, fileList) { - console.info(111) this.fileList = fileList.slice(-1) }, + uploadError () { + this.uploadLoading = false + this.$message.error(this.$t('tip.uploadFailed', { msg: 'error' })) + }, uploadSuccess (response) { this.uploaded = response.code === 200 if (response.code === 200) { @@ -169,7 +223,6 @@ export default { } }, onRemove (files, fileList) { - console.info(222) this.uploaded = false this.typeSelectDisable = false this.importedData = [] @@ -181,6 +234,12 @@ export default { } }, beforeUpload (file) { + // 判断后缀,仅支持.csv + if (!_.endsWith(file.name, '.csv')) { + this.$message.error(this.$t('validate.fileTypeLimit', { types: this.fileTypeLimit })) + this.fileList = [] + return false + } // 判断文件大小 if (file.size > this.uploadFileSizeLimit) { this.$message.error(this.$t('validate.fileSizeLimit', { size: unitConvert(this.uploadFileSizeLimit, unitTypes.byte).join('') })) @@ -211,7 +270,6 @@ export default { this.importedPageObj.pageNo++ }, removeImportedData (index) { - /* const toRemoveIndex = this.importedData.findIndex(d => d.tagName === data.tagName && d.tagItem === data.tagItem) */ const toRemoveIndex = (this.importedPageObj.pageNo - 1) * this.importedPageObj.pageSize + index this.importedData.splice(toRemoveIndex, 1) this.handleShowImportedData() @@ -219,6 +277,7 @@ export default { if (this.showImportedData.length === 0) { if (this.importedData.length > 0) { this.importedPageObj.pageNo-- + this.importedPageObj.total = this.importedData.length this.handleShowImportedData() } else { this.importedDataNoData = true @@ -298,6 +357,9 @@ export default { }, hasErrorImportedData () { return this.importedData.filter(d => d.status !== 1).length > 0 + }, + async getKnowledgeBaseList () { + return await axios.get(this.url, { params: { pageSize: 999 } }) } }, computed: { @@ -346,6 +408,7 @@ export default { setup () { const { query } = useRoute() const knowledgeBaseId = ref(query.id || '') + const url = api.knowledgeBase // 空白对象 const blankObject = { tagName: '', @@ -367,26 +430,6 @@ export default { second: 284 } const stepHeights = ref([stepHeightConstant.first, stepHeightConstant.second, stepHeightConstant.collapse]) - // 表单校验规则 - const nameValidator = (rule, value, callback) => { - let validate = true - // /^[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFA-Za-z0-9\-\_]*$/ - const reg = /^[\u4e00-\u9fa5A-Za-z0-9\-\_]*$/ - validate = reg.test(value) - return validate - } - const rules = { - tagName: [ - { required: true, message: i18n.global.t('validate.required'), trigger: 'blur' }, - { validator: nameValidator, message: i18n.global.t('validate.onlyAllowNumberLetterChinese-_'), trigger: 'blur' } - ], - tagType: [ - { required: true, message: i18n.global.t('validate.required'), trigger: 'change' } - ], - remark: [ - { validator: nameValidator, message: i18n.global.t('validate.onlyAllowNumberLetterChinese-_'), trigger: 'blur' } - ] - } // 所有导入的数据 const importedData = ref([]) // 导入数据的原始数量信息 @@ -416,7 +459,6 @@ export default { stepHeightConstant, stepHeights, knowledgeBaseType, - rules, importedData, showImportedData, importedPageObj, @@ -428,13 +470,14 @@ export default { }, uploaded: ref(false), importedDataNoData: ref(false), - url: api.knowledgeBase, + url, originalImportInfo, uploadErrorTip, previewErrorTip, typeSelectDisable: ref(false), uploadFileSizeLimit: 100 * 1024 * 1024, - uploadLoading: ref(false) + uploadLoading: ref(false), + fileTypeLimit: '.csv' } } }