From 6f10d1a4ba4df1565927ced7d70e77fe21f487e1 Mon Sep 17 00:00:00 2001
From: 康鲁杰 <60095866+KangLujie@users.noreply.github.com>
Date: 星期三, 25 六月 2025 15:28:49 +0800
Subject: [PATCH] 修改自定义表单

---
 ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerVo.java                        |   10 +--
 ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerTemplateServiceImpl.java |    8 +-
 ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerDTO.java                       |    1 
 ruoyi-ui/apps/web-antd/src/views/tool/page-designer/page-drawer.vue                                                   |   40 +++++++------
 ruoyi-ui/apps/web-antd/src/views/tool/page-designer/data.tsx                                                          |    8 +-
 ruoyi-ui/apps/web-antd/src/views/tool/template/template-drawer.vue                                                    |    4 
 ruoyi-modules/sc-page-designer/src/main/resources/mapper/PageDesignerMapper.xml                                       |    8 ++
 ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerServiceImpl.java         |   44 ++++++++++++++
 ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesigner.java                          |    2 
 ruoyi-ui/apps/web-antd/src/views/tool/template/index.vue                                                              |   10 +-
 10 files changed, 92 insertions(+), 43 deletions(-)

diff --git a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesigner.java b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesigner.java
index 0e2916b..19603e1 100644
--- a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesigner.java
+++ b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesigner.java
@@ -22,6 +22,8 @@
     private String name;
     @TableField("MENU_ID")
     private String menuId; // 鍏宠仈鐨勮彍鍗旾D
+    @TableField("MENU_PARENT_ID")
+    private String menuParentId; // 鍏宠仈鐨勮彍鍗曠埗ID
     @TableField("STATUS")
     private String status;
     @TableField(value = "DEL_FLAG")
diff --git a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerDTO.java b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerDTO.java
index 7224b38..bf81590 100644
--- a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerDTO.java
+++ b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerDTO.java
@@ -23,4 +23,5 @@
     private String formJson;   // 琛ㄥ崟璁捐 JSON 瀛楃涓�
     private String showColumn;   // 瀛楁鏄剧ず閰嶇疆
     private String actionsFunc;  // 鍚敤鐨勬搷浣滈」锛堝鍒犳敼鏌ワ級
+    private String menuParentId;
 }
diff --git a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerVo.java b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerVo.java
index 54bb8fa..6d079fe 100644
--- a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerVo.java
+++ b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/domain/PageDesignerVo.java
@@ -5,6 +5,7 @@
 import org.ruoyi.system.domain.vo.SysMenuVo;
 
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * @author kanglujie
@@ -15,13 +16,8 @@
 public class PageDesignerVo implements Serializable {
     private Long id; // 淇敼鏃朵紶鍏�
     private String name;       // 椤甸潰鍚嶇О
-    private String menuId;     // 鍏宠仈鑿滃崟 ID
-    private String parentId;     // 鍏宠仈鑿滃崟 ID
     private String status;     // 鍚敤鐘舵��
     private String remark;     // 澶囨敞
-    private String formJson;   // 琛ㄥ崟璁捐 JSON 瀛楃涓�
-    private String showColumn;   // 瀛楁鏄剧ず閰嶇疆
-    private String actionsFunc;  // 鍚敤鐨勬搷浣滈」锛堝鍒犳敼鏌ワ級
-    private SysMenuVo menu; // 鍒涘缓浜轰俊鎭�
-    private SysMenuVo parent; // 鍒涘缓浜轰俊鎭�
+    private String menuParentId; // 鑿滃崟鐖禝D
+    private Date createTime; // 鍒涘缓鏃堕棿
 }
diff --git a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerServiceImpl.java b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerServiceImpl.java
index e42337c..e7bd36f 100644
--- a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerServiceImpl.java
+++ b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerServiceImpl.java
@@ -1,6 +1,8 @@
 package org.ruoyi.pageDesigner.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.amazonaws.util.json.Jackson;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -20,6 +22,9 @@
 import org.ruoyi.pageDesigner.domain.PageDesignerVo;
 import org.ruoyi.pageDesigner.mapper.PageDesignerMapper;
 import org.ruoyi.pageDesigner.service.PageDesignerService;
