23 changed files with 1631 additions and 81 deletions
@ -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> |
||||
@ -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> |
||||
@ -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> |
||||
@ -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> |
||||
@ -0,0 +1,14 @@ |
|||||
|
<!-- |
||||
|
@ 作者: 秦东 |
||||
|
@ 时间: 2024-05-29 09:17:41 |
||||
|
@ 备注: 应用信息 |
||||
|
--> |
||||
|
<script lang='ts' setup> |
||||
|
|
||||
|
</script> |
||||
|
<template> |
||||
|
<div></div> |
||||
|
</template> |
||||
|
<style lang='scss' scoped> |
||||
|
|
||||
|
</style> |
||||
@ -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> |
||||
@ -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> |
||||
@ -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…
Reference in new issue