Преглед изворни кода

优化页面,增加公共函数,公共规则校验js文件

xinsuixindong пре 1 година
родитељ
комит
15f10d0355

+ 23 - 23
src/components/TopNav/index.vue

@@ -136,29 +136,29 @@ export default {
         roles
       );
 
-      accessRoutes.unshift({
-        children: [
-          {
-            id: "dashboard",
-            hidden: false,
-            meta: {
-              title: "首页",
-              icon: 'dashboard'
-            },
-            parentPath: "/homePage",
-            name: "Dashboard",
-            path: "/homePage/dashboard",
-            component: "/dashboard/index"
-          }
-        ],
-        alwaysShow: true,
-        id: "homePage",
-        path: "/homePage",
-        meta: {
-          title: "首页"
-        },
-        redirect: "/homePage/dashboard"
-      });
+      // accessRoutes.unshift({
+      //   children: [
+      //     {
+      //       id: "dashboard",
+      //       hidden: false,
+      //       meta: {
+      //         title: "首页",
+      //         icon: 'dashboard'
+      //       },
+      //       parentPath: "/homePage",
+      //       name: "Dashboard",
+      //       path: "/homePage/dashboard",
+      //       component: "/dashboard/index"
+      //     }
+      //   ],
+      //   alwaysShow: true,
+      //   id: "homePage",
+      //   path: "/homePage",
+      //   meta: {
+      //     title: "首页"
+      //   },
+      //   redirect: "/homePage/dashboard"
+      // });
       this.topMenuss(accessRoutes);
       this.childrenMenus(accessRoutes);
       // return accessRoutes;

+ 14 - 0
src/layout/components/Sidebar/index.vue

@@ -3,6 +3,7 @@
     <logo v-if="showLogo" :collapse="isCollapse" />
     <el-scrollbar wrap-class="scrollbar-wrapper">
       <el-menu
+        v-if="show"
         :default-active="activeMenu"
         :collapse="isCollapse"
         :background-color="variables.menuBg"
@@ -50,6 +51,19 @@ export default {
     isCollapse() {
       return !this.sidebar.opened;
     }
+  },
+  data() {
+    return {
+      show: true
+    };
+  },
+  mounted() {
+    if (this.$store.state.settings.topNav == true) {
+      this.show = false;
+      setTimeout(() => {
+        this.show = true;
+      }, 100);
+    }
   }
 };
 </script>

+ 7 - 7
src/router/index.js

