theo 3 роки тому
батько
коміт
de90905c19

+ 1 - 0
backendEle/package.json

@@ -22,6 +22,7 @@
     "countup.js": "^1.9.3",
     "echarts": "^4.1.0",
     "element-ui": "2.9.1",
+    "moment": "^2.29.4",
     "nix-tinymce": "^1.0.7",
     "ua-parser-js": "^0.7.20",
     "v-charts": "^1.16.20",

+ 4 - 1
backendEle/src/main.js

@@ -1,5 +1,6 @@
 // The Vue build version to load with the `import` command
 // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
+import moment from 'moment'
 import Vue from 'vue'
 import ElementUI from 'element-ui'
 import locale from 'element-ui/lib/locale/lang/en'
@@ -10,7 +11,9 @@ import router from './router'
 import axios from './utils/axiosPlugin'
 import errorInfo from './utils/errorCode'
 
-Vue.use(ElementUI,{locale})
+Vue.prototype.$moment = moment
+
+Vue.use(ElementUI, {locale})
 
 Vue.config.productionTip = false
 

+ 17 - 9
backendEle/src/views/bonus/period.vue

@@ -20,13 +20,13 @@
         </el-table-column>
         <el-table-column label="time frame" width="260"><!-- 时间范围 -->
           <template slot-scope="scope">
-            <!-- 应开始于 -->Should start on:{{tool.formatDate(scope.row.START_TIME)}}<br/>
-            <!-- 应结束于 -->Should end on:{{tool.formatDate(scope.row.END_TIME)}}
+            <!-- 应开始于 -->Should start on:{{getWatTime(scope.row.START_TIME)}}<br/>
+            <!-- 应结束于 -->Should end on:{{getWatTime(scope.row.END_TIME)}}
           </template>
         </el-table-column>
         <el-table-column label="Closing time" width="180"><!-- 封期时间 -->
           <template slot-scope="scope">
-            {{tool.formatDate(scope.row.CLOSED_AT)}}
+            {{getWatTime(scope.row.CLOSED_AT)}}
           </template>
         </el-table-column>
         <el-table-column label="Performance sheet progress" width="90"><!-- 业绩单进度 -->
@@ -37,8 +37,8 @@
         </el-table-column>
         <el-table-column label="Time of generating performance sheet" width="210"><!-- 生成业绩单时间 -->
           <template slot-scope="scope">
-            <!-- 开始 -->start:{{tool.formatDate(scope.row.PERF_STARTED_AT)}}<br>
-            <!-- 完成 -->complete:{{tool.formatDate(scope.row.PERFED_AT)}}
+            <!-- 开始 -->start:{{getWatTime(scope.row.PERF_STARTED_AT)}}<br>
+            <!-- 完成 -->complete:{{getWatTime(scope.row.PERFED_AT)}}
           </template>
         </el-table-column>
         <el-table-column label="Settlement progress" width="80"><!-- 结算进度 -->
@@ -49,8 +49,8 @@
         </el-table-column>
         <el-table-column label="Date" width="210"><!-- 结算时间 -->
           <template slot-scope="scope">
-            <!-- 开始 -->start:{{tool.formatDate(scope.row.CALCULATE_STARTED_AT)}}<br>
-            <!-- 完成 -->complete:{{tool.formatDate(scope.row.CALCULATED_AT)}}
+            <!-- 开始 -->start:{{getWatTime(scope.row.CALCULATE_STARTED_AT)}}<br>
+            <!-- 完成 -->complete:{{getWatTime(scope.row.CALCULATED_AT)}}
           </template>
         </el-table-column>
         <el-table-column label="Network connection progress" width="80"><!-- 挂网进度 -->
@@ -61,8 +61,8 @@
         </el-table-column>
         <el-table-column label="Network connection time" width="210"><!-- 挂网时间 -->
           <template slot-scope="scope">
-            <!-- 开始 -->start:{{tool.formatDate(scope.row.SEND_STARTED_AT)}}<br/>
-            <!-- 完成 -->complete:{{tool.formatDate(scope.row.SENT_AT)}}
+            <!-- 开始 -->start:{{getWatTime(scope.row.SEND_STARTED_AT)}}<br/>
+            <!-- 完成 -->complete:{{getWatTime(scope.row.SENT_AT)}}
           </template>
         </el-table-column>
         <el-table-column fixed="right" label="Action" width="180"><!-- 操作 -->
