Jelajahi Sumber

可视化拖拽AS-Editor

ZYZ 1 tahun lalu
induk
melakukan
b487d41085
73 mengubah file dengan 3131 tambahan dan 1271 penghapusan
  1. 18 25
      zkqy-admin/src/main/java/com/zkqy/web/controller/system/LoginPageConfigurationController.java
  2. 2 1
      zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysLoginController.java
  3. 13 2
      zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysMenuController.java
  4. 9 0
      zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysTenantController.java
  5. 105 82
      zkqy-system/src/main/java/com/zkqy/system/domain/LoginPageConfiguration.java
  6. 13 12
      zkqy-system/src/main/java/com/zkqy/system/mapper/LoginPageConfigurationMapper.java
  7. 8 0
      zkqy-system/src/main/java/com/zkqy/system/mapper/SysMenuMapper.java
  8. 12 11
      zkqy-system/src/main/java/com/zkqy/system/service/ILoginPageConfigurationService.java
  9. 31 21
      zkqy-system/src/main/java/com/zkqy/system/service/ISysMenuService.java
  10. 18 24
      zkqy-system/src/main/java/com/zkqy/system/service/impl/LoginPageConfigurationServiceImpl.java
  11. 13 0
      zkqy-system/src/main/java/com/zkqy/system/service/impl/SysMenuServiceImpl.java
  12. 70 39
      zkqy-system/src/main/resources/mapper/system/LoginPageConfigurationMapper.xml
  13. 478 364
      zkqy-system/src/main/resources/mapper/system/SysMenuMapper.xml
  14. 1 1
      zkqy-system/src/main/resources/mapper/system/SysUserMapper.xml
  15. 3 3
      zkqy-ui/.env.development
  16. 3 0
      zkqy-ui/.env.production
  17. 20 2
      zkqy-ui/babel.config.js
  18. 3 0
      zkqy-ui/package.json
  19. 9 0
      zkqy-ui/src/api/menu.js
  20. 7 5
      zkqy-ui/src/api/system/configuration.js
  21. 11 0
      zkqy-ui/src/api/tablelist/commonTable.js
  22. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_biaoqian.svg
  23. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_chima.svg
  24. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_diannao.svg
  25. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_duanxiantixing.svg
  26. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_duihua.svg
  27. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_fuzhi.svg
  28. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_gouwu.svg
  29. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_huishou.svg
  30. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_jiesuo.svg
  31. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_rili.svg
  32. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_shoubiao.svg
  33. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_shouji.svg
  34. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_sousuo.svg
  35. 1 0
      zkqy-ui/src/assets/icons/svg/a-051_suoding.svg
  36. 0 0
      zkqy-ui/src/assets/icons/svg/dianzan.svg
  37. 1 0
      zkqy-ui/src/assets/icons/svg/guankan.svg
  38. 1 0
      zkqy-ui/src/assets/icons/svg/icon_atianjia_solid.svg
  39. 1 0
      zkqy-ui/src/assets/icons/svg/icon_bzhengque_outline.svg
  40. 1 0
      zkqy-ui/src/assets/icons/svg/icon_bzhengque_solid.svg
  41. 1 0
      zkqy-ui/src/assets/icons/svg/icon_chahao_outline.svg
  42. 1 0
      zkqy-ui/src/assets/icons/svg/icon_duihao_outline.svg
  43. 1 0
      zkqy-ui/src/assets/icons/svg/icon_jiahao.svg
  44. 1 0
      zkqy-ui/src/assets/icons/svg/icon_jianhao_outline.svg
  45. 0 0
      zkqy-ui/src/assets/icons/svg/pinglun.svg
  46. 0 0
      zkqy-ui/src/assets/icons/svg/shoucang.svg
  47. 659 0
      zkqy-ui/src/assets/js/kFormDesign.js
  48. 28 0
      zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormDesign/config/formItemsConfig.js
  49. 4 0
      zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormDesign/index.vue
  50. 25 4
      zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormDesign/module/formItemProperties.vue
  51. 25 2
      zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormDesign/module/formProperties.vue
  52. 7 1
      zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormItem/index.vue
  53. 35 0
      zkqy-ui/src/components/updateModule/k-form-design/packages/components/KTextShow/KTextShow.vue
  54. 2 0
      zkqy-ui/src/components/updateModule/k-form-design/packages/components/KTextShow/index.js
  55. 1 0
      zkqy-ui/src/components/updateModule/k-form-design/packages/utils/NodeSchema.js
  56. 27 17
      zkqy-ui/src/layout/index.vue
  57. 9 9
      zkqy-ui/src/permission.js
  58. 27 19
      zkqy-ui/src/router/index.js
  59. 9 2
      zkqy-ui/src/store/modules/user.js
  60. 0 0
      zkqy-ui/src/utils/icon.js
  61. 62 60
      zkqy-ui/src/utils/request.js
  62. 13 23
      zkqy-ui/src/views/login.vue
  63. 6 1
      zkqy-ui/src/views/relateTable/index.vue
  64. 299 111
      zkqy-ui/src/views/system/excuteBtnMange/index.vue
  65. 384 42
      zkqy-ui/src/views/system/formGroupMange/index.vue
  66. 3 0
      zkqy-ui/src/views/system/fromModel/index.vue
  67. 333 312
      zkqy-ui/src/views/system/tenant/index.vue
  68. 3 2
      zkqy-ui/src/views/system/tenant/tenantIndex.vue
  69. 166 40
      zkqy-ui/src/views/tableMange/components/ClassificationQueryPanel.vue
  70. 2 4
      zkqy-ui/src/views/tableMange/components/StyleFormPanel.vue
  71. 126 22
      zkqy-ui/src/views/tableMange/index.vue
  72. 1 1
      zkqy-ui/src/views/tablelist/commonTable/listInfo.vue
  73. 6 7
      zkqy-ui/vue.config.js

+ 18 - 25
zkqy-admin/src/main/java/com/zkqy/web/controller/system/LoginPageConfigurationController.java

@@ -34,19 +34,17 @@ import com.zkqy.common.core.page.TableDataInfo;
 @RestController
 @RequestMapping("/system/configuration")
 @Api(value = "/system/configuration", description = "登录页面配置信息-接口")
