소스 검색

样式修改

yang kai 2 년 전
부모
커밋
92cf36e239

+ 8 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java

@@ -60,8 +60,14 @@ public class SysMenuController extends BaseController
     @GetMapping("/treeselect")
     public AjaxResult treeselect(SysMenu menu)
     {
-        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
-        return success(menuService.buildMenuTreeSelect(menus));
+        if (getTenantId() != null) {
+            List<SysMenu> menus = menuService.selectMenuList(menu, getUserId(), getTenantId());
+            return success(menuService.buildMenuTreeSelect(menus));
+        } else {
+            List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+            return success(menuService.buildMenuTreeSelect(menus));
+        }
+
     }
 
     /**

+ 2 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

@@ -60,6 +60,7 @@ public class SysRoleController extends BaseController
     public TableDataInfo list(SysRole role)
     {
         startPage();
+        role.setTenantId(getTenantId());
         List<SysRole> list = roleService.selectRoleList(role);
         return getDataTable(list);
     }
@@ -102,6 +103,7 @@ public class SysRoleController extends BaseController
             return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
         }
         role.setCreateBy(getUsername());
+        role.setTenantId(getTenantId());
         return toAjax(roleService.insertRole(role));
 
     }

+ 11 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java

@@ -219,6 +219,16 @@ public class SysRole extends BaseEntity
         this.permissions = permissions;
     }
 
+    private Long tenantId;
+
+    public Long getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Long tenantId) {
+        this.tenantId = tenantId;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@@ -236,6 +246,7 @@ public class SysRole extends BaseEntity
             .append("updateBy", getUpdateBy())
             .append("updateTime", getUpdateTime())
             .append("remark", getRemark())
+                .append("tenantId", getTenantId())
             .toString();
     }
 }

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java

@@ -19,6 +19,13 @@ public interface SysMenuMapper
      */
     public List<SysMenu> selectMenuList(SysMenu menu);
 
+    /**
+     * 查询租户菜单列表
+     * @param tenantId
+     * @return
+     */
+    public List<SysMenu> selectTenantMenuList(Long tenantId);
+
     /**
      * 根据用户所有权限
      *

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java

@@ -29,6 +29,7 @@ public interface ISysMenuService
      * @return 菜单列表
      */
     public List<SysMenu> selectMenuList(SysMenu menu, Long userId);