@@ -294,6 +294,14 @@ export default {
           this.getData(this.currentPage, this.pageSize)
         }
       }
+    },
+    getWatTime (ts) {
+      ts = parseInt(ts)
+      if (ts) {
+        return this.$moment(ts * 1000).utcOffset('+0100' ).format('YYYY-MM-DD HH:mm:ss')
+      } else {
+        return ''
+      }
     }
   }
 }

+ 176 - 178
backendEle/src/views/layout/layout.vue

@@ -90,198 +90,196 @@
   </el-container>
 </template>
 <script>
-  import {WEBSOCKET_HOST} from '@/utils/config'
-  import userInfo from '@/utils/userInfo'
-  import network from '@/utils/network'
-  import tool from '@/utils/tool'
-  import Waves from '@/static/plugins/waves/waves.js'
-  import store from '@/utils/vuexStore'
-  import baseInfo from '@/utils/baseInfo'
-  import initRegion from '@/utils/region'
-  import '@/static/plugins/css/font-awesome.min.css'
+import {WEBSOCKET_HOST} from '@/utils/config'
+import userInfo from '@/utils/userInfo'
+import network from '@/utils/network'
+import tool from '@/utils/tool'
+import Waves from '@/static/plugins/waves/waves.js'
+import store from '@/utils/vuexStore'
+import baseInfo from '@/utils/baseInfo'
+import initRegion from '@/utils/region'
+import '@/static/plugins/css/font-awesome.min.css'
 
