doum
2 天以前 fe29cab3d9bf8ddfeb1bc93a25a79c20276d8171
最新版本541200007最新版本541200007
已添加1个文件
已修改9个文件
121 ■■■■ 文件已修改
admin/public/index.html 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/system/common.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/CommonHeader.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/router/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/store/index.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/index.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/login.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/vo/SystemConfigVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/public/index.html
@@ -5,7 +5,8 @@
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>芜湖烟草智慧安消安全防范系统</title>
    <title>
        title: process.env.VUE_APP_TITLE,</title>
  </head>
  <body>
    <noscript>
admin/src/api/system/common.js
@@ -9,6 +9,9 @@
export function loginByPassword (data) {
  return request.post('/login', data)
}
export function getSystemConfig () {
  return request.get('/systemConfig')
}
export function loginByPhone (data) {
  return request.post('/loginByPhone', data)
}
admin/src/components/common/CommonHeader.vue
@@ -2,7 +2,7 @@
  <div class="common-header">
    <div class="header">
      <div class="logo">
        <div class="title"> <img src="@/assets/system.png" alt="" />{{ title }}</div>
        <div class="title"> <img src="@/assets/system.png" alt="" />{{sysConfig.subtitle || title }}</div>
        <div class="list">
            <div  :class="index==currentIndex?'item active':'item'" v-for="(item,index) in topMenuList.list" :key="item.id"  @click="getHeaderNav(item,index)" :index="index">{{item.label}}
              <div v-if="index==currentIndex" class="linellae"></div>
