dedsudiyu il y a 1 an
Parent
commit
eb0e6e8c7e

BIN
src/assets/ZDimages/basicsModules/10.png


BIN
src/assets/ZDimages/basicsModules/4.png


BIN
src/assets/ZDimages/basicsModules/5.png


BIN
src/assets/ZDimages/basicsModules/6.png


BIN
src/assets/ZDimages/basicsModules/7.png


BIN
src/assets/ZDimages/basicsModules/8.png


BIN
src/assets/ZDimages/basicsModules/9.png


BIN
src/assets/ZDimages/basicsModules/icon_sy_aqda.png


BIN
src/assets/ZDimages/basicsModules/icon_sy_aqjc.png


BIN
src/assets/ZDimages/basicsModules/icon_sy_aqyuyks.png


BIN
src/assets/ZDimages/basicsModules/icon_sy_aqzr.png


BIN
src/assets/ZDimages/basicsModules/icon_sy_fjgk.png


BIN
src/assets/ZDimages/basicsModules/icon_sy_xygl.png


BIN
src/assets/ZDimages/basicsModules/icon_sy_zhgl.png


+ 1 - 1
src/layout/components/Navbar.vue

@@ -13,7 +13,7 @@
         <img src="@/assets/ZDimages/basicsModules/top_nav_icon_02.png">
       </div>
       <!--首页-->
-      <div @click="goPage('home')" v-if="userType!='22'&&initPage== 'true'">
+      <div @click="goPage('home')" v-if="userType!='22'&&!initPage">
         <img src="@/assets/ZDimages/basicsModules/top_nav_icon_01.png">
       </div>
     </div>

+ 2 - 2
src/store/modules/permission.js

@@ -67,6 +67,7 @@ function routeSetData(list,type){
     let listData = [];
     for(let i=0;i<newList.length;i++){
       let obj = {
+        alwaysShow : !newList[i].visible,
         hidden : !newList[i].visible,
         meta : {
           icon:newList[i].icon?newList[i].icon:'#',
@@ -78,7 +79,6 @@ function routeSetData(list,type){
         name : firstToUpper1(newList[i].path),
       }
       if(!type){
-        obj.alwaysShow = newList[i].visible
         obj.redirect = 'noRedirect'
         obj.path = '/'+newList[i].path
       }else{
@@ -93,7 +93,7 @@ function routeSetData(list,type){
   }
 }
 function firstToUpper1(str) {
-  return str.trim().toLowerCase().replace(str[0], str[0].toUpperCase());
+  return str[0].toUpperCase() + str.substr(1);
 }
 
 // 遍历后台传来的路由字符串,转换为组件对象

+ 10 - 0
src/store/modules/user.js

@@ -142,6 +142,16 @@ const user = {
         })
       })
     },