+    public List<SysMenu> selectMenuList(SysMenu menu, Long userId, Long tenantId);
 
     /**
      * 根据用户ID查询权限

+ 8 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java

@@ -70,8 +70,7 @@ public class SysMenuServiceImpl implements ISysMenuService
         if (SysUser.isAdmin(userId))
         {
             menuList = menuMapper.selectMenuList(menu);
-        }
-        else
+        }  else
         {
             menu.getParams().put("userId", userId);
             menuList = menuMapper.selectMenuListByUserId(menu);
@@ -79,6 +78,13 @@ public class SysMenuServiceImpl implements ISysMenuService
         return menuList;
     }
 
+    @Override
+    public List<SysMenu> selectMenuList(SysMenu menu, Long userId, Long tenantId)
+    {
+        List<SysMenu> menuList = menuMapper.selectTenantMenuList(tenantId);
+        return menuList;
+    }
+
     /**
      * 根据用户ID查询权限
      * 

+ 8 - 0
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -47,6 +47,14 @@
 		</where>
 		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}
+		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

+ 6 - 0
ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml

@@ -19,6 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateBy"           column="update_by"             />
 		<result property="updateTime"         column="update_time"           />
 		<result property="remark"             column="remark"                />
+		<result property="tenantId"           column="tenant_id"             />
 	</resultMap>
 	
 	<sql id="selectRoleVo">
@@ -51,6 +52,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
 			and date_format(r.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
 		</if>
+		<if test="tenantId != null and tenantId != 0">
+			AND r.tenant_id = #{tenantId}
+		</if>
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 		order by r.role_sort
@@ -104,6 +108,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptCheckStrictly != null">dept_check_strictly,</if>
  			<if test="status != null and status != ''">status,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+		    <if test="tenantId != null and tenantId != 0">tenant_id,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			create_time
  		)values(
@@ -116,6 +121,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptCheckStrictly != null">#{deptCheckStrictly},</if>
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
+		    <if test="tenantId != null and tenantId != 0">#{tenantId},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			sysdate()
  		)

+ 1 - 0
ruoyi-ui/package.json

@@ -55,6 +55,7 @@
     "vue": "2.6.12",
     "vue-count-to": "1.0.13",
     "vue-cropper": "0.5.5",
+    "vue-json-excel": "^0.3.0",
     "vue-meta": "2.4.0",
     "vue-router": "3.4.9",
     "vuedraggable": "2.24.3",

+ 1 - 1
ruoyi-ui/src/assets/styles/index.scss

@@ -138,7 +138,7 @@ aside {
 }
 
 .sub-navbar {
-  height: 50px;
+  height: 5px;
   line-height: 50px;
   position: relative;
   width: 100%;

+ 3 - 3
ruoyi-ui/src/layout/index.vue

@@ -154,12 +154,12 @@ export default {
   position: fixed;
   display: block;
   width: 100%;
-  z-index: 999999;
+  z-index: 1;
   background: #fff;
 }
 .jianbiase {
   width: 80px;
-  height: 25px;
+  /* height: 25px; */
   background: linear-gradient(
     to right,
     rgb(13, 86, 232),
@@ -196,7 +196,7 @@ export default {
 
 .bar {
   width: 800px;
-  height: 100px;
+  height: 10px;
   text-align: center;
   line-height: 100px;
   /* position: fixed; */

+ 3 - 0
ruoyi-ui/src/main.js

@@ -38,6 +38,8 @@ import VueMeta from 'vue-meta'
 // 字典数据组件
 import DictData from '@/components/DictData'
 
+import JsonExcel from 'vue-json-excel'
+
 // 全局方法挂载
 Vue.prototype.getDicts = getDicts
 Vue.prototype.getConfigKey = getConfigKey
@@ -50,6 +52,7 @@ Vue.prototype.download = download
 Vue.prototype.handleTree = handleTree
 
 // 全局组件挂载
+Vue.component('downloadExcel', JsonExcel)
 Vue.component('DictTag', DictTag)
 Vue.component('Pagination', Pagination)
 Vue.component('RightToolbar', RightToolbar)

+ 9 - 27
ruoyi-ui/src/views/index.vue

@@ -1,26 +1,16 @@
 <template>
   <div class="app-container home">
-    <el-row :gutter="20">
-
-    </el-row>
-    <el-row :gutter="20">
-
-
-
-    </el-row>
+    <el-row :gutter="20"> </el-row>
+    <el-row :gutter="20"> </el-row>
     <el-divider />
     <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-
-      </el-col>
+      <el-col :xs="24" :sm="24" :md="12" :lg="8"> </el-col>
       <el-col :xs="24" :sm="24" :md="12" :lg="8">
         <el-card class="update-log">
           <div slot="header" class="clearfix">
             <span>更新日志</span>
           </div>
-          <el-collapse accordion>
-            123123
-          </el-collapse>
+          <el-collapse accordion> 123123 </el-collapse>
         </el-card>
       </el-col>
 
@@ -29,12 +19,9 @@
           <div slot="header" class="clearfix">
             <span>捐赠支持</span>
           </div>
-          <div class="body">
-
-          </div>
+          <div class="body"></div>
         </el-card>
       </el-col>
-
     </el-row>
   </div>
 </template>
@@ -45,14 +32,14 @@ export default {
   data() {
     return {
       // 版本号
-      version: "3.8.5"
+      version: "3.8.5",
     };
   },
   methods: {
     goTarget(href) {
       window.open(href, "_blank");
-    }
-  }
+    },
+  },
 };
 </script>
 
@@ -81,11 +68,7 @@ export default {
     margin: 0;
   }
 
-  font-family: "open sans",
-  "Helvetica Neue",
-  Helvetica,
-  Arial,
-  sans-serif;
+  font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
   font-size: 13px;
   color: #676a6c;
   overflow-x: hidden;
@@ -125,4 +108,3 @@ export default {
   }
 }
 </style>
