Browse Source

修复显示BUG

lwx_v4
超级管理员 1 year ago
parent
commit
fe3b671d94
  1. 4
      src/components/DesignForm/app/formPage.vue
  2. 2
      src/components/DesignForm/app/index.vue
  3. 4
      src/components/DesignForm/public/form/form.vue
  4. 16
      src/components/DesignForm/public/form/formGroup.vue
  5. 627
      src/components/DesignForm/public/form/formGroup_20240726.vue
  6. 2
      src/components/DesignForm/tableListPage/formPageCont.vue
  7. 17
      src/views/sysworkflow/lowcodepage/newLowCode/appLayoutEdit/appContainerPage.vue

4
src/components/DesignForm/app/formPage.vue

@ -1041,11 +1041,15 @@ function optionsValue3Get2(data: any,fieldName: string){
emits('optionsValue3Get3',data,fieldName)
}
</script>
<template>
<div class="common-layout">
<el-container v-if="props.isWorkFlow==1">
<el-main class="formMainBox">
<el-form
v-bind="formData.form"
ref="ruleForm"

2
src/components/DesignForm/app/index.vue

@ -1268,7 +1268,7 @@ const judgeListTitle = (val:any,viewConfig:any) => {
</el-col>
</el-row>
<FormPageCont v-model:is-show="lookPageInfoIsShow" :drawer-with="drawerWith" :page-info="pageInfoCont" :table-page-class="tablePageClass" :oper-state="operState" @getPageData="getPageData" />
<FormPageCont v-model:is-show="asflookPageInfoIsShow" :drawer-with="drawerWith" :page-info="currentAsfTableDataList[0]" :table-page-class="tablePageClass" :oper-state="operState" @getPageData="getPageData" />
<!-- <FormPageCont v-model:is-show="asflookPageInfoIsShow" :drawer-with="drawerWith" :page-info="currentAsfTableDataList[0]" :table-page-class="tablePageClass" :oper-state="operState" @getPageData="getPageData" /> -->
<TableFlow v-model:isopen="openTaskDrawer" :versionid="props.versionid" :versiontitle="props.versiontitle" :drawerwith="drawerWith" :pick-app-menu="pickAppMenu" @searchquery="getListData" />
</div>

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

@ -6,7 +6,8 @@
<script lang='ts' setup>
import '@/assets/scss/element-var.scss'
import '@/assets/scss/index.scss'
import FormGroup from './formGroup.vue'
// import FormGroup from './formGroup.vue'
import FormGroup from '@/components/DesignForm/public/form/formGroup.vue'
import { FormData,FormList,FormDataStyle } from '@/api/DesignForm/types'
import { getRequest } from '@/api/DesignForm'
@ -1618,6 +1619,7 @@ defineExpose({
</script>
<template>
<div v-loading="loading">
<el-form
v-bind="formData.form"
ref="ruleForm"

16
src/components/DesignForm/public/form/formGroup.vue

@ -281,6 +281,7 @@ const groupClick = (item: any, ele?: string) => {
}
//
const getFormItemStyle = (ele: FormList) => {
// console.log("311---->",ele)
if (ele.config?.span === 0) {
return { width: 'auto', margin: '0 5px' }
}
@ -375,7 +376,7 @@ onMounted(()=>{
const getFormItemLableStyle = (ele: any) => {
if(ele?.labelStyle){
// console.log("3",AnalysisCss(ele?.labelStyle))
// console.log("3",AnalysisCss(ele))
return AnalysisCss(ele?.labelStyle)
}
}
@ -386,6 +387,7 @@ function optionsValue3Get1(data: any,fieldName: string){
</script>
<template>
<draggable
itemKey="id"
:list="dataList"
@ -414,6 +416,7 @@ function optionsValue3Get1(data: any,fieldName: string){
v-show="linksShow(element, index)"
v-if="linksIf(element)"
>
<!-- {{element}} -->
<!--选项卡组件-->
<template v-if="element.type === 'tabs'">
@ -557,31 +560,21 @@ function optionsValue3Get1(data: any,fieldName: string){
<td :style="getFormItemLableStyle(element.styles)">{{ element.control?.label }}</td>
</el-button>
</div>
</template>
<!--创建人-->
<FounderForm v-else-if="element.type === 'founder'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<!--创建时间-->
<FounderTime v-else-if="element.type === 'founderTime'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<!--修改时间-->
<EditTime v-else-if="element.type === 'editTime'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<!--拥有者-->
<OwnerPage v-else-if="element.type === 'owner'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<!--所属部门-->
<DeptOrgPage v-else-if="element.type === 'deptOrg'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<DigitPage v-else-if="element.type === 'digitpage'" :data="element" />
<AssociatedForms v-else-if="element.type === 'associatedForms'" :data="element" :form-props="formProps" :tablekey="props.tableinfo" />
<LowcodeImage v-else-if="element.type === 'lowcodeImage'" :data="element" />
<LowcodeTransfer v-else-if="element.type === 'lowcodeTransfer'" :data="element" />
<VideoUpAndPlay v-else-if="element.type === 'videoUpAndPlay'" :data="element" />
<LowcodeCarsusel v-else-if="element.type === 'lowcodeCarsusel'" :data="element" />
<SignatureMap v-else-if="element.type === 'signaturemap'" :data="element" />
@ -593,7 +586,6 @@ function optionsValue3Get1(data: any,fieldName: string){
<SerialNumber v-else-if="element.type === 'serialNumber'" :data="element" :tablekey="props.tableinfo.name" :numrun="props.numrun" />
<!--其他组件-->
<FormItem v-else :data="element" @optionsValue3Get1="optionsValue3Get1"/>
<!--组件设计外功能框架-->
<template v-if="type === 5">
<div class="drag-control">

627
src/components/DesignForm/public/form/formGroup_20240726.vue

@ -0,0 +1,627 @@
<!--
@ 作者: 秦东
@ 时间: 2023-09-20 13:00:49
@ 备注: 自定义表单组件渲染
-->
<script lang='ts' setup>
import { computed, watch, inject, onUnmounted } from 'vue'
import Draggable from 'vuedraggable-es'
import FormItem from './formItem.vue'
import ChildTable from './childTable.vue'
import Tooltips from '@/components/DesignForm/tooltip.vue'
import FlexBox from './flexBox.vue'
import { useDesignFormStore } from '@/store/DesignForm/designForm'
import { FormList,formTableInfo } from '@/api/DesignForm/types'
import {
constFormBtnEvent,
constFormProps
} from '@/api/DesignForm/utils'
import { Md5 } from 'ts-md5';
import { jsonParseStringify } from '@/utils/DesignForm'
import { AnalysisCss } from '@/components/DesignForm/public/form/calculate/cssInfo.ts'
const props = withDefaults(
defineProps<{
data: FormList[]
tableinfo:formTableInfo
numrun?:number
}>(),
{
data: () => {
return []
}
}
)
let emits = defineEmits(['optionsValue3Get2']);
const store = useDesignFormStore() as any //
const formProps = inject(constFormProps, {}) as any
const type = computed(() => { //
return formProps.value.type
})
const state = reactive({
clone: true, // clone
gridAdd: false
})
const dataList = ref<any>(props.data)
watch(
() => props.data,
(v: FormList[]) => {
dataList.value = v
// console.log("++++++++++>",v)
},
{
deep: true
}
)
const activeKey = computed(() => {
return store.activeKey
})
//
const notNested = (type: string) => {
// const controlType = ['grid', 'table', 'tabs', 'div', 'flex', 'card']
const controlType = ['grid', 'tabs', 'div', 'card']
// let kjkdh = controlType.includes(type)
// console.log("",kjkdh,controlType)
return controlType.includes(type)
// return false
}
const notNestedTableFlex = (type: string) => {
const controlType = ['grid', 'table', 'tabs', 'div', 'flex', 'card']
// let kjkdh = controlType.includes(type)
// console.log("",kjkdh,controlType)
return controlType.includes(type)
// return false
}
/**
@ 作者: 秦东
@ 时间: 2024-06-22 15:03:31
@ 功能: 判断不能重复出现的组件
*/
const determineDuplicates = (type: string) => {
const controlType = ["founder","founderTime","editTime","owner","deptOrg"]
// console.log("",dataList);
if(dataList.value.length > 0){
let jibuqi = 0;
dataList.value.forEach((item:any)=>{
// console.log("",item);
if(controlType.includes(type)){
if(type == item.type){
jibuqi++
}
}
})
// console.log("",jibuqi);
if(jibuqi > 1){
ElMessage({
showClose: true,
message: '此类控件在表单中只能出现一次!不可重复添加!',
type: 'error',
})
return true;
}else{
return false
}
}else{
return false
}
// return controlType.includes(type)
}
//
const click = (action: string, index: number, item?: any) => {
if (type.value !== 5) {
return //
}
if (action === 'clone') {
const key = item.type + new Date().getTime().toString()
const newItem = jsonParseStringify(item)
dataList.value.splice(index, 0, Object.assign(newItem, { name: key }))
} else if (action === 'del') {
dataList.value.splice(index, 1)
//
store.setActiveKey('')
store.setControlAttr({})
} else if (action === 'gridAdd') {
item.columns.push({
list: [],
attr: { span: 12 }
})
} else if (action === 'delGridChild') {
item.splice(index, 1)
}
}
const draggableAdd = (evt: any) => {
if (type.value !== 5) {
return //
}
const newIndex = evt.newIndex
const key = new Date().getTime().toString()
const obj: any = dataList.value[newIndex]
const isNested = evt.target && evt.target.getAttribute('data-type') //
// console.log("-----1------->",newIndex)
// console.log("-----2------->",key)
// console.log("-----3------->",obj)
// console.log("-----4------->",isNested)
// console.log("-----4------->",dataList.value)
if ((isNested === 'not-nested' && notNested(obj.type)) || ((isNested === 'not-table' || isNested === 'not-flex') && notNestedTableFlex(obj.type)) || determineDuplicates(obj.type)) {
dataList.value.splice(newIndex, 1)
return
}
if (!obj) {
return
}
const label = obj.label || obj.item.label
delete obj.label
delete obj.icon
let objectItem = {}
// item
const notNeedItem = [
'txt',
'title',
'button',
'table',
'grid',
'tabs',
'flex',
'div'
]
// console.log("-->",obj.type)
if (!notNeedItem.includes(obj.type)) {
objectItem = {
item: {
label: label
}
}
}
// name
let nameObj = {}
const notNeedName = [
'txt',
'title',
'button',
'grid',
'tabs',
'divider',
'div',
'card'
]
switch(obj.type){
case "founder":
nameObj = {
name: "creater"
}
// console.log("founder--->creater",nameObj)
break
case "founderTime":
nameObj = {
name: "creater_time"
}
// console.log("founderTime-->creater_time",nameObj)
break
case "editTime":
nameObj = {
name: "edit_time"
}
// console.log("editTime--->edit_time",nameObj)
break
case "owner":
nameObj = {
name: "owner"
}
// console.log("owner------>owner",nameObj)
break
case "deptOrg":
nameObj = {
name:"org"
}
// console.log("deptOrg---->org",nameObj)
break
default:
if (!notNeedName.includes(obj.type) && !obj.name) {
nameObj = {
name: obj.type + key
}
}
}
// console.log("-----5------->",obj)
// console.log("-----6------->",nameObj)
// console.log("-----7------->",objectItem)
Object.assign(obj, nameObj, objectItem)
// console.log("-----8------->",obj)
groupClick(obj)
}
const getGroupName = (item: any) => {
if (item.name) {
return item.name
} else {
let md5Object:any = new Md5()
md5Object.appendAsciiStr(JSON.stringify(item))
let md5Str = md5Object.end()
return md5Str
}
}
//
/**
* styles:{
divStyle:{},
labelStyle:{},
inputStyle:{}
}
*/
const groupClick = (item: any, ele?: string) => {
//
if (type.value !== 5) {
return
}
if (ele) {
item.type = ele
}
if(!item.styles){
item.styles={
divStyle:{},
labelStyle:{},
inputStyle:{}
}
}
// console.log("--->",item)
store.setActiveKey(getGroupName(item))
store.setControlAttr(item)
// grid
state.gridAdd = item.type === 'grid'
// state.clone = !notNested(item.type)
state.clone = !notNestedTableFlex(item.type)
}
//
const getFormItemStyle = (ele: FormList) => {
if (ele.config?.span === 0) {
return { width: 'auto', margin: '0 5px' }
}
if (ele.config && ele.config.span) {
return { width: (ele.config.span / 24) * 100 + '%' }
}
if(ele.styles?.divStyle){
// console.log("3",AnalysisCss(ele.styles.divStyle))
return AnalysisCss(ele.styles.divStyle)
}
}
//
const linksShow = (el: FormList, index: number) => {
/*
*/
//
if (!el.config) {
return true
}
const key = el.config.linkKey
//liwenxuan
//console.log("linksShow--------"+index+"--------"+JSON.stringify(el))
//
const value = el.config.linkValue
const linkResult = el.config.linkResult
if (key && value && type.value !== 5) {
const Fn = new Function('$', `return (${value})`)
// console.log(Fn)
const pass = Fn(formProps.value.model)
if (linkResult === 'disabled') {
// disabled
dataList.value[index].control.disabled = pass
return true
} else {
return pass
}
}
return true
}
//
const linksIf = (obj: FormList) => {
const { type } = formProps.value
const { config: { disabledAdd, disabledEdit, disabledDetail } = {} } = obj
if (type === 1) {
if (disabledAdd) {
// ||
return false //
}
} else if (type === 2) {
//
if (disabledEdit) {
return false
}
} else if (type === 4 || type === 3) {
//
if (disabledDetail) {
return false
}
}
// namevIf
const vIf: string | string[] = formProps.value.hideField
if (vIf?.length > 0 && obj.name) {
return vIf.indexOf(obj.name) === -1 // false
}
return true
}
//
const injectBtnEvent:any = inject(constFormBtnEvent)
const clickBtn = (control: any) => {
// console.log(control)
// 0: '',
// 1: '',
// 2: '',
// 3: '()'
if (type.value !== 5) {
//
injectBtnEvent && injectBtnEvent(control)
}
}
onUnmounted(() => {
// console.log('formGroup onUnmounted')
dataList.value = {}
store.setActiveKey('')
store.setControlAttr({})
})
onMounted(()=>{
// console.log('formGroup onMounted',props.data,dataList.value,props.tableinfo)
})
const getFormItemLableStyle = (ele: any) => {
if(ele?.labelStyle){
// console.log("3",AnalysisCss(ele?.labelStyle))
return AnalysisCss(ele?.labelStyle)
}
}
function optionsValue3Get1(data: any,fieldName: string){
emits('optionsValue3Get2',data,fieldName)
}
</script>
<template>
<draggable
itemKey="id"
:list="dataList"
name="fade"
class="drag"
v-bind="{
group: 'form',
ghostClass: 'ghost',
animation: 200,
handle: '.drag-move',
disabled: type !== 5
}"
@add="draggableAdd"
>
<template #item="{ element, index }">
<div
class="group"
:class="{
['group-' + element.type]: true,
active: activeKey === getGroupName(element)
}"
:style="getFormItemStyle(element)"
@click.stop="groupClick(element)"
v-show="linksShow(element, index)"
v-if="linksIf(element)"
>
<!-- {{element}} -->
<!--选项卡组件-->
<template v-if="element.type === 'tabs'">
<div class="form-tabs">
<el-tabs
v-bind="element.control"
:class="[element.config?.className]"
>
<el-tab-pane
v-for="(item, tIndex) in element.columns"
:label="item.label"
:key="tIndex"
>
<form-group :data="item.list" data-type="not-nested" />
</el-tab-pane>
</el-tabs>
</div>
</template>
<!--标题组件-->
<template v-else-if="element.type === 'title'">
<div
class="title"
:class="[element.config.className]"
v-bind="element.control"
:style="getFormItemLableStyle(element.styles)"
>
<span v-html="element.control.modelValue"></span>
<Tooltips
:content="element.config.help"
v-if="element.config.help"
/>
</div>
</template>
<!--文字组件-->
<template v-else-if="element.type === 'txt'">
<div
v-bind="element.control"
:class="[element.config.className]"
v-html="element.control.modelValue"
>
</div>
</template>
<!--表格组件-->
<template v-else-if="element.type === 'table'">
<div class="form-table" v-if="type === 5">
<!-- <form-group :data="element.list" data-type="not-nested" /> -->
<form-group :data="element.list" data-type="not-table" />
</div>
<child-table v-else :data="element" />
</template>
<!--格栅布局-->
<template v-else-if="element.type === 'grid'">
<el-row class="form-row" :class="[element.className]">
<el-col
class="form-col"
:class="{
'active-col': activeKey === getGroupName(col),
[col.className]: col.className
}"
v-bind="col.attr"
v-for="(col, i) in element.columns"
:key="i"
@click.stop="groupClick(col, 'gridChild')"
>
<form-group :data="col.list" data-type="not-nested" />
<div class="drag-control" v-if="type === 5">
<div class="item-control">
<i
class="icon-del"
@click.stop="click('delGridChild', i as number, element.columns)"
>
</i>
</div>
</div>
</el-col>
</el-row>
</template>
<!--卡片布局-->
<template v-else-if="element.type === 'card'">
<el-collapse model-value="1">
<el-collapse-item :title="element.item.label" name="1">
<template #title v-if="element.help">
{{ element.item.label }}
<Tooltips :content="element.help" />
</template>
<form-group :data="element.list" data-type="not-nested" />
</el-collapse-item>
</el-collapse>
</template>
<!--分割线-->
<template v-else-if="element.type === 'divider'">
<el-divider v-bind="element.control">{{ element.item && element.item.label }}</el-divider>
</template>
<!--div容器-->
<template v-else-if="element.type === 'div'">
<div
class="div-layout"
v-bind="element.control"
:class="{
[element.className]: element.className,
inline: element.config?.inline,
[element.config?.textAlign]: element.config?.textAlign
}"
>
<form-group :data="element.list" data-type="not-nested" />
</div>
</template>
<!--弹性布局-->
<template v-else-if="element.type === 'flex'">
<!-- <form-group
:data="element.list"
data-type="not-nested"
v-if="type === 5"
/> -->
<form-group
:data="element.list"
data-type="not-flex"
v-if="type === 5"
/>
<flex-box :data="element" v-else />
<el-button
style="position: relative; top: -28px; left: 10px"
v-if="element.config.addBtnText && type === 5"
size="small"
>
{{ element.config.addBtnText }}
</el-button>
</template>
<!--按钮-->
<template v-else-if="element.type === 'button'">
<div
:class="[element.config?.className]"
:style="{ 'text-align': element.config?.textAlign }"
>
<el-button
v-bind="element.control"
@click="clickBtn(element.control)"
color="#626aef"
>
<td :style="getFormItemLableStyle(element.styles)">{{ element.control?.label }}</td>
</el-button>
</div>
</template>
<!--创建人-->
<FounderForm v-else-if="element.type === 'founder'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<!--创建时间-->
<FounderTime v-else-if="element.type === 'founderTime'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<!--修改时间-->
<EditTime v-else-if="element.type === 'editTime'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<!--拥有者-->
<OwnerPage v-else-if="element.type === 'owner'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<!--所属部门-->
<DeptOrgPage v-else-if="element.type === 'deptOrg'" :data="element" :tablekey="props.tableinfo" :numrun="props.numrun" />
<DigitPage v-else-if="element.type === 'digitpage'" :data="element" />
<AssociatedForms v-else-if="element.type === 'associatedForms'" :data="element" :form-props="formProps" :tablekey="props.tableinfo" />
<LowcodeImage v-else-if="element.type === 'lowcodeImage'" :data="element" />
<LowcodeTransfer v-else-if="element.type === 'lowcodeTransfer'" :data="element" />
<VideoUpAndPlay v-else-if="element.type === 'videoUpAndPlay'" :data="element" />
<LowcodeCarsusel v-else-if="element.type === 'lowcodeCarsusel'" :data="element" />
<SignatureMap v-else-if="element.type === 'signaturemap'" :data="element" />
<OrgCentent v-else-if="element.type === 'orgCentent'" :data="element" />
<BaiduMap v-else-if="element.type === 'baidumap'" :data="element" />
<OrgCitys v-else-if="element.type === 'organization'" :data="element" />
<UrlLink v-else-if="element.type === 'urllink'" :data="element" />
<SerialNumber v-else-if="element.type === 'serialNumber'" :data="element" :tablekey="props.tableinfo.name" :numrun="props.numrun" />
<!--其他组件-->
<FormItem v-else :data="element" @optionsValue3Get1="optionsValue3Get1"/>
<!--组件设计外功能框架-->
<template v-if="type === 5">
<div class="drag-control">
<div class="item-control">
<i
class="icon-plus"
@click.stop="click('gridAdd', index, element)"
v-if="state.gridAdd"
title="添加列"
></i>
<i
class="icon-clone"
@click.stop="click('clone', index, element)"
v-if="state.clone"
title="克隆"
></i>
<i class="icon-del" @click.stop="click('del', index)"></i>
</div>
<div class="drag-move icon-move"></div>
</div>
<div class="tooltip" style="display: black;">{{ element.name }}</div>
</template>
</div>
</template>
</draggable>
</template>
<style lang='scss' scoped>
</style>

2
src/components/DesignForm/tableListPage/formPageCont.vue

@ -254,6 +254,7 @@ const jsuanKuandu = () => {
<el-container>
<el-main>
<ak-form
ref="formEl"
v-loading="formLoading" element-loading-text="Loading..."
@ -272,7 +273,6 @@ const jsuanKuandu = () => {
:after-submit="afterSubmit"
:submit-edit="submitEdit"
/>
<el-divider v-if="pageLog&&pageLog.length > 0" content-position="left">历史记录</el-divider>
<el-timeline style="width: 100%">
<el-timeline-item v-for="(item,index) in pageLog" :key="index" :timestamp="item.time+' 操作人:'+item.creater" placement="top">

17
src/views/sysworkflow/lowcodepage/newLowCode/appLayoutEdit/appContainerPage.vue

@ -48,6 +48,8 @@ const checkedMenu = ref<appMenuTreeInfo>("")
const appPageKey = ref<string>("") //AppId
const isNew = ref(false)
const saveAppFormIsShow = ref(false)
const menuParentKey = ref<string>("")
const menuGroupShow = ref(false) //
/**
@ 作者: 秦东
@ 时间: 2024-07-22 11:40:06
@ -130,6 +132,21 @@ const addAppPageForm = (key?:string) => {
isNew.value = true
// console.log("-->")
}
/**
@ 作者: 秦东
@ 时间: 2024-04-23 16:57:39
@ 功能: 添加菜单分组
*/
const addMenu = (key?:string) => {
if(key){
menuParentKey.value = key;
}else{
menuParentKey.value = "";
}
menuGroupShow.value = true;
}
</script>
<template>
<el-drawer v-model="props.editIsOpen" :with-header="false" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith">

Loading…
Cancel
Save