+import org.ruoyi.system.domain.SysMenu;
+import org.ruoyi.system.mapper.SysMenuMapper;
+import org.ruoyi.system.mapper.SysUserMapper;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -34,18 +39,42 @@
 public class PageDesignerServiceImpl extends ServiceImpl<PageDesignerMapper, PageDesigner>
         implements PageDesignerService {
 
-    private final ObjectMapper objectMapper;
+    private final SysMenuMapper menuMapper;
 
     @Override
     public void add(PageDesignerDTO dto) {
+        SysMenu menu = new SysMenu();
+        menu.setMenuName(dto.getName());
+        menu.setParentId(Long.valueOf(dto.getMenuParentId()));
+        menu.setOrderNum(100);
+        menu.setPath("page");
+        menu.setComponent("tool/template/index");
+        menu.setIsFrame("1");
+        menu.setIsCache("0");
+        menu.setMenuType("C"); // C:鐩綍, M:鑿滃崟, F:鎸夐挳
+        menu.setVisible("0");
+        menu.setStatus(dto.getStatus());
+        menuMapper.insert(menu);
         PageDesigner entity = convertToEntity(dto);
+        entity.setMenuId(menu.getMenuId().toString());
         this.save(entity);
+        JSONObject json = new JSONObject();
+        json.put("pageId", entity.getId().toString());
+        String jsonString = json.toJSONString();
+        menu.setQueryParam(jsonString);
+        menuMapper.updateById(menu);
     }
 
     @Override
     public void updatePage(PageDesignerDTO dto) {
         PageDesigner entity = convertToEntity(dto);
         this.updateById(entity);
+        PageDesigner byId = this.getById(entity.getId());
+        SysMenu menu = new SysMenu();
+        menu.setMenuId(Long.valueOf(byId.getMenuId()));
+        menu.setStatus(entity.getStatus());
+        menu.setParentId(Long.valueOf(entity.getMenuParentId()));
+        menuMapper.updateById(menu);
     }
 
     @Override
@@ -79,7 +108,17 @@
 
     @Override
     public void deleteByIds(List<Long> ids) {
-        this.removeByIds(ids);
+        List<PageDesigner> designers = this.listByIds(ids);
+        for (PageDesigner designer : designers) {
+            Long id = designer.getId();
+            this.removeById(id);
+
+            Long menuId = Long.valueOf(designer.getMenuId());
+            if (menuId != null) {
+                menuMapper.deleteById(menuId);
+            }
+        }
+
     }
 
     private PageDesigner convertToEntity(PageDesignerDTO dto) {
@@ -92,6 +131,7 @@
         entity.setFormJson(dto.getFormJson());
         entity.setShowColumn(dto.getShowColumn());
         entity.setActionsFunc(dto.getActionsFunc());
+        entity.setMenuParentId(dto.getMenuParentId());
         return entity;
     }
 }
diff --git a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerTemplateServiceImpl.java b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerTemplateServiceImpl.java
index 4901a54..8ed291e 100644
--- a/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerTemplateServiceImpl.java
+++ b/ruoyi-modules/sc-page-designer/src/main/java/org/ruoyi/pageDesigner/service/impl/PageDesignerTemplateServiceImpl.java
@@ -1,5 +1,6 @@
 package org.ruoyi.pageDesigner.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -8,6 +9,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.RequiredArgsConstructor;
+import org.ruoyi.common.core.constant.UserConstants;
 import org.ruoyi.core.page.PageQuery;
 import org.ruoyi.core.page.TableDataInfo;
 import org.ruoyi.pageDesigner.domain.*;