@@ -81,7 +81,7 @@
<script>
import { mapState, mapMutations } from 'vuex'
import GlobalAlertWindow from './GlobalAlertWindow'
import { logout, updatePwd } from '@/api/system/common'
import { getSystemConfig, logout, updatePwd } from '@/api/system/common'
import { getAppHeaderNav } from '@/api'
export default {
  name: 'CommonHeader',
@@ -128,13 +128,13 @@
    }
  },
  computed: {
    ...mapState(['menuData', 'userInfo', 'topMenuList', 'currentIndex'])
    ...mapState(['menuData', 'userInfo', 'topMenuList', 'currentIndex', 'sysConfig'])
    // title () {
    //   return this.$route.meta.title
    // }
  },
  created () {
    this.getSystemConfig()
  },
  mounted () {
    // needChangePwd 0 : é»˜è®¤å¯†ç éœ€è¦ä¿®æ”¹ï¼Œ1 ä¸éœ€è¦
@@ -155,13 +155,23 @@
    }
  },
  methods: {
    ...mapMutations(['setUserInfo', 'switchCollapseMenu', 'clearUserInfo', 'setTopMenuCurrent', 'setCurrentIndex']),
    ...mapMutations(['setUserInfo', 'switchCollapseMenu', 'clearUserInfo', 'setTopMenuCurrent', 'setCurrentIndex', 'setSysconfig']),
    // ä¿®æ”¹å¯†ç 
    changePwd () {
      this.visible.changePwd = true
      this.$nextTick(() => {
        this.$refs.changePwdDataForm.resetFields()
      })
    },
    getSystemConfig () {
      if (!this.sysConfig.subTitle) {
        getSystemConfig()
          .then((res) => {
            if (res && res.subtitle) {
              this.setSysconfig(res)
            }
          })
      }
    },
    validatePassword (rule, value, callback) {
      if (!value) {
@@ -181,11 +191,11 @@
        // } else {
        //   callback() // éªŒè¯é€šè¿‡
        // }
        let typeCount = 0;
        if (/[a-z]/.test(value)) typeCount++; // å°å†™å­—母
        if (/[A-Z]/.test(value)) typeCount++; // å¤§å†™å­—母
        if (/\d/.test(value)) typeCount++;    // æ•°å­—
        if (/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(value)) typeCount++; // ç‰¹æ®Šå­—符
        let typeCount = 0
        if (/[a-z]/.test(value)) typeCount++ // å°å†™å­—母
        if (/[A-Z]/.test(value)) typeCount++ // å¤§å†™å­—母
        if (/\d/.test(value)) typeCount++ // æ•°å­—
        if (/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(value)) typeCount++ // ç‰¹æ®Šå­—符
        if (typeCount >= 3) {
          callback()
        } else {
@@ -208,7 +218,7 @@
    getHKAFHeaderNav (type, label) {
      getAppHeaderNav(type).then(res => {
        if (label === '安防中心') {
          let openWindow = window.open(res, '_blank')
          const openWindow = window.open(res, '_blank')
          // setTimeout(() => {
          //   openWindow.close()
          // }, 7 * 1000)
admin/src/router/index.js
@@ -102,10 +102,10 @@
  setTimeout(function () {
    computeTableHeightIndex()
    window.addEventListener('resize', function(){
      computeTableHeightIndex()}
      computeTableHeightIndex()
    }
    )
  }, 1000)
})
function computeTableHeightIndex () {
  const height = window.innerHeight
admin/src/store/index.js
@@ -7,6 +7,7 @@
  // ç™»å½•用户信息
  userInfo: null,
  tableHeightNew: 300,
  sysConfig: { title: '', subtitle: '' },
  primaryColor: '#2080f7',
  // é¦–页
  homePage: null,
@@ -39,6 +40,10 @@
    console.log('设置顶部菜单索引', index)
    state.currentIndex = index
  },
  setSysconfig (state, config) {
    state.sysConfig = { title: config.title || '', subtitle: config.subtitle || '' }
    document.title =  state.sysConfig.title+ state.sysConfig.subtitle
  },
  // åˆ‡æ¢èœå•状态
  switchCollapseMenu (state, value) {
    if (value != null) {
@@ -68,7 +73,7 @@
  },
  // è®¾ç½®é¦–页路由信息
  setTopMenuCurrent (state, current) {
    console.log("setTopMenuCurrent",current)
    console.log('setTopMenuCurrent', current)
    if(current.id !== state.topMenuCurrent.id){
      state.topMenuList.list.forEach(item => {
        console.log(item.id, item.id)
admin/src/views/index.vue
@@ -4,7 +4,7 @@
    <div class="home_header">
      <div class="mb10 fs17">{{timeInfo}}好,{{ userInfo.realname }}</div>
      <div class="fs13">
        ä»Šå¤©æ˜¯ {{ nowDate }} {{ nowWeek }},欢迎访问智慧物流园区安消一体化系统
        ä»Šå¤©æ˜¯ {{ nowDate }} {{ nowWeek }},欢迎访问{{sysConfig.subtitle || title}}
      </div>
    </div>
    <div class="main">
@@ -218,6 +218,7 @@
import OperaCarUseBookWindow from '@/components/business/OperaCarUseBookWindow'
import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow'
import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
import {mapState} from "vuex";
const colors = ['#52a4f7', '#7678f7', '#5fc6d5']
export default {
  components: {
@@ -231,6 +232,7 @@
  },
  data () {
    return {
      title: process.env.VUE_APP_TITLE,
      tabPosition: 'right',
      colors,
      timeInfo: '上午',
@@ -258,6 +260,7 @@
    }
  },
  computed: {
    ...mapState(['sysConfig']),
    userInfo () {
      return this.$store.state.userInfo
    }
admin/src/views/login.vue
@@ -3,8 +3,8 @@
    <img src="@/assets/images/bg@2x.png" class="main_bg" alt="">
    <div class="login_wrap">
      <div class="login_img">
        <div class="h3" style="font-size: 30px; margin-left: 140px; margin-bottom: 0;">芜湖烟草</div>
        <div class="h3">智慧物流园区安消一体化系统</div>
        <div class="h3" style="font-size: 30px; margin-bottom: 0;">{{sysConfig.title || ''}}</div>
        <div class="h3">{{sysConfig.subtitle || title}}</div>
      </div>
      <div class="form_wrap">
        <div class="tabs">
@@ -73,22 +73,22 @@
</template>
<script>
import { mapMutations } from 'vuex'
import { getCaptcha, loginByPassword, sendSmsPost, loginByPhone } from '@/api/system/common'
import Cookies from "js-cookie"
import { mapMutations, mapState } from 'vuex'
import { getCaptcha, loginByPassword, sendSmsPost, loginByPhone, getSystemConfig } from '@/api/system/common'
import Cookies from 'js-cookie'
import { Message } from 'element-ui'
export default {
  name: 'Login',
  data() {
    return {
      title: process.env.VUE_APP_TITLE,
      loading: false,
      isRemPsd: false,
      username: '',
      password: '',
      phone: '',
      downTime: 0,
      smsCode: '',
      activeTab: '0',
      // éªŒè¯ç 
@@ -100,6 +100,9 @@
      }
    }
  },
  computed: {
    ...mapState(['sysConfig'])
  },
  mounted() {
    this.username = localStorage.getItem('username') || ''
    this.password = localStorage.getItem('password') || ''
@@ -107,9 +110,18 @@
    const isRemPsd = localStorage.getItem('isRemPsd') || false
    this.isRemPsd = JSON.parse(isRemPsd)
    this.refreshCaptcha()
    this.getSystemConfig()
  },
  methods: {
    ...mapMutations(['setUserInfo']),
    ...mapMutations(['setUserInfo', 'setSysconfig']),
    getSystemConfig () {
      getSystemConfig()
        .then((res) => {
          if (res && res.subtitle) {
            this.setSysconfig(res)
          }
        })
    },
    // ç™»å½•
    login() {
      if (this.loading) {
@@ -167,7 +179,6 @@
          this.loading = false
        })
      }
    },
    getCode() {
      console.log('getCode')
@@ -178,7 +189,7 @@
      sendSmsPost({ phone, type: 0 }).then(res => {
        Message.success('短信发送成功')
        this.downTime = 60
        let timer = setInterval(() => {
        const timer = setInterval(() => {
          if (this.downTime == 0) {
            return clearInterval(timer)
          }
@@ -222,7 +233,7 @@
      }
      return true
    }
  },
  }
}
</script>
@@ -267,7 +278,6 @@
      height: 600px;
      background: url("../assets/images/login_img@2x.png");
      background-size: 100% 100%;
      padding-left: 40px;
      padding-top: 60px;
      .h2 {
@@ -278,12 +288,14 @@
        align-items: center;
        justify-content: center;
        border-radius: 4px;
        text-align: center;
        width: 208px;
        display: flex;
        margin-bottom: 12px;
      }
      .h3 {
        text-align: center;
        font-size: 28px;
        font-weight: 700;
        color: #fff;
server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -1,5 +1,6 @@
package com.doumee.api.gateway;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.config.jwt.JwtProperties;
import com.doumee.config.jwt.JwtTokenUtil;
@@ -8,6 +9,7 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.system.dto.LoginCabinetDTO;
import com.doumee.dao.system.dto.LoginH5DTO;
import com.doumee.dao.system.vo.SystemConfigVo;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
@@ -44,6 +46,8 @@
    private SystemLoginService systemLoginService;
    @Autowired
    private CaptchaService captchaService;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    /**
     * @author Eva.Caesar Liu
@@ -56,6 +60,16 @@
    }
    @PreventRepeat(limit = 10, lockTime = 10000)
    @ApiOperation("获取系统配置参数")
    @GetMapping("/systemConfig")
    @LoginNoRequired
    public ApiResponse<SystemConfigVo> systemConfig ( ) {
        SystemConfigVo configVo = new SystemConfigVo();
        configVo.setSubtitle(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SYSTEM_SUBTITLE).getCode());
        configVo.setTitle(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SYSTEM_TITLE).getCode());
        return ApiResponse.success(configVo);
    }
    @PreventRepeat(limit = 10, lockTime = 10000)
    @ApiOperation("登录")
    @PostMapping("/login")
    @LoginNoRequired
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -34,6 +34,8 @@
    public static final String HK_PARAM ="HK_PARAM" ;
    public static final String HK_WEBSITE_DOMAIN_URL ="HK_WEBSITE_DOMAIN_URL" ;
    public static final String LED_CONTENT_SPEED ="LED_CONTENT_SPEED" ;
    public static final String SYSTEM_TITLE ="SYSTEM_TITLE" ;
    public static final String SYSTEM_SUBTITLE ="SYSTEM_SUBTITLE" ;
    public static final String HK_HOST ="HK_HOST" ;
    public static final String HK_APPKEY ="HK_APPKEY" ;
    public static final String LOGIN_OUT_URL ="LOGIN_OUT" ;
server/system_service/src/main/java/com/doumee/dao/system/vo/SystemConfigVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.doumee.dao.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("系统配置参数")
public class SystemConfigVo {
    @ApiModelProperty(value = "主标题")
    private String title;
    @ApiModelProperty(value = "系统副标题")
    private String subtitle;
}