Browse Source

修复

master
herenshan112 2 days ago
parent
commit
9648445fd4
  1. 8
      src/api/DesignForm/requestapi.ts
  2. 4
      src/api/DesignForm/type.ts
  3. 7
      src/components/DesignForm/public/expand/digitpage.vue
  4. 4
      src/components/DesignForm/public/form/formItem.vue
  5. 72
      src/views/hr/orgUserRole/orgrole.vue
  6. 34
      src/views/hr/userBox.vue
  7. 7
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/attribute.vue
  8. 1
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/appPower.vue
  9. 6
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/index.vue
  10. 523
      src/views/sysworkflow/lowcodepage/appPage/appSetUp/setupNew.vue
  11. 117
      src/views/sysworkflow/lowcodepage/appPage/createAppFormPage.vue
  12. 2
      src/views/sysworkflow/lowcodepage/appPage/index.vue
  13. 215
      vite.config.ts.timestamp-1774830788501-95b07eaa0e851.mjs

8
src/api/DesignForm/requestapi.ts

@ -472,6 +472,14 @@ export function appBasicSettings(data: any) {
data: data data: data
}); });
} }
//设置App基本信息及权限
export function setAppInfoPower(data: any) {
return request({
url: '/systemapi/app/setAppInfoPower',
method: 'post',
data: data
});
}
//获取应用下属表单 //获取应用下属表单
export function gianAppFormTable(data: any) { export function gianAppFormTable(data: any) {
return request({ return request({

4
src/api/DesignForm/type.ts

@ -34,7 +34,7 @@ export type CustomerFormPageResult = PageResult<customerFormCont[]>;
//初始化表单基本信息 //初始化表单基本信息
export interface customerFormConfig{ export interface customerFormConfig{
formName:string; formname:string;
formlogo:string; formlogo:string;
signCode:string; signCode:string;
} }
@ -42,7 +42,7 @@ export interface customerFormConfig{
export interface getContForId{ export interface getContForId{
id:string; id:string;
} }
//编辑表单状态 //编辑表单状态n
export interface editFormStatus{ export interface editFormStatus{
id:string[]; id:string[];
status:number; status:number;

7
src/components/DesignForm/public/expand/digitpage.vue

@ -5,18 +5,13 @@
--> -->
<script lang="ts" setup> <script lang="ts" setup>
import { import {
formatNumber,
objectToArray,
constControlChange,
constSetFormOptions,
constFormProps,
constAiEffect, constAiEffect,
constGetControlByName, constGetControlByName,
} from "@/api/DesignForm/utils"; } from "@/api/DesignForm/utils";
import { import {
AnalysisCss, AnalysisCss,
AnalysisInputCss, AnalysisInputCss,
} from "@/components/DesignForm/public/form/calculate/cssInfo.ts"; } from "@/components/DesignForm/public/form/calculate/cssInfo";
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{

4
src/components/DesignForm/public/form/formItem.vue

@ -25,9 +25,9 @@ import OrgCentent from "@/components/DesignForm/public/expand/org.vue";
import LokOrgCentent from "@/widget/org/cont.vue"; import LokOrgCentent from "@/widget/org/cont.vue";
import DigitpagePage from "@/components/DesignForm/public/expand/digitpage.vue"; import DigitpagePage from "@/components/DesignForm/public/expand/digitpage.vue";
// import LowcodeImagePage from "@/components/DesignForm/public/expand/lowcodeImage.vue"; import LowcodeImagePage from "@/components/DesignForm/public/expand/lowcodeImage.vue";
import LowcodeImagePage from '@/widget/lowcodeimage/index.vue' // import LowcodeImagePage from '@/widget/lowcodeimage/index.vue'
import UploadPage from "@/components/DesignForm/public/expand/uploadPage.vue"; import UploadPage from "@/components/DesignForm/public/expand/uploadPage.vue";
import UploadPageList from "@/components/DesignForm/public/expand/uploadPageList.vue"; import UploadPageList from "@/components/DesignForm/public/expand/uploadPageList.vue";

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

@ -270,7 +270,43 @@ defineExpose({
<el-scrollbar v-loading="loading" class="contentBox"> <el-scrollbar v-loading="loading" class="contentBox">
<ul> <ul>
<li v-for="item in listAry" :key="item.id" :class="item.isPick==1?'active':''"> <li v-for="item in listAry" :key="item.id" :class="item.isPick==1?'active':''">
<el-space v-if="orgTrue!=1&&item.types!=2" wrap @click="pickCont(item)">
<div v-if="orgTrue!=1&&item.types!=2" class="mianbaoxueDoy" @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>
<div v-if="item.types==2" class="contentLiLeft">
<svg-icon icon-class="cascader" />
<el-text @click="pickSunCont(item.id)">下级</el-text>
</div>
</div>
<div v-if="orgTrue!=1&&item.types==2" class="mianbaoxueDoy" >
<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>
<div v-if="item.types==2" class="contentLiLeft">
<svg-icon icon-class="cascader" />
<el-text @click="pickSunCont(item.id)">下级</el-text>
</div>
</div>
<div v-if="orgTrue==1" class="mianbaoxueDoy" >
<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>
<div v-if="item.types==2" class="contentLiLeft">
<svg-icon icon-class="cascader" />
<el-text @click="pickSunCont(item.id)">下级</el-text>
</div>
</div>
<!-- <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> <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==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" /> <svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
@ -294,7 +330,7 @@ defineExpose({
<div v-if="item.types==2" class="contentLiLeft"> <div v-if="item.types==2" class="contentLiLeft">
<svg-icon icon-class="cascader" /> <svg-icon icon-class="cascader" />
<el-text @click="pickSunCont(item.id)">下级</el-text> <el-text @click="pickSunCont(item.id)">下级</el-text>
</div> </div> -->
</li> </li>
</ul> </ul>
</el-scrollbar> </el-scrollbar>
@ -304,7 +340,22 @@ defineExpose({
<el-scrollbar v-loading="loading" class="contentBox"> <el-scrollbar v-loading="loading" class="contentBox">
<ul> <ul>
<li v-for="item in listRoleAry" :key="item.id" :class="item.isPick==1?'active':''"> <li v-for="item in listRoleAry" :key="item.id" :class="item.isPick==1?'active':''">
<el-space wrap @click="pickCont(item)">
<div class="mianbaoxueDoy" @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>
<div v-if="item.types==2" class="contentLiLeft">
<svg-icon icon-class="cascader" />
<el-text @click="pickSunCont(item.id)">下级</el-text>
</div>
</div>
<!-- <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> <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==2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types==3" icon-class="tasp" :size="20" /> <svg-icon v-if="item.types==3" icon-class="tasp" :size="20" />
@ -314,7 +365,7 @@ defineExpose({
<div v-if="item.types==2" class="contentLiLeft"> <div v-if="item.types==2" class="contentLiLeft">
<svg-icon icon-class="cascader" /> <svg-icon icon-class="cascader" />
<el-text @click="pickSunCont(item.id)">下级</el-text> <el-text @click="pickSunCont(item.id)">下级</el-text>
</div> </div> -->
</li> </li>
</ul> </ul>
</el-scrollbar> </el-scrollbar>
@ -342,6 +393,17 @@ defineExpose({
i { i {
font-size: 15px; font-size: 15px;
} }
.mianbaoxueDoy{
width: 100%;
display: grid;
grid-template-columns: 20px 25px 1fr 50px;
align-items: center;
justify-content: center;
div{
cursor: pointer;
text-align: center;
}
}
} }
li:hover { li:hover {
background-color: #EBEEF5; background-color: #EBEEF5;
@ -361,7 +423,7 @@ defineExpose({
} }
.contentLiLeft{ .contentLiLeft{
border-left: 1px dashed #909399; border-left: 1px dashed #909399;
padding-left: 10px; // padding-left: 10px;
} }
.pickBox{ .pickBox{
height: 420px; height: 420px;

34
src/views/hr/userBox.vue

@ -201,7 +201,7 @@ onMounted(() => {
<el-scrollbar class="pickBox"> <el-scrollbar class="pickBox">
<ul> <ul>
<li v-for="item in pickListAry" :key="item.id"> <li v-for="item in pickListAry" :key="item.id">
<el-space wrap> <div class="mianbaoxueDoy">
<svg-icon v-if="item.types == 2" icon-class="fenZhu" :size="20" /> <svg-icon v-if="item.types == 2" icon-class="fenZhu" :size="20" />
<svg-icon v-if="item.types == 3" icon-class="tasp" :size="20" /> <svg-icon v-if="item.types == 3" icon-class="tasp" :size="20" />
<el-avatar <el-avatar
@ -211,10 +211,23 @@ onMounted(() => {
:src="circleUrl" :src="circleUrl"
/> />
<el-text>{{ item.title }}</el-text> <el-text>{{ item.title }}</el-text>
</el-space> <div><svg-icon icon-class="cwkx" @click="delPickCont(item)" /></div>
<div>
<svg-icon icon-class="cwkx" @click="delPickCont(item)" />
</div> </div>
<!-- <el-space wrap>
<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>
<svg-icon icon-class="cwkx" @click="delPickCont(item)" />
</div> -->
</li> </li>
</ul> </ul>
</el-scrollbar> </el-scrollbar>
@ -232,6 +245,7 @@ onMounted(() => {
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.allBianLink { .allBianLink {
width: 100%;
border: 1px solid #e6e8eb; border: 1px solid #e6e8eb;
.leftLink { .leftLink {
border-left: 1px solid #e6e8eb; border-left: 1px solid #e6e8eb;
@ -294,10 +308,20 @@ onMounted(() => {
justify-content: space-between; justify-content: space-between;
width: 100%; width: 100%;
padding: 5px 5px; padding: 5px 5px;
cursor: pointer;
i { i {
font-size: 15px; font-size: 15px;
} }
.mianbaoxueDoy{
width: 100%;
display: grid;
grid-template-columns: 30px 1fr 30px;
align-items: center;
justify-content: center;
div{
cursor: pointer;
text-align: center;
}
}
} }
li:hover { li:hover {
background-color: #f56c6c; background-color: #f56c6c;

7
src/views/sysworkflow/lowcodepage/appPage/appPageForm/unitsPageFrom/attribute.vue

@ -1595,7 +1595,7 @@ const formAttr = computed(() => {
label: "表单名称", label: "表单名称",
placeholder: "用于保存的表单名称", placeholder: "用于保存的表单名称",
value: formData.value.formName, value: formData.value.formName,
key: "formName", key: "formname",
hide: isSearch, hide: isSearch,
disabled: false, disabled: false,
}, },
@ -3527,6 +3527,8 @@ onMounted(() => {
getDataSource(); getDataSource();
getRoleTree() getRoleTree()
}) })
console.log("表单数据",formData.value)
}); });
// //
const isNotWrite = (val: any) => { const isNotWrite = (val: any) => {
@ -4909,7 +4911,7 @@ function mergeAndFilterFormTrees(treeA: any, treeB: any | any[], compId: any) {
@ 时间: 2026-03-03 08:42:52 @ 时间: 2026-03-03 08:42:52
@ 功能: 递归查找树节点 @ 功能: 递归查找树节点
*/ */
const findTreeNode = (tree: any[], id: any) => { const findTreeNode = (tree: any[], id: any):any => {
if (!tree || !Array.isArray(tree)) return null if (!tree || !Array.isArray(tree)) return null
for (let node of tree) { for (let node of tree) {
@ -7410,6 +7412,7 @@ const updataBase = (val: any) => {
:label="item.label" :label="item.label"
class="form_cont" class="form_cont"
> >
<el-select <el-select
v-if="item.type === 'select'" v-if="item.type === 'select'"
v-model="item.value" v-model="item.value"

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

@ -42,6 +42,7 @@ const powerUser = ref<userOrgRole[]>([]) //管理员
</el-card> </el-card>
</template> </template>
<style lang='scss' scoped> <style lang='scss' scoped>
.appTitle{ .appTitle{
font-size:22px; font-size:22px;
} }

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

@ -63,7 +63,7 @@ const clickMenu = (key: number) => {
<span>基础设置</span> <span>基础设置</span>
</template> </template>
</el-menu-item> </el-menu-item>
<el-menu-item index="2" @click="clickMenu(2)"> <el-menu-item v-if="false" index="2" @click="clickMenu(2)">
<template #title> <template #title>
<i class="fa fa-lock icont"></i> <i class="fa fa-lock icont"></i>
<span>应用权限</span> <span>应用权限</span>
@ -85,11 +85,11 @@ const clickMenu = (key: number) => {
</el-aside> </el-aside>
<el-main class="appSetUpBox"> <el-main class="appSetUpBox">
<el-scrollbar class="appSetUpDraw"> <el-scrollbar class="appSetUpDraw">
<SetUp <!-- <SetUp
v-if="activeMenuIndex == 1" v-if="activeMenuIndex == 1"
:app-cont="appCont" :app-cont="appCont"
:group-key="props.groupKey" :group-key="props.groupKey"
/> /> -->
<SetUpNew <SetUpNew
v-if="activeMenuIndex == 1" v-if="activeMenuIndex == 1"
:app-cont="appCont" :app-cont="appCont"

523
src/views/sysworkflow/lowcodepage/appPage/appSetUp/setupNew.vue

@ -4,26 +4,533 @@
@ 备注: 自定义App基础设置及权限设置 @ 备注: 自定义App基础设置及权限设置
--> -->
<script lang='ts' setup> <script lang='ts' setup>
import { uploadUrlNew } from "@/api/DesignForm";
import { customerFormGroupList, setAppInfoPower } from "@/api/DesignForm/requestapi";
import { appSetUpContent } from "@/api/DesignForm/types";
import SvgIcon from "@/components/SvgIcon/index.vue";
import LookSee from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/looksee.vue'
import AppManager from '@/views/sysworkflow/lowcodepage/appPage/appSetUp/appManager.vue'
import PersonnelSelector from '@/views/hr/userBox.vue'
import { ComponentSize, FormInstance, FormRules, UploadProps } from "element-plus";
import { userOrgRole } from "@/api/hr/search/types";
import { gainLookViews, setAppManagerInfo, setLookViews } from "@/api/hr/people";
import Setuprolepower from "@/views/powermanage/rolepower/setuprole/setuprolepower.vue";
import { useUserStore } from "@/store/modules/user";
const props = defineProps({
appCont: {
type: Object,
default() {
return {};
},
},
groupKey: {
type: String,
default: "",
},
});
const userStore = useUserStore();
const appContVal = computed(() => props.appCont)
const pickStep = ref(1); const pickStep = ref(1);
const ruleFormRef = ref(ElForm);
const appLoading = ref(false);
const isOpenBox = ref(false);
const appIsOpenBox = ref(false);
const formSize = ref<ComponentSize>("default");
const rules = reactive<FormRules<appSetUpContent>>({
groupKey: [{ required: true, message: "请选择分组", trigger: "blur" }],
title: [{ required: true, message: "请输入App名称", trigger: "blur" }],
});
const appSetupCont = reactive<appSetUpContent>({
id: appContVal.value.uuid,
title: appContVal.value.appName,
appSvg: appContVal.value.appSvg,
groupKey: props.groupKey,
appdescribe: appContVal.value.describe,
});
const formGroup = ref<any[]>([]); //App
const lookSeeView = ref<userOrgRole[]>([])
const appMang = ref<userOrgRole[]>([])
//App
const gainFormGroupList = () => {
let sendInfo = {
page: 1,
pagesize: 10000,
state: 1,
};
customerFormGroupList(sendInfo).then((data) => {
formGroup.value = data.data.list;
});
};
/**
@ 作者: 秦东
@ 时间: 2024-05-23 09:20:29
@ 功能: 上传成功后回调
*/
const handleAvatarSuccess: UploadProps["onSuccess"] = (response, uploadFile) => {
// imageUrl.value = URL.createObjectURL(uploadFile.raw!)
appSetupCont.appSvg = response.data.url;
// appSetupUpImg.clearFiles()
};
/**
@ 作者: 秦东
@ 时间: 2024-05-10 11:28:40
@ 功能: 上传前验证
*/
const beforeAvatarUpload: UploadProps["beforeUpload"] = (rawFile) => {
if (
rawFile.type !== "image/jpeg" &&
rawFile.type !== "image/jpg" &&
rawFile.type !== "image/png" &&
rawFile.type !== "image/gif" &&
rawFile.type !== "image/icon"
) {
ElMessage.error("请上传以下格式的图片(jpg、jpeg、png、gif、icon)!" + rawFile.type);
return false;
} else if (rawFile.size / 1024 / 1024 > 800) {
ElMessage.error("图片大小不要大于 800MB!");
return false;
}
return true;
};
/**
@ 作者: 秦东
@ 时间: 2026-03-25 14:36:55
@ 功能: 下一步
*/
const nextPickStep = () => {
appLoading.value = true;
ruleFormRef.value.validate((isValid: boolean) => {
if (isValid) {
pickStep.value = 2;
appLoading.value = false;
} else {
appLoading.value = false;
}
})
}
/**
@ 作者: 秦东
@ 时间: 2024-05-22 16:10:27
@ 功能: 重置表单
*/
const resetForm = () => {
ruleFormRef.value.resetFields();
};
/**
@ 作者: 秦东
@ 时间: 2024-05-29 08:15:45
@ 功能: 获取已选择的内容
*/
const oldPickList = () =>{
gainLookViews({id:appContVal.value.uuid})
.then((data:any)=>{
console.log("data--获取已选择的内容-->",data)
lookSeeView.value = data.data.appLookView
appMang.value = data.data.appManager
})
}
/**
@ 作者: 秦东
@ 时间: 2024-05-27 16:42:51
@ 功能: 要删除的数据
*/
const delData = (val:userOrgRole,type:number) => {
if(type == 1){
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',
// })
// })
}
}else{
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',
// })
// })
}
}
userStore.getInfo().then((data:any) => {
console.log("data---->",data)
})
// console.log("isOpenBox----->appMang:",appMang)
}
// watch(()=>pickStep.value,() => {
// oldPickList()
// },{
// immediate: true
// })
/**
@ 作者: 秦东
@ 时间: 2026-03-25 14:53:29
@ 功能: 提交数据
*/
const submitData = () => {
console.log("appInfoAndPower---->",Array.isArray(appMang.value))
appLoading.value = true;
if(!appSetupCont.groupKey || appSetupCont.groupKey == "" || appSetupCont.groupKey == "0" || appSetupCont.groupKey == null){
ElMessage.error("请选择分组!");
appLoading.value = false;
pickStep.value = 1;
return;
}
if(!appSetupCont.title || appSetupCont.title == "" || appSetupCont.title == "0" || appSetupCont.title == null){``
ElMessage.error("请输入App名称!");
appLoading.value = false;
pickStep.value = 1;
return;
}
if(!lookSeeView.value || !Array.isArray(lookSeeView.value) ){
ElMessage.error("请选择App查看权限!");
appLoading.value = false;
pickStep.value = 2;
return;
}
if(!appMang.value || !Array.isArray(appMang.value) ){
ElMessage.error("请选择App管理员!");
appLoading.value = false;
pickStep.value = 2;
return;
}
console.log("appInfoAndPower---->",Array.isArray(appMang.value))
let appContAndPower = {
id:appContVal.value.uuid,
appInfo:appSetupCont,
seePower:lookSeeView.value,
appPower:appMang.value
}
console.log("appInfoAndPower---->",appContAndPower)
setAppInfoPower(appContAndPower)
.then((data:any) =>{
console.log("data---->",data)
userStore.getInfo().then((data:any) => {
console.log("data---->",data)
})
ElMessage({
showClose: true,
message: data.msg,
type: 'success',
})
})
.catch((error:any) =>{
console.log("error---->",error)
ElMessage({
showClose: true,
message: error.msg,
type: 'error',
})
})
.finally(() => {
appLoading.value = false;
})
}
/**
@ 作者: 秦东
@ 时间: 2026-03-25 15:32:53
@ 功能: 打开设置可见范围成员选择
*/
const setupLookUser = () => {
isOpenBox.value = true;
}
/**
@ 作者: 秦东
@ 时间: 2026-03-25 15:32:10
@ 功能: 设置可见范围
*/
const pickInfoSee = (val:any) => {
isOpenBox.value = false;
lookSeeView.value = val.value
let sendInfo = {
id:appContVal.value.uuid,
orgRoleUs:val.value
}
setLookViews(sendInfo)
.then((data:any) =>{
ElMessage({
showClose: true,
message: data.msg,
type: 'success',
})
})
}
/**
@ 作者: 秦东
@ 时间: 2026-03-25 15:41:04
@ 功能: 打开设置App管理员成员选择
*/
const setupAppUser = () => {
appIsOpenBox.value = true;
}
/**
@ 作者: 秦东
@ 时间: 2026-03-25 15:40:24
@ 功能: 设置App管理员
*/
const pickInfoApp = (val:any) => {
appIsOpenBox.value = false;
appMang.value = val.value
let sendInfo = {
id:appContVal.value.uuid,
orgRoleUs:val.value
}
setAppManagerInfo(sendInfo)
.then((data:any) =>{
ElMessage({
showClose: true,
message: data.msg,
type: 'success',
})
})
}
onMounted(() => {
gainFormGroupList();
oldPickList();
});
</script> </script>
<template> <template>
<div class="app-content"> <el-card shadow="always">
<el-steps style="max-width: 600px" :active="1"> <el-steps class="strp-box" :active="pickStep" align-center>
<el-step title="Step 1" > <el-step >
<template #icon> <template #icon>
<i class="fa fa-cog"></i> <SvgIcon icon-class="ziJianApp" size="50" />
</template>
<template #title>
App基础设置
</template> </template>
</el-step> </el-step>
<el-step title="Step 2" > <el-step >
<template #icon> <template #icon>
<i class="fa fa-search"></i> <SvgIcon icon-class="hzhbmygl" size="50" />
</template>
<template #title>
应用相关权限配置
</template> </template>
</el-step> </el-step>
</el-steps> </el-steps>
</div> <div class="step-content">
<el-form
v-if="pickStep==1"
ref="ruleFormRef"
v-loading="appLoading"
:model="appSetupCont"
:rules="rules"
label-width="auto"
class="demo-ruleForm"
:size="formSize"
status-icon
>
<el-form-item label="归属分组" prop="groupKey">
<el-select v-model="appSetupCont.groupKey" placeholder="请选择分组">
<el-option
v-for="item in formGroup"
:key="item.idStr"
:label="item.title"
:value="item.idStr"
/>
</el-select>
</el-form-item>
<el-form-item label="App名称" prop="title">
<el-input
v-model="appSetupCont.title"
placeholder="请输入App名称"
clearable
style="width: 300px"
/>
</el-form-item>
<el-form-item label="App图标" prop="icont">
<el-upload
ref="appSetupUpImg"
class="upload-demo"
:drag="true"
:action="uploadUrlNew"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
>
<el-image
v-if="appSetupCont.appSvg && appSetupCont.appSvg != ''"
:src="appSetupCont.appSvg"
fit="cover"
class="avatar"
/>
<div v-else>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">将文件拖到此处或 <em>单击上传</em></div>
</div>
</el-upload>
</el-form-item>
<el-form-item label="应用描述">
<el-input
v-model="appSetupCont.appdescribe"
type="textarea"
show-word-limit
maxlength="300"
:rows="6"
style="width: 60%"
/>
</el-form-item>
</el-form>
<div v-else>
<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="setupLookUser()">设置成员</el-button>
<PersonnelSelector v-model:is-open="isOpenBox" :pick-list="lookSeeView" :types="2" :org-true="1" @pick-info="pickInfoSee" />
</td>
<td>
<el-space wrap :size="15">
<el-tag
v-for="(item,index) in lookSeeView"
:key="index"
closable
type="info"
:disable-transitions="true"
@close="delData(item,1)">
{{item.title}}
</el-tag>
</el-space>
</td>
</tr>
</table>
</el-col>
</el-row>
<el-divider />
<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="setupAppUser()">设置成员</el-button>
<PersonnelSelector v-model:is-open="appIsOpenBox" :pick-list="appMang" :types="2" :org-true="1" @pick-info="pickInfoApp" />
</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,2)">
{{item.title}}
</el-tag>
</el-space>
</td>
</tr>
</table>
</el-col>
</el-row>
</div>
</div>
<div class="step-footer">
<!-- <el-button v-if="pickStep==1" type="primary" @click="resetForm">重置</el-button> -->
<el-button v-if="pickStep==1" type="primary" :loading="appLoading" @click="nextPickStep" >下一步</el-button>
<el-button v-if="pickStep==2" type="primary" :loading="appLoading" @click="pickStep = 1">上一步</el-button>
<el-button v-if="pickStep==2" type="success" :loading="appLoading" @click="submitData">保存设置</el-button>
</div>
</el-card>
</template> </template>
<style lang='scss' scoped> <style lang='scss' scoped>
.app-content { .boxk {
width: 100%;
background: var(--el-fill-color-light);
}
.avatar {
width: 150px;
height: 150px;
}
.butClass {
text-align: center;
}
.strp-box {
max-width: 95%;
margin-top: 30px;
margin-bottom: 30px;
}
.step-content {
width: 100%;
}
.step-footer {
width: 100%;
display: flex;
justify-content: flex-end;
margin-top: 30px;
}
.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> </style>

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

@ -21,6 +21,7 @@ import PrintSetupPage2 from "@/views/sysworkflow/lowcodepage/appPage/appPageForm
import AiPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/aiPage.vue"; import AiPage from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/aiPage.vue";
import DataBpard from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/dataBoard.vue"; import DataBpard from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/dataBoard.vue";
import ContentPresentation from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/contentPresentation.vue"; import ContentPresentation from "@/views/sysworkflow/lowcodepage/appPage/appPageForm/contentPresentation.vue";
import { useUserStore } from "@/store/modules/user";
const props = defineProps({ const props = defineProps({
appCont: { appCont: {
@ -69,10 +70,11 @@ const emits = defineEmits([
"gainSunAppContent", "gainSunAppContent",
"updateInit", "updateInit",
]); ]);
const userStore = useUserStore();
const tabsActive = ref(1); const tabsActive = ref(1);
const route: any = useRoute().query || {}; const route: any = useRoute().query || {};
const formConfigCont = reactive<customerFormConfig>({ const formConfigCont = reactive<customerFormConfig>({
formName: "", formname: "",
formlogo: "", formlogo: "",
signCode: "", signCode: "",
}); });
@ -88,52 +90,54 @@ const appPageKey = computed({
const formVersion = ref<string>(""); const formVersion = ref<string>("");
const formPageId = ref<string>(""); const formPageId = ref<string>("");
const state = reactive<formStruct>({ const state = reactive<formStruct>({
formData: { formData: {
list: [], list: [],
form: { form: {
size: "default", size: "default",
name: "", name: "",
formName: formConfigCont.formName, formName: formConfigCont.formname,
dataTitle: [], dataTitle: [],
labelPosition: "left", labelPosition: "left",
dataSource: "no", dataSource: "no",
dataSourceConfig: { dataSourceConfig: {
id: "", id: "",
dataBaseName: "", dataBaseName: "",
tableName: "", tableName: "",
tableKey: "", tableKey: "",
dsn: {}, dsn: {},
}, },
qrCodeFlag: false, qrCodeFlag: false,
qrCodeInside: false, qrCodeInside: false,
qrCodeOutside: false, qrCodeOutside: false,
qrCodePrintStyle: undefined, qrCodePrintStyle: undefined,
qrCodeShowFields: undefined qrCodeShowFields: undefined
},
config: {
groupKey: props.formKey,
classify: 4,
},
styles: {
labelPosition: "",
divStyle: {},
labelStyle: {},
inputStyle: {},
},
purview: [],
aiConfig: [],
}, },
config: { editor: {},
groupKey: props.formKey, loading: false,
classify: 4, formDataPreview: {},
previewVisible: false, //
designType: route.type, // search
formDict: {},
formOtherData: {
source: route.source || "",
formName: formConfigCont.formname,
}, },
styles: { echatsViews: [],
labelPosition: "", tooltip: undefined,
divStyle: {}, isSearch: undefined
labelStyle: {},
inputStyle: {},
},
purview: [],
aiConfig: [],
},
editor: {},
loading: false,
formDataPreview: {},
previewVisible: false, //
designType: route.type, // search
formDict: {},
formOtherData: {
source: route.source || "",
formName: formConfigCont.formName,
},
echatsViews: [],
}); });
const appPageInfo = ref(); const appPageInfo = ref();
/** /**
@ -146,6 +150,9 @@ const closeSavePageForm = () => {
emits("gainSunAppContent"); emits("gainSunAppContent");
emits("updateInit"); emits("updateInit");
emits("update:isNew", false); emits("update:isNew", false);
userStore.getInfo().then((data:any) => {
console.log("data---->",data)
})
// console.log("appPageInfo.value",appPageInfo.value) // console.log("appPageInfo.value",appPageInfo.value)
if (tabsActive.value == 1) { if (tabsActive.value == 1) {
appPageInfo.value.gainTableForm(); appPageInfo.value.gainTableForm();
@ -166,11 +173,11 @@ onBeforeMount(() => {
getProductionMarkForm(send) getProductionMarkForm(send)
.then(({ data }) => { .then(({ data }) => {
formConfigCont.formlogo = data.formlogo; formConfigCont.formlogo = data.formlogo;
formConfigCont.formName = data.formName; formConfigCont.formname = data.formname;
formConfigCont.signCode = data.signCode; formConfigCont.signCode = data.signCode;
state.formData.form.name = data.formlogo; state.formData.form.name = data.formlogo;
state.formData.form.formName = data.formName; state.formData.form.formName = data.formname;
state.formOtherData.formName = data.formName; state.formOtherData.formName = data.formname;
}) })
.finally(() => {}); .finally(() => {});
} }
@ -180,20 +187,26 @@ onBeforeMount(() => {
getProductionMarkForm(send) getProductionMarkForm(send)
.then(({ data }) => { .then(({ data }) => {
formConfigCont.formlogo = data.formlogo; formConfigCont.formlogo = data.formlogo;
formConfigCont.formName = data.formName; formConfigCont.formname = data.formname;
formConfigCont.signCode = data.signCode; formConfigCont.signCode = data.signCode;
state.formData.form.name = data.formlogo; state.formData.form.name = data.formlogo;
state.formData.form.formName = data.formName; state.formData.form.formName = data.formname;
state.formOtherData.formName = data.formName; state.formOtherData.formName = data.formname;
}) })
.finally(() => {}); .finally(() => {});
} }
// console.log("state------------>",state) // console.log("state------------>",state)
}); });
const openDrawer = computed(() => {
return props.isShow;
});
const handleClick = (tab: any) => {
console.log("tab",tab)
}
</script> </script>
<template> <template>
<el-drawer <el-drawer
v-model="props.isShow" v-model="openDrawer"
title="设置/编辑自定义表单" title="设置/编辑自定义表单"
:with-header="false" :with-header="false"
:close-on-click-modal="false" :close-on-click-modal="false"

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

@ -74,7 +74,7 @@ const handleClick = () => {};
*/ */
const closeAppDraw = () => { const closeAppDraw = () => {
emits("update:isShow", false); emits("update:isShow", false);
// emits("refreshPage"); emits("refreshPage");
// tabsActive.value = 1; // tabsActive.value = 1;
checkedMenu.value = ""; checkedMenu.value = "";
appPageKey.value = ""; appPageKey.value = "";

215
vite.config.ts.timestamp-1774830788501-95b07eaa0e851.mjs

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save