Browse Source

处理工作流权限

qin_26
herenshan112 3 weeks ago
parent
commit
658770f360
  1. 1
      pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/list
  2. 1
      pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.info
  3. 0
      pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.lock
  4. 3
      pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.mod
  5. BIN
      pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.zip
  6. 1
      pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.ziphash
  7. 1
      pkg/mod/cache/download/golang.org/x/tools/gopls/@v/v0.20.0.info
  8. 9
      pkg/mod/cache/download/sumdb/sum.golang.org/lookup/github.com/golang/vscode-go/survey@v0.1.0
  9. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/0/x165/583
  10. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/0/x171/044
  11. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/0/x171/044.p/15
  12. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/0/x177/332.p/93
  13. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/1/646
  14. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/1/668
  15. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/1/668.p/36
  16. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/1/692.p/180
  17. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/2/002.p/156
  18. BIN
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/2/002.p/180
  19. 3
      pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/3/000.p/2
  20. 24
      pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/LICENSE
  21. 41
      pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/README.md
  22. 5
      pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/config.json
  23. 3
      pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/go.mod
  24. 9
      pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/survey.go
  25. 42
      src/api/role/index.ts
  26. 31
      src/api/role/types.ts
  27. 1
      src/assets/icons/dels.svg
  28. 10
      src/layout/components/Sidebar/SidebarItem.vue
  29. 1
      src/layout/components/Sidebar/index.vue
  30. 1
      src/views/public/orguser/orgalluser.vue
  31. 14
      src/views/system/monitor/cachelist/index.vue
  32. 14
      src/views/system/monitor/cachemonitor/index.vue
  33. 14
      src/views/system/monitor/datemonitor/index.vue
  34. 169
      src/views/system/monitor/online/index copy 2.vue
  35. 240
      src/views/system/monitor/online/index copy 3.vue
  36. 87
      src/views/system/monitor/online/index copy.vue
  37. 355
      src/views/system/monitor/online/index.vue
  38. 148
      src/views/system/monitor/online/roleConfig/addRoleGroup.vue
  39. 160
      src/views/system/monitor/online/roleConfig/editRoleGroup.vue
  40. 14
      src/views/system/monitor/servicemonitor/index.vue
  41. 14
      src/views/system/monitor/timing/index.vue
  42. 1
      src/views/taskplatform/taskmanagement/flowStep.vue

1
pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/list

@ -0,0 +1 @@
v0.1.0

1
pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.info

@ -0,0 +1 @@
{"Version":"v0.1.0","Time":"2025-08-20T21:59:11Z"}

0
pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.lock

3
pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.mod

@ -0,0 +1,3 @@
module github.com/golang/vscode-go/survey
go 1.24.0

BIN
pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.zip

Binary file not shown.

1
pkg/mod/cache/download/github.com/golang/vscode-go/survey/@v/v0.1.0.ziphash

@ -0,0 +1 @@
h1:xb0wfrbGDzAH53rMZHzsRKysbpIE39IbHLf+QSw8VJA=

1
pkg/mod/cache/download/golang.org/x/tools/gopls/@v/v0.20.0.info

@ -0,0 +1 @@
{"Version":"v0.20.0","Time":"2025-07-28T18:28:48Z"}

9
pkg/mod/cache/download/sumdb/sum.golang.org/lookup/github.com/golang/vscode-go/survey@v0.1.0

@ -0,0 +1,9 @@
42389416
github.com/golang/vscode-go/survey v0.1.0 h1:xb0wfrbGDzAH53rMZHzsRKysbpIE39IbHLf+QSw8VJA=
github.com/golang/vscode-go/survey v0.1.0/go.mod h1:67MoCjDPlWMr9FZ2d5BhLYR//kGR/bmjhzjy6FXSM74=
go.sum database tree
45397085
Q08DMHCrmZD7Zsiq5TpsB/JTYZmvPijBiIqUxsz+8fY=
— sum.golang.org Az3grl4BXbPgBbxGJxcshVA2zNKOttFAyV8B6prkb9KDELwGDNlx0asydXInM0hqO92L4lcs/neWYXfoZ3iOd1BLfg8=

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/0/x165/583

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/0/x171/044

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/0/x171/044.p/15

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/0/x177/332.p/93

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/1/646

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/1/668

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/1/668.p/36

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/1/692.p/180

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/2/002.p/156

Binary file not shown.

BIN
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/2/002.p/180

Binary file not shown.

3
pkg/mod/cache/download/sumdb/sum.golang.org/tile/8/3/000.p/2

