Browse Source

授权完成

qin_26
herenshan112 2 days ago
parent
commit
b83b554e7e
  1. 24
      src/api/system/roleapi/postrole.ts
  2. 6
      src/api/system/roleapi/types.ts
  3. 1
      src/assets/icons/xiala.svg
  4. 1
      src/assets/icons/xiala1.svg
  5. 3
      src/directive/index.ts
  6. 43
      src/directive/permission/button.ts
  7. 1
      src/store/modules/knowledge.ts
  8. 1006
      src/views/system/monitor/online/index.vue
  9. 1189
      src/views/system/monitor/online/index_20251217.vue
  10. 409
      src/views/system/monitor/online/powerPage/appTabsPower.vue
  11. 249
      src/views/system/monitor/online/powerPage/apptablepower.vue
  12. 4
      src/views/system/monitor/online/roleConfig/setRolePeople.vue
  13. 3
      src/views/sysworkflow/lowCodeTasks/index.vue
  14. 3
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue
  15. 15
      src/views/sysworkflow/lowcodepage/index.vue
  16. 1
      src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue

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

@ -192,3 +192,27 @@ export function gainAppEmpowerPower(data?: any){
data:data
});
}
/**
@ 作者: 秦东
@ 时间: 2025-12-11 14:23:55
@ 功能: 初始化应用授权选项
*/
export function appInitAuthorization(data?: any){
return request({
url: '/systemapi/grant/appInitAuthorization',
method: 'post',
data:data
});
}
/**
@ 作者: 秦东
@ 时间: 2025-12-11 14:23:55
@ 功能: 初始化应用授权选项
*/
export function tabsAuthorizationMode(data?: any){
return request({
url: '/systemapi/grant/tabsAuthorizationMode',
method: 'post',
data:data
});
}

6
src/api/system/roleapi/types.ts

