From 1e760d000c94897f6ecb323cbe91f40eb22df731 Mon Sep 17 00:00:00 2001 From: Zhufu <1176354795@qq.com> Date: Mon, 17 Jun 2024 14:11:29 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=BA=E6=97=B6=E9=97=B4=E7=9A=84=E6=95=B0=E6=8D=AE=E4=BC=A0?= =?UTF-8?q?=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/onlineform/formCall/CallModal.vue | 27 +++++++++++++++++-- .../CreateOrModifyComponent/index.vue | 12 ++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/views/demo/onlineform/formCall/CallModal.vue b/src/views/demo/onlineform/formCall/CallModal.vue index 8414a9ac..3da0b002 100644 --- a/src/views/demo/onlineform/formCall/CallModal.vue +++ b/src/views/demo/onlineform/formCall/CallModal.vue @@ -32,7 +32,7 @@ @@ -117,7 +117,7 @@ @@ -139,6 +139,7 @@ import { subTableStore } from '@/store/modules/subTable'; import { changeCardStructure, cardNestStructure } from '@/views/demo/onlineform/util.ts'; import CreateOrModifyComponent from '@/views/demo/onlineform/formCall/CreateOrModifyComponent/index.vue'; + import dayjs from 'dayjs'; const subTableDataStore = subTableStore(); @@ -171,6 +172,7 @@ const scrollValue = ref(); const cardLayout = ref([]); const createOrModifyList = ref([]); + const createOrModifyData = ref({}) // 按钮 const buttonLayout = ref([]); // 脚本 @@ -408,6 +410,11 @@ } if (unref(isUpdate) && !unref(isDetail)) { getTitle.value = '编辑'; + Object.keys(data.infoUseMainTableData).forEach(itemKey => { + if(itemKey.indexOf('_time_') !== -1 || itemKey.indexOf('_user_') !== -1){ + createOrModifyData.value[itemKey] = data.infoUseMainTableData[itemKey] + } + }) data.btnList.forEach((element) => { if (element.prop === 'Edit' && element.isWFlow) { flowCode.value = element.wFlowCode; @@ -436,6 +443,11 @@ } if (!unref(isUpdate) && unref(isDetail)) { getTitle.value = '详情'; + Object.keys(data.infoUseMainTableData).forEach(itemKey => { + if(itemKey.indexOf('_time_') !== -1 || itemKey.indexOf('_user_') !== -1){ + createOrModifyData.value[itemKey] = data.infoUseMainTableData[itemKey] + } + }) let isTabs = false; data.tab = changeCardStructure(data.tab); data.tab.forEach((itemComponent) => { @@ -592,11 +604,22 @@ async function ModalSureClick() { try { let values = await validate(); + // 将老创建人创建时间赋值 + values = {...values, ...createOrModifyData.value} // 添加校验后脚本 let cardValueList = Object.values(cardValues.value); cardValueList.forEach((item) => { values = { ...values, ...item }; }); + Object.keys(values).forEach(itemKey => { + if(!isUpdate.value){ + if(itemKey.indexOf('_time_') !== -1) values[itemKey] = dayjs().format('YYYY-MM-DD HH:mm:ss') + if(itemKey.indexOf('_user_') !== -1) values[itemKey] = localStorage.getItem('fireUserLoginName') + }else{ + if(itemKey.indexOf('_modify_time') !== -1) values[itemKey] = dayjs().format('YYYY-MM-DD HH:mm:ss') + if(itemKey.indexOf('_modify_user') !== -1) values[itemKey] = localStorage.getItem('fireUserLoginName') + } + }) codeClickFunction('afterValidateForm', afterValidateForm.value); console.log('values', values); let query = values; diff --git a/src/views/demo/onlineform/formCall/CreateOrModifyComponent/index.vue b/src/views/demo/onlineform/formCall/CreateOrModifyComponent/index.vue index ef3bb27a..58f1253f 100644 --- a/src/views/demo/onlineform/formCall/CreateOrModifyComponent/index.vue +++ b/src/views/demo/onlineform/formCall/CreateOrModifyComponent/index.vue @@ -24,14 +24,20 @@ From dedee7e4dde9bb829e4131826d7af7cf5ce9bf9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=A6=8D?= <1455167345@qq.com> Date: Mon, 17 Jun 2024 14:34:15 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/demo/workflow/task/process/audit.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/demo/workflow/task/process/audit.vue b/src/views/demo/workflow/task/process/audit.vue index d61bf5a2..f4df1daa 100644 --- a/src/views/demo/workflow/task/process/audit.vue +++ b/src/views/demo/workflow/task/process/audit.vue @@ -135,7 +135,7 @@ -
+
Date: Mon, 17 Jun 2024 15:55:48 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=80=E6=9C=89=E7=94=A8=E6=88=B7=E9=80=89?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../permissionmanagement/data/MenuDrawer.vue | 25 +++++++++++-------- .../permissionmanagement/data/index.data.ts | 4 +++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/views/demo/system/permissionmanagement/data/MenuDrawer.vue b/src/views/demo/system/permissionmanagement/data/MenuDrawer.vue index 8e9a0513..75d1a118 100644 --- a/src/views/demo/system/permissionmanagement/data/MenuDrawer.vue +++ b/src/views/demo/system/permissionmanagement/data/MenuDrawer.vue @@ -33,9 +33,10 @@ > 角色 用户 + 所有用户 - + { + fun_GetPageList({ page: 1, limit: 9999999 }).then((res: Recordable) => { const arr: any = []; if (res.items) { res.items.forEach((item) => { @@ -317,7 +318,7 @@ const rules = reactive({ code: [{ required: true, message: '请选择功能', trigger: 'blur' }], name: [{ required: true, message: '请输入名称', trigger: 'blur' }], - objectId: [{ required: true, message: '请选择授权对象', trigger: 'blur' }], + // objectId: [{ required: true, message: '请选择授权对象', trigger: 'blur' }], }); async function handleSubmit() { @@ -327,14 +328,18 @@ .validate() .then(() => { const params = formData.value; - if (formData.value.objectType == '1') { - const objectObj = userOptions.value.filter((ele) => ele.value == params.objectId); - console.log('objectObj', objectObj); - params.objectName = objectObj[0].label; + if (params.objectId) { + if (formData.value.objectType == '1') { + const objectObj = userOptions.value.filter((ele) => ele.value == params.objectId); + console.log('objectObj', objectObj); + params.objectName = objectObj[0].label; + } else { + const objectObj = roleOptions.value.filter((ele) => ele.value == params.objectId); + console.log('objectObj', objectObj); + params.objectName = objectObj[0].label; + } } else { - const objectObj = roleOptions.value.filter((ele) => ele.value == params.objectId); - console.log('objectObj', objectObj); - params.objectName = objectObj[0].label; + params.objectName = '所有用户'; } const codeObj = codeOptions.value.filter((ele) => ele.value == params.code); diff --git a/src/views/demo/system/permissionmanagement/data/index.data.ts b/src/views/demo/system/permissionmanagement/data/index.data.ts index e793d10c..60bcc543 100644 --- a/src/views/demo/system/permissionmanagement/data/index.data.ts +++ b/src/views/demo/system/permissionmanagement/data/index.data.ts @@ -30,6 +30,10 @@ export const columns: BasicColumn[] = [ color = 'yellow'; text = '用户'; } + if (formType == 3 || formType == '3') { + color = 'orange'; + text = '所有用户'; + } return h(Tag, { color: color }, () => text); }, }, From cebfc0d2d0ba9893140477fe51b334f842216775 Mon Sep 17 00:00:00 2001 From: Zhufu <1176354795@qq.com> Date: Mon, 17 Jun 2024 16:49:24 +0800 Subject: [PATCH 4/6] =?UTF-8?q?#68=20=E8=A1=A8=E5=8D=95=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E5=8F=8A=E8=A1=A8=E5=8D=95=E5=88=A0=E9=99=A4=E5=90=8E=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=8F=8A=E6=97=B6=E5=93=8D=E5=BA=94=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E8=8F=9C=E5=8D=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layouts/default/menu/useLayoutMenu.ts | 3 +++ src/store/modules/permission.ts | 10 ++++++++++ src/views/demo/onlineform/formModule/index.vue | 9 +++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/layouts/default/menu/useLayoutMenu.ts b/src/layouts/default/menu/useLayoutMenu.ts index ac3b2226..8a1044bd 100644 --- a/src/layouts/default/menu/useLayoutMenu.ts +++ b/src/layouts/default/menu/useLayoutMenu.ts @@ -70,6 +70,9 @@ export function useSplitMenu(splitType: Ref) { genMenus(); }, ); + watch(() => permissionStore.getChangeMenu, () => { + genMenus(); + }) // Handle left menu split async function handleSplitLeftMenu(parentPath: string) { diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index f39ac383..e7775add 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -26,6 +26,7 @@ import { PageEnum } from '@/enums/pageEnum'; import { router } from '@/router'; import { LAYOUT } from '@/router/constant'; +import dayjs from 'dayjs'; interface PermissionState { // Permission code list @@ -42,6 +43,7 @@ interface PermissionState { backMenuList: Menu[]; // 菜单列表 frontMenuList: Menu[]; + changeMenu: number; } export const usePermissionStore = defineStore({ @@ -61,8 +63,12 @@ export const usePermissionStore = defineStore({ // menu List // 菜单列表 frontMenuList: [], + changeMenu: dayjs().valueOf() }), getters: { + getChangeMenu(state): number { + return state.changeMenu; + }, getPermCodeList(state): string[] | number[] { return state.permCodeList; }, @@ -89,6 +95,10 @@ export const usePermissionStore = defineStore({ list?.length > 0 && this.setLastBuildMenuTime(); }, + setChangeMenu(){ + this.changeMenu = dayjs().valueOf(); + }, + setFrontMenuList(list: Menu[]) { this.frontMenuList = list; }, diff --git a/src/views/demo/onlineform/formModule/index.vue b/src/views/demo/onlineform/formModule/index.vue index af2e1102..f11595b2 100644 --- a/src/views/demo/onlineform/formModule/index.vue +++ b/src/views/demo/onlineform/formModule/index.vue @@ -61,7 +61,8 @@ // api import { getMenuList } from '@/api/demo/system'; import { fun_GetPageList, fun_DeleteForm } from '@/api/demo/formModule'; - + import { usePermissionStore } from '@/store/modules/permission'; + const permissionStore = usePermissionStore(); defineOptions({ name: 'FormModule' }); const searchInfo = reactive({}); const { createConfirm, createMessage } = useMessage(); @@ -136,6 +137,8 @@ createMessage.warn('删除失败'); } reload(); + await permissionStore.buildRoutesAction() + permissionStore.setChangeMenu() }, }); } @@ -173,9 +176,11 @@ } // 新增、编辑-保存后,刷新 - function submitReload() { + async function submitReload() { clearSelectedRowKeys(); reload(); + await permissionStore.buildRoutesAction() + permissionStore.setChangeMenu() } function onBtnClicked(domId) { From 4b8d2fad0cbc34c51af10664922ddec9ab63117f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BB=95=E5=B5=A9?= <17854119262@163.com> Date: Mon, 17 Jun 2024 17:31:52 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E8=A1=A8=E5=8D=95=E8=AE=BE=E8=AE=A1-?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=BB=BA=E8=A1=A8-=E6=B5=8B=E8=AF=95bug?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VFormDesign/components/ComponentProps.vue | 6 +- .../formdesign/modal/AutomaticModal.vue | 94 +++++++++++++------ .../demo/system/graphicaltable/index.vue | 2 +- 3 files changed, 69 insertions(+), 33 deletions(-) diff --git a/src/views/demo/form-design/components/VFormDesign/components/ComponentProps.vue b/src/views/demo/form-design/components/VFormDesign/components/ComponentProps.vue index 85a343e9..196d5066 100644 --- a/src/views/demo/form-design/components/VFormDesign/components/ComponentProps.vue +++ b/src/views/demo/form-design/components/VFormDesign/components/ComponentProps.vue @@ -335,7 +335,11 @@ }); baseComponentCommonAttrs.forEach((item) => { - if (formType_design.value != 2 || !['dataTable', 'fieldName'].includes(item.name)) { + if ( + (formType_design.value != 2 && + !['Divider', 'Button'].includes(formConfig.value.currentItem?.component)) || + !['dataTable', 'fieldName'].includes(item.name) + ) { item.category = 'input'; if (item.includes) { if (item.includes.includes(formConfig.value.currentItem!.component)) { diff --git a/src/views/demo/onlineform/formdesign/modal/AutomaticModal.vue b/src/views/demo/onlineform/formdesign/modal/AutomaticModal.vue index 28d283f8..48ac155b 100644 --- a/src/views/demo/onlineform/formdesign/modal/AutomaticModal.vue +++ b/src/views/demo/onlineform/formdesign/modal/AutomaticModal.vue @@ -38,7 +38,7 @@ @@ -155,7 +155,7 @@ dataType: '', length: 0, columnDescription: '', - isNullable: 0, + isNullable: 1, isIdentity: 0, isPrimarykey: 0, decimalDigits: 0, @@ -295,7 +295,7 @@ schemas = sch.schemas; schemas?.forEach((item: any, index: number) => { // 过滤分割线、按钮 - if (item.component && !item.component.includes(notComponentArray)) { + if (item.component && !notComponentArray.includes(item.component)) { // 图斑组件 if (fieldArray.includes(item.field)) { db_temp.dbColumnInfoList.push({ @@ -304,7 +304,7 @@ dataType: 'varchar', length: 200, columnDescription: '图斑组件id', - isNullable: 0, + isNullable: 1, isIdentity: 0, isPrimarykey: 0, decimalDigits: 0, @@ -315,7 +315,7 @@ dataType: 'geometry(GEOMETRY)', length: 0, columnDescription: '图斑组件', - isNullable: 0, + isNullable: 1, isIdentity: 0, isPrimarykey: 0, decimalDigits: 0, @@ -323,6 +323,7 @@ item.componentProps.dataTable = db_temp.tableName; item.componentProps.fieldName = 'gid'; + item.csType = 'string'; } // 子表-递归 else if (item.component == 'Grid' && item.type == 'subTable') { @@ -338,6 +339,7 @@ ); item.componentProps.dataTable = res?.columns[0]?.children[0]?.componentProps?.dataTable; + item.csType = 'string'; } // 布局控件 else if (gridArray.includes(item.component)) { @@ -359,6 +361,7 @@ ); ch.componentProps.dataTable = res?.columns[0]?.children[0]?.componentProps?.dataTable; + ch.csType = 'string'; } // 选项卡-图斑组件/布局组件 else if (fieldArray.includes(ch.field) || gridArray.includes(ch.component)) { @@ -392,6 +395,7 @@ // componentProps ch.componentProps.dataTable = temp.tableName; ch.componentProps.fieldName = temp.dbColumnName; + ch.csType = 'string'; db_temp.dbColumnInfoList.push(temp); } @@ -484,11 +488,12 @@ schemas = sch.children; schemas?.forEach((item: any, index: number) => { // 过滤分割线、按钮 - if (item.component && !item.component.includes(notComponentArray)) { + if (item.component && !notComponentArray.includes(item.component)) { if (fieldArray.includes(item.field)) { // 子表-图斑组件 item.componentProps.dataTable = db_temp.tableName; item.componentProps.fieldName = 'gid'; + item.csType = 'string'; // item.componentProps.fieldName = 'geom'; } else if (item.component == 'Grid' && item.type == 'subTable') { // 子表-递归 @@ -504,6 +509,7 @@ ); item.componentProps.dataTable = res?.columns[0]?.children[0]?.componentProps?.dataTable; + item.csType = 'string'; } else if (gridArray.includes(item.component)) { // 选项卡 if (item.component == 'Tabs') { @@ -523,6 +529,7 @@ ); ch.componentProps.dataTable = res?.columns[0]?.children[0]?.componentProps?.dataTable; + ch.csType = 'string'; } // 选项卡-图斑组件/布局组件 else if (fieldArray.includes(ch.field) || gridArray.includes(ch.component)) { @@ -548,6 +555,7 @@ // componentProps ch.componentProps.dataTable = temp.tableName; ch.componentProps.fieldName = temp.dbColumnName; + ch.csType = 'string'; db_temp.dbColumnInfoList.push(temp); } @@ -571,6 +579,7 @@ ); ch.componentProps.dataTable = res?.columns[0]?.children[0]?.componentProps?.dataTable; + ch.csType = 'string'; } // 卡片布局-图斑组件/布局组件 else if (fieldArray.includes(ch.field) || gridArray.includes(ch.component)) { @@ -596,6 +605,8 @@ // componentProps ch.componentProps.dataTable = temp.tableName; ch.componentProps.fieldName = temp.dbColumnName; + ch.csType = 'string'; + db_temp.dbColumnInfoList.push(temp); } }); @@ -618,6 +629,7 @@ ); ch.componentProps.dataTable = res?.columns[0]?.children[0]?.componentProps?.dataTable; + ch.csType = 'string'; } // 栅格布局-图斑组件/布局组件 else if (fieldArray.includes(ch.field) || gridArray.includes(ch.component)) { @@ -643,6 +655,7 @@ // componentProps ch.componentProps.dataTable = temp.tableName; ch.componentProps.fieldName = temp.dbColumnName; + ch.csType = 'string'; db_temp.dbColumnInfoList.push(temp); } }); @@ -667,6 +680,7 @@ ); ch.componentProps.dataTable = res?.columns[0]?.children[0]?.componentProps?.dataTable; + ch.csType = 'string'; } // 卡片组-图斑组件/布局组件 else if (fieldArray.includes(ch.field) || gridArray.includes(ch.component)) { @@ -692,6 +706,7 @@ // componentProps ch.componentProps.dataTable = temp.tableName; ch.componentProps.fieldName = temp.dbColumnName; + ch.csType = 'string'; db_temp.dbColumnInfoList.push(temp); } @@ -771,8 +786,28 @@ if (checkflag) { return; } + + // 表名变化后修改表单里的表名 + db_list.value.forEach((db, db_index) => { + if (db.name != db.tableName) { + // scheme + let scheme_replace = saveFormDatas.scheme.scheme; + scheme_replace = replaceInJson(scheme_replace, db.name, db.tableName); + saveFormDatas.scheme.scheme = scheme_replace; + + // db + // db.name = db.tableName; + db.dbColumnInfoList?.forEach((d, d_index) => { + d.tableName = db.tableName; + db.dbColumnInfoList[d_index] = d; + }); + db_list.value[db_index] = db; + } + }); + // 设置子表的relationField getRelationField(); + if (props.isAddVisible) { db_list.value.forEach(async (db) => { // 新增 @@ -796,7 +831,7 @@ if (!oldDbColumnArray.includes(dbColumn.dbColumnName)) { dbColumn.isNullable = 1; let query: any = { - dbCode: forminfoDbCode, + dbCode: forminfoDbCode || 'hcsystemdb', dbColumn: dbColumn, }; await AddColumn(query); @@ -832,11 +867,13 @@ } // 检测:数据库是否有此表 - let query: any = { tableName: db.tableName }; - let res = await CheckTableExist(query); - if (res) { - createMessage.warn('数据库已有表' + db.tableName); - flag = true; + if (db.tableName) { + let query: any = { tableName: db.tableName }; + let res = await CheckTableExist(query); + if (res) { + createMessage.warn('数据库已有表' + db.tableName); + flag = true; + } } if (!flag) { @@ -859,16 +896,16 @@ } // 检测:数据库字段名的命名规则 - if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(dbColumn.dbColumnName)) { + if (dbColumn.dbColumnName && !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(dbColumn.dbColumnName)) { createMessage.warn('字段名不符合数据库字段名的命名规则!'); flag = true; } // 检测:字段名不能重复 - if (!dbColumns.includes(dbColumn.dbColumnName)) { + if (dbColumn.dbColumnName && !dbColumns.includes(dbColumn.dbColumnName)) { dbColumns.push(dbColumn.dbColumnName); } else { - createMessage.warn('字段名不能重复!'); + createMessage.warn('同表内的字段名不能重复!'); flag = true; } }); @@ -881,6 +918,17 @@ return results; } + // 表名变化后修改表单里的表名 + function replaceInJson(jsonString, itemToReplace, newItem) { + // 使用动态生成的正则表达式进行全局替换 + // 注意需要对itemToReplace中的特殊字符进行转义 + let escapedItem = itemToReplace.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'); + let regex = new RegExp(escapedItem, 'g'); + let replacedJsonString = jsonString.replace(regex, newItem); + + return replacedJsonString; + } + // 设置子表的relationField function getRelationField() { // 确定primaryKey @@ -923,22 +971,6 @@ closeModalDeleteGrid(); } - // 表名变化后修改表单里的表名 - function changeTableName(db) { - if (db.tableName) { - // 小写 - db.tableName = db.tableName.toLowerCase(); - - let scheme_replace = JSON.stringify(saveFormDatas.scheme.scheme); - scheme_replace = scheme_replace.replace(db.name, db.tableName); - saveFormDatas.scheme.scheme = JSON.parse(scheme_replace); - db.name = db.tableName; - db.dbColumnInfoList?.forEach((d) => { - d.tableName = db.tableName; - }); - } - } - // 非提交关闭窗口时,栅格布局清除取出来的表单组件删除掉 function closeModalDeleteGrid() { // 非提交 diff --git a/src/views/demo/system/graphicaltable/index.vue b/src/views/demo/system/graphicaltable/index.vue index 2d17f317..21d65231 100644 --- a/src/views/demo/system/graphicaltable/index.vue +++ b/src/views/demo/system/graphicaltable/index.vue @@ -11,7 +11,7 @@