sql715 il y a 2 mois
Parent
commit
01963c08c3

+ 28 - 4
zkqy-ui/src/views/formCreate/components/FcDesigner.vue

@@ -217,6 +217,7 @@
                                 @change="formOptChange" v-model="form.api">
                                 <template #title="scope">
                                     <template v-if="scope.rule.warning">
+                                        
                                         <Warning :tooltip="scope.rule.warning">
                                             {{ scope.rule.title }}
                                         </Warning>
@@ -234,6 +235,7 @@
                             </div>
                             <template
                                 v-if="activeRule || (customForm?.config && (customForm?.config?.name || customForm?.config?.label))">
+          
                                 <p class="_fc-r-title">{{ t('designer.type') }}</p>
                                 <TypeSelect></TypeSelect>
                                 <template v-if="(activeRule && activeRule?.name && config.showComponentName !== false)">
@@ -252,7 +254,8 @@
                                     </el-input>
                                 </template>
                             </template>
-                            <div class="_fc-r-config" :style="{ 'grid-template-areas': configFormOrderStyle }">
+                           
+                            <div  :class="['_fc-r-config', activeRule?._menu?.name]" :style="{ 'grid-template-areas': configFormOrderStyle }">
                                 <div style="grid-area: base;">
                                     <el-divider v-if="baseForm.isShow">{{ t('designer.rule') }}</el-divider>
                                     <DragForm v-show="baseForm.isShow" v-model="baseForm.api" :rule="baseForm.rule"
@@ -269,7 +272,7 @@
                                         </template>
                                     </DragForm>
                                 </div>
-                                <div style="grid-area: props;">
+                                <div style="grid-area: props;" :class="[activeRule?._menu?.name +'_props']">
                                     <el-divider v-if="propsForm.isShow">{{ t('designer.props') }} <PropsInput
                                             v-if="activeRule && getConfig('showCustomProps', true)"></PropsInput>
                                         </el-divider>
