快捷功能开发完成
This commit is contained in:
		| @@ -1,18 +1,25 @@ | ||||
| import { parseTime } from './ruoyi' | ||||
| import { parseTime } from "./ruoyi"; | ||||
|  | ||||
| /** | ||||
|  * 表格时间格式化 | ||||
|  */ | ||||
| export function formatDate(cellValue) { | ||||
|   if (cellValue == null || cellValue == "") return ""; | ||||
|   var date = new Date(cellValue)  | ||||
|   var year = date.getFullYear() | ||||
|   var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 | ||||
|   var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()  | ||||
|   var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()  | ||||
|   var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()  | ||||
|   var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() | ||||
|   return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds | ||||
|   var date = new Date(cellValue); | ||||
|   var year = date.getFullYear(); | ||||
|   var month = | ||||
|     date.getMonth() + 1 < 10 | ||||
|       ? "0" + (date.getMonth() + 1) | ||||
|       : date.getMonth() + 1; | ||||
|   var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); | ||||
|   var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(); | ||||
|   var minutes = | ||||
|     date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(); | ||||
|   var seconds = | ||||
|     date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(); | ||||
|   return ( | ||||
|     year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds | ||||
|   ); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -21,40 +28,40 @@ export function formatDate(cellValue) { | ||||
|  * @returns {string} | ||||
|  */ | ||||
| export function formatTime(time, option) { | ||||
|   if (('' + time).length === 10) { | ||||
|     time = parseInt(time) * 1000 | ||||
|   if (("" + time).length === 10) { | ||||
|     time = parseInt(time) * 1000; | ||||
|   } else { | ||||
|     time = +time | ||||
|     time = +time; | ||||
|   } | ||||
|   const d = new Date(time) | ||||
|   const now = Date.now() | ||||
|   const d = new Date(time); | ||||
|   const now = Date.now(); | ||||
|  | ||||
|   const diff = (now - d) / 1000 | ||||
|   const diff = (now - d) / 1000; | ||||
|  | ||||
|   if (diff < 30) { | ||||
|     return '刚刚' | ||||
|     return "刚刚"; | ||||
|   } else if (diff < 3600) { | ||||
|     // less 1 hour | ||||
|     return Math.ceil(diff / 60) + '分钟前' | ||||
|     return Math.ceil(diff / 60) + "分钟前"; | ||||
|   } else if (diff < 3600 * 24) { | ||||
|     return Math.ceil(diff / 3600) + '小时前' | ||||
|     return Math.ceil(diff / 3600) + "小时前"; | ||||
|   } else if (diff < 3600 * 24 * 2) { | ||||
|     return '1天前' | ||||
|     return "1天前"; | ||||
|   } | ||||
|   if (option) { | ||||
|     return parseTime(time, option) | ||||
|     return parseTime(time, option); | ||||
|   } else { | ||||
|     return ( | ||||
|       d.getMonth() + | ||||
|       1 + | ||||
|       '月' + | ||||
|       "月" + | ||||
|       d.getDate() + | ||||
|       '日' + | ||||
|       "日" + | ||||
|       d.getHours() + | ||||
|       '时' + | ||||
|       "时" + | ||||
|       d.getMinutes() + | ||||
|       '分' | ||||
|     ) | ||||
|       "分" | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -63,18 +70,18 @@ export function formatTime(time, option) { | ||||
|  * @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 | ||||
|   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 | ||||
|     const name = decodeURIComponent($1); | ||||
|     let val = decodeURIComponent($2); | ||||
|     val = String(val); | ||||
|     obj[name] = val; | ||||
|     return rs; | ||||
|   }); | ||||
|   return obj; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -83,14 +90,14 @@ export function getQueryObject(url) { | ||||
|  */ | ||||
| export function byteLength(str) { | ||||
|   // returns the byte length of an utf8 string | ||||
|   let s = str.length | ||||
|   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-- | ||||
|     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 | ||||
|   return s; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -98,13 +105,13 @@ export function byteLength(str) { | ||||
|  * @returns {Array} | ||||
|  */ | ||||
| export function cleanArray(actual) { | ||||
|   const newArray = [] | ||||
|   const newArray = []; | ||||
|   for (let i = 0; i < actual.length; i++) { | ||||
|     if (actual[i]) { | ||||
|       newArray.push(actual[i]) | ||||
|       newArray.push(actual[i]); | ||||
|     } | ||||
|   } | ||||
|   return newArray | ||||
|   return newArray; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -112,13 +119,13 @@ export function cleanArray(actual) { | ||||
|  * @returns {Array} | ||||
|  */ | ||||
| export function param(json) { | ||||
|   if (!json) return '' | ||||
|   if (!json) return ""; | ||||
|   return cleanArray( | ||||
|     Object.keys(json).map(key => { | ||||
|       if (json[key] === undefined) return '' | ||||
|       return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) | ||||
|       if (json[key] === undefined) return ""; | ||||
|       return encodeURIComponent(key) + "=" + encodeURIComponent(json[key]); | ||||
|     }) | ||||
|   ).join('&') | ||||
|   ).join("&"); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -126,21 +133,21 @@ export function param(json) { | ||||
|  * @returns {Object} | ||||
|  */ | ||||
| export function param2Obj(url) { | ||||
|   const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') | ||||
|   const search = decodeURIComponent(url.split("?")[1]).replace(/\+/g, " "); | ||||
|   if (!search) { | ||||
|     return {} | ||||
|     return {}; | ||||
|   } | ||||
|   const obj = {} | ||||
|   const searchArr = search.split('&') | ||||
|   const obj = {}; | ||||
|   const searchArr = search.split("&"); | ||||
|   searchArr.forEach(v => { | ||||
|     const index = v.indexOf('=') | ||||
|     const index = v.indexOf("="); | ||||
|     if (index !== -1) { | ||||
|       const name = v.substring(0, index) | ||||
|       const val = v.substring(index + 1, v.length) | ||||
|       obj[name] = val | ||||
|       const name = v.substring(0, index); | ||||
|       const val = v.substring(index + 1, v.length); | ||||
|       obj[name] = val; | ||||
|     } | ||||
|   }) | ||||
|   return obj | ||||
|   }); | ||||
|   return obj; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -148,9 +155,9 @@ export function param2Obj(url) { | ||||
|  * @returns {string} | ||||
|  */ | ||||
| export function html2Text(val) { | ||||
|   const div = document.createElement('div') | ||||
|   div.innerHTML = val | ||||
|   return div.textContent || div.innerText | ||||
|   const div = document.createElement("div"); | ||||
|   div.innerHTML = val; | ||||
|   return div.textContent || div.innerText; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -160,21 +167,21 @@ export function html2Text(val) { | ||||
|  * @returns {Object} | ||||
|  */ | ||||
| export function objectMerge(target, source) { | ||||
|   if (typeof target !== 'object') { | ||||
|     target = {} | ||||
|   if (typeof target !== "object") { | ||||
|     target = {}; | ||||
|   } | ||||
|   if (Array.isArray(source)) { | ||||
|     return source.slice() | ||||
|     return source.slice(); | ||||
|   } | ||||
|   Object.keys(source).forEach(property => { | ||||
|     const sourceProperty = source[property] | ||||
|     if (typeof sourceProperty === 'object') { | ||||
|       target[property] = objectMerge(target[property], sourceProperty) | ||||
|     const sourceProperty = source[property]; | ||||
|     if (typeof sourceProperty === "object") { | ||||
|       target[property] = objectMerge(target[property], sourceProperty); | ||||
|     } else { | ||||
|       target[property] = sourceProperty | ||||
|       target[property] = sourceProperty; | ||||
|     } | ||||
|   }) | ||||
|   return target | ||||
|   }); | ||||
|   return target; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -183,18 +190,18 @@ export function objectMerge(target, source) { | ||||
|  */ | ||||
| export function toggleClass(element, className) { | ||||
|   if (!element || !className) { | ||||
|     return | ||||
|     return; | ||||
|   } | ||||
|   let classString = element.className | ||||
|   const nameIndex = classString.indexOf(className) | ||||
|   let classString = element.className; | ||||
|   const nameIndex = classString.indexOf(className); | ||||
|   if (nameIndex === -1) { | ||||
|     classString += '' + className | ||||
|     classString += "" + className; | ||||
|   } else { | ||||
|     classString = | ||||
|       classString.substr(0, nameIndex) + | ||||
|       classString.substr(nameIndex + className.length) | ||||
|       classString.substr(nameIndex + className.length); | ||||
|   } | ||||
|   element.className = classString | ||||
|   element.className = classString; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -202,10 +209,10 @@ export function toggleClass(element, className) { | ||||
|  * @returns {Date} | ||||
|  */ | ||||
| export function getTime(type) { | ||||
|   if (type === 'start') { | ||||
|     return new Date().getTime() - 3600 * 1000 * 24 * 90 | ||||
|   if (type === "start") { | ||||
|     return new Date().getTime() - 3600 * 1000 * 24 * 90; | ||||
|   } else { | ||||
|     return new Date(new Date().toDateString()) | ||||
|     return new Date(new Date().toDateString()); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -216,38 +223,38 @@ export function getTime(type) { | ||||
|  * @return {*} | ||||
|  */ | ||||
| export function debounce(func, wait, immediate) { | ||||
|   let timeout, args, context, timestamp, result | ||||
|   let timeout, args, context, timestamp, result; | ||||
|  | ||||
|   const later = function() { | ||||
|     // 据上一次触发时间间隔 | ||||
|     const last = +new Date() - timestamp | ||||
|     const last = +new Date() - timestamp; | ||||
|  | ||||
|     // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait | ||||
|     if (last < wait && last > 0) { | ||||
|       timeout = setTimeout(later, wait - last) | ||||
|       timeout = setTimeout(later, wait - last); | ||||
|     } else { | ||||
|       timeout = null | ||||
|       timeout = null; | ||||
|       // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 | ||||
|       if (!immediate) { | ||||
|         result = func.apply(context, args) | ||||
|         if (!timeout) context = args = null | ||||
|         result = func.apply(context, args); | ||||
|         if (!timeout) context = args = null; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   }; | ||||
|  | ||||
|   return function(...args) { | ||||
|     context = this | ||||
|     timestamp = +new Date() | ||||
|     const callNow = immediate && !timeout | ||||
|     context = this; | ||||
|     timestamp = +new Date(); | ||||
|     const callNow = immediate && !timeout; | ||||
|     // 如果延时不存在,重新设定延时 | ||||
|     if (!timeout) timeout = setTimeout(later, wait) | ||||
|     if (!timeout) timeout = setTimeout(later, wait); | ||||
|     if (callNow) { | ||||
|       result = func.apply(context, args) | ||||
|       context = args = null | ||||
|       result = func.apply(context, args); | ||||
|       context = args = null; | ||||
|     } | ||||
|  | ||||
|     return result | ||||
|   } | ||||
|     return result; | ||||
|   }; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -258,18 +265,18 @@ export function debounce(func, wait, immediate) { | ||||
|  * @returns {Object} | ||||
|  */ | ||||
| export function deepClone(source) { | ||||
|   if (!source && typeof source !== 'object') { | ||||
|     throw new Error('error arguments', 'deepClone') | ||||
|   if (!source && typeof source !== "object") { | ||||
|     throw new Error("error arguments", "deepClone"); | ||||
|   } | ||||
|   const targetObj = source.constructor === Array ? [] : {} | ||||
|   const targetObj = source.constructor === Array ? [] : {}; | ||||
|   Object.keys(source).forEach(keys => { | ||||
|     if (source[keys] && typeof source[keys] === 'object') { | ||||
|       targetObj[keys] = deepClone(source[keys]) | ||||
|     if (source[keys] && typeof source[keys] === "object") { | ||||
|       targetObj[keys] = deepClone(source[keys]); | ||||
|     } else { | ||||
|       targetObj[keys] = source[keys] | ||||
|       targetObj[keys] = source[keys]; | ||||
|     } | ||||
|   }) | ||||
|   return targetObj | ||||
|   }); | ||||
|   return targetObj; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -277,16 +284,16 @@ export function deepClone(source) { | ||||
|  * @returns {Array} | ||||
|  */ | ||||
| export function uniqueArr(arr) { | ||||
|   return Array.from(new Set(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) | ||||
|   const timestamp = +new Date() + ""; | ||||
|   const randomNum = parseInt((1 + Math.random()) * 65536) + ""; | ||||
|   return (+(randomNum + timestamp)).toString(32); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -296,7 +303,7 @@ export function createUniqueString() { | ||||
|  * @returns {boolean} | ||||
|  */ | ||||
| export function hasClass(ele, cls) { | ||||
|   return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) | ||||
|   return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)")); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -305,7 +312,7 @@ export function hasClass(ele, cls) { | ||||
|  * @param {string} cls | ||||
|  */ | ||||
| export function addClass(ele, cls) { | ||||
|   if (!hasClass(ele, cls)) ele.className += ' ' + cls | ||||
|   if (!hasClass(ele, cls)) ele.className += " " + cls; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -315,76 +322,78 @@ export function addClass(ele, cls) { | ||||
|  */ | ||||
| export function removeClass(ele, cls) { | ||||
|   if (hasClass(ele, cls)) { | ||||
|     const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') | ||||
|     ele.className = ele.className.replace(reg, ' ') | ||||
|     const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)"); | ||||
|     ele.className = ele.className.replace(reg, " "); | ||||
|   } | ||||
| } | ||||
|  | ||||
| export function makeMap(str, expectsLowerCase) { | ||||
|   const map = Object.create(null) | ||||
|   const list = str.split(',') | ||||
|   const map = Object.create(null); | ||||
|   const list = str.split(","); | ||||
|   for (let i = 0; i < list.length; i++) { | ||||
|     map[list[i]] = true | ||||
|     map[list[i]] = true; | ||||
|   } | ||||
|   return expectsLowerCase | ||||
|     ? val => map[val.toLowerCase()] | ||||
|     : val => map[val] | ||||
|   return expectsLowerCase ? val => map[val.toLowerCase()] : val => map[val]; | ||||
| } | ||||
|   | ||||
| export const exportDefault = 'export default ' | ||||
|  | ||||
| export const exportDefault = "export default "; | ||||
|  | ||||
| export const beautifierConf = { | ||||
|   html: { | ||||
|     indent_size: '2', | ||||
|     indent_char: ' ', | ||||
|     max_preserve_newlines: '-1', | ||||
|     indent_size: "2", | ||||
|     indent_char: " ", | ||||
|     max_preserve_newlines: "-1", | ||||
|     preserve_newlines: false, | ||||
|     keep_array_indentation: false, | ||||
|     break_chained_methods: false, | ||||
|     indent_scripts: 'separate', | ||||
|     brace_style: 'end-expand', | ||||
|     indent_scripts: "separate", | ||||
|     brace_style: "end-expand", | ||||
|     space_before_conditional: true, | ||||
|     unescape_strings: false, | ||||
|     jslint_happy: false, | ||||
|     end_with_newline: true, | ||||
|     wrap_line_length: '110', | ||||
|     wrap_line_length: "110", | ||||
|     indent_inner_html: true, | ||||
|     comma_first: false, | ||||
|     e4x: true, | ||||
|     indent_empty_lines: true | ||||
|   }, | ||||
|   js: { | ||||
|     indent_size: '2', | ||||
|     indent_char: ' ', | ||||
|     max_preserve_newlines: '-1', | ||||
|     indent_size: "2", | ||||
|     indent_char: " ", | ||||
|     max_preserve_newlines: "-1", | ||||
|     preserve_newlines: false, | ||||
|     keep_array_indentation: false, | ||||
|     break_chained_methods: false, | ||||
|     indent_scripts: 'normal', | ||||
|     brace_style: 'end-expand', | ||||
|     indent_scripts: "normal", | ||||
|     brace_style: "end-expand", | ||||
|     space_before_conditional: true, | ||||
|     unescape_strings: false, | ||||
|     jslint_happy: true, | ||||
|     end_with_newline: true, | ||||
|     wrap_line_length: '110', | ||||
|     wrap_line_length: "110", | ||||
|     indent_inner_html: true, | ||||
|     comma_first: false, | ||||
|     e4x: true, | ||||
|     indent_empty_lines: true | ||||
|   } | ||||
| } | ||||
| }; | ||||
|  | ||||
| // 首字母大小 | ||||
| export function titleCase(str) { | ||||
|   return str.replace(/( |^)[a-z]/g, L => L.toUpperCase()) | ||||
|   return str.replace(/( |^)[a-z]/g, L => L.toUpperCase()); | ||||
| } | ||||
|  | ||||
| // 下划转驼峰 | ||||
| export function camelCase(str) { | ||||
|   return str.replace(/-[a-z]/g, str1 => str1.substr(-1).toUpperCase()) | ||||
|   return str.replace(/-[a-z]/g, str1 => str1.substr(-1).toUpperCase()); | ||||
| } | ||||
|  | ||||
| export function isNumberStr(str) { | ||||
|   return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) | ||||
|   return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str); | ||||
| } | ||||
|   | ||||
|  | ||||
| export const messageTypes = { | ||||
|   UPDATE_SHORTCUT: "updateShortCut", | ||||
|   UPDATE_CURRENT_SHORTCUT: "updateCurrentShortCut" | ||||
| }; | ||||
|   | ||||
							
								
								
									
										52
									
								
								stdiet-ui/src/utils/shortCutUtils.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								stdiet-ui/src/utils/shortCutUtils.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| export function getShortCut() { | ||||
|   return new Promise((res, rej) => { | ||||
|     try { | ||||
|       const data = JSON.parse(localStorage.getItem("shortCut") || "[]"); | ||||
|       res(data); | ||||
|     } catch (error) { | ||||
|       rej(error); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| export async function addShortCut(data) { | ||||
|   const shortCutList = await getShortCut(); | ||||
|   return new Promise((res, rej) => { | ||||
|     try { | ||||
|       shortCutList.splice(0, 0, data); | ||||
|       localStorage.setItem("shortCut", JSON.stringify(shortCutList)); | ||||
|       res(); | ||||
|     } catch (error) { | ||||
|       rej(error); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| export async function removeShortCut(id) { | ||||
|   const shortCutList = await getShortCut(); | ||||
|   return new Promise((res, rej) => { | ||||
|     try { | ||||
|       const newShortCutList = shortCutList.filter(obj => obj.id !== id); | ||||
|       localStorage.setItem("shortCut", JSON.stringify(newShortCutList)); | ||||
|       res(); | ||||
|     } catch (error) { | ||||
|       rej(error); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| export async function editShortCut(data) { | ||||
|   const shortCutList = await getShortCut(); | ||||
|   return new Promise((res, rej) => { | ||||
|     try { | ||||
|       const tarObj = shortCutList.find(obj => obj.id === data.id); | ||||
|       Object.keys(data).forEach(key => { | ||||
|         tarObj[key] = data[key]; | ||||
|       }); | ||||
|       localStorage.setItem("shortCut", JSON.stringify(shortCutList)); | ||||
|       res(); | ||||
|     } catch (error) { | ||||
|       rej(error); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user