Browse Source

Merge branch 'qin_v6'

# Conflicts:
#	src/components/DesignForm/formControlPropertiNew.vue
lwx_v11
hreenshan112 1 year ago
parent
commit
5f70873491
  1. 281
      src/components/DesignForm/assembly/index.ts
  2. 8975
      src/components/DesignForm/formControlPropertiNew.vue
  3. 70
      src/layout/components/Top.vue
  4. 166
      src/layout/index.vue
  5. 178
      src/views/dashboard/index.vue
  6. 459
      src/views/hr/userBox.vue
  7. 450
      src/views/sysworkflow/lowcodepage/newLowCode/appLayout/appContainer.vue
  8. 696
      src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue

281
src/components/DesignForm/assembly/index.ts

@ -17,6 +17,146 @@ const config: { optionsType: number } = {
optionsType: 0 // 0固定 1数据源 2 接口字典 3系统表单字段
}
export default [
{
title: '布局字段',
children: [
{
type: 'grid',
label: '格栅布局',
unitName: '格栅布局',
icon: 'grid',
iconFont: 'fa-th-large',
columns: [
// 格栅列数据
{
attr: { span: 12 },
list: []
},
{
attr: { span: 12 },
list: []
}
],
control: {},
config: {},
styles: {
divStyle: {
// marginBot: "15"
},
labelStyle: {
// paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'card',
label: '卡片布局',
unitName: '卡片布局',
icon: 'card',
iconFont: 'fa-credit-card',
list: [],
control: {},
config: {},
item: {}, // label标题相关
styles: {
divStyle: {
// marginBot: "15"
},
labelStyle: {
// paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'flex',
label: '弹性布局',
unitName: '弹性布局',
icon: 'flex',
iconFont: 'fa-file-text-o',
list: [],
tableData: [], // 值集合
control: {},
config: {
addBtnText: '添加一行'
},
styles: {
divStyle: {
// marginBot: "15"
},
labelStyle: {
// paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'div',
label: '容器',
unitName: '容器',
icon: 'div',
iconFont: '',
control: {},
config: {},
list: [],
styles: {
divStyle: {
// marginBot: "15"
},
labelStyle: {
// paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'tabs',
label: '标签页',
unitName: '标签页',
icon: 'tabs',
iconFont: 'fa-folder-o',
columns: [
{
label: 'Tab1',
unitName: '',
list: []
}
],
control: {},
config: {},
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'divider',
label: '分割线',
unitName: '分割线',
icon: 'divider',
iconFont: '',
control: {},
config: {},
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
paddingLeft: "7",
},
inputStyle: {}
}
},
]
},
{
title: '基础字段',
children: [
@ -391,146 +531,7 @@ export default [
]
},
{
title: '布局字段',
children: [
{
type: 'grid',
label: '格栅布局',
unitName: '格栅布局',
icon: 'grid',
iconFont: 'fa-th-large',
columns: [
// 格栅列数据
{
attr: { span: 12 },
list: []
},
{
attr: { span: 12 },
list: []
}
],
control: {},
config: {},
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'card',
label: '卡片布局',
unitName: '卡片布局',
icon: 'card',
iconFont: 'fa-credit-card',
list: [],
control: {},
config: {},
item: {}, // label标题相关
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'flex',
label: '弹性布局',
unitName: '弹性布局',
icon: 'flex',
iconFont: 'fa-file-text-o',
list: [],
tableData: [], // 值集合
control: {},
config: {
addBtnText: '添加一行'
},
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'div',
label: '容器',
unitName: '容器',
icon: 'div',
iconFont: '',
control: {},
config: {},
list: [],
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'tabs',
label: '标签页',
unitName: '标签页',
icon: 'tabs',
iconFont: 'fa-folder-o',
columns: [
{
label: 'Tab1',
unitName: '',
list: []
}
],
control: {},
config: {},
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
paddingLeft: "7",
},
inputStyle: {}
}
},
{
type: 'divider',
label: '分割线',
unitName: '分割线',
icon: 'divider',
iconFont: '',
control: {},
config: {},
styles: {
divStyle: {
marginBot: "15"
},
labelStyle: {
paddingLeft: "7",
},
inputStyle: {}
}
},
]
},
{
title: '高级控件',

8975
src/components/DesignForm/formControlPropertiNew.vue

File diff suppressed because it is too large

70
src/layout/components/Top.vue

@ -1,39 +1,39 @@
<script setup lang="ts">
import {storeToRefs} from "pinia";
import { storeToRefs } from "pinia";
import EditMyPassword from "@/layout/components/myconst/editmypassword.vue";
import {useUserStore} from "@/store/modules/user";
import {useAppStore} from "@/store/modules/app";
import {Position} from "@element-plus/icons-vue";
import { useUserStore } from "@/store/modules/user";
import { useAppStore } from "@/store/modules/app";
import { Position } from "@element-plus/icons-vue";
const userStore = useUserStore();
const appStore = useAppStore();
const {device} = storeToRefs(appStore); // desktop- || mobile-
const { device } = storeToRefs(appStore); // desktop- || mobile-
const myPasswordBoxIsShow = ref(false);
const date: Date = new Date();
const tipsType = ref<number>(1)
const tipsType = ref<number>(1);
//
const greetings = computed(() => {
if (date.getHours() >= 6 && date.getHours() < 8) {
tipsType.value = 1
tipsType.value = 1;
return "晨起披衣出草堂,轩窗已自喜微凉🌅!";
} else if (date.getHours() >= 8 && date.getHours() < 12) {
tipsType.value = 2
tipsType.value = 2;
return "上午好🌞!";
} else if (date.getHours() >= 12 && date.getHours() < 18) {
tipsType.value = 3
tipsType.value = 3;
return "下午好☕!";
} else if (date.getHours() >= 18 && date.getHours() < 24) {
tipsType.value = 4
tipsType.value = 4;
return "晚上好🌃!";
} else if (date.getHours() >= 0 && date.getHours() < 6) {
tipsType.value = 5
tipsType.value = 5;
return "偷偷向银河要了一把碎星,只等你闭上眼睛撒入你的梦中,晚安🌛!";
}
});
const {isFullscreen, toggle} = useFullscreen();
const { isFullscreen, toggle } = useFullscreen();
/**
* 注销
@ -45,22 +45,20 @@ function logout() {
type: "warning",
}).then(() => {
userStore
.logout()
.then(() => {
tagsViewStore.delAllViews();
})
.then(() => {
router.push(`/login?redirect=${route.fullPath}`);
});
.logout()
.then(() => {
tagsViewStore.delAllViews();
})
.then(() => {
router.push(`/login?redirect=${route.fullPath}`);
});
});
}
/**
* 打开个人资料
*/
const openMyContBox = () => {
}
const openMyContBox = () => {};
/**
* 修改个人密码
*/
@ -68,17 +66,15 @@ const editMyPasswordForm = () => {
// console.log("");
myPasswordBoxIsShow.value = true;
// console.log("",myPasswordBoxIsShow.value );
}
};
</script>
<template>
<div class="top">
<div class="logo">
<img src="../../assets/images/logo.png">
<img src="../../assets/images/logo.png" />
</div>
<div class="flex">
<!-- &lt;!&ndash; 导航栏设置(窄屏隐藏)&ndash;&gt;-->
<div v-if="device !== 'mobile'" class="setting-container">
<!-- <el-text v-if="tipsType==1" class="mx-1" type="success">{{ greetings }}</el-text>-->
@ -88,22 +84,20 @@ const editMyPasswordForm = () => {
<!-- <el-text v-if="tipsType==5" class="mx-1">{{ greetings }}</el-text>-->
<!--全屏 -->
<div class="setting-item" @click="toggle">
<svg-icon
:icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
/>
<svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'" />
</div>
<!-- 布局大小 -->
<el-tooltip content="布局大小" effect="dark" placement="bottom">
<size-select class="setting-item"/>
<size-select class="setting-item" />
</el-tooltip>
<!--语言选择-->
<lang-select class="setting-item"/>
<lang-select class="setting-item" />
</div>
<!-- &lt;!&ndash; 用户头像 &ndash;&gt;-->
<el-dropdown trigger="click">
<div class="avatar-container">
<img :src="userStore.avatar + '?imageView2/1/w/80/h/80'"/>
<img :src="userStore.avatar + '?imageView2/1/w/80/h/80'" />
<span style="padding: 0 10px">{{ userStore.nickname }}</span>
<arrow-down class="w-3 h-3"></arrow-down>
</div>
@ -112,8 +106,12 @@ const editMyPasswordForm = () => {
<router-link to="/">
<el-dropdown-item>{{ $t("navbar.dashboard") }}</el-dropdown-item>
</router-link>
<el-dropdown-item @click="openMyContBox">{{ $t("navbar.archives") }}</el-dropdown-item>
<el-dropdown-item @click="editMyPasswordForm">{{ $t("navbar.password") }}</el-dropdown-item>
<el-dropdown-item @click="openMyContBox">{{
$t("navbar.archives")
}}</el-dropdown-item>
<el-dropdown-item @click="editMyPasswordForm">{{
$t("navbar.password")
}}</el-dropdown-item>
<el-dropdown-item divided @click="logout">
{{ $t("navbar.logout") }}
</el-dropdown-item>
@ -121,14 +119,14 @@ const editMyPasswordForm = () => {
</template>
</el-dropdown>
</div>
<EditMyPassword v-model:editPasswordIsShow="myPasswordBoxIsShow"/>
<EditMyPassword v-model:editPasswordIsShow="myPasswordBoxIsShow" />
</div>
</template>
<style scoped lang="scss">
.top {
height: 68px;
background: #1E5EFF;
background: #1e5eff;
position: fixed;
padding: 0 20px;
top: 0;

166
src/layout/index.vue

@ -1,15 +1,15 @@
<script setup lang="ts">
import {computed, watchEffect} from "vue";
import {useWindowSize} from "@vueuse/core";
import {AppMain, Navbar, Settings, TagsView} from "./components/index";
import { computed, watchEffect } from "vue";
import { useWindowSize } from "@vueuse/core";
import { AppMain, Navbar, Settings, TagsView } from "./components/index";
import Sidebar from "./components/Sidebar/index.vue";
import RightPanel from "@/components/RightPanel/index.vue";
import Top from './components/Top.vue'
import Top from "./components/Top.vue";
import {useAppStore} from "@/store/modules/app";
import {useSettingsStore} from "@/store/modules/settings";
import { useAppStore } from "@/store/modules/app";
import { useSettingsStore } from "@/store/modules/settings";
const {width} = useWindowSize();
const { width } = useWindowSize();
/**
* 响应式布局容器固定宽度
@ -28,109 +28,105 @@ const showTagsView = computed(() => settingsStore.tagsView);
const showSettings = computed(() => settingsStore.showSettings);
const classObj = computed(() => ({
hideSidebar: !appStore.sidebar.opened,
openSidebar: appStore.sidebar.opened,
withoutAnimation: appStore.sidebar.withoutAnimation,
mobile: appStore.device === "mobile",
hideSidebar: !appStore.sidebar.opened,
openSidebar: appStore.sidebar.opened,
withoutAnimation: appStore.sidebar.withoutAnimation,
mobile: appStore.device === "mobile",
}));
watchEffect(() => {
if (width.value < WIDTH) {
appStore.toggleDevice("mobile");
appStore.closeSideBar(true);
} else {
appStore.toggleDevice("desktop");
if (width.value >= 1200) {
//
appStore.openSideBar(true);
} else {
appStore.closeSideBar(true);
}
}
if (width.value < WIDTH) {
appStore.toggleDevice("mobile");
appStore.closeSideBar(true);
} else {
appStore.toggleDevice("desktop");
if (width.value >= 1200) {
//
appStore.openSideBar(true);
} else {
appStore.closeSideBar(true);
}
}
});
function handleOutsideClick() {
appStore.closeSideBar(false);
appStore.closeSideBar(false);
}
</script>
<template>
<div :class="classObj" class="app-wrapper">
<!-- 手机设备侧边栏打开遮罩层 -->
<div
v-if="classObj.mobile && classObj.openSidebar"
class="drawer-bg"
@click="handleOutsideClick"
></div>
<top></top>
<Sidebar class="sidebar-container"/>
<div :class="{ hasTagsView: showTagsView }" class="main-container">
<div :class="{ 'fixed-header': fixedHeader }" style="margin: 10px 20px 0 20px;">
<navbar></navbar>
<tags-view v-if="showTagsView"/>
</div>
<!--主页面-->
<app-main/>
<!-- 设置面板 -->
<RightPanel v-if="showSettings">
<settings/>
</RightPanel>
</div>
</div>
<div :class="classObj" class="app-wrapper">
<!-- 手机设备侧边栏打开遮罩层 -->
<div
v-if="classObj.mobile && classObj.openSidebar"
class="drawer-bg"
@click="handleOutsideClick"
></div>
<top></top>
<Sidebar class="sidebar-container" />
<div :class="{ hasTagsView: showTagsView }" class="main-container">
<div :class="{ 'fixed-header': fixedHeader }" style="margin: 10px 20px 0 20px">
<navbar></navbar>
<tags-view v-if="showTagsView" />
</div>
<!--主页面-->
<app-main />
<!-- 设置面板 -->
<RightPanel v-if="showSettings">
<settings />
</RightPanel>
</div>
</div>
</template>
<style lang="scss" scoped>
.app-wrapper {
background: #F5F6FA;
position: relative;
width: 100%;
height: 100%;
// &::after {
// display: table;
// clear: both;
// content: "";
// }
&.mobile.openSidebar {
position: fixed;
top: 0;
}
background: #f5f6fa;
position: relative;
width: 100%;
height: 100%;
// &::after {
// display: table;
// clear: both;
// content: "";
// }
&.mobile.openSidebar {
position: fixed;
top: 0;
}
}
.fixed-header {
position: fixed;
top: 0;
right: 0;
z-index: 9;
width: calc(100% - #{$sideBarWidth});
transition: width 0.28s;
position: fixed;
top: 0;
right: 0;
z-index: 9;
width: calc(100% - #{$sideBarWidth});
transition: width 0.28s;
}
.hideSidebar .fixed-header {
width: calc(100% - 54px);
width: calc(100% - 54px);
}
.mobile .fixed-header {
width: 100%;
width: 100%;
}
.drawer-bg {
position: absolute;
top: 0;
z-index: 999;
width: 100%;
height: 100%;
background: #000;
opacity: 0.3;
position: absolute;
top: 0;
z-index: 999;
width: 100%;
height: 100%;
background: #000;
opacity: 0.3;
}
</style>

178
src/views/dashboard/index.vue

@ -3,127 +3,123 @@
@ 时间: 2023-11-06 13:39:13
@ 备注: 首页
-->
<script lang='ts' setup>
import * as echarts from 'echarts'; //
<script lang="ts" setup>
import * as echarts from "echarts"; //
import { useUserStore } from "@/store/modules/user";
import { orgInfo } from '@/api/displayboardapi/types'
import { getOrgChiled,getCompanyDeparment,targetListForDepartment } from '@/api/displayboardapi/indexapi'
import { orgInfo } from "@/api/displayboardapi/types";
import {
getOrgChiled,
getCompanyDeparment,
targetListForDepartment,
} from "@/api/displayboardapi/indexapi";
import UserInfo from "@/views/dashboard/components/userinfo.vue";
import SanLianpIng from "@/views/dashboard/components/sanlianping.vue";
import EducationChart from "@/views/dashboard/components/education.vue";
import AllOrgYear from "@/views/dashboard/components/allorgyear.vue";
import OrgUserAge from "@/views/dashboard/components/orguserage.vue";
import OrgEducation from "@/views/dashboard/components/orgeducation.vue";
import Application from "@/views/dashboard/components/application.vue";
import OrgUserAge from "@/views/dashboard/components/orguserage.vue";
import OrgEducation from "@/views/dashboard/components/orgeducation.vue";
import Application from "@/views/dashboard/components/application.vue";
import HostNews from "@/views/dashboard/components/hostnews.vue";
const userStore = useUserStore();
const orgListCont = ref<orgInfo[]>([])
const educationOrgId = ref<number>(309)
const masterBody = ref<any>(null)
const drawerWidht = ref<any>()
const orgListCont = ref<orgInfo[]>([]);
const educationOrgId = ref<number>(309);
const masterBody = ref<any>(null);
const drawerWidht = ref<any>();
/**
* 获取行政组织
*/
function getOrgList(){
getOrgChiled({id:313})
.then(( {data} )=>{
// console.log("-2-->",data)
orgListCont.value = data.list
educationOrgId.value = data.current
})
function getOrgList() {
getOrgChiled({ id: 313 }).then(({ data }) => {
// console.log("-2-->",data)
orgListCont.value = data.list;
educationOrgId.value = data.current;
});
}
const orgAllYears = ref<any>(); //
const orgAllYears = ref<any>() //
const oenOrg = ref<any>() //
const oenOrg = ref<any>(); //
//
onMounted(() => {
drawerWidht.value = masterBody.value?.clientWidth
getOrgList();
// console.log("----100---->",drawerWidht.value)
})
drawerWidht.value = masterBody.value?.clientWidth;
getOrgList();
// console.log("----100---->",drawerWidht.value)
});
</script>
<template>
<div ref="masterBody" class="app_container">
<div class="first-main">
<div class="main-width74">
<AllOrgYear :org-list-cont="orgListCont" :education-org-id="educationOrgId" />
</div>
<div class="main-width26">
<HostNews v-model:drawer-widht="drawerWidht" />
</div>
</div>
<div class="cart_top_juLi first-main">
<div class="main-width74 first-main">
<div class="main-width50">
<OrgUserAge :org-list-cont="orgListCont" :education-org-id="educationOrgId" />
</div>
<div class="main-width50">
<OrgEducation :org-list-cont="orgListCont" :education-org-id="educationOrgId" />
</div>
</div>
<div class="main-width26">
<Application :org-list-cont="orgListCont" :education-org-id="educationOrgId" />
</div>
</div>
<el-row :gutter="10" class="cart_top_juLi" >
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="readback">
<SanLianpIng />
</el-col>
</el-row>
</div>
<div ref="masterBody" class="app_container">
<div class="first-main">
<div class="main-width74">
<AllOrgYear :org-list-cont="orgListCont" :education-org-id="educationOrgId" />
</div>
<div class="main-width26">
<HostNews v-model:drawer-widht="drawerWidht" />
</div>
</div>
<div class="cart_top_juLi first-main">
<div class="main-width74 first-main">
<div class="main-width50">
<OrgUserAge :org-list-cont="orgListCont" :education-org-id="educationOrgId" />
</div>
<div class="main-width50">
<OrgEducation :org-list-cont="orgListCont" :education-org-id="educationOrgId" />
</div>
</div>
<div class="main-width26">
<Application :org-list-cont="orgListCont" :education-org-id="educationOrgId" />
</div>
</div>
<el-row :gutter="10" class="cart_top_juLi">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="readback">
<SanLianpIng />
</el-col>
</el-row>
</div>
</template>
<style lang='scss' scoped>
.app_container{
padding: 10px 20px 0px 20px;
height: calc(100% - 10px);
overflow: hidden;
overflow-y: auto;
width: 100%;
<style lang="scss" scoped>
.app_container {
padding: 10px 20px 0px 20px;
height: calc(100% - 10px);
overflow: hidden;
overflow-y: auto;
width: 100%;
}
.orgAllMothsTitle{
width:100%;
display: flex;
align-items: center;
justify-content:space-between;
.orgAllMothsTitle {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
.span_icon_left{
margin-right:10px;
.span_icon_left {
margin-right: 10px;
}
.cart_top_juLi{
margin-top:20px;
.cart_top_juLi {
margin-top: 20px;
}
.titleInfo{
font-size: 20px;
font-weight: bold;
.titleInfo {
font-size: 20px;
font-weight: bold;
}
.first-main{
display: flex;
justify-content: space-between;
height: 330px;
.first-main {
display: flex;
justify-content: space-between;
height: 330px;
}
.main-width74{
width: calc(100% - 370px);
height: 100%;
.main-width74 {
width: calc(100% - 370px);
height: 100%;
}
.main-width26{
width: 350px;
height: 100%;
.main-width26 {
width: 350px;
height: 100%;
}
.main-width50{
width: calc(50% - 10px);
height: 100%;
.main-width50 {
width: calc(50% - 10px);
height: 100%;
}
</style>

459
src/views/hr/userBox.vue

@ -3,59 +3,59 @@
@ 时间: 2024-05-23 13:50:03
@ 备注: 行政组织及角色选择器
-->
<script lang='ts' setup>
import { Search,ArrowRight } from '@element-plus/icons-vue' //
import { userOrgRole,crumb } from '@/api/hr/search/types'
const circleUrl = ref('https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png')
<script lang="ts" setup>
import { Search, ArrowRight } from "@element-plus/icons-vue"; //
import { userOrgRole, crumb } from "@/api/hr/search/types";
const circleUrl = ref(
"https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"
);
//
import OrgPage from '@/views/hr/orgUserRole/org.vue'
import OrgRolePage from '@/views/hr/orgUserRole/orgrole.vue'
import RolePageIng from '@/views/hr/orgUserRole/rolePage.vue'
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,
default:false
},
types:{
type:Number,
default:1
},
orgTrue:{
type:Number,
default:1
},
pickList:{
type:Object,
default(){
return {}
}
}
isOpen: {
type: Boolean,
default: false,
},
types: {
type: Number,
default: 1,
},
orgTrue: {
type: Number,
default: 1,
},
pickList: {
type: Object,
default() {
return {};
},
},
});
const taotleLog = ref(0)
const pickListAry = ref<userOrgRole[]>([]) //
const emits = defineEmits(["update:isOpen","update:types","pickInfo"]);
const searchQuery = ref<any>("")
const orgUs = ref(null)
const orgUsRole = ref(null)
const rolePage = ref(null)
const taotleLog = ref(0);
const pickListAry = ref<userOrgRole[]>([]); //
const emits = defineEmits(["update:isOpen", "update:types", "pickInfo"]);
const searchQuery = ref<any>("");
const orgUs = ref(null);
const orgUsRole = ref(null);
const rolePage = ref(null);
/**
@ 作者: 秦东
@ 时间: 2024-05-23 13:56:28
@ 功能: 对话框状态
*/
const isShow = computed({
get() {
// console.log("",props.isOpen);
return props.isOpen
},
set(val: boolean) {
// console.log("",props.isOpen);
emits('update:isOpen', val)
}
const isShow = computed({
get() {
// console.log("",props.isOpen);
return props.isOpen;
},
set(val: boolean) {
// console.log("",props.isOpen);
emits("update:isOpen", val);
},
});
/**
@ 作者: 秦东
@ -63,219 +63,248 @@ const isShow = computed({
@ 功能: 人员选择范围
*/
const userTypes = computed({
get() {
// console.log("",props.isOpen);
return props.types
},
set(val: boolean) {
// console.log("",props.isOpen);
emits('update:types', val)
}
})
get() {
// console.log("",props.isOpen);
return props.types;
},
set(val: boolean) {
// console.log("",props.isOpen);
emits("update:types", val);
},
});
/**
@ 作者: 秦东
@ 时间: 2024-05-23 14:15:10
@ 功能: 关闭弹出对话框
*/
const handleClose = () => {
emits('update:isOpen', false)
}
emits("update:isOpen", false);
};
/**
@ 作者: 秦东
@ 时间: 2024-05-24 08:21:58
@ 功能: 根据条件搜索数据
*/
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)
}
}
// 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);
}
};
/**
@ 作者: 秦东
@ 时间: 2024-05-24 15:29:20
@ 功能: 更新数据
*/
const updataPickLog = (val:userOrgRole[]) => {
pickListAry.value = val
taotleLog.value = val.length
}
const updataPickLog = (val: userOrgRole[]) => {
pickListAry.value = val;
taotleLog.value = val.length;
};
/**
@ 作者: 秦东
@ 时间: 2024-05-24 15:36:07
@ 功能: 删除选中项目
*/
const delPickCont = (val:userOrgRole) => {
pickListAry.value.forEach((item:userOrgRole,index:number)=>{
if(item.id == val.id){
pickListAry.value.splice(index,1)
}
})
}
const delPickCont = (val: userOrgRole) => {
pickListAry.value.forEach((item: userOrgRole, index: number) => {
if (item.id == val.id) {
pickListAry.value.splice(index, 1);
}
});
};
/**
@ 作者: 秦东
@ 时间: 2024-05-24 15:52:58
@ 功能: 清空选项
*/
const clearVal = () => {
pickListAry.value = [];
taotleLog.value = 0
}
pickListAry.value = [];
taotleLog.value = 0;
};
/**
@ 作者: 秦东
@ 时间: 2024-05-24 15:59:11
@ 功能: 提交数据
*/
const submitSend = () => {
emits('pickInfo', pickListAry,props.types)
}
watch(()=>props.isOpen,(val:boolean)=>{
if(!val){
clearVal()
}else{
if(props.pickList.length > 0){
pickListAry.value = props.pickList
taotleLog.value = props.pickList.length
}
}
// console.log("",val);
})
onMounted(()=>{
taotleLog.value = props.pickList.length
})
emits("pickInfo", pickListAry, props.types);
};
watch(
() => props.isOpen,
(val: boolean) => {
if (!val) {
clearVal();
} 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"
:prefix-icon="Search"
size="large"
class="inputDeep"
@input="searchData"
/>
<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">
<el-row>
<el-col :span="24" class="pickTitle">
<el-text>已选{{ taotleLog }}</el-text>
<el-button type="danger" link @click="clearVal">清空</el-button>
</el-col>
<el-col :span="24">
<el-scrollbar class="pickBox">
<ul>
<li v-for="item in pickListAry" :key="item.id">
<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>
</ul>
<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"
:prefix-icon="Search"
size="large"
class="inputDeep"
@input="searchData"
/>
<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-scrollbar>
</el-col>
</el-row>
</el-col>
</el-row>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitSend">确定</el-button>
</div>
</template>
</el-dialog>
<el-col :span="12" class="leftLink">
<el-row>
<el-col :span="24" class="pickTitle">
<el-text>已选{{ taotleLog }}</el-text>
<el-button type="danger" link @click="clearVal">清空</el-button>
</el-col>
<el-col :span="24">
<el-scrollbar class="pickBox">
<ul>
<li v-for="item in pickListAry" :key="item.id">
<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>
</ul>
</el-scrollbar>
</el-col>
</el-row>
</el-col>
</el-row>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitSend">确定</el-button>
</div>
</template>
</el-dialog>
</template>
<style lang='scss' scoped>
.allBianLink{
border: 1px solid #E6E8EB;
.leftLink{
border-left: 1px solid #E6E8EB;
}
.pickTitle{
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 10px;
border-bottom: 1px solid #E6E8EB;
}
<style lang="scss" scoped>
.allBianLink {
border: 1px solid #e6e8eb;
.leftLink {
border-left: 1px solid #e6e8eb;
}
.pickTitle {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 10px;
border-bottom: 1px solid #e6e8eb;
}
}
.mianbaoxue{
display: flex;
white-space: nowrap;
padding: 10px 5px;
overflow: auto;
cursor: pointer;
.mianbaoxue {
display: flex;
white-space: nowrap;
padding: 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;
}
}
.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;
.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;
}
}
.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>

450
src/views/sysworkflow/lowcodepage/newLowCode/appLayout/appContainer.vue

@ -3,252 +3,274 @@
@ 时间: 2024-07-22 11:28:18
@ 备注: 自定义App主容器
-->
<script lang='ts' setup>
import { appMenuTreeInfo,appSetInfo } from "@/api/date/type"
<script lang="ts" setup>
import { appMenuTreeInfo, appSetInfo } from "@/api/date/type";
import { useUserStore } from "@/store/modules/user";
import { gainAppEditPsge } from '@/api/DesignForm/requestapi'
import { gainAppEditPsge } from "@/api/DesignForm/requestapi";
import RegularPage from "@/views/sysworkflow/lowcodepage/runApp/regularPage.vue"
import RunAppForm from "@/views/sysworkflow/lowcodepage/runApp/runAppForm.vue"
import RegularPage from "@/views/sysworkflow/lowcodepage/runApp/regularPage.vue";
import RunAppForm from "@/views/sysworkflow/lowcodepage/runApp/runAppForm.vue";
const props = defineProps({
drawerWith:{
type:Number,
default:0
},
runIsOpen:{
type: Boolean,
default: false,
},
pickAppInfo:{
type:Object,
default(){
return {}
}
},
searchQuery:{
type:Object,
default(){
return {}
}
}
drawerWith: {
type: Number,
default: 0,
},
runIsOpen: {
type: Boolean,
default: false,
},
pickAppInfo: {
type: Object,
default() {
return {};
},
},
searchQuery: {
type: Object,
default() {
return {};
},
},
});
const emits = defineEmits(["update:runIsOpen","refreshPage"]);
const emits = defineEmits(["update:runIsOpen", "refreshPage"]);
const userStore = useUserStore();
const menusTree = ref<appMenuTreeInfo[]>([]) //
const pickAppMenu = ref("") //
const switchPAge = ref(1) // 12
const pickAppMenuSel = ref("") //
const menusTree = ref<appMenuTreeInfo[]>([]); //
const pickAppMenu = ref(""); //
const switchPAge = ref(1); // 12
const pickAppMenuSel = ref(""); //
/**
@ 作者: 秦东
@ 时间: 2024-07-22 11:40:06
@ 功能: 应用进出配置
*/
const appCont = reactive<appSetInfo>({
appKey:"1",
appName:"未知应用",
appSvg:"",
state:1,
uuid:"1",
describe:""
})
appKey: "1",
appName: "未知应用",
appSvg: "",
state: 1,
uuid: "1",
describe: "",
});
/**
@ 作者: 秦东
@ 时间: 2024-04-23 15:23:31
@ 功能: 获取app信息
*/
const gainAppContent = () =>{
let sendInfo = {
id:props.pickAppInfo.signCodeStr
}
// console.log("app---",props.pickAppInfo)
gainAppEditPsge(sendInfo)
.then((data)=>{
// console.log("app---",data)
menusTree.value = data.data.menuTree
appCont.appKey = data.data.appKey;
appCont.appName = data.data.appName;
appCont.appSvg = data.data.appSvg;
appCont.state = data.data.state;
appCont.uuid = data.data.uuid;
let isIn = true;
data.data.menuTree.forEach((item)=>{
if(item.isLock == 1 && item.isMain == 1){
pickAppMenu.value = item;
isIn = false;
switchPAge.value = 1
}
})
if(isIn){
pickAppMenu.value = data.data.menuTree[0];
if (pickAppMenu.value.type == 2){
switchPAge.value = 2
}
}
})
}
const gainAppContent = () => {
let sendInfo = {
id: props.pickAppInfo.signCodeStr,
};
// console.log("app---",props.pickAppInfo)
gainAppEditPsge(sendInfo).then((data) => {
// console.log("app---",data)
menusTree.value = data.data.menuTree;
appCont.appKey = data.data.appKey;
appCont.appName = data.data.appName;
appCont.appSvg = data.data.appSvg;
appCont.state = data.data.state;
appCont.uuid = data.data.uuid;
let isIn = true;
data.data.menuTree.forEach((item) => {
if (item.isLock == 1 && item.isMain == 1) {
pickAppMenu.value = item;
isIn = false;
switchPAge.value = 1;
}
});
if (isIn) {
pickAppMenu.value = data.data.menuTree[0];
if (pickAppMenu.value.type == 2) {
switchPAge.value = 2;
}
}
});
};
/**
@ 作者: 秦东
@ 时间: 2024-05-30 15:17:29
@ 功能: 退出应用
*/
const closeRunApp = () => {
emits("update:runIsOpen",false)
emits("refreshPage",props.searchQuery)
}
emits("update:runIsOpen", false);
emits("refreshPage", props.searchQuery);
};
watch(()=>props.runIsOpen,(val:boolean)=>{
if(val){
gainAppContent()
}
})
watch(
() => props.runIsOpen,
(val: boolean) => {
if (val) {
gainAppContent();
}
}
);
/**
@ 作者: 秦东
@ 时间: 2024-05-17 16:45:40
@ 功能: 打开app表单
*/
const openAppPage = (val:any) =>{
// console.log("app------>",val)
if(val.type!=1){
if(val.isLock==1){
switchPAge.value = 1
}else{
switchPAge.value = 2
}
pickAppMenu.value = val
}
}
const openAppPage = (val: any) => {
// console.log("app------>",val)
if (val.type != 1) {
if (val.isLock == 1) {
switchPAge.value = 1;
} else {
switchPAge.value = 2;
}
pickAppMenu.value = val;
}
};
</script>
<template>
<el-drawer v-model="props.runIsOpen" :with-header="false" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith">
<el-container class="common-layout">
<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>
<el-dropdown-item>
<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>
</el-dropdown-item>
<el-dropdown-item @click="closeRunApp()" divided>
<i class="fa fa-sign-out"></i>
<el-text class="mx-1" type="danger">退出</el-text>
</el-dropdown-item>
</template>
</el-dropdown>
</div>
</el-header>
<el-container>
<el-aside class="asideBox">
<el-row>
<el-col :span="24" class="asideBoxSearch">
<el-tree-select
v-model="pickAppMenuSel"
:data="menusTree"
:render-after-expand="false"
:suffix-icon="Search"
node-key="id"
clearable
filterable
/>
</el-col>
</el-row>
<el-tree
:data="menusTree"
node-key="id"
:allow-drop="allowDrop"
:expand-on-click-node="true"
>
<template #default="{ node, data }">
<div class="appMenuTitle" @click="openAppPage(data)">
<el-space wrap>
<svg-icon prefix="icon" :icon-class="data.svg" />
<el-tooltip :content="node.label" placement="top" effect="dark">
<el-text class="w-120px mb-2" truncated >{{node.label}}</el-text>
</el-tooltip>
</el-space>
</div>
</template>
</el-tree>
</el-aside>
<el-main class="mainBox">
<RegularPage v-if="switchPAge==1" :pick-app-menu="pickAppMenu" :drawer-with="props.drawerWith" />
<RunAppForm v-else :pick-app-menu="pickAppMenu" :drawer-with="props.drawerWith" />
</el-main>
</el-container>
</el-container>
</el-drawer>
<el-drawer
v-model="props.runIsOpen"
:with-header="false"
:close-on-click-modal="false"
:close-on-press-escape="false"
:destroy-on-close="true"
:size="props.drawerWith"
>
<el-container class="common-layout">
<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>
<el-dropdown-item>
<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>
</el-dropdown-item>
<el-dropdown-item @click="closeRunApp()" divided>
<i class="fa fa-sign-out"></i>
<el-text class="mx-1" type="danger">退出</el-text>
</el-dropdown-item>
</template>
</el-dropdown>
</div>
</el-header>
<el-container>
<el-aside class="asideBox">
<el-row>
<el-col :span="24" class="asideBoxSearch">
<el-tree-select
v-model="pickAppMenuSel"
:data="menusTree"
:render-after-expand="false"
:suffix-icon="Search"
node-key="id"
clearable
filterable
/>
</el-col>
</el-row>
<el-tree
:data="menusTree"
node-key="id"
:allow-drop="allowDrop"
:expand-on-click-node="true"
>
<template #default="{ node, data }">
<div class="appMenuTitle" @click="openAppPage(data)">
<el-space wrap>
<svg-icon prefix="icon" :icon-class="data.svg" />
<el-tooltip :content="node.label" placement="top" effect="dark">
<el-text class="w-120px mb-2" truncated>{{ node.label }}</el-text>
</el-tooltip>
</el-space>
</div>
</template>
</el-tree>
</el-aside>
<el-main class="mainBox">
<RegularPage
v-if="switchPAge == 1"
:pick-app-menu="pickAppMenu"
:drawer-with="props.drawerWith"
/>
<RunAppForm
v-else
:pick-app-menu="pickAppMenu"
:drawer-with="props.drawerWith"
/>
</el-main>
</el-container>
</el-container>
</el-drawer>
</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;
}
:deep .el-card__body{
padding: 0px 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;
}
.appMenuTitle{
width: 100%;
padding-right: 5px;
display: flex;
align-items: center;
justify-content: space-between;
.svgBox{
display: none;
}
}
.appMenuTitle:hover .svgBox{
display: block;
}
}
.el-main {
padding: 0px;
}
.mainBox{
background-color: #F1F2F3;
padding:0px;
.scroBox{
height: calc(100vh - 40px);
}
}
<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;
}
:deep .el-card__body {
padding: 0px 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;
}
.appMenuTitle {
width: 100%;
padding-right: 5px;
display: flex;
align-items: center;
justify-content: space-between;
.svgBox {
display: none;
}
}
.appMenuTitle:hover .svgBox {
display: block;
}
}
.el-main {
padding: 0px;
}
.mainBox {
background-color: #f1f2f3;
padding: 0px;
.scroBox {
height: calc(100vh - 40px);
}
}
}
</style>

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

@ -3,162 +3,174 @@
@ 时间: 2024-05-31 09:22:06
@ 备注: 执行表格
-->
<script lang='ts' setup>
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { judgeSubmitCancel,gainAppPageInfo,getFieldRecord } from '@/api/DesignForm/requestapi'
import { Edit,Picture as IconPicture } from '@element-plus/icons-vue'
import { appPageDataInit,appWorkFlow } from "@/api/date/type"
import { notAsA_BasisForJudgment,asAnApprovalActionControl,fixedValueControl,timeControl,timeEquation,submitButton, afreshSubmitButton } from '@/utils/workflow/const'
<script lang="ts" setup>
import {
json2string,
objToStringify,
string2json,
stringToObj,
} from "@/utils/DesignForm/form";
import {
judgeSubmitCancel,
gainAppPageInfo,
getFieldRecord,
} from "@/api/DesignForm/requestapi";
import { Edit, Picture as IconPicture } from "@element-plus/icons-vue";
import { appPageDataInit, appWorkFlow } from "@/api/date/type";
import {
notAsA_BasisForJudgment,
asAnApprovalActionControl,
fixedValueControl,
timeControl,
timeEquation,
submitButton,
afreshSubmitButton,
} from "@/utils/workflow/const";
const props = defineProps({
pickAppMenu:{
type:Object,
default(){
return {}
}
}
pickAppMenu: {
type: Object,
default() {
return {};
},
},
});
const activePage = ref(0) //
const appInitData = ref<appPageDataInit>("")
const activePage = ref(0); //
const appInitData = ref<appPageDataInit>("");
//app
const stateForm = reactive<any>({
type: 1, // 123 4 5
formData: {
list: [],
form: {},
config: {},
powerstr:{}
},
dict: {},
formId: "1",
id: 0,
formId: 0,
versionId: 0,
loading: true
})
type: 1, // 123 4 5
formData: {
list: [],
form: {},
config: {},
powerstr: {},
},
dict: {},
formId: "1",
id: 0,
formId: 0,
versionId: 0,
loading: true,
});
//
const stateList = reactive({
tableData: {
// tableProps: {}, //
columns: [],
config: {},
controlBtn:[],
operateBtn:[]
tableData: {
// tableProps: {}, //
columns: [],
config: {},
controlBtn: [],
operateBtn: [],
},
searchData: [],
loading: false,
attrObj: {},
config: {
pageSize: 10,
searchIsShow: true,
searchFormIsShow: true,
openPageMode: "drawer",
},
tagList: {},
formId: props.formKey || "",
formList: [], //
name: "",
treeData: {}, //
previewVisible: false,
tabsName: "second",
formFieldList: [], //
formApi: {
type: "1",
addApiUrl: "",
editApiUrl: "",
delApiUrl: "",
lookApiUrl: "",
},
dict: {},
refreshTable: true,
view: {
list: {
status: true,
isClick: false,
form: {
sortWord: "",
sortClass: 1,
title: [],
},
},
date: {
status: false,
isClick: false,
form: {
startTime: "",
endTime: "",
dayType: 1,
title: [],
},
},
time: {
status: false,
isClick: false,
form: {
sortWord: "",
sort: 1,
title: [],
},
},
gantt: {
status: false,
isClick: false,
form: {
startTime: "",
endTime: "",
dayType: 2,
sortWord: "",
sort: 1,
title: [],
},
},
map: {
status: false,
isClick: false,
form: {
mapWord: "",
sortWord: "",
sort: 1,
title: [],
},
},
searchData: [],
loading: false,
attrObj: {},
config: {
pageSize:10,
searchIsShow:true,
searchFormIsShow:true,
openPageMode:"drawer"
},
tagList: {},
formId: props.formKey || '',
formList: [], //
name: '',
treeData: {}, //
previewVisible: false,
tabsName: 'second',
formFieldList: [], //
formApi:{
type:"1",
addApiUrl:"",
editApiUrl:"",
delApiUrl:"",
lookApiUrl:""
},
dict: {},
refreshTable: true,
view:{
list:{
status:true,
isClick:false,
form:{
sortWord:"",
sortClass:1,
title:[]
}
},
date:{
status:false,
isClick:false,
form:{
startTime:"",
endTime:"",
dayType:1,
title:[]
}
}
,
time:{
status:false,
isClick:false,
form:{
sortWord:"",
sort:1,
title:[]
}
}
,
gantt:{
status:false,
isClick:false,
form:{
startTime:"",
endTime:"",
dayType:2,
sortWord:"",
sort:1,
title:[]
}
}
,
map:{
status:false,
isClick:false,
form:{
mapWord:"",
sortWord:"",
sort:1,
title:[]
}
},
card:{
status:false,
isClick:false,
form:{
sort:1,
sortWord:"",
imgWork:"",
imgWidth:50,
imgHeight:50,
imgBorderRadius:5,
imgPadding:2,
titleWork:"",
describe:"",
ranks:3,
title:[]
}
}
}
})
const appFormTitle = ref("")
const versionTitle = ref<string>("") //
const versionId = ref<string>("") //
const appFlowInfo = ref<appWorkFlow>("") //
const isFlow = ref(2)
const mastesformjson = ref("") //
card: {
status: false,
isClick: false,
form: {
sort: 1,
sortWord: "",
imgWork: "",
imgWidth: 50,
imgHeight: 50,
imgBorderRadius: 5,
imgPadding: 2,
titleWork: "",
describe: "",
ranks: 3,
title: [],
},
},
},
});
const appFormTitle = ref("");
const versionTitle = ref<string>(""); //
const versionId = ref<string>(""); //
const appFlowInfo = ref<appWorkFlow>(""); //
const isFlow = ref(2);
const mastesformjson = ref(""); //
/**
@ 作者: 秦东
@ 时间: 2024-06-03 09:54:30
@ 功能: 加载页面
*/
onMounted(() => {
initLoadData()
initLoadData();
});
/**
@ 作者: 秦东
@ -166,174 +178,184 @@ onMounted(() => {
@ 功能: 初始化数据
*/
const initLoadData = () => {
// console.log("initLoadData",props.pickAppMenu.type,props.pickAppMenu.type != 1)
if(props.pickAppMenu.type != 1){
appFormTitle.value = props.pickAppMenu.label
gainAppPageInfo({id:props.pickAppMenu.id})
.then((data)=>{
// console.log("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",data)
appInitData.value = data.data
// console.log("---!",appInitData.value)
mastesformjson.value = data.data.appForm.mastesformjson
isFlow.value = data.data.appForm.flowIsOpen
if (data.data.page && data.data.pageList && data.data.appFlow){
activePage.value = 1
}else if (data.data.page && !data.data.pageList && data.data.appFlow){
activePage.value = 2
}else if (!data.data.page && !data.data.pageList && data.data.appFlow){
activePage.value = 3
}else if (!data.data.page && data.data.pageList && data.data.appFlow){
activePage.value = 1
}else if (data.data.page && !data.data.pageList && !data.data.appFlow){
activePage.value = 2
}else{
activePage.value = 1
}
versionId.value = data.data.appForm.id.toString()
versionTitle.value = data.data.appForm.name
if(data.data.pageList){
let stateData = string2json(data.data.appForm.listjson)
// console.log("",stateData)
let holeControlAndConfigStateData = string2json(data.data.appForm.mastesformjson)
if(stateData.tableData.columns && stateData.tableData.columns.length>0){
for(let i = 0;i<stateData.tableData.columns.length;i++){
for(let u = 0;u<holeControlAndConfigStateData.list.length;u++){
if(stateData.tableData.columns[i].id==holeControlAndConfigStateData.list[u].name){
stateData.tableData.columns[i].control = holeControlAndConfigStateData.list[u].control
stateData.tableData.columns[i].config = holeControlAndConfigStateData.list[u].config
}
}
// console.log("initLoadData",props.pickAppMenu.type,props.pickAppMenu.type != 1)
if (props.pickAppMenu.type != 1) {
appFormTitle.value = props.pickAppMenu.label;
gainAppPageInfo({ id: props.pickAppMenu.id }).then((data) => {
// console.log("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",data)
appInitData.value = data.data;
// console.log("---!",appInitData.value)
mastesformjson.value = data.data.appForm.mastesformjson;
isFlow.value = data.data.appForm.flowIsOpen;
if (data.data.page && data.data.pageList && data.data.appFlow) {
activePage.value = 1;
} else if (data.data.page && !data.data.pageList && data.data.appFlow) {
activePage.value = 2;
} else if (!data.data.page && !data.data.pageList && data.data.appFlow) {
activePage.value = 3;
} else if (!data.data.page && data.data.pageList && data.data.appFlow) {
activePage.value = 1;
} else if (data.data.page && !data.data.pageList && !data.data.appFlow) {
activePage.value = 2;
} else {
activePage.value = 1;
}
versionId.value = data.data.appForm.id.toString();
versionTitle.value = data.data.appForm.name;
if (data.data.pageList) {
let stateData = string2json(data.data.appForm.listjson);
// console.log("",stateData)
let holeControlAndConfigStateData = string2json(data.data.appForm.mastesformjson);
if (stateData.tableData.columns && stateData.tableData.columns.length > 0) {
for (let i = 0; i < stateData.tableData.columns.length; i++) {
for (let u = 0; u < holeControlAndConfigStateData.list.length; u++) {
if (
stateData.tableData.columns[i].id ==
holeControlAndConfigStateData.list[u].name
) {
stateData.tableData.columns[i].control =
holeControlAndConfigStateData.list[u].control;
stateData.tableData.columns[i].config =
holeControlAndConfigStateData.list[u].config;
}
}
if(stateData.tableData.columns[i].config!=undefined && stateData.tableData.columns[i].control!=undefined){
// console.log(stateData.tableData.columns[i])
let paramx:string = ""+stateData.tableData.columns[i].control.optionsValue3Field
/*
if (
stateData.tableData.columns[i].config != undefined &&
stateData.tableData.columns[i].control != undefined
) {
// console.log(stateData.tableData.columns[i])
let paramx: string =
"" + stateData.tableData.columns[i].control.optionsValue3Field;
/*
在这里请求后台获取字段
*/
//console.log("runAppForm-----214",paramx)
if(paramx && paramx != "" && paramx != null && paramx != "undefined"){
getFieldRecord(paramx).then(({ data }) => {
stateData.tableData.columns[i].options = data
if(stateData.searchData.length>0){
for(let j = 0;j<stateData.searchData.length;j++){
// console.log(stateData.searchData[j])
if(stateData.searchData[j].id==stateData.tableData.columns[i].id){
stateData.searchData[j].options = data
}
}
}
})
}
if(stateData.searchData && stateData.searchData.length>0){
for(let j = 0;j<stateData.searchData.length;j++){
// console.log(stateData.searchData[j])
if(stateData.searchData[j].id==stateData.tableData.columns[i].id){
// console.log(stateData.tableData.columns[i])
stateData.searchData[j].control = stateData.tableData.columns[i].control
stateData.searchData[j].config = stateData.tableData.columns[i].config
// console.log(stateData.searchData[j])
}
}
}
}
}
}
stateList.tableData = stateData.tableData
stateList.searchData = stateData.searchData
if(stateList.searchData == null){
stateList.searchData = new Array()
}
stateList.loading = stateData.loading
stateList.attrObj = stateData.attrObj
stateList.config = stateData.config
stateList.tagList = stateData.tagList
stateList.formList = stateData.formList
stateList.name = stateData.name
stateList.treeData = stateData.treeData
stateList.previewVisible = stateData.previewVisible
stateList.formFieldList = stateData.formFieldList
stateList.formApi = stateData.formApi
stateList.dict = stateData.dict
stateList.refreshTable = stateData.refreshTable
if(stateData.view){
stateList.view = stateData.view
}
}
if(data.data.page){
// console.log("data.data.mastesform", data.data)
stateForm.id=data.data.appForm.version.toString()
stateForm.formId =data.data.appForm.cfid.toString()
stateForm.versionId =data.data.appForm.id.toString()
stateForm.formData = stringToObj(data.data.appForm.mastesform)
stateForm.dict = string2json(data.data.appForm.dict)
stateForm.formData.powerstr = string2json(data.data.appForm.powerstr)
// console.log("data.data.mastesform", stateForm.formData)
judgeSubmitCancel({"name":data.data.appForm.mastesformjson})
.then((datajud:any) =>{
if(datajud.code == 0){
if (datajud.data == 3 || datajud.data == 4){
stateForm.formData.list.push(submitButton)
}
}
})
}
if(data.data.appFlow){
appFlowInfo.value = data.data.workFlow
}
})
}
}
//console.log("runAppForm-----214",paramx)
if (paramx && paramx != "" && paramx != null && paramx != "undefined") {
getFieldRecord(paramx).then(({ data }) => {
stateData.tableData.columns[i].options = data;
if (stateData.searchData.length > 0) {
for (let j = 0; j < stateData.searchData.length; j++) {
// console.log(stateData.searchData[j])
if (
stateData.searchData[j].id == stateData.tableData.columns[i].id
) {
stateData.searchData[j].options = data;
}
}
}
});
}
if (stateData.searchData && stateData.searchData.length > 0) {
for (let j = 0; j < stateData.searchData.length; j++) {
// console.log(stateData.searchData[j])
if (stateData.searchData[j].id == stateData.tableData.columns[i].id) {
// console.log(stateData.tableData.columns[i])
stateData.searchData[j].control =
stateData.tableData.columns[i].control;
stateData.searchData[j].config =
stateData.tableData.columns[i].config;
// console.log(stateData.searchData[j])
}
}
}
}
}
}
stateList.tableData = stateData.tableData;
stateList.searchData = stateData.searchData;
if (stateList.searchData == null) {
stateList.searchData = new Array();
}
stateList.loading = stateData.loading;
stateList.attrObj = stateData.attrObj;
stateList.config = stateData.config;
stateList.tagList = stateData.tagList;
stateList.formList = stateData.formList;
stateList.name = stateData.name;
stateList.treeData = stateData.treeData;
stateList.previewVisible = stateData.previewVisible;
stateList.formFieldList = stateData.formFieldList;
stateList.formApi = stateData.formApi;
stateList.dict = stateData.dict;
stateList.refreshTable = stateData.refreshTable;
if (stateData.view) {
stateList.view = stateData.view;
}
}
if (data.data.page) {
// console.log("data.data.mastesform", data.data)
stateForm.id = data.data.appForm.version.toString();
stateForm.formId = data.data.appForm.cfid.toString();
stateForm.versionId = data.data.appForm.id.toString();
stateForm.formData = stringToObj(data.data.appForm.mastesform);
stateForm.dict = string2json(data.data.appForm.dict);
stateForm.formData.powerstr = string2json(data.data.appForm.powerstr);
// console.log("data.data.mastesform", stateForm.formData)
judgeSubmitCancel({ name: data.data.appForm.mastesformjson }).then(
(datajud: any) => {
if (datajud.code == 0) {
if (datajud.data == 3 || datajud.data == 4) {
stateForm.formData.list.push(submitButton);
}
}
}
);
}
if (data.data.appFlow) {
appFlowInfo.value = data.data.workFlow;
}
});
}
};
/**
@ 作者: 秦东
@ 时间: 2024-06-03 09:26:17
@ 功能: 监听菜单数据变化
*/
watch(() => props.pickAppMenu,(val:any) => {
initLoadData()
},{
deep: true
})
watch(
() => props.pickAppMenu,
(val: any) => {
initLoadData();
},
{
deep: true,
}
);
function optionsValue3Get3(data: any,fieldName: string){
for(let i = 0; i < stateForm.formData.list.length; i++){
if(stateForm.formData.list[i].name==fieldName){
stateForm.formData.list[i].options = []
for(let j = 0;j<data.length;j++){
stateForm.formData.list[i].options.push(data[j])
}
}
}
function optionsValue3Get3(data: any, fieldName: string) {
for (let i = 0; i < stateForm.formData.list.length; i++) {
if (stateForm.formData.list[i].name == fieldName) {
stateForm.formData.list[i].options = [];
for (let j = 0; j < data.length; j++) {
stateForm.formData.list[i].options.push(data[j]);
}
}
}
}
</script>
<template>
<el-row>
<el-col :span="24" class="pageBox pageHeader">
<el-text class="wordFont">{{ appFormTitle}}</el-text>
</el-col>
<el-col :span="24">
<el-scrollbar class="scroBox">
<el-card class="tispMsg" shadow="always">
<AppPageList v-if="appInitData.pageList"
:data="stateList.tableData"
:search-data="stateList.searchData"
:config="stateList.config"
:form-id="appInitData.appForm.cfid.toString()"
:versionid="appInitData.versionId"
:versiontitle="versionTitle"
:sign-code="appInitData.signCode"
:pickAppMenu="props.pickAppMenu"
:viewPage="stateList.view"
/>
<!-- <AppFormPage
<el-row>
<el-col :span="24" class="pageBox pageHeader">
<el-text class="wordFont">{{ appFormTitle }}</el-text>
</el-col>
<el-col :span="24">
<el-scrollbar class="scroBox">
<el-card class="tispMsg" shadow="always">
<AppPageList
v-if="appInitData.pageList"
:data="stateList.tableData"
:search-data="stateList.searchData"
:config="stateList.config"
:form-id="appInitData.appForm.cfid.toString()"
:versionid="appInitData.versionId"
:versiontitle="versionTitle"
:sign-code="appInitData.signCode"
:pickAppMenu="props.pickAppMenu"
:viewPage="stateList.view"
/>
<!-- <AppFormPage
v-else
ref="formEl"
:number="props.pickAppMenu.id"
@ -348,48 +370,46 @@ function optionsValue3Get3(data: any,fieldName: string){
add-url="addData"
@optionsValue3Get3="optionsValue3Get3"
/> -->
<ak-form
v-else
ref="formEl"
:number="props.pickAppMenu.id"
:isWorkFlow="isFlow"
:form-data="stateForm.formData"
:type="1"
:mastesformjson="mastesformjson"
:flowkey="appInitData.flowkey"
:groupid="appInitData.groupid"
:sign-code="appInitData.signCode"
:version-id="appInitData.versionId"
add-url="addData"
@optionsValue3Get3="optionsValue3Get3"
/>
</el-card>
</el-scrollbar>
</el-col>
</el-row>
<ak-form
v-else
ref="formEl"
:number="props.pickAppMenu.id"
:isWorkFlow="isFlow"
:form-data="stateForm.formData"
:type="1"
:mastesformjson="mastesformjson"
:flowkey="appInitData.flowkey"
:groupid="appInitData.groupid"
:sign-code="appInitData.signCode"
:version-id="appInitData.versionId"
add-url="addData"
@optionsValue3Get3="optionsValue3Get3"
/>
</el-card>
</el-scrollbar>
</el-col>
</el-row>
</template>
<style lang='scss' scoped>
.pageBox{
padding: 0 15px;
.wordFont{
font-size: 20px;
}
<style lang="scss" scoped>
.pageBox {
padding: 0 15px;
.wordFont {
font-size: 20px;
}
}
.pageHeader{
display: flex;
align-items: center;
justify-content: space-between;
background-color: #FFFFFF;
padding:15px 15px 5px 15px;
margin-bottom: 15px;
.pageHeader {
display: flex;
align-items: center;
justify-content: space-between;
background-color: #ffffff;
padding: 15px 15px 5px 15px;
margin-bottom: 15px;
}
.scroBox{
padding:0 15px;
height: calc(100vh - 110px);
.tispMsg{
margin:0 auto 15px auto;
}
.scroBox {
padding: 0 15px;
height: calc(100vh - 110px);
.tispMsg {
margin: 0 auto 15px auto;
}
}
</style>

Loading…
Cancel
Save