@ -0,0 +1,3 @@
o
”@m°%q±£T `…ow!^ñ¾Z—{§�Ë�éÐvÍ빜5Ñ1 "sJ®YFØñ Ç
iÂéè¶9Z•Æ9Æ

24
pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/LICENSE

@ -0,0 +1,24 @@
vscode-go
The MIT License (MIT)
Original Work Copyright (c) 2015-2020 Microsoft Corporation
Current Work and Modifications Copyright (c) 2020-present The Go Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

41
pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/README.md

@ -0,0 +1,41 @@
# Go Developer Survey Configuration
This Go module serves the configuration file for the Go Developer Survey shown in the [VS Code Go extension](https://github.com/golang/vscode-go).
## Purpose
This module exists solely to host the `config.json` file. By hosting it as a Go module, it can be fetched via module proxy, providing a reliable and secure way for the VS Code Go extension to get the latest survey configuration.
This approach is inspired by the Go team's telemetry configuration module.
## `config.json`
The `config.json` file defines the parameters for the Go Developer Survey. It has the following structure:
```json
{
"StartDate": "2023-09-01T00:00:00Z",
"EndDate": "2023-10-01T00:00:00Z",
"URL": "https://google.com/survey/url"
}
```
- `StartDate`: The ISO 8601 timestamp for when the survey promotion should start.
- `EndDate`: The ISO 8601 timestamp for when the survey promotion should end.
- `URL`: The URL to the survey.
## Usage
This module is not intended to be used as a library. It is fetched by the VS Code Go extension.
## Tagging
The versioning scheme follows semantic versioning, with each change to the configuration being a **minor** version increment.
As this module is in the `survey/` subdirectory of its repository, the git tag **must** be prefixed with `survey/`. This is a requirement for Go modules located in subdirectories. For more details, see the [Go Modules documentation](https://go.dev/ref/mod#vcs-version).
For example, if the most recent tag is `survey/v0.1.0`, the new tag should be `survey/v0.2.0`.
## Release Process
When changes are made to `config.json`, a new version of this module must be released. This is done by creating a new git tag that follows the convention described above.

5
pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/config.json

@ -0,0 +1,5 @@
{
"StartDate": "2025-09-09T00:00:00Z",
"EndDate": "2025-10-01T00:00:00Z",
"URL": "https://google.qualtrics.com/jfe/form/SV_3wwSstC8vv4Ymkm"
}

3
pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/go.mod

@ -0,0 +1,3 @@
module github.com/golang/vscode-go/survey
go 1.24.0

9
pkg/mod/github.com/golang/vscode-go/survey@v0.1.0/survey.go

@ -0,0 +1,9 @@
// The survey package holds the config.json file defining the Go Developer
// Survey configuration.
//
// The survey configuration specifies the survey's start and end dates, and the
// URL for the survey.
//
// This package contains no actual Go code, and exists only so the config.json
// file can be served by module proxies.
package survey

42
src/api/role/index.ts

@ -1,6 +1,6 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { RoleQuery, RolePageResult, RoleForm } from './types';
import { RoleQuery, RolePageResult, RoleForm,RoleListTree,orgAndPostisListTree } from './types';
/**
*
@ -119,3 +119,43 @@ export function gainRoleList(data?: any) {
data: data
});
}
//获取角色树
export function giveRoleTree(): AxiosPromise<RoleListTree[]> {
return request({
url: "/systemapi/permission/giveRoleTree",
method: "POST"
});
}
//获取角色组树
export function giveRoleGroupTree(): AxiosPromise<RoleListTree[]> {
return request({
url: "/systemapi/permission/giveRoleGroupTree",
method: "POST"
});
}
//编辑角色
export function editRoleCont(data?: any) {
return request({
url: "/systemapi/permission/editRoleCont",
method: "POST",
data: data
});
}
//修改角色状态
export function editRoleStatus(data?: any) {
return request({
url: "/systemapi/permission/editRoleStatus",
method: "POST",
data: data
});
}
//获取行政组织加岗位树
export function getOrgPostTree(data?: any) : AxiosPromise<orgAndPostisListTree[]> {
return request({
url: "/systemapi/permission/getOrgPostTree",
method: "POST",
data: data
});
}

31
src/api/role/types.ts

@ -76,3 +76,34 @@ export interface RoleForm {
*/
status?: number;
}
export interface RoleListTree{
id:string|number;
label:string;
types:number;
status:boolean;
superior:string|number;
sort:number;
children?:RoleListTree[]
}
//编辑角色信息
export interface RoleFormInfo{
id?:string|number;
name:string;
type:string|number;
superior:string|number;
sort:number;
}
//行政组织加岗位树
export interface orgAndPostisListTree{
id:string|number;
label:string;
types:string;
typeName:string;
status:boolean;
superior:string|number;
key:string;
sort:number;
children?:orgAndPostisListTree[]
}

1
src/assets/icons/dels.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="1761099470092" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4835" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M799.2 874.4c0 34.4-28.001 62.4-62.4 62.4H287.2c-34.4 0-62.4-28-62.4-62.4V212h574.4v662.4zM349.6 100c0-7.2 5.6-12.8 12.8-12.8h300c7.2 0 12.8 5.6 12.8 12.8v37.6H349.6V100z m636.8 37.6H749.6V100c0-48.001-39.2-87.2-87.2-87.2h-300c-48 0-87.2 39.199-87.2 87.2v37.6H37.6C16.8 137.6 0 154.4 0 175.2s16.8 37.6 37.6 37.6h112v661.6c0 76 61.6 137.6 137.6 137.6h449.6c76 0 137.6-61.6 137.6-137.6V212h112c20.8 0 37.6-16.8 37.6-37.6s-16.8-36.8-37.6-36.8zM512 824c20.8 0 37.6-16.8 37.6-37.6v-400c0-20.8-16.8-37.6-37.6-37.6s-37.6 16.8-37.6 37.6v400c0 20.8 16.8 37.6 37.6 37.6m-175.2 0c20.8 0 37.6-16.8 37.6-37.6v-400c0-20.8-16.8-37.6-37.6-37.6s-37.6 16.8-37.6 37.6v400c0.8 20.8 17.6 37.6 37.6 37.6m350.4 0c20.8 0 37.6-16.8 37.6-37.6v-400c0-20.8-16.8-37.6-37.6-37.6s-37.6 16.8-37.6 37.6v400c0 20.8 16.8 37.6 37.6 37.6" fill="" p-id="4836"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

10
src/layout/components/Sidebar/SidebarItem.vue

@ -79,11 +79,11 @@ function resolvePath(routePath: string) {
// fullPath = fullPath + "&table_id=" + props.item.tableId;
// }
// }
// console.log("<------------------");
// console.log("routePath:", routePath);
// console.log("fullPath:", fullPath);
// console.log("item:", props.item);
// console.log("------------------>");
console.log("路由路径<------------------");
console.log("routePath:", routePath);
console.log("fullPath:", fullPath);
console.log("item:", props.item);
console.log("路由路径------------------>");
return fullPath;
}
</script>

1
src/layout/components/Sidebar/index.vue

@ -30,6 +30,7 @@ const { sidebarLogo } = storeToRefs(settingsStore);
:collapse-transition="false"
mode="vertical"
>
<sidebar-item
v-for="route in permissionStore.routes"
:key="route.path"

1
src/views/public/orguser/orgalluser.vue

@ -239,6 +239,7 @@ const backfillData = () => {
<div>已选择{{ checkDataList.length }}</div>
<el-button type="danger" @click="delAllClick" size="small">全部移除</el-button>
</div>
{{ checkDataList }}
<el-table :data="checkDataList" style="height:680px">
<el-table-column prop="userName" label="照片" width="60px" align="center">
<template #default="scope">

14
src/views/system/monitor/cachelist/index.vue

@ -0,0 +1,14 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
</script>
<template>
<div>缓存列表</div>
</template>
<style lang='scss' scoped>
</style>

14
src/views/system/monitor/cachemonitor/index.vue

@ -0,0 +1,14 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
</script>
<template>
<div>在线人数</div>
</template>
<style lang='scss' scoped>
</style>

14
src/views/system/monitor/datemonitor/index.vue

@ -0,0 +1,14 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
</script>
<template>
<div>数据监控</div>
</template>
<style lang='scss' scoped>
</style>

169
src/views/system/monitor/online/index copy 2.vue

@ -0,0 +1,169 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
import { watch, ref, nextTick } from 'vue';
import { useRoute, useRouter } from 'vue-router';
const route = useRoute();
const router = useRouter()
const cacheMenuList = ref([])
const scrollBarRef = ref(null)
const tagsListRef = ref([])
// tag
const autoScrollNewTag = () => {
nextTick(() => {
//
let container = scrollBarRef.value.wrapRef;
// ()
let scrollWidth = container.scrollWidth;
//
let clientWidth = container.clientWidth;
//
let scrollX = scrollWidth - clientWidth;
scrollBarRef.value.scrollTo({
left: scrollX,
behavior: 'smooth' // 使
})
})
}
//
const autoScrollSelectedTag = () => {
nextTick(() => {
let container = scrollBarRef.value.wrapRef;
//
let scrollLeft = container.scrollLeft;
//
let wrapLeft = container.getBoundingClientRect();
// tag
let activeTagLeft = container.querySelector('.el-tag--primary').getBoundingClientRect();
scrollBarRef.value.scrollTo({
left: scrollLeft + (activeTagLeft.left - wrapLeft.left),
behavior: "smooth"
})
})
}
//
const scrollArrowHandler = (direction) => {
//
let scrollLeftX = scrollBarRef.value.wrapRef.scrollLeft;
scrollBarRef.value.scrollTo({
left: scrollLeftX + (direction == 'left' ? -100 : 100),
behavior: 'smooth' // 使
})
}
//
const navigatorTo = routeParams => {
router.push({
path: routeParams.path
})
}
//
const deleteCacheMenu = (routeParams, index) => {
//
if (routeParams.path === route.path) {
//
if (index < cacheMenuList.value.length - 1) {
router.push({
path: cacheMenuList.value[index + 1].path
})
} else if (index == cacheMenuList.value.length - 1 && cacheMenuList.value.length > 1) {
// tag tag,
router.push({
path: cacheMenuList.value[index - 1].path
})
}
}
cacheMenuList.value.splice(index, 1);
//
localStorage.setItem('menusList', JSON.stringify(cacheMenuList.value))
}
//
watch(() => route, (newRoute, oldRoute) => {
let isExit = cacheMenuList.value.some(item => item.path === newRoute.path)
if (!isExit) {
cacheMenuList.value.push({ ...newRoute });
//
localStorage.setItem('menusList', JSON.stringify(cacheMenuList.value))
// tag tag
autoScrollNewTag()
} else {
// tag tag
autoScrollSelectedTag()
}
}, {
immediate: true,
deep: true
})
</script>
<template>
<div class="scroll-test">
<el-icon @click="scrollArrowHandler('left')">
<ArrowLeft />
</el-icon>
<el-scrollbar wrap-class="scroll-wrap" ref="scrollBarRef" >
<div class="menu-wrapper">
<el-tag type="primary" effect="dark" size="large" closable >Tag 1</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 2</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 3</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 4</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 5</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 6</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 7</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 8</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 9</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 10</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 11</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 12</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 13</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 14</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 15</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 16</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 17</el-tag>
</div>
</el-scrollbar>
<el-icon @click="scrollArrowHandler('right')">
<ArrowRight />
</el-icon>
</div>
</template>
<style lang='scss' scoped>
.menu-wrapper {
width: 100%;
height: 50px;
display: flex;
align-items: center;
}
.el-tag {
flex-shrink: 0;
margin-left: 10px;
}
.el-scrollbar {
width: 100%;
height: 50px !important;
}
.scroll-test {
display: flex;
height: 50px;
align-items: center;
width: 100%;
}
</style>

240
src/views/system/monitor/online/index copy 3.vue

@ -0,0 +1,240 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
const scrollBarRef = ref()
const setup = reactive({
roleId:"1",
appId:"stzl"
})
const pickuserrole = ref("first")
const systemTableData = ref([])
const roleUserTableData = ref([])
const dialogVisible = ref(false)
//
const scrollArrowHandler = (direction:string) => {
console.log("scrollBarRef----->",scrollBarRef.value)
//
let scrollLeftX = scrollBarRef.value.wrapRef.scrollLeft;
scrollBarRef.value.scrollTo({
left: scrollLeftX + (direction == 'left' ? -100 : 100),
behavior: 'smooth' // 使
})
}
//
const pickrole = (val:any) => {
setup.roleId = val
}
//
const roleHandleClose = () =>{
dialogVisible.value = false
}
//
const openHandleRoleBox = () => {
dialogVisible.value = true
}
onMounted(()=>{
for(let i=0;i<120;i++){
systemTableData.value.push({
date:i
})
}
})
</script>
<template>
<div class="roleBox">
<el-card shadow="always" class="roleCardBox">
<template #header>
<div class="caerHeader">
<svg-icon icon-class="arrow-left" size="30px" @click="scrollArrowHandler('left')"></svg-icon>
<el-scrollbar ref="scrollBarRef" class="scroBox">
<div class="scrollbar-flex-content">
<el-tag :type="setup.roleId == '1'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(1)">超级管理员</el-tag>
<el-tag :type="setup.roleId == '2'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(2)" >管理员</el-tag>
<el-tag :type="setup.roleId == '3'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(3)" >恒信高科全员权限</el-tag>
<el-tag :type="setup.roleId == '4'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(4)" >绩效考核管理员</el-tag>
<el-tag :type="setup.roleId == '5'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(5)" >恒信高科主要负责人</el-tag>
<el-tag :type="setup.roleId == '6'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(6)" >高管</el-tag>
<el-tag :type="setup.roleId == '7'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(7)" >内勤</el-tag>
<el-tag :type="setup.roleId == '8'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(8)" >焦炉热工项目组</el-tag>
<el-tag :type="setup.roleId == '9'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(9)" >公司排班专员</el-tag>
<el-tag :type="setup.roleId == '10'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(10)" >质检数据录入员</el-tag>
<el-tag :type="setup.roleId == '11'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(11)" >数据上传员</el-tag>
<el-tag :type="setup.roleId == '12'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(12)" >游客</el-tag>
<el-tag :type="setup.roleId == '13'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(13)" >仓储管理员</el-tag>
<el-tag :type="setup.roleId == '14'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(14)" >仓储专用</el-tag>
<el-tag :type="setup.roleId == '15'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(15)" >玖安高科管理员</el-tag>
<el-tag :type="setup.roleId == '16'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(16)" >生产部调度员</el-tag>
<el-tag :type="setup.roleId == '17'?'primary':'info'" effect="dark" size="large" closable @click="pickrole(17)" >生产部</el-tag>
</div>
</el-scrollbar>
<el-space wrap>
<svg-icon icon-class="arrow-right" size="30px" @click="scrollArrowHandler('right')"ss></svg-icon>
<svg-icon icon-class="add" size="30px" @click="openHandleRoleBox()"></svg-icon>
</el-space>
</div>
</template>
<el-scrollbar class="cardDobyBox">
<el-tabs v-model="setup.appId" tab-position="left" class="demo-tabs">
<el-tab-pane label="数通智联化工凭他" name="stzl">
<el-tabs v-model="pickuserrole" class="demo-tabs" >
<el-tab-pane label="权限配置" name="first">
<el-table
:data="systemTableData"
row-key="id"
border
default-expand-all
class="roleTableBox"
>
<el-table-column prop="date" label="赋权内容" />
<el-table-column prop="name" label="权限选项" >
<el-checkbox-group v-model="checkList">
<el-checkbox label="查看" value="1" />
<el-checkbox label="新增" value="2" />
<el-checkbox label="修改" value="Value A" />
<el-checkbox label="删除" value="Value A" />
</el-checkbox-group>
</el-table-column>
<el-table-column prop="address" label="数据范围">
<el-radio-group v-model="radio">
<el-radio :value="1">私有</el-radio>
<el-radio :value="2">本岗位</el-radio>
<el-radio :value="3">本部门</el-radio>
<el-radio :value="4">本集团</el-radio>
<el-radio :value="5">所有</el-radio>
<el-radio :value="9">指定行政组织</el-radio>
</el-radio-group>
</el-table-column>
</el-table>
<div class="butBox">
<el-button type="primary">确定赋权</el-button>
</div>
</el-tab-pane>
<el-tab-pane label="当前使用人" class="affix-container" name="second">
<el-table :data="systemTableData" class="roleTableBox" border>
<el-table-column fixed prop="date" label="照片" width="80" align="center" />
<el-table-column fixed prop="name" label="姓名" width="120" align="center" />
<el-table-column prop="address" label="工号" width="120" align="center" />
<el-table-column prop="address" label="联系方式" width="180" align="center"/>
<el-table-column prop="address" label="归属行政组织" />
<el-table-column fixed="right" prop="address" label="操作" align="center" width="120" >
<el-space wrap>
<el-button type="primary" size="small">
<svg-icon icon-class="eye-open" />
</el-button>
<el-button type="primary" size="small">
<svg-icon icon-class="dels" />
</el-button>
</el-space>
</el-table-column>
</el-table>
<div class="butBox">
<el-button type="success">添加使用人</el-button>
</div>
</el-tab-pane>
</el-tabs>
</el-tab-pane>
<el-tab-pane label="应用开发" name="Config">系统1</el-tab-pane>
</el-tabs>
</el-scrollbar>
</el-card>
<el-dialog
v-model="dialogVisible"
title="新增角色"
width="500"
:before-close="roleHandleClose"
draggable
>
<el-form label-width="auto" style="max-width: 100%">
<el-form-item label="角色名称">
<el-input />
</el-form-item>
<el-form-item label="排序">
<el-input :min="1" :max="30" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false">提交</el-button>
<el-button type="primary" @click="roleHandleClose">
取消
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<style lang='scss' scoped>
.roleBox{
width: 100%;
height: calc(100vh - 170px);
padding: 15px 15px 0 15px;
.roleCardBox{
width: 100%;
height: 100%;
:deep .el-card__header{
padding: 10px;
}
.caerHeader{
display: flex;
width: 100%;
height: 40px;
align-items: center;
justify-content: space-between;
color: #c2c0c0;
overflow: hidden;
svg{
border: 1px solid #c2c0c0;
border-radius: 5px;
color: #c2c0c0;
cursor: pointer;
}
.scroBox{
width: calc(100% - 105px);
height: 50px;
margin-top: 10px;
span{
margin: 4px 3px 0 4px;
}
overflow: hidden;
}
.scrollbar-flex-content {
display: flex;
width: fit-content;
span{
cursor: pointer;
}
}
}
.cardDobyBox{
width: 100%;
height: calc(100vh - 280px);
}
.roleTableBox{
width: 100%;
margin-bottom: 10px;
height: calc(100vh - 400px);
}
}
}
.butBox{
width: 100%;
text-align: right;
}
</style>

87
src/views/system/monitor/online/index copy.vue

@ -0,0 +1,87 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
</script>
<template>
<div class="roleBox">
<el-card shadow="always" class="roleCardBox">
<template #header>
<div class="caerHeader">
<svg-icon icon-class="arrow-left" size="30px"></svg-icon>
<el-scrollbar class="scroBox">
<div class="scrollbar-flex-content">
<el-tag type="primary" effect="dark" size="large" closable >Tag 1</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 2</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 3</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 4</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 5</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 6</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 7</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 8</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 9</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 10</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 11</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 12</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 13</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 14</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 15</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 16</el-tag>
<el-tag type="primary" effect="dark" size="large" closable >Tag 17</el-tag>
</div>
</el-scrollbar>
<el-space wrap>
<svg-icon icon-class="arrow-right" size="30px"></svg-icon>
<svg-icon icon-class="add" size="30px" ></svg-icon>
</el-space>
</div>
</template>
</el-card>
</div>
</template>
<style lang='scss' scoped>
.roleBox{
width: 100%;
height: calc(100vh - 170px);
padding: 15px 15px 0 15px;
.roleCardBox{
width: 100%;
height: 100%;
:deep .el-card__header{
padding: 10px;
}
.caerHeader{
display: flex;
width: 100%;
height: 40px;
align-items: center;
justify-content: space-between;
color: #c2c0c0;
overflow: hidden;
svg{
border: 1px solid #c2c0c0;
border-radius: 5px;
color: #c2c0c0;
cursor: pointer;
}
.scroBox{
width: calc(100% - 105px);
height: 50px;
margin-top: 10px;
span{
margin: 4px 3px 0 4px;
}
overflow: hidden;
}
.scrollbar-flex-content {
display: flex;
width: fit-content;
}
}
}
}
</style>

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

@ -0,0 +1,355 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
import { giveRoleTree,editRoleStatus,getOrgPostTree } from '@/api/role/index'
import type {RoleListTree,RoleFormInfo,orgAndPostisListTree} from '@/api/role/types'
import type { TreeNode,TreeInstance } from 'element-plus'
import { Search } from '@element-plus/icons-vue'
import { orgInfo } from "@/api/hr/org/type";
import { getOrgTreeList } from "@/api/hr/org/index";
import AddRoleGroup from '@/views/system/monitor/online/roleConfig/addRoleGroup.vue'
import EditRoleGroup from '@/views/system/monitor/online/roleConfig/editRoleGroup.vue'
const orgTree = ref<orgInfo[]>([])
const roleGroupOrInfo = ref(1)
const searchQuery = ref('')
const orgWorkRole = ref("org")
const appSysPick = ref("system")
const treeRef = ref<TreeInstance>()
const treeRefOrg = ref<TreeInstance>()
const roleListdata = ref<RoleListTree[]>([])
const orgPostisListdata = ref<orgAndPostisListTree[]>([])
const treeBoxHeight = ref(300)
const treeBoxHeightOrg = ref(300)
const roleLeft = ref()
const props = {
value: 'id',
label: 'label',
disabled:'status',
children: 'children',
}
const propsOrg = {
value: 'id',
label: 'name',
disabled:'status',
children: 'child',
}
const propsOrgPost = {
value: 'id',
label: 'label',
disabled:'status',
children: 'children',
}
const roleLoading = ref(false)
const openRoleGroup = ref(false)
const orgLoading = ref(false)
const orgPostLoading = ref(false)
//
const onQueryChanged = (query: string) => {
treeRef.value!.filter(query)
}
//
const onQueryChangedOrg = (query: string) => {
treeRefOrg.value!.filter(query)
}
const filterMethod = (query: string, node: any) => node.label!.includes(query)
const filterMethodOrg = (query: string, node: any) => node.name!.includes(query)
//
watch(()=>orgWorkRole.value,(val:string)=>{
console.log("监测赋权组",val)
switch(val){
case "org":
getOrgTreeAry();
break;
case "job":
getOrgPostisTree()
break;
case "role":
getRoleTree();
break;
default:
}
},{
deep:true
})
//
const pickRoleTree = (data:any) => {
if(data.status && data.types==1){
console.log("监测赋权组------->",data)
}
}
//
const pickOrgTree = (data:any) => {
console.log("监测赋权组------->",data)
}
//
const getRoleTree = () => {
roleLoading.value = true
giveRoleTree().then(({data})=>{
console.log("监测赋权组------->",data)
roleListdata.value=data;
roleLoading.value = false;
}).finally(()=>{roleLoading.value = false})
}
const editRoleCont = ref<RoleFormInfo>()
const openEditRoleGroup = ref(false)
//
const editMyInfoIcon = (data:RoleListTree,types:number) => {
console.log("编辑角色信息------->",data)
console.log("编辑角色信息---types---->",types)
switch(types){
case 1:
editRoleStatusBut(data.id,2)
break;
case 2:
editRoleStatusBut(data.id,1)
break;
case 3:
editRoleCont.value = {
id:data.id,
name:data.label,
type:data.types,
superior:data.superior,
sort:data.sort
}
openEditRoleGroup.value = true
break;
case 4:
ElMessageBox.confirm(
"您确定要删除此信息吗?一经删除!数据将不可恢复!请慎重操作!",
"警告",
{
confirmButtonText: '确定删除',
cancelButtonText: '取消删除',
type: 'warning',
}
).then(()=>{
editRoleStatusBut(data.id,3)
})
break;
default:
break;
}
}
//
const editRoleStatusBut = (id:string|number,types:number) => {
// console.log("--->",id)
editRoleStatus({id:id.toString(),status:types}).then((data:any)=>{
if(data.code==0){
ElMessage({
message: data.msg,
type: 'success',
})
getRoleTree()
}else{
ElMessage({
message: data.msg,
type: 'success',
})
}
})
}
//
const addRoleGroup = (types:number) => {
roleGroupOrInfo.value = types
openRoleGroup.value = true
}
//
const getOrgTreeAry = () => {
roleLoading.value = true
if(!Array.isArray(orgTree.value) || orgTree.value.length<=0){
getOrgTreeList({ orgid: 0 })
.then(({ data }) => {
orgTree.value = data
roleLoading.value = false
}).finally(()=>{roleLoading.value = false})
}else{
roleLoading.value = false
}
}
//
const getOrgPostisTree = () => {
orgPostLoading.value=true
if(!Array.isArray(orgPostisListdata.value) || orgPostisListdata.value.length<=0){
getOrgPostTree({id:"313"}).then(({data})=>{
console.log("获取行政组织及岗位--------->",data)
orgPostisListdata.value = data
orgPostLoading.value=false
}).finally(()=>{orgPostLoading.value=false})
}else{
orgPostLoading.value=true
}
}
onMounted(()=>{
getOrgTreeAry();
console.log("高度-----1---->",roleLeft.value?.offsetHeight)
nextTick(()=>{
treeBoxHeight.value = roleLeft.value?.offsetHeight - 140
treeBoxHeightOrg.value = roleLeft.value?.offsetHeight - 100
})
})
</script>
<template>
<div class="roleBox">
<div ref="roleLeft" class="roleLeft">
<el-tabs v-model="orgWorkRole" class="demo-tabs">
<el-tab-pane label="行政组织" name="org">
<template #label>
<el-text class="tabsTitle">行政组织</el-text>
</template>
<div class="searchBox">
<el-input v-model="searchQuery" placeholder="请输入要查找的行政组织" :suffix-icon="Search" @input="onQueryChangedOrg"/>
</div>
<el-tree-v2
ref="treeRefOrg"
style="max-width: 350px;"
:data="orgTree"
:props="propsOrg"
:filter-method="filterMethodOrg"
:height="treeBoxHeightOrg"
v-loading="roleLoading"
:highlight-current="true"
:check-on-click-node="true"
:expand-on-click-node="false"
@node-click="pickOrgTree"
>
</el-tree-v2>
</el-tab-pane>
<el-tab-pane label="岗位" name="job">
<template #label>
<el-text class="tabsTitle">岗位</el-text>
</template>
<div class="searchBox">
<el-input v-model="searchQuery" placeholder="请输入要查找的行政组织" :suffix-icon="Search" @input="onQueryChangedOrg"/>
</div>
<el-tree-v2
ref="treeRefOrg"
style="max-width: 350px;"
:data="orgPostisListdata"
:props="propsOrgPost"
:filter-method="filterMethodOrg"
:height="treeBoxHeightOrg"
v-loading="orgPostLoading"
:highlight-current="true"
:check-on-click-node="true"
:expand-on-click-node="false"
@node-click="pickOrgTree"
>
</el-tree-v2>
</el-tab-pane>
<el-tab-pane label="角色" name="role">
<template #label>
<el-text class="tabsTitle">角色</el-text>
</template>
<div class="butBox">
<el-button type="primary" @click="addRoleGroup(1)">新建角色组</el-button>
<el-button type="primary" @click="addRoleGroup(2)">新建角色</el-button>
</div>
<div class="searchBox">
<el-input v-model="searchQuery" placeholder="请输入要查找的角色" :suffix-icon="Search" @input="onQueryChanged"/>
</div>
<el-tree-v2
ref="treeRef"
style="max-width: 350px;"
:data="roleListdata"
:props="props"
:filter-method="filterMethod"
:height="treeBoxHeight"
v-loading="roleLoading"
:highlight-current="true"
:check-on-click-node="true"
:expand-on-click-node="false"
@node-click="pickRoleTree"
>
<template #default="{ node }" >
<div class="treeRoleBox">
<span>{{ node.label }}</span>
<div class="spanButBox">
<el-text v-if="node.disabled" type="warning" size="small" @click.stop="editMyInfoIcon(node.data,1)">禁用</el-text>
<el-text v-else type="success" size="small" @click.stop="editMyInfoIcon(node.data,2)">启用</el-text>
<el-text type="primary" size="small" @click.stop="editMyInfoIcon(node.data,3)">编辑</el-text>
<el-text type="danger" size="small" @click.stop="editMyInfoIcon(node.data,4)">删除</el-text>
</div>
</div>
</template>
</el-tree-v2>
</el-tab-pane>
</el-tabs>
</div>
<div class="roleright">
<el-tabs v-model="appSysPick" class="demo-tabs">
<el-tab-pane label="平台" name="system">
<template #label>
<el-text class="tabsTitleCont">平台</el-text>
</template>
</el-tab-pane>
<el-tab-pane label="应用" name="app">
<template #label>
<el-text class="tabsTitleCont">应用</el-text>
</template>
</el-tab-pane>
</el-tabs>
</div>
<AddRoleGroup v-if="openRoleGroup" v-model:show="openRoleGroup" :group-info="roleGroupOrInfo" @resthandel="getRoleTree" />
<EditRoleGroup v-if="openEditRoleGroup" v-model:show="openEditRoleGroup" :group-info="roleGroupOrInfo" :data="editRoleCont" @resthandel="getRoleTree" />
</div>
</template>
<style lang='scss' scoped>
.roleBox{
display: flex;
width: 100%;
height: calc(100vh - 170px);
padding: 15px 20px 0 20px;
justify-content: space-between;
.roleLeft{
width: 350px;
height: calc(100vh - 185px);
background-color: #FFFFFF;
.butBox{
display: flex;
justify-content: space-between;
padding: 0 10px 10px 10px;
}
.searchBox{
padding: 0 10px 10px 10px;
}
.treeBox{
height: calc(100vh - 330px);
}
}
.roleright{
width: calc(100% - 370px);
height: calc(100vh - 185px);
background-color: #FFFFFF;
}
.tabsTitle{
padding: 0 15px;
}
.tabsTitleCont{
padding: 0 35px;
}
.treeRoleBox{
display: flex;
justify-content: space-between;
width: 100%;
align-items: center;
}
.spanButBox{
span{
padding: 0 5px;
}
}
}
</style>

148
src/views/system/monitor/online/roleConfig/addRoleGroup.vue

@ -0,0 +1,148 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-23 13:00:55
@ 备注: 添加角色组
-->
<script lang='ts' setup>
import type { RoleFormInfo,RoleListTree } from '@/api/role/types'
import { giveRoleGroupTree,editRoleCont } from '@/api/role/index'
import type { FormInstance, FormRules } from 'element-plus'
const props = defineProps({
show:{
type: Boolean,
default: false,
},
groupInfo:{
type: Number,
default: 1,
}
})
const emits = defineEmits(["update:show","resthandel"]);
const isShow = computed({
get() {
return props.show;
},
set(val: boolean) {
emits("update:show", val);
},
});
const butLoading = ref(false)
const treeSelectData = ref<RoleListTree[]>([])
const formData = reactive<RoleFormInfo>({
id:"0",
name:"",
type:"2",
superior:"0",
sort:50
})
const ruleRoleFormRef = ref()
//
const rules = reactive<FormRules<RoleFormInfo>>({
name:[{ required: true, message: '请输入角色组名称', trigger: 'blur' },],
superior:[{ required: true, message: '请选择角色组归属', trigger: 'blur' },]
})
//
const handleClose = () => {
emits("update:show", false);
emits("resthandel");
treeSelectData.value=[];
butLoading.value = false;
}
//
const saveData = () =>{
butLoading.value = true
ruleRoleFormRef.value.validate((isValid: boolean)=>{
if(isValid){
formData.type=formData.type.toString()
editRoleCont(formData).then((data:any)=>{
if(data.code==0){
ElMessage({
message: data.msg,
type: 'success',
})
handleClose()
}else{
ElMessage({
message: data.msg,
type: 'success',
})
}
console.log("保存数据",data)
}).finally(()=>{ butLoading.value = false})
//
}else{
butLoading.value = false
}
})
}
onMounted(()=>{
if(props.groupInfo == 1){
treeSelectData.value.push({
id:"0",
label:"顶级分组",
types:2,
status:true,
superior:0,
sort:50,
children:[]
})
}
giveRoleGroupTree().then(({data})=>{
treeSelectData.value.push(...data)
if(props.groupInfo != 1 && Array.isArray(data)){
data.forEach((item:any,index:number)=>{
if(index == 0){
formData.superior = item.id
}
})
}
})
})
</script>
<template>
<el-dialog
v-model="isShow"
title="编辑角色"
width="500"
destroy-on-close
draggable
:before-close="handleClose"
>
<el-form
ref="ruleRoleFormRef"
style="width: 100%"
:model="formData"
:rules="rules"
label-width="auto"
>
<el-form-item label="所属角色组" prop="superior">
<el-tree-select
v-model="formData.superior"
:data="treeSelectData"
check-strictly
:render-after-expand="false"
style="width: 100%"
node-key="id"
/>
</el-form-item>
<el-form-item label="角色组名称" prop="name">
<el-input v-model="formData.name" />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort" :min="1" :max="1000000000000" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button v-loading="butLoading" @click="handleClose">取消</el-button>
<el-button v-loading="butLoading" type="primary" @click="saveData()">提交</el-button>
</div>
</template>
</el-dialog>
</template>
<style lang='scss' scoped>
</style>

160
src/views/system/monitor/online/roleConfig/editRoleGroup.vue

@ -0,0 +1,160 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-23 13:00:55
@ 备注: 添加角色组
-->
<script lang='ts' setup>
import type { RoleFormInfo,RoleListTree } from '@/api/role/types'
import { giveRoleGroupTree,editRoleCont } from '@/api/role/index'
import type { FormInstance, FormRules } from 'element-plus'
const props = defineProps({
show:{
type: Boolean,
default: false,
},
data:{
type:Object,
default(){
return {}
}
},
groupInfo:{
type: Number,
default: 1,
}
})
const emits = defineEmits(["update:show","resthandel"]);
const isShow = computed({
get() {
return props.show;
},
set(val: boolean) {
emits("update:show", val);
},
});
const butLoading = ref(false)
const treeSelectData = ref<RoleListTree[]>([])
const formData = reactive<RoleFormInfo>({
id:"0",
name:"",
type:"2",
superior:"0",
sort:50
})
const ruleRoleFormRef = ref()
//
const rules = reactive<FormRules<RoleFormInfo>>({
name:[{ required: true, message: '请输入角色组名称', trigger: 'blur' },],
superior:[{ required: true, message: '请选择角色组归属', trigger: 'blur' },]
})
//
const handleClose = () => {
emits("update:show", false);
emits("resthandel");
treeSelectData.value=[];
butLoading.value = false;
}
//
const saveData = () =>{
butLoading.value = true
ruleRoleFormRef.value.validate((isValid: boolean)=>{
if(isValid){
editRoleCont(formData).then((data:any)=>{
if(data.code==0){
ElMessage({
message: data.msg,
type: 'success',
})
handleClose()
}else{
ElMessage({
message: data.msg,
type: 'success',
})
}
console.log("保存数据",data)
}).finally(()=>{ butLoading.value = false})
//
}else{
butLoading.value = false
}
})
}
onMounted(()=>{
if(props.data.type == 2){
treeSelectData.value.push({
id:"0",
label:"顶级分组",
types:2,
status:true,
superior:0,
sort:50,
children:[]
})
}
giveRoleGroupTree().then(({data})=>{
treeSelectData.value.push(...data)
if(props.data.type != 2 && Array.isArray(data)){
data.forEach((item:any,index:number)=>{
if(index == 0){
formData.superior = item.id
}
})
}
})
nextTick(()=>{
formData.id = props.data.id
formData.name = props.data.name
formData.type = props.data.type
formData.superior = props.data.superior
formData.sort = props.data.sort
})
})
</script>
<template>
<el-dialog
v-model="isShow"
title="编辑角色"
width="500"
destroy-on-close
draggable
:before-close="handleClose"
>
<el-form
ref="ruleRoleFormRef"
style="width: 100%"
:model="formData"
:rules="rules"
label-width="auto"
>
<el-form-item label="所属角色组" prop="superior">
<el-tree-select
v-model="formData.superior"
:data="treeSelectData"
check-strictly
:render-after-expand="false"
style="width: 100%"
node-key="id"
/>
</el-form-item>
<el-form-item label="角色组名称" prop="name">
<el-input v-model="formData.name" />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort" :min="1" :max="1000000000000" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button v-loading="butLoading" @click="handleClose">取消</el-button>
<el-button v-loading="butLoading" type="primary" @click="saveData()">提交</el-button>
</div>
</template>
</el-dialog>
</template>
<style lang='scss' scoped>
</style>

14
src/views/system/monitor/servicemonitor/index.vue

@ -0,0 +1,14 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
</script>
<template>
<div>缓存监控</div>
</template>
<style lang='scss' scoped>
</style>

14
src/views/system/monitor/timing/index.vue

@ -0,0 +1,14 @@
<!--
@ 作者: 秦东
@ 时间: 2025-10-21 10:06:51
@ 备注: 在线人数
-->
<script lang='ts' setup>
</script>
<template>
<div>定时任务</div>
</template>
<style lang='scss' scoped>
</style>

1
src/views/taskplatform/taskmanagement/flowStep.vue

@ -187,6 +187,7 @@ const updateNode = (val:any) =>{
</template>
</el-step>
</el-steps>
{{ openOrClose }}======={{ openclosebox }}
<OrgUserPage v-if="openOrClose" v-model:openclose="openOrClose" :preset-personnel="presetPersonnel" :selected-people="selectedPeople" @update-node="updateNode" />
<OrgAllUserPage v-if="openclosebox" v-model:openclosebox="openclosebox" :selected-people="selectedPeople" @update-node="updateNode" />
</div>

Loading…
Cancel
Save