Browse Source

Merge branch 'lwx_v8'

# Conflicts:
#	src/types/components.d.ts
#	src/views/sysworkflow/lowcodepage/pageDesignes.vue
lwx_v10
超级管理员 2 years ago
parent
commit
b1ec499aaf
  1. 10
      src/components/DesignForm/assembly/index.ts
  2. 250
      src/components/DesignForm/formControlAttr.vue
  3. 456
      src/components/DesignForm/public/form/form.vue
  4. 11
      src/components/DesignForm/public/form/formGroup.vue
  5. 7
      src/components/DesignForm/public/form/formItem.vue
  6. 4
      src/types/components.d.ts
  7. 44
      src/views/sysworkflow/lowcodepage/pageDesignes.vue

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

@ -1,3 +1,4 @@
import { v4 as uuidv4 } from "uuid";
const selectOption: any = [
/*{
label: '标签1',
@ -80,7 +81,8 @@ const selectOption: any = [
icon: 'radio',
iconFont: 'fa-dot-circle-o',
control: {
modelValue: ''
modelValue: '',
glxxsz:[],
},
options: selectOption, // 下拉选项数据集合
config: config,
@ -96,7 +98,8 @@ const selectOption: any = [
icon: 'checkbox',
iconFont: 'fa-check-square-o',
control: {
modelValue: []
modelValue: [],
glxxszForCheckBox:[],
},
options: selectOption,
config: config,
@ -113,7 +116,8 @@ const selectOption: any = [
iconFont: 'fa-toggle-down',
control: {
modelValue: '',
appendToBody: true
appendToBody: true,
glxxsz:[],
},
options: selectOption,
config: config,

250
src/components/DesignForm/formControlAttr.vue

@ -56,6 +56,7 @@
(e: 'openDialog', data: any): void
(e: 'update:formOtherData', data: any): void
(e: 'videoMsgChange', data: VideoMsg): void
(e: 'formNameChange', data: any): void
//(e: 'update:formData', data: any): void
//(e: 'update:formConfig', data: any): void
}>()
@ -993,6 +994,7 @@
const fileSignAry = reactive<any>([])
const controlChange = (obj: any, val: any) => {
// console.log("--1--",obj)
// console.log("--2--",obj.eventName)
// console.log("--3--",val)
@ -1088,7 +1090,15 @@
const newVal = obj.isNum ? formatNumber(val) : val //
obj.path && getPropByPath(controlData.value, obj.path, newVal)
}
//liwenxuan bug: start
emits('formNameChange',val);
//liwenxuan bug: end
}
/**
* 获取非负整数随机数
* @param Min 最小整数
@ -1134,12 +1144,55 @@
//
//
const delSelectOption = (index: number, type?: string) => {
if (type === 'tabs') {
//liwenxuan 20240508 checkbox start
let delflag = true
let breakFlag = 0
if(controlData.value.type === 'checkbox'){
for(var i = 0;i < controlData.value.control.glxxszForCheckBox.length;i ++){
if(breakFlag>0){
break
}
for(var j = 0; j < controlData.value.control.glxxszForCheckBox[i].selectedOptions.length; j++){
if(controlData.value.control.glxxszForCheckBox[i].selectedOptions[j] === controlData.value.options[index].value){
let del =confirm("您本次删除的选项已在关联选项设置中有所配置,相关关联选项设置将被删除,是否确定删除?");
if (del==true){
breakFlag++
break
}else{
delflag = false
breakFlag++
break
}
}
}
}
}
if(delflag === true){
//
if(controlData.value.type === 'checkbox'){
const todelArr:any = []
for(var i = 0;i < controlData.value.control.glxxszForCheckBox.length;i ++){
for(var j = 0; j < controlData.value.control.glxxszForCheckBox[i].selectedOptions.length; j++){
if(controlData.value.control.glxxszForCheckBox[i].selectedOptions[j] === controlData.value.options[index].value){
todelArr.push(controlData.value.control.glxxszForCheckBox[i].id)
}
}
}
for(var i = 0;i < todelArr.length;i++){
controlData.value.control.glxxszForCheckBox = controlData.value.control.glxxszForCheckBox.filter((item: { id: any }) => item.id != todelArr[i])
}
}
//liwenxuan 20240508 checkbox end
if (type === 'tabs' ) {
controlData.value.columns.splice(index, 1)
} else {
controlData.value.options.splice(index, 1)
}
}
}
//
const addSelectOption = (type: any) => {
if (controlData.value.type === 'cascader') {
@ -1850,6 +1903,7 @@ function formidChanged(){
}
const associatedFormsCurrentFormFieldTree = ref<Tree[]>()
const associatedFormsCurrentFormFieldTreeForGlxxsz = ref<Tree[]>()
getAssociatedFormsCurrentFieldTree().then(({ data }) => {
if(data.id==="cfid为空"){
@ -1859,10 +1913,22 @@ getAssociatedFormsCurrentFieldTree().then(({ data }) => {
//let rootid_ = data.value.label
associatedFormsCurrentFormFieldTree.value = [{
id: 'rootid_'+data.label,
label: '当前表单',
//label: '',
label: '当前表单-'+data.treeAttrs.show,
children: [...resData.value],
treeAttrs: data.treeAttrs,
}]
let resDataForGlxxsz = ref(data.children.slice(8))
associatedFormsCurrentFormFieldTreeForGlxxsz.value = [{
id: 'rootid_'+data.label,
//label: '',
label: '当前表单-'+data.treeAttrs.show,
children: [...resDataForGlxxsz.value],
treeAttrs: data.treeAttrs,
}]
}
});
@ -2152,6 +2218,87 @@ function delRole(id:String){
//liwenxuan20240403 associatedForms end
//liwenxuan20240426 start
const glxxszDialogFlag = ref(false)
const glxxszDialogFlagCheckBox = ref(false)
function handelGlxxszDialog(){
if(controlData.value.options.length===0){
alert("无可配置选项,请先添加。")
}else{
glxxszDialogFlag.value = true
}
}
function handelGlxxszDialogCheckbox(){
glxxszDialogFlagCheckBox.value = true
}
function handleDetermineGlxxszDialog(){
glxxszDialogFlag.value = false
}
function handleDetermineGlxxszDialogCheckBox(){
glxxszDialogFlagCheckBox.value = false
}
//radio,select
watch(()=>controlData.value.options, (changedOptions:any) => {
if(controlData.value.type === "radio" || controlData.value.type === "select"){
if(changedOptions.length===0){
//option
controlData.value.control.glxxsz = []
}else{
if(changedOptions.length < controlData.value.control.glxxsz.length){
//option
controlData.value.control.glxxsz = controlData.value.control.glxxsz.filter((item: { optionValue: any }) => changedOptions.find((bItem: { value: any }) => item.optionValue == bItem.value))
}else{
for(var i = 0; i < changedOptions.length; i++){
if(controlData.value.control.glxxsz[i]===undefined){
//option
controlData.value.control.glxxsz.push(
{
conditionField: controlData.value.name,
optionLabel: changedOptions[i].label,
optionValue: changedOptions[i].value,
tableIndex: i,
id: uuidv4().replaceAll('-','').toString(),
}
)
}else{
//option
controlData.value.control.glxxsz[i].optionLabel = changedOptions[i].label
controlData.value.control.glxxsz[i].optionValue = changedOptions[i].value
}
}
}
}
}else if(controlData.value.type === "checkbox"){
}
},{ deep: true })
function createRowForGlxxsz(){
controlData.value.control.glxxszForCheckBox.push(
{
conditionField: controlData.value.name,
selectedOptions:[],
showFields:[],
id: uuidv4().replaceAll('-','').toString(),
}
)
}
function deleteRowForGlxxsz(row: { id: any }){
controlData.value.control.glxxszForCheckBox = controlData.value.control.glxxszForCheckBox.filter((item: { id: any }) => item.id!=row.id)
}
//bug:
//liwenxuan20240426 end
@ -2773,6 +2920,12 @@ const loadNextPage = () => {
</el-form-item>
</div>
</div>
<div v-if="showHide(['radio','select',],true)">
<el-button @click="handelGlxxszDialog">关联选项设置</el-button>
</div>
<div v-if="showHide(['checkbox',],true)">
<el-button @click="handelGlxxszDialogCheckbox">关联选项设置</el-button>
</div>
<div
v-if="
showHide(
@ -3365,7 +3518,7 @@ const loadNextPage = () => {
<el-tree
ref="fieldTreeRef"
node-key="id"
empty-text="请先保存当前表单,若需要展示本次编辑表单添加的字段,也需先保存"
empty-text="请先保存当前表单"
:data="associatedFormsCurrentFormFieldTree"
:props="treeDefaultProps"
:filter-node-method="filterNode"
@ -3459,6 +3612,7 @@ const loadNextPage = () => {
<el-tree
ref="fieldTreeRef"
node-key="id"
empty-text="选择关联的表单后展示"
:data="asfasfFieldTree"
:props="treeDefaultProps"
:filter-node-method="filterNode"
@ -3477,7 +3631,7 @@ const loadNextPage = () => {
<el-tree
ref="fieldTreeRef"
node-key="id"
empty-text="请先保存当前表单,若需要展示本次编辑表单添加的字段,也需先保存"
empty-text="请先保存当前表单"
:data="associatedFormsCurrentFormFieldTree"
:props="treeDefaultProps"
:filter-node-method="filterNode"
@ -3573,7 +3727,7 @@ const loadNextPage = () => {
<div style="height:300px;border:1px solid white;overflow-y:auto">
<template v-for="(item, index) in controlData.control.fillRoles" :key="controlData.control.fillRoles[index].id">
<AssociatedFormsFillRole v-model:left-value="controlData.control.fillRoles[index].leftValue" v-model:right-value="controlData.control.fillRoles[index].rightValue" :left-tree-source = "asfasfFieldTree[0].children" :right-tree-source = "associatedFormsCurrentFormFieldTree[0].children" :current-key="controlData.control.fillRoles[index].id" @del-Role = "delRole" ></AssociatedFormsFillRole>
<AssociatedFormsFillRole v-model:left-value="controlData.control.fillRoles[index].leftValue" v-model:right-value="controlData.control.fillRoles[index].rightValue" :left-tree-source = "asfasfFieldTree" :right-tree-source = "associatedFormsCurrentFormFieldTree" :current-key="controlData.control.fillRoles[index].id" @del-Role = "delRole" ></AssociatedFormsFillRole>
</template>
@ -3593,6 +3747,91 @@ const loadNextPage = () => {
<!-- 关联表单设置弹窗 liwenxuan 20240402 end -->
<!-- 关联选项设置弹窗 liwenxuan 20240426 start -->
<el-dialog v-model="glxxszDialogFlag" class="glxxsztc" top="150px" :close-on-click-modal="false" title="关联选项设置" :show-close="false" style="margin-top:70px;" width="50%" >
<template v-if="controlData.type=='radio'||controlData.type=='select'">
<el-table
:data="controlData.options" stripe border style="width: 100%;min-height:50px;max-height:500px;overflow-y:auto"
:cell-style="{height: '55px',paddingLeft: '15px'}" :header-cell-style="{background:'#F3F4F7',color:'#555',}"
>
<el-table-column prop="link" label="当选项为" width="220">
<template #default="optionScope">
<span style="background-color: #E8EAEE;border-radius: 8px;padding-top: 5px;padding-bottom: 5px;padding-left: 15px;padding-right: 15px;">{{ optionScope.row.label }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="显示以下组件" >
<template #default="fieldScope">
<el-tree-select v-model="controlData.control.glxxsz[fieldScope.$index].showFields" style="width: 100%" :data="associatedFormsCurrentFormFieldTreeForGlxxsz[0].children" multiple />
</template>
</el-table-column>
</el-table>
</template>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleDetermineGlxxszDialog">
确定
</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="glxxszDialogFlagCheckBox" class="glxxsztc" top="150px" :close-on-click-modal="false" title="关联选项设置" :show-close="false" style="margin-top:70px;" width="50%" >
<template v-if="controlData.type=='checkbox'">
<el-table
:data="controlData.control.glxxszForCheckBox" stripe border style="width: 100%;min-height:50px;max-height:500px;overflow-y:auto"
:cell-style="{height: '55px',paddingLeft: '15px'}" :header-cell-style="{background:'#F3F4F7',color:'#555',}">
<el-table-column prop="link" label="当选项为" width="300">
<template #default="optionScope">
<el-tree-select v-model="controlData.control.glxxszForCheckBox[optionScope.$index].selectedOptions" style="width: 100%" :data="controlData.options" multiple />
</template>
</el-table-column>
<el-table-column fixed="right" label="显示以下组件" >
<template #default="fieldScope">
<el-tree-select v-model="controlData.control.glxxszForCheckBox[fieldScope.$index].showFields" style="width: 100%" :data="associatedFormsCurrentFormFieldTreeForGlxxsz[0].children" multiple />
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="130">
<template #default="operateScope">
<el-button type="danger" :icon="Delete" circle @click="deleteRowForGlxxsz(operateScope.row)"/>
</template>
</el-table-column>
</el-table>
<el-button plain type="success" style="margin-top: 10px;" @click="createRowForGlxxsz">新增</el-button>
</template>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleDetermineGlxxszDialogCheckBox">
确定
</el-button>
</div>
</template>
</el-dialog>
<!-- 关联选项设置弹窗 liwenxuan 20240426 end -->
</template>
<style lang='scss' scoped>
@ -3657,5 +3896,6 @@ const loadNextPage = () => {
.el-main{
--el-main-padding: 5px
}
</style>

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

@ -7,6 +7,7 @@
import '@/assets/scss/element-var.scss'
import '@/assets/scss/index.scss'
import FormGroup from './formGroup.vue'
import { FormData,FormList,FormDataStyle } from '@/api/DesignForm/types'
import { getRequest } from '@/api/DesignForm'
import { useRoute, useRouter } from 'vue-router'
@ -75,12 +76,14 @@ const props = withDefaults(
type:Boolean,
default:true
},
key:1
}
)
const emits = defineEmits<{
(e: 'btnClick', type: string): void
(e: 'change', val: any): void //
(e: 'update:issave', type: boolean): void
(e: 'refresh'): void
}>()
const route = useRoute()
const router = useRouter()
@ -170,6 +173,237 @@ const forEachGetFormModel = (list: FormList[], obj: any) => {
})
}
function arrayEqual(a: string[], b: any[]) {
//alert("")
//
let a_ = JSON.parse(JSON.stringify(a));
for(let i = 0;i<a_.length;i++){
a_[i] = a_[i]+""
}
//console.log(a_)
//console.log(b)
a_ = a_.sort();
b = b.sort();
//false
if (a_.length != b.length)
return false;
//
for (var i = 0; i < a_.length; ++i) {
if (a_[i] !== b[i])
return false;
}
return true;
}
interface hideFieldConditionArritem {
toShow:string
conditions: any[]
}
const recursionToGetFinallyHideFields = (hideFieldArr: any[],radioSelectArr3: string | any[],defaultHideFields: any[]) => {
nextTick(() => {
/* console.log("showFieldskey,optionValuevalue,radioselectArr3 --- ")
console.log(radioSelectArr3)
console.log("当前表单的值-------------------")
console.log(model.value)
console.log("默认隐藏的字段-----------------")
console.log(defaultHideFields) */
let modelKeyArr = [];//
for(let i= 0;i<props.formData.list.length;i++){
modelKeyArr.push(props.formData.list[i].name+"")
}
/* console.log("modelKeyArr^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
console.log(modelKeyArr) */
//
let nowShowingDefaultHideFieldArr = defaultHideFields.filter(a => !hideFieldArr.includes(a))
//
let nowShowingFieldArr = modelKeyArr.filter(a => !hideFieldArr.includes(a))
//key,value,
const hideFieldConditionArr:hideFieldConditionArritem[] = []
//
let hideFieldsFromCheckbox: string[] = []
for(let i = 0;i < hideFieldArr.length;i++){
hideFieldConditionArr.push({
toShow:hideFieldArr[i],
conditions:[],
})
}
//console.log(hideFieldConditionArr)
//radioSelectArr3radioSelectArr3 [ i ] . toshowFieldKey i==hideFieldArri
for(let i = 0;i < radioSelectArr3.length;i++){
for(let j = 0;j < radioSelectArr3[i].toShowFieldKey.length;j++){
for(let n = 0;n < hideFieldConditionArr.length;n++){
/* console.log(i)
console.log(j)
console.log(n) */
if(radioSelectArr3[i].toShowFieldKey[j]==hideFieldConditionArr[n].toShow){
if(Array.isArray(radioSelectArr3[i].conditionFieldValue)){
let valStr = "";
for(let x = 0;x<radioSelectArr3[i].conditionFieldValue.length;x++){
valStr = valStr+radioSelectArr3[i].conditionFieldValue[x]+","
}
hideFieldConditionArr[n].conditions.push({
conditionFrom:"radioOrSelect",//
condition:[{////conditionFieldconditionFieldValue,hideFieldConditionArr[n]
conditionField:radioSelectArr3[i].conditionFieldKey,
conditionFieldValue:valStr
}]
})
}else{
hideFieldConditionArr[n].conditions.push({
conditionFrom:"radioOrSelect",//
condition:[{////conditionFieldconditionFieldValue,hideFieldConditionArr[n]
conditionField:radioSelectArr3[i].conditionFieldKey,
conditionFieldValue:radioSelectArr3[i].conditionFieldValue//
}]
})
}
}
}
}
}
//console.log(hideFieldConditionArr);
//.
//let showfieldsCountX = [];
for(let i = 0;i<hideFieldConditionArr.length;i++){
let x = 0//
let toshow = hideFieldConditionArr[i].toShow
let conditions = hideFieldConditionArr[i].conditions
//console.log(conditions)
for(let j = 0;j<conditions.length;j++){
let conditionField = conditions[j].condition[0].conditionField
let conditionFieldValue = conditions[j].condition[0].conditionFieldValue
//console.log(conditionField)
if(conditionFieldValue.includes(",")){//
let conditionFieldValueArr = conditionFieldValue.split(",")
conditionFieldValueArr = conditionFieldValueArr.slice(0, -1);
/* console.log(conditionFieldValueArr)
console.log(conditionFieldValue) */
for(let n = 0; n< modelKeyArr.length;n++){
if(modelKeyArr[n]==conditionField){
let count_1 = 0;
let trueValue = model.value[modelKeyArr[n]]
if(trueValue.length>0&&arrayEqual(trueValue,conditionFieldValueArr)){
//,conditionField.,x.
//alert("")
/* console.log(conditionField)
console.log(toshow) */
let flag = false//.,
//conditionField,x++
for(let a = 0;a<hideFieldConditionArr.length;a++){
if(hideFieldConditionArr[a].toShow==conditionField){//conditions.length>1,=1.
for(let b = 0;b<hideFieldConditionArr[a].conditions.length;b++){
for(let c = 0;c<hideFieldConditionArr[a].conditions[b].condition.length;c++){
if(hideFieldConditionArr[a].conditions[b].condition[c]==conditionField){
//,.
//console.log(1)
}
}
}
}
}
if(flag==false){
x++
hideFieldsFromCheckbox.push(toshow)
//console.log(hideFieldArr)
/* for(let i = 0;i<hideFieldsFromCheckbox.length;i++){
hideFieldArr = hideFieldArr.filter((item: string) => item!=hideFieldsFromCheckbox[i])
//emits('refresh')
} */
}
}
}
}
}else{//
//console.log(conditionFieldValue)
for(let n = 0; n< modelKeyArr.length;n++){
if(modelKeyArr[n]==conditionField){
let count_1 = 0;
let trueValue = model.value[modelKeyArr[n]]
//console.log(modelKeyArr[n])
//console.log(trueValue)
if(trueValue==conditionFieldValue){
//,conditionField.,x.
let flag = false//.,
//conditionField,x++
/* for(let a = 0;a<hideFieldConditionArr.length;a++){
if(hideFieldConditionArr[a].toShow==conditionField){//conditions.length>1,=1.
for(let b = 0;b<hideFieldConditionArr[a].conditions.length;b++){
for(let c = 0;c<hideFieldConditionArr[a].conditions[b].condition.length;c++){
if(hideFieldConditionArr[a].conditions[b].condition[c]==conditionField){
//,.
console.log(1)
}
}
}
}
} */
if(flag==false){
x++
}
}
}
}
}
}
if(x>0){
hideFieldArr = hideFieldArr.filter((item: string) => item!=toshow)
}
}
//
for(let i = 0; i< hideFieldArr.length;i++){
//console.log(i+"dsfafdasdfasfsda===="+hideFieldArr[i]+"=====jiuopfdsahokjuhuiofadshuiofadsjbknfdjisahuifhjken wij================"+model.value[hideFieldArr[i]])
if(typeof model.value[hideFieldArr[i]] === "string" || typeof model.value[hideFieldArr[i]] === "number"){
model.value[hideFieldArr[i]] = ""
}else if( model.value[hideFieldArr[i]] instanceof Array){
model.value[hideFieldArr[i]] = []
}
}
//
nowShowingDefaultHideFieldArr = defaultHideFields.filter(a => !hideFieldArr.includes(a))
/* console.log("(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))")
console.log(nowShowingDefaultHideFieldArr) */
/* for(let i = 0;i< nowShowingDefaultHideFieldArr.length; i++){
//conditionfield,x-1,x-1field,hideFieldArr
if()
} */
//console.log("-----"+hideFieldArr)
//
if(formProps.value.type!=5){
props.formData.config.hideField?.push(...hideFieldArr)
}
});
return hideFieldArr
}
// tProp
provide(constControlChange, ({ key, value, data, tProp, type, attribute }: any) => {
@ -239,16 +473,212 @@ provide(constControlChange, ({ key, value, data, tProp, type, attribute }: any)
}
// })
//liwenxuan start
/* console.log("-1-constControlChange-->",props.formData)
console.log("监听表单-2-constControlChange-->",key)
console.log("监听表单-3-constControlChange-->", value)
console.log("监听表单-4-constControlChange-->",data)
console.log("监听表单-5-constControlChange-->",type)
console.log("监听表单-6-constControlChange-->",attribute) */
//
//props.formData.config.hideField.push("nin2yuan4yi4wei4wo3menda3fen1ma101939")
// console.log("-1-constControlChange-->",props.formData)
// console.log("-2-constControlChange-->",key)
// console.log("-3-constControlChange-->", value)
// console.log("-4-constControlChange-->",data)
// console.log("-5-constControlChange-->",type)
// console.log("-6-constControlChange-->",attribute)
//radio,checkbox,select
const radioSelectShowConfigArr = []
const checkboxShowConfigArr = []
//showFieldskey,optionValuevalue,radioselectArr2----
const radioSelectArr2:any[] = []
for(let i = 0;i<props.formData.list.length;i++){
if(props.formData.list[i].type=="radio"||props.formData.list[i].type=="select"||props.formData.list[i].type=="checkbox"){
props.formData.config.hideField = [];
}
//console.log(props.formData.list[i].type)
if(props.formData.list[i].type=="radio"||props.formData.list[i].type=="select"){
radioSelectShowConfigArr.push(props.formData.list[i].control.glxxsz)
console.log("监听表单--constControlChange-->",key, value, data, tProp,type,attribute)
}else if(props.formData.list[i].type=="checkbox"){
checkboxShowConfigArr.push(props.formData.list[i].control.glxxszForCheckBox)
}
}
//
const radioSelectShowConfigArr2 = JSON.parse(JSON.stringify(radioSelectShowConfigArr));
const checkboxShowConfigArr2 = JSON.parse(JSON.stringify(checkboxShowConfigArr));
/* console.log(radioSelectShowConfigArr2)
console.log(checkboxShowConfigArr2) */
if(radioSelectShowConfigArr2.length>0){
for(let i = 0;i<radioSelectShowConfigArr2.length;i++){
if( radioSelectShowConfigArr2[i].length>0){
for(let j = 0;j<radioSelectShowConfigArr2[i].length;j++){
//
const jArr = JSON.parse(JSON.stringify(radioSelectShowConfigArr2[i][j]));
const optionValueJArr = jArr.optionValue
if(jArr.showFields!=undefined&&jArr.showFields.length>0){
for(let n = 0;n<jArr.showFields.length;n++){
let fieldKeyArr = jArr.showFields[n].split(":")
let fieldKeyStr = fieldKeyArr[fieldKeyArr.length-1]
radioSelectArr2.push({
//conditionFieldKey:jArr.conditionField,
//conditionFieldValue:optionValueJArr,
toShowFieldKey:fieldKeyStr,
})
}
}
}
}
}
}
//radioSelectArr2,radioSelectArr2
if(checkboxShowConfigArr2.length>0){
for(let i = 0;i<checkboxShowConfigArr2.length;i++){
//console.log(i)
if(checkboxShowConfigArr2[i].length>0){
for(let j = 0;j<checkboxShowConfigArr2[i].length;j++){
//console.log(j)
//console.log(checkboxShowConfigArr2[i][j].showFields)
if(checkboxShowConfigArr2[i][j].showFields.length>0){
for(let n = 0; n<checkboxShowConfigArr2[i][j].showFields.length;n++){
let fieldKeyArr = checkboxShowConfigArr2[i][j].showFields[n].split(":")
let fieldKeyStr = fieldKeyArr[fieldKeyArr.length-1]
//console.log(fieldKeyStr)
radioSelectArr2.push({
toShowFieldKey:fieldKeyStr,
})
}
}
}
}
}
}
//showFieldskey,optionValuevalue,radioselectArr3 ---
const radioSelectArr3:any[] = []
if(radioSelectShowConfigArr2.length>0){
for(let i = 0;i<radioSelectShowConfigArr2.length;i++){
if( radioSelectShowConfigArr2[i].length>0){
for(let j = 0;j<radioSelectShowConfigArr2[i].length;j++){
//
const jArr = JSON.parse(JSON.stringify(radioSelectShowConfigArr2[i][j]));
const optionValueJArr = jArr.optionValue
if(jArr.showFields!=undefined&&jArr.showFields.length>0){
if(jArr.showFields.length>1){
let arr1 = []
for(let n = 0;n<jArr.showFields.length;n++){
let fieldKeyArr = jArr.showFields[n].split(":")
let fieldKeyStr = fieldKeyArr[fieldKeyArr.length-1]
arr1.push(fieldKeyStr)
}
radioSelectArr3.push({
conditionFieldKey:jArr.conditionField,
conditionFieldValue:optionValueJArr,
toShowFieldKey:arr1,
})
}else{//1
for(let n = 0;n<jArr.showFields.length;n++){
let fieldKeyArr = jArr.showFields[n].split(":")
let fieldKeyStr = fieldKeyArr[fieldKeyArr.length-1]
radioSelectArr3.push({
conditionFieldKey:jArr.conditionField,
conditionFieldValue:optionValueJArr,
toShowFieldKey:[fieldKeyStr],
})
}
}
}
}
}
}
}
//console.log(radioSelectArr3)
//radioSelectArr3
if(checkboxShowConfigArr2.length>0){
for(let i = 0;i<checkboxShowConfigArr2.length;i++){
if( checkboxShowConfigArr2[i].length>0){
for(let j = 0;j<checkboxShowConfigArr2[i].length;j++){
//
const jArr = JSON.parse(JSON.stringify(checkboxShowConfigArr2[i][j]));
const optionValueJArr = jArr.selectedOptions
if(jArr.showFields!=undefined&&jArr.showFields.length>0){
if(jArr.showFields.length>1){
let arr1 = []
for(let n = 0;n<jArr.showFields.length;n++){
let fieldKeyArr = jArr.showFields[n].split(":")
let fieldKeyStr = fieldKeyArr[fieldKeyArr.length-1]
arr1.push(fieldKeyStr)
}
radioSelectArr3.push({
conditionFieldKey:jArr.conditionField,
conditionFieldValue:optionValueJArr,
toShowFieldKey:arr1,
})
}else{//1
for(let n = 0;n<jArr.showFields.length;n++){
let fieldKeyArr = jArr.showFields[n].split(":")
let fieldKeyStr = fieldKeyArr[fieldKeyArr.length-1]
radioSelectArr3.push({
conditionFieldKey:jArr.conditionField,
conditionFieldValue:optionValueJArr,
toShowFieldKey:[fieldKeyStr],
})
}
}
}
}
}
}
}
//console.log(radioSelectArr3)
//使props.formData.config.hideField
let hideFieldArr: any[] = [];
//
for(let i = 0;i< radioSelectArr2.length;i++){
hideFieldArr.push(radioSelectArr2[i].toShowFieldKey)
}
hideFieldArr = Array.from(new Set(hideFieldArr))
const defaultHideFields: any[] = JSON.parse(JSON.stringify(hideFieldArr))
for(let i = 0;i<defaultHideFields.length;i++){
hideFieldArr = recursionToGetFinallyHideFields(hideFieldArr,radioSelectArr3,defaultHideFields)
}
hideFieldArr = recursionToGetFinallyHideFields(hideFieldArr,radioSelectArr3,defaultHideFields)
//props.formData.config?.hideField?.push("nin2yuan4yi4wei4wo3menda3fen1ma101939")
//console.log("--constControlChange-->",key, value, data, tProp,type,attribute)//liwenxuan
if (typeof props.changeKeyVal === 'function') {
props.changeKeyVal(key, value,type,attribute)
@ -275,6 +705,9 @@ provide(constControlChange, ({ key, value, data, tProp, type, attribute }: any)
}
/*
*/
})
const dictForm = computed(() => {
const storage = window.localStorage.getItem('akFormDict')
@ -295,6 +728,10 @@ const formProps = computed(() => {
dict: dictForm.value
}
})
provide(constFormProps, formProps)
// nameformData.list
@ -709,6 +1146,11 @@ watch(
}
)
// ------------------------------------------------
//
const resetFields = () => {
ruleForm.value.resetFields()

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

@ -26,6 +26,7 @@ const props = withDefaults(
data: FormList[]
tableinfo:formTableInfo
numrun?:number
}>(),
{
data: () => {
@ -34,6 +35,7 @@ const props = withDefaults(
}
)
const store = useDesignFormStore() as any //
const formProps = inject(constFormProps, {}) as any
const type = computed(() => { //
@ -221,15 +223,24 @@ const getFormItemStyle = (ele: FormList) => {
}
//
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

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

@ -69,6 +69,7 @@ const control = computed(() => {
// return props.data
})
const options = ref(props.data.options)
//console.log("FormItem*********************************************************"+JSON.stringify(props.data))
const changeEvent = inject(constControlChange, '') as any
const updateModel = (val: any) => {
let controlAttribute = ""
@ -552,7 +553,7 @@ const imgUploadApiUrl = import.meta.env.VITE_APP_BASE_API+"/api/upordown"
<el-radio
:key="index"
:label="transformOption(item.value)"
v-for="(item, index) in options"
v-for="(item, index) in props.data.options"
>
<span :style="getFormItemInputStyle(configStyle,5)">{{ item.label }}</span>
@ -566,7 +567,7 @@ const imgUploadApiUrl = import.meta.env.VITE_APP_BASE_API+"/api/upordown"
:style="getFormItemInputStyle(configStyle,4)"
>
<el-checkbox
v-for="(item, index) in options"
v-for="(item, index) in props.data.options"
:key="index"
:label="transformOption(item.value)"
>
@ -580,7 +581,7 @@ const imgUploadApiUrl = import.meta.env.VITE_APP_BASE_API+"/api/upordown"
:data="data"
:disabled="editDisabled"
v-model="value"
:options="options"
:options="props.data.options"
:remote-method="getAxiosOptions"
:transformOption="transformOption"
/>

4
src/types/components.d.ts

@ -137,10 +137,14 @@ declare module '@vue/runtime-core' {
IEpRefreshLeft: typeof import('~icons/ep/refresh-left')['default']
IEpSearch: typeof import('~icons/ep/search')['default']
IEpSetting: typeof import('~icons/ep/setting')['default']
<<<<<<< HEAD
IEpTop: typeof import('~icons/ep/top')['default']
IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
IEpUser: typeof import('~icons/ep/user')['default']
IEpView: typeof import('~icons/ep/view')['default']
=======
IEpUser: typeof import('~icons/ep/user')['default']
>>>>>>> lwx_v8
LangSelect: typeof import('./../components/LangSelect/index.vue')['default']
LayoutPage: typeof import('./../components/DesignForm/layoutPage/index.vue')['default']
List: typeof import('./../components/DesignForm/public/form/components/list.vue')['default']

44
src/views/sysworkflow/lowcodepage/pageDesignes.vue

@ -77,6 +77,11 @@ const formKeyVal = computed({
}
});
//
provide('formDesignType', state.value.designType)
const vueFileEl = ref()
@ -566,6 +571,7 @@ onMounted(() => {
//
// watch(() =>versionId.value ,(val:string)=>{
// emits('update:formVersion', val)
<<<<<<< HEAD
// })
/**
@ 作者: 秦东
@ -578,6 +584,40 @@ const versionUpdateForm = (val:string) => {
getInitData()
}
=======
// })
//liwenxuan bug: start
const formNameChanged = (param1: any)=>{
for(let i = 0; i < state.value.formData.list.length; i++){
if(state.value.formData.list[i].type=="radio"||state.value.formData.list[i].type=="select"||state.value.formData.list[i].type=="checkbox"){
if(state.value.formData.list[i].control.glxxsz!=undefined&&state.value.formData.list[i].control.glxxsz.length>0){
state.value.formData.list[i].control.glxxsz = []
state.value.formData.list[i].options.push({
label: '',
value: ''
})
state.value.formData.list[i].options.pop();
}
if(state.value.formData.list[i].control.glxxszForCheckBox!=undefined&&state.value.formData.list[i].control.glxxszForCheckBox.length>0){
state.value.formData.list[i].control.glxxszForCheckBox = []
}
}
}
ElMessage({
message: '因字段标识改变,本表单的所有单选、多选、下拉的关联选项设置已重置,请重新设置。',
type: 'warning',
})
}
//liwenxuan bug: end
let index = ref(0)
function refreshFunc(){
index.value = index.value+1
}
>>>>>>> lwx_v8
</script>
<template>
<div class="design_container">
@ -615,6 +655,7 @@ const versionUpdateForm = (val:string) => {
:form-list="state.formData.list"
:form-info="state.formData"
@open-dialog="openAceEditDrawer"
@form-name-change="formNameChanged"
/>
<ace-drawer
v-model="drawer.visible"
@ -635,9 +676,12 @@ const versionUpdateForm = (val:string) => {
<form-design
v-if="state.previewVisible"
ref="previewForm"
:key="index"
:form-data="state.formDataPreview"
:dict="state.formDict"
:type="1"
@refresh="refreshFunc"
/>
<template #footer>
<div class="dialog-footer">

Loading…
Cancel
Save