-

+ 93 - 52
ruoyi-ui/src/views/login.vue

@@ -1,42 +1,77 @@
 <template>
   <div class="login">
-    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
-      <img src="../assets/images/comlo.png"  class="comlogo">
+    <el-form
+      ref="loginForm"
+      :model="loginForm"
+      :rules="loginRules"
+      class="login-form"
+    >
+      <img src="../assets/images/comlo.png" class="comlogo" />
       <span class="title">智能制造平台</span>
       <el-form-item prop="username">
-        <p  style="line-height: 12px;">用户名</p>
-        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号" show-password>
+        <p style="line-height: 12px">用户名</p>
+        <el-input
+          v-model="loginForm.username"
+          type="text"
+          auto-complete="off"
+          placeholder="账号"
+          show-password
+        >
           <!-- <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> -->
         </el-input>
       </el-form-item>
       <el-form-item prop="password">
-        <p  style="line-height: 12px;">密码</p>
-        <el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码"  
-          @keyup.enter.native="handleLogin" show-password>
+        <p style="line-height: 12px">密码</p>
+        <el-input
+          v-model="loginForm.password"
+          type="password"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleLogin"
+          show-password
+        >
           <!-- <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> -->
         </el-input>
       </el-form-item>
-  
+
       <el-form-item prop="code" v-if="captchaEnabled">
-        <div style="line-height: 12px;">验证码</div>
-        <el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%"
-          @keyup.enter.native="handleLogin" show-password>
+        <div style="line-height: 12px">验证码</div>
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleLogin"
+          show-password
+        >
           <!-- <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> -->
         </el-input>
         <div class="login-code">
           <img :src="codeUrl" @click="getCode" class="login-code-img" />
         </div>
       </el-form-item>
-      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;" class="a">在这个设备上记住我</el-checkbox>
-      
-      <el-form-item style="width:100%;">
-        <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
-          @click.native.prevent="handleLogin">
+      <el-checkbox
+        v-model="loginForm.rememberMe"
+        style="margin: 0px 0px 25px 0px"
+        class="a"
+        >在这个设备上记住我</el-checkbox
+      >
+
+      <el-form-item style="width: 100%">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width: 100%"
+          @click.native.prevent="handleLogin"
+        >
           <span v-if="!loading">登 录</span>
           <span v-else>登 录 中...</span>
         </el-button>
-        <div style="float: right;" v-if="register">
-          <router-link class="link-type" :to="'/register'">立即注册</router-link>
+        <div style="float: right" v-if="register">
+          <router-link class="link-type" :to="'/register'"
+            >立即注册</router-link
+          >
         </div>
       </el-form-item>
     </el-form>
@@ -50,7 +85,7 @@
 <script>
 import { getCodeImg } from "@/api/login";
 import Cookies from "js-cookie";
-import { encrypt, decrypt } from '@/utils/jsencrypt'
+import { encrypt, decrypt } from "@/utils/jsencrypt";
 
 export default {
   name: "Login",
@@ -62,23 +97,23 @@ export default {
         password: "admin123",
         rememberMe: false,
         code: "",
-        uuid: ""
+        uuid: "",
       },
       loginRules: {
         username: [
-          { required: true, trigger: "blur", message: "请输入您的账号" }
+          { required: true, trigger: "blur", message: "请输入您的账号" },
         ],
         password: [
-          { required: true, trigger: "blur", message: "请输入您的密码" }
+          { required: true, trigger: "blur", message: "请输入您的密码" },
         ],
-        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }],
       },
       loading: false,
       // 验证码开关
       captchaEnabled: true,
       // 注册开关
       register: false,