@@ -1034,10 +1037,9 @@ export default defineComponent({
             },
             getSaveDate(zkqyDataCr,dataSource,url) {
                 let zkqyData;
-                console.log('zkqyDataCr',zkqyDataCr)
                 if(zkqyDataCr){
                     zkqyData = zkqyDataCr
-                }else {
+                }else{
                     zkqyData = "[]"
                 }
                 console.log('zkqyData',zkqyData)
@@ -2344,4 +2346,26 @@ export default defineComponent({
 .xg_fc-l-menu {
     width: 40px !important;
 }
+/* 选择最后两个 .zkqyTable_props 元素 */
+>>> .zkqyTable .zkqyTable_props form .fc-form-row .el-col:nth-last-child(2),
+>>> .zkqyTable .zkqyTable_props form .fc-form-row .el-col:nth-last-child(1) {
+    /* background-color: lightblue !important; */
+    display: none
+}
+>>> .tree .tree_props form .fc-form-row .el-col:nth-child(1),
+>>> .tree .tree_props form .fc-form-row .el-col:nth-child(2),
+>>> .elTransfer .elTransfer_props form .fc-form-row .el-col:nth-child(1),
+>>> .elTransfer .elTransfer_props form .fc-form-row .el-col:nth-child(2),
+>>> .cascader .cascader_props form .fc-form-row .el-col:nth-child(1),
+>>> .cascader .cascader_props form .fc-form-row .el-col:nth-child(2),
+>>> .select .select_props form .fc-form-row .el-col:nth-child(1),
+>>> .select .select_props form .fc-form-row .el-col:nth-child(2),
+>>> .checkbox .checkbox_props form .fc-form-row .el-col:nth-child(1),
+>>> .checkbox .checkbox_props form .fc-form-row .el-col:nth-child(2),
+>>> .radio .radio_props form .fc-form-row .el-col:nth-child(1),
+>>> .radio .radio_props form .fc-form-row .el-col:nth-child(2)
+{
+    display: none
+}
+
 </style>

+ 83 - 41
zkqy-ui/src/views/formCreate/layout/home/formCreateMange.vue

@@ -243,6 +243,7 @@ export default {
         fieldReadonly: false,  //配置field是否可以编辑,字段id,zh-cn.js的
         showSaveBtn: true,
         appendConfigData: ['formCreateTableName', 'formCreateZkqyYMLX', 'formCreateZkqyAN', 'formCreateShowValue', 'addZkqyTableRow', 'updateZkqyTableRow'],
+        showControl: false, // 隐藏组件的联动数据配置
         formRule: {
           prepend: true,
           rule() {
@@ -306,8 +307,9 @@ export default {
             }
           },
         },
-        hiddenItem: ['fcEditor'],
-        hiddenMenu: ['subform', 'layout']
+        hiddenItem: ['fcEditor','elButton'],
+        hiddenMenu: ['subform', 'layout'],
+
       },
       handle: [
         {
@@ -346,10 +348,6 @@ export default {
     // 可用的主表展示列(过滤已选的)
     availableMainColumns() {
       const selectedColumns = this.mainDisplayColumns.map(c => c.selectedColumn).filter(Boolean);
-      // console.log('==========this.mainTableColumns',this.mainTableColumns)
-      // return this.mainTableColumns.filter(col =>
-      //   !selectedColumns.includes(col.value)
-      // );
       return this.mainTableColumns
     },
 
@@ -506,38 +504,90 @@ export default {
         // action: 'http://192.168.10.103:8088/system/mobilePageDesignData/normal/updateData',
         // 构建完整的onSubmit函数
         pageOptions.onSubmit = `[[FORM-CREATE-PREFIX-function onSubmit(formData, api) {
-          const dataMap  = {};
-          api.rule.forEach(item => {
-            if (item.searchValue && item.value !== undefined) {
-              dataMap[item.searchValue] = item.value;
-            }else{
-              console.log('item', item)
-            }
-          });
-          let pageId = localStorage.getItem('sharedPageId');
-          let data = {pageId:pageId,dataMap:dataMap}
-          console.log(data)
-            api.fetch({
-              action: "${url}api/mobilePageDesignData/normal/insertData",
-              method: 'post',
-              data: data,
-              dataType: 'json',
-              headers: {
-                dbname:"${dataSource}",
-            },
-          }).then(res=>{
-          });
-          }-FORM-CREATE-SUFFIX]]`;
+         const dataMap  = {};
+         api.rule.forEach(item => {
+           if (item.searchValue && item.value !== undefined) {
+             if(item.type == 'upload'){
+              const uploadRecords = JSON.parse(sessionStorage.getItem('upload_row')) || [];
+              const urlToFileNameMap = {};
+              uploadRecords.forEach(record => {
+               if (record.url && record.fileName) {
+                  urlToFileNameMap[record.url] = record.fileName;
+               }
+              });
+              if (Array.isArray(item.value)) {
+               item.value = item.value.map(url => urlToFileNameMap[url] || url);
+              } else if (item.value && urlToFileNameMap[item.value]) {
+               item.value = [urlToFileNameMap[item.value]];
+                }
+             }
+             dataMap[item.searchValue] = item.value;
+           }else{
+             console.log('item1', item)
+           }
+         });
+         let pageId = localStorage.getItem('sharedPageId');
+         let data = {pageId:pageId,dataMap:dataMap}
+         console.log(data)
+           api.fetch({
+             action: "${url}api/mobilePageDesignData/normal/insertData",
+             method: 'post',
+             data: data,
+             dataType: 'json',
+             headers: {
+             dbname:"${dataSource}",
+           },
+         }).then(res=>{
+         });
+         }-FORM-CREATE-SUFFIX]]`;
       } else if (formCreateZkqyYMLX === 'update') {
         // 构建完整的onSubmit函数
         pageOptions.onSubmit = `[[FORM-CREATE-PREFIX-function onSubmit(formData, api) {
           const dataMap  = {};
+          const baseUrl = '${url}'.endsWith('/') ?'${url}'.slice(0, -1) : '${url}'; 
           api.rule.forEach(item => {
             if (item.searchValue && item.value !== undefined) {
               dataMap[item.searchValue] = item.value;
             }
           });
-          
+           api.rule.forEach(item => {
+           if (item.searchValue && item.value !== undefined) {
+             if(item.type == 'upload'){
+              const uploadRecords = JSON.parse(sessionStorage.getItem('upload_row')) || [];
+              const urlToFileNameMap = {};
+              uploadRecords.forEach(record => {
+               if (record.url && record.fileName) {
+                  urlToFileNameMap[record.url] = record.fileName;
+               }
+              });
+              if (Array.isArray(item.value)) {
+               item.value = item.value.map(url => urlToFileNameMap[url] || url);
+              } else if (item.value && urlToFileNameMap[item.value]) {
+               item.value = [urlToFileNameMap[item.value]];
+                }
+                
+             console.log('--item.value-',item.value)
+             let newValue = item.value;
+        if (Array.isArray(newValue)) {
+          newValue = newValue.map(url => {
+            if (typeof url === 'string') {
+              return url.startsWith(baseUrl) ? url.slice(baseUrl.length) : url;
+            }
+            return url;
+          });
+        } else if (typeof newValue === 'string') {
+          newValue = newValue.startsWith(baseUrl) ? newValue.slice(baseUrl.length) : newValue;
+        }
+
+        // 更新 item.value
+        item.value = newValue;
+
+             }
+             dataMap[item.searchValue] = item.value;
+           }else{
+             console.log('item1', item)
+           }
+         });
           let pageId = localStorage.getItem('sharedPageId');
           let data = {pageId:pageId,dataMap:dataMap}
 
@@ -554,7 +604,6 @@ export default {
           });
           }-FORM-CREATE-SUFFIX]]`;
       }
-
       this.$refs.designer.setOption(pageOptions);
     },
     // 保存调用的方法
@@ -562,7 +611,6 @@ export default {
       let dataSource = sessionStorage.getItem("dataSource");
       let optionsJP = JSON.parse(options)
       let ruleJP = JSON.parse(rule)
-      // console.log(ruleJP, optionsJP) // 表单规则和表单配置option
       let pageJson = ''//组件生成规则, 页面json数据
       let pageOptions = ''// 表单配置规则, 页面options数据
       let pageLink = ''// 预览链接
@@ -621,8 +669,6 @@ export default {
             /Vue\.use\(ELEMENT\);\s*Vue\.use\(formCreate\);\s*/g,
             ""
           );
-          // let columns = this.$store.state.formCreate.labelData || []
-          // console.log(' this.zkqyTableColumns', this.zkqyTableColumns)
           let columns = this.zkqyTableColumns.map(item => ({
             prop: item.searchValue,
             label: item.columnName
@@ -641,26 +687,23 @@ export default {
           this.$refs.designer.setRule(pageJson)
           let x = this.$refs.designer.getRule()
           if(this.multipleTables.length>0){
-            console.log('[this.multipleTables]',this.multipleTables)
             let multipleTables = this.multipleTables
             let url = process.env.VUE_APP_BASE_API3
           let { htmlDataMb } = this.$refs.designer.getSaveDate(JSON.stringify(multipleTables),dataSource,url)
           htmlDataMbZkqyData = htmlDataMb
-            
-
           }else{
           let { htmlDataMb } = this.$refs.designer.getSaveDate()
           htmlDataMbZkqyData = htmlDataMb
-
           }
           htmlData = htmlDataMbZkqyData
         }
         console.log('========encodeURIComponent前===================', htmlData)
         htmlData = encodeURIComponent(htmlData); // 关键编码步骤
         name = optionsJP.form.formName
+        console.log('JSON.stringify(pageJson)------------------',formCreate.toJson(pageJson))
         let data = {
-          pageJson: JSON.stringify(pageJson),
-          pageOptions: JSON.stringify(pageOptions),
+          pageJson: formCreate.toJson(pageJson),
+          pageOptions: formCreate.toJson(pageOptions),
           pageLink,
           componentData,
           htmlData,
@@ -877,7 +920,6 @@ export default {
           ],
           true,
         )
-
       });
     },
     optionData(componentType) {
@@ -929,7 +971,7 @@ export default {
       }
     },
     active(e, gLSJB) {
-      // console.log('e---------',e,gLSJB)
+      console.log('e---------',e,gLSJB)
       if (gLSJB) {
         let data = {
           databaseName: this.databaseName,

+ 0 - 4
zkqy-ui/src/views/formCreate/layout/home/templateJs/zkqyTable.js

@@ -226,15 +226,11 @@ var zkqyTable = {
             await this.fetchGet(endpoint , params,(data) => {
                 if (data.code === 200) {
                         const decodedHtml = decodeURIComponent(data.data.htmlData);
-                
-                        // 创建全屏 iframe
                         const iframe = document.createElement('iframe');
                         iframe.srcdoc = decodedHtml;
                         iframe.style.width = '100%';
                         iframe.style.height = '100vh';
                         iframe.style.border = 'none';
-                        
-                        // 清空页面并插入 iframe
                         document.body.innerHTML = '';
                         document.body.appendChild(iframe);
                         // 将 pageId 存储到 localStorage

+ 23 - 14
zkqy-ui/src/views/formCreate/utils/index.js

@@ -407,8 +407,7 @@ export default {
 }
 
 export function htmlTemplate(json, options, zkqyData,dataSource,url) {
-    console.log('[htmlTemplate]',zkqyData)
-
+// console.log(zkqyData)
     return `<html lang="zh">
     <head>
         <meta charset="UTF-8">
@@ -437,11 +436,13 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
                         formData: {},
                         api: null,
                         zkqyData:${zkqyData},
+                        zkqyUpload:[],
                     };
                 },
                 methods: {
                     onSubmit(formData){
                         console.log('submit', formData);
+                        
                     },
                     async zkqyDataApi(data,type,id){
                         let zkqyData = this.zkqyData;
@@ -477,27 +478,21 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
                                 throw new Error('HTTP error! status:response.status');
                             }
                             const result = await response.json();
-                            // console.log('this.rule:', this.rule);
-                            console.log(type,id,result.data)
                             const targetRule = this.rule.find(item => item._fc_id === id);
-                            // console.log('[targetRule]',targetRule)
                               if (type === 'tree') {
-                                 console.log('[树形--targetRule]',targetRule?.props?.data)
                                  this.$set(targetRule?.props, 'data', result.data);
                               }
                               else if(type === 'cascader'){
-                                console.log('[ 级联选择器,--targetRule]',targetRule?.props?.options)
                                 this.$set(targetRule.props, 'options', result.data);
 
                               }else if(type === 'elTransfer'){
-                                console.log('[穿梭框--targetRule]',targetRule?.props?.data)
                                 this.$set(targetRule.props, 'data', result.data);
                               }else {
-                                console.log('[其他--targetRule]',targetRule?.options)
                                 this.$set(targetRule, 'options', result.data);
                               }
-                              this.rule =formCreate.parseJson(JSON.stringify([...this.rule])); // 触发重新渲染
-                            return result;
+                              this.rule =formCreate.parseJson(formCreate.toJson([...this.rule])); // 触发重新渲染
+                          
+                              return result;
                             
                         } catch (error) {
                             console.error('type接口请求失败:', error);
@@ -528,15 +523,29 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
                       },
                 },
                 mounted() {
+                    this.rule.forEach(ruleItem => {
+                        if(ruleItem.type=="upload"){
+                          console.log('ruleItem',ruleItem)
+                          console.log('this.rule ',this.rule )
+                          if(ruleItem?.value.length>0){
+                            const processedUrl = '${url}'.endsWith('/') ?'${url}'.slice(0, -1) : '${url}'; // 如果 url 最后一个字符是斜杠,则去掉它
+                            console.log('processedUrl',processedUrl)
+                            ruleItem.value = ruleItem.value.map(
+                                item => processedUrl+item
+                              );
+                          }
+                          console.log(' ruleItem.value ', ruleItem.value  )
+
+                        //   this.rule =formCreate.parseJson(formCreate.toJson([...this.rule])); // 触发重新渲染
+                          ruleItem.props.onSuccess="[[FORM-CREATE-PREFIX-function onSuccess(res, file){const key='upload_row';const existingData=sessionStorage.getItem(key);let fileList=existingData?JSON.parse(existingData):[];if(!Array.isArray(fileList)){fileList=[];}const newItem={fileName: file.response.fileName, url: file.url};fileList.push(newItem);sessionStorage.setItem(key,JSON.stringify(fileList));}-FORM-CREATE-SUFFIX]]"
+                        }
+                      })
                     let zkqyData = this.zkqyData
                     if(zkqyData && zkqyData.length>0){
                         console.log('[this.rule]',this.rule)
-                       // 遍历rule数组
                         this.rule.forEach(ruleItem => {
-                        // 在zkqyData中查找匹配的_fc_id
                         const matchedData = zkqyData.find(dataItem => dataItem._fc_id === ruleItem._fc_id);
                         if (matchedData) {
-                            console.log("找到匹配的规则", matchedData);
                             if (matchedData?.type !== 'cascader' && matchedData?.type !== 'tree') {
                                 resultObj = {
                                     tableName: matchedData?.parentNode?.tableName,

+ 127 - 10
zkqy-ui/ss.html

@@ -68,9 +68,9 @@ var zkqyTable = {
     `,
     data() {
         return {
-            zkqyTablePageJson:[{"type":"zkqyTable","field":"Fic7m9vb08gnbdc","title":"表格","$required":false,"props":{"addZkqyTableRow":109,"updateZkqyTableRow":108,"pageId":127},"columns":[{"tableName":"stu","tableType":"primary","columnName":"主键","showValue":"id","searchValue":"stu@id"},{"tableName":"stu","tableType":"primary","columnName":"名称","showValue":"name","searchValue":"stu@name"},{"tableName":"cls","tableType":"sub","primaryKey":"cls_id","subKey":"id","columnName":"课程名","showValue":"name","searchValue":"cls@name"}],"_fc_id":"id_Fimrm9vb08gnbec","name":"ref_Ftedm9vb08gnbfc","display":true,"hidden":false,"_fc_drag_tag":"zkqyTable"}],
+            zkqyTablePageJson:[{"type":"zkqyTable","field":"Fcgdma2cofgiazc","title":"表格","$required":false,"props":{"addZkqyTableRow":144,"updateZkqyTableRow":145,"pageId":146},"columns":[{"tableName":"stu","tableType":"primary","columnName":"主键","showValue":"id","searchValue":"stu@id"},{"tableName":"stu","tableType":"primary","columnName":"名称","showValue":"name","searchValue":"stu@name"},{"tableName":"stu","tableType":"primary","columnName":"老师id","showValue":"teacher_id","searchValue":"stu@teacher_id"},{"tableName":"stu","tableType":"primary","columnName":"习惯集合","showValue":"habbit_collection","searchValue":"stu@habbit_collection"},{"tableName":"stu","tableType":"primary","columnName":"树id","showValue":"tree_id","searchValue":"stu@tree_id"},{"tableName":"stu","tableType":"primary","columnName":"性别","showValue":"sex","searchValue":"stu@sex"},{"tableName":"stu","tableType":"primary","columnName":"树id2","showValue":"tree_id_two","searchValue":"stu@tree_id_two"},{"tableName":"stu","tableType":"primary","columnName":"穿梭框id集合","showValue":"el_transfer_id","searchValue":"stu@el_transfer_id"},{"tableName":"cls","tableType":"sub","primaryKey":"cls_id","subKey":"id","columnName":"课程名","showValue":"name","searchValue":"cls@name"}],"_fc_id":"id_Fwqsma2cofgib0c","name":"ref_Fk8ema2cofgib1c","display":true,"hidden":false,"_fc_drag_tag":"zkqyTable"}],
             tableData: [],
-            columns: [{"prop":"stu@id","label":"主键"},{"prop":"stu@name","label":"名称"},{"prop":"cls@name","label":"课程名"}],
+            columns: [{"prop":"stu@id","label":"主键"},{"prop":"stu@name","label":"名称"},{"prop":"stu@teacher_id","label":"老师id"},{"prop":"stu@habbit_collection","label":"习惯集合"},{"prop":"stu@tree_id","label":"树id"},{"prop":"stu@sex","label":"性别"},{"prop":"stu@tree_id_two","label":"树id2"},{"prop":"stu@el_transfer_id","label":"穿梭框id集合"},{"prop":"cls@name","label":"课程名"}],
             radio: '',
             policyData: {},
             currentPage4: 1,
@@ -242,19 +242,15 @@ var zkqyTable = {
             await this.fetchGet(endpoint , params,(data) => {
                 if (data.code === 200) {
                         const decodedHtml = decodeURIComponent(data.data.htmlData);
-                
-                        // 创建全屏 iframe
                         const iframe = document.createElement('iframe');
                         iframe.srcdoc = decodedHtml;
                         iframe.style.width = '100%';
                         iframe.style.height = '100vh';
                         iframe.style.border = 'none';
-                        
-                        // 清空页面并插入 iframe
                         document.body.innerHTML = '';
                         document.body.appendChild(iframe);
                         // 将 pageId 存储到 localStorage
-                        localStorage.setItem('sharedPageId', pageId);   
+                        localStorage.setItem('sharedPageId', this.pageId);   
                     }
             });
         },
@@ -308,17 +304,138 @@ new Vue({
                 el: '#app',
                 data() {
                     return {
-                        rule: formCreate.parseJson('[{"type":"zkqyTable","field":"Fic7m9vb08gnbdc","title":"表格","$required":false,"props":{"addZkqyTableRow":109,"updateZkqyTableRow":108,"pageId":127},"columns":[{"tableName":"stu","tableType":"primary","columnName":"主键","showValue":"id","searchValue":"stu@id"},{"tableName":"stu","tableType":"primary","columnName":"名称","showValue":"name","searchValue":"stu@name"},{"tableName":"cls","tableType":"sub","primaryKey":"cls_id","subKey":"id","columnName":"课程名","showValue":"name","searchValue":"cls@name"}],"_fc_id":"id_Fimrm9vb08gnbec","name":"ref_Ftedm9vb08gnbfc","display":true,"hidden":false,"_fc_drag_tag":"zkqyTable"}]'),
-                        options: formCreate.parseJson('{"form":{"inline":false,"hideRequiredAsterisk":false,"showMessage":true,"inlineMessage":false,"labelPosition":"right","labelWidth":"125px","validateOnRuleChange":false,"size":"small","formName":"aaaa"},"resetBtn":{"show":false,"innerText":"重置"},"submitBtn":{"show":false,"innerText":"提交"}}'),
+                        rule: formCreate.parseJson('[{"type":"zkqyTable","field":"Fcgdma2cofgiazc","title":"表格","$required":false,"props":{"addZkqyTableRow":144,"updateZkqyTableRow":145,"pageId":146},"columns":[{"tableName":"stu","tableType":"primary","columnName":"主键","showValue":"id","searchValue":"stu@id"},{"tableName":"stu","tableType":"primary","columnName":"名称","showValue":"name","searchValue":"stu@name"},{"tableName":"stu","tableType":"primary","columnName":"老师id","showValue":"teacher_id","searchValue":"stu@teacher_id"},{"tableName":"stu","tableType":"primary","columnName":"习惯集合","showValue":"habbit_collection","searchValue":"stu@habbit_collection"},{"tableName":"stu","tableType":"primary","columnName":"树id","showValue":"tree_id","searchValue":"stu@tree_id"},{"tableName":"stu","tableType":"primary","columnName":"性别","showValue":"sex","searchValue":"stu@sex"},{"tableName":"stu","tableType":"primary","columnName":"树id2","showValue":"tree_id_two","searchValue":"stu@tree_id_two"},{"tableName":"stu","tableType":"primary","columnName":"穿梭框id集合","showValue":"el_transfer_id","searchValue":"stu@el_transfer_id"},{"tableName":"cls","tableType":"sub","primaryKey":"cls_id","subKey":"id","columnName":"课程名","showValue":"name","searchValue":"cls@name"}],"_fc_id":"id_Fwqsma2cofgib0c","name":"ref_Fk8ema2cofgib1c","display":true,"hidden":false,"_fc_drag_tag":"zkqyTable"}]'),
+                        options: formCreate.parseJson('{"form":{"inline":false,"hideRequiredAsterisk":false,"showMessage":true,"inlineMessage":false,"labelPosition":"right","labelWidth":"125px","validateOnRuleChange":false,"size":"small","formName":"表格1"},"resetBtn":{"show":false,"innerText":"重置"},"submitBtn":{"show":true,"innerText":"提交"}}'),
                         formData: {},
                         api: null,
+                        zkqyData:[],
+                        zkqyUpload:[],
                     };
                 },
                 methods: {
                     onSubmit(formData){
                         console.log('submit', formData);
+                        
+                    },
+                    async zkqyDataApi(data,type,id){
+                        let zkqyData = this.zkqyData;
+                        if (!zkqyData || zkqyData.length === 0) return;
+                        const headers = {
+                            'Accept': 'application/json',
+                            'dbname': 'undefined',
+                            'Content-Type': 'application/json'
+                        };
+                        try {
+                            let response;
+                            if (type === 'cascader' || type === 'tree') {
+                                // 调用树形接口 POST
+                                const apiUrl = 'undefinedapi/mobilePageDesignData/tree';
+                                console.log('调用树形接口:', apiUrl);
+                                response = await fetch(apiUrl, {
+                                    method: 'POST',
+                                    headers,
+                                    body: JSON.stringify(data)
+                                });
+                            } else {
+                                // 调用下拉框接口 GET
+                                let x = new URLSearchParams(data).toString()
+                                const apiUrl = 'undefinedapi/mobilePageDesignData/dropdown?'+x;
+                                console.log('调用下拉框接口:', apiUrl);
+                                response = await fetch(apiUrl, {
+                                    method: 'GET',
+                                    headers
+                                });
+                            }
+                
+                            if (!response.ok) {
+                                throw new Error('HTTP error! status:response.status');
+                            }
+                            const result = await response.json();
+                            const targetRule = this.rule.find(item => item._fc_id === id);
+                              if (type === 'tree') {
+                                 this.$set(targetRule?.props, 'data', result.data);
+                              }
+                              else if(type === 'cascader'){
+                                this.$set(targetRule.props, 'options', result.data);
+
+                              }else if(type === 'elTransfer'){
+                                this.$set(targetRule.props, 'data', result.data);
+                              }else {
+                                this.$set(targetRule, 'options', result.data);
+                              }
+                              this.rule =formCreate.parseJson(formCreate.toJson([...this.rule])); // 触发重新渲染
+                          
+                              return result;
+                            
+                        } catch (error) {
+                            console.error('type接口请求失败:', error);
+                            throw error;
+                        }
+                    },
+                    transformTreeToSingleObject(node) {
+                        if (!node) return node;
+                        
+                        // 创建新对象,避免修改原对象
+                        const newNode = {...node};
+                        
+                        // 处理 childrenTree
+                        if (Array.isArray(newNode.childrenTree) ){
+                          if (newNode.childrenTree.length > 0) {
+                            // 取第一个元素作为对象
+                            newNode.childrenTree = this.transformTreeToSingleObject(newNode.childrenTree[0]);
+                          } else {
+                            // 空数组转为 null 或 undefined
+                            newNode.childrenTree = null;
+                          }
+                        } else if (newNode.childrenTree) {
+                          // 如果不是数组但存在 childrenTree,递归处理
+                          newNode.childrenTree = this.transformTreeToSingleObject(newNode.childrenTree);
+                        }
+                        
+                        return newNode;
+                      },
+                },
+                mounted() {
+                    this.rule.forEach(ruleItem => {
+                        if(ruleItem.type=="upload"){
+                          console.log('ruleItem',ruleItem)
+                          console.log('this.rule ',this.rule )
+                          if(ruleItem?.value.length>0){
+                            const processedUrl = 'undefined'.endsWith('/') ?'undefined'.slice(0, -1) : 'undefined'; // 如果 url 最后一个字符是斜杠,则去掉它
+                            console.log('processedUrl',processedUrl)
+                            ruleItem.value = ruleItem.value.map(
+                                item => processedUrl+item
+                              );
+                          }
+                          console.log(' ruleItem.value ', ruleItem.value  )
+
+                        //   this.rule =formCreate.parseJson(formCreate.toJson([...this.rule])); // 触发重新渲染
+                          ruleItem.props.onSuccess="[[FORM-CREATE-PREFIX-function onSuccess(res, file){const key='upload_row';const existingData=sessionStorage.getItem(key);let fileList=existingData?JSON.parse(existingData):[];if(!Array.isArray(fileList)){fileList=[];}const newItem={fileName: file.response.fileName, url: file.url};fileList.push(newItem);sessionStorage.setItem(key,JSON.stringify(fileList));}-FORM-CREATE-SUFFIX]]"
+                        }
+                      })
+                    let zkqyData = this.zkqyData
+                    if(zkqyData && zkqyData.length>0){
+                        console.log('[this.rule]',this.rule)
+                        this.rule.forEach(ruleItem => {
+                        const matchedData = zkqyData.find(dataItem => dataItem._fc_id === ruleItem._fc_id);
+                        if (matchedData) {
+                            if (matchedData?.type !== 'cascader' && matchedData?.type !== 'tree') {
+                                resultObj = {
+                                    tableName: matchedData?.parentNode?.tableName,
+                                    valueName: matchedData?.parentNode?.primaryIdField,
+                                    labelName: matchedData?.parentNode?.showValue,
+                                    type: matchedData?.type
+                                };
+                                this.zkqyDataApi(resultObj,matchedData?.type,matchedData._fc_id)
+                            } 
+                            else {
+                                resultObj = this.transformTreeToSingleObject(matchedData.parentNode);
+                                resultObj.componentType = matchedData?.type
+                                this.zkqyDataApi(resultObj,matchedData?.type,matchedData._fc_id)
+                            }
                     }
-                }
+                })
+            }},
             })
         </script>
     </body>

+ 2 - 14
zkqy-ui/vue.config.js

@@ -43,8 +43,8 @@ module.exports = {
         // target: `http://192.168.110.52:8080`,
         // target: `http://192.168.110.76:8080`,
         // target: `http://175.27.169.173:8080`,
-        // target: `http://192.168.10.6:8080`,
         target: `http://192.168.10.103:8080`,
+
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''
@@ -52,7 +52,6 @@ module.exports = {
       },
       '/DB': {
         // target: `http://192.168.110.59:8099`,
-        // target: `http://192.168.10.6:8099`,
         target: `http://192.168.10.103:8099`,
         changeOrigin: true,
         pathRewrite: {
@@ -62,9 +61,7 @@ module.exports = {
       '/FORM': {
         // target: `http://192.168.110.59:8088`,
         // target: `http://175.27.169.173:8088`,
-        // target: `http://192.168.10.6:8088`,
         target: `http://192.168.10.103:8088`,
-
         changeOrigin: true,
         pathRewrite: {
           ['^' + '/FORM']: ''
@@ -118,19 +115,10 @@ module.exports = {
       }),
       new MonacoWebpackPlugin()
     ],
-    module: {
-      rules: [
-        {
-          test: /\.js$/,
-          loader: "babel-loader",
-          exclude: /node_modules\/(?!@form-create)/, // 仅排除非 @form-create 的 node_modules
-        },
-      ],
-    },
     // devtool: isDev ? "source-map" : false
   },
   chainWebpack(config) {
-    //config.plugins.delete('preload') // TODO: need test
+    config.plugins.delete('preload') // TODO: need test
     config.plugins.delete('prefetch') // TODO: need test
 
     // set svg-sprite-loader