@@ -45,13 +45,13 @@ export const constantRoutes = [
     component: Layout,
     redirect: "/homePage/dashboard",
     children: [
-      {
-        path: "/homePage/dashboard",
-        component: () => import("@/views/dashboard/index"),
-        name: "Dashboard",
-        meta: { title: "首页", icon: "dashboard" },
-        hidden: true
-      },
+      // {
+      //   path: "/homePage/dashboard",
+      //   component: () => import("@/views/dashboard/index"),
+      //   name: "Dashboard",
+      //   meta: { title: "首页", icon: "dashboard" },
+      //   hidden: true
+      // },
       {
         // 公告详情
         path: "/noticeDetail/:id",

+ 0 - 32
src/utils/clipboard.js

@@ -1,32 +0,0 @@
-import Vue from 'vue'
-import Clipboard from 'clipboard'
-
-function clipboardSuccess() {
-  Vue.prototype.$message({
-    message: 'Copy successfully',
-    type: 'success',
-    duration: 1500
-  })
-}
-
-function clipboardError() {
-  Vue.prototype.$message({
-    message: 'Copy failed',
-    type: 'error'
-  })
-}
-
-export default function handleClipboard(text, event) {
-  const clipboard = new Clipboard(event.target, {
-    text: () => text
-  })
-  clipboard.on('success', () => {
-    clipboardSuccess()
-    clipboard.destroy()
-  })
-  clipboard.on('error', () => {
-    clipboardError()
-    clipboard.destroy()
-  })
-  clipboard.onClick(event)
-}

+ 0 - 357
src/utils/index.js

@@ -1,357 +0,0 @@
-/**
- * Created by PanJiaChen on 16/11/18.
- */
-
-/**
- * Parse the time to string
- * @param {(Object|string|number)} time
- * @param {string} cFormat
- * @returns {string | null}
- */
-export function parseTime(time, cFormat) {
-  if (arguments.length === 0 || !time) {
-    return null
-  }
-  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
-  let date
-  if (typeof time === 'object') {
-    date = time
-  } else {
-    if ((typeof time === 'string')) {
-      if ((/^[0-9]+$/.test(time))) {
-        // support "1548221490638"
-        time = parseInt(time)
-      } else {
-        // support safari
-        // https://stackoverflow.com/questions/4310953/invalid-date-in-safari
-        time = time.replace(new RegExp(/-/gm), '/')
-      }
-    }
-
-    if ((typeof time === 'number') && (time.toString().length === 10)) {
-      time = time * 1000
-    }
-    date = new Date(time)
-  }
-  const formatObj = {
-    y: date.getFullYear(),
-    m: date.getMonth() + 1,
-    d: date.getDate(),
-    h: date.getHours(),
-    i: date.getMinutes(),
-    s: date.getSeconds(),
-    a: date.getDay()
-  }
-  const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
-    const value = formatObj[key]
-    // Note: getDay() returns 0 on Sunday
-    if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
-    return value.toString().padStart(2, '0')
-  })
-  return time_str
-}
-
-/**
- * @param {number} time
- * @param {string} option
- * @returns {string}
- */
-export function formatTime(time, option) {
-  if (('' + time).length === 10) {
-    time = parseInt(time) * 1000
-  } else {
-    time = +time
-  }
-  const d = new Date(time)
-  const now = Date.now()
-
-  const diff = (now - d) / 1000
-
-  if (diff < 30) {
-    return '刚刚'
-  } else if (diff < 3600) {
-    // less 1 hour
-    return Math.ceil(diff / 60) + '分钟前'
-  } else if (diff < 3600 * 24) {
-    return Math.ceil(diff / 3600) + '小时前'
-  } else if (diff < 3600 * 24 * 2) {
-    return '1天前'
-  }
-  if (option) {
-    return parseTime(time, option)
-  } else {
-    return (
-      d.getMonth() +
-      1 +
-      '月' +
-      d.getDate() +
-      '日' +
-      d.getHours() +
-      '时' +
-      d.getMinutes() +
-      '分'
-    )
-  }
-}
-
-/**
- * @param {string} url
- * @returns {Object}
- */
-export function getQueryObject(url) {
-  url = url == null ? window.location.href : url
-  const search = url.substring(url.lastIndexOf('?') + 1)
-  const obj = {}
-  const reg = /([^?&=]+)=([^?&=]*)/g
-  search.replace(reg, (rs, $1, $2) => {
-    const name = decodeURIComponent($1)
-    let val = decodeURIComponent($2)
-    val = String(val)
-    obj[name] = val
-    return rs
-  })
-  return obj
-}
-
-/**
- * @param {string} input value
- * @returns {number} output value
- */
-export function byteLength(str) {
-  // returns the byte length of an utf8 string
-  let s = str.length
-  for (var i = str.length - 1; i >= 0; i--) {
-    const code = str.charCodeAt(i)
-    if (code > 0x7f && code <= 0x7ff) s++
-    else if (code > 0x7ff && code <= 0xffff) s += 2
-    if (code >= 0xDC00 && code <= 0xDFFF) i--
-  }
-  return s
-}
-
-/**
- * @param {Array} actual
- * @returns {Array}
- */
-export function cleanArray(actual) {
-  const newArray = []
-  for (let i = 0; i < actual.length; i++) {
-    if (actual[i]) {
-      newArray.push(actual[i])
-    }
-  }
-  return newArray
-}
-
-/**
- * @param {Object} json
- * @returns {Array}
- */
-export function param(json) {
-  if (!json) return ''
-  return cleanArray(
-    Object.keys(json).map(key => {
-      if (json[key] === undefined) return ''
-      return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
-    })
-  ).join('&')
-}
-
-/**
- * @param {string} url
- * @returns {Object}
- */
-export function param2Obj(url) {
-  const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
-  if (!search) {
-    return {}
-  }
-  const obj = {}
-  const searchArr = search.split('&')
-  searchArr.forEach(v => {
-    const index = v.indexOf('=')
-    if (index !== -1) {
-      const name = v.substring(0, index)
-      const val = v.substring(index + 1, v.length)
-      obj[name] = val
-    }
-  })
-  return obj
-}
-
-/**
- * @param {string} val
- * @returns {string}
- */
-export function html2Text(val) {
-  const div = document.createElement('div')
-  div.innerHTML = val
-  return div.textContent || div.innerText
-}
-
-/**
- * Merges two objects, giving the last one precedence
- * @param {Object} target
- * @param {(Object|Array)} source
- * @returns {Object}
- */
-export function objectMerge(target, source) {
-  if (typeof target !== 'object') {
-    target = {}
-  }
-  if (Array.isArray(source)) {
-    return source.slice()
-  }
-  Object.keys(source).forEach(property => {
-    const sourceProperty = source[property]
-    if (typeof sourceProperty === 'object') {
-      target[property] = objectMerge(target[property], sourceProperty)
-    } else {
-      target[property] = sourceProperty
-    }
-  })
-  return target
-}
-
-/**
- * @param {HTMLElement} element
- * @param {string} className
- */
-export function toggleClass(element, className) {
-  if (!element || !className) {
-    return
-  }
-  let classString = element.className
-  const nameIndex = classString.indexOf(className)
-  if (nameIndex === -1) {
-    classString += '' + className
-  } else {
-    classString =
-      classString.substr(0, nameIndex) +
-      classString.substr(nameIndex + className.length)
-  }
-  element.className = classString
-}
-
-/**
- * @param {string} type
- * @returns {Date}
- */
-export function getTime(type) {
-  if (type === 'start') {
-    return new Date().getTime() - 3600 * 1000 * 24 * 90
-  } else {
-    return new Date(new Date().toDateString())
-  }
-}
-
-/**
- * @param {Function} func
- * @param {number} wait
- * @param {boolean} immediate
- * @return {*}
- */
-export function debounce(func, wait, immediate) {
-  let timeout, args, context, timestamp, result
-
-  const later = function() {
-    // 据上一次触发时间间隔
-    const last = +new Date() - timestamp
-
-    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
-    if (last < wait && last > 0) {
-      timeout = setTimeout(later, wait - last)
-    } else {
-      timeout = null
-      // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
-      if (!immediate) {
-        result = func.apply(context, args)
-        if (!timeout) context = args = null
-      }
-    }
-  }
-
-  return function(...args) {
-    context = this
-    timestamp = +new Date()
-    const callNow = immediate && !timeout
-    // 如果延时不存在,重新设定延时
-    if (!timeout) timeout = setTimeout(later, wait)
-    if (callNow) {
-      result = func.apply(context, args)
-      context = args = null
-    }
-
-    return result
-  }
-}
-
-/**
- * This is just a simple version of deep copy
- * Has a lot of edge cases bug
- * If you want to use a perfect deep copy, use lodash's _.cloneDeep
- * @param {Object} source
- * @returns {Object}
- */
-export function deepClone(source) {
-  if (!source && typeof source !== 'object') {
-    throw new Error('error arguments', 'deepClone')
-  }
-  const targetObj = source.constructor === Array ? [] : {}
-  Object.keys(source).forEach(keys => {
-    if (source[keys] && typeof source[keys] === 'object') {
-      targetObj[keys] = deepClone(source[keys])
-    } else {
-      targetObj[keys] = source[keys]
-    }
-  })
-  return targetObj
-}
-
-/**
- * @param {Array} arr
- * @returns {Array}
- */
-export function uniqueArr(arr) {
-  return Array.from(new Set(arr))
-}
-
-/**
- * @returns {string}
- */
-export function createUniqueString() {
-  const timestamp = +new Date() + ''
-  const randomNum = parseInt((1 + Math.random()) * 65536) + ''
-  return (+(randomNum + timestamp)).toString(32)
-}
-
-/**
- * Check if an element has a class
- * @param {HTMLElement} elm
- * @param {string} cls
- * @returns {boolean}
- */
-export function hasClass(ele, cls) {
-  return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
-}
-
-/**
- * Add class to element
- * @param {HTMLElement} elm
- * @param {string} cls
- */
-export function addClass(ele, cls) {
-  if (!hasClass(ele, cls)) ele.className += ' ' + cls
-}
-
-/**
- * Remove class from element
- * @param {HTMLElement} elm
- * @param {string} cls
- */
-export function removeClass(ele, cls) {
-  if (hasClass(ele, cls)) {
-    const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
-    ele.className = ele.className.replace(reg, ' ')
-  }
-}

+ 25 - 0
src/utils/menu/systemMenu.js

@@ -1,4 +1,29 @@
 const systemMenuObj = [
+   // 系统管理
+   {
+    component: "Layout",
+    icon: "",
+    id: "homePage",
+    menuType: "MENU",
+    name: "homePage",
+    parentId: "0",
+    redirect: "/homePage/dashboard",
+    remark: "首页",
+    router: "/homePage",
+    hidden: 0
+  },
+  {
+    component: "/dashboard/index",
+    icon: "el-icon-setting",
+    id: "dashboard",
+    menuType: "MENU",
+    name: "dashboard",
+    parentId: "homePage",
+    redirect: "",
+    remark: "首页",
+    router: "dashboard",
+    hidden: 0
+  },
   // 系统管理
   {
     component: "Layout",

+ 56 - 0
src/utils/rules.js

@@ -0,0 +1,56 @@
+// 类似金钱,首位不为0,最多2位小数...
+export function checkNumPot2(rule, value, callback) {
+  const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
+  if (!value) {
+    return callback(new Error("请填写数字"));
+  } else if (value == 0) {
+    return callback(new Error("请输入正数,最多2位小数"));
+  } else if (!reg.test(value)) {
+    return callback(new Error("请输入正数,最多2位小数"));
+  } else {
+    callback();
+  }
+}
+//最多4位小数
+export function checkNumPot4(rule, value, callback) {
+  const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
+  if (!value) {
+    return callback(new Error("请填写数字"));
+  } else if (value == 0) {
+    return callback(new Error("请输入正数,最多4位小数"));
+  } else if (!reg.test(value)) {
+    return callback(new Error("请输入正数,最多4位小数"));
+  } else {
+    callback();
+  }
+}
+
+// 整数
+export function checkInterNum(rule, value, callback) {
+  const reg = /^[0-9]*[1-9][0-9]*$/;
+  if (!value) {
+    return callback(new Error("请填写正整数"));
+  } else if (!reg.test(value)) {
+    return callback(new Error("请输入正整数"));
+  } else {
+    callback();
+  }
+}
+export default {
+  phone: [
+    {
+      required: true,
+      pattern: /^1[34578]\d{9}$/,
+      message: "目前只支持中国大陆的手机号码",
+      trigger: "blur",
+    },
+  ],
+  numPot2: [{ required: true, validator: checkNumPot2, trigger: "blur" }],
+  numPot4: [{ required: true, validator: checkNumPot4, trigger: "blur" }],
+  InterNum: [{ required: true, validator: checkInterNum, trigger: "blur" }],
+  required: [{ required: true, message: "请输入", trigger: "blur" }],
+  selectRequired: [{ required: true, message: "请输入", trigger: "change" }],
+  dateRequired: [
+    { required: true, message: "请输入日期", trigger: "blur", type: "date" },
+  ],
+};

+ 73 - 0
src/utils/utils.js

@@ -0,0 +1,73 @@
+/*
+ * @Description: 工具函数
+ */
+
+/*
+ * @description 获取地址栏hash参数
+ */
+export const getUrlHash = (paramName) => {
+  const urlParams = {};
+  const url = window.location.href;
+  const idx = url.indexOf("#");
+  if (idx === -1) {
+    return false;
+  }
+  let params = url.substring(url.indexOf("#") + 1);
+  params = params.split("&");
+  params.forEach((item) => {
+    const param = item.split("=");
+    urlParams[param[0]] = decodeURIComponent(param[1]);
+  });
+  if (paramName) {
+    return urlParams[paramName];
+  }
+  return urlParams;
+};
+
+/**
+ * 倒计时
+ * @param {String} target 目标时间
+ */
+export const countDown = (target) => {
+  const oDate = new Date(); // 获取日期对象
+  const oldTime = oDate.getTime(); // 现在距离1970年的毫秒数
+  const newDate = new Date(
+    isIE() && String(target).match("-") ? target.replace("-", "/") : target
+  );
+  const newTime = newDate.getTime(); // 2019年距离1970年的毫秒数
+  if (newTime >= oldTime) {
+    let second = Math.floor((newTime - oldTime) / 1000); // 未来时间距离现在的秒数
+    const day = Math.floor(second / 86400); // 整数部分代表的是天;一天有24*60*60=86400秒 ;
+    second %= 86400; // 余数代表剩下的秒数;
+    const hour = Math.floor(second / 3600); // 整数部分代表小时;
+    second %= 3600; // 余数代表 剩下的秒数;
+    const minute = Math.floor(second / 60);
+    second %= 60;
+    return {
+      day,
+      hour,
+      minute,
+      second,
+    };
+  }
+  return false;
+};
+
+/**
+ * 文件流导出
+ */
+export const downloadBlob = (res, filename) => {
+  const blob = new Blob([res], {
+    type: "application/vnd.ms-excel",
+  });
+  if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+    window.navigator.msSaveOrOpenBlob(blob, filename);
+  } else {
+    const oA = document.createElement("a");
+    oA.href = URL.createObjectURL(blob);
+    oA.download = filename;
+    oA.click();
+  }
+};
+
+