-  export default {
-    name: 'layout',
-    beforeCreate() {
-      let vueObj = this
-      // 检测用户是否已经登录,如果已经登录则直接跳转到控制台页
-      if (!userInfo.hasLogin()) {
-        this.$router.push('/login')
-        return
-      }
-      // websocket连接
-      let wsServer = WEBSOCKET_HOST
-      let webSocket = new WebSocket(wsServer)
-      store.state.socket.socketObj = webSocket
-      webSocket.onopen = function (evt) {
-        let userId = userInfo.userId()
-        let sendData = {app: 'admin', userId: userId}
-        webSocket.send(JSON.stringify(sendData))
-      }
-      webSocket.onmessage = function (env) {
-        let data = JSON.parse(env.data)
-        if (data.handle === 'adminAsync') {
-          vueObj.$message({
-            message: data.message,
-            type: data.success ? 'success' : 'error',
-            showClose: !data.success,
-            duration: data.success ? 3000 : 0,
-          })
-          if (store.state.socket.onMessageCallback !== null) {
-            store.state.socket.onMessageCallback()
-          }
+export default {
+  name: 'layout',
+  beforeCreate () {
+    let vueObj = this
+    // 检测用户是否已经登录,如果已经登录则直接跳转到控制台页
+    if (!userInfo.hasLogin()) {
+      this.$router.push('/login')
+      return
+    }
+    // websocket连接
+    let wsServer = WEBSOCKET_HOST
+    let webSocket = new WebSocket(wsServer)
+    store.state.socket.socketObj = webSocket
+    webSocket.onopen = function (evt) {
+      let userId = userInfo.userId()
+      let sendData = {app: 'admin', userId: userId}
+      webSocket.send(JSON.stringify(sendData))
+    }
+    webSocket.onmessage = function (env) {
+      let data = JSON.parse(env.data)
+      if (data.handle === 'adminAsync') {
+        vueObj.$message({
+          message: data.message,
+          type: data.success ? 'success' : 'error',
+          showClose: !data.success,
+          duration: data.success ? 3000 : 0
+        })
+        if (store.state.socket.onMessageCallback !== null) {
+          store.state.socket.onMessageCallback()
         }
-        else if (data.handle === 'adminAsyncPercent') {
-          if (store.state.socket.onMessageCallback !== null) {
-            store.state.socket.onMessageCallback(data)
-          }
+      } else if (data.handle === 'adminAsyncPercent') {
+        if (store.state.socket.onMessageCallback !== null) {
+          store.state.socket.onMessageCallback(data)
         }
-
       }
-      // 获取系统相关信息
-      // network.getData(`site/base-info`).then(response => {
-      //     store.state.baseInfo.decLevels = response.decLevels;
-      //     store.state.baseInfo.empLevels = response.empLevels;
-      //     store.state.baseInfo.adminRoles = response.adminRoles;
-      //     store.state.baseInfo.menu = response.menu;
-      // });
-
-      // 获取地区信息
-      initRegion(this)
-    },
-    mounted() {
-      Waves.init()
-      this.calcTime()
-      Waves.attach('.waves-btn')
-      this.activeNav();
-      this.$nextTick(function () {
-          window.addEventListener('scroll', this.scrollToTop, true);
-      });
-      // 取消菜单a标签的默认动作
-      let allLeftMenuA = document.getElementsByClassName('left-menu-a')
-      for(let i in allLeftMenuA){
-        if(allLeftMenuA[i].onclick){
-          allLeftMenuA[i].onclick = function(e){
-            e.preventDefault()
-          }
+    }
+    // 获取系统相关信息
+    // network.getData(`site/base-info`).then(response => {
+    //     store.state.baseInfo.decLevels = response.decLevels;
+    //     store.state.baseInfo.empLevels = response.empLevels;
+    //     store.state.baseInfo.adminRoles = response.adminRoles;
+    //     store.state.baseInfo.menu = response.menu;
+    // });
+    // 获取地区信息
+    initRegion(this)
+  },
+  mounted () {
+    Waves.init()
+    this.calcTime()
+    Waves.attach('.waves-btn')
+    this.activeNav()
+    this.$nextTick(function () {
+      window.addEventListener('scroll', this.scrollToTop, true)
+    })
+    // 取消菜单a标签的默认动作
+    let allLeftMenuA = document.getElementsByClassName('left-menu-a')
+    for (let i in allLeftMenuA) {
+      if (allLeftMenuA[i].onclick) {
+        allLeftMenuA[i].onclick = function (e) {
+          e.preventDefault()
         }
       }
-
+    }
+  },
+  destroyed () {
+    window.removeEventListener('scroll', this.scrollToTop)
+  },
+  data () {
+    return {
+      isCollapse: false,
+      menuActiveIndex: this.$route.meta.highLight || this.$route.path,
+      mainTitle: this.$route.meta.title,
+      messageShow: false,
+      profileShow: false,
+      adminNameShow: true,
+      menuClass: '',
+      adminName: userInfo.adminName(),
+      nowTime: tool.getTimestamp(),
+      periodNum: baseInfo.nowPeriodNum(),
+      showBackToUp: false
+    }
+  },
+  computed: {
+    nowDateTime: function () {
+      // console.log(this.nowTime)
+      return this.$moment(this.nowTime * 1000).utcOffset('+0100' ).format('YYYY-MM-DD HH:mm:ss') + ' (WAT)'
+      // return tool.formatDate(this.nowTime)
     },
-    destroyed () {
-        window.removeEventListener('scroll', this.scrollToTop);
+    menu: function () {
+      return baseInfo.menu()
     },
-    data() {
-      return {
-        isCollapse: false,
-        menuActiveIndex: this.$route.meta.highLight || this.$route.path,
-        mainTitle: this.$route.meta.title,
-        messageShow: false,
-        profileShow: false,
-        adminNameShow: true,
-        menuClass: '',
-        adminName: userInfo.adminName(),
-        nowTime: tool.getTimestamp(),
-        periodNum: baseInfo.nowPeriodNum(),
-        showBackToUp:false,
+    contentTitle: function () {
+      return this.$route.meta.title
+    },
+    breadcrumb: function () {
+      let breadcrumbArr = []
+      for (let i in this.$route.meta.breadcrumb) {
+        breadcrumbArr.push(this.$route.meta.breadcrumb[i])
       }
+      breadcrumbArr.push({title: this.$route.meta.title, path: ''})
+      return breadcrumbArr
     },
-    computed: {
-      nowDateTime: function () {
-        return tool.formatDate(this.nowTime)
-      },
-      menu: function () {
-        return baseInfo.menu()
-      },
-      contentTitle: function () {
-        return this.$route.meta.title
-      },
-      breadcrumb: function () {
-        let breadcrumbArr = []
-        for (let i in this.$route.meta.breadcrumb) {
-          breadcrumbArr.push(this.$route.meta.breadcrumb[i])
-        }
-        breadcrumbArr.push({title: this.$route.meta.title, path: ''})
-        return breadcrumbArr
-      },
+  },
+  methods: {
+    calcTime () {
+      let obj = this
+      setInterval(function () {
+        obj.nowTime += 1
+      }, 1000)
     },
-    methods: {
-      calcTime() {
-        let obj = this
-        setInterval(function () {
-          obj.nowTime += 1
-        }, 1000)
-      },
-      onMenu() {
-        if (this.isCollapse) {
-          this.isCollapse = false
-          document.getElementsByTagName('body')[0].className = ''
-        } else {
-          this.isCollapse = true
-          document.getElementsByTagName('body')[0].className = 'content-wrapper'
-        }
-      },
-      onMobileMenu() {
-        if (this.menuClass === 'show-menu') {
-          this.menuClass = ''
-        } else {
-          this.menuClass = 'show-menu'
+    onMenu () {
+      if (this.isCollapse) {
+        this.isCollapse = false
+        document.getElementsByTagName('body')[0].className = ''
+      } else {
+        this.isCollapse = true
+        document.getElementsByTagName('body')[0].className = 'content-wrapper'
+      }
+    },
+    onMobileMenu () {
+      if (this.menuClass === 'show-menu') {
+        this.menuClass = ''
+      } else {
+        this.menuClass = 'show-menu'
+      }
+    },
+    onMessage () {
+      this.messageShow = !this.messageShow
+    },
+    onProfile () {
+      this.profileShow = !this.profileShow
+    },
+    onLogout () {
+      userInfo.clear()
+      this.$router.push('/login')
+    },
+    onChangePassword () {
+      this.$router.push('/admin/change-password')
+    },
+    onCloseProfile () {
+      this.profileShow = false
+    },
+    // 点击图片回到顶部方法,加计时器是为了过渡顺滑
+    backTop () {
+      let that = this
+      let timer = setInterval(() => {
+        let _speed = Math.floor(-that.scrollTop / 5)
+        document.documentElement.scrollTop = document.body.scrollTop = that.scrollTop + _speed
+        if (that.scrollTop === 0) {
+          clearInterval(timer)
         }
-      },
-      onMessage() {
-        this.messageShow = !this.messageShow
-      },
-      onProfile() {
-        this.profileShow = !this.profileShow
-      },
-      onLogout() {
-        userInfo.clear()
-        this.$router.push('/login')
-      },
-      onChangePassword() {
-        this.$router.push('/admin/change-password')
-      },
-      onCloseProfile() {
-        this.profileShow = false
-      },
-      // 点击图片回到顶部方法,加计时器是为了过渡顺滑
-      backTop () {
-          let that = this;
-          let timer = setInterval(() => {
-              let _speed = Math.floor(-that.scrollTop / 5);
-              document.documentElement.scrollTop = document.body.scrollTop = that.scrollTop + _speed;
-              if (that.scrollTop === 0) {
-                  clearInterval(timer);
-              }
-          }, 16);
-      },
-      // 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
-      scrollToTop () {
-          let that = this,
-              _scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
-          that.scrollTop = _scrollTop;
-          if (that.scrollTop > 60) {
-              that.showBackToUp = true;
-          } else {
-              that.showBackToUp = false;
-          }
-      },
-      activeNav(){
-          let currentRouteMeta = this.$route.meta;
-          if(typeof currentRouteMeta['activeRoute'] !== 'undefined'){
-              this.menuActiveIndex = currentRouteMeta['activeRoute'];
-          }else{
-              this.fixedMenuActive();
-          }
-      },
-      fixedMenuActive(){
-          let module = this.$route.matched[1].path;
-          //fixed shop nav
-          // if(module === '/shop') module = '/shop/goods';
-          this.menuActiveIndex = module + '/index';
-      },
+      }, 16)
+    },
+    // 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
+    scrollToTop () {
+      let that = this,
+        _scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
+      that.scrollTop = _scrollTop
+      if (that.scrollTop > 60) {
+        that.showBackToUp = true
+      } else {
+        that.showBackToUp = false
+      }
+    },
+    activeNav () {
+      let currentRouteMeta = this.$route.meta
+      if (typeof currentRouteMeta['activeRoute'] !== 'undefined') {
+        this.menuActiveIndex = currentRouteMeta['activeRoute']
+      } else {
+        this.fixedMenuActive()
+      }
+    },
+    fixedMenuActive () {
+      let module = this.$route.matched[1].path
+      // fixed shop nav
+      // if(module === '/shop') module = '/shop/goods';
+      this.menuActiveIndex = module + '/index'
     }
   }
+}
 </script>
 
 <style>