From be0ea5ded97d28f7105cd11486fa62c89f799a2e Mon Sep 17 00:00:00 2001 From: dengbf Date: Fri, 24 Nov 2023 17:02:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=E8=AE=BE=E7=BD=AE=E5=85=A8=E5=B1=80=E5=8F=AA?= =?UTF-8?q?=E8=AF=BB=20=20-=20[=E5=85=B3=E8=81=94]#[1030975084003328]?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E5=9C=BA=E6=99=AF-=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=85=A8=E5=B1=80=E5=8F=AA=E8=AF=BB=E5=BC=80?= =?UTF-8?q?=E5=85=B3=20http://192.168.0.96:8090/demo/rdm.html#/story-detai?= =?UTF-8?q?l/939050947543040/939050947543042/1030975084003328?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resources/api/framework/form/form.js | 5 +- src/resources/assets/languages/term/en.json | 4 +- src/resources/assets/languages/term/zh.json | 4 +- src/resources/plugins/TsSheet/TsSheet.vue | 27 +- src/resources/plugins/TsSheet/form-edit.vue | 248 +++++++++++------- .../plugins/TsSheet/form-preview.vue | 7 +- .../plugins/TsSheet/form-scene-dialog.vue | 31 ++- .../plugins/TsSheet/form-scene-edit.vue | 73 +++++- .../processdetail/workorder/CenterDetail.vue | 2 +- .../workorder/form-setting.vue | 1 + 10 files changed, 285 insertions(+), 117 deletions(-) diff --git a/src/resources/api/framework/form/form.js b/src/resources/api/framework/form/form.js index b8aecd1c..fe532b5f 100644 --- a/src/resources/api/framework/form/form.js +++ b/src/resources/api/framework/form/form.js @@ -76,8 +76,11 @@ const form = { getReferenceCount(params) { //查询引用数量 return axios.post('/api/rest/dependency/count', params); }, - getFormDefaultscene(params) { //保持默认场景 + saveFormDefaultscene(params) { //保存默认场景 return axios.post('/api/rest/form/version/defaultscene/save', params); + }, + saveFormSceneReadonly(params) { //场景设置只读 + return axios.post('/api/rest/form/version/scene/readonly', params); } }; export default form; diff --git a/src/resources/assets/languages/term/en.json b/src/resources/assets/languages/term/en.json index 1be9219d..20914486 100644 --- a/src/resources/assets/languages/term/en.json +++ b/src/resources/assets/languages/term/en.json @@ -1152,7 +1152,9 @@ "versionlog": "Version Log", "exporttable": "Export Table", "importtable": "Import Table", - "excelinputtemplate": "Table Input Template" + "excelinputtemplate": "Table Input Template", + "globalreadonly": "Global read-only", + "globalreadonlytip": "The global read-only priority is higher than the internal read and write settings of the component. After turning on the global read-only switch, all components in the scene are in a read-only state" }, "knowledge": { "document": "Document", diff --git a/src/resources/assets/languages/term/zh.json b/src/resources/assets/languages/term/zh.json index 725446ad..5389aa11 100644 --- a/src/resources/assets/languages/term/zh.json +++ b/src/resources/assets/languages/term/zh.json @@ -1151,7 +1151,9 @@ "versionlog": "版本日志", "exporttable": "导出表格", "importtable": "导入表格", - "excelinputtemplate": "表格输入模板" + "excelinputtemplate": "表格输入模板", + "globalreadonly": "全局只读", + "globalreadonlytip": "全局只读优先级高于组件内部的读写设置,打开全局只读开关后,场景内所有组件均为只读状态" }, "knowledge": { "document": "文档", diff --git a/src/resources/plugins/TsSheet/TsSheet.vue b/src/resources/plugins/TsSheet/TsSheet.vue index 5096fd62..acad021c 100644 --- a/src/resources/plugins/TsSheet/TsSheet.vue +++ b/src/resources/plugins/TsSheet/TsSheet.vue @@ -665,12 +665,14 @@ export default { //校验表单内所有组件的数据,返回异常数据 async validData(validConifg) { const errorMap = {}; - for (let i = 0; i < this.componentCells.length; i++) { - const component = this.componentCells[i].component; - if (component && component.uuid) { - const es = this.$refs['formitem_' + component.uuid] && this.$refs['formitem_' + component.uuid][0] ? await this.$refs['formitem_' + component.uuid][0].validData(validConifg) : null; - if (es && es.length > 0) { - errorMap[component.uuid] = es; + if (!this.disabled && !this.readonly) { + for (let i = 0; i < this.componentCells.length; i++) { + const component = this.componentCells[i].component; + if (component && component.uuid) { + const es = this.$refs['formitem_' + component.uuid] && this.$refs['formitem_' + component.uuid][0] ? await this.$refs['formitem_' + component.uuid][0].validData(validConifg) : null; + if (es && es.length > 0) { + errorMap[component.uuid] = es; + } } } } @@ -1556,11 +1558,16 @@ export default { let hiddenComponentList = []; if (this.config.tableList && this.config.tableList.length > 0) { this.config.tableList.forEach(item => { - if (item.component && item.component.hasValue && !hiddenComponentList.includes(item.component.uuid)) { - if (!this.$refs['formitem_' + item.component.uuid]) { - hiddenComponentList.push(item.component.uuid); - } else if (this.config.hiddenRowList.includes(item.row) || (item.component.config && item.component.config.isHide)) { + if (item.component && item.component.hasValue) { + if (this.disabled || this.readonly) { + //表单只读或者禁用,所有组件都不校验 hiddenComponentList.push(item.component.uuid); + } else if (!hiddenComponentList.includes(item.component.uuid)) { + if (!this.$refs['formitem_' + item.component.uuid]) { + hiddenComponentList.push(item.component.uuid); + } else if (this.config.hiddenRowList.includes(item.row) || (item.component.config && item.component.config.isHide)) { + hiddenComponentList.push(item.component.uuid); + } } } }); diff --git a/src/resources/plugins/TsSheet/form-edit.vue b/src/resources/plugins/TsSheet/form-edit.vue index 593df3cf..73132456 100644 --- a/src/resources/plugins/TsSheet/form-edit.vue +++ b/src/resources/plugins/TsSheet/form-edit.vue @@ -5,18 +5,19 @@ {{ $getFromPage($t('router.framework.formmanage')) }} - @@ -297,6 +323,7 @@ @close="closeScene" @deleteScene="deleteScene" @updateDefaultSceneUuid="updateDefaultSceneUuid" + @updateSceneReadOnly="updateSceneReadOnly" > @@ -319,7 +346,8 @@ export default { FormReferenceDialog: resolve => require(['./form-reference-dialog.vue'], resolve), UploadDialog: resolve => require(['@/resources/components/UploadDialog/UploadDialog.vue'], resolve), FormWidthDialog: resolve => require(['./form-width-dialog.vue'], resolve), - FormSceneDialog: resolve => require(['./form-scene-dialog.vue'], resolve) + FormSceneDialog: resolve => require(['./form-scene-dialog.vue'], resolve), + TsFormSwitch: resolve => require(['@/resources/plugins/TsForm/TsFormSwitch'], resolve) }, extends: subformconfig, mixins: [download], @@ -376,7 +404,8 @@ export default { isShowEditFormWidth: false, //表单宽度设置 formGroup: ['basic', 'layout', 'autoexec', 'cmdb', 'custom'], isFormSceneDialog: false, - sceneUuid: null + sceneUuid: null, + readOnly: false //设置全局只读 }; }, beforeCreate() {}, @@ -541,6 +570,7 @@ export default { !formConfig.name && (formConfig.name = this.$t('page.mainscene')); this.$set(formConfig, 'sceneList', this.initFormConfig.sceneList || []); this.$set(formConfig, 'defaultSceneUuid', this.initFormConfig.defaultSceneUuid || formConfig.uuid); + this.$set(formConfig, 'readOnly', this.readOnly); if (type === 'saveother') { this.$set(formConfig, 'uuid', this.$utils.setUuid()); formConfig.sceneList.forEach(item => { @@ -679,6 +709,7 @@ export default { this.versionList = res.Return.versionList || []; let formConfig = res.Return.formConfig || {}; this.sceneUuid = formConfig.uuid; + this.readOnly = formConfig.readOnly || false; this.$set(this.formData, 'name', res.Return.name); if (this.versionList.length > 0) { this.versionList.forEach(item => { @@ -995,7 +1026,32 @@ export default { }); }, updateDefaultSceneUuid(uuid) { - this.$set(this.initData, 'defaultsceneUuid', uuid); + this.$set(this.initFormConfig, 'defaultSceneUuid', uuid); + }, + updateSceneReadOnly(readOnly, sceneUuid) { + if (sceneUuid === this.initFormConfig.uuid) { + this.$set(this.initFormConfig, 'readOnly', readOnly); + this.readOnly = readOnly; + } else { + this.initFormConfig.sceneList.forEach(item => { + if (item.uuid === sceneUuid) { + this.$set(item, 'readOnly', readOnly); + } + }); + } + }, + changeReadOnly(val) { + this.defaultSceneUuid = this.selectSceneUuid; + this.$api.framework.form.saveFormSceneReadonly({ + versionUuid: this.currentVersion.uuid, + sceneUuid: this.sceneUuid, + readOnly: val + }).then(res => { + if (res.Status == 'OK') { + this.$Message.success(this.$t('message.savesuccess')); + this.$set(this.initFormConfig, 'readOnly', readOnly); + } + }); } }, filter: {}, diff --git a/src/resources/plugins/TsSheet/form-preview.vue b/src/resources/plugins/TsSheet/form-preview.vue index d5b22e5c..4f192e22 100644 --- a/src/resources/plugins/TsSheet/form-preview.vue +++ b/src/resources/plugins/TsSheet/form-preview.vue @@ -9,6 +9,7 @@ mode="read" :value="data" :data="inputFormData" + :readonly="readOnly" @emit="emitFn" > @@ -77,7 +78,11 @@ export default { }, directives: { clipboard }, props: { - data: { type: Object } + data: { type: Object }, + readOnly: { + type: Boolean, + default: false + } }, data() { return { diff --git a/src/resources/plugins/TsSheet/form-scene-dialog.vue b/src/resources/plugins/TsSheet/form-scene-dialog.vue index 646472ba..dc0afd03 100644 --- a/src/resources/plugins/TsSheet/form-scene-dialog.vue +++ b/src/resources/plugins/TsSheet/form-scene-dialog.vue @@ -31,6 +31,14 @@ :referenceCount="row.referenceCount" > + @@ -120,6 +147,8 @@ :formConfig="initFormConfig" @close="closeScene" @deleteScene="deleteScene" + @updateDefaultSceneUuid="updateDefaultSceneUuid" + @updateSceneReadOnly="updateSceneReadOnly" > require(['./form-item-config.vue'], resolve), FormPreview: resolve => require(['./form-preview.vue'], resolve), FormSceneDialog: resolve => require(['./form-scene-dialog.vue'], resolve), - ReactionDialog: resolve => require(['./form-row-reaction-dialog.vue'], resolve) + ReactionDialog: resolve => require(['./form-row-reaction-dialog.vue'], resolve), + TsFormSwitch: resolve => require(['@/resources/plugins/TsForm/TsFormSwitch'], resolve) }, props: {}, data() { @@ -168,7 +198,8 @@ export default { isFormSceneDialog: false, disabled: false, sceneList: [], - deleteSceneUuid: '' + deleteSceneUuid: '', + readOnly: false }; }, beforeCreate() {}, @@ -316,6 +347,7 @@ export default { return !sceneConfig.tableList.find(t => t.component && t.component.uuid === f.uuid); }); this.formData.formConfig = this.$utils.deepClone(sceneConfig); + this.readOnly = sceneConfig.readOnly || false; } } this.$addWatchData(this.getCompareData(sceneConfig)); @@ -478,6 +510,7 @@ export default { let formConfig = this.$refs.sheet.getFormConfig(); this.$set(formConfig, 'name', this.sceneName); this.$set(formConfig, 'uuid', this.sceneUuid); + this.$set(formConfig, 'readOnly', this.readOnly); if (formConfig.tableList) { formConfig.tableList.forEach(item => { if (item.component && item.component.inherit) { @@ -544,6 +577,40 @@ export default { currentVersionUuid: this.currentVersionUuid } }); + }, + updateDefaultSceneUuid(uuid) { + this.$set(this.initFormConfig, 'defaultSceneUuid', uuid); + }, + updateSceneReadOnly(readOnly, sceneUuid) { + if (sceneUuid === this.initFormConfig.uuid) { + this.$set(this.initFormConfig, 'readOnly', readOnly); + } else { + this.initFormConfig.sceneList.forEach(item => { + if (item.uuid === sceneUuid) { + this.$set(item, 'readOnly', readOnly); + } + }); + } + if (sceneUuid === this.sceneUuid) { + this.readOnly = readOnly; + } + }, + changeReadOnly(val) { + this.defaultSceneUuid = this.selectSceneUuid; + this.$api.framework.form.saveFormSceneReadonly({ + versionUuid: this.currentVersionUuid, + sceneUuid: this.sceneUuid, + readOnly: val + }).then(res => { + if (res.Status == 'OK') { + this.$Message.success(this.$t('message.savesuccess')); + this.initFormConfig.sceneList.forEach(item => { + if (item.uuid === sceneUuid) { + this.$set(item, 'readOnly', readOnly); + } + }); + } + }); } }, filter: {}, diff --git a/src/views/pages/process/task/processdetail/workorder/CenterDetail.vue b/src/views/pages/process/task/processdetail/workorder/CenterDetail.vue index 6444cdff..4036adfc 100644 --- a/src/views/pages/process/task/processdetail/workorder/CenterDetail.vue +++ b/src/views/pages/process/task/processdetail/workorder/CenterDetail.vue @@ -59,7 +59,7 @@ mode="read" :value="formConfig" :data="processTaskConfig.formAttributeDataMap" - :readonly="!actionConfig.save || !formEdit" + :readonly="!actionConfig.save || !formEdit || formConfig.readOnly" class="pl-sm pr-sm" @emit="formSheetEmitData" @updateHiddenComponentList="updateHiddenComponentList" diff --git a/src/views/pages/process/task/processdispatch/workorder/form-setting.vue b/src/views/pages/process/task/processdispatch/workorder/form-setting.vue index 128369ae..c58555d2 100644 --- a/src/views/pages/process/task/processdispatch/workorder/form-setting.vue +++ b/src/views/pages/process/task/processdispatch/workorder/form-setting.vue @@ -12,6 +12,7 @@ v-else-if="formConfig && formConfig._type == 'new'" ref="formSheet" mode="read" + :readonly="formConfig.readOnly || false" :value="formConfig" :data="formAttributeDataMap" @emit="formSheetEmitData" -- Gitee From 4e71fa5fd23f3e1ef19169c0eded380c72b27342 Mon Sep 17 00:00:00 2001 From: dengbf Date: Fri, 24 Nov 2023 17:05:46 +0800 Subject: [PATCH 2/3] commit --- src/resources/plugins/TsSheet/TsSheet.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/resources/plugins/TsSheet/TsSheet.vue b/src/resources/plugins/TsSheet/TsSheet.vue index acad021c..aa5f1564 100644 --- a/src/resources/plugins/TsSheet/TsSheet.vue +++ b/src/resources/plugins/TsSheet/TsSheet.vue @@ -665,6 +665,7 @@ export default { //校验表单内所有组件的数据,返回异常数据 async validData(validConifg) { const errorMap = {}; + //表单只读或者禁用,所有组件跳过校验 if (!this.disabled && !this.readonly) { for (let i = 0; i < this.componentCells.length; i++) { const component = this.componentCells[i].component; @@ -1560,7 +1561,7 @@ export default { this.config.tableList.forEach(item => { if (item.component && item.component.hasValue) { if (this.disabled || this.readonly) { - //表单只读或者禁用,所有组件都不校验 + //表单只读或者禁用,所有组件uuid传到后台跳过接口校验 hiddenComponentList.push(item.component.uuid); } else if (!hiddenComponentList.includes(item.component.uuid)) { if (!this.$refs['formitem_' + item.component.uuid]) { -- Gitee From 384c2677d63ee5d3d00dfa4a227a72a693a9a3f2 Mon Sep 17 00:00:00 2001 From: dengbf Date: Fri, 24 Nov 2023 17:23:23 +0800 Subject: [PATCH 3/3] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E8=AE=BE=E7=BD=AE=E5=8F=AA=E8=AF=BB=E5=9C=BA?= =?UTF-8?q?=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resources/plugins/TsSheet/form-edit.vue | 1 - src/resources/plugins/TsSheet/form-preview.vue | 8 ++------ src/resources/plugins/TsSheet/form-scene-edit.vue | 1 - 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/resources/plugins/TsSheet/form-edit.vue b/src/resources/plugins/TsSheet/form-edit.vue index 73132456..727796c7 100644 --- a/src/resources/plugins/TsSheet/form-edit.vue +++ b/src/resources/plugins/TsSheet/form-edit.vue @@ -279,7 +279,6 @@ diff --git a/src/resources/plugins/TsSheet/form-preview.vue b/src/resources/plugins/TsSheet/form-preview.vue index 4f192e22..6a0e0abd 100644 --- a/src/resources/plugins/TsSheet/form-preview.vue +++ b/src/resources/plugins/TsSheet/form-preview.vue @@ -9,7 +9,7 @@ mode="read" :value="data" :data="inputFormData" - :readonly="readOnly" + :readonly="data.readOnly || false" @emit="emitFn" > @@ -78,11 +78,7 @@ export default { }, directives: { clipboard }, props: { - data: { type: Object }, - readOnly: { - type: Boolean, - default: false - } + data: { type: Object } }, data() { return { diff --git a/src/resources/plugins/TsSheet/form-scene-edit.vue b/src/resources/plugins/TsSheet/form-scene-edit.vue index 812bedf3..6f7d00a1 100644 --- a/src/resources/plugins/TsSheet/form-scene-edit.vue +++ b/src/resources/plugins/TsSheet/form-scene-edit.vue @@ -132,7 +132,6 @@ -- Gitee