sql715 1 日 前
コミット
ed2169a042

+ 10 - 3
zkqy-ui/src/views/formCreate/utils/index.js

@@ -412,6 +412,8 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
         <meta charset="UTF-8">
         <!-- 添加移动端视口设置 -->
         <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <meta name="apple-mobile-web-app-status-bar-style" content="default">
         <!-- Import style -->
         <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"/>
         <!-- Import Vue 2.7 -->
@@ -420,6 +422,9 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
         <script src="https://unpkg.com/element-ui/lib/index.js"></script>
         <!-- Import formCreate -->
         <script src="https://unpkg.com/@form-create/element-ui@super"><\/script>
+        <!-- 添加微信 JSSDK -->
+        <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
+        <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
         <style>
             html, body {
                 margin: 0;
@@ -469,8 +474,11 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
         </style>
     </head>
     <body>
-        <div id="app">
-            <form-create :rule="rule" :option="options" v-model:value="formData" v-model="api" @submit="onSubmit"></form-create>
+        <div>
+            <div id="app">
+                <form-create :rule="rule" :option="options" v-model:value="formData" v-model="api" @submit="onSubmit"></form-create>
+            </div>
+            <iframe id="my-iframe" width="100%" height="100%" style="display: none; border: none; position: fixed; top: 0; left: 0; z-index: 9999; background: #fff;"></iframe>
         </div>
         <script>
             Vue.use(ELEMENT);
@@ -490,7 +498,6 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
                 methods: {
                     onSubmit(formData){
                         console.log('submit', formData);
-                        
                     },
                     async zkqyDataApi(data,type,id){
                         let zkqyData = this.zkqyData;

+ 7 - 22
zkqy-ui/src/views/tableMange/index.vue

@@ -1179,12 +1179,6 @@ export default {
 
         if (temp.isShow) {
           let tempObj = {};
-          // if (temp.isChildren) {
-          //   tempObj[temp.tableName + "_" + temp.fieldName] =
-          //     temp.fieldDescription;
-          // } else {
-          //   tempObj[temp.fieldName] = temp.fieldDescription;
-          // }
           tempObj[tempFieldName] = temp.fieldDescription;
           columns.push(tempObj);
         }
@@ -1195,15 +1189,6 @@ export default {
         if (temp.isExport) {
           tableExportField[exportFieldName] = temp.fieldDescription;
         }
-        // 递归
-        // if (temp.relationFieldList) {
-        //   this.getCol(
-        //     temp.relationFieldList,
-        //     columns,
-        //     searchFieldList,
-        //     tableExportField
-        //   );
-        // }
       }
     },
     // 更新路由
@@ -1531,7 +1516,7 @@ export default {
             if (res.code == 200) {
               // 新增默认按钮数据
               btnTemplate.tableKey = data.tableKey;
-              btnTemplate.menuID = result.data;
+              btnTemplate.menuID = result?.data;
               let btnRes = await insertByDefaultBtn(btnTemplate);
               if (btnRes.code == 200) {
                 // 发送权限请求
@@ -1601,12 +1586,12 @@ export default {
     async initTableData(tId) {
       let res = await getTableInfo(tId);
       if (res.code == 200) {
-        this.dragTableStatisticList = res.data.dragTableStatisticList;
-        this.dragTableStyleList = res.data.dragTableStyleList;
-        let echoData = JSON.parse(res.data.echoData);
-        this.tableName = echoData.tableName;
-        this.tableFieldList = echoData.tableFieldData;
-        this.filterDataEcho = echoData.filterData;
+        this.dragTableStatisticList = res?.data?.dragTableStatisticList;
+        this.dragTableStyleList = res?.data?.dragTableStyleList;
+        let echoData = JSON.parse(res?.data?.echoData);
+        this.tableName = echoData?.tableName;
+        this.tableFieldList = echoData?.tableFieldData;
+        this.filterDataEcho = echoData?.filterData;
         let {
           isShowList,
           timeFormate,

+ 0 - 442
zkqy-ui/ss.html

@@ -1,442 +0,0 @@
-<html lang="zh">
-    <head>
-        <meta charset="UTF-8">
-        <!-- Import style -->
-        <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"/>
-        <!-- Import Vue 2.7 -->
-        <script src="https://unpkg.com/vue@2"></script>
-        <!-- Import element-ui -->
-        <script src="https://unpkg.com/element-ui/lib/index.js"></script>
-        <!-- Import formCreate -->
-        <script src="https://unpkg.com/@form-create/element-ui@super"></script>
-    </head>
-    <body>
-        <div id="app">
-            <form-create :rule="rule" :option="options" v-model:value="formData" v-model="api" @submit="onSubmit"></form-create>
-        </div>
-        <script>
-            
-// ====== 自定义代码开始 ======
-var zkqyTable = {
-    name: 'zkqyTable',
-    props: ['pageId'], // 声明接收的 props
-    template: `
-    <div class="zkqy-table">
-        <div class="table-container">
-            <div class="zkqy-table-btn" style="margin-bottom: 10px;">
-                <el-button type="primary" plain @click="add">新增</el-button>
-                <el-button type="primary" plain @click="edit">修改</el-button>
-            </div>
-            <el-table :data="tableData" style="width: 100%" :fit="true" border>
-                <el-table-column v-if="columns && columns.length > 0" :width="40">
-                    <template slot-scope="scope">
-                        <el-radio class="radio" 
-                                 :label="scope.row" 
-                                 v-model="radio" 
-                                 @change.native="getCurrentRow(scope.row)">
-                            &nbsp;
-                        </el-radio>
-                    </template>
-                </el-table-column>
-                <el-table-column 
-                    v-for="column in columns" 
-                    :key="column.prop" 
-                    :prop="column.prop" 
-                    :label="column.label" 
-                    :width="column.width"  
-                    flex="1">
-                </el-table-column>
-                <el-table-column label="操作" width="120" align="center" v-if="columns && columns.length > 0">
-                    <template slot-scope="scope">
-                        <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">
-                            删除
-                        </el-button>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <el-pagination
-                @size-change="handleSizeChange"
-                @current-change="handleCurrentChange"
-                :current-page="currentPage4"
-                :page-sizes="[2, 5, 10, 15]"
-                :page-size="100"
-                layout="total, sizes, prev, pager, next, jumper"
-                :total="tableList[0].total">
-            </el-pagination>
-        </div>
-    </div>
-    `,
-    data() {
-        return {
-            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":"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,
-            tableList: [{
-                pageId: '',
-                total: 0,
-                pageSize: 2,
-                pageNum: 1
-            }],
-            baseUrl: 'http://192.168.10.103:8088/',
-            headers: {
-                Accept: 'application/json',
-                dbname:'tt18',
-                'Content-Type': 'application/json'
-            },
-        };
-    },
-    methods: {
-        // 方法实现...
-        add() {
-            let p = this.zkqyTablePageJson[0]?.props?.addZkqyTableRow
-            if(p){
-                this.queryMobileClickAddData(p)
-            }
-        },
-        edit() {
-            if (!this.radio) {
-                this.$message.warning("请先选择一行数据");
-                return;
-            }
-            let formId = this.zkqyTablePageJson[0]?.props?.updateZkqyTableRow
-            let searchId;
-            let zj = this.zkqyTablePageJson[0].columns.find(item=>item.tableType=="primary")
-            if(zj.tableName){
-                let v = zj.tableName+'@id'
-                  searchId = this.radio[v]
-            }
-            if(!formId){
-                this.$message.warning("请配置跳转页面");
-                return
-            }else if(!searchId) {
-                this.$message.warning("id不存在");
-            }else {
-                let params = {
-                    formId,
-                    searchId 
-                }
-                this.queryMobileClickUpdateData(params)
-            }
-        },
-        getCurrentRow(val) {
-            this.policyData = val;
-            console.log('this.policyData', this.policyData)
-        },
-        handleSizeChange(val) {
-            this.tableList[0].pageSize = val;
-            this.getTableLimitInfo({ 
-                pageNum: this.tableList[0].pageNum, 
-                pageSize: this.tableList[0].pageSize,
-                pageId: this.pageId 
-            });
-        },
-        handleCurrentChange(val) {
-            this.tableList[0].pageNum = val;
-            this.getTableLimitInfo({ 
-                pageNum: this.tableList[0].pageNum, 
-                pageSize: this.tableList[0].pageSize,
-                pageId: this.pageId 
-            });
-        },
-        handleDelete(index, row) {
-            // console.log(row)
-            // let zj = this.zkqyTablePageJson[0].columns.find(item=>item.tableType=="primary")
-            // if(zj.tableName){
-            //     let v = zj.tableName+'@id'
-            //       searchId = this.radio[v]
-            // }
-            let id = this.zkqyTablePageJson[0]?.columns[0]?.tableName +'@id'
-            this.$msgbox.confirm('确认删除id为' + row[id] + '这行数据?', '提示', {
-                confirmButtonText: '确定',
-                cancelButtonText: '取消',
-                type: 'warning'
-            }).then(() => {
-                this.tableData.splice(index, 1);
-                this.deleteTableData(row[id], this.pageId );
-            }).catch(() => {
-                this.$message.info("已取消删除");
-            });
-        },
-        async deleteTableData(lineId, pageId) {
-             const endpoint = 'api/mobilePageDesignData/normal/deleteData';
-             try {
-               const url = this.baseUrl + endpoint;
-                 const requestBody = {
-                     lineId: lineId,
-                     pageId: pageId
-                 };
-                 const response = await fetch(url, {
-                     method: 'POST',
-                     headers: this.headers,
-                     body: JSON.stringify(requestBody) // 将参数转为JSON字符串
-                 });
-                 if (!response.ok) {
-                       throw new Error('HTTP error! status: ' + response.status);
-                   }
-                 const result = await response.json();
-                 console.log('删除结果:', result);
-                 if (result.code == 200) {
-                     this.$message.success('删除成功');
-                     let {pageId,pageNum,pageSize} =this.tableList[0]
-                     // 删除成功后刷新表格数据
-                     this.getTableLimitInfo({pageId,pageNum,pageSize})
-                     return true;
-                 } else {
-                     this.$message.error(result.message || '删除失败');
-                     return false;
-                 }
-             } catch (error) {
-                 console.error('删除数据出错:', error);
-                 this.$message.error('删除请求失败: ' + error.message);
-                 throw error;
-             }
-         },
-         async getTableLimitInfo(params = {}) {
-            const endpoint = 'api/mobilePageDesignData/muti/tableLimitInfo';
-            await this.fetchGet(endpoint, params, (data) => {
-                if (data.code === 200) {
-                    this.tableData = data.rows;
-                    this.tableList[0].total = data.total
-                } else {
-                    console.warn('接口返回非 200 状态:', data);
-                }
-            });
-        },
-        async queryMobileClickAddData(params = {}) {
-            let formId = params;
-            params ={}
-            
-            let pageId = this.pageId
-            console.log('pageId',pageId)
-            const endpoint = 'api/mobilePageDesignData/queryMobileClickAddData/'+ formId;
-            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);   
-                }
-            });
-        },
-        async queryMobileClickUpdateData(params = {}) {
-            let formId = params.formId;
-            let searchId = params.searchId;
-            params = {}
-            // 移除指定的 localStorage 键
-            // localStorage.removeItem('sharedPageId');
-
-            const endpoint = 'api/mobilePageDesignData/queryMobileClickUpdateData/'+this.pageId +'/'+formId +'/'+searchId;
-            await this.fetchGet(endpoint , params,(data) => {
-                if (data.code === 200) {
-                        const decodedHtml = decodeURIComponent(data.data.htmlData);
-                        const iframe = document.createElement('iframe');
-                        iframe.srcdoc = decodedHtml;
-                        iframe.style.width = '100%';
-                        iframe.style.height = '100vh';
-                        iframe.style.border = 'none';
-                        document.body.innerHTML = '';
-                        document.body.appendChild(iframe);
-                        // 将 pageId 存储到 localStorage
-                        localStorage.setItem('sharedPageId', this.pageId);   
-                    }
-            });
-        },
-        async fetchGet(endpoint, params = {}, successCallback) {
-            try {
-                // 构建查询字符串
-                const queryString = Object.keys(params)
-                    .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
-                    .join('&');
-                // 拼接完整的 URL
-                const url = this.baseUrl + endpoint + (queryString ? '?' + queryString : '');
-        
-                // 发起 GET 请求
-                const response = await fetch(url, {
-                    method: 'GET',
-                    headers: this.headers
-                });
-        
-                // 检查响应状态
-                if (!response.ok) {
-                    throw new Error('HTTP error! status: ' + response.status);
-                }
-        
-                // 解析返回的数据
-                const data = await response.json();
-        
-                // 调用成功回调函数
-                if (successCallback && typeof successCallback === 'function') {
-                    successCallback(data);
-                }
-            } catch (error) {
-                console.error('调用接口出错:', error);
-                throw error; // 抛出错误以便上层捕获
-                }
-            }
-         },
-    mounted() {
-        console.log('父组件传递的 options:', this.pageId);
-        this.tableList[0].pageId = this.pageId
-        let { pageId, pageNum, pageSize } = this.tableList[0];
-        this.getTableLimitInfo({ pageId, pageNum, pageSize });
-    }
-};
-
-// 注册组件
-Vue.use(ELEMENT);
-Vue.use(formCreate);
-formCreate.component('zkqyTable', zkqyTable);
-
-new Vue({
-                el: '#app',
-                data() {
-                    return {
-                        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>
-</html>