-      redirect: undefined
+      redirect: undefined,
     };
   },
   watch: {
@@ -86,18 +121,19 @@ export default {
       handler: function (route) {
         this.redirect = route.query && route.query.redirect;
       },
-      immediate: true
-    }
+      immediate: true,
+    },
   },
   created() {
     this.getCode();
     this.getCookie();
   },
   methods: {
-    forgetEvent(){},
+    forgetEvent() {},
     getCode() {
-      getCodeImg().then(res => {
-        this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
+      getCodeImg().then((res) => {
+        this.captchaEnabled =
+          res.captchaEnabled === undefined ? true : res.captchaEnabled;
         if (this.captchaEnabled) {
           this.codeUrl = "data:image/gif;base64," + res.img;
           this.loginForm.uuid = res.uuid;
@@ -107,43 +143,51 @@ export default {
     getCookie() {
       const username = Cookies.get("username");
       const password = Cookies.get("password");
-      const rememberMe = Cookies.get('rememberMe')
+      const rememberMe = Cookies.get("rememberMe");
       this.loginForm = {
         username: username === undefined ? this.loginForm.username : username,
-        password: password === undefined ? this.loginForm.password : decrypt(password),
-        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+        password:
+          password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
       };
     },
     handleLogin() {
-      this.$refs.loginForm.validate(valid => {
+      this.$refs.loginForm.validate((valid) => {
         if (valid) {
           this.loading = true;
           if (this.loginForm.rememberMe) {
             Cookies.set("username", this.loginForm.username, { expires: 30 });
-            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
-            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
+            Cookies.set("password", encrypt(this.loginForm.password), {
+              expires: 30,
+            });
+            Cookies.set("rememberMe", this.loginForm.rememberMe, {
+              expires: 30,
+            });
           } else {
             Cookies.remove("username");
             Cookies.remove("password");
-            Cookies.remove('rememberMe');
+            Cookies.remove("rememberMe");
           }
-          this.$store.dispatch("Login", this.loginForm).then(() => {
-            this.$router.push({ path: this.redirect || "/" }).catch(() => { });
-          }).catch(() => {
-            this.loading = false;
-            if (this.captchaEnabled) {
-              this.getCode();
-            }
-          });
+          this.$store
+            .dispatch("Login", this.loginForm)
+            .then(() => {
+              this.$router.push({ path: this.redirect || "/" }).catch(() => {});
+            })
+            .catch(() => {
+              this.loading = false;
+              if (this.captchaEnabled) {
+                this.getCode();
+              }
+            });
         }
       });
-    }
-  }
+    },
+  },
 };
 </script>
 
 <style rel="stylesheet/scss" lang="scss">
-.comlogo{
+.comlogo {
   width: 90px;
   margin-right: 15px;
 }
@@ -159,11 +203,9 @@ export default {
 .title {
   margin: 0px 30px 30px auto;
   text-align: center;
-  color:#07448a;
+  color: #07448a;
   font-size: 26px;
   font-weight: bolder;
- 
-
 }
 
 .login-form {
@@ -220,8 +262,7 @@ export default {
 .login-code-img {
   height: 38px;
 }
-.a{
+.a {
   float: left;
 }
-
 </style>

+ 105 - 44
ruoyi-ui/src/views/register.vue

@@ -1,42 +1,82 @@
 <template>
   <div class="register">
-    <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
-      <img src="../assets/images/comlo.png"  class="comlogo">
+    <el-form
+      ref="registerForm"
+      :model="registerForm"
+      :rules="registerRules"
+      class="register-form"
+    >
+      <img src="../assets/images/comlo.png" class="comlogo" />
       <span class="title">智能制造平台</span>
       <el-form-item prop="username">
-        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号" show-password>
+        <el-input
+          v-model="registerForm.username"
+          type="text"
+          auto-complete="off"
+          placeholder="账号"
+          show-password
+        >
           <!-- <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> -->
         </el-input>
       </el-form-item>
       <el-form-item prop="password">
-        <el-input v-model="registerForm.password" type="password" auto-complete="off" placeholder="密码"
-          @keyup.enter.native="handleRegister" show-password>
+        <el-input
+          v-model="registerForm.password"
+          type="password"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleRegister"
+          show-password
+        >
           <!-- <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> -->
         </el-input>
       </el-form-item>
       <el-form-item prop="confirmPassword">
-        <el-input v-model="registerForm.confirmPassword" type="password" auto-complete="off" placeholder="确认密码"
-          @keyup.enter.native="handleRegister" show-password>
+        <el-input
+          v-model="registerForm.confirmPassword"
+          type="password"
+          auto-complete="off"
+          placeholder="确认密码"
+          @keyup.enter.native="handleRegister"
+          show-password
+        >
           <!-- <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> -->
         </el-input>
       </el-form-item>
       <el-form-item prop="code" v-if="captchaEnabled">
-        <el-input v-model="registerForm.code" auto-complete="off" placeholder="验证码" style="width: 63%"
-          @keyup.enter.native="handleRegister" show-password>
-          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+        <el-input
+          v-model="registerForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleRegister"
+          show-password
+        >
+          <svg-icon
+            slot="prefix"
+            icon-class="validCode"
+            class="el-input__icon input-icon"
+          />
         </el-input>
         <div class="register-code">
           <img :src="codeUrl" @click="getCode" class="register-code-img" />
         </div>
       </el-form-item>
-      <el-form-item style="width:100%;">
-        <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
-          @click.native.prevent="handleRegister">
+      <el-form-item style="width: 100%">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width: 100%"
+          @click.native.prevent="handleRegister"
+        >
           <span v-if="!loading">注 册</span>
           <span v-else>注 册 中...</span>
         </el-button>
-        <div style="float: right;">
-          <router-link class="link-type" :to="'/login'">使用已有账户登录</router-link>
+        <div style="float: right">
+          <router-link class="link-type" :to="'/login'"
+            >使用已有账户登录</router-link
+          >
         </div>
       </el-form-item>
     </el-form>
@@ -67,25 +107,35 @@ export default {
         password: "",
         confirmPassword: "",
         code: "",
-        uuid: ""
+        uuid: "",
       },
       registerRules: {
         username: [
           { required: true, trigger: "blur", message: "请输入您的账号" },
-          { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
+          {
+            min: 2,
+            max: 20,
+            message: "用户账号长度必须介于 2 和 20 之间",
+            trigger: "blur",
+          },
         ],
         password: [
           { required: true, trigger: "blur", message: "请输入您的密码" },
-          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
+          {
+            min: 5,
+            max: 20,
+            message: "用户密码长度必须介于 5 和 20 之间",
+            trigger: "blur",
+          },
         ],
         confirmPassword: [
           { required: true, trigger: "blur", message: "请再次输入您的密码" },
-          { required: true, validator: equalToPassword, trigger: "blur" }
+          { required: true, validator: equalToPassword, trigger: "blur" },
         ],
-        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }],
       },
       loading: false,
-      captchaEnabled: true
+      captchaEnabled: true,
     };
   },
   created() {
@@ -93,8 +143,9 @@ export default {
   },
   methods: {
     getCode() {
-      getCodeImg().then(res => {
-        this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
+      getCodeImg().then((res) => {
+        this.captchaEnabled =
+          res.captchaEnabled === undefined ? true : res.captchaEnabled;
         if (this.captchaEnabled) {
           this.codeUrl = "data:image/gif;base64," + res.img;
           this.registerForm.uuid = res.uuid;
@@ -102,32 +153,42 @@ export default {
       });
     },
     handleRegister() {
-      this.$refs.registerForm.validate(valid => {
+      this.$refs.registerForm.validate((valid) => {
         if (valid) {
           this.loading = true;
-          register(this.registerForm).then(res => {
-            const username = this.registerForm.username;
-            this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
-              dangerouslyUseHTMLString: true,
-              type: 'success'
-            }).then(() => {
-              this.$router.push("/login");
-            }).catch(() => { });
-          }).catch(() => {
-            this.loading = false;
-            if (this.captchaEnabled) {
-              this.getCode();
-            }
-          })
+          register(this.registerForm)
+            .then((res) => {
+              const username = this.registerForm.username;
+              this.$alert(
+                "<font color='red'>恭喜你,您的账号 " +
+                  username +
+                  " 注册成功!</font>",
+                "系统提示",
+                {
+                  dangerouslyUseHTMLString: true,
+                  type: "success",
+                }
+              )
+                .then(() => {
+                  this.$router.push("/login");
+                })
+                .catch(() => {});
+            })
+            .catch(() => {
+              this.loading = false;
+              if (this.captchaEnabled) {
+                this.getCode();
+              }
+            });
         }
       });
-    }
-  }
+    },
+  },
 };
 </script>
 
 <style rel="stylesheet/scss" lang="scss">
-.comlogo{
+.comlogo {
   width: 90px;
   margin-right: 15px;
 }
@@ -143,7 +204,7 @@ export default {
 .title {
   margin: 0px 30px 30px auto;
   text-align: center;
-  color:#07448a;
+  color: #07448a;
   font-size: 26px;
   font-weight: bolder;
 }
@@ -202,10 +263,10 @@ export default {
 .register-code-img {
   height: 38px;
 }
-.a{
+.a {
   float: left;
 }
-.b{
+.b {
   float: right;
 }
 </style>

+ 47 - 21
ruoyi-ui/src/views/system/PortalEngine/index.vue

@@ -3,8 +3,18 @@
     <div class="portal">
       <div class="portalmen">租户管理</div>
       <div class="portalexp">
-        <el-button round class="export">导出</el-button>
-        <el-button type="primary" round>+新建租户</el-button>
+        <download-excel
+          class="export-excel-wrapper"
+          :data="tableData"
+          :fields="json_fields"
+          :header="title"
+          name="租户管理.xls"
+        >
+          <!-- 上面可以自定义自己的样式,还可以引用其他组件button -->
+          <el-button type="success" class="excel">导出</el-button>
+        </download-excel>
+        <!-- <el-button round class="export">导出</el-button> -->
+        <el-button type="primary" round >+新建租户</el-button>
       </div>
     </div>
 
@@ -18,18 +28,18 @@
             style="width: 200px; margin-right: 15px"
           >
           </el-input>
-          <el-input
+          <!-- <el-input
             placeholder="筛选"
             v-model="input2"
             style="width: 200px; margin-right: 15px"
           >
           </el-input>
           <el-date-picker v-model="value1" type="date" placeholder="选择日期">
-          </el-date-picker>
+          </el-date-picker> -->
         </div>
         <div class="right">
-          <el-col :span="1.5">
-            <el-button
+          <!-- <el-col :span="1.5"> -->
+            <!-- <el-button
               plain
               @click="handleAdd"
               v-hasPermi="['system:user:add']"
@@ -39,8 +49,8 @@
                 border: 0px solid #fff;
               "
               >新增</el-button
-            >
-          </el-col>
+            > -->
+          <!-- </el-col> -->
           <el-col :span="1.5">
             <el-button
               type="primary"
@@ -56,24 +66,20 @@
       </div>
       <div class="portalconBottom">
         <el-table :data="tableData" stripe style="width: 100%">
-          <el-table-column type="selection" width="55"> 
-          </el-table-column>
+          <el-table-column type="selection" width="55"> </el-table-column>
           <el-table-column prop="tenantName" label="租户" width="180">
           </el-table-column>
           <el-table-column prop="tenantCode" label="租户编号" width="180">
           </el-table-column>
-          <el-table-column prop="owner" label="负责人"> 
-          </el-table-column>
+          <el-table-column prop="owner" label="负责人"> </el-table-column>
           <el-table-column prop="contactInfo" label="联系方式" width="180">
           </el-table-column>
           <el-table-column prop="address" label="地址" width="180">
           </el-table-column>
           <el-table-column prop="createTime" label="有效期" width="180">
           </el-table-column>
-          <el-table-column label="状态" width="180">
-          </el-table-column>
-          <el-table-column label="操作" width="180">
-          </el-table-column>
+          <el-table-column label="状态" width="180"> </el-table-column>
+          <el-table-column label="操作" width="180"> </el-table-column>
         </el-table>
       </div>
     </div>
@@ -81,7 +87,6 @@
 </template>
 
 <script>
-
 // 引入请求方法
 import { getTenant } from "@/api/system/PortalEngine";
 
@@ -93,6 +98,20 @@ export default {
   data() {
     return {
       tableData: [],
+      title: "租户管理",
+      json_fields: {
+        租户: "tenantName",
+        租户编号: "tenantCode",
+        负责人: "owner",
+        联系方式: "contactInfo",
+        地址: "address",
+        有效期: "createTime",
+      },
+      exportSheet: '租户管理',
+      exportHeader: '这是表格的标题',
+      exportFooter: '这是表格的页脚',
+      exportDefaultValue: '这是一个默认的数据'
+
     };
   },
   // 页面创建后调用
@@ -100,10 +119,10 @@ export default {
     // 调用请求的方法,.then是什么方法,一会儿自己百度。
     getTenant({
       // 参数
-      tenantName:'',
-      createTime:'',
-      tenantName:'',
-      tenantName:'',
+      tenantName: "",
+      createTime: "",
+      tenantName: "",
+      tenantName: "",
     }).then((res) => {
       console.log(res);
       this.tableData = res.rows;
@@ -121,6 +140,13 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.excel{
+  float: right;
+}
+.export-excel-wrapper{
+  float: left;
+  padding-right: 20px;
+}
 .engine-container {
   background-color: #f5f5fa;
   padding: 40px 60px 40px 40px;

+ 15 - 6
ruoyi-ui/src/views/system/data/index.vue

@@ -192,8 +192,7 @@ export default {
 };
 </script>
 
-<style lang="scss" scoped>
-
+<style lang="scss">
 .pagination-container {
   background: #fff;
   padding: 32px 16px;
@@ -215,14 +214,24 @@ export default {
 .title {
   margin: 15px 0px 20px 0px;
 }
-.content {
+
+.el-form-item--medium .el-form-item__label {
+    line-height: 10px !important;
+}
+.el-form--label-top .el-form-item__label {
+    float: none;
+    display: inline-block;
+    text-align: left;
+    padding: 10px 0 9px 0 !important;
+}
+/* .content {
   width: 800px;
   margin: 0 auto;
   height: 650px;
   border: 2px solid #fff;
   border-radius: 15px;
   background-color: #fff;
-}
+} */
 .contenttil{
  width: 400px;
  height: 650px;
@@ -232,9 +241,9 @@ export default {
   color: #3366ff;
   font-size: 28px;
 }
-el-form-item .datatype .datadate .el-form-item--medium>.el-form-item__label{
+/* el-form-item .datatype .datadate .el-form-item--medium>.el-form-item__label{
   padding: 10px 0px 0px 0px !important;
-}
+} */
 /* .el-form-item{
   padding: 10px 0 0px 0 !important;
 } */

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 945 - 0
sql/ry-vue_2023-06-19.sql


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.