-public class LoginPageConfigurationController extends BaseController
-{
+public class LoginPageConfigurationController extends BaseController {
     @Autowired
     private ILoginPageConfigurationService loginPageConfigurationService;
 
-/**
- * 查询登录页面配置信息列表
- */
-@PreAuthorize("@ss.hasPermi('system:configuration:list')")
-@GetMapping("/list")
-@ApiOperation(value = "查询登录页面配置信息列表")
-    public TableDataInfo list(LoginPageConfiguration loginPageConfiguration)
-    {
+    /**
+     * 查询登录页面配置信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:configuration:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询登录页面配置信息列表")
+    public TableDataInfo list(LoginPageConfiguration loginPageConfiguration) {
         startPage();
         List<LoginPageConfiguration> list = loginPageConfigurationService.selectLoginPageConfigurationList(loginPageConfiguration);
         return getDataTable(list);
@@ -59,8 +57,7 @@ public class LoginPageConfigurationController extends BaseController
     @Log(title = "登录页面配置信息", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     @ApiOperation(value = "导出登录页面配置信息列表")
-    public void export(HttpServletResponse response, LoginPageConfiguration loginPageConfiguration)
-    {
+    public void export(HttpServletResponse response, LoginPageConfiguration loginPageConfiguration) {
         List<LoginPageConfiguration> list = loginPageConfigurationService.selectLoginPageConfigurationList(loginPageConfiguration);
         ExcelUtil<LoginPageConfiguration> util = new ExcelUtil<LoginPageConfiguration>(LoginPageConfiguration.class);
         util.exportExcel(response, list, "登录页面配置信息数据");
@@ -70,20 +67,19 @@ public class LoginPageConfigurationController extends BaseController
      * 获取登录页面配置信息详细信息
      */
     @PreAuthorize("@ss.hasPermi('system:configuration:query')")
-    @GetMapping(value = "/{tenantId}")
+    @GetMapping(value = "getInfoByTenantId")
     @ApiOperation(value = "获取登录页面配置信息详细信息")
-    public AjaxResult getInfo(@PathVariable("tenantId") Long tenantId)
-    {
-        return success(loginPageConfigurationService.selectLoginPageConfigurationByTenantId(tenantId));
+    public AjaxResult getInfo(Long tenantId, String loginType) {
+        return success(loginPageConfigurationService.selectLoginPageConfigurationByTenantId(tenantId, loginType));
     }
 
     /**
      * 根据登录编号查询详细信息
      */
     @Anonymous
-    @GetMapping("/queryLoginPageConfigurationInfo/{loginPageNumber}")
-    public AjaxResult queryLoginPageConfigurationInfo(@PathVariable("loginPageNumber") String loginPageNumber){
-        return success(loginPageConfigurationService.selectLoginPageConfigurationByLoginPageNumber(loginPageNumber));
+    @GetMapping("/queryLoginPageConfigurationInfo")
+    public AjaxResult queryLoginPageConfigurationInfo(String loginPageNumber, String loginType) {
+        return success(loginPageConfigurationService.selectLoginPageConfigurationByLoginPageNumber(loginPageNumber, loginType));
     }
 
     /**
@@ -93,8 +89,7 @@ public class LoginPageConfigurationController extends BaseController
     @Log(title = "登录页面配置信息", businessType = BusinessType.INSERT)
     @PostMapping
     @ApiOperation(value = "新增登录页面配置信息")
-    public AjaxResult add(@RequestBody LoginPageConfiguration loginPageConfiguration)
-    {
+    public AjaxResult add(@RequestBody LoginPageConfiguration loginPageConfiguration) {
         return toAjax(loginPageConfigurationService.insertLoginPageConfiguration(loginPageConfiguration));
     }
 
@@ -105,8 +100,7 @@ public class LoginPageConfigurationController extends BaseController
     @Log(title = "登录页面配置信息", businessType = BusinessType.UPDATE)
     @PutMapping
     @ApiOperation(value = "修改登录页面配置信息")
-    public AjaxResult edit(@RequestBody LoginPageConfiguration loginPageConfiguration)
-    {
+    public AjaxResult edit(@RequestBody LoginPageConfiguration loginPageConfiguration) {
         return toAjax(loginPageConfigurationService.updateLoginPageConfiguration(loginPageConfiguration));
     }
 
@@ -117,8 +111,7 @@ public class LoginPageConfigurationController extends BaseController
     @Log(title = "登录页面配置信息", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     @ApiOperation(value = "删除登录页面配置信息")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(loginPageConfigurationService.deleteLoginPageConfigurationByIds(ids));
     }
 }

+ 2 - 1
zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysLoginController.java

@@ -122,7 +122,7 @@ public class SysLoginController {
     public AjaxResult isTenantExist(String tenantCode) {
         SysTenant sysTenantInfo = iSysTenantService.selectSysTenantByTenantCode(tenantCode);
         if (sysTenantInfo != null) {
-            sysTenantInfo.setLoginPageConfiguration(loginPageConfigurationService.selectLoginPageConfigurationByLoginPageNumber(tenantCode));
+            sysTenantInfo.setLoginPageConfiguration(loginPageConfigurationService.selectLoginPageConfigurationByLoginPageNumber(tenantCode, "tool"));
             return AjaxResult.success(sysTenantInfo);
         }
         return AjaxResult.error("租户不存在");
@@ -136,6 +136,7 @@ public class SysLoginController {
      */
     @PostMapping("/loginAdmin")
     public AjaxResult loginadmin(@Valid @RequestBody LoginBody loginBody, BindingResult bindingResult) {
+        if (!loginBody.getUsername().equals("admin")) return AjaxResult.warn("禁止登录!");
         if (bindingResult.hasErrors()) {
             return AjaxResult.error(bindingResult.getFieldError().getDefaultMessage());
         }

+ 13 - 2
zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysMenuController.java

@@ -87,6 +87,17 @@ public class SysMenuController extends BaseController {
         }
     }
 
+    /**
+     * 批量新增菜单按钮权限
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:add')")
+    @Log(title = "菜单管理", businessType = BusinessType.INSERT)
+    @PostMapping("/tbnHasPerms")
+    public AjaxResult add(@Validated @RequestBody List<SysMenu> menus) {
+        return AjaxResult.success(menuService.insertMenusByList(menus));
+    }
+
+
     /**
      * 修改菜单
      */
@@ -128,10 +139,10 @@ public class SysMenuController extends BaseController {
     @Log(title = "菜单管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/removeBatch/{menuIds}")
     public AjaxResult removeBatch(@PathVariable List<Long> menuIds) {
-        if(menuService.hasChildByMenuIdBatchRemove(menuIds)){
+        if (menuService.hasChildByMenuIdBatchRemove(menuIds)) {
             return warn("当前选择的菜单中、存在子菜单,不允许删除");
         }
-        if(menuService.checkMenuExistRoleBatchRemove(menuIds)){
+        if (menuService.checkMenuExistRoleBatchRemove(menuIds)) {
             return warn("当前选择的菜单中、菜单已分配,不允许删除");
         }
         return toAjax(menuService.batchDeleteMenuByIds(menuIds));

+ 9 - 0
zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysTenantController.java

@@ -96,6 +96,10 @@ public class SysTenantController extends BaseController {
     @Log(title = "租户信息", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody SysTenant sysTenant) {
+        // 校验租户编码是否唯一
+        if (sysTenantService.selectSysTenantByTenantCode(sysTenant.getTenantCode()) != null) {
+            return AjaxResult.warn("新增租户失败,租户编码已存在");
+        }
         return toAjax(sysTenantService.insertSysTenant(sysTenant));
     }
 
@@ -106,6 +110,11 @@ public class SysTenantController extends BaseController {
     @Log(title = "租户信息", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody SysTenant sysTenant) {
+        // 校验租户编码是否唯一
+        SysTenant sysTenant1 = sysTenantService.selectSysTenantByTenantCode(sysTenant.getTenantCode());
+        if (sysTenant1 != null && !sysTenant1.getTenantId().equals(sysTenant.getTenantId())) {
+            return AjaxResult.warn("修改租户失败,租户编码已存在");
+        }
         return toAjax(sysTenantService.updateSysTenant(sysTenant));
     }
 

+ 105 - 82
zkqy-system/src/main/java/com/zkqy/system/domain/LoginPageConfiguration.java

@@ -7,189 +7,212 @@ import com.zkqy.common.annotation.Excel;
 
 /**
  * 登录页面配置信息对象 login_page_configuration
- * 
+ *
  * @author zkqy
  * @date 2024-01-22
  */
-public class LoginPageConfiguration extends BaseEntity
-{
+public class LoginPageConfiguration extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** 编号 */
+    /**
+     * 编号
+     */
     private Long id;
 
-    /** 登录页面编号 */
+    /**
+     * 登录页面编号
+     */
     @Excel(name = "登录页面编号")
     private String loginPageNumber;
 
-    /** 登录页面标题 */
+    /**
+     * 登录页面标题
+     */
     @Excel(name = "登录页面标题")
     private String loginPageTitle;
 
-    /** 登录页面描述 */
+    /**
+     * 登录页面描述
+     */
     @Excel(name = "登录页面描述")
     private String loginPageDescription;
 
-    /** 登录页面logo路径 */
+    /**
+     * 登录页面logo路径
+     */
     @Excel(name = "登录页面logo路径")
     private String loginPageLogo;
 
-    /** 登录页面背景图路径 */
+    /**
+     * 登录页面背景图路径
+     */
     @Excel(name = "登录页面背景图路径")
     private String loginPageBackgroundImage;
 
-    /** 窗口标题 */
+    /**
+     * 窗口标题
+     */
     @Excel(name = "窗口标题")
     private String windowTitle;
 
-    /** 窗口logo路径 */
+    /**
+     * 窗口logo路径
+     */
     @Excel(name = "窗口logo路径")
     private String windowLogo;
 
-    /** 租户编号 */
+    /**
+     * 租户编号
+     */
     @Excel(name = "租户编号")
     private Long tenantId;
 
-    /** 创建者ID */
+    /**
+     * 创建者ID
+     */
     @Excel(name = "创建者ID")
     private Long createById;
 
-    /** 更新者ID */
+    /**
+     * 更新者ID
+     */
     @Excel(name = "更新者ID")
     private Long updateById;
 
-    /** 删除标志(0:否;2:是) */
+    /**
+     * 配置页类型
+     */
+    private String loginType;
+
+    /**
+     * 删除标志(0:否;2:是)
+     */
     private String delFlag;
 
-    public void setId(Long id) 
-    {
+    public String getLoginType() {
+        return loginType;
+    }
+
+    public void setLoginType(String loginType) {
+        this.loginType = loginType;
+    }
+
+    public void setId(Long id) {
         this.id = id;
     }
 
-    public Long getId() 
-    {
+    public Long getId() {
         return id;
     }
-    public void setLoginPageNumber(String loginPageNumber) 
-    {
+
+    public void setLoginPageNumber(String loginPageNumber) {
         this.loginPageNumber = loginPageNumber;
     }
 
-    public String getLoginPageNumber() 
-    {
+    public String getLoginPageNumber() {
         return loginPageNumber;
     }
-    public void setLoginPageTitle(String loginPageTitle) 
-    {
+
+    public void setLoginPageTitle(String loginPageTitle) {
         this.loginPageTitle = loginPageTitle;
     }
 
-    public String getLoginPageTitle() 
-    {
+    public String getLoginPageTitle() {
         return loginPageTitle;
     }
-    public void setLoginPageDescription(String loginPageDescription) 
-    {
+
+    public void setLoginPageDescription(String loginPageDescription) {
         this.loginPageDescription = loginPageDescription;
     }
 
-    public String getLoginPageDescription() 
-    {
+    public String getLoginPageDescription() {
         return loginPageDescription;
     }
-    public void setLoginPageLogo(String loginPageLogo) 
-    {
+
+    public void setLoginPageLogo(String loginPageLogo) {
         this.loginPageLogo = loginPageLogo;
     }
 
-    public String getLoginPageLogo() 
-    {
+    public String getLoginPageLogo() {
         return loginPageLogo;
     }
-    public void setLoginPageBackgroundImage(String loginPageBackgroundImage) 
-    {
+
+    public void setLoginPageBackgroundImage(String loginPageBackgroundImage) {
         this.loginPageBackgroundImage = loginPageBackgroundImage;
     }
 
-    public String getLoginPageBackgroundImage() 
-    {
+    public String getLoginPageBackgroundImage() {
         return loginPageBackgroundImage;
     }
-    public void setWindowTitle(String windowTitle) 
-    {
+
+    public void setWindowTitle(String windowTitle) {
         this.windowTitle = windowTitle;
     }
 
-    public String getWindowTitle() 
-    {
+    public String getWindowTitle() {
         return windowTitle;
     }
-    public void setWindowLogo(String windowLogo) 
-    {
+
+    public void setWindowLogo(String windowLogo) {
         this.windowLogo = windowLogo;
     }
 
-    public String getWindowLogo() 
-    {
+    public String getWindowLogo() {
         return windowLogo;
     }
-    public void setTenantId(Long tenantId) 
-    {
+
+    public void setTenantId(Long tenantId) {
         this.tenantId = tenantId;
     }
 
-    public Long getTenantId() 
-    {
+    public Long getTenantId() {
         return tenantId;
     }
-    public void setCreateById(Long createById) 
-    {
+
+    public void setCreateById(Long createById) {
         this.createById = createById;
     }
 
-    public Long getCreateById() 
-    {
+    public Long getCreateById() {
         return createById;
     }
-    public void setUpdateById(Long updateById) 
-    {
+
+    public void setUpdateById(Long updateById) {
         this.updateById = updateById;
     }
 
-    public Long getUpdateById() 
-    {
+    public Long getUpdateById() {
         return updateById;
     }
-    public void setDelFlag(String delFlag) 
-    {
+
+    public void setDelFlag(String delFlag) {
         this.delFlag = delFlag;
     }
 
-    public String getDelFlag() 
-    {
+    public String getDelFlag() {
         return delFlag;
     }
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("loginPageNumber", getLoginPageNumber())
-            .append("loginPageTitle", getLoginPageTitle())
-            .append("loginPageDescription", getLoginPageDescription())
-            .append("loginPageLogo", getLoginPageLogo())
-            .append("loginPageBackgroundImage", getLoginPageBackgroundImage())
-            .append("windowTitle", getWindowTitle())
-            .append("windowLogo", getWindowLogo())
-            .append("tenantId", getTenantId())
-            .append("remark", getRemark())
-            .append("createBy", getCreateBy())
-            .append("createById", getCreateById())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateById", getUpdateById())
-            .append("updateTime", getUpdateTime())
-            .append("delFlag", getDelFlag())
-            .toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("loginPageNumber", getLoginPageNumber())
+                .append("loginPageTitle", getLoginPageTitle())
+                .append("loginPageDescription", getLoginPageDescription())
+                .append("loginPageLogo", getLoginPageLogo())
+                .append("loginPageBackgroundImage", getLoginPageBackgroundImage())
+                .append("windowTitle", getWindowTitle())
+                .append("windowLogo", getWindowLogo())
+                .append("tenantId", getTenantId())
+                .append("remark", getRemark())
+                .append("createBy", getCreateBy())
+                .append("createById", getCreateById())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateById", getUpdateById())
+                .append("updateTime", getUpdateTime())
+                .append("delFlag", getDelFlag())
+                .toString();
     }
 }

+ 13 - 12
zkqy-system/src/main/java/com/zkqy/system/mapper/LoginPageConfigurationMapper.java

@@ -1,35 +1,37 @@
 package com.zkqy.system.mapper;
 
 import java.util.List;
+
 import com.zkqy.system.domain.LoginPageConfiguration;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 登录页面配置信息Mapper接口
- * 
+ *
  * @author zkqy
  * @date 2024-01-22
  */
-public interface LoginPageConfigurationMapper 
-{
+public interface LoginPageConfigurationMapper {
     /**
      * 查询登录页面配置信息
-     * 
+     *
      * @param tenantId 租户编号
      * @return 登录页面配置信息
      */
-    LoginPageConfiguration selectLoginPageConfigurationByTenantId(Long tenantId);
+    LoginPageConfiguration selectLoginPageConfigurationByTenantId(@Param("tenantId")Long tenantId, @Param("loginType") String loginType);
 
     /**
      * 查询登录页面配置信息
      *
      * @param loginPageNumber 登录页面配置信息编号
+     * @param loginType       登录类型
      * @return 登录页面配置信息
      */
-    LoginPageConfiguration selectLoginPageConfigurationByLoginPageNumber(String loginPageNumber);
+    LoginPageConfiguration selectLoginPageConfigurationByLoginPageNumber(@Param("loginPageNumber") String loginPageNumber, @Param("loginType") String loginType);
 
     /**
      * 查询登录页面配置信息列表
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 登录页面配置信息集合
      */
@@ -37,7 +39,7 @@ public interface LoginPageConfigurationMapper
 
     /**
      * 新增登录页面配置信息
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 结果
      */
@@ -45,7 +47,7 @@ public interface LoginPageConfigurationMapper
 
     /**
      * 修改登录页面配置信息
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 结果
      */
@@ -53,7 +55,7 @@ public interface LoginPageConfigurationMapper
 
     /**
      * 删除登录页面配置信息
-     * 
+     *
      * @param id 登录页面配置信息主键
      * @return 结果
      */
@@ -61,12 +63,11 @@ public interface LoginPageConfigurationMapper
 
     /**
      * 批量删除登录页面配置信息
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
     int deleteLoginPageConfigurationByIds(Long[] ids);
 
 
-
 }

+ 8 - 0
zkqy-system/src/main/java/com/zkqy/system/mapper/SysMenuMapper.java

@@ -173,4 +173,12 @@ public interface SysMenuMapper {
     List<SysMenu> selectMenusByIds(List<Long> ids);
 
 
+    /**
+     * 批量新增新增菜单信息
+     *
+     * @param menus
+     * @return 结果
+     */
+    public int insertMenuBatch(List<SysMenu> menus);
+
 }

+ 12 - 11
zkqy-system/src/main/java/com/zkqy/system/service/ILoginPageConfigurationService.java

@@ -1,35 +1,36 @@
 package com.zkqy.system.service;
 
 import java.util.List;
+
 import com.zkqy.system.domain.LoginPageConfiguration;
 
 /**
  * 登录页面配置信息Service接口
- * 
+ *
  * @author zkqy
  * @date 2024-01-22
  */
-public interface ILoginPageConfigurationService 
-{
+public interface ILoginPageConfigurationService {
     /**
      * 查询登录页面配置信息
-     * 
+     *
      * @param tenantId 登录页面配置信息主键
      * @return 登录页面配置信息
      */
-    LoginPageConfiguration selectLoginPageConfigurationByTenantId(Long tenantId);
+    LoginPageConfiguration selectLoginPageConfigurationByTenantId(Long tenantId, String loginType);
 
     /**
      * 查询登录页面配置信息
      *
      * @param loginPageNumber 登录页面配置信息编号
+     * @param loginType       登录类型
      * @return 登录页面配置信息
      */
-    LoginPageConfiguration selectLoginPageConfigurationByLoginPageNumber(String loginPageNumber);
+    LoginPageConfiguration selectLoginPageConfigurationByLoginPageNumber(String loginPageNumber, String loginType);
 
     /**
      * 查询登录页面配置信息列表
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 登录页面配置信息集合
      */
@@ -37,7 +38,7 @@ public interface ILoginPageConfigurationService
 
     /**
      * 新增登录页面配置信息
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 结果
      */
@@ -45,7 +46,7 @@ public interface ILoginPageConfigurationService
 
     /**
      * 修改登录页面配置信息
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 结果
      */
@@ -53,7 +54,7 @@ public interface ILoginPageConfigurationService
 
     /**
      * 批量删除登录页面配置信息
-     * 
+     *
      * @param ids 需要删除的登录页面配置信息主键集合
      * @return 结果
      */
@@ -61,7 +62,7 @@ public interface ILoginPageConfigurationService
 
     /**
      * 删除登录页面配置信息信息
-     * 
+     *
      * @param id 登录页面配置信息主键
      * @return 结果
      */

+ 31 - 21
zkqy-system/src/main/java/com/zkqy/system/service/ISysMenuService.java

@@ -2,20 +2,20 @@ package com.zkqy.system.service;
 
 import java.util.List;
 import java.util.Set;
+
 import com.zkqy.common.core.domain.TreeSelect;
 import com.zkqy.common.core.domain.entity.SysMenu;
 import com.zkqy.system.domain.vo.RouterVo;
 
 /**
  * 菜单 业务层
- * 
+ *
  * @author zkqy
  */
-public interface ISysMenuService
-{
+public interface ISysMenuService {
     /**
      * 根据用户查询系统菜单列表
-     * 
+     *
      * @param userId 用户ID
      * @return 菜单列表
      */
@@ -23,8 +23,8 @@ public interface ISysMenuService
 
     /**
      * 根据用户查询系统菜单列表
-     * 
-     * @param menu 菜单信息
+     *
+     * @param menu   菜单信息
      * @param userId 用户ID
      * @return 菜单列表
      */
@@ -32,7 +32,7 @@ public interface ISysMenuService
 
     /**
      * 根据用户ID查询权限
-     * 
+     *
      * @param userId 用户ID
      * @return 权限列表
      */
@@ -40,7 +40,7 @@ public interface ISysMenuService
 
     /**
      * 根据角色ID查询权限
-     * 
+     *
      * @param roleId 角色ID
      * @return 权限列表
      */
@@ -48,7 +48,7 @@ public interface ISysMenuService
 
     /**
      * 根据用户ID查询菜单树信息
-     * 
+     *
      * @param userId 用户ID
      * @return 菜单列表
      */
@@ -56,7 +56,7 @@ public interface ISysMenuService
 
     /**
      * 根据角色ID查询菜单树信息
-     * 
+     *
      * @param roleId 角色ID
      * @return 选中菜单列表
      */
@@ -64,7 +64,7 @@ public interface ISysMenuService
 
     /**
      * 构建前端路由所需要的菜单
-     * 
+     *
      * @param menus 菜单列表
      * @return 路由列表
      */
@@ -72,7 +72,7 @@ public interface ISysMenuService
 
     /**
      * 构建前端所需要树结构
-     * 
+     *
      * @param menus 菜单列表
      * @return 树结构列表
      */
@@ -80,7 +80,7 @@ public interface ISysMenuService
 
     /**
      * 构建前端所需要下拉树结构
-     * 
+     *
      * @param menus 菜单列表
      * @return 下拉树结构列表
      */
@@ -88,7 +88,7 @@ public interface ISysMenuService
 
     /**
      * 根据菜单ID查询信息
-     * 
+     *
      * @param menuId 菜单ID
      * @return 菜单信息
      */
@@ -96,7 +96,7 @@ public interface ISysMenuService
 
     /**
      * 是否存在菜单子节点
-     * 
+     *
      * @param menuId 菜单ID
      * @return 结果 true 存在 false 不存在
      */
@@ -113,7 +113,7 @@ public interface ISysMenuService
 
     /**
      * 查询菜单是否存在角色
-     * 
+     *
      * @param menuId 菜单ID
      * @return 结果 true 存在 false 不存在
      */
@@ -129,7 +129,7 @@ public interface ISysMenuService
 
     /**
      * 新增保存菜单信息
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
@@ -137,7 +137,7 @@ public interface ISysMenuService
 
     /**
      * 修改保存菜单信息
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
@@ -145,7 +145,7 @@ public interface ISysMenuService
 
     /**
      * 删除菜单管理信息
-     * 
+     *
      * @param menuId 菜单ID
      * @return 结果
      */
@@ -161,7 +161,7 @@ public interface ISysMenuService
 
     /**
      * 校验菜单名称是否唯一
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
@@ -186,5 +186,15 @@ public interface ISysMenuService
      * @param menu 菜单信息
      * @return 结果
      */
-    Long insertMenus(SysMenu menu,Long userId);
+    Long insertMenus(SysMenu menu, Long userId);
+
+    /**
+     * 新增保存菜单信息(添加租户逻辑)
+     *
+     * @param menu 菜单信息
+     * @return 结果
+     */
+    Long insertMenusByList(List<SysMenu> sysMenuList);
+
+
 }

+ 18 - 24
zkqy-system/src/main/java/com/zkqy/system/service/impl/LoginPageConfigurationServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zkqy.system.service.impl;
 
 import java.util.List;
+
 import com.zkqy.common.utils.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -10,92 +11,85 @@ import com.zkqy.system.service.ILoginPageConfigurationService;
 
 /**
  * 登录页面配置信息Service业务层处理
- * 
+ *
  * @author zkqy
  * @date 2024-01-22
  */
 @Service
-public class LoginPageConfigurationServiceImpl implements ILoginPageConfigurationService 
-{
+public class LoginPageConfigurationServiceImpl implements ILoginPageConfigurationService {
     @Autowired
     private LoginPageConfigurationMapper loginPageConfigurationMapper;
 
     /**
      * 查询登录页面配置信息
-     * 
+     *
      * @param tenantId 登录页面配置信息主键
      * @return 登录页面配置信息
      */
     @Override
-    public LoginPageConfiguration selectLoginPageConfigurationByTenantId(Long tenantId)
-    {
-        return loginPageConfigurationMapper.selectLoginPageConfigurationByTenantId(tenantId);
+    public LoginPageConfiguration selectLoginPageConfigurationByTenantId(Long tenantId, String loginType) {
+        return loginPageConfigurationMapper.selectLoginPageConfigurationByTenantId(tenantId, loginType);
     }
 
     @Override
-    public LoginPageConfiguration selectLoginPageConfigurationByLoginPageNumber(String loginPageNumber) {
-        return loginPageConfigurationMapper.selectLoginPageConfigurationByLoginPageNumber(loginPageNumber);
+    public LoginPageConfiguration selectLoginPageConfigurationByLoginPageNumber(String loginPageNumber, String loginType) {
+        return loginPageConfigurationMapper.selectLoginPageConfigurationByLoginPageNumber(loginPageNumber, loginType);
     }
 
     /**
      * 查询登录页面配置信息列表
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 登录页面配置信息
      */
     @Override
-    public List<LoginPageConfiguration> selectLoginPageConfigurationList(LoginPageConfiguration loginPageConfiguration)
-    {
+    public List<LoginPageConfiguration> selectLoginPageConfigurationList(LoginPageConfiguration loginPageConfiguration) {
         return loginPageConfigurationMapper.selectLoginPageConfigurationList(loginPageConfiguration);
     }
 
     /**
      * 新增登录页面配置信息
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 结果
      */
     @Override
-    public int insertLoginPageConfiguration(LoginPageConfiguration loginPageConfiguration)
-    {
+    public int insertLoginPageConfiguration(LoginPageConfiguration loginPageConfiguration) {
         loginPageConfiguration.setCreateTime(DateUtils.getNowDate());
         return loginPageConfigurationMapper.insertLoginPageConfiguration(loginPageConfiguration);
     }
 
     /**
      * 修改登录页面配置信息
-     * 
+     *
      * @param loginPageConfiguration 登录页面配置信息
      * @return 结果
      */
     @Override
-    public int updateLoginPageConfiguration(LoginPageConfiguration loginPageConfiguration)
-    {
+    public int updateLoginPageConfiguration(LoginPageConfiguration loginPageConfiguration) {
         loginPageConfiguration.setUpdateTime(DateUtils.getNowDate());
         return loginPageConfigurationMapper.updateLoginPageConfiguration(loginPageConfiguration);
     }
 
     /**
      * 批量删除登录页面配置信息
-     * 
+     *
      * @param ids 需要删除的登录页面配置信息主键
      * @return 结果
      */
     @Override
-    public int deleteLoginPageConfigurationByIds(Long[] ids)
-    {
+    public int deleteLoginPageConfigurationByIds(Long[] ids) {
         return loginPageConfigurationMapper.deleteLoginPageConfigurationByIds(ids);
     }
 
     /**
      * 删除登录页面配置信息信息
-     * 
+     *
      * @param id 登录页面配置信息主键
      * @return 结果
      */
     @Override
-    public int deleteLoginPageConfigurationById(Long id)
-    {
+    public int deleteLoginPageConfigurationById(Long id) {
         return loginPageConfigurationMapper.deleteLoginPageConfigurationById(id);
     }
 }

+ 13 - 0
zkqy-system/src/main/java/com/zkqy/system/service/impl/SysMenuServiceImpl.java

@@ -334,6 +334,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
     public int deleteMenuById(Long menuId) {
         return menuMapper.deleteMenuById(menuId);
     }
+
     /**
      * 批量删除菜单管理信息
      *
@@ -398,6 +399,18 @@ public class SysMenuServiceImpl implements ISysMenuService {
         return i;
     }
 
+    @Override
+    public Long insertMenusByList(List<SysMenu> sysMenuList) {
+        sysMenuList.forEach(item -> {
+            menuMapper.insertMenu(item);
+            SysTenantMenu tenantMenu = new SysTenantMenu();
+            tenantMenu.setTenantId(item.getTenantId());
+            tenantMenu.setMenuId(item.getMenuId());
+            tenantMenuMapper.insertSysTenantMenu(tenantMenu);
+        });
+        return 1L;
+    }
+
     /**
      * 获取路由名称
      *

+ 70 - 39
zkqy-system/src/main/resources/mapper/system/LoginPageConfigurationMapper.xml

@@ -1,60 +1,87 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zkqy.system.mapper.LoginPageConfigurationMapper">
-    
+
     <resultMap type="LoginPageConfiguration" id="LoginPageConfigurationResult">
-        <result property="id"    column="id"    />
-        <result property="loginPageNumber"    column="login_page_number"    />
-        <result property="loginPageTitle"    column="login_page_title"    />
-        <result property="loginPageDescription"    column="login_page_description"    />
-        <result property="loginPageLogo"    column="login_page_logo"    />
-        <result property="loginPageBackgroundImage"    column="login_page_background_image"    />
-        <result property="windowTitle"    column="window_title"    />
-        <result property="windowLogo"    column="window_logo"    />
-        <result property="tenantId"    column="tenant_id"    />
-        <result property="remark"    column="remark"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createById"    column="create_by_id"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateById"    column="update_by_id"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="delFlag"    column="del_flag"    />
+        <result property="id" column="id"/>
+        <result property="loginPageNumber" column="login_page_number"/>
+        <result property="loginPageTitle" column="login_page_title"/>
+        <result property="loginPageDescription" column="login_page_description"/>
+        <result property="loginPageLogo" column="login_page_logo"/>
+        <result property="loginPageBackgroundImage" column="login_page_background_image"/>
+        <result property="windowTitle" column="window_title"/>
+        <result property="windowLogo" column="window_logo"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="remark" column="remark"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createById" column="create_by_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateById" column="update_by_id"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="loginType" column="login_type"/>
     </resultMap>
 
     <sql id="selectLoginPageConfigurationVo">
-        select id, login_page_number, login_page_title, login_page_description, login_page_logo, login_page_background_image, window_title, window_logo, tenant_id, remark, create_by, create_by_id, create_time, update_by, update_by_id, update_time, del_flag from login_page_configuration
+        select id,
+               login_page_number,
+               login_page_title,
+               login_page_description,
+               login_page_logo,
+               login_page_background_image,
+               window_title,
+               window_logo,
+               tenant_id,
+               remark,
+               create_by,
+               create_by_id,
+               create_time,
+               update_by,
+               update_by_id,
+               update_time,
+               del_flag,
+               login_type
+        from login_page_configuration
     </sql>
 
-    <select id="selectLoginPageConfigurationList" parameterType="LoginPageConfiguration" resultMap="LoginPageConfigurationResult">
+    <select id="selectLoginPageConfigurationList" parameterType="LoginPageConfiguration"
+            resultMap="LoginPageConfigurationResult">
         <include refid="selectLoginPageConfigurationVo"/>
-          where del_flag = '0'
-            <if test="loginPageNumber != null  and loginPageNumber != ''"> and login_page_number = #{loginPageNumber}</if>
-            <if test="loginPageTitle != null  and loginPageTitle != ''"> and login_page_title = #{loginPageTitle}</if>
-            <if test="loginPageDescription != null  and loginPageDescription != ''"> and login_page_description = #{loginPageDescription}</if>
-            <if test="loginPageLogo != null  and loginPageLogo != ''"> and login_page_logo = #{loginPageLogo}</if>
-            <if test="loginPageBackgroundImage != null  and loginPageBackgroundImage != ''"> and login_page_background_image = #{loginPageBackgroundImage}</if>
-            <if test="windowTitle != null  and windowTitle != ''"> and window_title = #{windowTitle}</if>
-            <if test="windowLogo != null  and windowLogo != ''"> and window_logo = #{windowLogo}</if>
-            <if test="tenantId != null "> and tenant_id = #{tenantId}</if>
+        where del_flag = '0'
+        <if test="loginPageNumber != null  and loginPageNumber != ''">and login_page_number = #{loginPageNumber}</if>
+        <if test="loginType != null  and loginType != ''">and login_type = #{loginType}</if>
+        <if test="loginPageTitle != null  and loginPageTitle != ''">and login_page_title = #{loginPageTitle}</if>
+        <if test="loginPageDescription != null  and loginPageDescription != ''">and login_page_description =
+            #{loginPageDescription}
+        </if>
+        <if test="loginPageLogo != null  and loginPageLogo != ''">and login_page_logo = #{loginPageLogo}</if>
+        <if test="loginPageBackgroundImage != null  and loginPageBackgroundImage != ''">and login_page_background_image
+            = #{loginPageBackgroundImage}
+        </if>
+        <if test="windowTitle != null  and windowTitle != ''">and window_title = #{windowTitle}</if>
+        <if test="windowLogo != null  and windowLogo != ''">and window_logo = #{windowLogo}</if>
+        <if test="tenantId != null ">and tenant_id = #{tenantId}</if>
     </select>
-    
+
     <select id="selectLoginPageConfigurationByTenantId" parameterType="Long" resultMap="LoginPageConfigurationResult">
         <include refid="selectLoginPageConfigurationVo"/>
-        where tenant_id = #{tenantId}
+        where tenant_id = #{tenantId} and login_type = #{loginType}
     </select>
 
-    <select id="selectLoginPageConfigurationByLoginPageNumber" parameterType="string" resultMap="LoginPageConfigurationResult">
+    <select id="selectLoginPageConfigurationByLoginPageNumber" parameterType="string"
+            resultMap="LoginPageConfigurationResult">
         <include refid="selectLoginPageConfigurationVo"/>
-        where login_page_number = #{loginPageNumber}
+        where login_page_number = #{loginPageNumber} and login_type = #{loginType}
     </select>
-        
+
     <insert id="insertLoginPageConfiguration" parameterType="LoginPageConfiguration">
         insert into login_page_configuration
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="loginPageNumber != null">login_page_number,</if>
+            <if test="loginType != null">login_type,</if>
             <if test="loginPageTitle != null">login_page_title,</if>
             <if test="loginPageDescription != null">login_page_description,</if>
             <if test="loginPageLogo != null">login_page_logo,</if>
@@ -67,9 +94,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createById != null">create_by_id,</if>
             <if test="createTime != null">create_time,</if>
             del_flag
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="loginPageNumber != null">#{loginPageNumber},</if>
+            <if test="loginType != null">#{loginType},</if>
             <if test="loginPageTitle != null">#{loginPageTitle},</if>
             <if test="loginPageDescription != null">#{loginPageDescription},</if>
             <if test="loginPageLogo != null">#{loginPageLogo},</if>
@@ -82,13 +110,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createById != null">#{createById},</if>
             <if test="createTime != null">#{createTime},</if>
             '0'
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateLoginPageConfiguration" parameterType="LoginPageConfiguration">
         update login_page_configuration
         <trim prefix="SET" suffixOverrides=",">
             <if test="loginPageNumber != null">login_page_number = #{loginPageNumber},</if>
+            <if test="loginType != null">login_type = #{loginType},</if>
             <if test="loginPageTitle != null">login_page_title = #{loginPageTitle},</if>
             <if test="loginPageDescription != null">login_page_description = #{loginPageDescription},</if>
             <if test="loginPageLogo != null">login_page_logo = #{loginPageLogo},</if>
@@ -106,7 +135,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <delete id="deleteLoginPageConfigurationById" parameterType="Long">
-        update login_page_configuration set del_flag = '2' where id = #{id}
+        update login_page_configuration
+        set del_flag = '2'
+        where id = #{id}
     </delete>
 
     <delete id="deleteLoginPageConfigurationByIds" parameterType="String">

+ 478 - 364
zkqy-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -1,371 +1,485 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zkqy.system.mapper.SysMenuMapper">
 
-	<resultMap type="SysMenu" id="SysMenuResult">
-		<id     property="menuId"         column="menu_id"        />
-		<result property="menuName"       column="menu_name"      />
-		<result property="parentName"     column="parent_name"    />
-		<result property="parentId"       column="parent_id"      />
-		<result property="orderNum"       column="order_num"      />
-		<result property="path"           column="path"           />
-		<result property="component"      column="component"      />
-		<result property="query"          column="query"          />
-		<result property="isFrame"        column="is_frame"       />
-		<result property="isCache"        column="is_cache"       />
-		<result property="menuType"       column="menu_type"      />
-		<result property="visible"        column="visible"        />
-		<result property="status"         column="status"         />
-		<result property="perms"          column="perms"          />
-		<result property="icon"           column="icon"           />
-		<result property="createBy"       column="create_by"      />
-		<result property="createTime"     column="create_time"    />
-		<result property="updateTime"     column="update_time"    />
-		<result property="updateBy"       column="update_by"      />
-		<result property="remark"         column="remark"         />
-		<result property="tenantName"     column="tenant_name"    />
-	</resultMap>
-
-	<sql id="selectMenuVo">
-		select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
-		from sys_menu
-	</sql>
-
-	<select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult">
-		SELECT
-		m.menu_id,
-		m.menu_name,
-		m.parent_id,
-		m.order_num,
-		m.path,
-		m.component,
-		m.`query`,
-		m.is_frame,
-		m.is_cache,
-		m.menu_type,
-		m.visible,
-		m.STATUS,
-		ifnull( m.perms, '' ) AS perms,
-		m.icon,
-		m.create_time,
-		t.tenant_name
-		FROM
-		sys_menu m
-		LEFT JOIN sys_user u on m.create_by = u.user_name
-		LEFT JOIN sys_tenant t on t.tenant_id = u.tenant_id
-		where
-		m.menu_id not in (select DISTINCT menu_id from sys_tenant_menu)
-		<if test="menuName != null and menuName != ''">
-			AND m.menu_name like concat('%', #{menuName}, '%')
-		</if>
-		<if test="visible != null and visible != ''">
-			AND m.visible = #{visible}
-		</if>
-		<if test="status != null and status != ''">
-			AND m.status = #{status}
-		</if>
-		<if test="tenantName != null and tenantName != ''">
-			AND t.tenant_name like concat('%', #{tenantName}, '%')
-		</if>
-		order by parent_id, order_num
-	</select>
-
-	<select id="selectTenantMenuList" parameterType="Long" resultMap="SysMenuResult">
-		select m.menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time, tm.`tenant_id`
-		from sys_menu m
-				 left join sys_tenant_menu tm on tm.menu_id = m.menu_id
-		where tm.tenant_id = #{tenantId}
-		  and m.menu_name not in ('数据引擎','流程引擎','表单引擎')
-		  and parent_id not in (select menu_id from  sys_menu where menu_name in ("数据引擎","流程引擎","表单引擎"))
-		order by parent_id, order_num
-
-	</select>
-
-	<select id="selectMenuTreeAll" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
-		from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0
-						  and m.menu_id not in (select DISTINCT menu_id from sys_tenant_menu)
-		order by m.parent_id, m.order_num
-	</select>
-
-	<select id="selectTenantMenuTreeAll" parameterType="Long" resultMap="SysMenuResult">
-		select distinct m.menu_id,
-						m.parent_id,
-						m.menu_name,
-						m.path,
-						m.component,
-						m.`query`,
-						m.visible,
-						m.status,
-						ifnull(m.perms, '') as perms,
-						m.is_frame,
-						m.is_cache,
-						m.menu_type,
-						m.icon,
-						m.order_num,
-						m.create_time
-		from sys_tenant_menu tm
-				 left join sys_menu m on
-			tm.menu_id = m.menu_id
-		where m.menu_type in ('M', 'C')
-		  and m.status = 0
-		  and tm.tenant_id = #{tenantId}
-		  and m.menu_name in ('数据引擎', '流程引擎', '表单引擎')
-
-
-		UNION
-
-
-		select distinct m.menu_id,
-						m.parent_id,
-						m.menu_name,
-						m.path,
-						m.component,
-						m.`query`,
-						m.visible,
-						m.status,
-						ifnull(m.perms, '') as perms,
-						m.is_frame,
-						m.is_cache,
-						m.menu_type,
-						m.icon,
-						m.order_num,
-						m.create_time
-		from sys_tenant_menu tm
-				 left join sys_menu m on
-			tm.menu_id = m.menu_id
-		where m.menu_type in ('M', 'C')
-		  and m.status = 0
-		  and tm.tenant_id = #{tenantId}
-		  and m.parent_id in (select menu_id
-							  from sys_menu
-							  where menu_name in ("数据引擎", "流程引擎", "表单引擎"))
-
-	</select>
-
-	<select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time,t.tenant_name
-		from sys_menu m
-		left join sys_role_menu rm on m.menu_id = rm.menu_id
-		left join sys_user_role ur on rm.role_id = ur.role_id
-		left join sys_role ro on ur.role_id = ro.role_id
-		LEFT JOIN sys_user u on m.create_by = u.user_name
-		LEFT JOIN sys_tenant t on t.tenant_id = u.tenant_id
-		where ur.user_id = #{params.userId}
-		<if test="menuName != null and menuName != ''">
-			AND m.menu_name like concat('%', #{menuName}, '%')
-		</if>
-		<if test="visible != null and visible != ''">
-			AND m.visible = #{visible}
-		</if>
-		<if test="status != null and status != ''">
-			AND m.status = #{status}
-		</if>
-		<if test="tenantName != null and tenantName != ''">
-			AND t.tenant_name like concat('%', #{tenantName}, '%')
-		</if>
-		order by m.parent_id, m.order_num
-	</select>
-
-	<select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
-		from sys_menu m
-				 left join sys_role_menu rm on m.menu_id = rm.menu_id
-				 left join sys_user_role ur on rm.role_id = ur.role_id
-				 left join sys_role ro on ur.role_id = ro.role_id
-				 left join sys_user u on ur.user_id = u.user_id
-		where u.user_id = #{userId} and m.menu_type in ('M', 'C') and m.status = 0  AND ro.status = 0
-		order by m.parent_id, m.order_num
-	</select>
-
-	<select id="selectMenuListByRoleId" resultType="Long">
-		select m.menu_id
-		from sys_menu m
-		left join sys_role_menu rm on m.menu_id = rm.menu_id
-		where rm.role_id = #{roleId}
-		<if test="menuCheckStrictly">
-			and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId})
-		</if>
-		order by m.parent_id, m.order_num
-	</select>
-
-	<select id="selectMenuPerms" resultType="String">
-		select distinct m.perms
-		from sys_menu m
-				 left join sys_role_menu rm on m.menu_id = rm.menu_id
-				 left join sys_user_role ur on rm.role_id = ur.role_id
-	</select>
-
-	<select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
-		select distinct m.perms
-		from sys_menu m
-				 left join sys_role_menu rm on m.menu_id = rm.menu_id
-				 left join sys_user_role ur on rm.role_id = ur.role_id
-				 left join sys_role r on r.role_id = ur.role_id
-		where m.status = '0' and r.status = '0' and ur.user_id = #{userId}
-	</select>
-
-	<select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String">
-		select distinct m.perms
-		from sys_menu m
-				 left join sys_role_menu rm on m.menu_id = rm.menu_id
-		where m.status = '0' and rm.role_id = #{roleId}
-	</select>
-
-	<select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult">
-		<include refid="selectMenuVo"/>
-		where menu_id = #{menuId}
-	</select>
-
-	<select id="hasChildByMenuId" resultType="Integer">
-		select count(1) from sys_menu where parent_id = #{menuId}
-	</select>
-
-	<select id="hasChildByMenuIdBatchRemove" resultType="Integer" parameterType="java.util.List">
-		select count(1) from sys_menu where parent_id in
-		<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
-			#{item}
-		</foreach>
-	</select>
-
-	<!--	<include refid="selectMenuVo"/>-->
-	<select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
-		SELECT sys.menu_id,
-		sys.menu_name,
-		sys.parent_id,
-		sys.order_num,
-		sys.path,
-		sys.component,
-		sys.`query`,
-		sys.is_frame,
-		sys.is_cache,
-		sys.menu_type,
-		sys.visible,
-		sys.STATUS,
-		ifnull(sys.perms, '') AS perms,
-		sys.icon,
-		sys.create_time
-		FROM sys_menu AS sys
-		LEFT JOIN sys_tenant_menu AS tenant ON sys.menu_id = tenant.menu_id
-		WHERE sys.menu_name = #{menuName}
-		AND sys.parent_id = #{parentId}
-		<if test="tenantId != null and tenantId != ''">
-			AND tenant.tenant_id = #{tenantId}
-		</if>
-		LIMIT 1
-	</select>
-
-	<update id="updateMenu" parameterType="SysMenu">
-		update sys_menu
-		<set>
-			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
-			<if test="parentId != null">parent_id = #{parentId},</if>
-			<if test="orderNum != null">order_num = #{orderNum},</if>
-			<if test="path != null and path != ''">path = #{path},</if>
-			<if test="component != null">component = #{component},</if>
-			<if test="query != null">`query` = #{query},</if>
-			<if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if>
-			<if test="isCache != null and isCache != ''">is_cache = #{isCache},</if>
-			<if test="menuType != null and menuType != ''">menu_type = #{menuType},</if>
-			<if test="visible != null">visible = #{visible},</if>
-			<if test="status != null">status = #{status},</if>
-			<if test="perms !=null">perms = #{perms},</if>
-			<if test="icon !=null and icon != ''">icon = #{icon},</if>
-			<if test="remark != null and remark != ''">remark = #{remark},</if>
-			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-			update_time = sysdate()
-		</set>
-		where menu_id = #{menuId}
-	</update>
-
-	<insert id="insertMenu" parameterType="SysMenu" useGeneratedKeys="true" keyProperty="menuId">
-		insert into sys_menu(
-		<if test="menuId != null and menuId != 0">menu_id,</if>
-		<if test="parentId != null and parentId != 0">parent_id,</if>
-		<if test="menuName != null and menuName != ''">menu_name,</if>
-		<if test="orderNum != null">order_num,</if>
-		<if test="path != null and path != ''">path,</if>
-		<if test="component != null and component != ''">component,</if>
-		<if test="query != null and query != ''">`query`,</if>
-		<if test="isFrame != null and isFrame != ''">is_frame,</if>
-		<if test="isCache != null and isCache != ''">is_cache,</if>
-		<if test="menuType != null and menuType != ''">menu_type,</if>
-		<if test="visible != null">visible,</if>
-		<if test="status != null">status,</if>
-		<if test="perms !=null and perms != ''">perms,</if>
-		<if test="icon != null and icon != ''">icon,</if>
-		<if test="remark != null and remark != ''">remark,</if>
-		<if test="createBy != null and createBy != ''">create_by,</if>
-		create_time
-		)values(
-		<if test="menuId != null and menuId != 0">#{menuId},</if>
-		<if test="parentId != null and parentId != 0">#{parentId},</if>
-		<if test="menuName != null and menuName != ''">#{menuName},</if>
-		<if test="orderNum != null">#{orderNum},</if>
-		<if test="path != null and path != ''">#{path},</if>
-		<if test="component != null and component != ''">#{component},</if>
-		<if test="query != null and query != ''">#{query},</if>
-		<if test="isFrame != null and isFrame != ''">#{isFrame},</if>
-		<if test="isCache != null and isCache != ''">#{isCache},</if>
-		<if test="menuType != null and menuType != ''">#{menuType},</if>
-		<if test="visible != null">#{visible},</if>
-		<if test="status != null">#{status},</if>
-		<if test="perms !=null and perms != ''">#{perms},</if>
-		<if test="icon != null and icon != ''">#{icon},</if>
-		<if test="remark != null and remark != ''">#{remark},</if>
-		<if test="createBy != null and createBy != ''">#{createBy},</if>
-		sysdate()
-		)
-	</insert>
-
-	<delete id="deleteMenuById" parameterType="Long">
-		delete from sys_menu where menu_id = #{menuId}
-	</delete>
-
-	<delete id="batchDeleteMenuById" parameterType="java.util.List">
-		delete from sys_menu where menu_id in
-		<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
-			#{item}
-		</foreach>
-	</delete>
-
-	<select id="getMenuList" resultMap="SysMenuResult">
-		SELECT
-			m.menu_id,
-			m.menu_name,
-			m.parent_id,
-			m.order_num,
-			m.path,
-			m.component,
-			m.`query`,
-			m.is_frame,
-			m.is_cache,
-			m.menu_type,
-			m.visible,
-			m.STATUS,
-			ifnull( m.perms, '' ) AS perms,
-			m.icon,
-			m.create_time
-		FROM
-			sys_menu m
-				join sys_tenant_menu tm on m.menu_id = tm.menu_id
-		where m.menu_type != 'F' and m.STATUS = '0' and tm.tenant_id = #{tenantId}
-	</select>
-
-	<select id="selectMenuByPath" parameterType="string" resultMap="SysMenuResult">
-		<include refid="selectMenuVo"/>
-		where path = #{path}
-	</select>
-
-	<select id="selectMenusByIds" resultMap="SysMenuResult">
-		<include refid="selectMenuVo"></include>
-		where menu_id in
-		<foreach collection="list" item="id" open="(" close=")" separator=",">
-			#{id}
-		</foreach>
-	</select>
+    <resultMap type="SysMenu" id="SysMenuResult">
+        <id property="menuId" column="menu_id"/>
+        <result property="menuName" column="menu_name"/>
+        <result property="parentName" column="parent_name"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="orderNum" column="order_num"/>
+        <result property="path" column="path"/>
+        <result property="component" column="component"/>
+        <result property="query" column="query"/>
+        <result property="isFrame" column="is_frame"/>
+        <result property="isCache" column="is_cache"/>
+        <result property="menuType" column="menu_type"/>
+        <result property="visible" column="visible"/>
+        <result property="status" column="status"/>
+        <result property="perms" column="perms"/>
+        <result property="icon" column="icon"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="remark" column="remark"/>
+        <result property="tenantName" column="tenant_name"/>
+    </resultMap>
+
+    <sql id="selectMenuVo">
+        select menu_id,
+               menu_name,
+               parent_id,
+               order_num,
+               path,
+               component,
+               `query`,
+               is_frame,
+               is_cache,
+               menu_type,
+               visible,
+               status,
+               ifnull(perms, '') as perms,
+               icon,
+               create_time
+        from sys_menu
+    </sql>
+
+    <select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult">
+        SELECT
+        m.menu_id,
+        m.menu_name,
+        m.parent_id,
+        m.order_num,
+        m.path,
+        m.component,
+        m.`query`,
+        m.is_frame,
+        m.is_cache,
+        m.menu_type,
+        m.visible,
+        m.STATUS,
+        ifnull( m.perms, '' ) AS perms,
+        m.icon,
+        m.create_time,
+        t.tenant_name
+        FROM
+        sys_menu m
+        LEFT JOIN sys_user u on m.create_by = u.user_name
+        LEFT JOIN sys_tenant t on t.tenant_id = u.tenant_id
+        where
+        m.menu_id not in (select DISTINCT menu_id from sys_tenant_menu)
+        <if test="menuName != null and menuName != ''">
+            AND m.menu_name like concat('%', #{menuName}, '%')
+        </if>
+        <if test="visible != null and visible != ''">
+            AND m.visible = #{visible}
+        </if>
+        <if test="status != null and status != ''">
+            AND m.status = #{status}
+        </if>
+        <if test="tenantName != null and tenantName != ''">
+            AND t.tenant_name like concat('%', #{tenantName}, '%')
+        </if>
+        order by parent_id, order_num
+    </select>
+
+    <select id="selectTenantMenuList" parameterType="Long" resultMap="SysMenuResult">
+        select m.menu_id,
+               menu_name,
+               parent_id,
+               order_num,
+               path,
+               component,
+               `query`,
+               is_frame,
+               is_cache,
+               menu_type,
+               visible,
+               status,
+               ifnull(perms, '') as perms,
+               icon,
+               create_time,
+               tm.`tenant_id`
+        from sys_menu m
+                 left join sys_tenant_menu tm on tm.menu_id = m.menu_id
+        where tm.tenant_id = #{tenantId}
+          and m.menu_name not in ('数据引擎', '流程引擎', '表单引擎')
+          and parent_id not in (select menu_id from sys_menu where menu_name in ("数据引擎", "流程引擎", "表单引擎"))
+        order by parent_id, order_num
+
+    </select>
+
+    <select id="selectMenuTreeAll" resultMap="SysMenuResult">
+        select distinct m.menu_id,
+                        m.parent_id,
+                        m.menu_name,
+                        m.path,
+                        m.component,
+                        m.`query`,
+                        m.visible,
+                        m.status,
+                        ifnull(m.perms, '') as perms,
+                        m.is_frame,
+                        m.is_cache,
+                        m.menu_type,
+                        m.icon,
+                        m.order_num,
+                        m.create_time
+        from sys_menu m
+        where m.menu_type in ('M', 'C')
+          and m.status = 0
+          and m.menu_id not in (select DISTINCT menu_id from sys_tenant_menu)
+        order by m.parent_id, m.order_num
+    </select>
+
+    <select id="selectTenantMenuTreeAll" parameterType="Long" resultMap="SysMenuResult">
+        select distinct m.menu_id,
+                        m.parent_id,
+                        m.menu_name,
+                        m.path,
+                        m.component,
+                        m.`query`,
+                        m.visible,
+                        m.status,
+                        ifnull(m.perms, '') as perms,
+                        m.is_frame,
+                        m.is_cache,
+                        m.menu_type,
+                        m.icon,
+                        m.order_num,
+                        m.create_time
+        from sys_tenant_menu tm
+                 left join sys_menu m on
+            tm.menu_id = m.menu_id
+        where m.menu_type in ('M', 'C')
+          and m.status = 0
+          and tm.tenant_id = #{tenantId}
+          and m.menu_name in ('数据引擎', '流程引擎', '表单引擎')
+
+
+        UNION
+
+
+        select distinct m.menu_id,
+                        m.parent_id,
+                        m.menu_name,
+                        m.path,
+                        m.component,
+                        m.`query`,
+                        m.visible,
+                        m.status,
+                        ifnull(m.perms, '') as perms,
+                        m.is_frame,
+                        m.is_cache,
+                        m.menu_type,
+                        m.icon,
+                        m.order_num,
+                        m.create_time
+        from sys_tenant_menu tm
+                 left join sys_menu m on
+            tm.menu_id = m.menu_id
+        where m.menu_type in ('M', 'C')
+          and m.status = 0
+          and tm.tenant_id = #{tenantId}
+          and m.parent_id in (select menu_id
+                              from sys_menu
+                              where menu_name in ("数据引擎", "流程引擎", "表单引擎"))
+
+    </select>
+
+    <select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
+        select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status,
+        ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num,
+        m.create_time,t.tenant_name
+        from sys_menu m
+        left join sys_role_menu rm on m.menu_id = rm.menu_id
+        left join sys_user_role ur on rm.role_id = ur.role_id
+        left join sys_role ro on ur.role_id = ro.role_id
+        LEFT JOIN sys_user u on m.create_by = u.user_name
+        LEFT JOIN sys_tenant t on t.tenant_id = u.tenant_id
+        where ur.user_id = #{params.userId}
+        <if test="menuName != null and menuName != ''">
+            AND m.menu_name like concat('%', #{menuName}, '%')
+        </if>
+        <if test="visible != null and visible != ''">
+            AND m.visible = #{visible}
+        </if>
+        <if test="status != null and status != ''">
+            AND m.status = #{status}
+        </if>
+        <if test="tenantName != null and tenantName != ''">
+            AND t.tenant_name like concat('%', #{tenantName}, '%')
+        </if>
+        order by m.parent_id, m.order_num
+    </select>
+
+    <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
+        select distinct m.menu_id,
+                        m.parent_id,
+                        m.menu_name,
+                        m.path,
+                        m.component,
+                        m.`query`,
+                        m.visible,
+                        m.status,
+                        ifnull(m.perms, '') as perms,
+                        m.is_frame,
+                        m.is_cache,
+                        m.menu_type,
+                        m.icon,
+                        m.order_num,
+                        m.create_time
+        from sys_menu m
+                 left join sys_role_menu rm on m.menu_id = rm.menu_id
+                 left join sys_user_role ur on rm.role_id = ur.role_id
+                 left join sys_role ro on ur.role_id = ro.role_id
+                 left join sys_user u on ur.user_id = u.user_id
+        where u.user_id = #{userId}
+          and m.menu_type in ('M', 'C')
+          and m.status = 0
+          AND ro.status = 0
+        order by m.parent_id, m.order_num
+    </select>
+
+    <select id="selectMenuListByRoleId" resultType="Long">
+        select m.menu_id
+        from sys_menu m
+        left join sys_role_menu rm on m.menu_id = rm.menu_id
+        where rm.role_id = #{roleId}
+        <if test="menuCheckStrictly">
+            and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id =
+            rm.menu_id and rm.role_id = #{roleId})
+        </if>
+        order by m.parent_id, m.order_num
+    </select>
+
+    <select id="selectMenuPerms" resultType="String">
+        select distinct m.perms
+        from sys_menu m
+                 left join sys_role_menu rm on m.menu_id = rm.menu_id
+                 left join sys_user_role ur on rm.role_id = ur.role_id
+    </select>
+
+    <select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
+        select distinct m.perms
+        from sys_menu m
+                 left join sys_role_menu rm on m.menu_id = rm.menu_id
+                 left join sys_user_role ur on rm.role_id = ur.role_id
+                 left join sys_role r on r.role_id = ur.role_id
+        where m.status = '0'
+          and r.status = '0'
+          and ur.user_id = #{userId}
+    </select>
+
+    <select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String">
+        select distinct m.perms
+        from sys_menu m
+                 left join sys_role_menu rm on m.menu_id = rm.menu_id
+        where m.status = '0'
+          and rm.role_id = #{roleId}
+    </select>
+
+    <select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult">
+        <include refid="selectMenuVo"/>
+        where menu_id = #{menuId}
+    </select>
+
+    <select id="hasChildByMenuId" resultType="Integer">
+        select count(1)
+        from sys_menu
+        where parent_id = #{menuId}
+    </select>
+
+    <select id="hasChildByMenuIdBatchRemove" resultType="Integer" parameterType="java.util.List">
+        select count(1) from sys_menu where parent_id in
+        <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </select>
+
+    <!--	<include refid="selectMenuVo"/>-->
+    <select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
+        SELECT sys.menu_id,
+        sys.menu_name,
+        sys.parent_id,
+        sys.order_num,
+        sys.path,
+        sys.component,
+        sys.`query`,
+        sys.is_frame,
+        sys.is_cache,
+        sys.menu_type,
+        sys.visible,
+        sys.STATUS,
+        ifnull(sys.perms, '') AS perms,
+        sys.icon,
+        sys.create_time
+        FROM sys_menu AS sys
+        LEFT JOIN sys_tenant_menu AS tenant ON sys.menu_id = tenant.menu_id
+        WHERE sys.menu_name = #{menuName}
+        AND sys.parent_id = #{parentId}
+        <if test="tenantId != null and tenantId != ''">
+            AND tenant.tenant_id = #{tenantId}
+        </if>
+        LIMIT 1
+    </select>
+
+    <update id="updateMenu" parameterType="SysMenu">
+        update sys_menu
+        <set>
+            <if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="orderNum != null">order_num = #{orderNum},</if>
+            <if test="path != null and path != ''">path = #{path},</if>
+            <if test="component != null">component = #{component},</if>
+            <if test="query != null">`query` = #{query},</if>
+            <if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if>
+            <if test="isCache != null and isCache != ''">is_cache = #{isCache},</if>
+            <if test="menuType != null and menuType != ''">menu_type = #{menuType},</if>
+            <if test="visible != null">visible = #{visible},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="perms !=null">perms = #{perms},</if>
+            <if test="icon !=null and icon != ''">icon = #{icon},</if>
+            <if test="remark != null and remark != ''">remark = #{remark},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            update_time = sysdate()
+        </set>
+        where menu_id = #{menuId}
+    </update>
+
+    <insert id="insertMenu" parameterType="SysMenu" useGeneratedKeys="true" keyProperty="menuId">
+        insert into sys_menu(
+        <if test="menuId != null and menuId != 0">menu_id,</if>
+        <if test="parentId != null and parentId != 0">parent_id,</if>
+        <if test="menuName != null and menuName != ''">menu_name,</if>
+        <if test="orderNum != null">order_num,</if>
+        <if test="path != null and path != ''">path,</if>
+        <if test="component != null and component != ''">component,</if>
+        <if test="query != null and query != ''">`query`,</if>
+        <if test="isFrame != null and isFrame != ''">is_frame,</if>
+        <if test="isCache != null and isCache != ''">is_cache,</if>
+        <if test="menuType != null and menuType != ''">menu_type,</if>
+        <if test="visible != null">visible,</if>
+        <if test="status != null">status,</if>
+        <if test="perms !=null and perms != ''">perms,</if>
+        <if test="icon != null and icon != ''">icon,</if>
+        <if test="remark != null and remark != ''">remark,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        create_time
+        )values(
+        <if test="menuId != null and menuId != 0">#{menuId},</if>
+        <if test="parentId != null and parentId != 0">#{parentId},</if>
+        <if test="menuName != null and menuName != ''">#{menuName},</if>
+        <if test="orderNum != null">#{orderNum},</if>
+        <if test="path != null and path != ''">#{path},</if>
+        <if test="component != null and component != ''">#{component},</if>
+        <if test="query != null and query != ''">#{query},</if>
+        <if test="isFrame != null and isFrame != ''">#{isFrame},</if>
+        <if test="isCache != null and isCache != ''">#{isCache},</if>
+        <if test="menuType != null and menuType != ''">#{menuType},</if>
+        <if test="visible != null">#{visible},</if>
+        <if test="status != null">#{status},</if>
+        <if test="perms !=null and perms != ''">#{perms},</if>
+        <if test="icon != null and icon != ''">#{icon},</if>
+        <if test="remark != null and remark != ''">#{remark},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        sysdate()
+        )
+    </insert>
+
+    <delete id="deleteMenuById" parameterType="Long">
+        delete
+        from sys_menu
+        where menu_id = #{menuId}
+    </delete>
+
+    <delete id="batchDeleteMenuById" parameterType="java.util.List">
+        delete from sys_menu where menu_id in
+        <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </delete>
+
+    <select id="getMenuList" resultMap="SysMenuResult">
+        SELECT m.menu_id,
+               m.menu_name,
+               m.parent_id,
+               m.order_num,
+               m.path,
+               m.component,
+               m.`query`,
+               m.is_frame,
+               m.is_cache,
+               m.menu_type,
+               m.visible,
+               m.STATUS,
+               ifnull(m.perms, '') AS perms,
+               m.icon,
+               m.create_time
+        FROM sys_menu m
+                 join sys_tenant_menu tm on m.menu_id = tm.menu_id
+        where m.menu_type != 'F' and m.STATUS = '0' and tm.tenant_id = #{tenantId}
+    </select>
+
+    <select id="selectMenuByPath" parameterType="string" resultMap="SysMenuResult">
+        <include refid="selectMenuVo"/>
+        where path = #{path}
+    </select>
+
+    <select id="selectMenusByIds" resultMap="SysMenuResult">
+        <include refid="selectMenuVo"></include>
+        where menu_id in
+        <foreach collection="list" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
+
+
+    <insert id="insertMenuBatch" parameterType="java.util.List">
+        INSERT INTO sys_menu (
+        menu_id,
+        parent_id,
+        menu_name,
+        order_num,
+        path,
+        component,
+        `query`,
+        is_frame,
+        is_cache,
+        menu_type,
+        visible,
+        status,
+        perms,
+        icon,
+        remark,
+        create_by,
+        create_time
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.menuId},
+            #{item.parentId},
+            #{item.menuName},
+            #{item.orderNum},
+            #{item.path},
+            #{item.component},
+            #{item.query},
+            #{item.isFrame},
+            #{item.isCache},
+            #{item.menuType},
+            #{item.visible},
+            #{item.status},
+            #{item.perms},
+            #{item.icon},
+            #{item.remark},
+            #{item.createBy},
+            sysdate()
+            )
+        </foreach>
+    </insert>
 
 </mapper>
 

+ 1 - 1
zkqy-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -257,7 +257,7 @@
     <select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
         select user_id, user_name
         from sys_user
-        where user_name = #{userName}
+        where  user_name = #{userName}
           and del_flag = '0' limit 1
     </select>
 

+ 3 - 3
zkqy-ui/.env.development

@@ -10,14 +10,14 @@ VUE_APP_BASE_API = '/dev-api'
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 
-# #数据引擎模块IP
+# # #数据引擎模块IP
 # VUE_APP_BASE_API2 = 'http://192.168.110.76:8099/'
 
 
-# #表单引擎模块IP
+# # #表单引擎模块IP
 # VUE_APP_BASE_API3 = 'http://192.168.110.76:8088/'
 
-# #流程引擎模块IP
+# # #流程引擎模块IP
 # VUE_APP_BASE_API4 = 'http://192.168.110.76:8055/'
 
 

+ 3 - 0
zkqy-ui/.env.production

@@ -13,3 +13,6 @@ VUE_APP_BASE_API2 = 'http://62.234.61.92:8099/'
 VUE_APP_BASE_API3 = 'http://62.234.61.92:8088/'
 #流程引擎模块IP
 VUE_APP_BASE_API4 = 'http://62.234.61.92:8055/'
+
+# 图片路径
+VUE_APP_BASE_IMG_API = 'http://62.234.61.92:1101/dev-api'

+ 20 - 2
zkqy-ui/babel.config.js

@@ -1,7 +1,7 @@
 module.exports = {
   presets: [
     // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
-    '@vue/cli-plugin-babel/preset'
+    '@vue/cli-plugin-babel/preset', '@babel/preset-env'
   ],
   'env': {
     'development': {
@@ -21,4 +21,22 @@ module.exports = {
       'vant',
     ],
   ],
-}
+}
+
+// module.exports = {
+//   presets: [
+//     '@vue/babel-preset-jsx',
+//     [
+//       '@babel/preset-env',
+//       {
+//         'useBuiltIns': 'entry',
+//         'corejs': 3
+//       }
+//     ]
+//   ],
+//   'env': {
+//     'development': {
+//       'plugins': ['dynamic-import-node']
+//     }
+//   }
+// }

+ 3 - 0
zkqy-ui/package.json

@@ -109,10 +109,13 @@
     "xml2js": "^0.6.2"
   },
   "devDependencies": {
+    "@babel/core": "^7.24.0",
+    "@babel/preset-env": "^7.24.0",
     "@vue/cli-plugin-babel": "4.4.6",
     "@vue/cli-plugin-eslint": "4.4.6",
     "@vue/cli-service": "4.4.6",
     "babel-eslint": "10.1.0",
+    "babel-loader": "^9.1.3",
     "babel-plugin-dynamic-import-node": "2.3.3",
     "babel-plugin-import": "^1.13.8",
     "chalk": "4.1.0",

+ 9 - 0
zkqy-ui/src/api/menu.js

@@ -21,4 +21,13 @@ export function addMenu(data) {
     method: 'post',
     data: data
   })
+}
+
+// 新增菜单权限
+export function tbnHasPerms(data) {
+  return request({
+    url: '/system/menu/tbnHasPerms',
+    method: 'post',
+    data: data
+  })
 }

+ 7 - 5
zkqy-ui/src/api/system/configuration.js

@@ -10,10 +10,11 @@ export function listConfiguration(query) {
 }
 
 // 查询登录页面配置信息详细
-export function getConfiguration(id) {
+export function getConfiguration(params) {
   return request({
-    url: '/system/configuration/' + id,
-    method: 'get'
+    url: '/system/configuration/getInfoByTenantId',
+    method: 'get',
+    params: params
   })
 }
 
@@ -46,7 +47,8 @@ export function delConfiguration(id) {
 // 登录页查询配置接口
 export function getLoginPageConfigurationInfo(params) {
   return request({
-    url: `/system/configuration/queryLoginPageConfigurationInfo/${params}`,
-    method: 'get'
+    url: `/system/configuration/queryLoginPageConfigurationInfo`,
+    method: 'get',
+    params: params
   })
 }

+ 11 - 0
zkqy-ui/src/api/tablelist/commonTable.js

@@ -236,3 +236,14 @@ export function btnCommonApi(data) {
     baseURL: process.env.VUE_APP_BASE_API3
   })
 }
+
+// 动态表格添加默认按钮数据
+
+export function insertByDefaultBtn(data) {
+  return request({
+    url: '/system/btn/insertByDefaultBtn',
+    method: 'post',
+    data: data,
+    baseURL: process.env.VUE_APP_BASE_API3
+  })
+}

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_biaoqian.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M457.93 894.08L105.09 541.23l360.12-360.12h352.85v352.85L457.94 894.08zM161.66 541.23l296.28 296.28 320.12-320.12V221.11H481.77L161.66 541.23z" fill="#333333" /><path d="M611.38 464.25c-19.59 0-39.18-7.46-54.09-22.37-29.83-29.83-29.83-78.36 0-108.19s78.36-29.83 108.19 0 29.83 78.36 0 108.19c-14.91 14.91-34.5 22.37-54.09 22.37z m0-112.95c-9.35 0-18.69 3.56-25.81 10.67-14.23 14.23-14.23 37.39 0 51.62 14.23 14.23 37.39 14.23 51.62 0 14.23-14.23 14.23-37.39 0-51.62-7.11-7.11-16.46-10.67-25.81-10.67z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_chima.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M900 682H146V377h754v305z m-714-40h674V417H186v225z" fill="#333333" /><path d="M505.63 517h40v134.18h-40zM751.63 517h40v134.18h-40zM259.63 517h40v134.18h-40zM382.63 569h40v82.18h-40zM628.63 566h40v88.88h-40z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_diannao.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M854.38 694h-684V239h684v455z m-644-40h604V279h-604v375zM420.88 746h183v40h-183z" fill="#333333" /><path d="M625.65 584.89L439.22 398.46 309.03 528.64l-28.28-28.28 158.47-158.47 186.43 186.43 90.07-90.06L744 466.54 625.65 584.89z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_duanxiantixing.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M509.43 859c-46.9 0-92.41-9.19-135.27-27.32-41.38-17.5-78.54-42.56-110.45-74.46s-56.96-69.07-74.46-110.45c-18.13-42.85-27.32-88.37-27.32-135.27s9.19-92.41 27.32-135.27c17.5-41.38 42.56-78.54 74.46-110.45s69.07-56.96 110.45-74.46C417.01 173.19 462.53 164 509.43 164s92.41 9.19 135.27 27.32c41.38 17.5 78.54 42.56 110.45 74.46s56.96 69.07 74.46 110.45c18.13 42.85 27.32 88.37 27.32 135.27s-9.19 92.41-27.32 135.27c-17.5 41.38-42.56 78.54-74.46 110.45s-69.07 56.96-110.45 74.46C601.85 849.81 556.33 859 509.43 859z m0-655c-82.14 0-159.36 31.99-217.44 90.06-58.08 58.08-90.06 135.3-90.06 217.44s31.99 159.36 90.06 217.44C350.07 787.02 427.29 819 509.43 819s159.36-31.99 217.44-90.06 90.06-135.3 90.06-217.44-31.99-159.36-90.06-217.44S591.57 204 509.43 204z" fill="#333333" /><path d="M509.43 735c-19.57 0-35.5-15.92-35.5-35.5s15.93-35.5 35.5-35.5 35.5 15.92 35.5 35.5-15.92 35.5-35.5 35.5z m0-40c-2.48 0-4.5 2.02-4.5 4.5s2.02 4.5 4.5 4.5 4.5-2.02 4.5-4.5-2.02-4.5-4.5-4.5zM489.43 315.9h40v299.19h-40z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_duihua.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M289.66 849.32L291.08 722H139V245h746v477H590.57L289.66 849.32zM179 682h152.53l-1.19 106.68L582.46 682H845V285H179v397z" fill="#333333" /><path d="M281 399h299.19v40H281zM455.5 541.5h299.19v40H455.5zM638.23 399h116.09v40H638.23zM281.23 542h116.09v40H281.23z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_fuzhi.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M673.23 731.07H197.76V181h475.46v550.07z m-435.46-40h395.46V221H237.76v470.07z" fill="#333333" /><path d="M827.24 854H351.77V711.07h40V814h395.47V343.93H653.02v-40h174.22V854z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_gouwu.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M855.32 825H173.78l73.07-428.4h542.39L855.32 825z m-634.14-40h587.5l-53.74-348.4H280.61L221.18 785zM692.16 358.42h-40c0-75.77-61.64-137.42-137.42-137.42s-137.42 61.64-137.42 137.42h-40c0-97.83 79.59-177.42 177.42-177.42s177.42 79.59 177.42 177.42z" fill="#333333" /><path d="M331.48 498.91H698v40H331.48z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_huishou.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M823 407H203.04V261.72H823V407z m-579.96-40H783v-65.28H243.04V367z" fill="#333333" /><path d="M648.34 301.72H377.69V160h270.65v141.72z m-230.65-40h190.65V200H417.69v61.72zM745.41 869.59H280.63V367h464.78v502.59z m-424.78-40h384.78V407H320.63v422.59z" fill="#333333" /><path d="M415.7 490.9h40v253.9h-40zM569.96 490.9h40v253.9h-40z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_jiesuo.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M808 850.53H215.48v-397H808v397z m-552.52-40H768v-317H255.48v317z" fill="#333333" /><path d="M491.74 583.38h40v137.29h-40zM359.48 411.68h-40v-99.4c0-106.01 86.25-192.26 192.26-192.26S704 206.27 704 312.28h-40c0-83.96-68.3-152.26-152.26-152.26s-152.26 68.3-152.26 152.26v99.4z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_rili.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M816.14 799H206.9V264.78h609.24V799zM246.9 759h529.24V304.78H246.9V759z" fill="#333333" /><path d="M226.9 392.75h569.24v40H226.9zM347.53 223h40v123.56h-40zM636.57 223h40v123.56h-40zM550.25 687.99h-40V550.66l-29.6 3.16-4.24-39.77 73.84-7.88v181.82z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_shoubiao.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M720.19 745.84H304.48V261.61h415.7v484.23z m-375.7-40h335.7V301.61H344.48v404.23zM404.23 795h216.21v40H404.23zM404.23 176h216.21v40H404.23z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_shouji.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M756.83 879H273.47V151h483.35v728z m-443.35-40h403.35V191H313.47v648z" fill="#333333" /><path d="M428.09 754.85h169.23v40H428.09z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_sousuo.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M341.74 473.35h276.59v40H341.74z" fill="#333333" /><path d="M460.03 355.06h40v276.59h-40z" fill="#333333" /><path d="M480.03 787.94c-78.81 0-152.9-30.69-208.63-86.42-55.73-55.73-86.42-129.82-86.42-208.63s30.69-152.9 86.42-208.63 129.82-86.42 208.63-86.42 152.9 30.69 208.63 86.42c55.73 55.73 86.42 129.82 86.42 208.63s-30.69 152.9-86.42 208.63-129.82 86.42-208.63 86.42z m0-550.09c-68.13 0-132.17 26.53-180.35 74.7s-74.7 112.22-74.7 180.34 26.53 132.17 74.7 180.34 112.22 74.7 180.35 74.7 132.17-26.53 180.34-74.7c48.17-48.17 74.7-112.22 74.7-180.34s-26.53-132.17-74.7-180.34c-48.17-48.17-112.22-74.7-180.34-74.7z" fill="#333333" /><path d="M661.025 701.542l28.339-28.23 166.803 167.446-28.338 28.23z" fill="#333333" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/a-051_suoding.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M806 850.53H213.48v-397H806v397z m-552.52-40H766v-317H253.48v317z" fill="#333333" /><path d="M489.74 583.38h40v137.29h-40zM702 411.68h-40v-99.4c0-83.96-68.3-152.26-152.26-152.26s-152.26 68.3-152.26 152.26v99.4h-40v-99.4c0-106.01 86.25-192.26 192.26-192.26S702 206.27 702 312.28v99.4z" fill="#333333" /></svg>

File diff ditekan karena terlalu besar
+ 0 - 0
zkqy-ui/src/assets/icons/svg/dianzan.svg


+ 1 - 0
zkqy-ui/src/assets/icons/svg/guankan.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512.3 276.9c-228.4 0-374 178.5-393.8 255.9 19.3 78.2 165.5 256 393.8 256s373.8-176.5 393.9-256c-19.7-78.2-165.6-255.9-393.9-255.9z m0 452.9c-182.3 0-303.2-131.1-331.5-196.7C209.6 467.4 331.2 336 512.3 336c181.9 0 303 131.2 331.5 196.9-28.6 65.6-149.8 196.9-331.5 196.9z" fill="#666666" /><path d="M512.3 434.4c-54.4 0-98.4 44.1-98.4 98.5s44.1 98.4 98.4 98.4c54.4 0 98.5-44.1 98.5-98.4 0-54.4-44.1-98.5-98.5-98.5z m0 137.9c-21.7 0-39.4-17.7-39.4-39.4s17.6-39.4 39.4-39.4 39.4 17.7 39.4 39.4-17.7 39.4-39.4 39.4z" fill="#666666" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/icon_atianjia_solid.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512 85.333333c235.648 0 426.666667 191.018667 426.666667 426.666667s-191.018667 426.666667-426.666667 426.666667S85.333333 747.648 85.333333 512 276.352 85.333333 512 85.333333z m0 192a21.333333 21.333333 0 0 0-21.333333 21.333334l-0.042667 191.957333L298.666667 490.666667l-3.84 0.341333A21.333333 21.333333 0 0 0 298.666667 533.333333l191.957333-0.042666L490.666667 725.333333l0.341333 3.84A21.333333 21.333333 0 0 0 533.333333 725.333333l-0.042666-192.042666L725.333333 533.333333l3.84-0.341333A21.333333 21.333333 0 0 0 725.333333 490.666667l-192.042666-0.042667L533.333333 298.666667l-0.341333-3.84A21.333333 21.333333 0 0 0 512 277.333333z" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/icon_bzhengque_outline.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M768 85.333333a170.666667 170.666667 0 0 1 170.666667 170.666667v512a170.666667 170.666667 0 0 1-170.666667 170.666667H256a170.666667 170.666667 0 0 1-170.666667-170.666667V256a170.666667 170.666667 0 0 1 170.666667-170.666667h512z m0 42.666667H256a128 128 0 0 0-127.786667 120.490667L128 256v512a128 128 0 0 0 120.490667 127.786667L256 896h512a128 128 0 0 0 127.786667-120.490667L896 768V256a128 128 0 0 0-120.490667-127.786667L768 128zM709.632 369.578667a21.333333 21.333333 0 0 1 33.749333 25.813333l-2.346666 3.029333-274.261334 298.666667a21.333333 21.333333 0 0 1-28.416 2.730667l-2.986666-2.730667-152.405334-165.930667a21.333333 21.333333 0 0 1 28.586667-31.445333l2.816 2.56 136.661333 148.821333 258.56-281.514666z" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/icon_bzhengque_solid.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M768 85.333333a170.666667 170.666667 0 0 1 170.666667 170.666667v512a170.666667 170.666667 0 0 1-170.666667 170.666667H256a170.666667 170.666667 0 0 1-170.666667-170.666667V256a170.666667 170.666667 0 0 1 170.666667-170.666667h512z m-28.245333 282.965334a21.333333 21.333333 0 0 0-30.122667 1.28L450.986667 651.093333l-136.661334-148.778666-2.816-2.56a21.333333 21.333333 0 0 0-28.586666 31.402666l152.362666 165.973334 3.029334 2.688a21.333333 21.333333 0 0 0 28.416-2.730667l274.261333-298.666667 2.346667-3.029333a21.333333 21.333333 0 0 0-3.626667-27.093333z" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/icon_chahao_outline.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M768.426667 255.573333a21.333333 21.333333 0 0 1 2.474666 27.178667l-2.474666 2.986667-226.261334 226.218666 226.261334 226.304a21.333333 21.333333 0 0 1-27.178667 32.64l-2.986667-2.474666L512 542.122667 285.738667 768.426667a21.333333 21.333333 0 0 1-32.64-27.178667l2.474666-2.986667L481.834667 512 255.573333 285.738667a21.333333 21.333333 0 0 1 27.178667-32.64l2.986667 2.474666L512 481.706667l226.261333-226.176a21.333333 21.333333 0 0 1 30.165334 0z" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/icon_duihao_outline.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M795.562667 368.896a21.333333 21.333333 0 0 1 32.64 27.221333l-2.432 2.986667-384 384a21.333333 21.333333 0 0 1-27.221334 2.432l-2.986666-2.432-213.333334-213.333333a21.333333 21.333333 0 0 1 27.221334-32.64l2.986666 2.432L426.666667 737.834667l368.896-368.938667z" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/icon_jiahao.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512 149.333333a21.333333 21.333333 0 0 1 20.992 17.493334L533.333333 170.666667l-0.042666 319.957333L853.333333 490.666667a21.333333 21.333333 0 0 1 3.84 42.325333L853.333333 533.333333l-320.042666-0.042666L533.333333 853.333333a21.333333 21.333333 0 0 1-42.325333 3.84L490.666667 853.333333l-0.042667-320.042666L170.666667 533.333333a21.333333 21.333333 0 0 1-3.84-42.325333L170.666667 490.666667l319.957333-0.042667L490.666667 170.666667a21.333333 21.333333 0 0 1 21.333333-21.333334z" /></svg>

+ 1 - 0
zkqy-ui/src/assets/icons/svg/icon_jianhao_outline.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M853.333333 490.666667a21.333333 21.333333 0 0 1 3.84 42.325333L853.333333 533.333333H170.666667a21.333333 21.333333 0 0 1-3.84-42.325333L170.666667 490.666667h682.666666z" /></svg>

File diff ditekan karena terlalu besar
+ 0 - 0
zkqy-ui/src/assets/icons/svg/pinglun.svg


File diff ditekan karena terlalu besar
+ 0 - 0
zkqy-ui/src/assets/icons/svg/shoucang.svg


+ 659 - 0
zkqy-ui/src/assets/js/kFormDesign.js

@@ -0,0 +1,659 @@
+let tempData = [
+  {
+    "title": "基础组件",
+    "list": [
+      {
+        "type": "input",
+        "label": "输入框",
+        "icon": "icon-write",
+        "options": {
+          "type": "text",
+          "width": "100%",
+          "defaultValue": "",
+          "placeholder": "请输入",
+          "clearable": false,
+          "maxLength": null,
+          "addonBefore": "",
+          "addonAfter": "",
+          "showLabel": true,
+          "hidden": false,
+          "disabled": false
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "textarea",
+        "label": "文本框",
+        "icon": "icon-edit",
+        "options": {
+          "width": "100%",
+          "minRows": 4,
+          "maxRows": 6,
+          "maxLength": null,
+          "defaultValue": "",
+          "clearable": false,
+          "showLabel": true,
+          "hidden": false,
+          "disabled": false,
+          "placeholder": "请输入"
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "number",
+        "label": "数字输入框",
+        "icon": "icon-number",
+        "options": {
+          "width": "100%",
+          "defaultValue": 0,
+          "min": null,
+          "max": null,
+          "precision": null,
+          "step": 1,
+          "showLabel": true,
+          "hidden": false,
+          "disabled": false,
+          "placeholder": "请输入"
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "select",
+        "label": "下拉选择器",
+        "icon": "icon-xiala",
+        "options": {
+          "width": "100%",
+          "multiple": false,
+          "disabled": false,
+          "clearable": false,
+          "showLabel": true,
+          "hidden": false,
+          "placeholder": "请选择",
+          "dynamicKey": "",
+          "dynamic": false,
+          "options": [
+            {
+              "value": "1",
+              "label": "下拉框1"
+            },
+            {
+              "value": "2",
+              "label": "下拉框2"
+            }
+          ],
+          "showSearch": false
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "checkbox",
+        "label": "多选框",
+        "icon": "icon-duoxuan1",
+        "options": {
+          "disabled": false,
+          "showLabel": true,
+          "hidden": false,
+          "defaultValue": [],
+          "dynamicKey": "",
+          "dynamic": false,
+          "options": [
+            {
+              "value": "1",
+              "label": "选项1"
+            },
+            {
+              "value": "2",
+              "label": "选项2"
+            },
+            {
+              "value": "3",
+              "label": "选项3"
+            }
+          ]
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "radio",
+        "label": "单选框",
+        "icon": "icon-danxuan-cuxiantiao",
+        "options": {
+          "disabled": false,
+          "showLabel": true,
+          "hidden": false,
+          "defaultValue": "",
+          "dynamicKey": "",
+          "dynamic": false,
+          "options": [
+            {
+              "value": "1",
+              "label": "选项1"
+            },
+            {
+              "value": "2",
+              "label": "选项2"
+            },
+            {
+              "value": "3",
+              "label": "选项3"
+            }
+          ]
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "date",
+        "label": "日期选择框",
+        "icon": "icon-calendar",
+        "options": {
+          "width": "100%",
+          "defaultValue": "",
+          "rangeDefaultValue": [],
+          "range": false,
+          "showTime": false,
+          "disabled": false,
+          "showLabel": true,
+          "hidden": false,
+          "clearable": false,
+          "placeholder": "请选择",
+          "rangePlaceholder": ["开始时间", "结束时间"],
+          "format": "YYYY-MM-DD"
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "time",
+        "label": "时间选择框",
+        "icon": "icon-time",
+        "options": {
+          "width": "100%",
+          "defaultValue": "",
+          "disabled": false,
+          "showLabel": true,
+          "hidden": false,
+          "clearable": false,
+          "placeholder": "请选择",
+          "format": "HH:mm:ss"
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "slider",
+        "label": "滑动输入条",
+        "icon": "icon-menu",
+        "options": {
+          "width": "100%",
+          "defaultValue": 0,
+          "disabled": false,
+          "showLabel": true,
+          "hidden": false,
+          "min": 0,
+          "max": 100,
+          "step": 1,
+          "showInput": false
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "uploadFile",
+        "label": "上传文件",
+        "icon": "icon-upload",
+        "options": {
+          "defaultValue": "[]",
+          "multiple": false,
+          "disabled": false,
+          "showLabel": true,
+          "hidden": false,
+          "drag": false,
+          "downloadWay": "a",
+          "dynamicFun": "",
+          "width": "100%",
+          "limit": 3,
+          "data": "{}",
+          "fileName": "file",
+          "headers": {},
+          "action": "http://cdn.kcz66.com/uploadFile.txt",
+          "placeholder": "上传"
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "uploadImg",
+        "label": "上传图片",
+        "icon": "icon-image",
+        "options": {
+          "defaultValue": "[]",
+          "multiple": false,
+          "showLabel": true,
+          "hidden": false,
+          "disabled": false,
+          "width": "100%",
+          "data": "{}",
+          "limit": 3,
+          "placeholder": "上传",
+          "fileName": "image",
+          "headers": {},
+          "action": "http://cdn.kcz66.com/upload-img.txt",
+          "listType": "picture-card"
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "treeSelect",
+        "label": "树选择器",
+        "icon": "icon-tree",
+        "options": {
+          "disabled": false,
+          "multiple": false,
+          "showLabel": true,
+          "hidden": false,
+          "clearable": false,
+          "showSearch": false,
+          "treeCheckable": false,
+          "placeholder": "请选择",
+          "dynamicKey": "",
+          "dynamic": false,
+          "options": [
+            {
+              "value": "1",
+              "label": "选项1",
+              "children": [
+                {
+                  "value": "11",
+                  "label": "选项11"
+                }
+              ]
+            },
+            {
+              "value": "2",
+              "label": "选项2",
+              "children": [
+                {
+                  "value": "22",
+                  "label": "选项22"
+                }
+              ]
+            }
+          ]
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "cascader",
+        "label": "级联选择器",
+        "icon": "icon-guanlian",
+        "options": {
+          "disabled": false,
+          "showLabel": true,
+          "hidden": false,
+          "showSearch": false,
+          "placeholder": "请选择",
+          "clearable": false,
+          "dynamicKey": "",
+          "dynamic": false,
+          "options": [
+            {
+              "value": "1",
+              "label": "选项1",
+              "children": [
+                {
+                  "value": "11",
+                  "label": "选项11"
+                }
+              ]
+            },
+            {
+              "value": "2",
+              "label": "选项2",
+              "children": [
+                {
+                  "value": "22",
+                  "label": "选项22"
+                }
+              ]
+            }
+          ]
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "batch",
+        "label": "动态表格",
+        "icon": "icon-biaoge",
+        "list": [],
+        "options": {
+          "scrollY": 0,
+          "minLimit": 1,
+          "disabled": false,
+          "hidden": false,
+          "showLabel": false,
+          "hideSequence": false,
+          "width": "100%"
+        },
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ],
+        "model": "",
+        "key": "",
+        "help": ""
+      },
+      {
+        "type": "selectInputList",
+        "label": "选择输入列",
+        "icon": "icon-biaoge",
+        "columns": [
+          {
+            "value": "1",
+            "label": "选项1",
+            "list": []
+          },
+          {
+            "value": "2",
+            "label": "选项2",
+            "list": []
+          }
+        ],
+        "options": {
+          "disabled": false,
+          "multiple": true,
+          "hidden": false,
+          "showLabel": false,
+          "width": "100%"
+        },
+        "model": "",
+        "key": "",
+        "help": ""
+      },
+      {
+        "type": "switch",
+        "label": "开关",
+        "icon": "icon-kaiguan3",
+        "options": {
+          "defaultValue": false,
+          "showLabel": true,
+          "hidden": false,
+          "disabled": false
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      },
+      {
+        "type": "text",
+        "label": "文字",
+        "icon": "icon-zihao",
+        "options": {
+          "textAlign": "left",
+          "hidden": false,
+          "showRequiredMark": false,
+          "noFormItem": true,
+          "color": "rgba(0, 0, 0, 0.9)",
+          "fontFamily": "",
+          "fontSize": "10.5pt"
+        },
+        "key": ""
+      },
+      {
+        "type": "textShow",
+        "label": "文本展示",
+        "icon": "icon-pingfen_moren",
+        "options": {
+          "type": "text",
+          "width": "100%",
+          "defaultValue": "",
+          "placeholder": "请输入",
+          "clearable": false,
+          "maxLength": null,
+          "addonBefore": "",
+          "addonAfter": "",
+          "showLabel": true,
+          "hidden": false,
+          "disabled": false
+        },
+        "model": "",
+        "key": "",
+        "help": "",
+        "rules": [
+          {
+            "required": false,
+            "message": "必填项"
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "title": "布局组件",
+    "list": [
+      {
+        "type": "divider",
+        "label": "分割线",
+        "icon": "icon-fengexian",
+        "options": {
+          "orientation": "left",
+          "noFormItem": true
+        },
+        "key": "",
+        "model": ""
+      },
+      {
+        "type": "card",
+        "label": "卡片布局",
+        "icon": "icon-qiapian",
+        "list": [],
+        "options": {
+          "noFormItem": true
+        },
+        "key": "",
+        "model": ""
+      },
+      {
+        "type": "tabs",
+        "label": "标签页布局",
+        "icon": "icon-tabs",
+        "options": {
+          "tabBarGutter": null,
+          "type": "line",
+          "tabPosition": "top",
+          "size": "default",
+          "noFormItem": true,
+          "animated": true
+        },
+        "columns": [
+          {
+            "value": "1",
+            "label": "选项1",
+            "list": []
+          },
+          {
+            "value": "2",
+            "label": "选项2",
+            "list": []
+          }
+        ],
+        "key": "",
+        "model": ""
+      },
+      {
+        "type": "grid",
+        "label": "栅格布局",
+        "icon": "icon-zhage",
+        "columns": [
+          {
+            "span": 12,
+            "list": []
+          },
+          {
+            "span": 12,
+            "list": []
+          }
+        ],
+        "options": {
+          "noFormItem": true,
+          "gutter": 0
+        },
+        "key": "",
+        "model": ""
+      },
+      {
+        "type": "table",
+        "label": "表格布局",
+        "icon": "icon-biaoge",
+        "trs": [
+          {
+            "tds": [
+              {
+                "colspan": 1,
+                "rowspan": 1,
+                "list": []
+              },
+              {
+                "colspan": 1,
+                "rowspan": 1,
+                "list": []
+              }
+            ]
+          },
+          {
+            "tds": [
+              {
+                "colspan": 1,
+                "rowspan": 1,
+                "list": []
+              },
+              {
+                "colspan": 1,
+                "rowspan": 1,
+                "list": []
+              }
+            ]
+          }
+        ],
+        "options": {
+          "width": "100%",
+          "bordered": true,
+          "bright": false,
+          "small": true,
+          "noFormItem": true,
+          "customStyle": ""
+        },
+        "key": "",
+        "model": ""
+      }
+    ]
+  }
+]
+export default tempData

+ 28 - 0
zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormDesign/config/formItemsConfig.js

@@ -591,6 +591,34 @@ export const defaultSchemaList = [
     },
     key: ""
   },
+  {
+    type: "textShow", // 表单类型
+    label: "文本展示", // 标题文字
+    icon: "icon-pingfen_moren",
+    options: {
+      type: "text",
+      width: "100%", // 宽度
+      defaultValue: "", // 默认值
+      placeholder: "请输入", // 没有输入时,提示文字
+      clearable: false,
+      maxLength: null,
+      addonBefore: "",
+      addonAfter: "",
+      showLabel: true,
+      hidden: false, // 是否隐藏,false显示,true隐藏
+      disabled: false // 是否禁用,false不禁用,true禁用
+    },
+    model: "", // 数据字段
+    key: "",
+    help: "",
+    rules: [
+      //验证规则
+      {
+        required: false, // 必须填写
+        message: "必填项"
+      }
+    ]
+  },
   {
     type: "html",
     label: "HTML",

+ 4 - 0
zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormDesign/index.vue

@@ -153,6 +153,8 @@ import { revoke, nodeSchema } from "../../utils/index";
 import formItemProperties from "./module/formItemProperties";
 import formProperties from "./module/formProperties";
 import { black } from '@/components/updateModule/bpmn-js/lib/draw/BpmnRenderUtil'
+import stringify from 'uuid/dist/stringify'
+import tempData from '@/assets/js/kFormDesign.js'
 
 
 export default {
@@ -525,6 +527,8 @@ export default {
     let blackList=['评分','警告提示','HTML','富文本','按钮']
     this.loadState = true;
     nodeSchema.addComputed(this.schemaGroup);
+    this.schemaGroup = tempData;
+    console.log('this.schemaGroup',this.schemaGroup);
     this.schemaGroup[0].list = this.schemaGroup[0].list.filter(item => {
       return !blackList.some(v=>v==item.label)
     })

+ 25 - 4
zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormDesign/module/formItemProperties.vue

@@ -37,10 +37,10 @@
           </el-select>
         </a-form-item>
         <a-form-item
-          v-if="!hideModel && isDefined(selectItem.model)"
+          v-if="!hideModel && isDefined(selectItem.model) && isNeedColumn(selectItem)"
           label="列名"
         >
-          <el-select v-model="selectItem.model" filterable placeholder="请选择">
+          <el-select v-model="selectItem.model" @change="changeModel" filterable placeholder="请选择">
             <el-option
               v-for="item in formList.listName"
               :key="item.value"
@@ -710,6 +710,10 @@ export default {
     }
   },
   methods: {
+    // 列名变化回调
+    changeModel() {
+      console.log('列',this.selectItem);
+    },
     setDynamicKey(sqlData) {
       console.log('sqlData',sqlData);
       this.options.dynamicKey = sqlData.dynamicName;
@@ -723,6 +727,16 @@ export default {
     isDefined(value) {
       return typeof value !== "undefined";
     },
+    // 判断是否需要列名
+    isNeedColumn(value) {
+      console.log(value.type);
+      let notNeedColumnList = ['batch', 'selectInputList'];
+      if (notNeedColumnList.includes(value.type)) {
+        return false;
+      } else {
+        return true;
+      }
+    },
     async getFormList() {
       let par = {
         ... this.$store.state.user.dataSource
@@ -734,8 +748,14 @@ export default {
       //   this.formList.formName = res.data
       // });
     },
-    getListName(item={}) {
-    item.model=''
+    getListName(item = {}) {
+      let notNeedColumnList = ['batch', 'selectInputList'];
+      let flag=notNeedColumnList.includes(item.type)
+      if (flag) {
+      item.model='batch.'+item.tableName
+      } else {
+      item.model=''
+    }
       let par2 = {
         ... this.$store.state.user.dataSource,
         'tableName':this.selectItem.tableName
@@ -754,6 +774,7 @@ export default {
   },
   mounted() {
     this.getFormList();
+    console.log('this.selectItem',this.selectItem);
     if (this.selectItem.tableName) {
       this.getListName()
     }

+ 25 - 2
zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormDesign/module/formProperties.vue

@@ -28,7 +28,7 @@
           </el-select>
         </a-form-item>
         <!-- 拖拽表格 -->
-        <a-form-item
+        <!-- <a-form-item
           label="关联的自定义表格"
         >
           <el-select v-model="config.tdId" @change="relationTableChange" clearable filterable placeholder="请选择拖拽table">
@@ -37,6 +37,19 @@
               :key="item.tId"
               :label="item.dtName"
               :value="item.tId">
+            </el-option>
+          </el-select>
+        </a-form-item> -->
+        <!-- 表单类型 -->
+        <a-form-item
+          label="表单类型"
+        >
+          <el-select v-model="config.formType" clearable filterable placeholder="请选择表单类型">
+            <el-option
+              v-for="item in formTypeList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
               <!-- <span v-show="false">{{ $sessionStorage.setItem('sqlKey',item.sqlKey) }}</span> -->
             </el-option>
           </el-select>
@@ -196,7 +209,17 @@ export default {
         nickFormName: [
             { required: true, message: '请输入表单别名', trigger: 'blur' }
           ],
-        }
+      },
+        formTypeList: [
+        {
+          value: '1',
+            label:'普通表单',
+        },
+        {
+          value: '2',
+            label:'动态表格表单',
+          }
+        ],
     }
   },
   components: {

+ 7 - 1
zkqy-ui/src/components/updateModule/k-form-design/packages/components/KFormItem/index.vue

@@ -73,8 +73,9 @@
  * date 2019-11-20
  */
 import { pluginManager, lazyLoadTick } from "../../utils/index";
+import textShow from '../KTextShow/index.js'
 const _ = require("lodash/object");
-const ComponentArray = pluginManager.getComponents();
+let ComponentArray = pluginManager.getComponents();
 
 export default {
   name: "KFormItem",
@@ -192,6 +193,11 @@ export default {
      */
 
     componentItem() {
+      
+      ComponentArray.textShow = {
+        component: textShow,
+        bindModel:'value'
+      }
       return ComponentArray[this.record.type].component;
     },
     componentOption() {

+ 35 - 0
zkqy-ui/src/components/updateModule/k-form-design/packages/components/KTextShow/KTextShow.vue

@@ -0,0 +1,35 @@
+<template>
+  <div
+    :style="{
+      textAlign: record.options.textAlign,
+      transform: 'translateY(-2px)',
+      paddingRight: '8px'
+    }"
+  >
+    <label
+      :class="{ 'ant-form-item-required': record.options.showRequiredMark }"
+      :style="{
+        fontFamily: record.options.fontFamily,
+        fontSize: record.options.fontSize,
+        color: record.options.color
+      }"
+      v-text="record.value"
+    ></label>{{ value }}
+  </div>
+</template>
+<script>
+export default {
+  name: "KTextShow",
+  props: ["record", 'value'],
+  computed: {
+    sliderValue: {
+      get() {
+        return this.value;
+      },
+      set(e) {
+        this.$emit("change", e);
+      }
+    }
+  }
+};
+</script>

+ 2 - 0
zkqy-ui/src/components/updateModule/k-form-design/packages/components/KTextShow/index.js

@@ -0,0 +1,2 @@
+import KTextShow from "./KTextShow.vue";
+export default KTextShow;

+ 1 - 0
zkqy-ui/src/components/updateModule/k-form-design/packages/utils/NodeSchema.js

@@ -30,6 +30,7 @@ class NodeSchema {
         "button",
         "alert",
         "text",
+        'textShow',
         "html"
       ]
     },

+ 27 - 17
zkqy-ui/src/layout/index.vue

@@ -5,7 +5,7 @@
       <el-row>
         <el-col :span="12">
           <div class="logo-title">
-            <img :src="logo" alt="" class="imgg" />
+            <img :src="logo" alt="" class="imgg"/>
             <span class="title">{{ title }}</span>
             <!-- <img src="../assets/images/comlo.png" alt="" class="imgg" /> -->
           </div>
@@ -16,7 +16,7 @@
             trigger="click"
           >
             <div class="avatar-wrapper">
-              <img :src="avatar" class="user-avatar" />
+              <img :src="avatar" class="user-avatar"/>
               <span style="">
                 <button class="jianbiase">{{ username || "默认用户" }}</button>
               </span>
@@ -60,11 +60,11 @@
       >
         <div :class="{ 'fixed-header': fixedHeader }">
           <!-- <navbar /> -->
-          <tags-view v-if="needTagsView" />
+          <tags-view v-if="needTagsView"/>
         </div>
-        <app-main />
+        <app-main/>
         <right-panel>
-          <settings />
+          <settings/>
         </right-panel>
       </div>
     </div>
@@ -72,15 +72,16 @@
 </template>
 
 <script>
-import { mapGetters } from "vuex";
+import {mapGetters} from "vuex";
 import RightPanel from "@/components/RightPanel";
-import { AppMain, Navbar, Settings, Sidebar, TagsView } from "./components";
+import {AppMain, Navbar, Settings, Sidebar, TagsView} from "./components";
 import ResizeMixin from "./mixin/ResizeHandler";
-import { mapState } from "vuex";
+import {mapState} from "vuex";
 import variables from "@/assets/styles/variables.scss";
 import meclogo1 from "@/assets/images/mec-logo1.svg";
 import mecLogoLogin from "@/assets/images/mec-logo-login.svg";
 import comp from "@/assets/images/comp.svg";
+
 export default {
   name: "Layout",
   components: {
@@ -142,15 +143,17 @@ export default {
         type: "warning",
       })
         .then(() => {
-          let tenantCode = this.tenantInfo.tenantCode;
-          this.$store.dispatch("LogOut").then(() => {
-            this.$router.push({path: "/login", query: {tenantCode: tenantCode}});
-          });
+          // let tenantCode = this.tenantInfo.tenantCode;
+          this.$store.dispatch("LogOut");
+          //   .then(() => {
+          //   this.$router.push({path: "/login", query: {tenantCode: tenantCode}});
+          // });
         })
-        .catch(() => {});
+        .catch(() => {
+        });
     },
     handleClickOutside() {
-      this.$store.dispatch("app/closeSideBar", { withoutAnimation: false });
+      this.$store.dispatch("app/closeSideBar", {withoutAnimation: false});
     },
     getlogo() {
       let logo = sessionStorage.getItem("logo");
@@ -175,6 +178,7 @@ export default {
 <style lang="scss" scoped>
 @import "~@/assets/styles/mixin.scss";
 @import "~@/assets/styles/variables.scss";
+
 .combarr {
   /* height: 100vh !important; */
   /* overflow: scroll; */
@@ -183,9 +187,11 @@ export default {
 .avatar-wrapper {
   white-space: nowrap;
 }
+
 .el-dropdown-menu {
   z-index: 10000 !important;
 }
+
 .sidebar-container {
   background-color: #222653 !important;
 }
@@ -212,9 +218,9 @@ export default {
   height: 37px;
   /* height: 25px; */
   background: linear-gradient(
-    128.13deg,
-    rgba(82, 79, 255, 1) 0%,
-    rgba(255, 74, 74, 1) 100%
+      128.13deg,
+      rgba(82, 79, 255, 1) 0%,
+      rgba(255, 74, 74, 1) 100%
   );
   box-shadow: 0px 4px 16px rgba(179, 192, 231, 1);
   border-radius: 27px;
@@ -227,6 +233,7 @@ export default {
   padding: 0px 20px 0px 25px;
   box-sizing: border-box;
 }
+
 .user-avatar {
   cursor: pointer;
   width: 50px;
@@ -254,6 +261,7 @@ export default {
 #dropdown-menu-1780 {
   z-index: 1000000;
 }
+
 .imgg {
   // width: 553px;
   width: 270px;
@@ -263,10 +271,12 @@ export default {
   margin-bottom: 8px;
   /* margin-left: 50px; */
 }
+
 .logo-title {
   width: 100%;
   display: flex;
   align-items: center;
+
   .title {
     flex: 1;
     margin-left: 5px;

+ 9 - 9
zkqy-ui/src/permission.js

@@ -1,14 +1,14 @@
 import router from './router'
 import store from './store'
-import { Message } from 'element-ui'
+import {Message} from 'element-ui'
 import NProgress from 'nprogress'
 import 'nprogress/nprogress.css'
-import { getToken } from '@/utils/auth'
-import { isRelogin } from '@/utils/request'
+import {getToken} from '@/utils/auth'
+import {isRelogin} from '@/utils/request'
 
-NProgress.configure({ showSpinner: false })
+NProgress.configure({showSpinner: false})
 
-const whiteList = ['/login', '/register', '/404']
+const whiteList = ['/login', '/register', '/404', '/adminLogin','/401']
 
 router.beforeEach((to, from, next) => {
   NProgress.start()
@@ -16,7 +16,7 @@ router.beforeEach((to, from, next) => {
     to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
     /* has token*/
     if (to.path === '/login') {
-      next({ path: '/' })
+      next({path: '/'})
       NProgress.done()
     } else {
       if (store.getters.roles.length === 0) {
@@ -27,12 +27,12 @@ router.beforeEach((to, from, next) => {
           store.dispatch('GenerateRoutes').then(accessRoutes => {
             // 根据roles权限生成可访问的路由表
             router.addRoutes(accessRoutes) // 动态添加可访问路由表
-            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
+            next({...to, replace: true}) // hack方法 确保addRoutes已完成
           })
         }).catch(err => {
           store.dispatch('LogOut').then(() => {
             Message.error(err)
-            next({ path: '/' })
+            next({path: '/'})
           })
         })
       } else {
@@ -45,7 +45,7 @@ router.beforeEach((to, from, next) => {
       // 在免登录白名单,直接进入
       next()
     } else {
-      next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
+      next(`/adminLogin?redirect=${to.fullPath}`) // 否则全部重定向到登录页
       NProgress.done()
     }
   }

+ 27 - 19
zkqy-ui/src/router/index.js

@@ -1,6 +1,6 @@
 import Vue from 'vue'
 import Router from 'vue-router'
-import { getQueryParams } from '@/utils/other'
+import {getQueryParams} from '@/utils/other'
 
 Vue.use(Router)
 
@@ -21,12 +21,12 @@ import Layout from '@/layout'
  * roles: ['admin', 'common']       // 访问路由的角色权限
  * permissions: ['a:a:a', 'b:b:b']  // 访问路由的菜单权限
  * meta : {
-    noCache: true                   // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
-    title: 'title'                  // 设置该路由在侧边栏和面包屑中展示的名字
-    icon: 'svg-name'                // 设置该路由的图标,对应路径src/assets/icons/svg
-    breadcrumb: false               // 如果设置为false,则不会在breadcrumb面包屑中显示
-    activeMenu: '/system/user'      // 当路由设置了该属性,则会高亮相对应的侧边栏。
-  }
+ noCache: true                   // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
+ title: 'title'                  // 设置该路由在侧边栏和面包屑中展示的名字
+ icon: 'svg-name'                // 设置该路由的图标,对应路径src/assets/icons/svg
+ breadcrumb: false               // 如果设置为false,则不会在breadcrumb面包屑中显示
+ activeMenu: '/system/user'      // 当路由设置了该属性,则会高亮相对应的侧边栏。
+ }
  */
 
 // 公共路由
@@ -157,16 +157,24 @@ export const constantRoutes = [
       var url = new URL(window.location.href);
       var params = new URLSearchParams(url.search);
       let temp = params.get('tenantCode')
-      console.log(temp);
       if (temp) {
         return import('@/views/login')
       } else {
-        return import('@/views/adminLogin')
+        // return import('@/views/adminLogin')
+        return import('@/views/error/401')
       }
 
     },
     hidden: true
   },
+  {
+    path: '/adminLogin',
+    component: () => {
+      var url = new URL(window.location.href);
+      return import('@/views/adminLogin')
+    },
+    hidden: true
+  },
   {
     path: '/register',
     component: () => import('@/views/register'),
@@ -222,7 +230,7 @@ export const constantRoutes = [
         path: 'profile',
         component: () => import('@/views/system/user/profile/index'),
         name: 'Profile',
-        meta: { title: '个人中心', icon: 'user' }
+        meta: {title: '个人中心', icon: 'user'}
       }
     ]
   },
@@ -242,7 +250,7 @@ export const dynamicRoutes = [
         component: () => import('@/views/system/data/index'),
         // component: (resolve) => require(['@/views/system/data/index'], resolve),
         name: 'AuthRole',
-        meta: { title: '数据源配置', activeMenu: '/system/data' }
+        meta: {title: '数据源配置', activeMenu: '/system/data'}
       }
     ]
   },
@@ -257,7 +265,7 @@ export const dynamicRoutes = [
         component: () => import('@/views/system/user/authRole'),
         // component: (resolve) => require(['@/views/system/user/authRole'], resolve),
         name: 'AuthRole',
-        meta: { title: '分配角色', activeMenu: '/system/user' }
+        meta: {title: '分配角色', activeMenu: '/system/user'}
       }
     ]
   },
@@ -272,7 +280,7 @@ export const dynamicRoutes = [
         component: () => import('@/views/system/fromModel/index'),
         // component: (resolve) => require(['@/views/system/fromModel/index'], resolve),
         name: 'fromModel',
-        meta: { title: '表单建模', activeMenu: '/system/fromModel/index' }
+        meta: {title: '表单建模', activeMenu: '/system/fromModel/index'}
       },
       // {
       //   path: '/fromModel/:index',
@@ -294,7 +302,7 @@ export const dynamicRoutes = [
         component: () => import('@/views/system/role/authUser'),
         // component: (resolve) => require(['@/views/system/role/authUser'], resolve),
         name: 'AuthUser',
-        meta: { title: '分配用户', activeMenu: '/system/role' }
+        meta: {title: '分配用户', activeMenu: '/system/role'}
       }
     ]
   },
@@ -309,7 +317,7 @@ export const dynamicRoutes = [
         component: () => import('@/views/system/dict/data'),
         // component: (resolve) => require(['@/views/system/dict/data'], resolve),
         name: 'Data',
-        meta: { title: '字典数据', activeMenu: '/system/dict' }
+        meta: {title: '字典数据', activeMenu: '/system/dict'}
       }
     ]
   },
@@ -325,7 +333,7 @@ export const dynamicRoutes = [
         component: () => import('@/views/system/tenant/dict/data'),
         // component: (resolve) => require(['@/views/system/tenant/dict/data'], resolve),
         name: 'TenantData',
-        meta: { title: '字典数据', activeMenu: '/system/tenant/dict' }
+        meta: {title: '字典数据', activeMenu: '/system/tenant/dict'}
       }
     ]
   },
@@ -341,7 +349,7 @@ export const dynamicRoutes = [
         component: () => import('@/views/monitor/job/log'),
         // component: (resolve) => require(['@/views/monitor/job/log'], resolve),
         name: 'JobLog',
-        meta: { title: '调度日志', activeMenu: '/monitor/job' }
+        meta: {title: '调度日志', activeMenu: '/monitor/job'}
       }
     ]
   },
@@ -357,7 +365,7 @@ export const dynamicRoutes = [
 
         // component: (resolve) => require(['@/views/tool/gen/editTable'], resolve),
         name: 'GenEdit',
-        meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
+        meta: {title: '修改生成配置', activeMenu: '/tool/gen'}
       }
     ]
   }
@@ -378,6 +386,6 @@ Router.prototype.replace = function push(location) {
 
 export default new Router({
   mode: 'history', // 去掉url中的#
-  scrollBehavior: () => ({ y: 0 }),
+  scrollBehavior: () => ({y: 0}),
   routes: constantRoutes
 })

+ 9 - 2
zkqy-ui/src/store/modules/user.js

@@ -118,15 +118,22 @@ const user = {
     LogOut({commit, state}) {
       return new Promise((resolve, reject) => {
         logout(state.token).then(() => {
+          if (state.userId == 1) {  // 如果当前用户是admin的话
+            location.href = "/adminLogin"
+          } else {
+            location.href = state.tenant.tenantToolLoginUrl
+          }
+        }).catch(error => {
+          reject(error)
+        }).finally(() => {
           commit('SET_TOKEN', '')
           commit('SET_ROLES', [])
           commit('SET_PERMISSIONS', [])
           commit('SET_TENANT', {})
           removeToken()
           localStorage.clear();
+          sessionStorage.clear();
           resolve()
-        }).catch(error => {
-          reject(error)
         })
       })
     },

File diff ditekan karena terlalu besar
+ 0 - 0
zkqy-ui/src/utils/icon.js


+ 62 - 60
zkqy-ui/src/utils/request.js

@@ -1,15 +1,15 @@
 import axios from 'axios'
-import { Notification, MessageBox, Message, Loading } from 'element-ui'
+import {Notification, MessageBox, Message, Loading} from 'element-ui'
 import store from '@/store'
-import { getToken } from '@/utils/auth'
+import {getToken} from '@/utils/auth'
 import errorCode from '@/utils/errorCode'
-import { tansParams, blobValidate } from "@/utils/zkqy";
+import {tansParams, blobValidate} from "@/utils/zkqy";
 import cache from '@/plugins/cache'
-import { saveAs } from 'file-saver'
+import {saveAs} from 'file-saver'
 
 let downloadLoadingInstance;
 // 是否显示重新登录
-export let isRelogin = { show: false };
+export let isRelogin = {show: false};
 
 
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
@@ -68,71 +68,73 @@ service.interceptors.request.use(config => {
 
 // 响应拦截器
 service.interceptors.response.use(res => {
-  // 未设置状态码则默认成功状态
-  const code = res.data.code || 200;
-  // 获取错误信息
-  const msg = errorCode[code] || res.data.msg || errorCode['default']
-  // 二进制数据则直接返回
-  if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
-    return res.data
-  }
-  if (code === 401) {
-    if (!isRelogin.show) {
-      isRelogin.show = true;
-      MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
+    // 未设置状态码则默认成功状态
+    const code = res.data.code || 200;
+    // 获取错误信息
+    const msg = errorCode[code] || res.data.msg || errorCode['default']
+    // 二进制数据则直接返回
+    if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
+      return res.data
+    }
+    if (code === 401) {
+      if (!isRelogin.show) {
+        isRelogin.show = true;
+        MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
+          confirmButtonText: '重新登录',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          isRelogin.show = false;
+          store.dispatch('LogOut')
+          //   .then(() => {
+          //   location.href = '/index';
+          // })
+        }).catch(() => {
+          isRelogin.show = false;
+        });
+      }
+      return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+    } else if (code === 500) {
+      console.log(msg);
+      let resUrl = res.config.url;
+      if (resUrl == '/login') {
+        Message({message: msg, type: 'error'})
+        return Promise.reject(new Error(msg))
+      } else {
+        return Promise.resolve()
+      }
+      // Message({ message: msg, type: 'error' })
+      // return Promise.reject(new Error(msg))
+      // return Promise.resolve()
+    } else if (code === 601) {
+      Message({message: msg, type: 'warning'})
+      return Promise.reject('error')
+    } else if (code == 602) {
+      if (store.state.user.name == 'admin') return
+      MessageBox.confirm('数据源信息异常!请您联系管理员或尝试重新登录系统。', '系统提示', {
         confirmButtonText: '重新登录',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
         isRelogin.show = false;
-        store.dispatch('LogOut').then(() => {
-          location.href = '/index';
-        })
+        store.dispatch('LogOut');
+        //   .then(() => {
+        //   location.href = '/index';
+        // })
       }).catch(() => {
         isRelogin.show = false;
       });
-    }
-    return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
-  } else if (code === 500) {
-    console.log(msg);
-    let resUrl = res.config.url;
-    if (resUrl == '/login') {
-      Message({ message: msg, type: 'error' })
-      return Promise.reject(new Error(msg))
+      return Promise.reject('数据源信息异常!请您联系管理员或尝试重新登录系统。')
+    } else if (code !== 200) {
+      Notification.error({title: msg})
+      return Promise.reject('error')
     } else {
-      return Promise.resolve()
+      return res.data
     }
-    // Message({ message: msg, type: 'error' })
-    // return Promise.reject(new Error(msg))
-    // return Promise.resolve()
-  } else if (code === 601) {
-    Message({ message: msg, type: 'warning' })
-    return Promise.reject('error')
-  } else if (code == 602) {
-    if (store.state.user.name == 'admin') return
-    MessageBox.confirm('数据源信息异常!请您联系管理员或尝试重新登录系统。', '系统提示', {
-      confirmButtonText: '重新登录',
-      cancelButtonText: '取消',
-      type: 'warning'
-    }).then(() => {
-      isRelogin.show = false;
-      store.dispatch('LogOut').then(() => {
-        location.href = '/index';
-      })
-    }).catch(() => {
-      isRelogin.show = false;
-    });
-    return Promise.reject('数据源信息异常!请您联系管理员或尝试重新登录系统。')
-  } else if (code !== 200) {
-    Notification.error({ title: msg })
-    return Promise.reject('error')
-  } else {
-    return res.data
-  }
-},
+  },
   error => {
     console.log('err' + error)
-    let { message } = error;
+    let {message} = error;
     if (message == "Network Error") {
       message = "后端接口连接异常";
     } else if (message.includes("timeout")) {
@@ -140,7 +142,7 @@ service.interceptors.response.use(res => {
     } else if (message.includes("Request failed with status code")) {
       message = "系统接口" + message.substr(message.length - 3) + "异常";
     }
-    Message({ message: message, type: 'error', duration: 5 * 1000 })
+    Message({message: message, type: 'error', duration: 5 * 1000})
     return Promise.reject(error)
   }
 )
@@ -156,7 +158,7 @@ export function download(url, params, filename, config) {
     transformRequest: [(params) => {
       return tansParams(params)
     }],
-    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
     responseType: 'blob',
     ...config
   }).then(async (data) => {

+ 13 - 23
zkqy-ui/src/views/login.vue

@@ -8,8 +8,7 @@
       ref="loginForm"
       :model="loginForm"
       :rules="loginRules"
-      class="login-form"
-    >
+      class="login-form">
       <el-row>
         <el-col :span="12" class="comlogo"></el-col>
         <el-col :span="12">
@@ -157,33 +156,29 @@ export default {
     // 校验url
     validateTenantId() {
       let tenantCode = this.$route.query['tenantCode']
-      console.log("租户登录", tenantCode);
       if (tenantCode != null) {
         // 得到tenantId 查询裤中是否存在该租户
         isTenantExist({tenantCode: tenantCode}).then(res => {
-          if (res.data?.tenantId) { // 判断当前编号是否存在库中
+          if (res == undefined) {
+            this.$router.push({path: "/401"})
+          } else if (res.data?.tenantId) { // 判断当前编号是否存在库中
             this.tenantId = res.data.tenantId;
             this.loginForm.tenantID = this.tenantId;
-            // 得到租户的信息
-            this.config = res.data.loginPageConfiguration
-            this.setConfig();
-            // 如果当前租户没有配置登录页面则不可访问
-            if (this.config == null && this.config == undefined) {
-              // this.$router.push({path: "/404"})
-              this.getCode();
-              this.getCookie();
-            } else {
-              this.getCode();
-              this.getCookie();
+            if (res.data.loginPageConfiguration != null) {
+              // 得到租户的信息
+              this.config = res.data.loginPageConfiguration
+              this.setConfig();
             }
+            this.getCode();
+            this.getCookie();
           } else {
+            console.log("租户有问题!")
             // 当前访问链接中的租户编号不存在
-            this.$router.push({path: "/404"})
+            this.$router.push({path: "/401"})
           }
         })
       } else {
-        console.log('跳转')
-        this.$router.push({path: "/404"})
+        this.$router.push({path: "/401"})
       }
     },
     setConfig() {
@@ -204,9 +199,6 @@ export default {
             process.env.VUE_APP_BASE_IMG_API + loginPageBackgroundImage
           })`;
 
-          console.log("" + `url(${
-            process.env.VUE_APP_BASE_IMG_API + loginPageBackgroundImage
-          })`)
         }
       }
 
@@ -223,7 +215,6 @@ export default {
       // 设置title
       if (loginPageTitle) {
         let titleDom = document.getElementsByClassName("title");
-        console.log(titleDom);
         if (titleDom.length > 0) {
           titleDom[0].innerHTML = loginPageTitle;
         }
@@ -232,7 +223,6 @@ export default {
       // 设置meta信息
       if (windowTitle) {
         document.title = windowTitle;
-        console.dir(document);
       }
       // 设置页面描述
       if (loginPageDescription) {

+ 6 - 1
zkqy-ui/src/views/relateTable/index.vue

@@ -1024,7 +1024,12 @@ export default {
           columns.push(tempObj);
         }
         if (temp.isSearch) {
-          searchFieldList.push(temp.tableName + "." + temp.fieldName);
+          // searchFieldList.push(temp.tableName + "." + temp.fieldName);
+          searchFieldList.push({
+            conditionField: temp.tableName + "." + temp.fieldName,
+            conditionName: "超级查询",
+            conditionType: "SuperQuery",
+          });
         }
 
         if (temp.isExport) {

+ 299 - 111
zkqy-ui/src/views/system/excuteBtnMange/index.vue

@@ -30,11 +30,11 @@
           icon="el-icon-search"
           size="mini"
           @click="handleQuery"
-          >搜索</el-button
-        >
+          >搜索
+        </el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >重置</el-button
-        >
+          >重置
+        </el-button>
       </el-form-item>
     </el-form>
 
@@ -47,8 +47,9 @@
           size="mini"
           @click="handleAdd"
           v-hasPermi="['system:menu:add']"
-          >新增</el-button
-        >
+          v-show="queryParams.btnGroupType == 'right'"
+          >新增
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -57,8 +58,18 @@
           icon="el-icon-sort"
           size="mini"
           @click="toggleExpandAll"
-          >展开/折叠</el-button
+          >展开/折叠
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-radio-group
+          v-model="queryParams.btnGroupType"
+          size="mini"
+          @input="handleClick"
         >
+          <el-radio-button label="right">操作列按钮</el-radio-button>
+          <el-radio-button label="top">顶部按钮</el-radio-button>
+        </el-radio-group>
       </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
@@ -115,36 +126,36 @@
               处理<i class="el-icon-arrow-down el-icon--right"></i>
             </el-button>
             <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item
-                ><el-button
+              <el-dropdown-item>
+                <el-button
                   size="mini"
                   type="text"
                   icon="el-icon-edit"
                   @click="handleUpdate(scope.row)"
                   v-hasPermi="['system:menu:edit']"
-                  >修改</el-button
-                ></el-dropdown-item
-              >
-              <el-dropdown-item v-if="scope.row.btnType == 'DIRECTORY'"
-                ><el-button
+                  >修改
+                </el-button>
+              </el-dropdown-item>
+              <el-dropdown-item v-if="scope.row.btnType == 'DIRECTORY'">
+                <el-button
                   size="mini"
                   type="text"
                   icon="el-icon-plus"
                   @click="handleAdd(scope.row)"
                   v-hasPermi="['system:menu:add']"
-                  >新增</el-button
-                ></el-dropdown-item
-              >
-              <el-dropdown-item
-                ><el-button
+                  >新增
+                </el-button>
+              </el-dropdown-item>
+              <el-dropdown-item>
+                <el-button
                   size="mini"
                   type="text"
                   icon="el-icon-delete"
                   @click="handleDelete(scope.row)"
                   v-hasPermi="['system:menu:remove']"
-                  >删除</el-button
-                ></el-dropdown-item
-              >
+                  >删除
+                </el-button>
+              </el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
 
@@ -179,6 +190,10 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
+    <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="操作列按钮" name="right"> </el-tab-pane>
+      <el-tab-pane label="顶部按钮" name="top">顶部按钮管理</el-tab-pane>
+    </el-tabs> -->
 
     <!-- 添加或修改对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="680px" append-to-body>
@@ -220,36 +235,89 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="按钮图标" prop="btnIcon">
-              <el-popover
-                placement="bottom-start"
-                width="460"
-                trigger="click"
-                @show="$refs['iconSelect'].reset()"
-              >
-                <IconSelect
-                  ref="iconSelect"
-                  @selected="selected"
-                  :active-icon="btnGroupFormData.icon"
-                />
-                <el-input
+              <el-popover placement="bottom" width="450" trigger="click">
+                <span
                   slot="reference"
-                  v-model="btnGroupFormData.icon"
-                  placeholder="点击选择图标"
-                  readonly
+                  style="
+                    display: inline-block;
+                    width: 200px;
+                    height: 40px;
+                    line-height: 40px;
+                  "
                 >
-                  <svg-icon
-                    v-if="btnGroupFormData.btnIcon"
-                    slot="prefix"
-                    :icon-class="btnGroupFormData.btnIcon"
-                    style="width: 25px"
-                  />
+                  <el-input
+                    :prefix-icon="btnGroupFormData.btnIcon"
+                    slot="reference"
+                    v-if="iconShow"
+                    v-model="btnGroupFormData.btnIcon"
+                    placeholder="点击选择图标"
+                    readonly
+                  ></el-input>
+                </span>
+                <div class="iconList">
                   <i
-                    v-else
-                    slot="prefix"
-                    class="el-icon-search el-input__icon"
-                  />
-                </el-input>
+                    v-for="item in iconList"
+                    :key="item"
+                    :class="item"
+                    @click="setIcon(item)"
+                    style="font-size: 20px"
+                  ></i>
+                </div>
               </el-popover>
+
+              <!--              <el-popover-->
+              <!--                placement="bottom-start"-->
+              <!--                width="460"-->
+              <!--                trigger="click"-->
+              <!--                @show="$refs['iconSelect'].reset()"-->
+              <!--              >-->
+              <!--                <IconSelect-->
+              <!--                  ref="iconSelect"-->
+              <!--                  @selected="selected"-->
+              <!--                  :active-icon="btnGroupFormData.icon"-->
+              <!--                />-->
+              <!--                <el-input-->
+              <!--                  slot="reference"-->
+              <!--                  v-model="btnGroupFormData.icon"-->
+              <!--                  placeholder="点击选择图标"-->
+              <!--                  readonly-->
+              <!--                >-->
+              <!--                  <svg-icon-->
+              <!--                    v-if="btnGroupFormData.btnIcon"-->
+              <!--                    slot="prefix"-->
+              <!--                    :icon-class="btnGroupFormData.btnIcon"-->
+              <!--                    style="width: 25px"-->
+              <!--                  />-->
+              <!--                  <i-->
+              <!--                    v-else-->
+              <!--                    slot="prefix"-->
+              <!--                    class="el-icon-search el-input__icon"-->
+              <!--                  />-->
+              <!--                </el-input>-->
+              <!--              </el-popover>-->
+            </el-form-item>
+          </el-col>
+          <el-col
+            :span="12"
+            v-if="
+              queryParams.btnGroupType == 'top' &&
+              btnGroupFormData.btnType != 'DIRECTORY'
+            "
+          >
+            <el-form-item label="按钮样式" prop="btnStyle">
+              <el-select
+                v-model="btnGroupFormData.btnStyle"
+                clearable
+                filterable
+              >
+                <el-option
+                  v-for="item in btnStyleOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -460,7 +528,7 @@
               </el-table>
             </div> -->
             <el-col :span="24">
-              <!-- 
+              <!--
               v-show="
                 btnGroupFormData.btnType != 3 && btnGroupFormData.btnType != 7
               " -->
@@ -474,12 +542,14 @@
                       : "query"
                   }}参数</span
                 > -->
-                <el-divider content-position="center">{{
-                  btnGroupFormData.btnType != "OUTLINK" &&
-                  btnGroupFormData.btnType != "INNERLINK"
-                    ? "默认修改字段"
-                    : "query参数"
-                }}</el-divider>
+                <el-divider content-position="center"
+                  >{{
+                    btnGroupFormData.btnType != "OUTLINK" &&
+                    btnGroupFormData.btnType != "INNERLINK"
+                      ? "默认修改字段"
+                      : "query参数"
+                  }}
+                </el-divider>
                 <el-table :data="commonFieldData" style="width: 100%">
                   <el-table-column label="序号" type="index" width="50">
                   </el-table-column>
@@ -788,12 +858,21 @@ import { v4 as uuidv4 } from "uuid";
 import { dragTableInfo } from "@/api/tablelist/commonTable";
 import { camelCase } from "@/utils";
 import { listFormGroup } from "@/api/system/formGroup";
+
+import { elementIcons } from "@/utils/icon";
+
 export default {
   name: "ExcuteBtnMange",
   dicts: ["sys_show_hide", "sys_normal_disable"],
   components: { Treeselect, IconSelect },
   data() {
     return {
+      iconShow: true,
+      chooseIcons: "",
+      iconList: [],
+      // 顶部按钮 start
+      activeName: "right",
+      // 顶部按钮 end
       // 记录编辑状态
       editType: true, //true:新增   false:修改
       // 遮罩层
@@ -819,6 +898,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         btnName: "",
+        btnGroupType: "right",
       },
       // btnGroupName: "",
       // 分页数据
@@ -896,71 +976,37 @@ export default {
         btnHasPermi: "", //权限字符
         btnSort: 0, //按钮顺序
         btnKey: "",
+
+        btnStyle: "", //top 类型的按钮参数
       },
-      conditionBtnData: [],
-      btnTypeOptions: [
-        // {
-        //   value: 0,
-        //   label: "操作按钮",
-        // },
-        // {
-        //   value: 1,
-        //   label: "其它",
-        // },
-        // {
-        //   value: 2,
-        //   label: "表单",
-        // },
-        // {
-        //   value: 3,
-        //   label: "内链",
-        // },
-        // {
-        //   value: 4,
-        //   label: "流程",
-        // },
-        // {
-        //   value: 5,
-        //   label: "脚本",
-        // },
-        {
-          // value: "6",
-          value: "DIRECTORY",
-          label: "目录",
-        },
-        {
-          // value: "7",
-          value: "OUTLINK",
-          label: "外链",
-        },
+      btnStyleOptions: [
         {
-          // value: "3",
-          value: "INNERLINK",
-          label: "内链",
+          value: "primary",
+          label: "primary",
         },
         {
-          value: "INSERT",
-          label: "新增",
+          value: "success",
+          label: "success",
         },
         {
-          // value: "8",
-          value: "UPDATE",
-          label: "修改",
+          value: "warning",
+          label: "warning",
         },
         {
-          value: "DELETE",
-          label: "删除",
+          value: "danger",
+          label: "danger",
         },
-
         {
-          value: "EXECUTE",
-          label: "执行脚本",
+          value: "info",
+          label: "info",
         },
         {
-          value: "INITIATED",
-          label: "发起流程",
+          value: "text",
+          label: "text",
         },
       ],
+      conditionBtnData: [],
+
       formOptions: [],
       groupFormOptions: [], //表单组选项
       tableOptions: [],
@@ -1037,10 +1083,9 @@ export default {
       ],
     };
   },
-  // created() {
-  //   this.getList();
-  //   this.initFormSubData();
-  // },
+  created() {
+    this.iconList = elementIcons;
+  },
   mounted() {
     this.getList();
     this.initFormSubData();
@@ -1053,8 +1098,108 @@ export default {
         return this.groupFormOptions;
       }
     },
+    btnTypeOptions() {
+      if (this.queryParams.btnGroupType == "right") {
+        return [
+          {
+            value: "DIRECTORY",
+            label: "目录",
+          },
+          {
+            value: "OUTLINK",
+            label: "外链",
+          },
+          {
+            value: "INNERLINK",
+            label: "内链",
+          },
+          {
+            value: "INSERT",
+            label: "新增",
+          },
+          {
+            value: "UPDATE",
+            label: "修改",
+          },
+          {
+            value: "DELETE",
+            label: "删除",
+          },
+
+          {
+            value: "EXECUTE",
+            label: "执行脚本",
+          },
+          {
+            value: "INITIATED",
+            label: "发起流程",
+          },
+          {
+            value: "PRINT",
+            label: "打印",
+          },
+        ];
+      } else {
+        return [
+          {
+            value: "OUTLINK",
+            label: "外链",
+          },
+          {
+            value: "INNERLINK",
+            label: "内链",
+          },
+          {
+            value: "INSERT",
+            label: "新增",
+          },
+          {
+            value: "UPDATE",
+            label: "修改",
+          },
+          {
+            value: "DELETE",
+            label: "删除",
+          },
+
+          {
+            value: "EXECUTE",
+            label: "执行脚本",
+          },
+          {
+            value: "INITIATED",
+            label: "发起流程",
+          },
+          {
+            value: "PRINT",
+            label: "打印",
+          },
+          {
+            value: "IMPORT",
+            label: "导入",
+          },
+          {
+            value: "EXPORT",
+            label: "导出",
+          },
+        ];
+      }
+    },
   },
   methods: {
+    setIcon(val) {
+      console.log(val);
+      this.btnGroupFormData.btnIcon = val; //将i的样式设为选中的样式el-icon-xxx
+      this.iconShow = false;
+      this.$nextTick(() => {
+        this.iconShow = true;
+      });
+      // this.chooseIcons = ""
+    },
+    // tab切换回调
+    handleClick(value) {
+      this.getList();
+    },
     // 自定义字段校验
     checkBtnFormKey(rule, value, callback) {
       let { btnType } = this.btnGroupFormData;
@@ -1347,7 +1492,16 @@ export default {
         if (btnShowCondition) {
           this.btnHidenCondtionData = JSON.parse(btnShowCondition);
         }
-        this.btnGroupFormData = response.data;
+        if (this.queryParams.btnGroupType == "top") {
+          let temp = response.data.btnIcon.split("@");
+          response.data.btnIcon = temp[0];
+          this.btnGroupFormData = response.data;
+          this.btnGroupFormData.btnStyle = temp[1];
+        } else {
+          this.btnGroupFormData = response.data;
+        }
+        console.log(this.btnGroupFormData);
+
         this.open = true;
         this.title = "修改按钮";
       });
@@ -1400,6 +1554,10 @@ export default {
           }
           this.btnGroupFormData.btnShowCondition = this.getHidenConditions();
           console.log(this.btnGroupFormData.btnShowCondition);
+          this.btnGroupFormData.btnGroupType = this.queryParams.btnGroupType; //添加按钮组类型
+          if (this.btnGroupFormData.btnGroupType == "top") {
+            this.btnGroupFormData.btnIcon += `@${this.btnGroupFormData.btnStyle}`;
+          }
           if (this.editType) {
             // 新增按钮组
             this.btnGroupFormData.btnKey = uuidv4();
@@ -1532,6 +1690,34 @@ export default {
 };
 </script>
 <style scoped lang="scss" scoped>
+.iconList {
+  width: 400px;
+  height: 300px;
+  overflow-y: scroll; //y轴显示滚动条
+  overflow-x: hidden; //x轴溢出隐藏
+  display: flex;
+  justify-content: space-around;
+  flex-wrap: wrap; //一定要换行
+  i {
+    display: inline-block;
+    width: 60px;
+    height: 45px;
+    color: #000000;
+    font-size: 20px;
+    border: 1px solid #e6e6e6;
+    border-radius: 4px;
+    cursor: pointer;
+    text-align: center;
+    line-height: 45px;
+    margin: 5px;
+
+    //&:hover {
+    //  color: $ft;
+    //  border-color: $ft;
+    //}
+  }
+}
+
 /* #app .sidebar-container .submenu-title-noDropdown:hover, #app .sidebar-container .el-submenu__title:hover {
     background-color: rgba(0, 0, 0, 0.06) !important;
 }  */
@@ -1544,12 +1730,14 @@ export default {
   flex-direction: column;
   align-items: center;
 }
+
 .table-wrap {
   width: 100%;
   display: flex;
   flex-direction: column;
   align-items: center;
 }
+
 .title {
   font-weight: 600;
 }

+ 384 - 42
zkqy-ui/src/views/system/formGroupMange/index.vue

@@ -224,8 +224,8 @@
             @change="mainFormChange"
           >
             <el-option
-              v-for="item in formOptionList"
-              :key="item.formKey"
+              v-for="(item, index) in formOptionList"
+              :key="index"
               :label="item.dfNickname"
               :value="item.formKey"
             >
@@ -282,8 +282,8 @@
               @change="subFormChangeHandler(scope.row)"
             >
               <el-option
-                v-for="item in formOptionList"
-                :key="item.formKey"
+                v-for="(item, index) in formOptionList"
+                :key="index"
                 :label="item.dfNickname"
                 :value="item.formKey"
               >
@@ -304,6 +304,7 @@
               placeholder="请选择子表单键"
               clearable
               filterable
+              @change="subFormItemChangeHandler(scope.row)"
             >
               <el-option
                 v-for="item in scope.row.formItemList"
@@ -345,30 +346,6 @@
             </el-select>
           </template>
         </el-table-column>
-        <!-- <el-table-column prop="mainFormItem" label="依赖的主表单键">
-          <template slot-scope="scope">
-            <el-select
-              v-model="scope.row.relateMainItem"
-              placeholder="请选择表单键"
-              clearable
-              filterable
-            >
-              <el-option
-                v-for="item in groupForm.mainFormItemOptions"
-                :key="item.model"
-                :label="item.label"
-                :value="item.tableName + '.' + item.model"
-              >
-                <span class="discribe" style="float: left">{{
-                  item.label
-                }}</span>
-                <span style="float: right; color: #8492a6; font-size: 13px">{{
-                  item.tableName + "." + item.model
-                }}</span>
-              </el-option>
-            </el-select>
-          </template>
-        </el-table-column> -->
         <el-table-column prop="isShow" label="是否展示">
           <template slot-scope="scope">
             <el-switch
@@ -381,7 +358,28 @@
             </el-switch>
           </template>
         </el-table-column>
-
+        <el-table-column prop="queryMap" label="查询条件">
+          <template slot-scope="scope">
+            <el-button
+              type="info"
+              size="small"
+              @click="editHandler(scope.row, 'query', scope.$index)"
+            >
+              编辑条件
+            </el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="queryMap" label="插入条件">
+          <template slot-scope="scope">
+            <el-button
+              type="info"
+              size="small"
+              @click="editHandler(scope.row, 'insert', scope.$index)"
+            >
+              编辑条件
+            </el-button>
+          </template>
+        </el-table-column>
         <el-table-column label="操作">
           <template slot-scope="scope">
             <el-button
@@ -412,6 +410,146 @@
         </span>
       </template>
     </el-dialog>
+
+    <!-- 条件弹窗 -->
+    <el-dialog :title="conditionTitle" :visible.sync="queryShow">
+      <el-table
+        v-if="conditionTableShow"
+        :data="conditionTableData"
+        border
+        stripe
+      >
+        <el-table-column type="index" width="50" />
+        <el-table-column prop="fieldName" label="子表单键">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.fieldName"
+              placeholder="请选择子表单键"
+              clearable
+              filterable
+            >
+              <el-option
+                v-for="item in fieldOptions"
+                :key="item.model"
+                :label="item.label"
+                :value="item.tableName + '.' + item.model"
+              >
+                <span class="discribe" style="float: left">{{
+                  item.label
+                }}</span>
+                <span style="float: right; color: #8492a6; font-size: 13px">{{
+                  item.tableName + "." + item.model
+                }}</span>
+              </el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column prop="type" label="类型">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.type"
+              placeholder="请选择类型"
+              filterable
+              @change="changeType(scope.row)"
+            >
+              <el-option
+                v-for="item in typeOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column prop="tableName" label="依赖表单">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.tableName"
+              placeholder="请选择依赖表单"
+              clearable
+              filterable
+              @change="changeTableName(scope.row)"
+              :disabled="scope.row.type === 'defaultValue'"
+            >
+              <el-option
+                v-for="item in relaTableOptions"
+                :key="item.dfTableName"
+                :label="item.dfName"
+                :value="item.formKey"
+              >
+                <span class="discribe" style="float: left">{{
+                  item.dfName
+                }}</span>
+                <span style="float: right; color: #8492a6; font-size: 13px">{{
+                  item.dfTableName
+                }}</span>
+              </el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column prop="relaField" label="依赖字段">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.relaField"
+              placeholder="请选择依赖字段"
+              clearable
+              filterable
+              :disabled="scope.row.type === 'defaultValue'"
+            >
+              <el-option
+                v-for="item in scope.row.mainFormItemList"
+                :key="item.model"
+                :label="item.label"
+                :value="item.tableName + '.' + item.model"
+              >
+                <span class="discribe" style="float: left">{{
+                  item.label
+                }}</span>
+                <span style="float: right; color: #8492a6; font-size: 13px">{{
+                  item.tableName + "." + item.model
+                }}</span>
+              </el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column prop="refValue" label="默认值">
+          <template slot-scope="scope">
+            <el-input
+              :disabled="scope.row.type === 'relateValue'"
+              v-model="scope.row.refValue"
+              placeholder="请输入默认值"
+              clearable
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="操作">
+          <template slot-scope="scope">
+            <el-button
+              type="danger"
+              size="mini"
+              @click="handleRemove(scope.$index, scope.row)"
+            >
+              删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="btn-wrap">
+        <el-button type="primary" size="mini" @click="addCondition">
+          新增条件
+        </el-button>
+      </div>
+      <template #footer>
+        <span>
+          <el-button @click="queryShow = false">取消</el-button>
+          <el-button type="primary" @click="conditionConfirmHandler"
+            >确认</el-button
+          >
+        </span>
+      </template>
+    </el-dialog>
+    <!-- 新增条件弹窗 -->
   </div>
 </template>
 
@@ -426,6 +564,13 @@ import {
   updateFormGroup,
 } from "@/api/system/formGroup";
 import { v4 as uuidv4 } from "uuid";
+import { mapState } from "vuex";
+import {
+  getFormName,
+  getListName,
+  dragTablePreview,
+} from "@/api/dragform/form.js";
+
 export default {
   name: "formRelateMange",
   props: [],
@@ -503,13 +648,144 @@ export default {
           { required: true, message: "请选择表单主键", trigger: "change" },
         ],
       },
+      //  查询条件数据
+      // start
+      flag: "", //query:查询条件  insert:插入条件
+      editIndex: "",
+      queryMap: {},
+      queryShow: false,
+      conditionTableData: [],
+      conditionTitle: "",
+      fieldOptions: [],
+      relaTableOptions: [], //依赖
+      typeOptions: [
+        {
+          label: "自定义值",
+          value: "defaultValue",
+        },
+        {
+          label: "依赖值",
+          value: "relateValue",
+        },
+      ],
+      conditionTableShow: true,
+      // end
     };
   },
-  computed: {},
+  computed: {
+    ...mapState({
+      databaseName: (state) => state.user.dataSource.databaseName,
+      databaseType: (state) => state.user.dataSource.databaseType,
+      username: (state) => state.user.dataSource.username,
+      tenantId: (state) => state.user.tenant.tenantId,
+    }),
+  },
   mounted() {
     this.getList();
   },
   methods: {
+    //条件编辑确认回调
+    conditionConfirmHandler() {
+      if (this.flag == "query") {
+        this.subFormList[this.editIndex].queryMap = this.conditionTableData;
+      } else if (this.flag == "insert") {
+        this.subFormList[this.editIndex].insertMap = this.conditionTableData;
+      }
+      this.queryShow = false;
+    },
+    // 条件类型改变回调
+    changeType(row) {
+      // if(){}
+      if (row.type == "defaultValue") {
+        row.tableName = "";
+        row.relaField = "";
+      } else {
+        row.refValue = "";
+      }
+    },
+    // 根据formKey获取表单绑定的表名
+    getTableNameByFormKey(formKey) {
+      let temp = this.formOptionList.find((item) => item.formKey == formKey);
+      return temp?.dfTableName || "";
+    },
+    // 依赖的主表单变化回调
+    async changeTableName(row) {
+      if (row.tableName) {
+        let tableName = this.getTableNameByFormKey(row.tableName);
+        let data = {
+          databaseName: this.databaseName,
+          databaseType: this.databaseType,
+          tableName,
+        };
+        try {
+          let res = await getListName(data);
+          row.mainFormItemList = res.map((item) => {
+            return {
+              model: item.fieldName,
+              label: item.fieldDescription,
+              tableName,
+            };
+          });
+          this.conditionTableShow = false;
+          this.$nextTick(() => {
+            this.conditionTableShow = true;
+          });
+        } catch (error) {
+          console.error(error);
+        }
+      }
+    },
+    // 新增条件
+    addCondition() {
+      this.conditionTableData.push({
+        fieldName: "", //字段
+        type: "", //类型
+        tableName: "", //依赖表单
+        relaField: "", //依赖字段
+        refValue: "", //默认值
+        mainFormItemList: [], //表单键列表
+      });
+    },
+    // 删除条件
+    handleRemove(index, row) {
+      this.conditionTableData.splice(index, 1);
+    },
+    // 条件编辑回调
+    editHandler(row, flag, index) {
+      console.log(row);
+      this.flag = flag;
+      this.editIndex = index;
+      if (flag == "query") {
+        //编辑查询条件
+        this.conditionTitle = "查询条件编辑";
+        this.conditionTableData = row.queryMap
+          ? JSON.parse(JSON.stringify(row.queryMap))
+          : [];
+      } else {
+        //编辑插入条件
+        this.conditionTitle = "插入条件编辑";
+        this.conditionTableData = row.insertMap
+          ? JSON.parse(JSON.stringify(row.insertMap))
+          : [];
+      }
+      console.log(this.conditionTableData);
+      this.fieldOptions = row.formItemList || [];
+      // 可选表单范围  主表单和当前表单上面的子表单
+      let formKeys = this.subFormList
+        .map((item) => item.formKey)
+        .slice(0, index);
+      formKeys.unshift(this.groupForm.mainFormName);
+      this.relaTableOptions = this.formOptionList.filter((item) =>
+        formKeys.includes(item.formKey)
+      ); //可依赖表单选项
+      console.log(this.relaTableOptions);
+      this.queryShow = true;
+    },
+    // 子表单键改变回调
+    subFormItemChangeHandler(row) {
+      row.dfTableName = row.formItem.split(".")[0];
+      console.log(row.dfTableName);
+    },
     // 新增表单组回调
     async addHandler() {
       this.resetDialogForm();
@@ -549,6 +825,21 @@ export default {
           } = this.groupForm;
           let mainTable = mainFormTable + ":" + mainFormName;
           let tempFormKeys = this.subFormList.map((item) => item.formKey);
+          // 去掉多余数据 start
+          this.subFormList.forEach((item) => {
+            if (item.queryMap) {
+              item.queryMap.forEach((i) => {
+                delete i.mainFormItemList;
+              });
+            }
+
+            if (item.insertMap) {
+              item.insertMap.forEach((i) => {
+                delete i.mainFormItemList;
+              });
+            }
+          });
+          // 去掉多余数据 end
           tempFormKeys.push(mainFormName);
           let formKeys = JSON.stringify(tempFormKeys);
           let relationJson = JSON.stringify({
@@ -612,14 +903,37 @@ export default {
       }
     },
     // 主表单变化回调
-    mainFormChange(formKey) {
-      let targetForm = this.getFormJson(formKey);
-      console.log("targetForm", targetForm);
-      if (targetForm) {
-        this.groupForm.mainFormItemOptions = getFormItems(
-          targetForm.dfVueTemplate
-        );
-        this.groupForm.mainFormTable = targetForm.dfTableName;
+    async mainFormChange(mainFormName) {
+      // let targetForm = this.getFormJson(formKey);
+      // console.log("targetForm", targetForm);
+      // if (targetForm) {
+      //   this.groupForm.mainFormItemOptions = getFormItems(
+      //     targetForm.dfVueTemplate
+      //   );
+      //   this.groupForm.mainFormTable = targetForm.dfTableName;
+      // }
+      let dfTableName = this.getTableNameByFormKey(mainFormName);
+      let data = {
+        databaseName: this.databaseName,
+        databaseType: this.databaseType,
+        tableName: dfTableName,
+      };
+      try {
+        let res = await getListName(data);
+        this.groupForm.mainFormItemOptions = res.map((item) => {
+          return {
+            model: item.fieldName,
+            label: item.fieldDescription,
+            tableName: dfTableName,
+          };
+        });
+        this.groupForm.mainFormTable = dfTableName;
+        // this.conditionTableShow = false;
+        // this.$nextTick(() => {
+        //   this.conditionTableShow = true;
+        // });
+      } catch (error) {
+        console.error(error);
       }
     },
     // 获取fId对应的表单JSON数据
@@ -628,7 +942,19 @@ export default {
       return this.formOptionList.find((item) => item.formKey === formKey);
     },
     // 字表单变化回调
-    subFormChangeHandler(row) {
+    async subFormChangeHandler(row) {
+      // if (!row.formKey) {
+      //   Object.assign(row, {
+      //     dfTableName: "",
+      //     formItemList: [],
+      //     formItem: "",
+      //   });
+      // } else {
+      //   let targetForm = this.getFormJson(row.formKey);
+      //   if (targetForm) {
+      //     row.formItemList = getFormItems(targetForm.dfVueTemplate);
+      //   }
+      // }
       if (!row.formKey) {
         Object.assign(row, {
           dfTableName: "",
@@ -636,9 +962,23 @@ export default {
           formItem: "",
         });
       } else {
-        let targetForm = this.getFormJson(row.formKey);
-        if (targetForm) {
-          row.formItemList = getFormItems(targetForm.dfVueTemplate);
+        let tableName = this.getTableNameByFormKey(row.formKey);
+        let data = {
+          databaseName: this.databaseName,
+          databaseType: this.databaseType,
+          tableName: tableName,
+        };
+        try {
+          let res = await getListName(data);
+          row.formItemList = res.map((item) => {
+            return {
+              model: item.fieldName,
+              label: item.fieldDescription,
+              tableName: tableName,
+            };
+          });
+        } catch (error) {
+          console.error(error);
         }
       }
     },
@@ -655,6 +995,8 @@ export default {
         formItem: "", //从表单键
         relateMainItem: "", //依赖的主表单键
         isShow: true, //是否显示该表单
+        insertMap: [],
+        queryMap: [],
       });
     },
 

+ 3 - 0
zkqy-ui/src/views/system/fromModel/index.vue

@@ -173,6 +173,7 @@ export default {
         mainTableName,
         formDescription,
         formNodeId,
+        formType,
       } = jsonData.config;
       if (!this.fid) {
         addForm({
@@ -186,6 +187,7 @@ export default {
           dfNotes: formDescription,
           dfFormSql: JSON.stringify(formSQL),
           dfNodeId: formNodeId,
+          spare: formType,
         }).then((res) => {
           console.log(res);
           this.$message(res.msg);
@@ -207,6 +209,7 @@ export default {
           dfNotes: formDescription,
           dfFormSql: JSON.stringify(formSQL),
           dfNodeId: formNodeId,
+          spare: formType,
         }).then((res) => {
           console.log(res);
           this.$message(res.msg);

File diff ditekan karena terlalu besar
+ 333 - 312
zkqy-ui/src/views/system/tenant/index.vue


+ 3 - 2
zkqy-ui/src/views/system/tenant/tenantIndex.vue

@@ -457,8 +457,7 @@
       title="配置登录页"
       width="800px"
       :visible.sync="loginOpen"
-      append-to-body
-    >
+      append-to-body>
       <el-form
         ref="loginFormRef"
         :model="loginForm"
@@ -466,6 +465,8 @@
         :rules="rules"
         label-width="80px"
       >
+
+
         <el-form-item prop="loginPageNumber">
           <span slot="label">
             <el-tooltip

+ 166 - 40
zkqy-ui/src/views/tableMange/components/ClassificationQueryPanel.vue

@@ -7,16 +7,15 @@
       size="mini"
       @click="addCondition"
     >
-      添加分类按钮
+      添加按钮
     </el-button>
     <el-table :data="tableData" style="width: 100%">
-      <el-table-column align="center" label="序号" type="index" width="50">
-      </el-table-column>
-      <el-table-column align="center" prop="btnName" label="按钮名称">
+      <!-- <el-table-column align="center" label="序号" type="index" width="50">
+      </el-table-column> -->
+      <el-table-column align="center" prop="conditionNotes" label="按钮名称">
         <template slot-scope="scope">
           <el-input
-            v-model="scope.row.btnName"
-            placeholder=""
+            v-model="scope.row.conditionNotes"
             size="normal"
             clearable
           ></el-input>
@@ -24,13 +23,13 @@
       </el-table-column>
       <el-table-column
         align="center"
-        prop="fieldName"
+        prop="conditionField"
         label="条件字段"
         width="100"
       >
         <template slot-scope="scope">
           <el-select
-            v-model="scope.row.fieldName"
+            v-model="scope.row.conditionField"
             placeholder="请选择条件字段"
             clearable
             filterable
@@ -64,9 +63,92 @@
           </el-select>
         </template>
       </el-table-column> -->
-      <el-table-column align="center" prop="refValue" label="参照值">
+      <!-- <el-table-column align="center" prop="conditionType" label="类型">
+        <template slot-scope="scope">
+          <el-select v-model="scope.row.conditionType" clearable filterable>
+            <el-option
+              v-for="item in conditionTypeOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </template>
+      </el-table-column> -->
+      <el-table-column align="center" prop="componentType" label="按钮类型">
+        <template slot-scope="scope">
+          <el-select v-model="scope.row.componentType" clearable filterable>
+            <el-option
+              v-for="item in componentTypeOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="componentSize" label="按钮尺寸">
+        <template slot-scope="scope">
+          <el-select v-model="scope.row.componentSize" clearable filterable>
+            <el-option
+              v-for="item in componentSizeOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="componentIcon" label="按钮图标">
+        <template slot-scope="scope">
+          <el-popover
+            placement="bottom-start"
+            width="460"
+            trigger="click"
+            @show="$refs['iconSelect'].reset()"
+          >
+            <IconSelect
+              ref="iconSelect"
+              @selected="
+                (name) => {
+                  selected(name, scope.row);
+                }
+              "
+              :active-icon="scope.row.componentIcon"
+            />
+            <el-input
+              slot="reference"
+              v-model="scope.row.componentIcon"
+              placeholder="点击选择图标"
+              readonly
+            >
+              <svg-icon
+                v-if="scope.row.componentIcon"
+                slot="prefix"
+                :icon-class="scope.row.componentIcon"
+                style="width: 25px"
+              />
+              <i v-else slot="prefix" class="el-icon-search el-input__icon" />
+            </el-input>
+          </el-popover>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        align="center"
+        prop="conditionDefaultValue"
+        label="按钮值"
+      >
         <template slot-scope="scope">
-          <el-input v-model="scope.row.refValue"></el-input>
+          <el-input v-model="scope.row.conditionDefaultValue"></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="sort" label="排序">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.sort"></el-input>
         </template>
       </el-table-column>
       <el-table-column label="操作">
@@ -85,10 +167,11 @@
 </template>
 
 <script>
+import IconSelect from "@/components/IconSelect";
 export default {
   name: "ClassificationQueryPanel",
-  props: ["tableFieldList", "filterDataEcho"],
-  components: {},
+  props: ["tableFieldList", "classificationDataEcho"],
+  components: { IconSelect },
   data() {
     return {
       tableData: [],
@@ -115,6 +198,43 @@ export default {
           label: "<=",
         },
       ],
+      conditionTypeOptions: [
+        {
+          label: "按钮",
+          value: "button",
+        },
+      ],
+      componentTypeOptions: [
+        {
+          value: "primary",
+          label: "primary",
+        },
+        {
+          value: "success",
+          label: "success",
+        },
+        {
+          value: "warning",
+          label: "warning",
+        },
+        {
+          value: "danger",
+          label: "danger",
+        },
+        {
+          value: "info",
+          label: "info",
+        },
+        {
+          value: "text",
+          label: "text",
+        },
+      ],
+      componentSizeOptions: [
+        { value: "small", label: "small" },
+        { value: "default", label: "default" },
+        { value: "large", label: "large" },
+      ],
     };
   },
   watch: {
@@ -124,21 +244,21 @@ export default {
 
         console.log(this.fieldList);
         // 初始化删除逻辑条件
-        let is_has_del_flag = nval.find((item) => {
-          return item.fieldName == "del_flag";
-        });
-        console.log(is_has_del_flag);
-        if (is_has_del_flag) {
-          let { fieldName, tableName } = is_has_del_flag;
-          this.tableData = [];
-          this.tableData.push({
-            fieldName: tableName + "." + fieldName,
-            condition: "=",
-            refValue: 0,
-          });
-        } else {
-          this.tableData = [];
-        }
+        // let is_has_del_flag = nval.find((item) => {
+        //   return item.fieldName == "del_flag";
+        // });
+        // console.log(is_has_del_flag);
+        // if (is_has_del_flag) {
+        //   let { fieldName, tableName } = is_has_del_flag;
+        //   this.tableData = [];
+        //   this.tableData.push({
+        //     fieldName: tableName + "." + fieldName,
+        //     condition: "=",
+        //     refValue: 0,
+        //   });
+        // } else {
+        //   this.tableData = [];
+        // }
       },
       deep: true,
       immediate: true,
@@ -146,7 +266,8 @@ export default {
     myFilterDataEcho: {
       handler(val) {
         if (val) {
-          this.tableData = JSON.parse(decodeURIComponent(this.filterDataEcho));
+          console.log(val);
+          this.tableData = val;
         }
       },
       deep: true,
@@ -159,17 +280,29 @@ export default {
       return this.tableFieldList;
     },
     myFilterDataEcho() {
-      return this.filterDataEcho;
+      return this.classificationDataEcho;
     },
   },
   methods: {
+    // 选择图标
+    selected(name, row) {
+      console.log(name, row);
+      row.componentIcon = name;
+      // this.btnGroupFormData.btnIcon = name;
+    },
     // 新增条件回调
     addCondition() {
       this.tableData.push({
-        btnName: "", //按钮名称
-        fieldName: "",
+        conditionNotes: "", //按钮名称
+        conditionName: "",
+        conditionField: "", //条件字段
         // condition: "",
-        refValue: "",
+        conditionType: "button", //类型
+        conditionDefaultValue: "", //按钮值
+        sort: "", //排序
+        componentType: "", //按钮类型
+        componentsSize: "", //按钮大小
+        componentIcon: "", //按钮图标
       });
     },
     // 编辑条件回调
@@ -180,14 +313,7 @@ export default {
     },
     // 获取数据筛选条件
     getConditions() {
-      let res = this.tableData.filter((item) => {
-        return (
-          item.fieldName &&
-          item.condition &&
-          (item.refValue == 0 || item.refValue)
-        );
-      });
-      return res;
+      return this.tableData;
     },
     // 获取回显数据
     getEchoData() {

+ 2 - 4
zkqy-ui/src/views/tableMange/components/StyleFormPanel.vue

@@ -12,10 +12,8 @@
     <!-- 样式表格 -->
     <el-table :data="styleTableData" style="width: 100%">
       <el-table-column label="序号" type="index" width="50"> </el-table-column>
-      <el-table-column prop="styleName" label="样式名" width="100">
-      </el-table-column>
-      <el-table-column prop="styleDescription" label="描述" width="100">
-      </el-table-column>
+      <el-table-column prop="styleName" label="样式名"> </el-table-column>
+      <el-table-column prop="styleDescription" label="描述"> </el-table-column>
       <el-table-column label="操作">
         <template slot-scope="scope">
           <el-dropdown>

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

@@ -373,20 +373,12 @@
               >
               </el-table-column>
               <!-- <el-table-column prop="datafield" label="数据字段" width="80"> -->
-              <el-table-column
-                prop="statisticTitle"
-                label="统计标题"
-                width="83"
-              >
+              <el-table-column prop="statisticTitle" label="统计标题">
               </el-table-column>
-              <el-table-column
-                prop="statisticField"
-                label="统计数据"
-                width="80"
-              >
+              <el-table-column prop="statisticField" label="统计数据">
               </el-table-column>
               <!-- <el-table-column prop="type" label="类型" width="50"> -->
-              <el-table-column prop="statisticType" label="统计类型" width="50">
+              <el-table-column prop="statisticType" label="统计类型">
               </el-table-column>
 
               <el-table-column
@@ -443,13 +435,13 @@
               :filterDataEcho="filterDataEcho"
             ></DataFilterPanel>
           </el-tab-pane>
-          <!-- <el-tab-pane label="分类查询" name="classificationQuery">
+          <el-tab-pane label="按钮配置" name="classificationQuery">
             <ClassificationQueryPanel
               ref="classificationQueryRef"
               :tableFieldList="tableFieldList"
-              :filterDataEcho="filterDataEcho"
+              :classificationDataEcho="classificationDataEcho"
             ></ClassificationQueryPanel>
-          </el-tab-pane> -->
+          </el-tab-pane>
         </el-tabs>
       </el-col>
     </el-row>
@@ -719,6 +711,7 @@ import {
   addTableData,
   addStatistic,
   updateStatistic,
+  insertByDefaultBtn,
 } from "@/api/tablelist/commonTable";
 import { getDicts } from "@/api/system/dict/data";
 import {
@@ -729,7 +722,7 @@ import {
 import { getTableInfo, editTable } from "@/api/system/table.js";
 import { addDragTable } from "@/api/tablelist/commonTable.js";
 import { getParticMenu, updateMenu } from "@/api/system/menu.js";
-import { getMenuList, addMenu } from "@/api/menu.js";
+import { getMenuList, addMenu, tbnHasPerms } from "@/api/menu.js";
 import Queryfrom from "@/views/tablelist/commonTable/queryfrom.vue";
 import { mapState } from "vuex";
 import Sortable from "sortablejs";
@@ -740,6 +733,7 @@ import { listBtn } from "@/api/system/btn";
 import StyleFormPanel from "./components/StyleFormPanel.vue";
 import DataFilterPanel from "./components/DataFilterPanel.vue";
 import ClassificationQueryPanel from "./components/ClassificationQueryPanel.vue";
+
 export default {
   name: "tableMange",
   dicts: ["sys_time_format", "table_statistic_type"],
@@ -753,8 +747,11 @@ export default {
   },
   data() {
     return {
+      menuList: [], //路由数组
+      btnTemplate: [], //按钮模板
       isNeedNewMenu: false, //是否需要新菜单
       filterDataEcho: "", //数据过滤回显数据
+      classificationDataEcho: "", //分类查询回显数据
       staictitle: "添加统计数据字段",
       isInputInvalid: false,
       // 修改表格时的menuId
@@ -910,6 +907,13 @@ export default {
     };
   },
   computed: {
+    ...mapState({
+      databaseName: (state) => state.user.dataSource.databaseName,
+      databaseType: (state) => state.user.dataSource.databaseType,
+      username: (state) => state.user.dataSource.username,
+      tenantId: (state) => state.user.tenant.tenantId,
+      tenantName: (state) => state.user.tenant.tenantName,
+    }),
     // 数据字段
     dataArr() {
       return this.tableFieldList.filter((item) => item.isShow);
@@ -929,6 +933,7 @@ export default {
       databaseType: (state) => state.user.dataSource.databaseType,
       username: (state) => state.user.dataSource.username,
       tenantId: (state) => state.user.tenant.tenantId,
+      tenantCode: (state) => state.user.tenant.tenantCode,
     }),
     searchArr() {
       if (!this.templateInfo?.where?.length) return [];
@@ -979,6 +984,51 @@ export default {
     },
   },
   methods: {
+    // 获取按钮模板数据
+    async getBtnTemplate() {
+      try {
+        let res = await getDicts("drag_table_btn_template");
+        if (res.code == 200) {
+          this.btnTemplate = res.data.map((item) => JSON.parse(item.remark));
+        } else {
+          console.log(res);
+          this.$message.error("获取按钮模板数据失败");
+        }
+      } catch (error) {
+        console.log(error);
+        this.$message.error("获取按钮模板数据失败");
+      }
+    },
+    // 格式化按钮模板数据
+    formateBtnTemplate() {
+      let res = {
+        hasPermiName: "",
+        dragTableBtnTop: {},
+        dragTableBtnRight: {},
+      };
+      let moduleName = this.menuList.find(
+        (item) => item.menuId == this.formData.routePath
+      )?.menuName;
+      res.hasPermiName =
+        this.tenantCode + ":" + moduleName + ":" + this.formData.menuName;
+      let primaryKey = this.tableName + "." + this.formData.primaryKey;
+      this.btnTemplate.forEach((item) => {
+        item.children.forEach((i) => {
+          if (i.btnType == "UPDATE" || i.btnType == "DELETE") {
+            let btnParams = { commonFieldData: [], conditionData: [] };
+            btnParams.conditionData.push({
+              fieldName: primaryKey,
+              fieldValue: "",
+            });
+            i.btnParams = JSON.stringify(btnParams);
+          }
+        });
+      });
+
+      res.dragTableBtnTop = this.btnTemplate[0];
+      res.dragTableBtnRight = this.btnTemplate[1];
+      return res;
+    },
     // 字段描述验证规则
     // blurval(value){
     //   this.isInputInvalid = value == '' ?  true : false;
@@ -1187,7 +1237,10 @@ export default {
     // 获取路由表单数据
     async getMenuList() {
       let res = await getMenuList();
-      this.menus = this.handleTree(res.data, "menuId");
+      if (res.code == 200) {
+        this.menuList = res.data;
+        this.menus = this.handleTree(res.data, "menuId");
+      }
     },
     // 校验字段合法性(递归版)
     validateField(tableFieldList, validateParams) {
@@ -1333,9 +1386,10 @@ export default {
         );
       }
     },
-
     // 拼接查询sql语句
     getSQLStr() {
+      let classificationData =
+        this.$refs.classificationQueryRef.getConditions(); //按钮中的查询条件
       let prefix = "{DBNAME}.";
       let sqlType = this.databaseType; //数据库类型
       let asOrSpace = sqlType == "oracle" ? " " : " AS ";
@@ -1568,6 +1622,26 @@ export default {
       //   }
       // });
     },
+
+    // 处理配置的条件查询按钮数据
+    getBtnData(searchArr = []) {
+      let classificationData =
+        this.$refs.classificationQueryRef.getConditions();
+      let res = searchArr
+        .map((item) => {
+          return {
+            conditionField: item,
+            conditionName: "超级查询",
+            conditionType: "SuperQuery",
+          };
+        })
+        .filter((item) => {
+          return !classificationData.some((v) => {
+            return v.conditionField == item.conditionField;
+          });
+        });
+      return [...res, ...classificationData];
+    },
     // 创建回调
     async createHandle() {
       // console.log(123);
@@ -1625,6 +1699,9 @@ export default {
           this.tableKey = uuidv4();
           // 表单
           let result;
+          let btnTemplate = this.formateBtnTemplate();
+          console.log(btnTemplate);
+
           // if (this.tId && this.menuId) {
           if (this.menuId && !this.isNeedNewMenu) {
             //原菜单存在,仅需要修改菜单数据
@@ -1644,7 +1721,6 @@ export default {
             };
             result = await updateMenu(payLoad);
           } else if (this.isNeedNewMenu) {
-            console.log(111);
             //给旧表格新增菜单
             let tableKeyObj = {
               tableKey: this.editData.tableKey,
@@ -1701,6 +1777,7 @@ export default {
             });
 
             // let isAsc = this.formData.isAsc == "ASC" ? 0 : 1;
+            let btnData = this.getBtnData(searchFieldList);
             let data = {
               conditionDefaultValueMap, //数据筛选条件
               tId: this.tId,
@@ -1714,7 +1791,8 @@ export default {
               sqlKey: this.tableKey,
               dtColumnName: columns, //列字段标题名称(存储显示字段信息
               timeFormat: this.formData.timeFormate,
-              searchFieldList: searchFieldList, //搜索字段数组
+              // searchFieldList: searchFieldList, //搜索字段数组
+              searchFieldList: btnData, //搜索字段数组
               tableSql: this.getSQLStr(), //  暂定
               tableExportField: tableExportField, //导出字段名及列名
               echoData: JSON.stringify(echoData),
@@ -1794,6 +1872,25 @@ export default {
                   dtTableName: this.tableName,
                 });
               }
+              if (res.code == 200) {
+                // 新增默认按钮数据
+                btnTemplate.tableKey = data.tableKey;
+                btnTemplate.menuID = result.data;
+                let btnRes = await insertByDefaultBtn(btnTemplate);
+                if (btnRes.code == 200) {
+                  console.log(btnRes);
+                  // 发送权限请求
+                  let payload = btnRes.data.map((item) => {
+                    return {
+                      ...item,
+                      tenantId: this.tenantId,
+                    };
+                  });
+                  let btnPowerRes = await tbnHasPerms(payload);
+                } else {
+                  console.error(btnRes);
+                }
+              }
             }
 
             // 关闭当前页面
@@ -1819,6 +1916,9 @@ export default {
               }
               this.isShowPreview = false;
             }
+          } else {
+            this.$message.warning(result.msg);
+            return;
           }
         } else {
           this.$message.warning("请完善表单");
@@ -1868,7 +1968,10 @@ export default {
           this.menus,
           {}
         );
-
+        //处理按钮回显数据
+        this.classificationDataEcho = res.data.searchFieldList.filter(
+          (item) => item.conditionType == "button"
+        );
         if (!this.formData.routePath) {
           this.$message.warning("该表格菜单路由已经删除,请重新配置");
           this.isNeedNewMenu = true;
@@ -2002,6 +2105,7 @@ export default {
   },
   created() {},
   async mounted() {
+    this.getBtnTemplate();
     this.getAllTable();
     this.initDragTable();
     await this.getMenuList();
@@ -2049,10 +2153,10 @@ export default {
   vertical-align: middle !important;
 }
 .menudata {
-  width: 30% !important;
+  width: 70% !important;
 }
 .edit {
-  width: 70% !important;
+  width: 30% !important;
 }
 .mb10 {
   margin-top: 10px;

+ 1 - 1
zkqy-ui/src/views/tablelist/commonTable/listInfo.vue

@@ -459,7 +459,7 @@ export default {
       // 序列化当前查询参数列表
       queryParams && (this.queryParams.queryMap = queryParams.queryMap);
       // 获取当前表单结构信息
-      dragTableInfo({ queryMap: { tableKey: this.tableKey } })
+      dragTableInfo({ "queryMap": { "tableKey": this.tableKey } })
         .then((res) => {
           // 得到当前模版信息 --- sql columns queryWhere
           this.templateInfo = res.data.resultMap;

+ 6 - 7
zkqy-ui/vue.config.js

@@ -9,7 +9,7 @@ const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
 const CompressionPlugin = require('compression-webpack-plugin')
 
 const name = process.env.VUE_APP_TITLE || '后台管理系统' // 网页标题
-const port = process.env.port || process.env.npm_config_port || 80 // 端口
+const port = process.env.port || process.env.npm_config_port || 1024 // 端口
 const isDev = process.env.NODE_ENV !== "production";
 // vue.config.js 配置说明
 //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
@@ -37,30 +37,29 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        // target: `http://192.168.110.76:8080`,//xue
-        target: `http://192.168.110.59:8080`,//han
-        // target: `http://62.234.61.92:8080`,
+        // target: `http://192.168.110.59:8080`,
+        target: `http://192.168.110.59:8080`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''
         }
       },
       '/DB': {
-        target: `http://62.234.61.92:8099`,
+        target: `http://192.168.110.59:8099`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + '/DB']: ''
         }
       },
       '/FORM': {
-        target: `http://62.234.61.92:8088`,
+        target: `http://192.168.110.59:8088`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + '/FORM']: ''
         }
       },
       '/BPM': {
-        target: `http://62.234.61.92:8055`,
+        target: `http://192.168.110.59:8055`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + '/BPM']: ''

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini