Browse Source

完成除集成自动化以外的开发工作

v8_master
超级管理员 2 years ago
parent
commit
8d4cad6867
  1. 24
      src/api/DesignForm/requestapi.ts
  2. 52
      src/api/hr/people/index.ts
  3. 8
      src/types/components.d.ts
  4. 55
      src/views/hr/orgUserRole/org.vue
  5. 159
      src/views/hr/orgUserRole/orgrole.vue
  6. 242
      src/views/hr/orgUserRole/rolePage.vue
  7. 36
      src/views/hr/userBox.vue
  8. 5
      src/views/sysworkflow/codepage/datatablestructure.vue
  9. 52
      src/views/sysworkflow/lowcodepage/appFormList.vue
  10. 4
      src/views/sysworkflow/lowcodepage/appPage/appMenus.vue
  11. 4
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue
  12. 143
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/appDevOps.vue
  13. 163
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/appManager.vue
  14. 36
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/appPower.vue
  15. 190
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/dataManagement.vue
  16. 14
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/devops/appinfo.vue
  17. 38
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/devops/tableForm.vue
  18. 8
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/index.vue
  19. 80
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/looksee.vue
  20. 30
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue
  21. 13
      src/views/sysworkflow/lowcodepage/appPage/index.vue
  22. 148
      src/views/sysworkflow/lowcodepage/appPage/releaseApp/index.vue
  23. 188
      src/views/sysworkflow/lowcodepage/runApp/index.vue

24
src/api/DesignForm/requestapi.ts

@ -464,3 +464,27 @@ export function appBasicSettings(data: any) {
data: data
});
}
//获取应用下属表单
export function gianAppFormTable(data: any) {
return request({
url: '/systemapi/app/gianAppFormTable',
method: 'post',
data: data
});
}
//获取应用下属表单
export function setCustomerFormState(data: any) {
return request({
url: '/systemapi/app/setCustomerFormState',
method: 'post',
data: data
});
}
//鉴定当权人员是否有权限使用
export function appJwtPower(data: any) {
return request({
url: '/systemapi/app/appJwtPower',
method: 'post',
data: data
});
}

52
src/api/hr/people/index.ts

@ -377,6 +377,16 @@ import {
data: data
});
}
/**
*
*/
export function searchOrgUser(data: any) {
return request({
url: '/hrapi/staff/searchOrgUser',
method: 'post',
data: data
});
}
/**
*
*/
@ -387,3 +397,45 @@ import {
data: data
});
}
/**
*
*/
export function setLookViews(data: any) {
return request({
url: '/systemapi/app/setLookViews',
method: 'post',
data: data
});
}
/**
* 使
*/
export function setAppManagerInfo(data: any) {
return request({
url: '/systemapi/app/setAppManagerInfo',
method: 'post',
data: data
});
}
/**
*
*/
export function gainLookViews(data: any) {
return request({
url: '/systemapi/app/gainLookViews',
method: 'post',
data: data
});
}
/**
*
*/
export function gianAppFormTable(data: any) {
return request({
url: '/systemapi/app/gianAppFormTable',
method: 'post',
data: data
});
}

8
src/types/components.d.ts

