Browse Source

Merge branch 'lwx_v10'

# Conflicts:
#	src/components/DesignForm/public/form/childTable.vue
lwx_v11
hreenshan112 1 year ago
parent
commit
6ce7155f9e
  1. 7
      src/components/DesignForm/assembly/index.ts
  2. 13
      src/components/DesignForm/formControlPropertiNew.vue
  3. 21
      src/components/DesignForm/public/form/childTable.vue
  4. 64
      src/components/DesignForm/public/form/formGroup.vue
  5. 6
      src/components/DesignForm/public/form/formItem.vue
  6. 70
      src/widget/associatedforms/associatedForms.vue
  7. 61
      src/widget/associatedforms/index.vue

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

@ -942,11 +942,12 @@ export default [
config: {}, config: {},
styles: { styles: {
divStyle: { divStyle: {
marginBot: "15" marginBot: "15",
},
labelStyle: {
paddingLeft: "7", paddingLeft: "7",
}, },
/* labelStyle: {
paddingLeft: "7",
}, */
inputStyle: {} inputStyle: {}
} }
}, },

13
src/components/DesignForm/formControlPropertiNew.vue

@ -2537,11 +2537,11 @@ function associatedFormsDataRangeDialoghandle(){
let dataOnlyChild = JSON.parse(JSON.stringify(data.children)) let dataOnlyChild = JSON.parse(JSON.stringify(data.children))
let dataOnlyChild1 = JSON.parse(JSON.stringify(data.children)) let dataOnlyChild1 = JSON.parse(JSON.stringify(data.children))
dataExceptChild = dataExceptChild.filter((obj: { type: string }) => obj.type!== 'table'); dataExceptChild = dataExceptChild.filter((obj: { type: string }) => obj.type!== 'table');
console.log(dataExceptChild) //console.log(dataExceptChild)
dataExceptChild = removeFirstNumElements(dataExceptChild,8); dataExceptChild = removeFirstNumElements(dataExceptChild,8);
dataOnlyChild = dataOnlyChild.filter((obj: { type: string }) => obj.type== 'table'); dataOnlyChild = dataOnlyChild.filter((obj: { type: string }) => obj.type== 'table');
dataOnlyChild1 = dataOnlyChild1.filter((obj: { type: string }) => obj.type== 'table'); dataOnlyChild1 = dataOnlyChild1.filter((obj: { type: string }) => obj.type== 'table');
console.log(dataOnlyChild1) //console.log(dataOnlyChild1)
dataOnlyChild1.forEach((element: any) => { dataOnlyChild1.forEach((element: any) => {
element.children = removeFirstNumElements(element.children,6); element.children = removeFirstNumElements(element.children,6);
}); });
@ -2553,16 +2553,16 @@ function associatedFormsDataRangeDialoghandle(){
let resDataExceptChild = ref(dataExceptChild) let resDataExceptChild = ref(dataExceptChild)
let resDataOnlyChild = ref(dataOnlyChild) let resDataOnlyChild = ref(dataOnlyChild)
let resDataOnlyChild1 = ref(dataOnlyChild1) let resDataOnlyChild1 = ref(dataOnlyChild1)
console.log(resDataOnlyChild1.value) //console.log(resDataOnlyChild1.value)
//console.log(asfasfChildTableList.value) //console.log(asfasfChildTableList.value)
//console.log(resDataOnlyChild.value) //console.log(resDataOnlyChild.value)
let childTableCount = 0 let childTableCount = 0
for(let n = 0;n<resDataOnlyChild.value.length;n++){ for(let n = 0;n<resDataOnlyChild.value.length;n++){
console.log(resDataOnlyChild.value[n]) //console.log(resDataOnlyChild.value[n])
resDataOnlyChild.value[n].disabled=false resDataOnlyChild.value[n].disabled=false
childTableCount = n; childTableCount = n;
} }
console.log(childTableCount) //console.log(childTableCount)
currentChildTableCount = childTableCount currentChildTableCount = childTableCount
asfasfFieldTree.value = [{ asfasfFieldTree.value = [{
id: 'rootid_'+data.label, id: 'rootid_'+data.label,
@ -4619,6 +4619,7 @@ const radioChangeSet = (val:any) => {
check-strictly check-strictly
:render-after-expand="false" :render-after-expand="false"
filterable filterable
node-key="id"
@change="formidChanged" @change="formidChanged"
/> />
</div> </div>
@ -4855,7 +4856,7 @@ const radioChangeSet = (val:any) => {
<!-- 数据填充规则弹窗 --> <!-- 数据填充规则弹窗 -->
<el-dialog v-model="associatedFormsFillRolesDialogFlag" title="数据填充规则" top="150px" :close-on-click-modal="false" :show-close="false" style="margin-top:70px ;min-height: 300px;max-height:900px" width="50%" > <el-dialog v-model="associatedFormsFillRolesDialogFlag" title="数据填充规则" top="150px" :close-on-click-modal="false" :show-close="false" style="margin-top:70px ;min-height: 300px;max-height:900px" width="60%" >
<template v-if="controlData.type=='associatedForms'"> <template v-if="controlData.type=='associatedForms'">
<el-button style="font-size: large;margin-top: 10px;margin-bottom: 15px;" type="primary" link append-to-body="true" modal="true" @click="addFillRole"> 主表填充规则</el-button> <el-button style="font-size: large;margin-top: 10px;margin-bottom: 15px;" type="primary" link append-to-body="true" modal="true" @click="addFillRole"> 主表填充规则</el-button>
<div style="max-height:230px;border:1px solid white;overflow-y:auto;"> <div style="max-height:230px;border:1px solid white;overflow-y:auto;">

21
src/components/DesignForm/public/form/childTable.vue

@ -10,9 +10,11 @@ import Tooltips from '@/components/DesignForm/tooltip.vue'
import {constFormProps } from '@/api/DesignForm/utils' import {constFormProps } from '@/api/DesignForm/utils'
import { jsonParseStringify } from '@/utils/DesignForm' import { jsonParseStringify } from '@/utils/DesignForm'
import LowcodeImagePage from '@/components/DesignForm/public/expand/lowcodeImage.vue' import LowcodeImagePage from '@/components/DesignForm/public/expand/lowcodeImage.vue'
import AssociatedForms from '@/widget/associatedforms/index.vue'
import UploadPageList from '@/components/DesignForm/public/expand/uploadPageList.vue' import UploadPageList from '@/components/DesignForm/public/expand/uploadPageList.vue'
import LokOrgCentent from '@/widget/org/cont.vue' import LokOrgCentent from '@/widget/org/cont.vue'
import { SCOPE } from 'element-plus'
const props = withDefaults( const props = withDefaults(
@ -181,6 +183,7 @@ const timeToString = (timeVal:any,types:int) => {
return timeStr return timeStr
} }
<<<<<<< HEAD
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-10-11 14:49:23 @ 时间: 2024-10-11 14:49:23
@ -260,6 +263,16 @@ const optToString = (timeVal:any,item:any) => {
return timeStr return timeStr
=======
let associatedFormsIndexTablekey = 0
const emits = defineEmits<{
(e: 'asfValueChanged', val: any): void
}>()
function asfValueChanged(val:any){
//console.log("childTable-asfValueChanged",val)
emits("asfValueChanged",val)
>>>>>>> lwx_v10
} }
</script> </script>
<template> <template>
@ -291,6 +304,7 @@ const optToString = (timeVal:any,item:any) => {
</div> </div>
<div v-else-if="item.type=='datePicker'" v-html="timeToString(scope.row[item.name],item.control.type)"> <div v-else-if="item.type=='datePicker'" v-html="timeToString(scope.row[item.name],item.control.type)">
</div> </div>
<<<<<<< HEAD
<div v-else-if="item.type=='timePicker'" v-html="timeToString(scope.row[item.name],item.type)"> <div v-else-if="item.type=='timePicker'" v-html="timeToString(scope.row[item.name],item.type)">
</div> </div>
<div v-else-if="item.type=='radio'" v-html="optToString(scope.row[item.name],item)"> <div v-else-if="item.type=='radio'" v-html="optToString(scope.row[item.name],item)">
@ -301,6 +315,11 @@ const optToString = (timeVal:any,item:any) => {
</div> </div>
<div v-else-if="item.type=='select'" v-html="optToString(scope.row[item.name],item)"> <div v-else-if="item.type=='select'" v-html="optToString(scope.row[item.name],item)">
=======
<div v-else-if="item.type=='associatedForms'">
<AssociatedForms :data="item"
v-model="scope.row[item.name]" :tablekey="associatedFormsIndexTablekey" :row-index="scope.$index"/>
>>>>>>> lwx_v10
</div> </div>
<div v-else>{{ getText(scope.row[item.name],scope.row,item.name) }}</div> <div v-else>{{ getText(scope.row[item.name],scope.row,item.name) }}</div>
</div> </div>
@ -309,7 +328,9 @@ const optToString = (timeVal:any,item:any) => {
<form-item <form-item
v-model="scope.row[item.name]" v-model="scope.row[item.name]"
:tProp="`${data.name}.${scope.$index}.${item.name}`" :tProp="`${data.name}.${scope.$index}.${item.name}`"
:row-index="scope.$index"
:data="item" :data="item"
@asf-value-changed="asfValueChanged"
/> />
</div> </div>
</template> </template>

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

@ -462,10 +462,18 @@ function getNewObject(obj:any, arr:any) {
} }
function asfValueChanged(val:any){ function asfValueChanged(val:any){
/* console.log("asfValueChanged",val)
/* console.log("formGroup-asfValueChanged",val)
console.log(val.currentVal) console.log(val.currentVal)
console.log(val.fillFieldsMaster) console.log(val.fillFieldsMaster)
console.log(val.fillFieldsChild) */ console.log(val.fillFieldsChild) */
//[key][props.rowIndex][key1]
/* console.log(val.tableFlag)
console.log(val.key)
console.log(val.propsRowIndex)
console.log(val.key1) */
let fillFieldsMaster = "" let fillFieldsMaster = ""
let masterFillRoleFieldsArray1: any[] = []; let masterFillRoleFieldsArray1: any[] = [];
@ -541,7 +549,7 @@ function asfValueChanged(val:any){
if(val.options[0].fillRolesFieldsMap){ if(val.options[0].fillRolesFieldsMap){
val.options.forEach((item:any)=>{ val.options.forEach((item:any)=>{
if(item.fillRolesFieldsMap.value == val.currentVal){ if(item.fillRolesFieldsMap.value == val.currentVal){
//console.log(masterFillRoleFieldsArray1)
if(masterFillRoleFieldsArray1.length>0){ if(masterFillRoleFieldsArray1.length>0){
masterFillRoleFieldsArray1.forEach((item1:any)=>{ masterFillRoleFieldsArray1.forEach((item1:any)=>{
//console.log(item.fillRolesFieldsMap) //console.log(item.fillRolesFieldsMap)
@ -553,16 +561,38 @@ function asfValueChanged(val:any){
if(isString(strOrNumber)&&strOrNumber.includes("[")){ if(isString(strOrNumber)&&strOrNumber.includes("[")){
strOrNumberOrArray = convertIfValidNumberArray(strOrNumber) strOrNumberOrArray = convertIfValidNumberArray(strOrNumber)
} }
/* console.log(strOrNumber)
console.log(strOrNumberOrArray) */
/* console.log(x[1]) /* console.log(x[1])
console.log(strOrNumberOrArray) console.log(strOrNumberOrArray)
console.log(formProps.value.model[x[0]]) */ console.log(formProps.value.model[x[0]]) */
if(strOrNumberOrArray){ if(strOrNumberOrArray){
formProps.value.model[x[0]] = strOrNumberOrArray formProps.value.model[x[0]] = strOrNumberOrArray
}else{
/* console.log(x)
console.log(formProps.value.model)
console.log(val.tableFlag)
console.log(val.key)
console.log(val.propsRowIndex)
console.log(val.key1) */
if(val.tableFlag){
//console.log(formProps.value.model)
let urlArr = findPathInObject(formProps.value.model,x[0])
//console.log(urlArr)
if(urlArr[0]==x[0]){
formProps.value.model[x[0]] = strOrNumber
}else{
formProps.value.model[val.key][val.propsRowIndex][x[0]] = strOrNumber
}
}else{ }else{
formProps.value.model[x[0]] = strOrNumber formProps.value.model[x[0]] = strOrNumber
} }
}
//console.log(formProps.value.model[x[0]]) //console.log(formProps.value.model[x[0]])
}) })
@ -576,6 +606,34 @@ function asfValueChanged(val:any){
} }
} }
function findPathInObject(obj: any, target: string): string[] {
function search(obj: any, target: string, path: string[] = []): string[] | null {
if (typeof obj === "object" && obj!== null) {
for (let key in obj) {
let newPath = path.concat(key);
if (key === target) {
return newPath;
} else if (Array.isArray(obj[key])) {
for (let i = 0; i < obj[key].length; i++) {
let result = search(obj[key][i], target, newPath);
if (result) {
return result;
}
}
} else if (typeof obj[key] === "object" && obj[key]!== null) {
let result = search(obj[key], target, newPath);
if (result) {
return result;
}
}
}
}
return null;
}
return search(obj, target) || [];
}
interface DetailObject { interface DetailObject {
[key: string]: any [key: string]: any
} }
@ -774,7 +832,7 @@ function optionsValue3Get1(data: any,fieldName: string){
<form-group :data="element.list" data-type="not-table" /> <form-group :data="element.list" data-type="not-table" />
</div> </div>
<child-table v-else :data="element" /> <child-table v-else :data="element" @asf-value-changed="asfValueChanged"/>
</template> </template>
<!--格栅布局--> <!--格栅布局-->
<template v-else-if="element.type === 'grid'"> <template v-else-if="element.type === 'grid'">

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

@ -41,6 +41,7 @@ import UploadPageList from '@/components/DesignForm/public/expand/uploadPageList
import OrgCitys from '@/components/DesignForm/public/expand/orgCitys.vue' import OrgCitys from '@/components/DesignForm/public/expand/orgCitys.vue'
import DatePickerPage from '@/components/DesignForm/public/expand/datePicker.vue' import DatePickerPage from '@/components/DesignForm/public/expand/datePicker.vue'
import CascaderPage from '@/components/DesignForm/public/expand/cascader.vue' import CascaderPage from '@/components/DesignForm/public/expand/cascader.vue'
import AssociatedForms from '@/widget/associatedforms/index.vue'
@ -71,6 +72,7 @@ const props = withDefaults(
optionsValue3Get1?:any optionsValue3Get1?:any
tablekey?:any tablekey?:any
numrun?:any numrun?:any
rowIndex?:any
}>(), }>(),
{} {}
) )
@ -899,7 +901,7 @@ const pickUserVal = (val:any) => {
function asfValueChanged(val:any){ function asfValueChanged(val:any){
//console.log("asfValueChanged",val) //console.log("formItem-asfValueChanged",val)
emits("asfValueChanged",val) emits("asfValueChanged",val)
} }
/** /**
@ -934,7 +936,7 @@ const uploadPic = (val:any) => {
<!--修改时间--> <!--修改时间-->
<EditTime v-else-if="judgeIsShow(data.name) && data.type === 'editTime' " :data="data" :tablekey="props.tablekey" :numrun="props.numrun" /> <EditTime v-else-if="judgeIsShow(data.name) && data.type === 'editTime' " :data="data" :tablekey="props.tablekey" :numrun="props.numrun" />
<!--关联表单--> <!--关联表单-->
<AssociatedForms v-else-if="judgeIsShow(data.name) && data.type === 'associatedForms' && type != 4" :data="data" :form-props="formProps" :tablekey="props.tablekey" @asf-value-changed="asfValueChanged"/> <AssociatedForms v-else-if="judgeIsShow(data.name) && data.type === 'associatedForms' && type != 4" :data="data" :form-props="formProps" :tablekey="props.tablekey" :row-index="props.rowIndex" @asf-value-changed="asfValueChanged"/>
<VideoUpAndPlay v-else-if="judgeIsShow(data.name) && data.type === 'videoUpAndPlay' " :data="data" /> <VideoUpAndPlay v-else-if="judgeIsShow(data.name) && data.type === 'videoUpAndPlay' " :data="data" />

70
src/widget/associatedforms/associatedForms.vue

@ -3,7 +3,10 @@
<div class="container"> <div class="container">
<!-- <span style="font-size: 14px; margin-right: 12px;padding-top: 4px;" class="small-span" >{{ props.data.item?props.data.item.label:"关联表单" }}</span> --> <!-- <span style="font-size: 14px; margin-right: 12px;padding-top: 4px;" class="small-span" >{{ props.data.item?props.data.item.label:"关联表单" }}</span> -->
<el-select v-model="value1" placeholder="请选择" class="big-span" @change="asfValueChanged"> <el-select v-if="!tableFlag" v-model="value1" placeholder="请选择" class="big-span" @change="asfValueChanged">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-if="tableFlag" v-model="value2" placeholder="请选择" class="big-span" @change="asfValueChangedTable">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
@ -33,20 +36,60 @@ const props = withDefaults(
data: FormList data: FormList
formProps:Object formProps:Object
tablekey: any tablekey: any
rowIndex:number
}>(), }>(),
{} {}
) )
const emits = defineEmits(["valueChanged"]); const emits = defineEmits(["valueChanged","valueChangedTable"]);
const value1 = ref('') const value1 = ref('')
const value2 = ref('')
const valueTest = ref('')
let tableFlag = false
const options = ref([]) const options = ref([])
function hasTableProperty(obj: object): boolean {
for (let key in obj) {
if (key.startsWith("table")) {
return true;
}
}
return false;
}
onMounted(()=>{ onMounted(()=>{
// console.log(props.data.control)
if(props.data.control.formid!=null&&props.data.control.formid!=""){ if(props.data.control.formid!=null&&props.data.control.formid!=""){
getAsfDataTitles().then(({ data }) => { getAsfDataTitles().then(({ data }) => {
//console.log(data) //console.log(data)
options.value = data options.value = data
value1.value = props.formProps.model[props.data.name] value1.value = props.formProps.model[props.data.name]
//
valueTest.value = props.formProps.model
for (let key in valueTest.value) {
if (key.startsWith("table")) {
if(Array.isArray(valueTest.value[key])){
if(valueTest.value[key].length>0){
for (let key1 in valueTest.value[key][0]) {
if(key1==props.data.name){
tableFlag = true
//
//console.log(props.formProps.model[key][props.rowIndex][key1])
value2.value = props.formProps.model[key][props.rowIndex][key1]
}
}
}
}
}
}
}); });
} }
@ -63,14 +106,31 @@ function asfValueChanged(){
fillFieldsChild:fillFieldsChild, fillFieldsChild:fillFieldsChild,
asfFormId:props.data.control.formid, asfFormId:props.data.control.formid,
glbbddbd:props.data.control.glbbddbd, glbbddbd:props.data.control.glbbddbd,
tableFlag:false,
} }
emits("valueChanged",val) emits("valueChanged",val)
} }
function asfValueChangedTable(){
let val = {
options:options.value,
currentVal:value2.value,
fillFieldsMaster:fillFieldsMaster,
fillFieldsChild:fillFieldsChild,
asfFormId:props.data.control.formid,
glbbddbd:props.data.control.glbbddbd,
tableFlag:true,
}
emits("valueChangedTable",val)
}
function getAsfDataTitles() { function getAsfDataTitles() {
let dataTitle = '' let dataTitle = ''
if(props.tablekey.dataTitle!=null&&props.tablekey.dataTitle.length>0){ //console.log(props)
if(props.tablekey&&props.tablekey.dataTitle&&props.tablekey.dataTitle!=null&&props.tablekey.dataTitle.length>0){
for(let i = 0;i<props.tablekey.dataTitle.length;i++){ for(let i = 0;i<props.tablekey.dataTitle.length;i++){
dataTitle = dataTitle+props.tablekey.dataTitle[i]+"###" dataTitle = dataTitle+props.tablekey.dataTitle[i]+"###"
} }

61
src/widget/associatedforms/index.vue

@ -4,15 +4,11 @@
@ 备注: @ 备注:
--> -->
<template> <template>
<el-form-item <el-form-item v-bind="data.item" :prop="tProp || data.name" :class="config.className" :rules="itemRules as any"
v-bind="data.item" :label="getLabel(data.item as FormItem)">
:prop="tProp || data.name"
:class="config.className"
:rules="itemRules as any"
:label="getLabel(data.item as FormItem)"
>
<input v-model="value" type="hidden"> <input v-model="value" type="hidden">
<AssociatedForms :data="props.data" :form-props="formProps" :tablekey="props.tablekey" @value-changed="valueChanged"></AssociatedForms> <AssociatedForms :data="props.data" :form-props="formProps" :tablekey="props.tablekey"
:row-index="props.rowIndex" @value-changed="valueChanged" @value-changed-table="valueChangedTable"></AssociatedForms>
</el-form-item> </el-form-item>
@ -29,6 +25,7 @@ const props = withDefaults(
defineProps<{ defineProps<{
data: FormList data: FormList
tablekey: any tablekey: any
rowIndex: any
numrun?: number numrun?: number
modelValue?: any // modelValue?: any //
tProp?: string // form-itemprop tProp?: string // form-itemprop
@ -68,7 +65,7 @@ const value = computed({
} }
}) })
const updateModel = (val: any) => { const updateModel = (val: any) => {
console.log("dfsasdfasdf") //console.log("dfsasdfasdf")
let controlAttribute = "" let controlAttribute = ""
if (props.data.control) { if (props.data.control) {
if (props.data.control.type) { if (props.data.control.type) {
@ -163,6 +160,51 @@ const valueChanged = (val:any) =>{
value.value = val.currentVal value.value = val.currentVal
emits("asfValueChanged", val) emits("asfValueChanged", val)
}
const valueChangedTable = (val: any) => {
//console.log("table--->", val)
//emits("asfValueChanged", val)
//
//valueTest.value = formProps.model
//console.log(formProps.value.model)
for (let key in formProps.value.model) {
if (key.startsWith("table")) {
if (Array.isArray(formProps.value.model[key])) {
if (formProps.value.model[key].length > 0) {
for (let key1 in formProps.value.model[key][0]) {
if (key1 == props.data.name) {
/* console.log(key1)
//
console.log(props.rowIndex)
//
console.log(formProps.value.model[key][props.rowIndex][key1])
console.log(val.currentVal) */
formProps.value.model[key][props.rowIndex][key1] = val.currentVal
val.key = key
val.propsRowIndex = props.rowIndex
val.key1 = key1
emits("asfValueChanged", val)
}
}
}
}
}
}
} }
@ -176,6 +218,7 @@ const valueChanged = (val:any) =>{
max-height: 200px; max-height: 200px;
width: 100%; width: 100%;
height: 200px; height: 200px;
.image-slot { .image-slot {
display: flex; display: flex;
justify-content: center; justify-content: center;

Loading…
Cancel
Save