Browse Source

新权限设计完毕

power_master^2
herenshan112 7 days ago
parent
commit
ba70244b96
  1. 12
      src/api/system/roleapi/postrole.ts
  2. 34
      src/components/DesignForm/app/index.vue
  3. 30
      src/components/DesignForm/tableListPage/index.vue
  4. 4
      src/directive/index.ts
  5. 128
      src/directive/permission/button.ts
  6. 52
      src/utils/workflow/const.ts
  7. 134
      src/views/system/monitor/online/index.vue
  8. 11
      src/views/sysworkflow/lowcodepage/appCardPage.vue
  9. 28
      src/views/sysworkflow/lowcodepage/appListPage.vue
  10. 23
      src/views/sysworkflow/lowcodepage/appPage/appMenus.vue
  11. 19
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue
  12. 18
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue
  13. 15
      src/views/sysworkflow/lowcodepage/index.vue
  14. 20
      src/views/sysworkflow/lowcodepage/newLowCode/appLayoutEdit/appContainerPage.vue
  15. 2
      src/views/sysworkflow/lowcodepage/runApp/regularPage.vue
  16. 2
      src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue

12
src/api/system/roleapi/postrole.ts

@ -180,3 +180,15 @@ export function savePickRoleMan(data?: any){
data:data data:data
}); });
} }
/**
@ 作者: 秦东
@ 时间: 2025-12-11 14:23:55
@ :
*/
export function gainAppEmpowerPower(data?: any){
return request({
url: '/systemapi/grant/gainAppEmpowerPower',
method: 'post',
data:data
});
}

34
src/components/DesignForm/app/index.vue

