From b402cf47d13430644ce6e700063d878e1f6a8334 Mon Sep 17 00:00:00 2001 From: han2015 <1019850453@qq.com> Date: Wed, 4 Feb 2026 15:54:25 +0800 Subject: [PATCH 1/3] =?UTF-8?q?form=EF=BC=9A=E6=94=AF=E6=8C=81=E8=A1=A8?= =?UTF-8?q?=E5=A4=B4=E6=8E=92=E5=BA=8F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/DesignForm/app/index.vue | 48 ++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/components/DesignForm/app/index.vue b/src/components/DesignForm/app/index.vue index e3f3e8c..04be0e6 100644 --- a/src/components/DesignForm/app/index.vue +++ b/src/components/DesignForm/app/index.vue @@ -31,7 +31,7 @@ import { import type { FormInstance, FormRules } from "element-plus"; import { ElLoading, ElMessage, ElNotification } from "element-plus"; import html2canvas from "html2canvas"; -import JSZip, { forEach } from "jszip"; +import JSZip from "jszip"; import { gainFormPageListCont } from "@/api/DesignForm/requestapi"; import { Picture, InfoFilled, QuestionFilled } from "@element-plus/icons-vue"; import request from "@/utils/request"; @@ -991,11 +991,19 @@ let asfQueryParams: any[] = []; @ 功能: 获取数据 */ const getPageData = () => { + + // by han2015: 处理排序字段信息 + let arr:string[]=[]; + columnSortData.forEach((value, key) => { + arr.push(`${key} ${value}`) + }); + let sendData = { formId: props.formId, page: state.currentPage, pagesize: state.pageSize, searchData: json2string(props.searchData), + sortData: arr.join(", "), }; // console.log("获取列表详细信息",sendData) @@ -1025,6 +1033,7 @@ const getPageData = () => { break; default: state.loading = true; + //by han2015, 抽成独立部分,方便其他功能调用 doGainFormPageListCont(sendData) .then((datas) => { @@ -1618,6 +1627,32 @@ const lookPageInfoIsShow = ref(false); const asflookPageInfoIsShow = ref(false); const pageInfoCont = ref(); +//------------------ by han2015: 支持表单排序功能---------------------- +const columnSortData = new Map(); +const setHeaderClass=(params:any)=>{ + if(columnSortData.has(params.column.property)){ + if(columnSortData.get(params.column.property)=="DESC"){ + params.column.order="descending" + return + }else{ + params.column.order="ascending" + return + } + } +} +// by han2015: 列表支持表头排序 +const onUpdateSort = (data: { prop: string; order: "ascending" | "descending" | null }) => { + if (data.order === "descending") { + columnSortData.set(data.prop, "DESC"); + } else if (data.order === "ascending") { + columnSortData.set(data.prop, "ASC"); + } else { + columnSortData.delete(data.prop); + } + getPageData() +} + + const lookPageInfo = (val: any) => { tablePageClass.value = 4; pageInfoCont.value = val; @@ -2154,13 +2189,15 @@ const isObject = (obj: any) => { - + +++++++++++++++++++++ @@ -2193,12 +2230,14 @@ const isObject = (obj: any) => { {{ writeListTitle(scope.row, viewPage.list) }} + - + { config="" min-width="220" header-align="center" + sortable="custom" align="center" > From b792d045a87a7d68b5ba8d159bb2fcd2d6f0e607 Mon Sep 17 00:00:00 2001 From: han2015 <1019850453@qq.com> Date: Tue, 10 Feb 2026 16:16:18 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=86=E7=BB=84?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/DesignForm/tableButton.ts | 6 + src/components/DesignForm/app/groupPage.vue | 236 ++++++++++++++++++ src/components/DesignForm/app/index.vue | 54 +++- .../DesignForm/tableListPage/index.vue | 18 ++ src/directive/permission/button.ts | 18 +- src/views/sysworkflow/lowCodeTasks/index.vue | 7 + .../appPage/appPageForm/openAppFormPage.vue | 9 +- .../appPage/appPageForm/pageList.vue | 73 ++++++ .../sysworkflow/lowcodepage/pageList.vue | 1 + .../lowcodepage/runApp/runAppForm.vue | 8 + 10 files changed, 418 insertions(+), 12 deletions(-) create mode 100644 src/components/DesignForm/app/groupPage.vue diff --git a/src/api/DesignForm/tableButton.ts b/src/api/DesignForm/tableButton.ts index 346278d..7e6057a 100644 --- a/src/api/DesignForm/tableButton.ts +++ b/src/api/DesignForm/tableButton.ts @@ -382,6 +382,12 @@ export interface viewPageType { } } , + group: { + status: boolean, + isClick: boolean, + form: { + }, + }, time:{ status:boolean, isClick:boolean, diff --git a/src/components/DesignForm/app/groupPage.vue b/src/components/DesignForm/app/groupPage.vue new file mode 100644 index 0000000..2dcd504 --- /dev/null +++ b/src/components/DesignForm/app/groupPage.vue @@ -0,0 +1,236 @@ + + + + diff --git a/src/components/DesignForm/app/index.vue b/src/components/DesignForm/app/index.vue index 04be0e6..7069802 100644 --- a/src/components/DesignForm/app/index.vue +++ b/src/components/DesignForm/app/index.vue @@ -58,6 +58,7 @@ import NewTableFlow from "@/views/sysworkflow/lowcodepage/pageFlow/newTableFlow. import TimeAxisPage from "@/components/DesignForm/app/timeAxis.vue"; import CardPage from "@/components/DesignForm/app/cardPage.vue"; import GanttPageIng from "@/components/DesignForm/app/gannttPage.vue"; +import GroupPage from "@/components/DesignForm/app/groupPage.vue"; import MapPage from "@/components/DesignForm/app/mapPage.vue"; import CalendarPage from "@/components/DesignForm/app/calendar/calendar1/calendarPage.vue"; import SearchSelect from "@/components/DesignForm/app/calendar/selectSearch.vue"; @@ -973,6 +974,7 @@ watch( ); const timeAxisRef = ref(null); +const groupPageRef = ref(null); const calendarPageRef = ref(null); const cardPageRef = ref(null); const searchSend = reactive({ @@ -1005,7 +1007,7 @@ const getPageData = () => { searchData: json2string(props.searchData), sortData: arr.join(", "), }; - // console.log("获取列表详细信息",sendData) + console.log("获取列表详细信息??????",sendData) switch (viewType.value) { case 2: @@ -1026,6 +1028,12 @@ const getPageData = () => { break; case 5: break; + case 8: //group 分组页面 + nextTick(() => { + console.log("获取列表详细信息-------222---------->??????",); + groupPageRef.value.groupColumnSearch(sendData, 1); + }); + break; case 6: nextTick(() => { cardPageRef.value.getCardList(sendData); @@ -1766,6 +1774,7 @@ const tabsView = (val: any, types: number) => { props.viewPage.map.isClick = false; props.viewPage.card.isClick = false; props.viewPage.chart.isClick = false; + props.viewPage.group.isClick = false; break; case 3: props.viewPage.list.isClick = false; @@ -1774,6 +1783,7 @@ const tabsView = (val: any, types: number) => { props.viewPage.map.isClick = false; props.viewPage.card.isClick = false; props.viewPage.chart.isClick = false; + props.viewPage.group.isClick = false; getPageData(); break; case 4: @@ -1783,6 +1793,7 @@ const tabsView = (val: any, types: number) => { props.viewPage.map.isClick = false; props.viewPage.card.isClick = false; props.viewPage.chart.isClick = false; + props.viewPage.group.isClick = false; break; case 5: props.viewPage.list.isClick = false; @@ -1791,6 +1802,7 @@ const tabsView = (val: any, types: number) => { props.viewPage.gantt.isClick = false; props.viewPage.card.isClick = false; props.viewPage.chart.isClick = false; + props.viewPage.group.isClick = false; break; case 6: props.viewPage.list.isClick = false; @@ -1799,6 +1811,7 @@ const tabsView = (val: any, types: number) => { props.viewPage.gantt.isClick = false; props.viewPage.map.isClick = false; props.viewPage.chart.isClick = false; + props.viewPage.group.isClick = false; break; case 7: props.viewPage.card.isClick = false; @@ -1807,6 +1820,16 @@ const tabsView = (val: any, types: number) => { props.viewPage.time.isClick = false; props.viewPage.gantt.isClick = false; props.viewPage.map.isClick = false; + props.viewPage.group.isClick = false; + break; + case 8: + props.viewPage.card.isClick = false; + props.viewPage.list.isClick = false; + props.viewPage.date.isClick = false; + props.viewPage.time.isClick = false; + props.viewPage.gantt.isClick = false; + props.viewPage.map.isClick = false; + props.viewPage.chart.isClick = false; break; default: props.viewPage.date.isClick = false; @@ -1815,6 +1838,7 @@ const tabsView = (val: any, types: number) => { props.viewPage.gantt.isClick = false; props.viewPage.map.isClick = false; props.viewPage.chart.isClick = false; + props.viewPage.group.isClick = false; break; } }; @@ -2113,6 +2137,23 @@ const isObject = (obj: any) => { @click="tabsView(props.viewPage.card, 6)" /> + + + + { - +++++++++++++++++++++ { /> + + + { @click="tabsView(props.viewPage.card, 6)" /> + + + + + { const userStore = useUserStore(); - console.log("判断应用级权限--appSystemPower->",userStore.myPower.appSystemPower) + //console.log("判断应用级权限--appSystemPower->",userStore.myPower.appSystemPower) return userStore.myPower.appSystemPower.some((perm: any) => { - console.log(signCode,"判断应用级权限--->",buttonKey) + //console.log(signCode,"判断应用级权限--->",buttonKey) if(perm.AppId == signCode){ - console.log("判断应用级权限-1111-->",perm.AppId,buttonKey) - console.log("判断应用级权限-222-->",perm.butPower && Array.isArray(perm.butPower)) + // console.log("判断应用级权限-1111-->",perm.AppId,buttonKey) + // console.log("判断应用级权限-222-->",perm.butPower && Array.isArray(perm.butPower)) if(perm.butPower && Array.isArray(perm.butPower)){ // console.log("判断应用级权限--->",perm.AppId,buttonKey) return perm.butPower.includes(buttonKey) @@ -101,15 +101,15 @@ export const appHasPower = (signCode:string,buttonKey:string) => { */ export const formHasPower = (signCode:string,tormCode:string,buttonKey:string,classType:number) => { const userStore = useUserStore(); - console.log("判断表单级权限-1111-->",signCode,userStore.myPower.appSystemPower) + //console.log("判断表单级权限-1111-->",signCode,userStore.myPower.appSystemPower) if(userStore.myPower.appSystemPower && Array.isArray(userStore.myPower.appSystemPower)){ return userStore.myPower.appSystemPower.some((perm: any) => { if(perm.AppId == signCode){ - console.log("判断表单级权限-1112-->",signCode) - console.log("判断表单级权限-1113-->",tormCode) - console.log("判断表单级权限-1114-->",perm.formPower) - console.log("判断表单级权限-1115-->",buttonKey) + // console.log("判断表单级权限-1112-->",signCode) + // console.log("判断表单级权限-1113-->",tormCode) + // console.log("判断表单级权限-1114-->",perm.formPower) + // console.log("判断表单级权限-1115-->",buttonKey) if(perm.formPower && Array.isArray(perm.formPower)){ return perm.formPower.some((formPerm: any) => { switch(classType){ diff --git a/src/views/sysworkflow/lowCodeTasks/index.vue b/src/views/sysworkflow/lowCodeTasks/index.vue index 28789ab..1ca5996 100644 --- a/src/views/sysworkflow/lowCodeTasks/index.vue +++ b/src/views/sysworkflow/lowCodeTasks/index.vue @@ -102,6 +102,13 @@ const stateList = reactive({ title: [], }, }, + group: { + status: false, + isClick: false, + form: { + title: [], + }, + }, time: { status: false, isClick: false, diff --git a/src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue b/src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue index 5402bad..2a38643 100644 --- a/src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue +++ b/src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue @@ -116,6 +116,13 @@ const stateList = reactive({ dayType: 1, }, }, + group: { + status: false, + isClick: false, + form: { + title: [], + }, + }, time: { status: false, isClick: false, @@ -381,6 +388,7 @@ const gainAppFormPageInit = () => { stateList.view.time = stateData.view.time; stateList.view.gantt = stateData.view.gantt; stateList.view.map = stateData.view.map; + stateList.view.group = stateData.view.group; } stateList.view.chart.status = data.data.chart; // console.log("开发---->", stateList.view); @@ -537,7 +545,6 @@ defineExpose({ - { }, }; } + + if(!state.view.group){ + state.view.group={ + status: false, + isClick: false, + form: { + title: [], + }, + } + } } } @@ -852,6 +869,8 @@ const saveFormListData = () => { data: json2string(state), id: props.appPageKey.toString(), }; + console.log(params,"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") + // console.log("添加自定义表单列表设定",params) editCustomerFormList(params).then((data) => { // console.log("添加自定义表单列表设定",data) @@ -1656,6 +1675,16 @@ const delAllPick = () => { + + + + { + + + +
+ + + + + + + +
+
+ { data: json2string(state), id: props.formKey.toString(), }; + console.log(params,"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") // console.log("添加自定义表单列表设定",params) editCustomerFormList(params).then((data) => { // console.log("添加自定义表单列表设定",data) diff --git a/src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue b/src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue index 8144246..5144906 100644 --- a/src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue +++ b/src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue @@ -108,6 +108,13 @@ const stateList = reactive({ title: [], }, }, + group: { + status: false, + isClick: false, + form: { + title: [], + }, + }, time: { status: false, isClick: false, @@ -300,6 +307,7 @@ const initLoadData = () => { stateList.view.time = stateData.view.time; stateList.view.gantt = stateData.view.gantt; stateList.view.map = stateData.view.map; + stateList.view.group = stateData.view.group; } stateList.view.chart.status = data.data.chart; } From f90493883abb2c55321b4ea0b6799abad041ad40 Mon Sep 17 00:00:00 2001 From: han2015 <1019850453@qq.com> Date: Sat, 14 Feb 2026 11:28:55 +0800 Subject: [PATCH 3/3] =?UTF-8?q?table:=20=E4=BF=AE=E5=A4=8Dgroup=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E8=B7=B3=E8=BD=AC=E6=97=B6=E5=B4=A9=E6=BA=83=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/DesignForm/app/groupPage.vue | 78 +++++++++++++++++---- src/components/DesignForm/app/index.vue | 41 +++++++++-- 2 files changed, 98 insertions(+), 21 deletions(-) diff --git a/src/components/DesignForm/app/groupPage.vue b/src/components/DesignForm/app/groupPage.vue index 2dcd504..230af6d 100644 --- a/src/components/DesignForm/app/groupPage.vue +++ b/src/components/DesignForm/app/groupPage.vue @@ -34,7 +34,7 @@ const props = defineProps({ //---------pagination configs------ const totalNum = ref(0) const pageSize = ref(props.searchSend.pagesize) - +const selectedMergeKeys = ref([]) //------------------ by han2015: 支持表单排序功能---------------------- const columnSortData = new Map(); @@ -59,10 +59,66 @@ const onUpdateSort = (data: { prop: string; order: "ascending" | "descending" | } else { columnSortData.delete(data.prop); } - getPageData() + + selectedMergeKeys.value=Array.from(columnSortData.keys()) + getPageData(); } +// 计算合并位置(预处理,避免每次渲染重复计算) +const spanMap = computed(() => { + const map = {} + const pos = {} + // 按优先级排序的合并列,获取排序列 + selectedMergeKeys.value.forEach((key, index) => { + map[key] = [] + pos[key] = 0 + + for (let i = 0; i < tableDataList.value.length; i++) { + if (i === 0) { + map[key][i] = 1 // 第一行总是 1 + pos[key] = 0 + } else { + // 检查:当前列及其所有前置列是否都相同 + let shouldMerge = true + for (let j = 0; j <= index; j++) { + const checkKey = selectedMergeKeys.value[j] + if (tableDataList.value[i][checkKey] !== tableDataList.value[i-1][checkKey]) { + shouldMerge = false + break + } + } + + if (shouldMerge) { + // 合并:累加到合并起始位置,当前位置标记 0 + map[key][pos[key]] += 1 + map[key][i] = 0 + } else { + // 不合并:新开一个合并组 + map[key][i] = 1 + pos[key] = i // 更新合并起始位置 + } + } + } + }) + + return map +}) + + +const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => { + const key = column.property + + if (spanMap.value[key]) { + const rowspan = spanMap.value[key][rowIndex] + return { + rowspan: rowspan, + colspan: rowspan > 0 ? 1 : 0 + } + } + + return { rowspan: 1, colspan: 1 } +} const tableDataList = ref([]) // 表格行数据 const groupColumnSearch = (val:any,clas?:number) =>{ @@ -79,7 +135,7 @@ const handleCurrentChange = (page: number) => { getPageData(); }; -const getPageData=()=>{ +const getPageData=async ()=>{ // by han2015: 处理排序字段信息 let arr:string[]=[]; columnSortData.forEach((value, key) => { @@ -89,21 +145,13 @@ const getPageData=()=>{ let sendData = props.searchSend sendData.sortData= arr.join(", ") sendData.pagesize = 50 - gainFormPageListCont(sendData) + await gainFormPageListCont(sendData) .then(({data})=>{ totalNum.value = data.total tableDataList.value = data.list }) } -const spanMethod = (data: { row: any; rowIndex: number; column: TableColumnCtx; columnIndex: number; }) => { - if(data.rowIndex==1){ - console.log(data.column) - } - -} - - onMounted(()=>{ nextTick(()=>{ getPageData() @@ -114,13 +162,14 @@ defineExpose({ groupColumnSearch }) +