@ -34,6 +34,7 @@ declare module '@vue/runtime-core' {
ElCard: typeof import('element-plus/es')['ElCard']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol']
@ -116,6 +117,13 @@ declare module '@vue/runtime-core' {
IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
IEpClose: typeof import('~icons/ep/close')['default']
IEpDelete: typeof import('~icons/ep/delete')['default']
IEpEdit: typeof import('~icons/ep/edit')['default']
IEpMessageBox: typeof import('~icons/ep/message-box')['default']
IEpOperation: typeof import('~icons/ep/operation')['default']
IEpPlus: typeof import('~icons/ep/plus')['default']
IEpRefresh: typeof import('~icons/ep/refresh')['default']
IEpSearch: typeof import('~icons/ep/search')['default']
IEpSetting: typeof import('~icons/ep/setting')['default']
LangSelect: typeof import('./../components/LangSelect/index.vue')['default']
LayoutPage: typeof import('./../components/DesignForm/layoutPage/index.vue')['default']

55
src/views/hr/orgUserRole/org.vue

@ -7,7 +7,7 @@
import { Search,ArrowRight } from '@element-plus/icons-vue' //
import { userOrgRole,crumb } from '@/api/hr/search/types'
import { gainSunOrgAndUser } from '@/api/hr/people/index'
import { gainSunOrgAndUser,searchOrgUser } from '@/api/hr/people/index'
const props = defineProps({
pickList:{
@ -15,6 +15,10 @@ const props = defineProps({
default(){
return {}
}
},
orgTrue:{
type:Number,
default:1
}
})
@ -59,12 +63,12 @@ const dataLoading = (orgId?:string) => {
let isTrue = true
pickLists.value.forEach((itemVal:userOrgRole)=>{
if(item.id == itemVal.id){
item.isPick = true;
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = false;
item.isPick = 2;
}
})
}
@ -73,7 +77,15 @@ const dataLoading = (orgId?:string) => {
//
onMounted(()=>{
if(props.pickList.value.length > 0){
pickLists.value = props.pickList.value
nextTick(() => {
dataLoading()
})
}else{
dataLoading()
}
})
/**
@ 作者: 秦东
@ -122,12 +134,12 @@ watch(() => props.pickList, (val:userOrgRole[])=>{
let isTrue = true
val.forEach((itemVal:userOrgRole)=>{
if(item.id == itemVal.id){
item.isPick = true;
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = false;
item.isPick = 2;
}
})
},{
@ -142,7 +154,22 @@ const pickSunCont = (orgId?:string) => {
console.log("选择下一级-------->",orgId)
dataLoading(orgId)
}
/**
@ 作者: 秦东
@ 时间: 2024-05-27 15:14:57
@ 功能: 搜索组织和人员
*/
const searchOrgUs = (val:any) => {
searchOrgUser({name:val})
.then((data) =>{
console.log("搜索组织和人员",data)
listAry.value = data.data.orgUserList
// console.log("",listRoleAry)
})
}
defineExpose({
searchOrgUs
})
</script>
<template>
<div>
@ -153,7 +180,21 @@ const pickSunCont = (orgId?:string) => {
<el-scrollbar v-loading="loading" class="contentBox">
<ul>
<li v-for="item in listAry" :key="item.id" :class="item.isPick==1?'active':''">
<el-space wrap @click="pickCont(item)">
<el-space v-if="orgTrue!=1&&item.types!=2" wrap @click="pickCont(item)">
<i v-if="item.isPick==1" class="fa fa-check-square-o"></i><i v-else class="fa fa-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
<el-avatar v-if="item.types==1" shape="square" :size="20" :src="circleUrl" />
<el-text>{{ item.title }}</el-text>
</el-space>
<el-space v-if="orgTrue!=1&&item.types==2" wrap>
<i class="fa fa-minus-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
<el-avatar v-if="item.types==1" shape="square" :size="20" :src="circleUrl" />
<el-text>{{ item.title }}</el-text>
</el-space>
<el-space v-if="orgTrue==1" wrap @click="pickCont(item)">
<i v-if="item.isPick==1" class="fa fa-check-square-o"></i><i v-else class="fa fa-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />

159
src/views/hr/orgUserRole/orgrole.vue

@ -6,7 +6,7 @@
<script lang='ts' setup>
import { Search,ArrowRight } from '@element-plus/icons-vue' //
import { userOrgRole,crumb } from '@/api/hr/search/types'
import { gainSunOrgAndUser,gainAllRole } from '@/api/hr/people/index'
import { gainSunOrgAndUser,gainAllRole,searchOrgUser } from '@/api/hr/people/index'
const props = defineProps({
pickList:{
@ -14,6 +14,10 @@ const props = defineProps({
default(){
return {}
}
},
orgTrue:{
type:Number,
default:1
}
})
@ -51,12 +55,12 @@ const dataLoading = (orgId?:string) => {
let isTrue = true
pickLists.value.forEach((itemVal:userOrgRole)=>{
if(item.id == itemVal.id){
item.isPick = true;
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = false;
item.isPick = 2;
}
})
}
@ -73,7 +77,20 @@ const pickSunCont = (orgId?:string) => {
}
//
onMounted(()=>{
console.log("选择下一级---1----->",props.pickList.length)
if(props.pickList.length > 0){
pickLists.value = props.pickList
console.log("选择下一级---2----->",pickLists.value)
nextTick(() => {
gainSysRole()
dataLoading()
})
}else{
console.log("选择下一级------3-->",pickLists.value)
gainSysRole()
dataLoading()
}
})
/**
@ 作者: 秦东
@ -122,12 +139,12 @@ watch(() => props.pickList, (val:userOrgRole[])=>{
let isTrue = true
val.forEach((itemVal:userOrgRole)=>{
if(item.id == itemVal.id){
item.isPick = true;
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = false;
item.isPick = 2;
}
})
},{
@ -140,12 +157,108 @@ watch(() => props.pickList, (val:userOrgRole[])=>{
@ 功能: 获取角色
*/
const gainSysRole = (val?:string) => {
// console.log("---1",val)
gainAllRole({name:val})
.then((data) =>{
listRoleAry.value = data.data.orgUserList
// console.log("",data)
listRoleAry.value = data.data
// console.log("",listRoleAry)
})
.finally(() =>{
if(pickLists.value.length > 0){
listRoleAry.value.forEach((item:userOrgRole)=>{
let isTrue = true
pickLists.value.forEach((val:userOrgRole)=>{
if(val.id == item.id){
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = 2;
}
})
}
})
}
watch(()=>orgOrRole.value,(val:number)=>{
if(val == 2){
if(pickLists.value.length > 0 && listRoleAry.value.length > 0){
listRoleAry.value.forEach((item:userOrgRole)=>{
let isTrue = true
pickLists.value.forEach((val:userOrgRole)=>{
if(val.id == item.id){
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = 2;
}
})
}
}else{
if(pickLists.value.length > 0 && listAry.value.length > 0){
listAry.value.forEach((item:userOrgRole)=>{
let isTrue = true
pickLists.value.forEach((val:userOrgRole)=>{
if(val.id == item.id){
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = 2;
}
})
}
}
})
/**
@ 作者: 秦东
@ 时间: 2024-05-27 15:11:07
@ 功能: 搜索信息
*/
const searchOrgRolePeople = (val:any) => {
if(orgOrRole.value==1){
searchOrgUs(val)
}else{
gainSysRole(val)
}
}
/**
@ 作者: 秦东
@ 时间: 2024-05-27 15:14:57
@ 功能: 搜索组织和人员
*/
const searchOrgUs = (val:any) => {
searchOrgUser({name:val})
.then((data) =>{
console.log("搜索组织和人员",data)
listAry.value = data.data.orgUserList
// console.log("",listRoleAry)
})
.finally(() =>{
if(pickLists.value.length > 0){
listAry.value.forEach((item:userOrgRole)=>{
let isTrue = true
pickLists.value.forEach((val:userOrgRole)=>{
if(val.id == item.id){
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = 2;
}
})
}
})
}
defineExpose({
searchOrgRolePeople
})
</script>
<template>
<el-tabs v-model="orgOrRole" class="demo-tabs">
@ -157,7 +270,21 @@ const gainSysRole = (val?:string) => {
<el-scrollbar v-loading="loading" class="contentBox">
<ul>
<li v-for="item in listAry" :key="item.id" :class="item.isPick==1?'active':''">
<el-space wrap @click="pickCont(item)">
<el-space v-if="orgTrue!=1&&item.types!=2" wrap @click="pickCont(item)">
<i v-if="item.isPick==1" class="fa fa-check-square-o"></i><i v-else class="fa fa-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
<el-avatar v-if="item.types==1" shape="square" :size="20" :src="circleUrl" />
<el-text>{{ item.title }}</el-text>
</el-space>
<el-space v-if="orgTrue!=1&&item.types==2" wrap>
<i class="fa fa-minus-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
<el-avatar v-if="item.types==1" shape="square" :size="20" :src="circleUrl" />
<el-text>{{ item.title }}</el-text>
</el-space>
<el-space v-if="orgTrue==1" wrap @click="pickCont(item)">
<i v-if="item.isPick==1" class="fa fa-check-square-o"></i><i v-else class="fa fa-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
@ -174,7 +301,23 @@ const gainSysRole = (val?:string) => {
</el-tab-pane>
<el-tab-pane label="角色" :name="2">
{{ listRoleAry }}
<el-scrollbar v-loading="loading" class="contentBox">
<ul>
<li v-for="item in listRoleAry" :key="item.id" :class="item.isPick==1?'active':''">
<el-space wrap @click="pickCont(item)">
<i v-if="item.isPick==1" class="fa fa-check-square-o"></i><i v-else class="fa fa-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
<el-avatar v-if="item.types==1" shape="square" :size="20" :src="circleUrl" />
<el-text>{{ item.title }}</el-text>
</el-space>
<div v-if="item.types==2" class="contentLiLeft">
<svg-icon icon-class="cascader" />
<el-text @click="pickSunCont(item.id)">下级</el-text>
</div>
</li>
</ul>
</el-scrollbar>
</el-tab-pane>
</el-tabs>
</template>

242
src/views/hr/orgUserRole/rolePage.vue

@ -0,0 +1,242 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-27 15:34:29
@ 备注:
-->
<script lang='ts' setup>
import { Search,ArrowRight } from '@element-plus/icons-vue' //
import { userOrgRole,crumb } from '@/api/hr/search/types'
import { gainSunOrgAndUser,gainAllRole,searchOrgUser } from '@/api/hr/people/index'
const props = defineProps({
pickList:{
type:Object,
default(){
return {}
}
},
orgTrue:{
type:Number,
default:1
}
})
const circleUrl = ref('https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png')
const emits = defineEmits(["update:pickList","updataPickLog"]);
const listRoleAry = ref<userOrgRole[]>([]) //
const pickLists = ref<userOrgRole[]>([]) //
/**
@ 作者: 秦东
@ 时间: 2024-05-27 11:48:32
@ 功能: 获取角色
*/
const gainSysRole = (val?:string) => {
// console.log("---1",val)
gainAllRole({name:val})
.then((data) =>{
// console.log("",data)
listRoleAry.value = data.data
// console.log("",listRoleAry)
})
.finally(() =>{
if(pickLists.value.length > 0){
listRoleAry.value.forEach((item:userOrgRole)=>{
let isTrue = true
pickLists.value.forEach((val:userOrgRole)=>{
if(val.id == item.id){
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = 2;
}
})
}
})
}
//
onMounted(()=>{
if(props.pickList.value.length > 0){
pickLists.value = props.pickList.value
nextTick(() => {
gainSysRole()
})
}else{
gainSysRole()
}
})
/**
@ 作者: 秦东
@ 时间: 2024-05-24 15:04:01
@ 功能: 选择项目
*/
const pickCont = (val:userOrgRole) => {
if(val.isPick != 1){
val.isPick = 1
if(pickLists.value.length > 0){
let isTrue = true
pickLists.value.forEach((item:userOrgRole)=>{
if(item.id == val.id){
isTrue = false;
}
})
if(isTrue){
pickLists.value.push(val)
}
}else{
pickLists.value.push(val)
}
}else{
val.isPick = 2
if(pickLists.value.length > 0){
pickLists.value.forEach((item:userOrgRole,index:number)=>{
if(item.id == val.id){
pickLists.value.splice(index,1)
}
})
}
}
// emits('update:pickList', pickLists)
console.log("选择项目-------->",pickLists.value)
emits('updataPickLog', pickLists.value)
}
/**
@ 作者: 秦东
@ 时间: 2024-05-24 15:25:58
@ 功能: 监听已选择的选项
*/
watch(() => props.pickList, (val:userOrgRole[])=>{
console.log("监听已选择的选项-------->",val)
pickLists.value = val
listRoleAry.value.forEach((item)=>{
let isTrue = true
val.forEach((itemVal:userOrgRole)=>{
if(item.id == itemVal.id){
item.isPick = 1;
isTrue = false;
}
})
if(isTrue){
item.isPick = 2;
}
})
},{
deep: true
})
/**
@ 作者: 秦东
@ 时间: 2024-05-27 15:11:07
@ 功能: 搜索信息
*/
const searchOrgRolePeople = (val:any) => {
gainSysRole(val)
}
defineExpose({
searchOrgRolePeople
})
</script>
<template>
<div>
<el-scrollbar v-loading="loading" class="contentBox">
<ul>
<li v-for="item in listRoleAry" :key="item.id" :class="item.isPick==1?'active':''">
<el-space v-if="orgTrue!=1&&item.types!=2" wrap @click="pickCont(item)">
<i v-if="item.isPick==1" class="fa fa-check-square-o"></i><i v-else class="fa fa-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
<el-avatar v-if="item.types==1" shape="square" :size="20" :src="circleUrl" />
<el-text>{{ item.title }}</el-text>
</el-space>
<el-space v-if="orgTrue!=1&&item.types==2" wrap>
<i class="fa fa-minus-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
<el-avatar v-if="item.types==1" shape="square" :size="20" :src="circleUrl" />
<el-text>{{ item.title }}</el-text>
</el-space>
<el-space v-if="orgTrue==1" wrap @click="pickCont(item)">
<i v-if="item.isPick==1" class="fa fa-check-square-o"></i><i v-else class="fa fa-square-o"></i>
<svg-icon v-if="item.types==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
<el-avatar v-if="item.types==1" shape="square" :size="20" :src="circleUrl" />
<el-text>{{ item.title }}</el-text>
</el-space>
<div v-if="item.types==2" class="contentLiLeft">
<svg-icon icon-class="cascader" />
<el-text @click="pickSunCont(item.id)">下级</el-text>
</div>
</li>
</ul>
</el-scrollbar>
</div>
</template>
<style lang='scss' scoped>
.mianbaoxue{
display: flex;
white-space: nowrap;
padding: 0px 5px 10px 5px;
overflow: auto;
cursor: pointer;
}
.contentBox{
height: 400px;
padding: 0 5px;
li {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
padding: 5px 5px;
cursor: pointer;
i {
font-size: 15px;
}
}
li:hover {
background-color: #EBEEF5;
color: #409EFF;
.el-text{
color: #409EFF;
}
}
li.active{
background-color: #EBEDF0;
color: #409EFF;
.el-text{
color: #409EFF;
}
}
}
.contentLiLeft{
border-left: 1px dashed #909399;
padding-left: 10px;
}
.pickBox{
height: 420px;
padding: 10px 0px 0px 0px;
li {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
padding: 5px 5px;
cursor: pointer;
i {
font-size: 15px;
}
}
li:hover {
background-color: #F56C6C;
color: #FFFFFF;
.el-text{
color: #FFFFFF;
}
}
}
</style>

36
src/views/hr/userBox.vue

@ -12,6 +12,9 @@ const circleUrl = ref('https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726
//
import OrgPage from '@/views/hr/orgUserRole/org.vue'
import OrgRolePage from '@/views/hr/orgUserRole/orgrole.vue'
import RolePageIng from '@/views/hr/orgUserRole/rolePage.vue'
const props = defineProps({
isOpen:{
type:Boolean,
@ -21,6 +24,10 @@ const props = defineProps({
type:Number,
default:1
},
orgTrue:{
type:Number,
default:1
},
pickList:{
type:Object,
default(){
@ -31,10 +38,10 @@ const props = defineProps({
const taotleLog = ref(0)
const pickListAry = ref<userOrgRole[]>([]) //
const emits = defineEmits(["update:isOpen","update:types","pickInfo"]);
const searchQuery = reactive<any>({
key:"",
types:1
})
const searchQuery = ref<any>("")
const orgUs = ref(null)
const orgUsRole = ref(null)
const rolePage = ref(null)
/**
@ 作者: 秦东
@ 时间: 2024-05-23 13:56:28
@ -79,7 +86,14 @@ const handleClose = () => {
@ 功能: 根据条件搜索数据
*/
const searchData = () => {
console.log("userTypes----->",userTypes);
if(userTypes.value == 1){
orgUs.value.searchOrgUs(searchQuery.value)
}else if(userTypes.value == 2){
orgUsRole.value.searchOrgRolePeople(searchQuery.value)
}else{
rolePage.value.searchOrgRolePeople(searchQuery.value)
}
}
/**
@ 作者: 秦东
@ -127,25 +141,29 @@ watch(()=>props.isOpen,(val:boolean)=>{
}else{
if(props.pickList.length > 0){
pickListAry.value = props.pickList
taotleLog.value = props.pickList.length
}
}
console.log("对话框状态",val);
})
//
onMounted(()=>{
taotleLog.value = props.pickList.length
})
</script>
<template>
<el-dialog v-model="isShow" title="选择成员" width="700" draggable :before-close="handleClose">
<el-row class="allBianLink">
<el-col :span="12">
<el-input
v-model="searchQuery.key"
v-model="searchQuery"
:prefix-icon="Search"
size="large"
class="inputDeep"
@input="searchData"
/>
<OrgPage v-if="userTypes==1" :pick-list="pickListAry" @updataPickLog="updataPickLog" />
<OrgRolePage v-if="userTypes==2" :pick-list="pickListAry" @updataPickLog="updataPickLog" />
<OrgPage ref="orgUs" v-if="userTypes==1" :org-true="orgTrue" :pick-list="pickListAry" @updataPickLog="updataPickLog" />
<OrgRolePage ref="orgUsRole" v-if="userTypes==2" :org-true="orgTrue" :pick-list="pickListAry" @updataPickLog="updataPickLog" />
<RolePageIng ref="rolePage" v-if="userTypes==3" :org-true="orgTrue" :pick-list="pickListAry" @updataPickLog="updataPickLog" />
</el-col>
<el-col :span="12" class="leftLink">

5
src/views/sysworkflow/codepage/datatablestructure.vue

@ -72,9 +72,10 @@ const clickFormTable = (val:any) =>{
}
//
const getVersionFormTable = () =>{
callBackFormTableVersion({id:props.formcont.id})
console.log("获取版本及表列表--->",props.formcont,props.formcont.id)
callBackFormTableVersion({id:props.formcont.id.toString()})
.then(({ data }) =>{
// console.log("--->",data)
console.log("获取版本及表列表--->",data)
versionAry.value = data.version
formTableAry.value = data.tablelist
if(data.version){

52
src/views/sysworkflow/lowcodepage/appFormList.vue

@ -5,15 +5,18 @@
-->
<script lang='ts' setup>
import { customerFormCont } from "@/api/DesignForm/type";
import { getCustomerFormList,editProductionFormStatus } from '@/api/DesignForm/requestapi'
import { getCustomerFormList,editProductionFormStatus,appJwtPower } from '@/api/DesignForm/requestapi'
import {Delete,Edit,View,MoreFilled} from '@element-plus/icons-vue'
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { useUserStore } from "@/store/modules/user";
//
import LowCodeFormPage from "@/views/sysworkflow/lowcodepage/lowCodeFormPage.vue"
import TaskCustomerForm from '@/views/taskplatform/taskmanagement/taskcustomerformnew.vue'
import TableFlow from '@/views/sysworkflow/lowcodepage/pageFlow/tableFlow.vue'
import DesignAPPpage from "@/views/sysworkflow/lowcodepage/appPage/index.vue" //
import RunApplication from "@/views/sysworkflow/lowcodepage/runApp/index.vue"
const props = defineProps({
groupId:{
type:String,
@ -28,7 +31,7 @@ const props = defineProps({
default:""
}
});
const userStore = useUserStore();
const emits = defineEmits(["update:formKey","getRongQiAttr"]);
//ID
@ -81,11 +84,18 @@ const getFormAppList = () => {
@ 时间: 2024-03-21 13:39:51
@ 功能: 创建表单任务
*/
const startUsing = (id:string,title:string) => {
const startUsing = (id:string,title:string,appOrTable:any) => {
if(appOrTable.classify != 3){
emits('getRongQiAttr')
versionId.value = id
versionTitle.value = title
openTaskDrawer.value = true
}else{
lookAppList(appOrTable)
}
console.log("appOrTable---->",appOrTable)
}
/**
@ 作者: 秦东
@ -240,6 +250,32 @@ const fanyePage = (val: number) =>{
pageApp.value = val
getFormAppList()
}
/**
@ 作者: 秦东
@ 时间: 2024-05-29 16:13:16
@ 功能: 打开应用
*/
const lookAppList = (val:any) => {
let appPower = 0;
emits('getRongQiAttr')
appJwtPower({id:val.signCodeStr,types:1})
.then(({data})=>{
console.log("打开应用------>data:",data)
if(data){
runIsOpen.value = true
}else{
ElMessage({
message: '对不起!您不可使用此App!请联系管理员进行授权!',
type: 'error',
plain: true,
})
}
})
}
const runIsOpen = ref(false)
</script>
<template>
<div v-loading="loadingApp">
@ -251,21 +287,21 @@ const fanyePage = (val: number) =>{
:src="squareUrl"
:title="item.name"
class="picture"
@click.top="startUsing(item.versionId,item.name)"
@click.top="startUsing(item.versionId,item.name,item)"
/>
<img
v-else
:src="item.icon"
:title="item.name"
class="picture"
@click.top="startUsing(item.versionId,item.name)"
@click.top="startUsing(item.versionId,item.name,item)"
/>
<div class="cardhead">
<el-text class="w-150px mb-2" truncated :title="item.name" @click.top="startUsing(item.versionId,item.name)">{{item.name}}</el-text>
<el-text class="w-150px mb-2" truncated :title="item.name" @click.top="startUsing(item.versionId,item.name,item)">{{item.name}}</el-text>
</div>
<el-row v-if="item.classify==3">
<el-col :span="8" class="but_centent">
<el-button size="small" circle class="button" :icon="View" @click="lookFormList(item)"></el-button>
<el-button size="small" circle class="button" :icon="View" @click="lookAppList(item)"></el-button>
</el-col>
<el-col :span="8" class="but_centent">
<el-button size="small" circle class="button" :icon="Edit" @click="editAppCont(item.signCodeStr)"></el-button>
@ -297,7 +333,7 @@ const fanyePage = (val: number) =>{
<LowCodeFormPage v-if="addFormIsShow" :drawer-with="props.drawerWith" v-model:form-key="formId" @refreshPage="refreshPage" />
<DesignAPPpage v-model:is-show="appPageShow" v-model:form-key="appKey" :group-key="props.groupId" :drawer-with="props.drawerWith" @refreshPage="getFormAppList" />
<RunApplication v-model:run-is-open="runIsOpen" :drawer-with="props.drawerWith" @refreshPage="getFormAppList"/>
<el-drawer
v-model="lookPageIsShow"
title="列表预览"

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

@ -239,9 +239,11 @@ const saveAppFormIsShow = ref(false)
@ 功能: 新增表单页面
*/
const creetMenuId = ref("")
const isNew = ref(false)
const createNewPage = (val?:string) => {
creetMenuId.value = val.toString();
saveAppFormIsShow.value = true;
isNew.value = true
}
/**
@ 作者: 秦东
@ -320,7 +322,7 @@ const openAppPage = (val:any) =>{
<AppMenuSvgPage v-model:is-show="svgIsShow" v-model:svg-name="svgName" :svg-id="svgId" :icon-list="allIconNames" />
<AppMenuGroup v-model:is-show="menuGroupShow" :menu-parent-key="menuParentKey" :app-cont="props.appCont" @updateMenu="gainSunAppContent" />
<EditAppMenuNamePage v-model:is-show="editAppMenuNameShow" :menu-cont="appOenMenu" @updateMenu="gainSunAppContent" />
<CreateAppFormPage v-if="saveAppFormIsShow" v-model:is-show="saveAppFormIsShow" v-model:app-page-key="appPageKey" :drawer-with="props.drawerWith" :form-Key="props.formKey" :app-cont="props.appCont" :group-key="props.groupKey" :menu-id="creetMenuId" @gainSunAppContent="gainSunAppContent" />
<CreateAppFormPage v-if="saveAppFormIsShow" v-model:is-show="saveAppFormIsShow" :is-new="isNew" v-model:app-page-key="appPageKey" :drawer-with="props.drawerWith" :form-Key="props.formKey" :app-cont="props.appCont" :group-key="props.groupKey" :menu-id="creetMenuId" @gainSunAppContent="gainSunAppContent" />
</template>
<style lang='scss' scoped>
.appMenuTitle{

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

@ -140,6 +140,9 @@ const handleAppPageClick = () =>{
@ 功能: 获取表单初始化信息
*/
const gainAppFormPageInit = () =>{
if(props.menusInfo.id){
gainAppPageInfo({id:props.menusInfo.id})
.then((data)=>{
console.log("获取初始化表单数据",data)
@ -192,6 +195,7 @@ const gainAppFormPageInit = () =>{
})
}
}
defineExpose({

143
src/views/sysworkflow/lowcodepage/appPage/appSetUp/appDevOps.vue

@ -0,0 +1,143 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-29 09:12:55
@ 备注: 部署运维
-->
<script lang='ts' setup>
import { gianAppFormTable } from '@/api/hr/people/index'
import { useUserStore } from "@/store/modules/user";
import { Picture as IconPicture } from '@element-plus/icons-vue'
const userStore = useUserStore();
const props = defineProps({
appCont:{
type:Object,
default(){
return {}
}
},
groupKey:{
type:String,
default:""
}
});
const tableList = ref<any[]>([])
onMounted(()=>{
gianAppFormTable({id:props.appCont.uuid})
.then((data:any)=>{
tableList.value = data.data
})
})
</script>
<template>
<el-card shadow="always" class="powerBox">
<div class="tipsBox">
<el-row>
<el-col :span="24" class="appTitle">部署运维</el-col>
<el-col :span="24" class="appDesicer">包含了应用参数页面参数可以用于接口调用二次开发反馈问题排查</el-col>
</el-row>
<el-image :src="props.appCont.appSvg">
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
<el-scrollbar class="gunDongTiao">
<el-card shadow="never" class="boxTop">
<el-descriptions
:column="4"
direction="vertical"
>
<el-descriptions-item label="应用ID">{{ props.appCont.uuid }}</el-descriptions-item>
<el-descriptions-item label="应用编码">{{ props.appCont.appKey }}</el-descriptions-item>
<el-descriptions-item label="应用名称">{{ props.appCont.appName }}</el-descriptions-item>
<el-descriptions-item label="当前登录人">{{ userStore.nickname }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-table :data="tableList" border style="width: 100%;margin: 25px 0 0 0;" :header-cell-style="{fontSize: '14px', backgroundColor: '#f8f8f8',color:'#333'}">
<el-table-column prop="name" label="表单名称" />
<el-table-column prop="tablename" label="数据表" />
<el-table-column prop="signCode" label="识别标识" />
<el-table-column label="页面类型" align="center" width="100">
<template #default="scope">
<el-tag type="primary" v-if="scope.row.flowkey!=0">流程表单</el-tag>
<el-tag type="info" v-else>表单</el-tag>
</template>
</el-table-column>
<el-table-column label="流程标识">
<template #default="scope">
<el-text v-if="scope.row.flowkey!=0">{{scope.row.flowkey!}}</el-text>
<el-text v-else></el-text>
</template>
</el-table-column>
</el-table>
</el-scrollbar>
</el-card>
</template>
<style lang='scss' scoped>
.appTitle{
font-size:22px;
}
.appDesicer{
padding: 15px 0 0 0;
color: #606266;
}
.boxTop{
margin: 15px 0 0 0;
padding: var(--el-card-padding);
}
.appContent{
padding: 10px 0 15px 0;
color: #606266;
border-bottom: 1px solid #F0F2F5;
}
.appManList{
padding: 30px 0 10px 0;
}
.powerBox{
height: calc(100vh - 70px);
:deep .el-card__body{
padding:0;
}
.gunDongTiao{
padding: 0 var(--el-card-padding);
height: calc(100vh - 185px);
}
}
.tipsBox{
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--el-card-padding);
.el-image {
padding: 0 5px;
max-width: 80px;
max-height: 70px;
width: 100%;
height: 70px;
border: 1px solid #F0F2F5;
border-radius: 5px;
background: var(--el-fill-color-light);
}
.image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
background: var(--el-fill-color-light);
color: var(--el-text-color-secondary);
font-size: 30px;
}
.image-slot .el-icon {
font-size: 30px;
}
}
.tableHead{
background-color: #000;
}
</style>

163
src/views/sysworkflow/lowcodepage/appPage/appSetUp/appManager.vue

@ -0,0 +1,163 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-27 16:36:46
@ 备注: 应用管理员
-->
<script lang='ts' setup>
import { userOrgRole } from '@/api/hr/search/types'
import PersonnelSelector from '@/views/hr/userBox.vue'
import { gainLookViews,setAppManagerInfo } from '@/api/hr/people/index'
const props = defineProps({
appCont:{
type:Object,
default(){
return {}
}
}
});
const appMang = ref<userOrgRole[]>([]) //
const isOpenBox = ref(false)
/**
@ 作者: 秦东
@ 时间: 2024-05-23 14:01:37
@ 功能: 人员选择器
*/
const setupUser = (types:number) => {
isOpenBox.value = true
console.log("isOpenBox",isOpenBox)
}
/**
@ 作者: 秦东
@ 时间: 2024-05-24 15:54:55
@ 功能: 选中得内容
*/
const pickInfo = (val:userOrgRole[]) =>{
isOpenBox.value = false;
appMang.value = val.value
let sendInfo = {
id:props.appCont.uuid,
orgRoleUs:val.value
}
setAppManagerInfo(sendInfo)
.then((data:any) =>{
// console.log("sendInfo---->",data)
ElMessage({
showClose: true,
message: data.msg,
type: 'success',
})
})
}
/**
@ 作者: 秦东
@ 时间: 2024-05-27 16:42:51
@ 功能: 要删除的数据
*/
const delData = (val:userOrgRole) => {
if(appMang.value.length > 0){
appMang.value.forEach((item:userOrgRole,index:number)=>{
if(item.id == val.id){
console.log("isOpenBox----->item:",item)
console.log("isOpenBox----->index:",index)
appMang.value.splice(index,1)
}
})
let sendInfo = {
id:props.appCont.uuid,
orgRoleUs:appMang.value
}
setAppManagerInfo(sendInfo)
.then((data:any) =>{
// console.log("sendInfo---->",data)
ElMessage({
showClose: true,
message: data.msg,
type: 'success',
})
})
}
console.log("isOpenBox----->appMang:",appMang)
}
/**
@ 作者: 秦东
@ 时间: 2024-05-29 08:15:45
@ 功能: 获取已选择的内容
*/
const oldPickList = () =>{
gainLookViews({id:props.appCont.uuid})
.then((data:any)=>{
appMang.value = data.data.appManager
})
}
onMounted(() => {
oldPickList()
})
</script>
<template>
<div>
<PersonnelSelector v-model:is-open="isOpenBox" :pick-list="appMang" :types="2" :org-true="2" @pickInfo="pickInfo" />
<el-card shadow="never" class="boxTop">
<el-row>
<el-col :span="24" class="appTitle">应用主管理员</el-col>
<el-col :span="24" class="appContent">应用主管理员拥有应用管理后台的全部权限可进行应用搭建编辑设置以及数据管理</el-col>
<el-col :span="24" class="appManList">
<table>
<tr>
<td width="80px">
<el-text >权限成员</el-text>
</td>
<td width="80px">
<el-button link type="primary" size="large" @click="setupUser(2)">设置成员</el-button>
</td>
<td>
<el-space wrap :size="15">
<el-tag
v-for="(item,index) in appMang"
:key="index"
closable
type="info"
:disable-transitions="true"
@close="delData(item)">
{{item.title}}
</el-tag>
</el-space>
</td>
</tr>
</table>
</el-col>
</el-row>
</el-card>
</div>
</template>
<style lang='scss' scoped>
.appTitle{
font-size:22px;
}
.appDesicer{
padding: 15px 0 0 0;
color: #606266;
}
.boxTop{
margin: 15px 0 0 0;
}
.appContent{
padding: 10px 0 15px 0;
color: #606266;
border-bottom: 1px solid #F0F2F5;
}
.appManList{
padding: 30px 0 10px 0;
}
.powerBox{
height: calc(100vh - 70px);
}
</style>

36
src/views/sysworkflow/lowcodepage/appPage/appSetUp/appPower.vue

@ -7,12 +7,19 @@
import { userOrgRole,crumb } from '@/api/hr/search/types'
import LookSee from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/looksee.vue'
import AppManager from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/appManager.vue'
const props = defineProps({
appCont:{
type:Object,
default(){
return {}
}
},
groupKey:{
type:String,
default:""
}
});
@ -28,35 +35,10 @@ const powerUser = ref<userOrgRole[]>([]) //管理员
<el-col :span="24" class="appTitle">应用相关权限配置</el-col>
<el-col :span="24" class="appDesicer">为该应用进行权限的细化配置确保应用信息在可控范围内传播</el-col>
</el-row>
<LookSee />
<el-card shadow="never" class="boxTop">
<el-row>
<el-col :span="24" class="appTitle">应用主管理员</el-col>
<el-col :span="24" class="appContent">应用主管理员拥有应用管理后台的全部权限可进行应用搭建编辑设置以及数据管理</el-col>
<el-col :span="24" class="appManList">
<table>
<tr>
<td width="80px">
<el-text >权限成员</el-text>
</td>
<td width="80px">
<el-button link type="primary" size="large" @click="setupUser(2)">设置成员</el-button>
</td>
<td>
<el-space wrap :size="15">
<el-tag type="info" closable v-for="item in powerUser">秦东</el-tag>
</el-space>
</td>
</tr>
</table>
</el-col>
</el-row>
<LookSee :app-cont="appCont" />
<AppManager :app-cont="appCont" />
</el-card>
</el-card>
</template>
<style lang='scss' scoped>

190
src/views/sysworkflow/lowcodepage/appPage/appSetUp/dataManagement.vue

@ -0,0 +1,190 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-29 09:17:41
@ 备注: 应用信息
-->
<script lang='ts' setup>
import { SearchForm,customerFormCont } from "@/api/DesignForm/type";
import { gianAppFormTable } from '@/api/DesignForm/requestapi'
import {
Check,
Delete,
Edit,
Message,
Search,
Star,
} from '@element-plus/icons-vue'
import TableForm from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/devops/tableForm.vue'
import DataTableStructure from '@/views/sysworkflow/codepage/datatablestructure.vue'
const props = defineProps({
appCont:{
type:Object,
default(){
return {}
}
},
groupKey:{
type:String,
default:""
}
});
const total = ref(0); //
const dataTableList = ref<customerFormCont[]>([])
const queryParams = reactive<SearchForm>({
id:props.appCont.uuid,
page: 1,
pagesize:15
});
//
function handleQuery(){
gianAppFormTable(queryParams)
.then(({ data }) => {
// console.log("-->",data);
total.value = data.total
dataTableList.value = data.list
})
.finally(() => {})
}
const formCont = ref<customerFormCont>()
const dataTableIsShow = ref(false)
//
const openDataTableStructure = (cont:customerFormCont) =>{
formCont.value = cont
dataTableIsShow.value = true;
// console.log("",cont)
}
onMounted(()=>{
handleQuery();
})
</script>
<template>
<DataTableStructure v-model:isshow="dataTableIsShow" :formcont="formCont" />
<el-card shadow="always" class="powerBox">
<div class="tipsBox">
<el-row>
<el-col :span="24" class="appTitle">App数据集管理</el-col>
<el-col :span="24" class="appDesicer">是对标准表单流程表单产生的数据进行统一管理对数据表优化和修复</el-col>
</el-row>
<el-image :src="props.appCont.appSvg">
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
<el-scrollbar class="gunDongTiao">
<el-card shadow="always" class="serchBox">
<el-form :model="queryParams" :inline="true" label-width="auto">
<el-form-item label="表单名称">
<el-input v-model="queryParams.name" clearable />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery" :icon="Search">查询</el-button>
</el-form-item>
</el-form>
</el-card>
<el-table :data="dataTableList" border style="width: 100%;margin: 0 0 0 0;" :header-cell-style="{fontSize: '14px', backgroundColor: '#f8f8f8',color:'#333'}">
<el-table-column prop="name" label="表单名称" />
<el-table-column label="页面类型" align="center" width="100">
<template #default="scope">
<el-tag type="primary" v-if="scope.row.flowkey!=0">流程表单</el-tag>
<el-tag type="info" v-else>表单</el-tag>
</template>
</el-table-column>
<el-table-column prop="creatername" label="创建人" align="center" width="100" />
<el-table-column prop="creatertimeStr" label="创建时间" />
<el-table-column label="设置" align="center" width="100">
<template #default="scope">
<el-button
type="warning"
link
size="small"
@click.stop="openDataTableStructure(scope.row)"
>
<i-ep-MessageBox />数据结构
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.page"
v-model:limit="queryParams.pagesize"
@pagination="handleQuery"
/>
</el-scrollbar>
</el-card>
</template>
<style lang='scss' scoped>
.appTitle{
font-size:22px;
}
.appDesicer{
padding: 15px 0 0 0;
color: #606266;
}
.boxTop{
margin: 15px 0 0 0;
padding: var(--el-card-padding);
}
.appContent{
padding: 10px 0 15px 0;
color: #606266;
border-bottom: 1px solid #F0F2F5;
}
.appManList{
padding: 30px 0 10px 0;
}
.powerBox{
height: calc(100vh - 70px);
:deep .el-card__body{
padding:0;
}
.gunDongTiao{
padding: 0 var(--el-card-padding);
height: calc(100vh - 185px);
}
}
.tipsBox{
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--el-card-padding);
.el-image {
padding: 0 5px;
max-width: 80px;
max-height: 70px;
width: 100%;
height: 70px;
border: 1px solid #F0F2F5;
border-radius: 5px;
background: var(--el-fill-color-light);
}
.image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
background: var(--el-fill-color-light);
color: var(--el-text-color-secondary);
font-size: 30px;
}
.image-slot .el-icon {
font-size: 30px;
}
}
.tableHead{
background-color: #000;
}
.serchBox{
margin-bottom:20px;
padding:var(--el-card-padding);
padding-bottom: 0px;
}
</style>

14
src/views/sysworkflow/lowcodepage/appPage/appSetUp/devops/appinfo.vue

@ -0,0 +1,14 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-29 09:17:41
@ 备注: 应用信息
-->
<script lang='ts' setup>
</script>
<template>
<div></div>
</template>
<style lang='scss' scoped>
</style>

38
src/views/sysworkflow/lowcodepage/appPage/appSetUp/devops/tableForm.vue

@ -0,0 +1,38 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-29 11:38:07
@ 备注: 数据页面
-->
<script lang='ts' setup>
import {
Ticket,
Finished
} from '@element-plus/icons-vue'
const props = defineProps({
isshow:{
type:Boolean,
default:true
},
formcont:{
type:Object,
default(){
return {}
}
},
})
const emits = defineEmits(["update:isshow"]);
const isShow = computed({
get: () => props.isshow,
set: (val) => {
emits("update:isshow", val);
},
});
</script>
<template>
<el-dialog v-model="isShow" :title="'<'+props.formcont.name+'>数据结构'" width="70%" draggable>
</el-dialog>
</template>
<style lang='scss' scoped>
</style>

8
src/views/sysworkflow/lowcodepage/appPage/appSetUp/index.vue

@ -6,6 +6,9 @@
<script lang='ts' setup>
import SetUp from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/setup.vue'
import AppPower from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/appPower.vue'
import AppDevOps from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/appDevOps.vue'
import DataManagement from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/dataManagement.vue'
const props = defineProps({
appCont:{
type:Object,
@ -82,9 +85,10 @@ const clickMenu = (key:number) => {
</el-aside>
<el-main class="appSetUpBox">
<el-scrollbar class="appSetUpDraw">
<SetUp v-if="activeMenuIndex==1" :app-cont="appCont" :group-key="props.groupKey" />
<AppPower v-if="activeMenuIndex==2" :app-cont="appCont" />
<AppPower v-if="activeMenuIndex==2" :app-cont="appCont" :group-key="props.groupKey" />
<AppDevOps v-if="activeMenuIndex==3" :app-cont="appCont" :group-key="props.groupKey" />
<DataManagement v-if="activeMenuIndex==4" :app-cont="appCont" :group-key="props.groupKey" />
</el-scrollbar>
</el-main>
</el-container>

80
src/views/sysworkflow/lowcodepage/appPage/appSetUp/looksee.vue

@ -7,7 +7,16 @@
import { userOrgRole,crumb } from '@/api/hr/search/types'
import PersonnelSelector from '@/views/hr/userBox.vue'
import { gainLookViews,setLookViews,setAppManagerInfo } from '@/api/hr/people/index'
const props = defineProps({
appCont:{
type:Object,
default(){
return {}
}
}
});
const lookSeeView = ref<userOrgRole[]>([]) //
@ -29,10 +38,68 @@ const setupUser = (types:number) => {
const pickInfo = (val:userOrgRole[]) =>{
isOpenBox.value = false;
lookSeeView.value = val.value
let sendInfo = {
id:props.appCont.uuid,
orgRoleUs:val.value
}
setLookViews(sendInfo)
.then((data:any) =>{
// console.log("sendInfo---->",data)
ElMessage({
showClose: true,
message: data.msg,
type: 'success',
})
})
}
/**
@ 作者: 秦东
@ 时间: 2024-05-27 16:42:51
@ 功能: 要删除的数据
*/
const delData = (val:userOrgRole) => {
if(lookSeeView.value.length > 0){
lookSeeView.value.forEach((item:userOrgRole,index:number)=>{
if(item.id == val.id){
console.log("isOpenBox----->item:",item)
console.log("isOpenBox----->index:",index)
lookSeeView.value.splice(index,1)
}
})
let sendInfo = {
id:props.appCont.uuid,
orgRoleUs:lookSeeView.value
}
setLookViews(sendInfo)
.then((data:any) =>{
// console.log("sendInfo---->",data)
ElMessage({
showClose: true,
message: data.msg,
type: 'success',
})
})
}
console.log("isOpenBox----->appMang:",lookSeeView)
}
/**
@ 作者: 秦东
@ 时间: 2024-05-29 08:15:45
@ 功能: 获取已选择的内容
*/
const oldPickList = () =>{
gainLookViews({id:props.appCont.uuid})
.then((data:any)=>{
lookSeeView.value = data.data.appLookView
})
}
onMounted(() => {
oldPickList()
})
</script>
<template>
<PersonnelSelector v-model:is-open="isOpenBox" :pick-list="lookSeeView" :types="2" @pickInfo="pickInfo" />
<PersonnelSelector v-model:is-open="isOpenBox" :pick-list="lookSeeView" :types="2" :org-true="1" @pickInfo="pickInfo" />
<el-card shadow="never" class="boxTop">
<el-row>
<el-col :span="24" class="appTitle">应用适用范围设置</el-col>
@ -48,8 +115,15 @@ const pickInfo = (val:userOrgRole[]) =>{
</td>
<td>
<el-space wrap :size="15">
<el-tag type="info" closable v-for="item in lookSeeView" >{{item.title}}</el-tag>
<el-tag
v-for="(item,index) in lookSeeView"
:key="index"
closable
type="info"
:disable-transitions="true"
@close="delData(item)">
{{item.title}}
</el-tag>
</el-space>
</td>

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

@ -23,6 +23,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
isNew:{
type: Boolean,
default: false,
},
drawerWith:{
type:Number,
default:0
@ -44,7 +48,7 @@ const props = defineProps({
default:""
}
});
const emits = defineEmits(["update:isShow","update:appPageKey","gainSunAppContent","updateInit"]);
const emits = defineEmits(["update:isShow","update:isNew","update:appPageKey","gainSunAppContent","updateInit"]);
const tabsActive = ref(1)
const route: any = useRoute().query || {}
const formConfigCont = reactive<customerFormConfig>({
@ -102,14 +106,37 @@ const closeSavePageForm = () =>{
emits("update:isShow",false)
emits("gainSunAppContent")
emits("updateInit")
emits("update:isNew",false)
// console.log("appPageInfo.value",appPageInfo.value)
appPageInfo.value.gainTableForm()
}
onBeforeMount(() => {
console.log("onBeforeMount",props.isNew)
console.log("onBeforeMount--->appPageKey",props.appPageKey)
let send = {
types:3
}
if(props.isNew){
props.appPageKey = ""
state.formData.list= []
formVersion.value = ""
appPageKey.value = ""
getProductionMarkForm(send)
.then(({data})=>{
formConfigCont.formlogo = data.formlogo
formConfigCont.formName = data.formname
formConfigCont.signCode = data.signCode
state.formData.form.name = data.formlogo
state.formData.form.formName = data.formname
state.formOtherData.formName = data.formname
})
.finally(()=>{
})
}
console.log("onBeforeMount",props.isNew)
console.log("onBeforeMount--2->appPageKey",props.appPageKey)
if(props.appPageKey == ""){
getProductionMarkForm(send)
.then(({data})=>{
@ -124,6 +151,7 @@ onBeforeMount(() => {
})
}
console.log("state------------>",state)
})
</script>
<template>

13
src/views/sysworkflow/lowcodepage/appPage/index.vue

@ -14,7 +14,7 @@ import AppMenuGroup from "@/views/sysworkflow/lowcodepage/appPage/appMenuGroup.v
import CreateAppFormPage from "@/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue"
import OpenAppFormPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue"
import AppSetUp from "@/views/sysworkflow/lowcodepage/appPage/appSetUp/index.vue"
import ReleaseApp from '@/views/sysworkflow/lowcodepage/appPage/releaseApp/index.vue'
const props = defineProps({
@ -67,6 +67,9 @@ const closeAppDraw = () =>{
emits("refreshPage")
tabsActive.value = 1
checkedMenu.value = ""
appPageKey.value = ""
props.formKey=""
isNew.value = false
}
onMounted(() =>{
// gainAppContent()
@ -116,8 +119,11 @@ const addMenu = (key?:string) => {
@ 功能: 创建页面
*/
const saveAppFormIsShow = ref(false)
const isNew = ref(false)
const addAppPageForm = (key?:string) => {
saveAppFormIsShow.value = true
isNew.value = true
console.log("新建-->")
}
/**
@ -137,6 +143,7 @@ const openAppPageForm = (val:appMenuTreeInfo) => {
const editAppInfo = (id:string) => {
appPageKey.value = id
saveAppFormIsShow.value = true
isNew.value = false
}
/**
@ 作者: 秦东
@ -236,7 +243,7 @@ watch(()=>tabsActive.value,(val:number)=>{
<AppMenus :form-Key="props.formKey" v-model:menus-tree="menusTree" v-model:app-page-key="appPageKey" :group-key="props.groupKey" :app-cont="appCont" :drawer-with="props.drawerWith" @openAppPageForm="openAppPageForm" />
<CreateAppFormPage v-if="saveAppFormIsShow" v-model:is-show="saveAppFormIsShow" :drawer-with="props.drawerWith" :form-Key="props.formKey" :app-cont="appCont" :group-key="props.groupKey" :menu-id="props.formKey" v-model:app-page-key="appPageKey" @gainSunAppContent="gainAppContent" @updateInit="updataPageInit" />
<CreateAppFormPage v-if="saveAppFormIsShow" v-model:is-show="saveAppFormIsShow" :is-new="isNew" :drawer-with="props.drawerWith" :form-Key="props.formKey" :app-cont="appCont" :group-key="props.groupKey" :menu-id="props.formKey" v-model:app-page-key="appPageKey" @gainSunAppContent="gainAppContent" @updateInit="updataPageInit" />
</el-scrollbar>
</el-aside>
@ -258,7 +265,7 @@ watch(()=>tabsActive.value,(val:number)=>{
<AppSetUp :app-cont="appCont" :group-key="props.groupKey" />
</el-container>
<el-container v-if="tabsActive==4">
<AppSetUp :app-cont="appCont" :group-key="props.groupKey" />
<ReleaseApp :app-cont="appCont" :group-key="props.groupKey" />
</el-container>
</el-container>
</div>

148
src/views/sysworkflow/lowcodepage/appPage/releaseApp/index.vue

@ -0,0 +1,148 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-29 13:25:09
@ 备注: 应用发布页面
-->
<script lang='ts' setup>
import { gainAppPageInfo,setCustomerFormState } from '@/api/DesignForm/requestapi'
const props = defineProps({
appCont:{
type:Object,
default(){
return {}
}
},
groupKey:{
type:String,
default:""
}
});
const appStatue = ref(true)
const isEdit = ref(false)
onMounted(()=>{
gainAppPageInfo({id:props.appCont.uuid})
.then((data)=>{
console.log("获取初始化表单数据",data)
if(data.data.appForm.states == 1){
appStatue.value = true
props.appCont.state = 1
}else{
appStatue.value = false
props.appCont.state = 2
}
})
.finally(()=>{
isEdit.value = true;
})
})
watch(()=>appStatue.value,(val:boolean) => {
let sta = 1
if(val){
props.appCont.state = 1
sta = 1
}else{
props.appCont.state = 2
sta = 2
}
setUpState(sta)
})
/**
@ 作者: 秦东
@ 时间: 2024-05-29 14:38:01
@ 功能: 设置状态
*/
const setUpState = (val:number) => {
setCustomerFormState({id:props.appCont.uuid,state:val})
.then((data)=>{
// ElMessage({
// showClose: true,
// message: data.msg,
// type: 'success',
// })
})
}
</script>
<template>
<div class="appBox">
<el-card class="appCardBox" shadow="always">
<table>
<tr>
<td width="100px" align="center">
<el-image :src="props.appCont.appSvg">
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</td>
<td width="150px" align="center">
<el-text v-if="appStatue" class="mx-1 bigWord" type="success">已启用</el-text>
<el-text v-else class="mx-1 bigWord" type="danger">已停用</el-text>
</td>
<td align="left" >
<el-text v-if="appStatue" class="mx-1" type="success">应用已启用为可用状态</el-text>
<el-text v-else class="mx-1" type="danger">应用已停用不可使用此App</el-text>
</td>
<td width="100px" align="right">
<el-switch
v-model="appStatue"
class="ml-2"
inline-prompt
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
active-text="已启用"
inactive-text="已停用"
/>
</td>
</tr>
</table>
</el-card>
</div>
</template>
<style lang='scss' scoped>
.appBox{
width:100%;
background-color : #F5F7FA;
height: calc(100vh - 40px);
text-align: center;
.appCardBox{
max-width: 60%;
min-width: 40%;
margin: 20px auto;
td{
vertical-align: middle;
.bigWord{
font-size:30px;
}
}
.el-image {
padding: 0 5px;
max-width: 80px;
max-height: 70px;
width: 100%;
height: 70px;
border: 1px solid #F0F2F5;
border-radius: 5px;
background: var(--el-fill-color-light);
}
.image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
background: var(--el-fill-color-light);
color: var(--el-text-color-secondary);
font-size: 30px;
}
.image-slot .el-icon {
font-size: 30px;
}
}
}
</style>

188
src/views/sysworkflow/lowcodepage/runApp/index.vue

@ -0,0 +1,188 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-30 09:45:37
@ 备注: 运行自定义APP
-->
<script lang='ts' setup>
import { useUserStore } from "@/store/modules/user";
const props = defineProps({
drawerWith:{
type:Number,
default:0
},
runIsOpen:{
type: Boolean,
default: false,
}
});
const userStore = useUserStore();
//
const appCont = reactive<appSetInfo>({
appKey:"1",
appName:"未知应用",
appSvg:"",
state:1,
uuid:"1",
describe:""
})
const emits = defineEmits(["update:runIsOpen","refreshPage"]);
</script>
<template>
<div class="drawerClass">
<el-drawer v-model="props.runIsOpen" title="设置/编辑自定义表单" :with-header="false" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith">
<div class="common-layout">
<el-container>
<el-header class="headerBox">
<div>
<el-space wrap>
<el-avatar shape="square" :size="25" :src="appCont.appSvg" />
<el-text>{{ appCont.appName }}</el-text>
</el-space>
</div>
<div>
<!-- <el-dropdown>
<el-avatar shape="square" :size="25" :src="userStore.avatar" />
<template #dropdown>
<table class="userTabel">
<tr>
<td rowspan="2"><el-avatar shape="square" :size="55" :src="userStore.avatar" /></td>
<td>{{ userStore.nickname }}({{ userStore.userInfoCont.number }})</td>
</tr>
<tr>
<td>{{ userStore.userInfoCont.companyname }}/{{ userStore.userInfoCont.departmentname }}</td>
</tr>
</table>
</template>
</el-dropdown> -->
<el-avatar shape="square" :size="25" :src="userStore.avatar" />
</div>
</el-header>
<el-container>
<el-aside class="asideBox">
<el-row>
<el-col :span="24" class="asideBoxSearch">
<el-input
v-model="input2"
style="width: 100%"
placeholder="搜索"
:suffix-icon="Search"
/>
</el-col>
</el-row>
</el-aside>
<el-main class="mainBox">
<el-scrollbar class="scroBox">
{{ userStore }}
</el-scrollbar>
</el-main>
</el-container>
</el-container>
</div>
</el-drawer >
</div>
</template>
<style lang='scss' scoped>
.common-layout{
.el-header{
padding-left:10px;
padding-right:10px;
}
.headerBox{
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #F1F2F3;
:deep(.el-tabs__nav-wrap::after) {
position: static !important;
}
:deep(.el-tabs__header){
margin:0 0 1px 0;
}
}
.asideBox{
width:250px;
border-right: 1px solid #F1F2F3;
height: calc(100vh - 40px);
.asideBoxSearch{
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 10px;
}
.scroBox{
height: calc(100vh - 95px);
.el-menu{
border-right: 0px;
}
li{
padding-left:10px;
padding-right:10px;
}
.menuBox{
display: flex;
align-items: center;
justify-content: space-between;
.textCenter{
display: flex;
align-items: center;
}
}
.el-menu-item{
height:40px;
}
.el-menu-item.is-active {
color: var(--el-menu-active-color);
background-color: #e4e4e4e4;
}
.el-menu-item:hover{
background-color: #f1f1f1f1!important;
}
}
}
.el-main {
padding: 10px;
}
.mainBox{
background-color: #F1F2F3;
padding:0px;
.scroBox{
height: calc(100vh - 40px);
}
}
}
.userTabel{
width:300px;
}
</style>
Loading…
Cancel
Save