@ -44,6 +44,8 @@ import {
import { formatNumber } from "@/api/DesignForm/utils"; import { formatNumber } from "@/api/DesignForm/utils";
import { formHasPower } from "@/directive/permission/button";
// //
import FormPageCont from "@/components/DesignForm/tableListPage/formPageCont.vue"; import FormPageCont from "@/components/DesignForm/tableListPage/formPageCont.vue";
import TableFlow from "@/views/sysworkflow/lowcodepage/pageFlow/appTableFlow.vue"; import TableFlow from "@/views/sysworkflow/lowcodepage/pageFlow/appTableFlow.vue";
@ -69,7 +71,9 @@ const props = withDefaults(
data: FormPageList; data: FormPageList;
searchData?: attrButton[]; searchData?: attrButton[];
config?: FormPageConfig|any; config?: FormPageConfig|any;
appKey?: string;
formId?: string; formId?: string;
signCode?: string;
beforeRequest?: (params: any, rout: any) => any; beforeRequest?: (params: any, rout: any) => any;
afterResponse?: (result: any) => any | string; afterResponse?: (result: any) => any | string;
beforeDelete?: (params: any, route: any) => any; beforeDelete?: (params: any, route: any) => any;
@ -83,7 +87,6 @@ const props = withDefaults(
delKey?: string; // delKey?: string; //
lookPageIsShow?: boolean; lookPageIsShow?: boolean;
versionid?: string; versionid?: string;
signCode?: string;
pickAppMenu?: any; pickAppMenu?: any;
versiontitle?: string; versiontitle?: string;
viewPage?: viewPageType|any; viewPage?: viewPageType|any;
@ -106,9 +109,15 @@ const props = withDefaults(
dict: () => { dict: () => {
return {}; return {};
}, },
appKey: () => {
return "";
},
formId: () => { formId: () => {
return ""; return "";
}, },
signCode: () => {
return "";
},
versionid: () => { versionid: () => {
return ""; return "";
}, },
@ -1946,14 +1955,18 @@ const isObject = (obj) => {
<el-text v-if="data.controlBtn.length === 0" class="mx-1 tipBox" type="info" <el-text v-if="data.controlBtn.length === 0" class="mx-1 tipBox" type="info"
>操作按钮区域</el-text >操作按钮区域</el-text
> >
<el-button <template v-for="item in data.controlBtn" :key="item.type">
v-for="item in data.controlBtn" <el-button
v-bind="item" v-bind="item"
:key="item.type" v-if="formHasPower(props.pickAppMenu.appkey,props.signCode,item.key,0)"
@click="setUpClick(item)" @click="setUpClick(item)"
> >
{{ item.label }}
</el-button> {{ item.label }}
</el-button>
</template>
</div> </div>
<div> <div>
<el-button-group class="ml-4"> <el-button-group class="ml-4">
@ -2200,6 +2213,7 @@ const isObject = (obj) => {
type="info" type="info"
size="small" size="small"
class="fa fa-edit" class="fa fa-edit"
v-if="formHasPower(props.pickAppMenu.appkey,props.signCode,'bj',0)"
/> />
</el-tooltip> </el-tooltip>
<el-popconfirm <el-popconfirm
@ -2213,7 +2227,7 @@ const isObject = (obj) => {
@cancel="cancelEvent(scope.row)" @cancel="cancelEvent(scope.row)"
> >
<template #reference> <template #reference>
<el-button type="danger" size="small" class="fa fa-trash-o" /> <el-button type="danger" size="small" class="fa fa-trash-o" v-if="formHasPower(props.pickAppMenu.appkey,props.signCode,'sc',0)" />
</template> </template>
</el-popconfirm> </el-popconfirm>

30
src/components/DesignForm/tableListPage/index.vue

@ -38,6 +38,7 @@ import { ElLoading, ElMessage, ElNotification } from "element-plus";
import { softDeletion, retractRunWorkFlow, recalSendMsg } from "@/api/taskapi/management"; import { softDeletion, retractRunWorkFlow, recalSendMsg } from "@/api/taskapi/management";
import { echatsViews } from "@/api/DesignForm/types"; import { echatsViews } from "@/api/DesignForm/types";
import { formatNumber } from "@/api/DesignForm/utils"; import { formatNumber } from "@/api/DesignForm/utils";
import { formHasPower } from "@/directive/permission/button";
// //
import FormPageCont from "@/components/DesignForm/tableListPage/formPageCont.vue"; import FormPageCont from "@/components/DesignForm/tableListPage/formPageCont.vue";
import TableFlow from "@/views/sysworkflow/lowcodepage/pageFlow/tableFlow.vue"; import TableFlow from "@/views/sysworkflow/lowcodepage/pageFlow/tableFlow.vue";
@ -55,7 +56,9 @@ const props = withDefaults(
data: FormPageList; data: FormPageList;
searchData?: attrButton[]; searchData?: attrButton[];
config: FormPageConfig; config: FormPageConfig;
appKey?: string;
formId?: string; formId?: string;
signCode?: string;
beforeRequest?: (params: any, rout: any) => any; beforeRequest?: (params: any, rout: any) => any;
afterResponse?: (result: any) => any | string; afterResponse?: (result: any) => any | string;
beforeDelete?: (params: any, route: any) => any; beforeDelete?: (params: any, route: any) => any;
@ -90,9 +93,15 @@ const props = withDefaults(
dict: () => { dict: () => {
return {}; return {};
}, },
appKey: () => {
return "";
},
formId: () => { formId: () => {
return ""; return "";
}, },
signCode: () => {
return "";
},
versionid: () => { versionid: () => {
return ""; return "";
}, },
@ -1797,14 +1806,17 @@ const isObject = (obj: any) => {
<el-text v-if="data.controlBtn.length === 0" class="mx-1 tipBox" type="info" <el-text v-if="data.controlBtn.length === 0" class="mx-1 tipBox" type="info"
>操作按钮区域</el-text >操作按钮区域</el-text
> >
<el-button <template v-for="item in data.controlBtn" :key="item.type">
v-for="item in data.controlBtn" <el-button
v-bind="item" v-bind="item"
:key="item.type" v-if="formHasPower(props.appKey,props.signCode,item.key,0)"
@click="setUpClick(item)" @click="setUpClick(item)"
> >
{{ item.label }}
{{ item.label }}
</el-button> </el-button>
</template>
</div> </div>
<div> <div>
<el-button-group class="ml-4"> <el-button-group class="ml-4">
@ -2020,6 +2032,7 @@ const isObject = (obj: any) => {
size="small" size="small"
class="fa fa-mail-reply-all" class="fa fa-mail-reply-all"
color="rgb(250, 181.5, 181.5)" color="rgb(250, 181.5, 181.5)"
/> />
</template> </template>
</el-popconfirm> </el-popconfirm>
@ -2050,6 +2063,7 @@ const isObject = (obj: any) => {
type="info" type="info"
size="small" size="small"
class="fa fa-edit" class="fa fa-edit"
v-if="formHasPower(props.appKey,props.signCode,'bj',0)"
/> />
</el-tooltip> </el-tooltip>
<el-popconfirm <el-popconfirm
@ -2063,7 +2077,7 @@ const isObject = (obj: any) => {
@cancel="cancelEvent(scope.row)" @cancel="cancelEvent(scope.row)"
> >
<template #reference> <template #reference>
<el-button type="danger" size="small" class="fa fa-trash-o" /> <el-button v-if="formHasPower(props.appKey,props.signCode,'sc',0)" type="danger" size="small" class="fa fa-trash-o" />
</template> </template>
</el-popconfirm> </el-popconfirm>

4
src/directive/index.ts

@ -1,11 +1,13 @@
import type { App } from 'vue'; import type { App } from 'vue';
import { hasPerm } from './permission'; import { hasPerm } from './permission';
import { hasButton } from './permission/button'; import { hasButton,hasApp,hasAppGroup } from './permission/button';
// 全局注册 directive // 全局注册 directive
export function setupDirective(app: App<Element>) { export function setupDirective(app: App<Element>) {
// 使 v-hasPerm 在所有组件中都可用 // 使 v-hasPerm 在所有组件中都可用
app.directive('hasPerm', hasPerm); app.directive('hasPerm', hasPerm);
app.directive('hasButton', hasButton); app.directive('hasButton', hasButton);
app.directive('hasApp', hasApp);
app.directive('hasAppGroup', hasAppGroup);
} }

128
src/directive/permission/button.ts

@ -21,3 +21,131 @@ export const hasButton: Directive = {
} }
} }
} }
/**
* app权限
*/
export const hasApp: Directive = {
mounted(el: HTMLElement, binding: DirectiveBinding) {
const userStore = useUserStore();
const { value } = binding;
// console.log("app权限",el,"-->",binding,"-->",value,"-->",userStore.myPower.appKeyAry,"-->",userStore.myPower);
// console.log("我的App--->",userStore.myPower)
if (value) {
const requiredPerms = value; // DOM绑定需要的app权限标识
const hasPerm = userStore.myPower.appKeyAry.some((perm: any) => {
return requiredPerms.includes(perm);
});
if (!hasPerm) {
el.parentNode?.removeChild(el);
}
}
}
}
export const hasAppList = (signCode:string) => {
const userStore = useUserStore();
return userStore.myPower.appKeyAry.some((perm: any) => {
return perm.includes(signCode);
});
}
/**
@ 作者: 秦东
@ 时间: 2025-12-11 16:30:08
@ 功能: 自定义App分组指令授权
*/
export const hasAppGroup: Directive = {
mounted(el: HTMLElement, binding: DirectiveBinding) {
const userStore = useUserStore();
const { value } = binding;
// console.log("app权限",el,"-->",binding,"-->",value,"-->",userStore.myPower.appKeyAry,"-->",userStore.myPower);
// console.log("我的App--->",userStore.myPower)
if (value) {
const requiredPerms = value; // DOM绑定需要的app权限标识
const hasPerm = userStore.myPower.appGroupPower.some((perm: any) => {
return requiredPerms.includes(perm);
});
if (!hasPerm) {
el.parentNode?.removeChild(el);
}
}
}
}
/**
@ 作者: 秦东
@ 时间: 2025-12-11 16:39:01
@ 功能: 判断应用级权限
*/
export const appHasPower = (signCode:string,buttonKey:string) => {
const userStore = useUserStore();
return userStore.myPower.appSystemPower.some((perm: any) => {
// console.log("判断应用级权限--->",buttonKey)
if(perm.AppId == signCode){
// 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)
}
}
});
}
/**
@ 作者: 秦东
@ 时间: 2025-12-12 09:33:21
@ 功能: 判断表单级权限
*/
export const formHasPower = (signCode:string,tormCode:string,buttonKey:string,classType:int) => {
const userStore = useUserStore();
// console.log("判断表单级权限-1111-->",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)
if(perm.formPower && Array.isArray(perm.formPower)){
return perm.formPower.some((formPerm: any) => {
switch(classType){
case 1:
return formPerm.AppId == tormCode && formPerm.tablePower.includes(buttonKey);
break;
case 2:
return formPerm.AppId == tormCode && formPerm.PagePower.includes(buttonKey);
break;
default:
return formPerm.AppId == tormCode && formPerm.listPower.includes(buttonKey);
break;
}
});
}
}
});
}
}
/**
@ 作者: 秦东
@ 时间: 2025-12-12 13:42:40
@ 功能: 判断自定义App菜单
*/
export const hasCustomAppMenu = (appKey:string,menuKey:string) => {
console.log("判断自定义App菜单--->",appKey,menuKey)
const userStore = useUserStore();
if(userStore.myPower.appSystemPower && Array.isArray(userStore.myPower.appSystemPower)){
return userStore.myPower.appSystemPower.some((perm: any) => {
if(perm.AppId == appKey){
if(perm.formTrue && Array.isArray(perm.formTrue)){
return perm.formTrue.includes(menuKey);
}
}
});
}
return false;
}

52
src/utils/workflow/const.ts

@ -406,10 +406,54 @@ export let appTableBut = [
@ 功能: 列表按钮 @ 功能: 列表按钮
*/ */
export let appListBut = [ export let appListBut = [
{ label: '新增',value: 'xz',key:1}, { label: '新增',value: 'newAdd',key:1},
{ label: '导入',value: 'dr',key:2}, { label: '导入',value: 'import',key:2},
{ label: '导出 ',value: 'dc',key:3}, { label: '导出 ',value: 'export',key:3},
{ label: '删除',value: 'sc',key:4}, { label: '删除',value: 'sc',key:4},
{ label: '打印',value: 'dy',key:5}, { label: '打印',value: 'dy',key:5},
{ label: '打印二维码',value: 'dyewm',key:6} { label: '打印二维码',value: 'showQrCode',key:6},
{ label: '批量删除',value: 'del',key:7},
{ label: '编辑',value: 'bj',key:8},
]
/**
@ 作者: 秦东
@ 时间: 2025-05-15 08:06:57
@ 功能: 自定义App详情按钮
*/
export let appDetailBut = [
{ label: '编辑App',value: 'bjapp',key:1},
{ label: '删除App',value: 'scapp',key:2},
{ label: '新增表单分组',value: 'xzfg',key:3},
{ label: '删除表单分组',value: 'scfg',key:4},
{ label: '移动表单分组',value: 'yzfg',key:5},
{ label: '新增表单',value: 'xz',key:6},
{ label: '编辑表单',value: 'bj',key:7},
{ label: '删除表单',value: 'sc',key:8},
{ label: '移动表单',value: 'yz',key:9},
{ label: '集成&自动化',value: 'jczdh',key:10},
{ label: '应用设置',value: 'yysz',key:11},
{ label: '应用发布',value: 'yyfb',key:12},
]
/**
@ 作者: 秦东
@ 时间: 2025-12-10 14:09:42
@ 功能: 表单基础功能
*/
export let formBaseBut = [
{ label: '流程设计',value: 'lc',key:1},
{ label: '列表设计',value: 'lb',key:2},
{ label: '数据看板',value: 'sj',key:3},
{ label: '打印设计',value: 'dy',key:4},
{ label: '内容呈现设计',value: 'nc',key:5},
]
/**
@ 作者: 秦东
@ 时间: 2025-12-10 14:11:25
@ 功能: 自定义App分组级权限
*/
export let appGroupBut = [
{ label: '新增分组',value: 'xz',key:1},
{ label: '删除分组',value: 'dl',key:2},
{ label: '编辑分组',value: 'bj',key:3},
{ label: '新增App',value: 'xzapp',key:4},
] ]

134
src/views/system/monitor/online/index.vue

@ -9,11 +9,12 @@ import type { TreeInstance } from 'element-plus'
import type {RoleListTree,RoleFormInfo,orgAndPostisListTree} from '@/api/role/types' import type {RoleListTree,RoleFormInfo,orgAndPostisListTree} from '@/api/role/types'
import { getOrgTreeList } from "@/api/hr/org/index"; import { getOrgTreeList } from "@/api/hr/org/index";
import { appPowerUnit } from "@/api/system/roleapi/power"; import { appPowerUnit } from "@/api/system/roleapi/power";
import type { getSystemPower,AppPowerTree,systemList } from "@/api/system/roleapi/types"; import type { getSystemPower,AppPowerTree,systemList,custerAppInfo } from "@/api/system/roleapi/types";
import { gainAppList,gainAppTableListNew,getPowerPageUser,systemAppAuthorization } from "@/api/system/roleapi/postrole"; import { gainAppList,gainAppTableListNew,getPowerPageUser,systemAppAuthorization,gainAppEmpowerPower } from "@/api/system/roleapi/postrole";
import { appTableBut, appListBut } from "@/utils/workflow/const"; import { appTableBut, appListBut,appDetailBut,formBaseBut,appGroupBut } from "@/utils/workflow/const";
import { Search } from '@element-plus/icons-vue' import { Search } from '@element-plus/icons-vue'
import SetRolePeople from '@/views/system/monitor/online/roleConfig/setRolePeople.vue' import SetRolePeople from '@/views/system/monitor/online/roleConfig/setRolePeople.vue'
import AddRoleGroup from '@/views/system/monitor/online/roleConfig/addRoleGroup.vue' import AddRoleGroup from '@/views/system/monitor/online/roleConfig/addRoleGroup.vue'
import EditRoleGroup from '@/views/system/monitor/online/roleConfig/editRoleGroup.vue' import EditRoleGroup from '@/views/system/monitor/online/roleConfig/editRoleGroup.vue'
@ -43,6 +44,8 @@ const activeAppId = ref<string>("");
const appTableList = ref<custerAppTablePower[]>([]); const appTableList = ref<custerAppTablePower[]>([]);
const myAppTableLoad = ref(false) const myAppTableLoad = ref(false)
const appSystemConfig = ref<any[]>([])
const appFormButConfig = ref<any[]>([])
const props = { const props = {
value: 'id', value: 'id',
label: 'label', label: 'label',
@ -318,10 +321,13 @@ const getAppTableList = (number:boolean) => {
console.log("获取对应App下边的表单---number---->",number,activeAppId.value) console.log("获取对应App下边的表单---number---->",number,activeAppId.value)
if(activeAppId.value){ if(activeAppId.value){
systemPower.value.appId = activeAppId.value.toString() systemPower.value.appId = activeAppId.value.toString()
gainAppTableListNew({id:activeAppId.value,appType:systemPower.value.appSystem,powerType:systemPower.value.powerType,roleId:systemPower.value.roleId}).then(
gainAppEmpowerPower({id:activeAppId.value,appType:systemPower.value.appSystem,powerType:systemPower.value.powerType,roleId:systemPower.value.roleId}).then(
(data: any) => { (data: any) => {
// console.log("App", data); console.log("获取对应App下边的表单", data);
if (Array.isArray(data.data)) { appSystemConfig.value = data.data.groupButPower;
appFormButConfig.value = data.data.formButPower
if (Array.isArray(data.data.list)) {
if(number){ if(number){
data.data.forEach((item:any)=>{ data.data.forEach((item:any)=>{
item.tableIsAll = true item.tableIsAll = true
@ -329,13 +335,38 @@ const getAppTableList = (number:boolean) => {
item.listPower = [ "xz", "dr", "dc", "sc", "dy", "dyewm"] item.listPower = [ "xz", "dr", "dc", "sc", "dy", "dyewm"]
}) })
} }
appTableList.value = data.data; appTableList.value = data.data.list;
} else { } else {
appTableList.value = []; appTableList.value = [];
} }
myAppTableLoad.value = false myAppTableLoad.value = false
} }
); );
// gainAppTableListNew({id:activeAppId.value,appType:systemPower.value.appSystem,powerType:systemPower.value.powerType,roleId:systemPower.value.roleId}).then(
// (data: any) => {
// console.log("App", data);
// appSystemConfig.value = data.data.groupButPower;
// appFormButConfig.value = data.data.formButPower
// if (Array.isArray(data.data.list)) {
// if(number){
// data.data.forEach((item:any)=>{
// item.tableIsAll = true
// item.tablePower = [ "zc", "tj", "dy", "sc", "fz"]
// item.listPower = [ "xz", "dr", "dc", "sc", "dy", "dyewm"]
// })
// }
// appTableList.value = data.data.list;
// } else {
// appTableList.value = [];
// }
// myAppTableLoad.value = false
// }
// );
}else{ }else{
myAppTableLoad.value = false myAppTableLoad.value = false
} }
@ -373,9 +404,10 @@ const pickAppList = (val: custerAppInfo) => {
}; };
const pickAppTableList = (val: custerAppInfo) =>{ const pickAppTableList = (val: custerAppInfo) =>{
console.log("选择应用-22222--111111->",val,appTableList.value) console.log("选择应用-22222--111111->",val.isPick,val,appTableList.value)
systemPower.value.isPick = !val.pickAll systemPower.value.isPick = !val.pickAll
if(val.isPick){ if(val.isPick){
appTableList.value.forEach((item:any)=>{ appTableList.value.forEach((item:any)=>{
// console.log("-22222--333333->",val.isPick) // console.log("-22222--333333->",val.isPick)
item.tableIsAll = !val.pickAll item.tableIsAll = !val.pickAll
@ -383,14 +415,26 @@ const pickAppTableList = (val: custerAppInfo) =>{
item.listIsAll = true item.listIsAll = true
item.tablePower = [ "zc", "tj", "dy", "sc", "fz"] item.tablePower = [ "zc", "tj", "dy", "sc", "fz"]
item.listPower = [ "xz", "dr", "dc", "sc", "dy", "dyewm"] item.listPower = [ "xz", "dr", "dc", "sc", "dy", "dyewm"]
item.tablePagePower = ['lc', 'lb', 'sj', 'dy', 'nc']
}else{ }else{
item.listIsAll = false item.listIsAll = false
item.tablePower = [] item.tablePower = []
item.listPower = [] item.listPower = []
item.tablePagePower = []
} }
}) })
} }else{
appFormButConfig.value = []
}
if(!val.pickAll){
console.log("选择应用-22222--333333->",val.pickAll)
appFormButConfig.value = ["bjapp","scapp","xzfg","scfg","yzfg","xz","bj","sc","yz","jczdh","yysz","yyfb"]
}else{
console.log("选择应用-22222--44444->",val.pickAll)
appFormButConfig.value = []
}
console.log("选择应用-22222--5555555->",appFormButConfig.value)
} }
//-22222--333333-> //-22222--333333->
const pickOneAppTableList = (item: any) =>{ const pickOneAppTableList = (item: any) =>{
@ -399,9 +443,11 @@ const pickOneAppTableList = (item: any) =>{
if(!item.listIsAll){ if(!item.listIsAll){
item.tablePower = [ "zc", "tj", "dy", "sc", "fz"] item.tablePower = [ "zc", "tj", "dy", "sc", "fz"]
item.listPower = [ "xz", "dr", "dc", "sc", "dy", "dyewm"] item.listPower = [ "xz", "dr", "dc", "sc", "dy", "dyewm"]
item.tablePagePower = ['lc', 'lb', 'sj', 'dy', 'nc']
}else{ }else{
item.tablePower = [] item.tablePower = []
item.listPower = [] item.listPower = []
item.tablePagePower = []
} }
} }
@ -456,6 +502,9 @@ const savePowerUserSub = () => {
const savePowerAppSub = () => { const savePowerAppSub = () => {
console.log("提交应用授权--app-1---->",systemPower.value) console.log("提交应用授权--app-1---->",systemPower.value)
console.log("提交应用授权--app-2---->",appTableList.value) console.log("提交应用授权--app-2---->",appTableList.value)
console.log("提交应用授权--app-3---appSystemConfig->",appSystemConfig.value)
console.log("提交应用授权--app-3---appFormButConfig->",appFormButConfig.value)
let sendInfo = { let sendInfo = {
powerType: systemPower.value.powerType, powerType: systemPower.value.powerType,
appId: systemPower.value.appId, appId: systemPower.value.appId,
@ -463,7 +512,9 @@ const savePowerAppSub = () => {
roleId: systemPower.value.roleId, roleId: systemPower.value.roleId,
isPick: systemPower.value.isPick, isPick: systemPower.value.isPick,
sysstemPowerInfo: systemPowerTree.value, sysstemPowerInfo: systemPowerTree.value,
CustomizeApp:appTableList.value CustomizeApp:appTableList.value,
appSystemConfig:appSystemConfig.value,
appFormButConfig:appFormButConfig.value,
} }
console.log("提交应用授权--app-3---->",sendInfo) console.log("提交应用授权--app-3---->",sendInfo)
systemAppAuthorization(sendInfo).then((data)=>{ systemAppAuthorization(sendInfo).then((data)=>{
@ -759,8 +810,10 @@ onMounted(()=>{
<thead> <thead>
<tr > <tr >
<td align="center" width="10%">应用分组</td>
<td align="center" width="20%">应用</td> <td align="center" width="20%">应用</td>
<td width="80%"> <td align="center" width="10%">操作按钮</td>
<td width="60%">
<div class="appPickPower"> <div class="appPickPower">
应用详情 应用详情
<el-button type="primary" size="small" @click="savePowerAppSub">确定授权</el-button> <el-button type="primary" size="small" @click="savePowerAppSub">确定授权</el-button>
@ -770,6 +823,18 @@ onMounted(()=>{
</thead> </thead>
<tbody> <tbody>
<tr > <tr >
<td valign="top">
<el-checkbox-group v-model="appSystemConfig">
<el-checkbox
v-for="city in appGroupBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</td>
<td valign="top"> <td valign="top">
<el-scrollbar class="tab_pane_box"> <el-scrollbar class="tab_pane_box">
<ul class="appListBox"> <ul class="appListBox">
@ -779,29 +844,56 @@ onMounted(()=>{
</li> </li>
</ul> </ul>
</el-scrollbar> </el-scrollbar>
</td>
<td valign="top">
<el-checkbox-group v-model="appFormButConfig">
<el-checkbox
v-for="city in appDetailBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</td> </td>
<td valign="top"> <td valign="top">
<el-row class="row_head"> <el-row class="row_head">
<el-col class="roe_col_head left_line" :span="6"> <el-col class="roe_col_head left_line" :span="5">
页面 页面
</el-col>
<el-col class="roe_col_head left_line" :span="5">
页面权力
</el-col> </el-col>
<el-col class="roe_col_head left_line" :span="6"> <el-col class="roe_col_head left_line" :span="4">
表单权力 表单权力
</el-col> </el-col>
<el-col class="roe_col_head left_line" :span="6"> <el-col class="roe_col_head left_line" :span="5">
列表权限 列表权限
</el-col> </el-col>
<el-col class="roe_col_head" :span="6"> <el-col class="roe_col_head" :span="5">
数据权限 数据权限
</el-col> </el-col>
</el-row> </el-row>
<el-scrollbar v-loading="myAppTableLoad" class="tab_pane_body"> <el-scrollbar v-loading="myAppTableLoad" class="tab_pane_body">
<el-row class="left_right" v-for="item in appTableList" :key="item.id"> <el-row class="left_right" v-for="item in appTableList" :key="item.id">
<el-col class="roe_col_head left_line" :span="6"> <el-col class="roe_col_head left_line" :span="5">
<el-checkbox @click.stop="pickOneAppTableList(item)" v-model="item.listIsAll" :value="item.listIsAll"></el-checkbox> <el-checkbox @click.stop="pickOneAppTableList(item)" v-model="item.listIsAll" :value="item.listIsAll"></el-checkbox>
{{ item.name }} {{ item.name }}
</el-col> </el-col>
<el-col class="roe_col_head left_line" :span="6"> <el-col class="roe_col_head left_line" :span="5">
<el-checkbox-group v-model="item.tablePagePower">
<el-checkbox
v-for="city in formBaseBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</el-col>
<el-col class="roe_col_head left_line" :span="4">
<el-checkbox-group v-model="item.tablePower"> <el-checkbox-group v-model="item.tablePower">
<el-checkbox <el-checkbox
v-for="city in appTableBut" v-for="city in appTableBut"
@ -813,7 +905,7 @@ onMounted(()=>{
</el-checkbox> </el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-col> </el-col>
<el-col class="roe_col_head left_line" :span="6"> <el-col class="roe_col_head left_line" :span="5">
<el-checkbox-group v-if="item.istIsTrue" v-model="item.listPower"> <el-checkbox-group v-if="item.istIsTrue" v-model="item.listPower">
<el-checkbox <el-checkbox
v-for="city in appListBut" v-for="city in appListBut"
@ -825,7 +917,7 @@ onMounted(()=>{
</el-checkbox> </el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-col> </el-col>
<el-col class="roe_col_head" :span="6"> <el-col class="roe_col_head" :span="5">
<el-radio-group <el-radio-group
v-model="item.datePower.types" v-model="item.datePower.types"

11
src/views/sysworkflow/lowcodepage/appCardPage.vue

@ -17,6 +17,7 @@ import {
appJwtPower, appJwtPower,
getFieldRecord, getFieldRecord,
} from "@/api/DesignForm/requestapi"; } from "@/api/DesignForm/requestapi";
import { appHasPower } from "@/directive/permission/button";
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ -378,7 +379,7 @@ const handleCurrentChange = (val: any) => {
<template> <template>
<div> <div>
<div v-loading="loadingApp" class="content1 flex flex-wrap gap-4"> <div v-loading="loadingApp" class="content1 flex flex-wrap gap-4">
<el-card v-for="item in contList" :key="item.id" class="cardBox"> <el-card v-for="item in contList" v-hasApp="[item.signCodeStr]" :key="item.id" class="cardBox">
<template #header v-if="item.isEdit"> <template #header v-if="item.isEdit">
<el-dropdown v-if="item.classify == 3"> <el-dropdown v-if="item.classify == 3">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
@ -386,8 +387,8 @@ const handleCurrentChange = (val: any) => {
</span> </span>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item @click="editForm(item)">编辑</el-dropdown-item> <el-dropdown-item v-if="appHasPower(item.signCodeStr,'bjapp')" @click="editForm(item)">编辑</el-dropdown-item>
<el-dropdown-item @click="eidtStatus(item)" divided <el-dropdown-item v-if="appHasPower(item.signCodeStr,'scapp')" @click="eidtStatus(item)" divided
>删除</el-dropdown-item >删除</el-dropdown-item
> >
</el-dropdown-menu> </el-dropdown-menu>
@ -399,9 +400,9 @@ const handleCurrentChange = (val: any) => {
</span> </span>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item @click="editFormApp(item)">编辑</el-dropdown-item> <el-dropdown-item v-if="appHasPower(item.signCodeStr,'bjapp')" @click="editFormApp(item)">1</el-dropdown-item>
<el-dropdown-item @click="eidtStatus(item)" divided <el-dropdown-item @click="eidtStatus(item)" divided
>删除</el-dropdown-item v-if="appHasPower(item.signCodeStr,'scapp')">删除</el-dropdown-item
> >
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>

28
src/views/sysworkflow/lowcodepage/appListPage.vue

@ -19,7 +19,8 @@ import {
import AppContainer from '@/views/sysworkflow/lowcodepage/newLowCode/appLayout/appContainer.vue' import AppContainer from '@/views/sysworkflow/lowcodepage/newLowCode/appLayout/appContainer.vue'
import AppContainerPage from '@/views/sysworkflow/lowcodepage/newLowCode/appLayoutEdit/appContainerPage.vue' // import AppContainerPage from '@/views/sysworkflow/lowcodepage/newLowCode/appLayoutEdit/appContainerPage.vue' //
import LowCodeFormPage from "@/views/sysworkflow/lowcodepage/lowCodeFormPage.vue" import LowCodeFormPage from "@/views/sysworkflow/lowcodepage/lowCodeFormPage.vue"
import { hasAppList } from "@/directive/permission/button";
import { appHasPower } from "@/directive/permission/button";
const props = defineProps({ const props = defineProps({
searchQuery:{ searchQuery:{
@ -358,12 +359,21 @@ const handleCurrentChange = (val:any) =>{
props.searchQuery.page = val props.searchQuery.page = val
getFormAppList(props.searchQuery); getFormAppList(props.searchQuery);
} }
/**
@ 作者: 秦东
@ 时间: 2024-08-09 11:28:39
@ 功能: 表格行样式
*/
const tableRowClassName = ({ row, rowIndex }: any) => {
console.log("表格行样式",row,hasAppList(row.signCodeStr))
return hasAppList(row.signCodeStr) ? '' : 'hidden_row';
}
</script> </script>
<template> <template>
<div class="listBody"> <div class="listBody">
<el-table v-loading="loadingApp" :data="contList" border class="tableBox"> <el-table v-loading="loadingApp" :data="contList" border class="tableBox" :row-class-name="tableRowClassName">
<el-table-column fixed label="封面" width="80" align="center"> <el-table-column fixed label="封面" width="80" align="center">
<template #default="scope"> <template #default="scope" >
<el-image <el-image
style="width: 30px; height: 30px" style="width: 30px; height: 30px"
:src="scope.row.icon?scope.row.icon:'https://docu.hxgk.group/images/2024_04/482167d1bf2b75a5717bcf68e18235f7.png'" :src="scope.row.icon?scope.row.icon:'https://docu.hxgk.group/images/2024_04/482167d1bf2b75a5717bcf68e18235f7.png'"
@ -405,20 +415,20 @@ const handleCurrentChange = (val:any) =>{
<el-button-group v-if="scope.row.classify==3" class="ml-4"> <el-button-group v-if="scope.row.classify==3" class="ml-4">
<el-button size="small" title="查看" :icon="View" @click="lookAppList(scope.row)" /> <el-button size="small" title="查看" :icon="View" @click="lookAppList(scope.row)" />
<el-button size="small" title="设为常用" :icon="Star" :color="scope.row.isoften?'#FF0000':''" @click="setOften(scope.row)" /> <el-button size="small" title="设为常用" :icon="Star" :color="scope.row.isoften?'#FF0000':''" @click="setOften(scope.row)" />
<el-button size="small" title="编辑" type="success" :icon="Edit" @click="editForm(scope.row)" /> <el-button v-if="appHasPower(scope.row.signCodeStr,'bjapp')" size="small" title="编辑" type="success" :icon="Edit" @click="editForm(scope.row)" />
<el-popconfirm title="请问是否真的删除?删除后数据将无法找回!" @confirm="delFormApp(scope.row)"> <el-popconfirm title="请问是否真的删除?删除后数据将无法找回!" @confirm="delFormApp(scope.row)">
<template #reference> <template #reference>
<el-button size="small" title="删除" type="danger" :icon="Delete" /> <el-button v-if="appHasPower(scope.row.signCodeStr,'scapp')" size="small" title="删除" type="danger" :icon="Delete" />
</template> </template>
</el-popconfirm> </el-popconfirm>
</el-button-group> </el-button-group>
<el-button-group v-else class="ml-4"> <el-button-group v-else class="ml-4">
<el-button size="small" title="查看" :icon="View" @click="lookFormList(scope.row)" /> <el-button size="small" title="查看" :icon="View" @click="lookFormList(scope.row)" />
<el-button size="small" title="编辑" type="success" :icon="Edit" @click="editFormApp(scope.row)" /> <el-button v-if="appHasPower(scope.row.signCodeStr,'bjapp')" size="small" title="编辑" type="success" :icon="Edit" @click="editFormApp(scope.row)" />
<el-popconfirm title="请问是否真的删除?删除后数据将无法找回!" @confirm="delFormApp(scope.row)"> <el-popconfirm title="请问是否真的删除?删除后数据将无法找回!" @confirm="delFormApp(scope.row)">
<template #reference> <template #reference>
<el-button size="small" title="删除" type="danger" :icon="Delete" /> <el-button v-if="appHasPower(scope.row.signCodeStr,'scapp')" size="small" title="删除" type="danger" :icon="Delete" />
</template> </template>
</el-popconfirm> </el-popconfirm>
</el-button-group> </el-button-group>
@ -463,9 +473,13 @@ const handleCurrentChange = (val:any) =>{
} }
.listBody{ .listBody{
padding: 10px 10px; padding: 10px 10px;
:deep .el-table__body .hidden_row {
display: none;
}
} }
.tableBox{ .tableBox{
width: 100%; width: 100%;
height: calc(100vh - 370px); height: calc(100vh - 370px);
} }
</style> </style>

23
src/views/sysworkflow/lowcodepage/appPage/appMenus.vue

@ -1,4 +1,4 @@
<!-- <!--
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-04-22 08:56:40 @ 时间: 2024-04-22 08:56:40
@ 备注: @ 备注:
@ -16,6 +16,7 @@ import {
delAppMenu, delAppMenu,
editAppMenusIcon, editAppMenusIcon,
} from "@/api/DesignForm/requestapi"; } from "@/api/DesignForm/requestapi";
import { appHasPower,hasCustomAppMenu } from "@/directive/permission/button";
import SvgIcon from "@/components/SvgIcon/index.vue"; import SvgIcon from "@/components/SvgIcon/index.vue";
import { threeShiyanData } from "@/api/date/type"; import { threeShiyanData } from "@/api/date/type";
@ -308,7 +309,7 @@ const allowDrop = (draggingNode: Node, dropNode: Node, type: AllowDropType) => {
@ 功能: 打开app表单 @ 功能: 打开app表单
*/ */
const openAppPage = (val: any) => { const openAppPage = (val: any) => {
// console.log("app------>",val) console.log("打开app表单------>",val)
if (val.isLock == 1) { if (val.isLock == 1) {
ElMessage({ ElMessage({
showClose: true, showClose: true,
@ -343,7 +344,7 @@ const moveMenus = (val: any) => {
@node-drop="handleDrop" @node-drop="handleDrop"
> >
<template #default="{ node, data }"> <template #default="{ node, data }">
<div class="appMenuTitle"> <div class="appMenuTitle" >
<el-space wrap> <el-space wrap>
<el-image <el-image
v-if="data.icon != ''" v-if="data.icon != ''"
@ -360,22 +361,24 @@ const moveMenus = (val: any) => {
<!-- <el-tooltip :content="node.label" placement="top" effect="dark"> <!-- <el-tooltip :content="node.label" placement="top" effect="dark">
<el-text class="w-120px mb-2" truncated @click="openAppPage(data)">{{node.label}}</el-text> <el-text class="w-120px mb-2" truncated @click="openAppPage(data)">{{node.label}}</el-text>
</el-tooltip> --> </el-tooltip> -->
<el-text class="w-120px mb-2" truncated @click="openAppPage(data)">{{ <el-text class="w-120px mb-2" truncated @click="openAppPage(data)">
node.label {{ data.label}}
}}</el-text>
</el-text>
</el-space> </el-space>
<el-dropdown> <el-dropdown>
<svg-icon class="svgBox" prefix="icon" icon-class="set" /> <svg-icon class="svgBox" prefix="icon" icon-class="set" />
<template #dropdown> <template #dropdown>
<el-dropdown-item @click="editMenuName(data)">修改名称</el-dropdown-item> <el-dropdown-item @click="editMenuName(data)">修改名称</el-dropdown-item>
<!-- <el-dropdown-item @click="">复制</el-dropdown-item> --> <!-- <el-dropdown-item @click="">复制</el-dropdown-item> -->
<el-dropdown-item @click="moveMenus(data)" divided>移动到</el-dropdown-item> <el-dropdown-item v-if="appHasPower(props.formKey,'yz')" @click="moveMenus(data)" divided>移动到</el-dropdown-item>
<el-dropdown-item v-if="data.type == 1" @click="addNewSunMenuGroup(data)" <el-dropdown-item v-if="data.type == 1 && appHasPower(props.formKey,'xzfg')" @click="addNewSunMenuGroup(data)"
>新建子分组</el-dropdown-item >新建子分组</el-dropdown-item
> >
<!-- <el-dropdown-item @click="">新建普通表单</el-dropdown-item> <!-- <el-dropdown-item @click="">新建普通表单</el-dropdown-item>
<el-dropdown-item @click="">新建流程表单</el-dropdown-item> --> <el-dropdown-item @click="">新建流程表单</el-dropdown-item> -->
<el-dropdown-item v-if="data.type == 1" @click="createNewPage(data.id)" <el-dropdown-item v-if="data.type == 1 && appHasPower(props.formKey,'xz')" @click="createNewPage(data.id)"
>新建页面</el-dropdown-item >新建页面</el-dropdown-item
> >
<el-dropdown-item @click="showOrHide(data, 1)" divided <el-dropdown-item @click="showOrHide(data, 1)" divided
@ -386,7 +389,7 @@ const moveMenus = (val: any) => {
><el-text v-if="data.wapIsShow == 1">隐藏移动端</el-text ><el-text v-if="data.wapIsShow == 1">隐藏移动端</el-text
><el-text v-else>取消-隐藏移动端</el-text></el-dropdown-item ><el-text v-else>取消-隐藏移动端</el-text></el-dropdown-item
> >
<el-dropdown-item @click="editAppMenu(data)" divided> <el-dropdown-item @click="editAppMenu(data) && appHasPower(props.formKey,'sc')" divided>
<el-text class="mx-1" type="danger">删除</el-text> <el-text class="mx-1" type="danger">删除</el-text>
</el-dropdown-item> </el-dropdown-item>
</template> </template>

19
src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue

@ -14,7 +14,7 @@ import request from "@/utils/request";
import { gainAppPageInfo, getFieldRecord } from "@/api/DesignForm/requestapi"; import { gainAppPageInfo, getFieldRecord } from "@/api/DesignForm/requestapi";
import { Edit, Picture as IconPicture } from "@element-plus/icons-vue"; import { Edit, Picture as IconPicture } from "@element-plus/icons-vue";
import { appPageDataInit, appWorkFlow } from "@/api/date/type"; import { appPageDataInit, appWorkFlow } from "@/api/date/type";
import { appHasPower } from "@/directive/permission/button";
// //
import AppFlowSee from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/appFlow/appFlowSee.vue"; import AppFlowSee from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/appFlow/appFlowSee.vue";
import ContainerPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/container.vue"; import ContainerPath from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/echatesUnit/container.vue";
@ -58,8 +58,8 @@ const stateForm = reactive<any>({
}, },
dict: {}, dict: {},
formId: "1", formId: "1",
signCode: "",
id: 0, id: 0,
formId: 0,
versionId: 0, versionId: 0,
loading: true, loading: true,
}); });
@ -197,8 +197,8 @@ const emits = defineEmits(["editAppInfo"]);
@ 时间: 2024-05-18 14:04:20 @ 时间: 2024-05-18 14:04:20
@ 功能: 获取App页面预览信息 @ 功能: 获取App页面预览信息
*/ */
const editAppPage = (signCode: string) => { const editAppPage = (signCode: string, appPageKey: string) => {
emits("editAppInfo", signCode); emits("editAppInfo", signCode, appPageKey);
}; };
const activePage = ref(0); // const activePage = ref(0); //
@ -386,9 +386,10 @@ const gainAppFormPageInit = () => {
// console.log("---->", stateList.view); // console.log("---->", stateList.view);
} }
if (data.data.page) { if (data.data.page) {
// console.log("data.data.mastesform", data.data); console.log("data.data.mastesform", data.data);
stateForm.id = data.data.appForm.version.toString(); stateForm.id = data.data.appForm.version.toString();
stateForm.formId = data.data.appForm.cfid.toString(); stateForm.formId = data.data.appForm.cfid.toString();
stateForm.signCode = data.data.signCode.toString();
stateForm.versionId = data.data.appForm.id.toString(); stateForm.versionId = data.data.appForm.id.toString();
stateForm.formData = stringToObj(data.data.appForm.mastesform); stateForm.formData = stringToObj(data.data.appForm.mastesform);
// console.log(stateForm.formData); // console.log(stateForm.formData);
@ -518,7 +519,7 @@ defineExpose({
<el-row v-if="props.menusInfo"> <el-row v-if="props.menusInfo">
<el-col :span="24" class="pageBox pageHeader"> <el-col :span="24" class="pageBox pageHeader">
<el-text class="wordFont">{{ props.menusInfo.label }}</el-text> <el-text class="wordFont">{{ props.menusInfo.label }}</el-text>
<el-button type="primary" :icon="Edit" @click="editAppPage(stateForm.formId)" <el-button v-if="appHasPower(props.formKey,'bj')" type="primary" :icon="Edit" @click="editAppPage(stateForm.formId,stateForm.signCode)"
>编辑App页面</el-button >编辑App页面</el-button
> >
</el-col> </el-col>
@ -533,12 +534,18 @@ defineExpose({
<el-col v-if="activePage != 3" :span="24" class="pageBoxInfo"> <el-col v-if="activePage != 3" :span="24" class="pageBoxInfo">
<el-card class="tispMsg" shadow="always"> <el-card class="tispMsg" shadow="always">
<el-scrollbar class="suojing"> <el-scrollbar class="suojing">
<!-- {{ props.formKey }}
{{ stateForm }} -->
<ak-page-list <ak-page-list
v-if="activePage == 1" v-if="activePage == 1"
:data="stateList.tableData" :data="stateList.tableData"
:search-data="stateList.searchData" :search-data="stateList.searchData"
:config="stateList.config" :config="stateList.config"
:app-key="props.formKey"
:form-id="stateForm.formId" :form-id="stateForm.formId"
:sign-code="stateForm.signCode"
:versionid="versionId" :versionid="versionId"
:versiontitle="versionTitle" :versiontitle="versionTitle"
v-model:look-page-is-show="lookPageIsShow" v-model:look-page-is-show="lookPageIsShow"

18
src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue

@ -9,6 +9,9 @@ import { formStruct } from "@/api/DesignForm/types";
import { customerFormConfig } from "@/api/DesignForm/type"; import { customerFormConfig } from "@/api/DesignForm/type";
import { getProductionMarkForm } from "@/api/DesignForm/requestapi"; import { getProductionMarkForm } from "@/api/DesignForm/requestapi";
import { formHasPower } from "@/directive/permission/button";
import PageForm from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue"; import PageForm from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageForm.vue";
import PageFlow from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue"; import PageFlow from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue";
import PageList from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageList.vue"; import PageList from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/pageList.vue";
@ -52,6 +55,10 @@ const props = defineProps({
type: String, type: String,
default: "", default: "",
}, },
signCode: {
type: String,
default: "",
},
}); });
const emits = defineEmits([ const emits = defineEmits([
"update:isShow", "update:isShow",
@ -150,6 +157,7 @@ onBeforeMount(() => {
types: 3, types: 3,
}; };
if (props.isNew) { if (props.isNew) {
// eslint-disable-next-line vue/no-mutating-props
props.appPageKey = ""; props.appPageKey = "";
state.formData.list = []; state.formData.list = [];
formVersion.value = ""; formVersion.value = "";
@ -229,11 +237,11 @@ onBeforeMount(() => {
class="tabsMain" class="tabsMain"
> >
<el-tab-pane label="① 页面管理" :name="1"> </el-tab-pane> <el-tab-pane label="① 页面管理" :name="1"> </el-tab-pane>
<el-tab-pane label="② 流程设计" :name="2"> </el-tab-pane> <el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'lc',2)" label="② 流程设计" :name="2"> </el-tab-pane>
<el-tab-pane label="③ 列表设计" :name="3"> </el-tab-pane> <el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'lb',2)" label="③ 列表设计" :name="3"> </el-tab-pane>
<el-tab-pane label="④ 数据看板" :name="4"> </el-tab-pane> <el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'sjc',2)" label="④ 数据看板" :name="4"> </el-tab-pane>
<el-tab-pane label="⑤ 打印设计" :name="5"> </el-tab-pane> <el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'dy',2)" label="⑤ 打印设计" :name="5"> </el-tab-pane>
<el-tab-pane label="⑥ 内容呈现设计" :name="6"> </el-tab-pane> <el-tab-pane v-if="formHasPower(props.formKey,props.signCode,'nc',2)" label="⑥ 内容呈现设计" :name="6"> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<div class="headRight"> <div class="headRight">

15
src/views/sysworkflow/lowcodepage/index.vue

@ -21,6 +21,10 @@ import LowCodeFormPage from "@/views/sysworkflow/lowcodepage/lowCodeFormPage.vue
import LowCodeFormGroupPage from "@/views/sysworkflow/lowcodepage/lowCodeFormGroupPage.vue"; import LowCodeFormGroupPage from "@/views/sysworkflow/lowcodepage/lowCodeFormGroupPage.vue";
import DesignAPPpage from "@/views/sysworkflow/lowcodepage/appPage/index.vue"; // import DesignAPPpage from "@/views/sysworkflow/lowcodepage/appPage/index.vue"; //
import { useUserStore } from "@/store/modules/user";
const userStore = useUserStore();
const contbody = ref(); // const contbody = ref(); //
const carPage = ref(); const carPage = ref();
const appListPage = ref(); const appListPage = ref();
@ -238,6 +242,7 @@ const eidtGroupStatus = (id: string, state: number) => {
v-for="item in groupFormList" v-for="item in groupFormList"
:label="item.title" :label="item.title"
:name="item.idStr" :name="item.idStr"
:key="item.idStr"
></el-tab-pane> ></el-tab-pane>
</el-tabs> </el-tabs>
@ -268,7 +273,9 @@ const eidtGroupStatus = (id: string, state: number) => {
<el-dropdown> <el-dropdown>
<el-button class="fa fa-reorder leftLink" /> <el-button class="fa fa-reorder leftLink" />
<template #dropdown> <template #dropdown>
<el-dropdown-item @click="handleCommand('addFormGroup', appGroup)" <el-dropdown-item
v-hasAppGroup="['xz']"
@click="handleCommand('addFormGroup', appGroup)"
>新增分组</el-dropdown-item >新增分组</el-dropdown-item
> >
<el-dropdown-item <el-dropdown-item
@ -276,13 +283,13 @@ const eidtGroupStatus = (id: string, state: number) => {
style="display: none" style="display: none"
>添加表单</el-dropdown-item >添加表单</el-dropdown-item
> >
<el-dropdown-item @click="handleCommand('addFormApp', appGroup)" <el-dropdown-item v-hasAppGroup="['xzapp']" @click="handleCommand('addFormApp', appGroup)"
>添加应用</el-dropdown-item >添加应用</el-dropdown-item
> >
<el-dropdown-item @click="editFormGroup(appGroup)" divided <el-dropdown-item v-hasAppGroup="['bj']" @click="editFormGroup(appGroup)" divided
>编辑</el-dropdown-item >编辑</el-dropdown-item
> >
<el-dropdown-item @click="eidtGroupStatus(appGroup, 3)" <el-dropdown-item v-hasAppGroup="['dl']" @click="eidtGroupStatus(appGroup, 3)"
>删除</el-dropdown-item >删除</el-dropdown-item
> >
</template> </template>

20
src/views/sysworkflow/lowcodepage/newLowCode/appLayoutEdit/appContainerPage.vue

@ -7,6 +7,8 @@
import { appMenuTreeInfo, appSetInfo } from "@/api/date/type"; import { appMenuTreeInfo, appSetInfo } from "@/api/date/type";
import { gainAppEditPsge } from "@/api/DesignForm/requestapi"; import { gainAppEditPsge } from "@/api/DesignForm/requestapi";
import { appHasPower } from "@/directive/permission/button";
import SvgIcon from "@/components/SvgIcon/index.vue"; import SvgIcon from "@/components/SvgIcon/index.vue";
import AppMenus from "@/views/sysworkflow/lowcodepage/appPage/appMenus.vue"; import AppMenus from "@/views/sysworkflow/lowcodepage/appPage/appMenus.vue";
import AppMenuGroup from "@/views/sysworkflow/lowcodepage/appPage/appMenuGroup.vue"; import AppMenuGroup from "@/views/sysworkflow/lowcodepage/appPage/appMenuGroup.vue";
@ -46,6 +48,7 @@ const tabsActive = ref(1);
const menusTree = ref<appMenuTreeInfo[]>([]); // const menusTree = ref<appMenuTreeInfo[]>([]); //
const checkedMenu = ref<appMenuTreeInfo>(""); const checkedMenu = ref<appMenuTreeInfo>("");
const appPageKey = ref<string>(""); //AppId const appPageKey = ref<string>(""); //AppId
const pageSignCode = ref<string>(""); //AppId
const isNew = ref(false); const isNew = ref(false);
const saveAppFormIsShow = ref(false); const saveAppFormIsShow = ref(false);
const menuParentKey = ref<string>(""); const menuParentKey = ref<string>("");
@ -98,6 +101,7 @@ const closeAppDraw = () => {
tabsActive.value = 1; tabsActive.value = 1;
checkedMenu.value = ""; checkedMenu.value = "";
appPageKey.value = ""; appPageKey.value = "";
pageSignCode.value = "";
checkedMenu.appkey = ""; checkedMenu.appkey = "";
isNew.value = false; isNew.value = false;
}; };
@ -115,8 +119,9 @@ const openAppPageForm = (val: appMenuTreeInfo) => {
@ 时间: 2024-05-20 13:27:37 @ 时间: 2024-05-20 13:27:37
@ 功能: 编辑app页面 @ 功能: 编辑app页面
*/ */
const editAppInfo = (id: string) => { const editAppInfo = (id: string,signCode: string) => {
appPageKey.value = id; appPageKey.value = id;
pageSignCode.value = signCode;
saveAppFormIsShow.value = true; saveAppFormIsShow.value = true;
isNew.value = false; isNew.value = false;
}; };
@ -183,9 +188,9 @@ const updataPageInit = () => {
class="tabsMain" class="tabsMain"
> >
<el-tab-pane label="① 页面管理" :name="1"> </el-tab-pane> <el-tab-pane label="① 页面管理" :name="1"> </el-tab-pane>
<el-tab-pane label="② 集成&自动化" :name="2"> </el-tab-pane> <el-tab-pane v-if="appHasPower(props.pickAppInfo.signCodeStr,'jczdh')" label="② 集成&自动化" :name="2"> </el-tab-pane>
<el-tab-pane label="③ 应用设置" :name="3"> </el-tab-pane> <el-tab-pane v-if="appHasPower(props.pickAppInfo.signCodeStr,'yysz')" label="③ 应用设置" :name="3"> </el-tab-pane>
<el-tab-pane label="④ 应用发布" :name="4"> </el-tab-pane> <el-tab-pane v-if="appHasPower(props.pickAppInfo.signCodeStr,'yyfb')" label="④ 应用发布" :name="4"> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<div> <div>
@ -221,7 +226,7 @@ const updataPageInit = () => {
<el-button type="primary" class="fa fa-plus" /> <el-button type="primary" class="fa fa-plus" />
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item @click="addAppPageForm"> <el-dropdown-item v-if="appHasPower(props.pickAppInfo.signCodeStr,'xz')" @click="addAppPageForm">
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-space wrap> <el-space wrap>
@ -238,7 +243,7 @@ const updataPageInit = () => {
</el-col> </el-col>
</el-row> </el-row>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item divided @click="addMenu"> <el-dropdown-item v-if="appHasPower(props.pickAppInfo.signCodeStr,'xzfg')" divided @click="addMenu">
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-space wrap> <el-space wrap>
@ -265,6 +270,7 @@ const updataPageInit = () => {
:form-Key="appCont.uuid" :form-Key="appCont.uuid"
v-model:menus-tree="menusTree" v-model:menus-tree="menusTree"
v-model:app-page-key="appPageKey" v-model:app-page-key="appPageKey"
:sign-code="pageSignCode"
:group-key="props.groupKey" :group-key="props.groupKey"
:app-cont="appCont" :app-cont="appCont"
:drawer-with="props.drawerWith" :drawer-with="props.drawerWith"
@ -280,6 +286,7 @@ const updataPageInit = () => {
:app-cont="appCont" :app-cont="appCont"
:group-key="props.groupKey" :group-key="props.groupKey"
:menu-id="appCont.uuid" :menu-id="appCont.uuid"
:sign-code="pageSignCode"
v-model:app-page-key="appPageKey" v-model:app-page-key="appPageKey"
@gainSunAppContent="gainAppContent" @gainSunAppContent="gainAppContent"
@updateInit="updataPageInit" @updateInit="updataPageInit"
@ -293,6 +300,7 @@ const updataPageInit = () => {
:form-Key="checkedMenu.appkey" :form-Key="checkedMenu.appkey"
:group-key="props.groupKey" :group-key="props.groupKey"
:app-cont="appCont" :app-cont="appCont"
:sign-code="pageSignCode"
:drawer-with="props.drawerWith" :drawer-with="props.drawerWith"
:menus-info="checkedMenu" :menus-info="checkedMenu"
@editAppInfo="editAppInfo" @editAppInfo="editAppInfo"

2
src/views/sysworkflow/lowcodepage/runApp/regularPage.vue

@ -51,7 +51,7 @@ const resetQueryTd = () => {
}; };
</script> </script>
<template> <template>
<el-scrollbar class="scroBox"> <el-scrollbar class="scroBox">{{props.pickAppMenu.isMain}}
<MyToDoPage <MyToDoPage
v-if="props.pickAppMenu.isMain == 1" v-if="props.pickAppMenu.isMain == 1"
:pick-app-menu="pickAppMenu" :pick-app-menu="pickAppMenu"

2
src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue

@ -403,6 +403,7 @@ function optionsValue3Get3(data: any, fieldName: string) {
:form-id="appInitData.appForm.cfid.toString()" :form-id="appInitData.appForm.cfid.toString()"
:versionid="appInitData.versionId" :versionid="appInitData.versionId"
:versiontitle="versionTitle" :versiontitle="versionTitle"
:app-key="props.appkey"
:sign-code="appInitData.signCode" :sign-code="appInitData.signCode"
:pickAppMenu="props.pickAppMenu" :pickAppMenu="props.pickAppMenu"
:viewPage="stateList.view" :viewPage="stateList.view"
@ -436,6 +437,7 @@ function optionsValue3Get3(data: any, fieldName: string) {
:mastesformjson="mastesformjson" :mastesformjson="mastesformjson"
:flowkey="appInitData.flowkey" :flowkey="appInitData.flowkey"
:groupid="appInitData.groupid" :groupid="appInitData.groupid"
:app-key="props.appkey"
:sign-code="appInitData.signCode" :sign-code="appInitData.signCode"
:version-id="appInitData.versionId" :version-id="appInitData.versionId"
add-url="addData" add-url="addData"

Loading…
Cancel
Save