@@ -50,13 +52,13 @@
     private Wrapper<PageDesignerTemplate> buildQueryWrapper(PageDesignerTemplateDTO dto) {
         //Map<String, Object> params = pageDesignerDTO.getParams();
         QueryWrapper<PageDesignerTemplate> wrapper = Wrappers.query();
-        //wrapper.eq("del_flag", UserConstants.USER_NORMAL)
-        //        .eq(ObjectUtil.isNotNull(pageDesignerDTO.getId()), "id", pageDesignerDTO.getId())
+        wrapper.eq("del_flag", UserConstants.USER_NORMAL)
+                .eq(ObjectUtil.isNotNull(dto.getPageId()), "page_id", dto.getPageId())
         //        .like(StringUtils.isNotBlank(pageDesignerDTO.getName()), "name", pageDesignerDTO.getName())
         //        .eq(StringUtils.isNotBlank(pageDesignerDTO.getStatus()), "status", pageDesignerDTO.getStatus())
         //        .between(params.get("beginTime") != null && params.get("endTime") != null,
         //                "create_time", params.get("beginTime"), params.get("endTime"))
-        //;
+        ;
         return wrapper;
     }
     @Override
diff --git a/ruoyi-modules/sc-page-designer/src/main/resources/mapper/PageDesignerMapper.xml b/ruoyi-modules/sc-page-designer/src/main/resources/mapper/PageDesignerMapper.xml
index 033657e..bd1d17f 100644
--- a/ruoyi-modules/sc-page-designer/src/main/resources/mapper/PageDesignerMapper.xml
+++ b/ruoyi-modules/sc-page-designer/src/main/resources/mapper/PageDesignerMapper.xml
@@ -9,6 +9,9 @@
         <id property="id" column="id"/>
         <result property="name" column="name"/>
         <result property="status" column="status"/>
+        <result property="createTime" column="create_time"/>
+        <result property="menuParentId" column="menu_parent_id"/>
+        <result property="remark" column="remark"/>
     </resultMap>
 
 
@@ -16,7 +19,10 @@
         select
             id,
             name,
-            status
+            status,
+            create_time,
+            menu_parent_id,
+            remark
         from page_designer
         ${ew.getCustomSqlSegment}
     </select>
diff --git a/ruoyi-ui/apps/web-antd/src/views/tool/page-designer/data.tsx b/ruoyi-ui/apps/web-antd/src/views/tool/page-designer/data.tsx
index eaf43de..9c1dab0 100644
--- a/ruoyi-ui/apps/web-antd/src/views/tool/page-designer/data.tsx
+++ b/ruoyi-ui/apps/web-antd/src/views/tool/page-designer/data.tsx
@@ -41,7 +41,7 @@
     field: 'status',
     slots: {
       default: ({ row }) => {
-        return row.status === '1' ? '姝e父' : '鍋滅敤';
+        return row.status === '0' ? '姝e父' : '鍋滅敤';
       },
     },
   },