+    //不调用退出接口直接清除token
+    LogOutNoData({ commit, state }) {
+      return new Promise((resolve, reject) => {
+        commit('SET_TOKEN', '')
+        commit('SET_ROLES', [])
+        commit('SET_PERMISSIONS', [])
+        removeToken()
+        resolve()
+      })
+    },
 
     // 前端 登出
     FedLogOut({ commit }) {

+ 4 - 3
src/utils/errorCode.js

@@ -1,6 +1,7 @@
 export default {
-  '401': '认证失败,无法访问系统资源',
-  '403': '当前操作没有权限',
-  '404': '访问资源不存在',
+  '5004': '参数异常,请联系管理员',
+  '5006': '数据不存在,请联系管理员',
+  '5007': '业务异常,请联系管理员',
+  '5008': '服务异常,请联系管理员',
   'default': '系统未知错误,请反馈给管理员'
 }

+ 20 - 23
src/utils/request.js

@@ -77,8 +77,8 @@ service.interceptors.response.use(res => {
     // 未设置状态码则默认成功状态
     const code = res.data.code || 200;
     // 获取错误信息
-    const msg = errorCode[code] || res.data.msg || errorCode['default']
-    if (code == 401) {
+    const msg = errorCode[code] || res.data.message || errorCode['default']
+    if (code == 5002) {
       if(!localStorage.getItem('serviceType')){
         localStorage.setItem('serviceType','1')
         MessageBox.confirm('登录状态已过期,请重新登录', '系统提示', {
@@ -94,25 +94,12 @@ service.interceptors.response.use(res => {
             router.replace({
               path: '/login'
             })
-            // location.href = '/index';
           })
           return
         }).catch(() => {});
       }
-      // return Promise.reject('令牌验证失败')
-    } else if (code == 403) {
-      // if(!localStorage.getItem('serviceType')){
-      //   MessageBox.confirm('没有权限,请联系管理员授权!', '系统提示', {
-      //       confirmButtonText: '确定',
-      //       showCancelButton:false,
-      //       closeOnClickModal:false,
-      //       cancelButtonText: '取消',
-      //       type: 'warning'
-      //     }
-      //   ).then(() => {
-      //   }).catch(() => {});
-      // }
-      // return Promise.reject('error')
+    } else if (code == 5005) {
+      //无权限
       router.replace({
         path: '/403'
       })
@@ -132,10 +119,21 @@ service.interceptors.response.use(res => {
       // 303-考试从定向   530-账号不存在   503-验证码错误  504特殊报错code 205智能门禁状态 用于报错后需要返回code进行后续操作
       return res.data
     } else if (code != 200) {
-      Notification.error({
-        title: msg
-      })
-      return Promise.reject('error')
+      if(!messageData){
+        messageData = Message({
+          message: msg,
+          type: 'error',
+          offset:100
+        })
+        setTimeout(function(){
+          messageData = null
+        },1000);
+      }
+      return Promise.reject(new Error(msg))
+      // Notification.error({
+      //   title: msg
+      // })
+      // return Promise.reject('error')
     } else {
       // console.log("res",res.data)
       return res.data
@@ -175,12 +173,11 @@ service.interceptors.response.use(res => {
               type: 'warning'
             }
           ).then(() => {
-            store.dispatch('LogOut').then(() => {
+            store.dispatch('LogOutNoData').then(() => {
               localStorage.removeItem('serviceType');
               router.replace({
                 path: '/login'
               })
-              // location.href = '/index';
             })
             return
           }).catch(() => {});

+ 26 - 58
src/views/basicsModules/differenceComponent/homeSubPagePublic.vue

@@ -114,60 +114,31 @@
     mounted(){
       let self =this
       this.routeData = JSON.parse(localStorage.getItem("routeData"))
-      if(localStorage.getItem('initPage') == 'true'){
-        console.log("true")
-        if(localStorage.getItem('userType') == '22'){
-          for(let i=0;i<self.routeData.length;i++){
-            if(!self.routeData[i].hidden&&self.routeData[i].name != 'Https://www.sxitdlc.com'){
-              if (self.routeData[i].children){
-                for(let o=0;o<self.routeData[i].children.length;o++){
-                  if(!self.routeData[i].children[o].alwaysShow&&!self.routeData[i].children[o].hidden){
-                    let urlText = self.routeData[i].path + '/' + self.routeData[i].children[o].path;
-                    console.log("urlText",urlText)
-                    this.$router.push({ path: urlText });
-                    return
-                  }else{
-                    if(self.routeData[i].children[o].children){
-                      for(let x=0;x<self.routeData[i].children[o].children.length;x++){
-                        if(!self.routeData[i].children[o].children[x].alwaysShow&&!self.routeData[i].children[o].children[x].hidden){
-                          let urlText = self.routeData[i].path + '/' + self.routeData[i].children[o].path + '/' + self.routeData[i].children[o].children[x].path;
-                          console.log("urlText",urlText)
-                          this.$router.push({ path: urlText });
-                          return
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }else{
-        console.log("false")
-        for(let i=0;i<self.routeData.length;i++){
-          if(!self.routeData[i].hidden&&self.routeData[i].name != 'Https://www.sxitdlc.com'){
-            if (self.routeData[i].children){
-              for(let o=0;o<self.routeData[i].children.length;o++){
-                if(!self.routeData[i].children[o].alwaysShow&&!self.routeData[i].children[o].hidden){
-                  let urlText = self.routeData[i].path + '/' + self.routeData[i].children[o].path;
-                  console.log("urlText",urlText)
-                  this.$router.push({ path: urlText });
-                  return
-                }else{
-                  if(self.routeData[i].children[o].children){
-                    for(let x=0;x<self.routeData[i].children[o].children.length;x++){
-                      if(!self.routeData[i].children[o].children[x].alwaysShow&&!self.routeData[i].children[o].children[x].hidden){
-                        let urlText = self.routeData[i].path + '/' + self.routeData[i].children[o].path + '/' + self.routeData[i].children[o].children[x].path;
-                        console.log("urlText",urlText)
-                        this.$router.push({ path: urlText });
-                        return
-                      }
+      if(localStorage.getItem('initPage')){
+        for(let i=0;i<self.routeData.length;i++) {
+          if (self.routeData[i].children) {
+            for (let o = 0; o < self.routeData[i].children.length; o++) {
+              if (!self.routeData[i].children[o].alwaysShow && !self.routeData[i].children[o].hidden) {
+                let urlText = self.routeData[i].path + '/' + self.routeData[i].children[o].path;
+                this.$router.push({ path: urlText });
+                return
+              } else {
+                if (self.routeData[i].children[o].children) {
+                  for (let x = 0; x < self.routeData[i].children[o].children.length; x++) {
+                    if (!self.routeData[i].children[o].children[x].alwaysShow && !self.routeData[i].children[o].children[x].hidden) {
+                      let urlText = self.routeData[i].path + '/' + self.routeData[i].children[o].path + '/' + self.routeData[i].children[o].children[x].path;
+                      this.$router.push({ path: urlText });
+                      return
                     }
                   }
                 }
               }
             }
+          } else if (!self.routeData[i].alwaysShow && !self.routeData[i].hidden) {
+            let urlText = self.routeData[i].path;
+            this.$router.push({ path: urlText });
+            console.log("urlText", urlText)
+            return
           }
         }
       }
@@ -186,7 +157,6 @@
         if(type == 'Https://www.sxitdlc.com'){
           for(let i=0;i<self.routeData.length;i++){
             if(type == self.routeData[i].name){
-              console.log("self.routeData[i].name",self.routeData[i].name)
               window.open(localStorage.getItem('screenUrl') + '?identity=' + localStorage.getItem('identity'));
               return
             }
@@ -201,17 +171,11 @@
         for(let i=0;i<self.routeData.length;i++){
           if(type == self.routeData[i].name){
             num++
-            if(!self.routeData[i].alwaysShow&&!self.routeData[i].hidden){
-              let urlText = self.routeData[i].path;
-              this.$router.push({ path: urlText });
-              console.log("urlText1",urlText)
-              return
-            }else if (self.routeData[i].children){
+            if (self.routeData[i].children){
               for(let o=0;o<self.routeData[i].children.length;o++){
                 if(!self.routeData[i].children[o].alwaysShow&&!self.routeData[i].children[o].hidden){
                   let urlText = self.routeData[i].path + '/' + self.routeData[i].children[o].path;
                   this.$router.push({ path: urlText });
-                  console.log("urlText2",urlText)
                   return
                 }else{
                   if(self.routeData[i].children[o].children){
@@ -219,13 +183,17 @@
                       if(!self.routeData[i].children[o].children[x].alwaysShow&&!self.routeData[i].children[o].children[x].hidden){
                         let urlText = self.routeData[i].path + '/' + self.routeData[i].children[o].path + '/' + self.routeData[i].children[o].children[x].path;
                         this.$router.push({ path: urlText });
-                        console.log("urlText3",urlText)
                         return
                       }
                     }
                   }
                 }
               }
+            }else if(!self.routeData[i].alwaysShow&&!self.routeData[i].hidden){
+              let urlText = self.routeData[i].path;
+              this.$router.push({ path: urlText });
+              console.log("urlText",urlText)
+              return
             }
           }
         }

+ 5 - 5
src/views/basicsModules/login.vue

@@ -82,9 +82,9 @@
             <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>
+          <!--<div style="float: right;" v-if="register">-->
+            <!--<router-link class="link-type" :to="'/register'">立即注册</router-link>-->
+          <!--</div>-->
         </el-form-item>
       </el-form>
       <el-form ref="loginFormTwo" v-show="loginType == 2"
@@ -290,8 +290,8 @@ export default {
       getCodeImg().then(res => {
         this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
         if (this.captchaOnOff) {
-          this.codeUrl = "data:image/gif;base64," + res.img;
-          this.loginForm.uuid = res.uuid;
+          this.codeUrl = "data:image/gif;base64," + res.data.image;
+          this.loginForm.uuid = res.data.uuid;
         }
       });
     },

+ 1 - 1
src/views/systemManagement/publicConfig/exploitConfig.vue

@@ -145,7 +145,7 @@
         <p>微信小程序二维码配置</p>
       </div>
       <div class="form-max-box">
-        <el-form-item label="kkFile预览地址-外网:">
+        <el-form-item label="二维码规则配置:">
           <el-input placeholder="请输入"  v-model="form.codeOnlineAdd" style="width:400px;" maxLength="50">
           </el-input>
         </el-form-item>

+ 735 - 0
src/views/systemManagement/publicConfig/homeConfig.vue

@@ -0,0 +1,735 @@
+<template>
+  <div class="homeConfig">
+    <el-form class="homeConfig-form scrollbar-box" :model="form"
+             ref="form" :inline="true" :rules="rules" label-width="200px">
+      <el-form-item label="是否开启首页:">
+        <el-radio-group v-model="form.data1">
+          <el-radio :label="true">开启</el-radio>
+          <el-radio :label="false">关闭</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <!--首页开启-->
+      <div class="button-box" v-if="form.data1">
+        <div class="button-box-title-box">
+          <p class="button-box-title-p">居中按钮配置:<span style="color:#666;"> (最多可配置1个按钮)</span></p>
+          <p class="add-button-p" @click="addHomeButton('center')" v-if="!form.data6[0]">新增</p>
+        </div>
+        <div class="button-min-box">
+          <div class="null-box" v-if="!form.data6[0]">未配置</div>
+          <div class="button-for-box" v-for="(item,index) in form.data6" :key="index">
+            <p class="img-title-p"><span>*</span> 按钮图片:<span style="color:#666;">(尺寸限制为147宽*105高)</span></p>
+            <div class="button-for-min-box">
+              <div class="button-for-min-left-box">
+                <el-form-item label="" label-width="0"
+                              :prop="'data6.' + index + '.imgUrl'" :rules="rules.imgUrl">
+                  <el-upload
+                    class="certificate-avatar-uploader"
+                    :action="uploadImgUrl"
+                    :show-file-list="false"
+                    :on-success="handleAvatarSuccess"
+                    :headers="headers"
+                    :before-upload="(file)=>beforeAvatarUpload(file,'center')">
+                    <div class="center-img">
+                      <img v-if="item.imgUrl" :src="item.imgUrl">
+                      <p v-if="!item.imgUrl" class="el-icon-plus" style="text-align: center;line-height:104px;font-size:30px;color:#999;"></p>
+                    </div>
+                  </el-upload>
+                </el-form-item>
+              </div>
+              <div class="button-for-min-right-box">
+                <el-form-item label="按钮类型:" label-width="90px"
+                              :prop="'data6.' + index + '.buttonType'" :rules="rules.buttonType">
+                  <el-radio-group v-model="item.buttonType">
+                    <el-radio :label="true" style="margin-top:4px;">现有模块</el-radio>
+                    <el-radio :label="false" style="margin-top:4px;">暂未开放</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+                <el-form-item label="功能模块:" label-width="90px" v-if="item.buttonType"
+                              :prop="'data6.' + index + '.menuId'" :rules="rules.menuId">
+                  <el-cascader
+                    style="width:200px;"
+                    :show-all-levels="false"
+                    v-model="item.menuId"
+                    :options="menuOptionsMax"
+                    :props="{ value: 'menuId', label: 'menuName',emitPath:false  }"></el-cascader>
+                </el-form-item>
+                <el-form-item label="功能名称:" label-width="90px" v-if="!item.buttonType"
+                              :prop="'data6.' + index + '.buttonName'" :rules="rules.buttonName">
+                  <el-input v-model="item.buttonName" placeholder="请输入内容" maxLength="10" style="width:200px;"
+                            :prop="'data6.' + index + '.buttonName'" :rules="rules.buttonName"></el-input>
+                </el-form-item>
+                <el-form-item label="是否启用:" label-width="90px"
+                              :prop="'data6.' + index + '.switch'" :rules="rules.switch">
+                  <el-switch
+                    v-model="item.switch"
+                    active-color="#13ce66"
+                    inactive-color="#dedede">
+                  </el-switch>
+                </el-form-item>
+              </div>
+              <!--<div class="button-for-sort-button-box">-->
+                <!--<p class="sort-null-p"></p>-->
+                <!--<p class="el-icon-arrow-up" @click="sortClick(form.data6,index,'top')"></p>-->
+                <!--<p class="el-icon-arrow-down" @click="sortClick(form.data6,index,'bottom')"></p>-->
+                <!--<p class="sort-null-p"></p>-->
+              <!--</div>-->
+              <p class="del-p el-icon-close" @click="delHomeButton('center',index)"></p>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="button-box" v-if="form.data1">
+        <div class="button-box-title-box">
+          <p class="button-box-title-p">左侧按钮配置:<span style="color:#666;"> (最多可配置3个按钮)</span></p>
+          <p class="add-button-p" @click="addHomeButton('left')" v-if="!form.data7[2]">新增</p>
+        </div>
+        <div class="button-min-box">
+          <div class="null-box" v-if="!form.data7[0]">未配置</div>
+          <div class="button-for-box" v-for="(item,index) in form.data7" :key="index">
+            <p class="img-title-p"><span>*</span> 按钮图片:<span style="color:#666;">(尺寸限制为297宽*136高)</span></p>
+            <div class="button-for-min-box">
+              <div class="button-for-min-left-box">
+                <el-form-item label="" label-width="0"
+                              :prop="'data8.' + index + '.imgUrl'" :rules="rules.imgUrl">
+                  <el-upload
+                    class="certificate-avatar-uploader"
+                    :action="uploadImgUrl"
+                    :show-file-list="false"
+                    :on-success="handleAvatarSuccess"
+                    :headers="headers"
+                    :before-upload="beforeAvatarUpload">
+                    <div class="left-img">
+                      <img v-if="item.imgUrl" :src="item.imgUrl">
+                      <p v-if="!item.imgUrl" class="el-icon-plus" style="text-align: center;line-height:136px;font-size:30px;color:#999;"></p>
+                    </div>
+                  </el-upload>
+                </el-form-item>
+              </div>
+              <div class="button-for-min-right-box">
+                <el-form-item label="按钮类型:" label-width="90px"
+                              :prop="'data7.' + index + '.buttonType'" :rules="rules.buttonType">
+                  <el-radio-group v-model="item.buttonType">
+                    <el-radio :label="true" style="margin-top:4px;">现有模块</el-radio>
+                    <el-radio :label="false" style="margin-top:4px;">暂未开放</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+                <el-form-item label="功能模块:" label-width="90px" v-if="item.buttonType"
+                              :prop="'data7.' + index + '.menuId'" :rules="rules.menuId">
+                  <el-cascader
+                    style="width:200px;"
+                    :show-all-levels="false"
+                    v-model="item.menuId"
+                    :options="menuOptionsMax"
+                    :props="{ value: 'menuId', label: 'menuName',emitPath:false  }"></el-cascader>
+                </el-form-item>
+                <el-form-item label="功能名称:" label-width="90px" v-if="!item.buttonType"
+                              :prop="'data7.' + index + '.buttonName'" :rules="rules.buttonName">
+                  <el-input v-model="item.buttonName" placeholder="请输入内容" maxLength="10" style="width:200px;"
+                            :prop="'data7.' + index + '.buttonName'" :rules="rules.buttonName"></el-input>
+                </el-form-item>
+                <el-form-item label="是否启用:" label-width="90px"
+                              :prop="'data7.' + index + '.switch'" :rules="rules.switch">
+                  <el-switch
+                    v-model="item.switch"
+                    active-color="#13ce66"
+                    inactive-color="#dedede">
+                  </el-switch>
+                </el-form-item>
+              </div>
+              <div class="button-for-sort-button-box">
+                <p class="sort-null-p"></p>
+                <p class="el-icon-arrow-up" @click="sortClick(form.data7,index,'top')"></p>
+                <p class="el-icon-arrow-down" @click="sortClick(form.data7,index,'bottom')"></p>
+                <p class="sort-null-p"></p>
+              </div>
+              <p class="del-p el-icon-close" @click="delHomeButton('left',index)"></p>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="button-box" v-if="form.data1">
+        <div class="button-box-title-box">
+          <p class="button-box-title-p">右侧按钮配置:<span style="color:#666;"> (最多可配置3个按钮)</span></p>
+          <p class="add-button-p" @click="addHomeButton('right')" v-if="!form.data8[2]">新增</p>
+        </div>
+        <div class="button-min-box">
+          <div class="null-box" v-if="!form.data8[0]">未配置</div>
+          <div class="button-for-box" v-for="(item,index) in form.data8" :key="index">
+            <p class="img-title-p"><span>*</span> 按钮图片:<span style="color:#666;">(尺寸限制为297宽*136高)</span></p>
+            <div class="button-for-min-box">
+              <div class="button-for-min-left-box">
+                <el-form-item label="" label-width="0"
+                              :prop="'data8.' + index + '.imgUrl'" :rules="rules.imgUrl">
+                  <el-upload
+                    class="certificate-avatar-uploader"
+                    :action="uploadImgUrl"
+                    :show-file-list="false"
+                    :on-success="handleAvatarSuccess"
+                    :headers="headers"
+                    :before-upload="beforeAvatarUpload">
+                    <div class="right-img">
+                      <img v-if="item.imgUrl" :src="item.imgUrl">
+                      <p v-if="!item.imgUrl" class="el-icon-plus" style="text-align: center;line-height:136px;font-size:30px;color:#999;"></p>
+                    </div>
+                  </el-upload>
+                </el-form-item>
+              </div>
+              <div class="button-for-min-right-box">
+                <el-form-item label="按钮类型:" label-width="90px"
+                              :prop="'data8.' + index + '.buttonType'" :rules="rules.buttonType">
+                  <el-radio-group v-model="item.buttonType">
+                    <el-radio :label="true" style="margin-top:4px;">现有模块</el-radio>
+                    <el-radio :label="false" style="margin-top:4px;">暂未开放</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+                <el-form-item label="功能模块:" label-width="90px" v-if="item.buttonType"
+                              :prop="'data8.' + index + '.menuId'" :rules="rules.menuId">
+                  <el-cascader
+                    style="width:200px;"
+                    :show-all-levels="false"
+                    v-model="item.menuId"
+                    :options="menuOptionsMax"
+                    :props="{ value: 'menuId', label: 'menuName',emitPath:false  }"></el-cascader>
+                </el-form-item>
+                <el-form-item label="功能名称:" label-width="90px" v-if="!item.buttonType"
+                              :prop="'data8.' + index + '.buttonName'" :rules="rules.buttonName">
+                  <el-input v-model="item.buttonName" placeholder="请输入内容" maxLength="10" style="width:200px;"
+                            :prop="'data8.' + index + '.buttonName'" :rules="rules.buttonName"></el-input>
+                </el-form-item>
+                <el-form-item label="是否启用:" label-width="90px"
+                              :prop="'data8.' + index + '.switch'" :rules="rules.switch">
+                  <el-switch
+                    v-model="item.switch"
+                    active-color="#13ce66"
+                    inactive-color="#dedede">
+                  </el-switch>
+                </el-form-item>
+              </div>
+              <div class="button-for-sort-button-box">
+                <p class="sort-null-p"></p>
+                <p class="el-icon-arrow-up" @click="sortClick(form.data8,index,'top')"></p>
+                <p class="el-icon-arrow-down" @click="sortClick(form.data8,index,'bottom')"></p>
+                <p class="sort-null-p"></p>
+              </div>
+              <p class="del-p el-icon-close" @click="delHomeButton('right',index)"></p>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="button-box" v-if="form.data1">
+        <div class="button-box-title-box">
+          <p class="button-box-title-p">底部按钮配置:<span style="color:#666;"> (最多可配置5个按钮)</span></p>
+          <p class="add-button-p" @click="addHomeButton('bottom')" v-if="!form.data9[4]">新增</p>
+        </div>
+        <div class="button-min-box">
+          <div class="null-box" v-if="!form.data9[0]">未配置</div>
+          <div class="button-for-box" v-for="(item,index) in form.data9" :key="index">
+            <p class="img-title-p"><span>*</span> 按钮图片:<span style="color:#666;">(尺寸限制为140宽*230高)</span></p>
+            <div class="button-for-min-box">
+              <div class="button-for-min-left-box">
+                <el-form-item label="" label-width="0"
+                              :prop="'data9.' + index + '.imgUrl'" :rules="rules.imgUrl">
+                  <el-upload
+                    class="certificate-avatar-uploader"
+                    :action="uploadImgUrl"
+                    :show-file-list="false"
+                    :on-success="handleAvatarSuccess"
+                    :headers="headers"
+                    :before-upload="beforeAvatarUpload">
+                    <div class="bottom-img">
+                      <img v-if="item.imgUrl" :src="item.imgUrl">
+                      <p v-if="!item.imgUrl" class="el-icon-plus" style="text-align: center;line-height:230px;font-size:30px;color:#999;"></p>
+                    </div>
+                  </el-upload>
+                </el-form-item>
+              </div>
+              <div class="button-for-min-right-box">
+                <el-form-item label="按钮类型:" label-width="90px"
+                              :prop="'data9.' + index + '.buttonType'" :rules="rules.buttonType">
+                  <el-radio-group v-model="item.buttonType">
+                    <el-radio :label="true" style="margin-top:4px;">现有模块</el-radio>
+                    <el-radio :label="false" style="margin-top:4px;">暂未开放</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+                <el-form-item label="功能模块:" label-width="90px" v-if="item.buttonType"
+                              :prop="'data9.' + index + '.menuId'" :rules="rules.menuId">
+                  <el-cascader
+                    style="width:200px;"
+                    :show-all-levels="false"
+                    v-model="item.menuId"
+                    :options="menuOptionsMax"
+                    :props="{ value: 'menuId', label: 'menuName',emitPath:false  }"></el-cascader>
+                </el-form-item>
+                <el-form-item label="功能名称:" label-width="90px" v-if="!item.buttonType"
+                              :prop="'data9.' + index + '.buttonName'" :rules="rules.buttonName">
+                  <el-input v-model="item.buttonName" placeholder="请输入内容" maxLength="10" style="width:200px;"
+                            :prop="'data9.' + index + '.buttonName'" :rules="rules.buttonName"></el-input>
+                </el-form-item>
+                <el-form-item label="是否启用:" label-width="90px"
+                              :prop="'data9.' + index + '.switch'" :rules="rules.switch">
+                  <el-switch
+                    v-model="item.switch"
+                    active-color="#13ce66"
+                    inactive-color="#dedede">
+                  </el-switch>
+                </el-form-item>
+              </div>
+              <div class="button-for-sort-button-box">
+                <p class="sort-null-p"></p>
+                <p class="el-icon-arrow-up" @click="sortClick(form.data9,index,'top')"></p>
+                <p class="el-icon-arrow-down" @click="sortClick(form.data9,index,'bottom')"></p>
+                <p class="sort-null-p"></p>
+              </div>
+              <p class="del-p el-icon-close" @click="delHomeButton('bottom',index)"></p>
+            </div>
+          </div>
+        </div>
+      </div>
+      <!--首页关闭-->
+      <el-form-item label="学生登录跳转至指定页面:" v-if="!form.data1">
+        <el-radio-group v-model="form.data2">
+          <el-radio :label="true">开启</el-radio>
+          <el-radio :label="false">关闭</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="学生跳转指定页面:" prop="data3" v-if="!form.data1&&form.data2">
+        <el-cascader
+          :show-all-levels="false"
+          v-model="form.data3"
+          :options="menuOptions"
+          :props="{ value: 'menuId', label: 'menuName',emitPath:false  }"></el-cascader>
+      </el-form-item>
+      <el-form-item label="老师登录跳转至指定页面:" v-if="!form.data1">
+        <el-radio-group v-model="form.data4">
+          <el-radio :label="true">开启</el-radio>
+          <el-radio :label="false">关闭</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="老师跳转指定页面:" prop="data5" v-if="!form.data1&&form.data4">
+        <el-cascader
+          :show-all-levels="false"
+          v-model="form.data5"
+          :options="menuOptions"
+          :props="{ value: 'menuId', label: 'menuName',emitPath:false  }"></el-cascader>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+  import { getToken } from "@/utils/auth";
+  import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/systemManagement/index";
+  export default {
+    name: 'homeConfig',
+    data(){
+      return{
+        //上传相关
+        uploadImgUrl: window.location.href.split('://')[0]+'://' + this.judgmentNetworkReturnAddress() + "/system/user/teacher/importData", // 上传地址
+        headers: {
+          Authorization: "Bearer " + getToken(),
+        },
+        //数据
+        form:{
+          data1:true,
+          data2:false,
+          data3:'',
+          data4:false,
+          data5:'',
+          data6:[],
+          data7:[],
+          data8:[],
+          data9:[],
+        },
+        rules:{
+          imgUrl: [
+            { required: true, message: "请输入资质名称", trigger: "change" }
+          ],
+          buttonType: [
+            { required: true, message: "请输入排序序号", trigger: "change" }
+          ],
+          menuId: [
+            { required: true, message: "请输入排序序号", trigger: "change" }
+          ],
+          buttonName: [
+            { required: true, message: "请输入排序序号", trigger: "change" }
+          ],
+          switch: [
+            { required: true, message: "请输入排序序号", trigger: "change" }
+          ],
+        },
+        //菜单列表
+        menuOptions:[],
+        menuOptionsMax:[],
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.getMenu();
+    },
+    methods:{
+      //移动排序
+      sortClick(list,index,status){
+        let tindex = null;
+        if(index == 0 && status == 'top'){
+          return
+        }else if(list.length == index+1 && status == 'bottom'){
+          return
+        }
+        if (status == 'top'){
+          tindex = index-1
+          list.splice(tindex,0,list[index]);
+          list.splice(index+1,1)
+        } else if(status == 'bottom'){
+          tindex = index+1
+          list.splice(tindex+1,0,list[index]);
+          list.splice(index,1)
+        }
+      },
+      //删除首页按钮
+      delHomeButton(type,index){
+        let self = this;
+        if(type === 'center'){
+          this.$confirm('确认删除该按钮?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            self.form.data6.splice(index,1);
+          }).then(() => {
+          }).catch(() => {});
+        }else if(type === 'left'){
+          this.$confirm('确认删除该按钮?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            self.form.data7.splice(index,1);
+          }).then(() => {
+          }).catch(() => {});
+        }else if(type === 'right'){
+          this.$confirm('确认删除该按钮?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            self.form.data8.splice(index,1);
+          }).then(() => {
+          }).catch(() => {});
+        }else if(type === 'bottom'){
+          this.$confirm('确认删除该按钮?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            self.form.data9.splice(index,1);
+          }).then(() => {
+          }).catch(() => {});
+        }
+      },
+      //添加首页按钮
+      addHomeButton(type){
+        if(type === 'center'){
+          this.form.data6.push({
+            imgUrl:null,
+            buttonType:true,
+            menuId:null,
+            buttonName:null,
+            switch:true
+          })
+        }else if(type === 'left'){
+          this.form.data7.push({
+            imgUrl:null,
+            buttonType:true,
+            menuId:null,
+            buttonName:null,
+            switch:true
+          })
+        }else if(type === 'right'){
+          this.form.data8.push({
+            imgUrl:null,
+            buttonType:true,
+            menuId:null,
+            buttonName:null,
+            switch:true
+          })
+        }else if(type === 'bottom'){
+          this.form.data9.push({
+            imgUrl:null,
+            buttonType:true,
+            menuId:null,
+            buttonName:null,
+            switch:true
+          })
+        }
+      },
+      //获取菜单列表
+      getMenu(){
+        listMenu({ menuName: undefined, visible: undefined }).then(response => {
+          let list = [];
+          let newList = []
+          for(let i=0;i<response.data.length;i++){
+            if(response.data[i].menuType!=2 && !response.data[i].isFrame){
+              list.push(response.data[i])
+            }
+          }
+          for(let i=0;i<response.data.length;i++){
+            if(response.data[i].component == 'Layout' && !response.data[i].isFrame){
+              newList.push(response.data[i])
+            }
+          }
+          this.menuOptions = this.handleTree(list, "menuId");
+          this.menuOptionsMax = this.handleTree(newList, "menuId");
+        });
+      },
+      //图片上传相关
+      handleAvatarSuccess(res, file) {
+        console.log('res.data.url==>',res.data.url);
+        console.log('file==>',file);
+        this.form.applyCertificate = res.data.url;
+        this.$forceUpdate()
+      },
+      beforeAvatarUpload(file,status) {
+        console.log('file',file)
+        console.log('status',status)
+        return new Promise((resolve, reject) => {
+
+          if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/gif') {
+            let reader = new FileReader()
+            reader.readAsDataURL(file) // 必须用file.raw
+            reader.onload = e => { // 让页面中的img标签的src指向读取的路径
+              let img = e.target.result;
+              const image = new Image()
+              image.src=img
+              image.onload = _=>{
+                if(status == 'center'){
+                  if(image.width <= 147 && image.height <= 105){
+                    resolve()
+                  }else{
+                    this.$message.error('尺寸限制为147*105px')
+                    reject();
+                  }
+                }else if(status == 'left' || status == 'right'){
+                  if(image.width <= 297 && image.height <= 136){
+                    resolve()
+                  }else{
+                    this.$message.error('尺寸限制为297*136px')
+                    reject();
+                  }
+                }else if(status == 'bottom'){
+                  if(image.width <= 140 && image.height <= 230){
+                    resolve()
+                  }else{
+                    this.$message.error('尺寸限制为140*230px')
+                    reject();
+                  }
+                }
+              }
+            }
+          }else{
+            this.$message.error('只能上传png/jpeg/gif格式图片');
+            reject();
+          }
+          // let type = false;
+          // if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/gif') {
+          //   type = true;
+          // }else{
+          //   this.$message.error('只能上传png/jpeg/gif格式图片');
+          //   type = false;
+          // }
+          // return type;
+        })
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .homeConfig{
+    display: flex;
+    flex:1;
+    flex-direction: column;
+    padding:20px;
+    overflow: hidden;
+    .homeConfig-form{
+      display: flex;
+      flex:1;
+      flex-direction: column;
+      font-weight:500;
+      .button-box{
+        border-radius:10px;
+        margin-bottom:20px;
+        .button-box-title-box{
+          border-top:4px solid #dedede;
+          display: flex;
+          .button-box-title-p{
+            flex:1;
+            font-size:14px;
+            line-height:80px;
+            margin-left:90px;
+          }
+          .add-button-p{
+            height:30px;
+            width:80px;
+            margin:25px 50px 25px 0;
+            line-height:30px;
+            text-align: center;
+            border-radius:4px;
+            border:1px solid #0183fa;
+            color:#0183fa;
+            font-size:14px;
+            cursor: pointer;
+          }
+          .add-button-p:hover{
+            border:1px solid #0183fa;
+            background-color: #0183fa;
+            color:#fff;
+          }
+        }
+        .button-min-box{
+          margin:0 50px;
+          /*border:1px solid #dedede;*/
+          .null-box{
+            line-height:100px;
+            font-size:24px;
+            text-align: center;
+            color:#999;
+            padding-bottom:80px;
+          }
+          .button-for-box{
+            border:1px solid #dedede;
+            border-radius:6px;
+            display: inline-block;
+            margin:0 20px 20px 0;
+            position: relative;
+            .img-title-p{
+              font-size:14px;
+              line-height:50px;
+              margin-left:20px;
+              span{
+                color: red;
+              }
+            }
+            .button-for-min-box{
+              display: flex;
+              .button-for-min-left-box{
+                padding-left:20px;
+              }
+              .button-for-min-right-box{
+                display: flex;
+                flex-direction: column;
+              }
+              .button-for-sort-button-box{
+                width:30px;
+                display: flex;
+                flex-direction: column;
+                margin:0 20px 0 10px;
+                .sort-null-p{
+                  flex:1;
+                }
+                .el-icon-arrow-up{
+                  border: 1px solid #dedede;
+                  background-color: #dedede;
+                  color:#fff;
+                  border-top-left-radius: 6px;
+                  border-top-right-radius: 6px;
+                  line-height: 60px;
+                  text-align: center;
+                  font-size:18px;
+                  cursor: pointer;
+                }
+                .el-icon-arrow-down{
+                  border: 1px solid #dedede;
+                  background-color: #dedede;
+                  border-bottom-left-radius: 6px;
+                  border-bottom-right-radius: 6px;
+                  color:#fff;
+                  line-height: 60px;
+                  text-align: center;
+                  font-size:18px;
+                  cursor: pointer;
+                }
+                .el-icon-arrow-up:hover{
+                  background-color: #0183fa;
+                  color:#fff;
+                }
+                .el-icon-arrow-down:hover{
+                  background-color: #0183fa;
+                  color:#fff;
+                }
+                p:nth-child(4){
+                  margin-bottom:40px;
+                }
+              }
+              .center-img{
+                width:147px;
+                height:105px;
+                overflow: hidden;
+                border-radius: 4px;
+                border:1px solid #dedede;
+                img{
+                  display: block;
+                  width:146px;
+                  height:104px;
+                }
+              }
+              .left-img{
+                width:297px;
+                height:136px;
+                overflow: hidden;
+                border-radius: 4px;
+                border:1px solid #dedede;
+                img{
+                  display: block;
+                  width:296px;
+                  height:136px;
+                }
+              }
+              .right-img{
+                width:297px;
+                height:136px;
+                overflow: hidden;
+                border-radius: 4px;
+                border:1px solid #dedede;
+                img{
+                  display: block;
+                  width:296px;
+                  height:136px;
+                }
+              }
+              .bottom-img{
+                width:140px;
+                height:230px;
+                overflow: hidden;
+                border-radius: 4px;
+                border:1px solid #dedede;
+                img{
+                  display: block;
+                  width:140px;
+                  height:230px;
+                }
+              }
+            }
+            .del-p{
+              cursor: pointer;
+              position: absolute;
+              line-height: 20px;
+              width:20px;
+              text-align: center;
+              color:#FF6666;
+              font-size:14px;
+              top:5px;
+              right:5px;
+              border-radius:50%;
+            }
+            .del-p:hover{
+              background-color: #FF6666;
+              color:#fff;
+            }
+          }
+        }
+      }
+    }
+  }
+</style>

+ 7 - 0
src/views/systemManagement/publicConfig/index.vue

@@ -21,12 +21,17 @@
         <p :class="pageType == 5 ? 'p-color':''">开发配置</p>
         <p :class="pageType == 5 ? 'p-back':''"></p>
       </div>
+      <div class="top-button-box" @click="buttonPageType(6)">
+        <p :class="pageType == 6 ? 'p-color':''">首页配置</p>
+        <p :class="pageType == 6 ? 'p-back':''"></p>
+      </div>
     </div>
     <basics-config v-if="pageType == 1"></basics-config>
     <chemicals-config v-if="pageType == 2"></chemicals-config>
     <integrationConfig v-if="pageType == 3"></integrationConfig>
     <program-config v-if="pageType == 4"></program-config>
     <exploit-config v-if="pageType == 5"></exploit-config>
+    <home-config v-if="pageType == 6"></home-config>
   </div>
 </template>
 
@@ -36,6 +41,7 @@ import chemicalsConfig from "./chemicalsConfig.vue";
 import integrationConfig from "./integrationConfig.vue";
 import programConfig from "./programConfig.vue";
 import exploitConfig from "./exploitConfig.vue";
+import homeConfig from "./homeConfig.vue";
 export default {
   name: "index",
   components: {
@@ -44,6 +50,7 @@ export default {
     integrationConfig,
     programConfig,
     exploitConfig,
+    homeConfig,
   },
   data() {
     return {