diff --git a/package.json b/package.json index 00dee17..6685203 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "vue": "^2.6.11", "vue-cron": "^1.0.9", "vue-i18n": "^8.18.2", + "vue-quill-editor": "^3.0.6", "vue-router": "3.0.7", "vuex": "^3.5.1" }, diff --git a/src/components/DialogJustForm.vue b/src/components/DialogJustForm.vue index 520299a..9590e6f 100644 --- a/src/components/DialogJustForm.vue +++ b/src/components/DialogJustForm.vue @@ -56,6 +56,15 @@ v-bind="col.elparams" /> + +
{ @@ -110,7 +125,7 @@ function reConstructTreeData(listObj) { export default { name: "DialogJustForm", - components: { uploadBtn }, + components: { uploadBtn, quillEditor }, props: { configs: { type: Object, @@ -127,10 +142,17 @@ export default { inject: ["urls"], data() { const dataForm = {}; + const uploadComponentsList = []; // 保存当前窗口里的上传组件的配置信息的引用 + this.configs.form.rows.forEach((row) => { row.forEach((col) => { - if (col.upload) dataForm[col.prop] = col.default ?? []; - else dataForm[col.prop] = col.default ?? null; + // if (col.upload) dataForm[col.prop] = col.default ?? []; + // else dataForm[col.prop] = col.default ?? null; + dataForm[col.prop] = col.default ?? null; + + if (col.upload) { + uploadComponentsList.push(col); + } if (col.fetchData) col.fetchData().then(({ data: res }) => { @@ -173,8 +195,31 @@ export default { loadingStatus: false, dataForm, detailMode: false, - + uploadComponentsList, baseDialogConfig: null, + defaultQuillConfig: { + modules: { + toolbar: [ + [{ font: [] }], + [{ size: ["small", false, "large", "huge"] }], // custom dropdown + ["bold", "italic", "underline", "strike"], // toggled buttons + [{ color: [] }, { background: [] }], // dropdown with defaults from theme + ["blockquote", "code-block"], + [{ header: 1 }, { header: 2 }], // custom button values + [{ list: "ordered" }, { list: "bullet" }], + // [{ 'script': 'sub'}, { 'script': 'super' }], // superscript/subscript + [{ indent: "-1" }, { indent: "+1" }], // outdent/indent + // [{ 'direction': 'rtl' }], // text direction + // [{ 'header': [1, 2, 3, 4, 5, 6, false] }], + // [{ 'align': [] }], + // ['clean'] // remove formatting button + ], + }, + theme: "snow", + readOnly: false, + placeholder: "在这里输入描述信息...", + scrollingContainer: null, + }, }; }, created() { @@ -241,6 +286,8 @@ export default { if (this.dataForm.id) { // 如果是编辑 this.loadingStatus = true; + + // 获取基本信息 this.$http.get(this.urls.base + `/${this.dataForm.id}`).then(({ data: res }) => { if (res && res.code === 0) { const dataFormKeys = Object.keys(this.dataForm); @@ -252,6 +299,21 @@ export default { } this.loadingStatus = false; }); + + // 获取文件信息 + this.uploadComponentsList.forEach((col) => { + this.$http + .get(col.fetchUrl, { + params: { + limit: 999, + page: 1, + [col.paramName]: this.dataForm.id, + }, + }) + .then(({ data: res }) => { + console.log("fetch filelist:", res); + }); + }); } else { // 如果不是编辑 } diff --git a/src/components/DialogWithMenu.vue b/src/components/DialogWithMenu.vue index 898b593..0a63c84 100644 --- a/src/components/DialogWithMenu.vue +++ b/src/components/DialogWithMenu.vue @@ -89,6 +89,25 @@ :disabled="disableCondition(col.prop)" v-bind="col.elparams" /> + + +
+ + +
@@ -131,6 +150,12 @@ import { pick as __pick } from "@/utils/filters"; import SmallDialog from "@/components/SmallDialog.vue"; import BaseListTable from "@/components/BaseListTable.vue"; +import "quill/dist/quill.core.css"; +import "quill/dist/quill.snow.css"; +import "quill/dist/quill.bubble.css"; + +import { quillEditor } from "vue-quill-editor"; + function reConstructTreeData(listObj) { const entry = []; Object.keys(listObj).map((key) => { @@ -152,7 +177,7 @@ function reConstructTreeData(listObj) { export default { name: "DialogWithMenu", - components: { SmallDialog, BaseListTable }, + components: { SmallDialog, BaseListTable, quillEditor }, props: { configs: { type: Object, @@ -241,6 +266,29 @@ export default { subList: [], showSubDialog: false, disableXXX: false, + defaultQuillConfig: { + modules: { + toolbar: [ + [{ font: [] }], + [{ size: ["small", false, "large", "huge"] }], // custom dropdown + ["bold", "italic", "underline", "strike"], // toggled buttons + [{ color: [] }, { background: [] }], // dropdown with defaults from theme + ["blockquote", "code-block"], + [{ header: 1 }, { header: 2 }], // custom button values + [{ list: "ordered" }, { list: "bullet" }], + // [{ 'script': 'sub'}, { 'script': 'super' }], // superscript/subscript + [{ indent: "-1" }, { indent: "+1" }], // outdent/indent + // [{ 'direction': 'rtl' }], // text direction + // [{ 'header': [1, 2, 3, 4, 5, 6, false] }], + // [{ 'align': [] }], + // ['clean'] // remove formatting button + ], + }, + theme: "snow", + readOnly: false, + placeholder: "在这里输入描述信息...", + scrollingContainer: null, + }, }; }, computed: { @@ -371,6 +419,10 @@ export default { // 出发 upload 界面 }, + handleComponentModelUpdate(propName, { subject, payload: { data } }) { + this.dataForm[propName] = JSON.stringify(data); + console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]); + }, handleSelectChange(col, eventValue) { console.log("[dialog] select change: ", col, eventValue); }, diff --git a/src/components/noTemplateComponents/richInput.js b/src/components/noTemplateComponents/richInput.js index ec5cfe9..2a18f5d 100644 --- a/src/components/noTemplateComponents/richInput.js +++ b/src/components/noTemplateComponents/richInput.js @@ -10,7 +10,8 @@ export default { ReadOnlyMode: false, Placeholder: '在这里输入描述信息...', ScrollingContainer: null, - editor: null + editor: null, + content: '' } }, watch: { @@ -34,11 +35,15 @@ export default { // 只在 mode 不为 create 的时候,才加载数据 if (val && this.mode !== 'create') { // this.mode 会比 modelValue 先获得值 - this.editor && this.editor.setContents(JSON.parse(val), "user") + this.content = JSON.parse(val) + this.editor && this.editor.setContents(this.content, "user") } else if (val === null || val === undefined) { // 当 modelValue 传入空时,清空内容 this.editor && this.editor.setContents('\n', "user") } + }, + content(val) { + this.$emit('update:modelValue', { subject: 'richInput', payload: { data: val } }) } }, mounted() { @@ -71,7 +76,8 @@ export default { }) this.editor.on('text-change', (delta, oldDelta, source) => { - this.$emit('update:modelValue', { subject: 'richInput', payload: { data: this.editor.getContents() } }) + this.content = this.editor.getContents() + // this.$emit('update:modelValue', { subject: 'richInput', payload: { data: this.editor.getContents() } }) }) }, methods: { diff --git a/src/views/modules/pms/car/config.js b/src/views/modules/pms/car/config.js index 362221a..dee04bf 100644 --- a/src/views/modules/pms/car/config.js +++ b/src/views/modules/pms/car/config.js @@ -9,7 +9,7 @@ export default function () { { prop: "name", label: "窑车号" }, { prop: "code", label: "编码" }, // { prop: "typeDictValue", label: "过渡车", filter: val => ['否', '是'][val] }, - { prop: "status", label: "状态", subcomponent: switchBtn }, // subcomponent + { prop: "enabled", label: "状态", subcomponent: switchBtn }, // subcomponent // { prop: "currentQty", label: "载量" }, // { prop: "currentPos", label: "当前位置" }, // { prop: "description", label: "描述" }, @@ -78,7 +78,10 @@ export default function () { elparams: { placeholder: "请输入料仓编码" }, }, ], - [{ component: QuillRichInput, label: "描述信息", prop: "description" }], + // [{ component: QuillRichInput, label: "描述信息", prop: "description" }], + [{ + richInput: true, label: "描述信息", prop: "description" + }], [{ input: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }], ], operations: [ diff --git a/src/views/modules/pms/equipment/config.js b/src/views/modules/pms/equipment/config.js index b7b0384..c10f66f 100644 --- a/src/views/modules/pms/equipment/config.js +++ b/src/views/modules/pms/equipment/config.js @@ -2,7 +2,7 @@ import TableOperaionComponent from '@/components/noTemplateComponents/operationC import TableTextComponent from '@/components/noTemplateComponents/detailComponent' import switchBtn from '@/components/noTemplateComponents/switchBtn' import { timeFilter } from '@/utils/filters' - +import QuillRichInput from "@/components/noTemplateComponents/richInput"; export default function () { @@ -72,6 +72,10 @@ export default function () { elparams: { placeholder: '选择一个设备类型' } }, ], + [{ + richInput: true, label: "描述信息", prop: "description" + }], + // [{ component: QuillRichInput, label: "描述信息", prop: "description" }], [{ textarea: true, label: '备注', prop: 'remark', elparams: { placeholder: '备注' } }], ], operations: [ diff --git a/src/views/modules/pms/equipmentType/config.js b/src/views/modules/pms/equipmentType/config.js index df5ab95..b900177 100644 --- a/src/views/modules/pms/equipmentType/config.js +++ b/src/views/modules/pms/equipmentType/config.js @@ -95,7 +95,16 @@ export default function () { ], // [{ textarea: true, label: "描述信息", prop: "description", elparams: { placeholder: "描述信息" } }], [{ input: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }], - [{ upload: true, actionUrl: window.SITE_CONFIG['apiURL'] + '/pms/attachment/uploadFileFormData?typeCode=equipmentType', label: "上传资料", fileList: [], prop: "upload", elparams: null }], + [{ + upload: true, + actionUrl: window.SITE_CONFIG['apiURL'] + '/pms/attachment/uploadFileFormData?typeCode=equipmentType', + fetchUrl: '/pms/equipmentTypeFile/page', + label: "上传资料", + fileList: [], + prop: "upload", + paramName: 'equipmentTypeId', + elparams: null + }], ], operations: [ { name: "add", label: "保存", type: "primary", permission: "pms:equipmentType:save", showOnEdit: false },