util.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. import {isURL} from '@/utils/validate'
  2. export function timeFix() {
  3. const time = new Date()
  4. const hour = time.getHours()
  5. return hour < 9 ? '早上好' : (hour <= 11 ? '上午好' : (hour <= 13 ? '中午好' : (hour < 20 ? '下午好' : '晚上好')))
  6. }
  7. export function welcome() {
  8. const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了']
  9. let index = Math.floor((Math.random() * arr.length))
  10. return arr[index]
  11. }
  12. /**
  13. * 触发 window.resize
  14. */
  15. export function triggerWindowResizeEvent() {
  16. let event = document.createEvent('HTMLEvents')
  17. event.initEvent('resize', true, true)
  18. event.eventType = 'message'
  19. window.dispatchEvent(event)
  20. }
  21. /**
  22. * 过滤对象中为空的属性
  23. * @param obj
  24. * @returns {*}
  25. */
  26. export function filterObj(obj) {
  27. if (!(typeof obj == 'object')) {
  28. return;
  29. }
  30. for (var key in obj) {
  31. if (obj.hasOwnProperty(key)
  32. && (obj[key] == null || obj[key] == undefined || obj[key] === '')) {
  33. delete obj[key];
  34. }
  35. }
  36. return obj;
  37. }
  38. /**
  39. * 时间格式化
  40. * @param value
  41. * @param fmt
  42. * @returns {*}
  43. */
  44. export function formatDate(value, fmt) {
  45. var regPos = /^\d+(\.\d+)?$/;
  46. if (regPos.test(value)) {
  47. //如果是数字
  48. let getDate = new Date(value);
  49. let o = {
  50. 'M+': getDate.getMonth() + 1,
  51. 'd+': getDate.getDate(),
  52. 'h+': getDate.getHours(),
  53. 'm+': getDate.getMinutes(),
  54. 's+': getDate.getSeconds(),
  55. 'q+': Math.floor((getDate.getMonth() + 3) / 3),
  56. 'S': getDate.getMilliseconds()
  57. };
  58. if (/(y+)/.test(fmt)) {
  59. fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length))
  60. }
  61. for (let k in o) {
  62. if (new RegExp('(' + k + ')').test(fmt)) {
  63. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
  64. }
  65. }
  66. return fmt;
  67. } else {
  68. //TODO
  69. value = value.trim();
  70. return value.substr(0, fmt.length);
  71. }
  72. }
  73. // 生成首页路由
  74. export function generateIndexRouter(data) {
  75. let indexRouter = [{
  76. path: '/',
  77. name: 'dashboard',
  78. //component: () => import('@/components/layouts/BasicLayout'),
  79. component: resolve => require(['@/components/layouts/TabLayout'], resolve),
  80. meta: {title: '首页'},
  81. redirect: '/dashboard/analysis',
  82. children: [
  83. ...generateChildRouters(data)
  84. ]
  85. }, {
  86. "path": "*", "redirect": "/404", "hidden": true
  87. }]
  88. return indexRouter;
  89. }
  90. // 生成嵌套路由(子路由)
  91. function generateChildRouters(data) {
  92. const routers = [];
  93. for (var item of data) {
  94. let component = "";
  95. if (item.component.indexOf("layouts") >= 0) {
  96. component = "components/" + item.component;
  97. } else {
  98. component = "views/" + item.component;
  99. }
  100. // eslint-disable-next-line
  101. let URL = (item.meta.url || '').replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)) // URL支持{{ window.xxx }}占位符变量
  102. if (isURL(URL)) {
  103. item.meta.url = URL;
  104. }
  105. let menu = {
  106. path: item.path,
  107. name: item.name,
  108. redirect: item.redirect,
  109. component: resolve => require(['@/' + component + '.vue'], resolve),
  110. hidden: item.hidden,
  111. //component:()=> import(`@/views/${item.component}.vue`),
  112. meta: {
  113. title: item.meta.title,
  114. icon: item.meta.icon,
  115. url: item.meta.url,
  116. permissionList: item.meta.permissionList,
  117. keepAlive: item.meta.keepAlive
  118. }
  119. }
  120. if (item.alwaysShow) {
  121. menu.alwaysShow = true;
  122. menu.redirect = menu.path;
  123. }
  124. if (item.children && item.children.length > 0) {
  125. menu.children = [...generateChildRouters(item.children)];
  126. }
  127. //--update-begin----author:scott---date:20190320------for:根据后台菜单配置,判断是否路由菜单字段,动态选择是否生成路由(为了支持参数URL菜单)------
  128. //判断是否生成路由
  129. if (item.route && item.route === '0') {
  130. //console.log(' 不生成路由 item.route: '+item.route);
  131. //console.log(' 不生成路由 item.path: '+item.path);
  132. } else {
  133. routers.push(menu);
  134. }
  135. //--update-end----author:scott---date:20190320------for:根据后台菜单配置,判断是否路由菜单字段,动态选择是否生成路由(为了支持参数URL菜单)------
  136. }
  137. return routers
  138. }
  139. /**
  140. * 深度克隆对象、数组
  141. * @param obj 被克隆的对象
  142. * @return 克隆后的对象
  143. */
  144. export function cloneObject(obj) {
  145. return JSON.parse(JSON.stringify(obj))
  146. }
  147. /**
  148. * 随机生成数字
  149. *
  150. * 示例:生成长度为 12 的随机数:randomNumber(12)
  151. * 示例:生成 3~23 之间的随机数:randomNumber(3, 23)
  152. *
  153. * @param1 最小值 | 长度
  154. * @param2 最大值
  155. * @return int 生成后的数字
  156. */
  157. export function randomNumber() {
  158. // 生成 最小值 到 最大值 区间的随机数
  159. const random = (min, max) => {
  160. return Math.floor(Math.random() * (max - min + 1) + min)
  161. }
  162. if (arguments.length === 1) {
  163. let [length] = arguments
  164. // 生成指定长度的随机数字,首位一定不是 0
  165. let nums = [...Array(length).keys()].map((i) => (i > 0 ? random(0, 9) : random(1, 9)))
  166. return parseInt(nums.join(''))
  167. } else if (arguments.length >= 2) {
  168. let [min, max] = arguments
  169. return random(min, max)
  170. } else {
  171. return Number.NaN
  172. }
  173. }
  174. /**
  175. * 随机生成字符串
  176. * @param length 字符串的长度
  177. * @param chats 可选字符串区间(只会生成传入的字符串中的字符)
  178. * @return string 生成的字符串
  179. */
  180. export function randomString(length, chats) {
  181. if (!length) length = 1
  182. if (!chats) chats = '0123456789qwertyuioplkjhgfdsazxcvbnm'
  183. let str = ''
  184. for (let i = 0; i < length; i++) {
  185. let num = randomNumber(0, chats.length - 1)
  186. str += chats[num]
  187. }
  188. return str
  189. }
  190. /**
  191. * 随机生成uuid
  192. * @return string 生成的uuid
  193. */
  194. export function randomUUID() {
  195. let chats = '0123456789abcdef'
  196. return randomString(32, chats)
  197. }
  198. /**
  199. * 下划线转驼峰
  200. * @param string
  201. * @returns {*}
  202. */
  203. export function underLine2CamelCase(string) {
  204. return string.replace(/_([a-z])/g, function (all, letter) {
  205. return letter.toUpperCase();
  206. });
  207. }
  208. /**
  209. * 判断是否显示办理按钮
  210. * @param bpmStatus
  211. * @returns {*}
  212. */
  213. export function showDealBtn(bpmStatus) {
  214. if (bpmStatus != "1" && bpmStatus != "3" && bpmStatus != "4") {
  215. return true;
  216. }
  217. return false;
  218. }
  219. /**
  220. * 判断是否是数组
  221. * @param {Array} arr
  222. */
  223. export const isArray = (arr) => {
  224. return Object.prototype.toString.call(arr) == '[object Array]'
  225. }
  226. /**
  227. * 将简单数据格式转换成嵌套的数据格式
  228. * @param {Object} setting
  229. * @param {Array} sNodes
  230. */
  231. export const transformTozTreeFormat = (sNodes, setting={}) => {
  232. var i, l,
  233. key = setting.idKey || 'id',
  234. parentKey = setting.parentKey || 'parentId',
  235. childKey = setting.childKey || 'children';
  236. if (!key || key == "" || !sNodes) return [];
  237. if (isArray(sNodes)) {
  238. var r = [];
  239. var tmpMap = {};
  240. for (i = 0, l = sNodes.length; i < l; i++) {
  241. tmpMap[sNodes[i][key]] = sNodes[i];
  242. }
  243. for (i = 0, l = sNodes.length; i < l; i++) {
  244. if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
  245. if (!tmpMap[sNodes[i][parentKey]][childKey])
  246. tmpMap[sNodes[i][parentKey]][childKey] = [];
  247. tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);
  248. } else {
  249. r.push(sNodes[i]);
  250. }
  251. }
  252. return r;
  253. } else {
  254. return [sNodes];
  255. }
  256. }