@ -57,6 +57,11 @@ export interface systemCont{
sort?:number; //排序
state?:number; //状态
time?:number; //编辑时间
isPick?:boolean; //是否选中
icon?:string; //图标
name?:string; //名称
code?:string; //编码
org?:string; //组织
}
//菜单列表
@ -289,6 +294,7 @@ export interface custerAppTablePower extends custerAppInfo{
//获取平台授权项目
export interface getSystemPower{
powerType:string;
appId:string;
appType:string;
appSystem:string;
roleId:string;

1
src/assets/icons/xiala.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1765935600369" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1814" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512.5 952.8c-9.1 0-17.8-3.7-24.1-10.2L110.8 552c-12.9-13.3-12.5-34.5 0.8-47.4 13.3-12.9 34.5-12.5 47.4 0.8l353.5 365.7L866 505.4c12.9-13.3 34.1-13.7 47.4-0.8 13.3 12.9 13.7 34.1 0.8 47.4L536.6 942.6c-6.3 6.5-15 10.2-24.1 10.2z" fill="#231815" p-id="1815"></path><path d="M512.5 545.2c-9.1 0-17.8-3.7-24.1-10.2L110.8 144.4c-12.9-13.3-12.5-34.5 0.8-47.4 13.3-12.9 34.5-12.5 47.4 0.8l353.5 365.7L866 97.8c12.9-13.3 34.1-13.7 47.4-0.8 13.3 12.9 13.7 34.1 0.8 47.4L536.6 535c-6.3 6.6-15 10.2-24.1 10.2z" fill="#231815" p-id="1816"></path></svg>

After

Width:  |  Height:  |  Size: 873 B

1
src/assets/icons/xiala1.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1765935956258" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1976" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M57.3 248.7c27.1-29 71.1-29 98.4 0l393.3 421c27.1 29 27.1 76.1 0 105.2-27.1 29-71.1 29-98.4 0l-393.3-421c-27.1-28.9-27.1-76 0-105.2z m0 0" p-id="1977"></path><path d="M966.3 248.7c27.1 29 27.1 76.1 0 105.2L572.9 775c-27.1 29-71.1 29-98.4 0-27.2-29-27.2-76.1 0-105.2l393.3-421c27.2-29.1 71.2-29.1 98.5-0.1z m0 0" p-id="1978"></path></svg>

After

Width:  |  Height:  |  Size: 670 B

3
src/directive/index.ts

@ -1,7 +1,7 @@
import type { App } from 'vue';
import { hasPerm } from './permission';
import { hasButton,hasApp,hasAppGroup } from './permission/button';
import { hasButton,hasApp,hasAppGroup,hasGroupApp,hasCustomAppGroup } from './permission/button';
// 全局注册 directive
export function setupDirective(app: App<Element>) {
@ -10,4 +10,5 @@ export function setupDirective(app: App<Element>) {
app.directive('hasButton', hasButton);
app.directive('hasApp', hasApp);
app.directive('hasAppGroup', hasAppGroup);
app.directive('hasGroupApp', hasGroupApp);
}

43
src/directive/permission/button.ts

@ -58,7 +58,7 @@ 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权限",el,"-->",binding,"-->",value,"-->",userStore.myPower.appGroupPower,"-->",userStore.myPower);
// console.log("我的App--->",userStore.myPower)
if (value) {
const requiredPerms = value; // DOM绑定需要的app权限标识
@ -98,9 +98,9 @@ export const appHasPower = (signCode:string,buttonKey:string) => {
@ 时间: 2025-12-12 09:33:21
@ 功能: 判断表单级权限
*/
export const formHasPower = (signCode:string,tormCode:string,buttonKey:string,classType:int) => {
export const formHasPower = (signCode:string,tormCode:string,buttonKey:string,classType:number) => {
const userStore = useUserStore();
// console.log("判断表单级权限-1111-->",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) => {
@ -136,7 +136,7 @@ export const formHasPower = (signCode:string,tormCode:string,buttonKey:string,cl
@ 功能: 判断自定义App菜单
*/
export const hasCustomAppMenu = (appKey:string,menuKey:string) => {
console.log("判断自定义App菜单--->",appKey,menuKey)
// console.log("判断自定义App菜单--->",appKey,menuKey)
const userStore = useUserStore();
if(userStore.myPower.appSystemPower && Array.isArray(userStore.myPower.appSystemPower)){
return userStore.myPower.appSystemPower.some((perm: any) => {
@ -149,3 +149,38 @@ export const hasCustomAppMenu = (appKey:string,menuKey:string) => {
}
return false;
}
//自定义App分组
export const hasGroupApp: Directive = {
mounted(el: HTMLElement, binding: DirectiveBinding) {
const userStore = useUserStore();
const { value } = binding;
// console.log("app权限appGroupMenu",el,"-->",binding,"-->",value,"-->",userStore.myPower.appGroupMenu,"-->",userStore.myPower);
// console.log("我的App--->",userStore.myPower)
if (value) {
const requiredPerms = value; // DOM绑定需要的app权限标识
const hasPerm = userStore.myPower.appGroupMenu.some((perm: any) => {
// console.log("我的App-判断值-->",requiredPerms.includes(perm))
return requiredPerms.includes(perm);
});
if (!hasPerm) {
el.parentNode?.removeChild(el);
}
}
}
}
export const hasCustomAppGroup = (appKey:string) => {
const userStore = useUserStore();
if(userStore.myPower.appGroupMenu && Array.isArray(userStore.myPower.appGroupMenu)){
return userStore.myPower.appGroupMenu.some((perm: any) => {
// console.log("--->",perm,appKey)
if (perm == appKey){
return true
}
});
}
return false;
}

1
src/store/modules/knowledge.ts

@ -1,4 +1,5 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { ShowTitle } from '@/api/knowledge/types';
// 第一个参数是应用程序中 store 的唯一 id
export const useKnowledgeStore = defineStore('knowledge', {

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

File diff suppressed because it is too large

1189
src/views/system/monitor/online/index_20251217.vue

File diff suppressed because it is too large

409
src/views/system/monitor/online/powerPage/appTabsPower.vue

@ -0,0 +1,409 @@
<!--
@ 作者: 秦东
@ 时间: 2025-12-17 16:53:07
@ 备注:
-->
<script lang='ts' setup>
import { appTableBut, appListBut,appDetailBut,formBaseBut,appGroupBut } from "@/utils/workflow/const";
import { orgInfo } from '@/api/displayboardapi/types';
import { appInitAuthorization,tabsAuthorizationMode } from "@/api/system/roleapi/postrole";
import type { TabsPaneContext } from 'element-plus'
const props = defineProps({
appType: {
type: String,
default: "app"
},
powerType: {
type: String,
default: ""
},
roleId: {
type: String,
default: ""
},
orgTree: {
type: Array as PropType<orgInfo[]>,
default: () => []
}
})
const appLoading = ref(false)
const submitLoading = ref(false)
const appPowerArt = ref<any>([])
const appGroupButAry = ref<string[]>([])
const powerActiveName = reactive({
group:"",
app:""
})
const systemMenuTreePropsing = {
children: "child",
label: "name",
value: "id",
};
/**
@ 作者: 秦东
@ 时间: 2025-05-13 14:20:47
@ 功能: 获取自定义App
*/
const getAppList = () => {
appLoading.value=true
appPowerArt.value = []
appGroupButAry.value = []
appInitAuthorization({appType:"app",powerType:props.powerType,roleId:props.roleId}).then((data: any) => {
console.log("获取自定义App", data);
// appList.value = data.data;
appPowerArt.value = data.data.appList
appGroupButAry.value = data.data.groupButPower
appLoading.value=false
if(data.data.appList && Array.isArray(data.data.appList)){
powerActiveName.group = data.data.appList[0].id
if(data.data.appList[0].appList && Array.isArray(data.data.appList[0].appList)){
powerActiveName.app = data.data.appList[0].appList[0].id
}
}
}).finally(()=>{
appLoading.value=false
submitLoading.value = false
})
};
/**
@ 作者: 秦东
@ 时间: 2025-12-18 10:17:07
@ 功能: 标签被选择
*/
const handleTabClick = (val:any) => {
if(appPowerArt.value && Array.isArray(appPowerArt.value)){
appPowerArt.value.find((item:any) => {
if(item.id === powerActiveName.group){
powerActiveName.app = item.appList[0].id
}
})
// powerActiveName.app = appPowerArt.value.find((item:any) => item.id === powerActiveName.group)?.appList[0].id
}
}
/**
@ 作者: 秦东
@ 时间: 2025-12-18 11:14:56
@ 功能: 选择分组
*/
const handleGroupChange = (item:any) => {
console.log("-------------------------->",item)
// if(item.isTrue){
if(item.appList && Array.isArray(item.appList)){
item.appList.find((app:any) => {
app.isTrue = item.isTrue
if(item.isTrue){
app.operationButton = ["bjapp","scapp","xzfg","scfg","yzfg","xz","bj","sc","yz","jczdh","yysz","yyfb"]
}else{
app.operationButton = []
}
if(app.appMenuTree && Array.isArray(app.appMenuTree)){
app.appMenuTree = handleAppChange(app.appMenuTree,item.isTrue)
}
})
}
// }
}
/**
@ 作者: 秦东
@ 时间: 2025-12-18 11:23:40
@ 功能: 循环递归联动赋值
*/
const handleAppChange = (item:any,isTrue:boolean) => {
// console.log("-------------------------->",item)
if(item && Array.isArray(item)){
item.forEach((menu:any) => {
menu.isTrue = isTrue
if(isTrue){
menu.formPower = [ "zc", "tj", "dy", "sc", "fz"]
menu.listPower = [ "newAdd", "import", "export", "sc", "dy", "showQrCode","del","bj"]
}else{
menu.formPower = []
menu.listPower = []
}
if(menu.children && Array.isArray(menu.children)){
menu.children = handleAppChange(menu.children,isTrue)
}
})
}
return item
}
/**
@ 作者: 秦东
@ 时间: 2025-12-18 13:48:26
@ 功能: 选择App
*/
const handleAppPowerChange = (item:any) => {
console.log("----------------选择App---------->",item)
if(item.isTrue){
item.operationButton = ["bjapp","scapp","xzfg","scfg","yzfg","xz","bj","sc","yz","jczdh","yysz","yyfb"]
}else{
item.operationButton = []
}
if(item.appMenuTree && Array.isArray(item.appMenuTree)){
item.appMenuTree = handleAppChange(item.appMenuTree,item.isTrue)
}
}
/**
@ 作者: 秦东
@ 时间: 2025-12-18 13:58:21
@ 功能: 选择App菜单是选中状态下关联操作按钮
*/
const handleAppMenuChange = (item:any) => {
// console.log("----------------App---------->",item)
if(item.isTrue){
item.formPower = [ "zc", "tj", "dy", "sc", "fz"]
item.listPower = [ "newAdd", "import", "export", "sc", "dy", "showQrCode","del","bj"]
}else{
item.formPower = []
item.listPower = []
}
if(item.children && Array.isArray(item.children)){
item.children = handleAppChange(item.children,item.isTrue)
}
}
onMounted(()=>{
// getAppList()
})
defineExpose({
getAppList
})
/**
@ 作者: 秦东
@ 时间: 2025-12-18 14:16:49
@ 功能: 提交授权
*/
const submitPower = () => {
submitLoading.value = true
let sendData:any = {
appType:"app",
powerType:props.powerType,
roleId:props.roleId,
listPower:appPowerArt.value,
groupPower:appGroupButAry.value
}
if(!props.roleId || props.roleId === ""){
ElMessage.error("具体授权属性!")
submitLoading.value = false
return
}
console.log("----------------提交授权---------->",sendData)
// submitLoading.value = true
tabsAuthorizationMode(sendData).then((data: any) => {
if(data.code === 0){
ElMessage.success("授权成功!")
submitLoading.value = false
}else{
ElMessage.error(data.msg)
}
}).catch((err: any) => {
ElMessage.error(err.message)
submitLoading.value = false
})
}
</script>
<template>
<div class="app-tabs-content" v-loading="appLoading">
<el-checkbox-group v-model="appGroupButAry">
<el-checkbox
v-for="city in appGroupBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
<el-tabs v-model="powerActiveName.group" @tab-change="handleTabClick" class="demo-tabs " >
<el-tab-pane v-for="item in appPowerArt" :label="item.name" :key="item.id" :name="item.id" class="center-content">
<template #label>
<div class="app-tabs-checkbox">
<el-checkbox v-model="item.isTrue" @change="handleGroupChange(item)" /><span>{{item.name}}{{ item.isTrue }}</span>
</div>
</template>
<!--应用-->
<el-tabs v-model="powerActiveName.app" class="demo-tabs left_hight" tab-position="left">
<el-tab-pane v-for="app in item.appList" :label="app.name" :key="app.id" :name="app.id" class="center-content">
<template #label>
<div class="app-tabs-checkbox">
<el-checkbox v-model="app.isTrue" @change="handleAppPowerChange(app)" /><span>{{app.name}}</span>
</div>
</template>
<div class="app-form-checkbox">
<el-checkbox-group v-model="app.operationButton">
<el-checkbox
v-for="city in appDetailBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</div>
<el-table
:data="app.appMenuTree"
style="width: 100%;"
class="tableScrollbar"
row-key="id"
border
default-expand-all
>
<el-table-column prop="name" label="栏目名称" >
<template #default="scope">
<el-checkbox v-model="scope.row.isTrue" :value="scope.row.isTrue" @change="handleAppMenuChange(scope.row)" ></el-checkbox>
{{ scope.row.name }}
</template>
</el-table-column>
<el-table-column prop="pagePower" label="页面权力" >
<template #header>
<el-text>页面权限</el-text>
</template>
<template #default="scope">
<el-checkbox-group v-model="scope.row.pagePower">
<el-checkbox
v-for="city in formBaseBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column prop="formPower" label="表单权限" >
<template #header>
<el-text>表单权限</el-text>
</template>
<template #default="scope">
<el-checkbox-group v-model="scope.row.formPower">
<el-checkbox
v-for="city in appTableBut"
:key="city.value"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column prop="listPower" label="listPower" >
<template #header>
<el-text>列表权限</el-text>
</template>
<template #default="scope">
<el-checkbox-group v-model="scope.row.listPower">
<el-checkbox
v-for="city in appListBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column prop="visibleRange" label="数据权限" >
<template #header>
<el-text>数据权限</el-text>
</template>
<template #default="scope">
<el-radio-group
v-model="scope.row.visibleRange.types"
>
<el-row>
<el-col :span="24"><el-radio :value="1">本人</el-radio></el-col>
<el-col :span="24"><el-radio :value="2">本岗位</el-radio></el-col>
<el-col :span="24"><el-radio :value="3">本部门</el-radio></el-col>
<el-col :span="24"><el-radio :value="4">本分部</el-radio></el-col>
<el-col :span="24">
<el-radio :value="5">指定行政组织</el-radio>
<el-tree-select
v-if="scope.row.visibleRange.types == 5"
v-model="scope.row.visibleRange.attribute"
:data="orgTree"
style="width: 100%"
node-key="id"
:props="systemMenuTreePropsing"
clearable
multiple
:render-after-expand="false"
show-checkbox
collapse-tags
collapse-tags-tooltip
/>
</el-col>
<el-col :span="24"><el-radio :value="6">所有</el-radio></el-col>
</el-row>
</el-radio-group>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</el-tab-pane>
<el-affix position="bottom" :offset="100" style="margin-left: 250px;">
<el-button v-loading="submitLoading" type="primary" @click="submitPower">确定授权</el-button>
</el-affix>
</el-tabs>
</div>
</template>
<style lang='scss' scoped>
.app-tabs-content {
width: 100%;
:deep .el-tabs__content{
padding: 0;
}
.app-form-checkbox{
width: 200px;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 10px;
}
}
.app-tabs-checkbox{
width: 100%;
text-align: left;
padding: 0 10px;
display: flex;
align-items: center;
span{
margin-left: 5px;
}
}
.center-content {
display: flex;
justify-content: space-between;
height: 100%; /* 根据需要设置高度 */
padding: 0px;
}
.tableScrollbar{
width: 100%;
height: calc(100vh - 365px);
overflow: hidden;
overflow-y: auto;
}
.left_hight{
height: calc(100vh - 350px);
}
</style>

249
src/views/system/monitor/online/powerPage/apptablepower.vue

@ -0,0 +1,249 @@
<!--
@ 作者: 秦东
@ 时间: 2025-12-17 16:40:42
@ 备注: app授权布局
-->
<script lang='ts' setup>
import { appTableBut, appListBut,appDetailBut,formBaseBut,appGroupBut } from "@/utils/workflow/const";
import { appInitAuthorization,gainAppTableListNew,getPowerPageUser,systemAppAuthorization,gainAppEmpowerPower } from "@/api/system/roleapi/postrole";
import { orgInfo } from "@/api/displayboardapi/types";
const props = defineProps({
appType: {
type: String,
default: ""
},
powerType: {
type: String,
default: ""
},
roleId: {
type: String,
default: ""
}
})
const orgTree = ref<orgInfo[]>([]) //
const appLoading = ref(false)
const grouTabsLoading = ref(false)
const appSystemConfig = ref<any[]>([])
const appGroupButAry = ref<string[]>([])
const appPowerArt = ref<any>([])
const appFormButConfig = ref<any[]>([])
const systemMenuTreePropsing = {
children: "child",
label: "name",
value: "id",
};
/**
@ 作者: 秦东
@ 时间: 2025-05-13 14:20:47
@ 功能: 获取自定义App
*/
const getAppList = () => {
grouTabsLoading.value=true
appInitAuthorization({appType:props.appType,powerType:props.powerType,roleId:props.roleId}).then((data: any) => {
console.log("获取自定义App", data);
// appList.value = data.data;
appPowerArt.value = data.data.appList
appGroupButAry.value = data.data.groupButton
// if (data.data && data.data.length > 0) {
// if (data.data[0] && data.data[0].signCode) {
// activeAppId.value = data.data[0].signCode;
// }
// }
// console.log("App", activeAppId.value);
grouTabsLoading.value=false
}).finally(()=>{
appLoading.value=false
})
};
const pickAppTableList = (val: any) =>{
}
</script>
<template>
<el-scrollbar class="tableScrollbar" v-loading="appLoading">
<table class="table_body">
<thead>
<tr>
<th align="center" width="10%">分组权限</th>
<th align="center" width="10%">应用分组</th>
</tr>
</thead>
<tbody>
<tr >
<td width="10%" 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 align="center" width="90%" valign="top">
<table class="table_body">
<tbody>
<tr v-for="item in appPowerArt" :key="item.id">
<td align="center" width="10%" valign="top">
<el-checkbox @click.stop="pickAppTableList(item)" v-model="item.isTrue" :value="item.isTrue" ></el-checkbox>
{{ item.name }}
</td>
<td align="center" width="90%" valign="top">
<table class="table_body">
<thead>
<tr>
<th align="center" width="10%">应用</th>
<th align="center" width="10%">应用操作按钮</th>
<th align="center" width="80%">应用栏目</th>
</tr>
</thead>
<tbody>
<tr v-for="itemApp in item.appList" :key="itemApp.id">
<td align="center" width="10%" valign="top">
<el-checkbox @click.stop="pickAppTableList(itemApp)" v-model="itemApp.isTrue" :value="itemApp.isTrue" ></el-checkbox>
{{ itemApp.name }}
</td>
<td align="left" width="10%" 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 align="center" width="80%" valign="top">
<el-table
:data="itemApp.appMenuTree"
style="width: 100%; margin-bottom: 20px"
row-key="id"
border
default-expand-all
>
<el-table-column prop="name" label="栏目名称" >
<template #default="scope">
<el-checkbox @click.stop="pickAppTableList(scope.row)" v-model="scope.row.isTrue" :value="scope.row.isTrue" ></el-checkbox>
{{ scope.row.name }}
</template>
</el-table-column>
<el-table-column prop="pagePower" label="页面权力" >
<template #header>
<el-text>页面权力</el-text>
</template>
<template #default="scope">
<el-checkbox-group v-model="scope.pagePower">
<el-checkbox
v-for="city in formBaseBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column prop="formPower" label="表单权限" >
<template #header>
<el-text>表单权限</el-text>
</template>
<template #default="scope">
<el-checkbox-group v-model="scope.formPower">
<el-checkbox
v-for="city in formBaseBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column prop="listPower" label="listPower" >
<template #header>
<el-text>列表权限</el-text>
</template>
<template #default="scope">
<el-checkbox-group v-model="scope.listPower">
<el-checkbox
v-for="city in formBaseBut"
:key="city.key"
:label="city.label"
:value="city.value"
>
{{ city.label }}
</el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column prop="visibleRange" label="数据权限" >
<template #header>
<el-text>数据权限</el-text>
</template>
<template #default="scope">
<el-radio-group
v-model="scope.row.visibleRange.types"
>
<el-row>
<el-col :span="24"><el-radio :value="1">本人</el-radio></el-col>
<el-col :span="24"><el-radio :value="2">本岗位</el-radio></el-col>
<el-col :span="24"><el-radio :value="3">本部门</el-radio></el-col>
<el-col :span="24"><el-radio :value="4">本分部</el-radio></el-col>
<el-col :span="24">
<el-radio :value="5">指定行政组织</el-radio>
<el-tree-select
v-if="scope.row.visibleRange.types == 5"
v-model="scope.row.visibleRange.attribute"
:data="orgTree"
style="width: 100%"
node-key="id"
:props="systemMenuTreePropsing"
clearable
multiple
:render-after-expand="false"
show-checkbox
collapse-tags
collapse-tags-tooltip
/>
</el-col>
<el-col :span="24"><el-radio :value="6">所有</el-radio></el-col>
</el-row>
</el-radio-group>
</template>
</el-table-column>
</el-table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</el-scrollbar>
</template>
<style lang='scss' scoped>
.tableScrollbar{
width: 100%;
height: calc(100vh - 260px);
overflow: hidden;
overflow-y: auto;
}
</style>

4
src/views/system/monitor/online/roleConfig/setRolePeople.vue

@ -194,8 +194,8 @@ watch(() => userPage.name, (newVal) => {
immediate: true
})
onMounted(() => {
getPowerPageUserSub()
getPickUser()
// getPowerPageUserSub()
// getPickUser()
})
</script>
<template>

3
src/views/sysworkflow/lowCodeTasks/index.vue

@ -42,9 +42,8 @@ const stateForm = reactive<any>({
powerstr: {},
},
dict: {},
formId: "1",
id: 0,
formId: 0,
formId: "1",
versionId: 0,
loading: true,
});

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

@ -547,6 +547,7 @@ defineExpose({
:form-id="stateForm.formId"
:sign-code="stateForm.signCode"
:versionid="versionId"
:form-key="props.menusInfo.id"
:versiontitle="versionTitle"
v-model:look-page-is-show="lookPageIsShow"
:viewPage="stateList.view"
@ -589,7 +590,7 @@ defineExpose({
<el-row v-else>
<el-col :span="24" class="pageBox">
<el-card class="tispMsg" shadow="always">
欢迎使用 {{ props.appCont.appName }}<br />
{{ props.appCont.appName }}<br />
<div class="demo-image__error">
<el-image :src="props.appCont.appSvg" fit="fit">
<template #error>

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

@ -12,6 +12,8 @@ import {
gainAppEditPsge,
} from "@/api/DesignForm/requestapi";
import { hasCustomAppGroup } from "@/directive/permission/button";
import { Search } from "@element-plus/icons-vue";
//
@ -238,12 +240,13 @@ const eidtGroupStatus = (id: string, state: number) => {
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane
v-for="item in groupFormList"
:label="item.title"
:name="item.idStr"
:key="item.idStr"
></el-tab-pane>
<template v-for="item in groupFormList" :key="item.idStr">
<el-tab-pane
:label="item.title"
:name="item.idStr"
v-if="hasCustomAppGroup(item.idStr)"
></el-tab-pane>
</template>
</el-tabs>
<div class="appSubButton">

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

@ -404,7 +404,6 @@ function optionsValue3Get3(data: any, fieldName: string) {
:form-key="props.pickAppMenu.id"
:versionid="appInitData.versionId"
:versiontitle="versionTitle"
:app-key="props.appkey"
:sign-code="appInitData.signCode"
:pickAppMenu="props.pickAppMenu"
:viewPage="stateList.view"

Loading…
Cancel
Save