@@ -66,7 +66,7 @@
   },
   {
     component: 'TreeSelect',
-    fieldName: 'menuId',
+    fieldName: 'menuParentId',
     label: '涓婄骇鐩綍',
     componentProps: {
       allowClear: true,
@@ -80,8 +80,8 @@
     label: '鐘舵��',
     componentProps: {
       options: [
-        { label: '姝e父', value: '1' },
-        { label: '鍋滅敤', value: '0' },
+        { label: '姝e父', value: '0' },
+        { label: '鍋滅敤', value: '1' },
       ],
     },
     rules: 'selectRequired',
diff --git a/ruoyi-ui/apps/web-antd/src/views/tool/page-designer/page-drawer.vue b/ruoyi-ui/apps/web-antd/src/views/tool/page-designer/page-drawer.vue
index a73c4ee..153664d 100644
--- a/ruoyi-ui/apps/web-antd/src/views/tool/page-designer/page-drawer.vue
+++ b/ruoyi-ui/apps/web-antd/src/views/tool/page-designer/page-drawer.vue
@@ -40,6 +40,7 @@
 const modalVisible = ref(false);
 const modalLoading = ref(false);
 const currentEditId = ref<string | number>(''); // 褰撳墠缂栬緫鐨処D
+const fullMenuTree = ref([]);
 
 // 鎵撳紑寮圭獥
 const open = async (params: ModalProps = { update: false }) => {
@@ -51,16 +52,16 @@
     await setupPageSelect();
     
     if (params.id) {
-      await formApi.setFieldValue('menuId', params.id);
+      await formApi.setFieldValue('menuParentId', params.id);
       if (params.update) {
         // 鑾峰彇璇︽儏鏁版嵁
         const record = await pageInfo(params.id);
-        console.log('缂栬緫鏁版嵁:', record);
         
         // 璁剧疆鍩虹琛ㄥ崟鏁版嵁
+        const menuParentId = String(record.menuParentId || record.parentId || '');
         await formApi.setValues({
           name: record.name,
-          menuId: record.menuId || record.parentId || params.id,  // 浼樺厛浣跨敤menuId锛屽叾娆arentId
+          menuParentId: menuParentId,  // 鐢� menuParentId 瀛楁
           status: record.status,
           remark: record.remark,
           actionsFunc: record.actionsFunc ? JSON.parse(record.actionsFunc) : ['add', 'edit', 'delete', 'query']
@@ -80,7 +81,6 @@
             // 鎭㈠閫変腑鐨勫瓧娈�
             if (record.showColumn) {
               selectedFields.value = JSON.parse(record.showColumn);
-              console.log('鎭㈠閫変腑瀛楁:', selectedFields.value);
             }
           } catch (e) {
             console.error('鍔犺浇琛ㄥ崟璁捐鏁版嵁澶辫触:', e);
@@ -116,36 +116,46 @@
   filteredList.forEach(item => { item.menuName = $t(item.menuName); });
   // 杞负鏍戠粨鏋�
   const menuTree = listToTree(filteredList, { id: 'menuId', pid: 'parentId' });
-  // 鍔犳牴鑺傜偣
-  const fullMenuTree = [
+  // 閫掑綊鏄犲皠 menuId -> menuParentId
+  function mapMenuIdToParentId(list) {
+    return list.map(item => {
+      const newItem = { ...item, menuParentId: item.menuId };
+      if (item.children) {
+        newItem.children = mapMenuIdToParentId(item.children);
+      }
+      return newItem;
+    });
+  }
+  fullMenuTree.value = [
     {
       menuId: 0,
+      menuParentId: 0,
       menuName: $t('menu.root'),
-      children: menuTree,
+      children: mapMenuIdToParentId(menuTree),
     },
   ];
   // 鐢熸垚鍏ㄨ矾寰勫悕
-  addFullName(fullMenuTree, 'menuName', ' / ');
+  addFullName(fullMenuTree.value, 'menuName', ' / ');
 
   formApi.updateSchema([
     {
       componentProps: {
         fieldNames: {
           label: 'menuName',
-          value: 'menuId',
+          value: 'menuId', // 鐢� menuId
           children: 'children'
         },
         getPopupContainer,
         listHeight: 300,
         showSearch: true,
-        treeData: fullMenuTree,
+        treeData: fullMenuTree.value,
         treeDefaultExpandAll: false,
         treeDefaultExpandedKeys: [0],
         treeLine: { showLeafIcon: false },
         treeNodeFilterProp: 'menuName',
         treeNodeLabelProp: 'fullName',
       },
-      fieldName: 'menuId',
+      fieldName: 'menuParentId', // 鐢� menuParentId
     },
   ]);
 }
@@ -155,7 +165,6 @@
 const syncAllFields = () => {
   // 鑾峰彇琛ㄥ崟缁勪欢鐨勮鍒欐弿杩�
   const formDesc = designer.value?.getFormDescription?.();
-  console.log('琛ㄥ崟缁勪欢鎻忚堪:', formDesc);
   
   if (!formDesc || !Array.isArray(formDesc)) {
     message.warning('鏆傛棤璁捐鏁版嵁');
@@ -170,7 +179,6 @@
       field: item.field
     }));
   
-  console.log('鎻愬彇鐨勫瓧娈�:', allFields);
   
   if (allFields.length === 0) {
     message.warning('鏈壘鍒板彲鐢ㄥ瓧娈�');
@@ -190,7 +198,6 @@
 
 // 澶勭悊璁捐鍣ㄥ彉鍖�
 const handleDesignerChange = () => {
-  console.log('璁捐鍣ㄥ唴瀹瑰彉鍖�');
   nextTick(() => {
     updateFieldOptions();
   });
@@ -198,9 +205,6 @@
 
 // 褰撹璁″櫒鍐呭鍙樺寲鏃舵洿鏂板瓧娈甸�夐」
 const updateFieldOptions = () => {
-  console.log('updateFieldOptions');
-  console.log('designer.value', designer.value);
-  
   // 鑾峰彇琛ㄥ崟缁勪欢鐨勮鍒欐弿杩�
   const formDesc = designer.value?.getFormDescription?.();
   if (!formDesc || !Array.isArray(formDesc)) return;
@@ -216,8 +220,6 @@
     label: item.title,
     value: item.field
   }));
-  
-  console.log('鏇存柊鍚庣殑瀛楁閫夐」:', fieldOptions.value);
 };
 
 // 鐩戝惉璁捐鍣ㄥ唴瀹瑰彉鍖�
diff --git a/ruoyi-ui/apps/web-antd/src/views/tool/template/index.vue b/ruoyi-ui/apps/web-antd/src/views/tool/template/index.vue
index d198eaa..16b3c41 100644
--- a/ruoyi-ui/apps/web-antd/src/views/tool/template/index.vue
+++ b/ruoyi-ui/apps/web-antd/src/views/tool/template/index.vue
@@ -176,7 +176,7 @@
       const safeDetail = {
         id: detail.id,
         name: detail.name,
-        menuId: detail.menuId,
+        menuParentId: detail.menuId,
         status: detail.status,
         remark: detail.remark,
         formJson: detail.formJson,
@@ -234,7 +234,7 @@
             ...formValues,
           };
           if (pageId.value) {
-            queryParams.pageDesignId = pageId.value;
+            queryParams.pageId = pageId.value;
           }
           const resp = await templateList(queryParams);
           // 澶勭悊姣忔潯 row 鐨� formData
@@ -294,7 +294,7 @@
   // 濡傛灉鏈� pageId锛屼紶閫掔粰鏂板
   const params: any = { update: false };
   if (pageId.value) {
-    params.pageDesignId = pageId.value;
+    params.pageId = pageId.value;
   }
   // 鍔ㄦ�佷紶閫抐ormJson锛屽厛JSON.parse锛屼繚璇佹槸绾璞�
   if (pageDesignDetail.value && pageDesignDetail.value.formJson) {
@@ -315,7 +315,7 @@
   const params: any = { 
     id: record.id, 
     update: true,
-    pageDesignId: pageId.value,  // 浼犻�掗〉闈㈣璁D
+    pageId: pageId.value,  // 浼犻�掗〉闈㈣璁D
     record: record  // 浼犻�掑畬鏁寸殑璁板綍鏁版嵁
   };
   
@@ -323,7 +323,7 @@
     try {
       const formJson = JSON.parse(pageDesignDetail.value.formJson);
       params.formJson = formJson;
-      console.log('缂栬緫鏃朵紶閫掓暟鎹�:', { record, formJson, pageDesignId: pageId.value });
+      console.log('缂栬緫鏃朵紶閫掓暟鎹�:', { record, formJson, pageId: pageId.value });
     } catch (error) {
       console.error('瑙f瀽 formJson 澶辫触:', error);
       params.formJson = undefined;
diff --git a/ruoyi-ui/apps/web-antd/src/views/tool/template/template-drawer.vue b/ruoyi-ui/apps/web-antd/src/views/tool/template/template-drawer.vue
index da11342..a3d88e0 100644
--- a/ruoyi-ui/apps/web-antd/src/views/tool/template/template-drawer.vue
+++ b/ruoyi-ui/apps/web-antd/src/views/tool/template/template-drawer.vue
@@ -9,7 +9,7 @@
 interface ModalProps {
   id?: number | string;
   update: boolean;
-  pageDesignId?: string | number;
+  pageId?: string | number;
   formJson?: any;
 }
 
@@ -67,7 +67,7 @@
     modalLoading.value = true;
     isUpdate.value = params.update;
     currentEditId.value = params.id || '';
-    currentPageId.value = params.pageId || params.pageDesignId || '';
+    currentPageId.value = params.pageId || '';
     
     // 璁剧疆鍔ㄦ�佽〃鍗曞瓧娈碉紝濮嬬粓绉婚櫎鎵�鏈塻ubmit鎸夐挳
     if (params.formJson) {

--
Gitblit v1.9.3