1.校验

  1. /**
  2. * Created by jiachenpan on 16/11/18.
  3. */
  4. export function validUsername(str) {
  5. const valid_map = ["admin", "editor"];
  6. return valid_map.indexOf(str.trim()) >= 0;
  7. }
  8. /**
  9. * 邮箱
  10. * @param {*} s
  11. */
  12. export function validEmail(s) {
  13. return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s);
  14. }
  15. /**
  16. * 手机号码
  17. * @param {*} s
  18. */
  19. export function validMobile(s) {
  20. return /^1[0-9]{10}$/.test(s);
  21. }
  22. /**
  23. * 电话号码
  24. * @param {*} s
  25. */
  26. export function validPhone(s) {
  27. return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s);
  28. }
  29. /**
  30. * URL地址
  31. * @param {*} s
  32. */
  33. export function validURL(s) {
  34. const urlRegex =
  35. /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
  36. return urlRegex.test(s);
  37. }
  38. /* 小写字母*/
  39. export function validateLowerCase(str) {
  40. const reg = /^[a-z]+$/;
  41. return reg.test(str);
  42. }
  43. /* 大写字母*/
  44. export function validateUpperCase(str) {
  45. const reg = /^[A-Z]+$/;
  46. return reg.test(str);
  47. }
  48. /* 大小写字母*/
  49. export function validateAlphabets(str) {
  50. const reg = /^[A-Za-z]+$/;
  51. return reg.test(str);
  52. }
  53. /*验证pad还是pc*/
  54. export const validatePc = function () {
  55. const userAgentInfo = navigator.userAgent;
  56. const Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
  57. let flag = true;
  58. for (let v = 0; v < Agents.length; v++) {
  59. if (userAgentInfo.indexOf(Agents[v]) > 0) {
  60. flag = false;
  61. break;
  62. }
  63. }
  64. return flag;
  65. };
  66. /**
  67. * validate email
  68. * @param email
  69. * @returns {boolean}
  70. */
  71. export function validateEmail(email) {
  72. const re =
  73. /^(([^<>()\\[\]\\.,;:\s@"]+(\.[^<>()\\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  74. return re.test(email);
  75. }
  76. /**
  77. * 判断身份证号码
  78. */
  79. export function validateCardId(code) {
  80. let list = [];
  81. let result = true;
  82. let msg = "";
  83. let city = {
  84. 11: "北京",
  85. 12: "天津",
  86. 13: "河北",
  87. 14: "山西",
  88. 15: "内蒙古",
  89. 21: "辽宁",
  90. 22: "吉林",
  91. 23: "黑龙江 ",
  92. 31: "上海",
  93. 32: "江苏",
  94. 33: "浙江",
  95. 34: "安徽",
  96. 35: "福建",
  97. 36: "江西",
  98. 37: "山东",
  99. 41: "河南",
  100. 42: "湖北 ",
  101. 43: "湖南",
  102. 44: "广东",
  103. 45: "广西",
  104. 46: "海南",
  105. 50: "重庆",
  106. 51: "四川",
  107. 52: "贵州",
  108. 53: "云南",
  109. 54: "西藏 ",
  110. 61: "陕西",
  111. 62: "甘肃",
  112. 63: "青海",
  113. 64: "宁夏",
  114. 65: "新疆",
  115. 71: "台湾",
  116. 81: "香港",
  117. 82: "澳门",
  118. 91: "国外 ",
  119. };
  120. if (!validateNull(code)) {
  121. if (code.length === 18) {
  122. if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
  123. msg = "证件号码格式错误";
  124. } else if (!city[code.substr(0, 2)]) {
  125. msg = "地址编码错误";
  126. } else {
  127. //18位身份证需要验证最后一位校验位
  128. code = code.split("");
  129. //∑(ai×Wi)(mod 11)
  130. //加权因子
  131. let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  132. //校验位
  133. let parity = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2, "x"];
  134. let sum = 0;
  135. let ai = 0;
  136. let wi = 0;
  137. for (let i = 0; i < 17; i++) {
  138. ai = code[i];
  139. wi = factor[i];
  140. sum += ai * wi;
  141. }
  142. if (parity[sum % 11] !== code[17]) {
  143. msg = "证件号码校验位错误";
  144. } else {
  145. result = false;
  146. }
  147. }
  148. } else {
  149. msg = "证件号码长度不为18位";
  150. }
  151. } else {
  152. msg = "证件号码不能为空";
  153. }
  154. list.push(result);
  155. list.push(msg);
  156. return list;
  157. }
  158. /**
  159. * 判断手机号码是否正确
  160. */
  161. export function validateMobile(phone) {
  162. let list = [];
  163. let result = true;
  164. let msg = "";
  165. let isPhone = /^0\d{2,3}-?\d{7,8}$/;
  166. //增加134 减少|1349[0-9]{7},增加181,增加145,增加17[678]
  167. if (!validateNull(phone)) {
  168. if (phone.length === 11) {
  169. if (isPhone.test(phone)) {
  170. msg = "手机号码格式不正确";
  171. } else {
  172. result = false;
  173. }
  174. } else {
  175. msg = "手机号码长度不为11位";
  176. }
  177. } else {
  178. msg = "手机号码不能为空";
  179. }
  180. list.push(result);
  181. list.push(msg);
  182. return list;
  183. }
  184. /**
  185. * 判断姓名是否正确
  186. */
  187. export function validateName(name) {
  188. let regName = /^[\u4e00-\u9fa5]{2,4}$/;
  189. return regName.test(name);
  190. }
  191. /**
  192. * 判断是否为整数
  193. */
  194. export function validateInteger(num, type) {
  195. let regName = /[^\d.]/g;
  196. if (type === 1) {
  197. if (!regName.test(num)) return false;
  198. } else if (type === 2) {
  199. regName = /[^\d]/g;
  200. if (!regName.test(num)) return false;
  201. }
  202. return true;
  203. }
  204. /**
  205. * 判断是否为小数
  206. */
  207. export function validateDecimal(num, type) {
  208. let regName = /[^\d.]/g;
  209. if (type === 1) {
  210. if (!regName.test(num)) return false;
  211. } else if (type === 2) {
  212. regName = /[^\d.]/g;
  213. if (!regName.test(num)) return false;
  214. }
  215. return true;
  216. }
  217. /**
  218. * 判断是否为空
  219. */
  220. export function validateNull(val) {
  221. if (typeof val == "boolean") {
  222. return false;
  223. }
  224. if (typeof val == "number") {
  225. return false;
  226. }
  227. if (val instanceof Array) {
  228. if (val.length === 0) return true;
  229. } else if (val instanceof Object) {
  230. if (JSON.stringify(val) === "{}") return true;
  231. } else {
  232. return val === "null" || val == null || val === "undefined" || val === undefined || val === "";
  233. }
  234. return false;
  235. }
  236. /**
  237. * 验证是否存在true/false
  238. */
  239. export const validateData = (val, defaultVal) => {
  240. if (typeof val === "boolean") {
  241. return val;
  242. }
  243. return !validateNull(val) ? val : defaultVal;
  244. };

2.日期格式化

  1. // 获取当前日期前一天的日期
  2. export function getBeforeDate() {
  3. let date = new Date();
  4. date.setTime(date.getTime() - 24 * 60 * 60 * 1000);
  5. // 将data格式化yyyy-MM-dd
  6. let y = date.getFullYear();
  7. let m = date.getMonth() + 1;
  8. let d = date.getDate();
  9. m = m < 10 ? "0" + m : m;
  10. d = d < 10 ? "0" + d : d;
  11. return y + "-" + m + "-" + d;
  12. }
  13. export const calcDate = (date1, date2) => {
  14. let date3 = date2 - date1;
  15. let days = Math.floor(date3 / (24 * 3600 * 1000));
  16. let leave1 = date3 % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
  17. let hours = Math.floor(leave1 / (3600 * 1000));
  18. let leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
  19. let minutes = Math.floor(leave2 / (60 * 1000));
  20. let leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
  21. let seconds = Math.round(date3 / 1000);
  22. return {
  23. leave1,
  24. leave2,
  25. leave3,
  26. days: days,
  27. hours: hours,
  28. minutes: minutes,
  29. seconds: seconds,
  30. };
  31. };
  32. /**
  33. * 日期格式化
  34. */
  35. export function dateFormat(date) {
  36. let format = "yyyy-MM-dd hh:mm:ss";
  37. if (date !== "Invalid Date") {
  38. let o = {
  39. "M+": date.getMonth() + 1, //month
  40. "d+": date.getDate(), //day
  41. "h+": date.getHours(), //hour
  42. "m+": date.getMinutes(), //minute
  43. "s+": date.getSeconds(), //second
  44. "q+": Math.floor((date.getMonth() + 3) / 3), //quarter
  45. S: date.getMilliseconds(), //millisecond
  46. };
  47. if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  48. for (let k in o)
  49. if (new RegExp("(" + k + ")").test(format))
  50. format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  51. return format;
  52. }
  53. return "";
  54. }

3.文件导出

  1. export const exportFile = (result) => {
  2. console.log("result", result);
  3. let contentDisposition = result.headers["content-disposition"];
  4. // 这里后端给的内容中,文件名字可能是驼峰式名称的 fileName ,或者是全部小写的 filename
  5. let filename = decodeURI(contentDisposition.split("fileName=")[1] || contentDisposition.split("filename=")[1]);
  6. // let filename = "1.xlsx";
  7. // 注意这里的 result.data ,如果只传 result 的话,最后下载出来的excel文件,里面显示的是 [object Object]
  8. let blob = new Blob([result.data], { type: result.headers["content-type"] });
  9. // let blob = new Blob([result.data],{type: "application/x-msdownload;charset=GBK"});
  10. // let blob = new Blob([result.data],{type: "application/x-msdownload"});
  11. // let blob = new Blob([result.data]);
  12. // let blob = new Blob([result.data],{type: "application/vnd.ms-excel"});
  13. let url = window.URL.createObjectURL(blob);
  14. if (window.navigator.msSaveBlob) {
  15. //IE
  16. try {
  17. window.navigator.msSaveBlob(blob, filename);
  18. } catch (e) {
  19. console.log(e);
  20. }
  21. } else {
  22. //非IE
  23. let link = document.createElement("a");
  24. link.style.display = "none";
  25. link.href = url;
  26. link.setAttribute("download", filename);
  27. document.body.appendChild(link);
  28. link.click();
  29. }
  30. URL.revokeObjectURL(url); // 释放内存
  31. };

4.公用工具类型

  1. /**
  2. * 通用工具类
  3. */
  4. export default class func {
  5. /**
  6. * 不为空
  7. * @param val
  8. * @returns {boolean}
  9. */
  10. static notEmpty(val) {
  11. return !this.isEmpty(val);
  12. }
  13. /**
  14. * 是否为定义
  15. * @param val
  16. * @returns {boolean}
  17. */
  18. static isUndefined(val) {
  19. return val === null || typeof val === "undefined";
  20. }
  21. /**
  22. * 为空
  23. * @param val
  24. * @returns {boolean}
  25. */
  26. static isEmpty(val) {
  27. return val === null || typeof val === "undefined" || (typeof val === "string" && val === "" && val !== "undefined");
  28. }
  29. /**
  30. * 强转int型
  31. * @param val
  32. * @param defaultValue
  33. * @returns {number}
  34. */
  35. static toInt(val, defaultValue) {
  36. if (this.isEmpty(val)) {
  37. return defaultValue === undefined ? -1 : defaultValue;
  38. }
  39. const num = parseInt(val, 0);
  40. return Number.isNaN(num) ? (defaultValue === undefined ? -1 : defaultValue) : num;
  41. }
  42. /**
  43. * Json强转为Form类型
  44. * @param obj
  45. * @returns {FormData}
  46. */
  47. static toFormData(obj) {
  48. const data = new FormData();
  49. Object.keys(obj).forEach((key) => {
  50. data.append(key, Array.isArray(obj[key]) ? obj[key].join(",") : obj[key]);
  51. });
  52. return data;
  53. }
  54. /**
  55. * date类转为字符串格式
  56. * @param date
  57. * @param format
  58. * @returns {null}
  59. */
  60. static format(date, format = "YYYY-MM-DD HH:mm:ss") {
  61. return date ? date.format(format) : null;
  62. }
  63. /**
  64. * 根据逗号联合
  65. * @param arr
  66. * @returns {string}
  67. */
  68. static join(arr) {
  69. return arr ? arr.join(",") : "";
  70. }
  71. /**
  72. * 根据逗号分隔
  73. * @param str
  74. * @returns {string}
  75. */
  76. static split(str) {
  77. return str ? String(str).split(",") : "";
  78. }
  79. }

5.校验规则常量

  1. // 校验规则常量
  2. export default {
  3. // 手机号码
  4. phone:
  5. /^134[0-8]\d{7}$|^13[^4]\d{8}$|^14[5-9]\d{8}$|^15[^4]\d{8}$|^16[6]\d{8}$|^17[0-8]\d{8}$|^18[\d]{9}$|^19[8,9]\d{8}$/,
  6. //数字
  7. number: /^\d+$/,
  8. //数字,不包含0
  9. noZeroNumber: /^[1-9]\d{0,}$/,
  10. // 固定电话
  11. telephone: /(^\d{0,9}-\d{0,10}$)|(^\d{1,20}$)/,
  12. //仅中文或英文,不允许含有数字
  13. noNumber: /^[a-zA-Z\u4E00-\u9FA5]*$/,
  14. //不允许含有特殊字符
  15. noChar: /^[0-9a-zA-Z\u4E00-\u9FA5]*$/,
  16. //邮箱
  17. email: /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,
  18. //不允许输入中文
  19. noChinese: /^[^\u4e00-\u9fa5]{1,20}$/,
  20. //密码为6-16位字母或数字密码
  21. password: /^[0-9a-zA-Z]{6,16}$/,
  22. //仅中文
  23. onlineCH: /^[\u4E00-\u9FA5]*$/,
  24. // 身份证号
  25. cardNo: /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/,
  26. };

6.自定义校验规则

  1. /**
  2. * @description:自定义校验规则
  3. * @author:
  4. * @date:Created in 2021/12/22 16:20
  5. * @modified By:
  6. * @version: 1.0.0
  7. */
  8. const { validUpper } = require("@/utils/validate");
  9. // 只能输入大写字母与下划线
  10. export const tableCodeValidUpper = (rule, val, callback) => {
  11. if (val != null && val != "") {
  12. const value = val.replace(/^\s*|\s*$/g, "");
  13. if (!validUpper(value)) {
  14. callback(new Error("只能输入大写字母与下划线"));
  15. } else {
  16. callback();
  17. }
  18. } else {
  19. callback();
  20. }
  21. };
  22. // 只能输入中文
  23. export const tableNameValidUpper = (rule, val, callback) => {
  24. if (val != null && val != "") {
  25. const value = val.replace(/^\s*|\s*$/g, "");
  26. if (!/^[\u4E00-\u9FA5]*$/.test(value)) {
  27. callback(new Error("只能输入中文"));
  28. } else {
  29. callback();
  30. }
  31. } else {
  32. callback();
  33. }
  34. };
  35. // 不允许输入特殊字符
  36. export const remarkValidUpper = (rule, val, callback) => {
  37. if (val != null && val != "") {
  38. const value = val.replace(/^\s*|\s*$/g, "");
  39. if (!/^[0-9a-zA-Z\u4E00-\u9FA5]*$/.test(value)) {
  40. callback(new Error("不允许输入特殊字符"));
  41. } else {
  42. callback();
  43. }
  44. } else {
  45. callback();
  46. }
  47. };
  48. // 只能输入数字
  49. export const numberValidUpper = (rule, val, callback) => {
  50. console.log("val====>", val);
  51. if (val != null && val != "") {
  52. if (Number(val)) {
  53. if (!/^\d+$/.test(val)) {
  54. callback(new Error("只能输入数字"));
  55. } else {
  56. callback();
  57. }
  58. } else {
  59. callback();
  60. }
  61. }
  62. };
  63. // 只能输入数字和forever
  64. export const foreverValidUpper = (rule, val, callback) => {
  65. const value = val.replace(/^\s*|\s*$/g, "");
  66. if (val != null && val != "") {
  67. if (value === "forever") {
  68. callback();
  69. } else {
  70. if (!/^\d+$/.test(value)) {
  71. callback(new Error("只能输入forever和数字"));
  72. } else {
  73. callback();
  74. }
  75. }
  76. } else {
  77. callback();
  78. }
  79. };
  80. // 只能输入数字和English
  81. export const englishValidUpper = (rule, val, callback) => {
  82. if (val != null && val != "") {
  83. if (!/^[A-Za-z0-9]+$/.test(val)) {
  84. callback(new Error("只能输入数字和英文"));
  85. } else {
  86. callback();
  87. }
  88. } else {
  89. callback();
  90. }
  91. };
  92. // 只能输入数字,且位数只能在16个
  93. export const numberValidUppers = (rule, val, callback) => {
  94. console.log("val====>", val);
  95. if (val != null && val != "") {
  96. if (Number(val)) {
  97. if (!/^\d{0,16}$/g.test(val)) {
  98. callback(new Error("只能输入数字"));
  99. } else {
  100. callback();
  101. }
  102. } else {
  103. callback();
  104. }
  105. }
  106. };
  107. ---------------------------------校验使用-------------------------------------------------------------
  108. describe: [
  109. { required: true, message: "请输入需求描述", trigger: "blur" },
  110. { validator: remarkValidUpper, trigger: "blur" }, //特殊字符校验
  111. ], //需求描述

7.时间日期格式化

  1. /**
  2. * @description: 将时间转换为2020/1/1
  3. * @param {String} timestamp 需要转换的时间
  4. * @return {String} t 转换后的时间
  5. */
  6. export const formatTs = function (timestamp) {
  7. const t = new Date(timestamp).toLocaleDateString();
  8. return t;
  9. };
  10. /**
  11. * @description: 与当前时间的时间差
  12. * @param {String} date 需要转换的时间
  13. * @return {String} 时间差
  14. */
  15. export const formatTimestamp = function (date) {
  16. const t = new Date(date).toLocaleDateString();
  17. const timestamp = new Date(t);
  18. const currentTime = new Date();
  19. return currentTime - timestamp;
  20. };
  21. /**
  22. * @description: 返回当前月和最后一天
  23. * @param {String} timeSecond 需要转换的时间例如:"2020-1-1"
  24. * @return {Array} ["2020-01-01", "2020-01-31", "2020-01"]
  25. */
  26. export const getDateRange = function (timeSecond) {
  27. const timeDifference = formatTimestamp(timeSecond);
  28. const time = new Date(timeSecond);
  29. const year = time.getFullYear();
  30. let month = time.getMonth() + 1;
  31. const month2 = month;
  32. let day = timeDifference >= 30 * 24 * 3600 * 1000 ? time.getDate() : new Date(new Date()).getDate();
  33. if (month < 10) {
  34. month = `0${month}`;
  35. }
  36. if (day < 10) {
  37. day = `0${day}`;
  38. }
  39. const day31 = [1, 3, 5, 7, 8, 10, 12];
  40. let timeStart = null;
  41. let timeEnd = null;
  42. const yearMonth = `${year}-${month}`;
  43. // 获取当前的时间
  44. if (timeDifference >= 30 * 24 * 3600 * 1000) {
  45. timeStart = `${year}-${month}-${day}`;
  46. for (let i = 0; i < day31.length; i++) {
  47. if (day31[i] === month2) {
  48. timeEnd = `${year}-${month}-${31}`;
  49. break;
  50. } else if (month2 === 2) {
  51. timeEnd = `${year}-${month}-${28}`;
  52. } else {
  53. timeEnd = `${year}-${month}-${30}`;
  54. }
  55. }
  56. } else {
  57. timeStart = `${year}-${month}-${"01"}`;
  58. timeEnd = `${year}-${month}-${day}`;
  59. }
  60. return [timeStart, timeEnd, yearMonth];
  61. };
  62. /**
  63. * @description: 当前系统日期 yyyy-MM-dd
  64. * @param {String} date 需要转换的时间例如:"2020-1-1"
  65. * @return {String} "2020-01-01"
  66. */
  67. export const getYearMonthDay = function (date) {
  68. const d = new Date(date);
  69. const yyyy = d.getFullYear();
  70. let MM = d.getMonth() + 1;
  71. MM = MM < 10 ? `0${MM}` : MM;
  72. let dd = d.getDate();
  73. dd = dd < 10 ? `0${dd}` : dd;
  74. return `${yyyy}-${MM}-${dd}`;
  75. };
  76. /**
  77. * @description: 格式 年-月
  78. * @param {String} date 需要转换的时间例如:"2020-1-1"
  79. * @return {String} 年月
  80. */
  81. export const getYearMonth = function (date) {
  82. const d = new Date(date);
  83. const datetime = d.getFullYear() + "-" + (d.getMonth() + 1);
  84. return datetime;
  85. };
  86. /**
  87. * @description: 格式 时间到时分秒
  88. * @param {String} date 需要转换的时间例如:"2020-1-1"
  89. * @return {String} 年月日时分秒
  90. */
  91. export const format = function (date) {
  92. if (!date) return;
  93. var date2 = new Date(date);
  94. var y = date2.getFullYear();
  95. var m = date2.getMonth() + 1;
  96. m = m < 10 ? "0" + m : m;
  97. var d = date2.getDate();
  98. d = d < 10 ? "0" + d : d;
  99. var h = date2.getHours();
  100. h = h < 10 ? "0" + h : h;
  101. var minute = date2.getMinutes();
  102. minute = minute < 10 ? "0" + minute : minute;
  103. var seconds = date2.getSeconds();
  104. seconds = seconds < 10 ? "0" + seconds : seconds;
  105. return y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + seconds;
  106. };
  107. /**
  108. * @description: 格式 处理时间到时
  109. * @param {String} date 需要转换的时间
  110. * @param {String} h 不足两位补两位
  111. * @return {String} 年月日时
  112. */
  113. export const todayTime = function (date, h) {
  114. var date2 = new Date(date);
  115. var y = date2.getFullYear();
  116. var m = date2.getMonth() + 1;
  117. m = m < 10 ? "0" + m : m;
  118. var d = date2.getDate();
  119. d = d < 10 ? "0" + d : d;
  120. h = h < 10 ? "0" + h : h;
  121. return y + "-" + m + "-" + d + " " + h + ":" + "00" + ":" + "00";
  122. };
  123. /**
  124. * @description: 格式 处理时间到年月日
  125. * @param {String} date 需要转换的时间
  126. * @return {String} 年月日
  127. */
  128. export const todayTime1 = function (date) {
  129. var date2 = new Date(date);
  130. var y = date2.getFullYear();
  131. var m = date2.getMonth() + 1;
  132. m = m < 10 ? "0" + m : m;
  133. var d = date2.getDate();
  134. d = d < 10 ? "0" + d : d;
  135. return y + "-" + m + "-" + d + " " + "00" + ":" + "00" + ":" + "00";
  136. };
  137. /**
  138. * @description: 格式 获取是分秒
  139. * @param {String} date 需要转换的时间
  140. * @param {String} type 转换类型
  141. * @return {String} 时分/时分秒
  142. */
  143. export const formatTime = function (date, type) {
  144. if (!date) return;
  145. var h = date.getHours();
  146. h = h < 10 ? "0" + h : h;
  147. var minute = date.getMinutes();
  148. minute = minute < 10 ? "0" + minute : minute;
  149. var seconds = date.getSeconds();
  150. seconds = seconds < 10 ? "0" + seconds : seconds;
  151. if (type === "HH:mm") {
  152. return h + ":" + minute;
  153. }
  154. return h + ":" + minute + ":" + seconds;
  155. };
  156. /**
  157. * @description: 格式 获取周几
  158. * @param {String} date 需要转换的时间
  159. * @return {String} 星期几
  160. */
  161. export const formatDay = function (date) {
  162. if (!date) return;
  163. var days = date.getDay();
  164. switch (days) {
  165. case 1:
  166. days = "星期一";
  167. break;
  168. case 2:
  169. days = "星期二";
  170. break;
  171. case 3:
  172. days = "星期三";
  173. break;
  174. case 4:
  175. days = "星期四";
  176. break;
  177. case 5:
  178. days = "星期五";
  179. break;
  180. case 6:
  181. days = "星期六";
  182. break;
  183. case 0:
  184. days = "星期日";
  185. break;
  186. }
  187. return days;
  188. };
  189. /**
  190. * @description: 转换时间戳年月日
  191. * @param {String} str 需要转换的时间
  192. * @return {String} 时间戳
  193. */
  194. export const getLocalTimes = (str) => {
  195. if (!str || str === null || str === "") {
  196. return str;
  197. }
  198. var tf = function (i) {
  199. return (i < 10 ? "0" : "") + i;
  200. };
  201. var oDate = new Date(str);
  202. var oYear = oDate.getFullYear() + "-";
  203. var oMonth = (oDate.getMonth() + 1 < 10 ? "0" + (oDate.getMonth() + 1) : oDate.getMonth() + 1) + "-";
  204. var oDay = tf(oDate.getDate()) + " ";
  205. return oYear + oMonth + oDay;
  206. };
  207. /**
  208. * @description 获取当前时间的年月日信息星期几的信息
  209. * @param date
  210. * @return {{month: number, year: number, days: number, day: number}}
  211. */
  212. export const getNewDate = (date) => {
  213. let year = date.getFullYear();
  214. let month = date.getMonth();
  215. let day = date.getDate();
  216. let days = date.getDay();
  217. return { year, month, day, days };
  218. };
  219. /**
  220. * @description获取一个月份的所有天数
  221. * @param year 年份
  222. * @param month 月份
  223. * @return {[]} 一个月所有天数的数组
  224. */
  225. export const getMonthList = (year, month) => {
  226. let d = new Date(year, month, 0).getDate(); // 获取某一个月的天数
  227. let list = [];
  228. for (let j = 0; j < d; j++) {
  229. list.push(month + "-" + (j + 1));
  230. }
  231. return list;
  232. };
  233. /**
  234. * 返回每个月的开始时候和结束时间,或者一年的开始时间和结束时间
  235. * @param date 时间对象
  236. * @param status 1:月,2:年
  237. * @param flag 0:开始时间,1:结束时间
  238. * @returns {string} 返回时间字符串格式 xxxx-xx-xx xx:xx:xx
  239. */
  240. export const getYearOrMonthFirstTime = (date, status, flag) => {
  241. let year = date.getFullYear();
  242. let month = date.getMonth();
  243. if (status === 1) {
  244. if (flag === 0) {
  245. month = month + 1;
  246. return year + "-" + (month < 10 ? `0${month}` : month) + "-01 00:00:00";
  247. } else {
  248. let day = new Date(year, month, 0);
  249. month = month + 1;
  250. return year + "-" + (month < 10 ? `0${month}` : month) + "-" + day.getDate() + " 23:59:59";
  251. }
  252. } else {
  253. if (flag === 0) {
  254. return year + "-" + "01" + "-01 00:00:00";
  255. } else {
  256. return year + "-" + "12" + "-31 23:59:59";
  257. }
  258. }
  259. };
  260. /**
  261. * @description 根据当前时间获取上个月的时间
  262. * @param date 传入的时间
  263. * @return {string} 返回时间字符串格式 xxxx-xx-xx xx:xx:xx
  264. */
  265. export const getLastMouthDate = (date) => {
  266. let year = date.getFullYear();
  267. let month = date.getMonth();
  268. let dateTime = new Date(year, month - 1, 1);
  269. return format(dateTime);
  270. };
  271. /**
  272. * @description 获取当前月的第一天
  273. * @param date 日期时间
  274. * @return {string} 返回xxxx-xx-xx格式的字符串时间
  275. */
  276. export const getMouthFirstDay = (date) => {
  277. const d = new Date(date);
  278. const yyyy = d.getFullYear();
  279. let MM = d.getMonth() + 1;
  280. MM = MM < 10 ? `0${MM}` : MM;
  281. return `${yyyy}-${MM}-01`;
  282. };
  283. /**
  284. * Parse the time to string
  285. * @param {(Object|string|number)} time
  286. * @param {string} cFormat
  287. * @returns {string | null}
  288. */
  289. export function parseTime(time, cFormat) {
  290. if (arguments.length === 0) {
  291. return null;
  292. }
  293. const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}";
  294. let date;
  295. if (typeof time === "object") {
  296. date = time;
  297. } else {
  298. if (typeof time === "string" && /^[0-9]+$/.test(time)) {
  299. time = parseInt(time);
  300. }
  301. if (typeof time === "number" && time.toString().length === 10) {
  302. time = time * 1000;
  303. }
  304. date = new Date(time);
  305. }
  306. const formatObj = {
  307. y: date.getFullYear(),
  308. m: date.getMonth() + 1,
  309. d: date.getDate(),
  310. h: date.getHours(),
  311. i: date.getMinutes(),
  312. s: date.getSeconds(),
  313. a: date.getDay(),
  314. };
  315. const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
  316. const value = formatObj[key];
  317. // Note: getDay() returns 0 on Sunday
  318. if (key === "a") {
  319. return ["日", "一", "二", "三", "四", "五", "六"][value];
  320. }
  321. return value.toString().padStart(2, "0");
  322. });
  323. return time_str;
  324. }

8.单位转换为字节

  1. /**
  2. * 文件大小 字节转换单位
  3. * @param size
  4. * @returns {string|*}
  5. * @name:王浩
  6. */
  7. export const filterSize = (size) => {
  8. if (!size) return "";
  9. if (size < pow1024(1)) return size + " B";
  10. if (size < pow1024(2)) return (size / pow1024(1)).toFixed(2) + " KB";
  11. if (size < pow1024(3)) return (size / pow1024(2)).toFixed(2) + " MB";
  12. if (size < pow1024(4)) return (size / pow1024(3)).toFixed(2) + " GB";
  13. return (size / pow1024(4)).toFixed(2) + " TB";
  14. };
  15. // 求次幂
  16. function pow1024(num) {
  17. return Math.pow(1024, num);
  18. }
  19. /**
  20. * @name:王浩
  21. * @description: 当前系统日期 yyyy-MM-dd
  22. * @param {String} date 需要转换的时间例如:"2020-1-1"
  23. * @return {String} "2020-01-01"
  24. */
  25. export const getYearMonthDay = function (date) {
  26. const d = new Date(date);
  27. const yyyy = d.getFullYear();
  28. let MM = d.getMonth() + 1;
  29. MM = MM < 10 ? `0${MM}` : MM;
  30. let dd = d.getDate();
  31. dd = dd < 10 ? `0${dd}` : dd;
  32. return `${yyyy}-${MM}-${dd}`;
  33. };
  34. /**
  35. * @description: 格式 时间到时分秒
  36. * @param {String} date 需要转换的时间例如:"2020-1-1"
  37. * @return {String} 年月日时分秒
  38. */
  39. export const format = function (date) {
  40. if (!date) return;
  41. var date2 = new Date(date);
  42. var y = date2.getFullYear();
  43. var m = date2.getMonth() + 1;
  44. m = m < 10 ? "0" + m : m;
  45. var d = date2.getDate();
  46. d = d < 10 ? "0" + d : d;
  47. var h = date2.getHours();
  48. h = h < 10 ? "0" + h : h;
  49. var minute = date2.getMinutes();
  50. minute = minute < 10 ? "0" + minute : minute;
  51. var seconds = date2.getSeconds();
  52. seconds = seconds < 10 ? "0" + seconds : seconds;
  53. return y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + seconds;
  54. };

9.根据文件类型判断不同的图片

  1. /**
  2. * @description:根据文件类型判断不同的图片
  3. * @author:
  4. * @date:Created in 2022/1/12 16:20
  5. * @modified By:王浩
  6. * @version: 1.0.0
  7. */
  8. //匹配文件后缀
  9. export function matchFileSuffixType(fileName) {
  10. // 后缀获取
  11. var suffix = "";
  12. // 获取类型结果
  13. var result = "";
  14. try {
  15. var flieArr = fileName.split(".");
  16. suffix = flieArr[flieArr.length - 1];
  17. } catch (err) {
  18. suffix = "";
  19. }
  20. // fileName无后缀返回 false
  21. if (!suffix) {
  22. result = false;
  23. return result;
  24. }
  25. // 图片格式
  26. var imglist = ["png", "jpg", "jpeg", "bmp", "gif", "tif", "tiff"];
  27. // 进行图片匹配
  28. result = imglist.some(function (item) {
  29. return item == suffix;
  30. });
  31. if (result) {
  32. result = "image";
  33. return result;
  34. }
  35. // 匹配txt
  36. var txtlist = ["txt"];
  37. result = txtlist.some(function (item) {
  38. return item == suffix;
  39. });
  40. if (result) {
  41. result = "txt";
  42. return result;
  43. }
  44. // 匹配 doc文件
  45. var officelist = ["doc", "docx"];
  46. result = officelist.some(function (item) {
  47. return item == suffix;
  48. });
  49. if (result) {
  50. result = "doc";
  51. return result;
  52. }
  53. // -----------pdf---------------
  54. var pdf = ["pdf"];
  55. result = pdf.some(function (item) {
  56. return item == suffix;
  57. });
  58. if (result) {
  59. result = "pdf";
  60. return result;
  61. }
  62. // 匹配xlsx文件类型
  63. var download = ["xlsx", "xls"];
  64. result = download.some(function (item) {
  65. return item == suffix;
  66. });
  67. if (result) {
  68. result = "xls";
  69. return result;
  70. }
  71. // 匹配压缩文件
  72. var ziplist = ["zip", "rar", "jar", "tar", "gzip"];
  73. result = ziplist.some(function (item) {
  74. return item == suffix;
  75. });
  76. if (result) {
  77. result = "zip";
  78. return result;
  79. }
  80. // 匹配 视频
  81. var videolist = ["mp4", "m2v", "mkv"];
  82. result = videolist.some(function (item) {
  83. return item == suffix;
  84. });
  85. if (result) {
  86. result = "video";
  87. return result;
  88. }
  89. // 匹配 音频
  90. var radiolist = ["mp3", "wav", "wmv"];
  91. result = radiolist.some(function (item) {
  92. return item == suffix;
  93. });
  94. if (result) {
  95. result = "radio";
  96. return result;
  97. }
  98. // 其他 文件类型
  99. result = "other";
  100. return result;
  101. }

10.其他方法

  1. export const forEach = (arr, fn) => {
  2. if (!arr.length || !fn) return;
  3. let i = -1;
  4. let len = arr.length;
  5. while (++i < len) {
  6. let item = arr[i];
  7. fn(item, i, arr);
  8. }
  9. };
  10. /**
  11. * @param {Array} arr1
  12. * @param {Array} arr2
  13. * @description 得到两个数组的交集, 两个数组的元素为数值或字符串
  14. */
  15. export const getIntersection = (arr1, arr2) => {
  16. let len = Math.min(arr1.length, arr2.length);
  17. let i = -1;
  18. let res = [];
  19. while (++i < len) {
  20. const item = arr2[i];
  21. if (arr1.indexOf(item) > -1) res.push(item);
  22. }
  23. return res;
  24. };
  25. /**
  26. * @param {Array} arr1
  27. * @param {Array} arr2
  28. * @description 得到两个数组的并集, 两个数组的元素为数值或字符串
  29. */
  30. export const getUnion = (arr1, arr2) => {
  31. return Array.from(new Set([...arr1, ...arr2]));
  32. };
  33. /**
  34. * @param {Array} target 目标数组
  35. * @param {Array} arr 需要查询的数组
  36. * @description 判断要查询的数组是否至少有一个元素包含在目标数组中
  37. */
  38. export const hasOneOf = (targetarr, arr) => {
  39. return targetarr.some((_) => arr.indexOf(_) > -1);
  40. };
  41. /**
  42. * @param {String|Number} value 要验证的字符串或数值
  43. * @param {*} validList 用来验证的列表
  44. */
  45. export function oneOf(value, validList) {
  46. for (let i = 0; i < validList.length; i++) {
  47. if (value === validList[i]) {
  48. return true;
  49. }
  50. }
  51. return false;
  52. }
  53. /**
  54. * @param {Number} timeStamp 判断时间戳格式是否是毫秒
  55. * @returns {Boolean}
  56. */
  57. const isMillisecond = (timeStamp) => {
  58. const timeStr = String(timeStamp);
  59. return timeStr.length > 10;
  60. };
  61. /**
  62. * @param {Number} timeStamp 传入的时间戳
  63. * @param {Number} currentTime 当前时间时间戳
  64. * @returns {Boolean} 传入的时间戳是否早于当前时间戳
  65. */
  66. const isEarly = (timeStamp, currentTime) => {
  67. return timeStamp < currentTime;
  68. };
  69. /**
  70. * @param {Number} num 数值
  71. * @returns {String} 处理后的字符串
  72. * @description 如果传入的数值小于10,即位数只有1位,则在前面补充0
  73. */
  74. const getHandledValue = (num) => {
  75. return num < 10 ? "0" + num : num;
  76. };
  77. /**
  78. * @param {Number} timeStamp 传入的时间戳
  79. * @param {Number} startType 要返回的时间字符串的格式类型,传入'year'则返回年开头的完整时间
  80. */
  81. const getDate = (timeStamp, startType) => {
  82. const d = new Date(timeStamp * 1000);
  83. const year = d.getFullYear();
  84. const month = getHandledValue(d.getMonth() + 1);
  85. const date = getHandledValue(d.getDate());
  86. const hours = getHandledValue(d.getHours());
  87. const minutes = getHandledValue(d.getMinutes());
  88. const second = getHandledValue(d.getSeconds());
  89. let resStr = "";
  90. if (startType === "year") resStr = year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + second;
  91. else resStr = month + "-" + date + " " + hours + ":" + minutes;
  92. return resStr;
  93. };
  94. /**
  95. * @param {String|Number} timeStamp 时间戳
  96. * @returns {String} 相对时间字符串
  97. */
  98. export const getRelativeTime = (timeStamp) => {
  99. // 判断当前传入的时间戳是秒格式还是毫秒
  100. const IS_MILLISECOND = isMillisecond(timeStamp);
  101. // 如果是毫秒格式则转为秒格式
  102. if (IS_MILLISECOND) Math.floor((timeStamp /= 1000));
  103. // 传入的时间戳可以是数值或字符串类型,这里统一转为数值类型
  104. timeStamp = Number(timeStamp);
  105. // 获取当前时间时间戳
  106. const currentTime = Math.floor(Date.parse(new Date()) / 1000);
  107. // 判断传入时间戳是否早于当前时间戳
  108. const IS_EARLY = isEarly(timeStamp, currentTime);
  109. // 获取两个时间戳差值
  110. let diff = currentTime - timeStamp;
  111. // 如果IS_EARLY为false则差值取反
  112. if (!IS_EARLY) diff = -diff;
  113. let resStr = "";
  114. const dirStr = IS_EARLY ? "前" : "后";
  115. // 少于等于59秒
  116. if (diff <= 59) resStr = diff + "秒" + dirStr;
  117. // 多于59秒,少于等于59分钟59秒
  118. else if (diff > 59 && diff <= 3599) resStr = Math.floor(diff / 60) + "分钟" + dirStr;
  119. // 多于59分钟59秒,少于等于23小时59分钟59秒
  120. else if (diff > 3599 && diff <= 86399) resStr = Math.floor(diff / 3600) + "小时" + dirStr;
  121. // 多于23小时59分钟59秒,少于等于29天59分钟59秒
  122. else if (diff > 86399 && diff <= 2623859) resStr = Math.floor(diff / 86400) + "天" + dirStr;
  123. // 多于29天59分钟59秒,少于364天23小时59分钟59秒,且传入的时间戳早于当前
  124. else if (diff > 2623859 && diff <= 31567859 && IS_EARLY) resStr = getDate(timeStamp);
  125. else resStr = getDate(timeStamp, "year");
  126. return resStr;
  127. };
  128. /**
  129. * @returns {String} 当前浏览器名称
  130. */
  131. export const getExplorer = () => {
  132. const ua = window.navigator.userAgent;
  133. const isExplorer = (exp) => {
  134. return ua.indexOf(exp) > -1;
  135. };
  136. if (isExplorer("MSIE")) return "IE";
  137. else if (isExplorer("Firefox")) return "Firefox";
  138. else if (isExplorer("Chrome")) return "Chrome";
  139. else if (isExplorer("Opera")) return "Opera";
  140. else if (isExplorer("Safari")) return "Safari";
  141. };
  142. /**
  143. * @description 绑定事件 on(element, event, handler)
  144. */
  145. export const on = (function () {
  146. if (document.addEventListener) {
  147. return function (element, event, handler) {
  148. if (element && event && handler) {
  149. element.addEventListener(event, handler, false);
  150. }
  151. };
  152. } else {
  153. return function (element, event, handler) {
  154. if (element && event && handler) {
  155. element.attachEvent("on" + event, handler);
  156. }
  157. };
  158. }
  159. })();
  160. /**
  161. * @description 解绑事件 off(element, event, handler)
  162. */
  163. export const off = (function () {
  164. if (document.removeEventListener) {
  165. return function (element, event, handler) {
  166. if (element && event) {
  167. element.removeEventListener(event, handler, false);
  168. }
  169. };
  170. } else {
  171. return function (element, event, handler) {
  172. if (element && event) {
  173. element.detachEvent("on" + event, handler);
  174. }
  175. };
  176. }
  177. })();
  178. /**
  179. * 判断一个对象是否存在key,如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性
  180. * 如果没有传入key这个参数,则判断obj对象是否有键值对
  181. */
  182. export const hasKey = (obj, key) => {
  183. if (key) return key in obj;
  184. else {
  185. let keysArr = Object.keys(obj);
  186. return keysArr.length;
  187. }
  188. };
  189. /**
  190. * @param {*} obj1 对象
  191. * @param {*} obj2 对象
  192. * @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串
  193. */
  194. export const objEqual = (obj1, obj2) => {
  195. const keysArr1 = Object.keys(obj1);
  196. const keysArr2 = Object.keys(obj2);
  197. if (keysArr1.length !== keysArr2.length) return false;
  198. else if (keysArr1.length === 0 && keysArr2.length === 0) return true;
  199. /* eslint-disable-next-line */ else return !keysArr1.some((key) => obj1[key] != obj2[key]);
  200. };

11.表单序列化 、获取类型 、对象深拷贝 、加密处理

  1. import { validateNull } from "./validate";
  2. import * as CryptoJS from "crypto-js";
  3. /**
  4. * 表单序列化
  5. * @param data
  6. * @returns {string}
  7. */
  8. export const serialize = (data) => {
  9. let list = [];
  10. Object.keys(data).forEach((ele) => {
  11. list.push(`${ele}=${data[ele]}`);
  12. });
  13. return list.join("&");
  14. };
  15. /**
  16. * 获取类型
  17. * @param obj
  18. * @returns {string|*}
  19. */
  20. export const getObjType = (obj) => {
  21. let toString = Object.prototype.toString;
  22. let map = {
  23. "[object Boolean]": "boolean",
  24. "[object Number]": "number",
  25. "[object String]": "string",
  26. "[object Function]": "function",
  27. "[object Array]": "array",
  28. "[object Date]": "date",
  29. "[object RegExp]": "regExp",
  30. "[object Undefined]": "undefined",
  31. "[object Null]": "null",
  32. "[object Object]": "object",
  33. };
  34. if (obj instanceof Element) {
  35. return "element";
  36. }
  37. return map[toString.call(obj)];
  38. };
  39. /**
  40. * 对象深拷贝
  41. */
  42. export const deepClone = (data) => {
  43. let type = getObjType(data);
  44. let obj;
  45. if (type === "array") {
  46. obj = [];
  47. } else if (type === "object") {
  48. obj = {};
  49. } else {
  50. //不再具有下一层次
  51. return data;
  52. }
  53. if (type === "array") {
  54. for (let i = 0, len = data.length; i < len; i++) {
  55. obj.push(deepClone(data[i]));
  56. }
  57. } else if (type === "object") {
  58. for (let key in data) {
  59. obj[key] = deepClone(data[key]);
  60. }
  61. }
  62. return obj;
  63. };
  64. /**
  65. * 设置主题
  66. */
  67. export const setTheme = (name) => {
  68. document.body.className = name;
  69. };
  70. /**
  71. * 加密处理
  72. */
  73. export const encryption = (params) => {
  74. let { data, type, param, key } = params;
  75. let result = JSON.parse(JSON.stringify(data));
  76. if (type === "Base64") {
  77. param.forEach((ele) => {
  78. result[ele] = btoa(result[ele]);
  79. });
  80. } else if (type === "Aes") {
  81. param.forEach((ele) => {
  82. let data = result[ele];
  83. let newKey = CryptoJS.enc.Latin1.parse(key);
  84. let iv = newKey;
  85. // 加密
  86. let encrypted = CryptoJS.AES.encrypt(data, newKey, {
  87. iv: iv,
  88. mode: CryptoJS.mode.CBC,
  89. padding: CryptoJS.pad.ZeroPadding,
  90. });
  91. result[ele] = encrypted.toString();
  92. });
  93. }
  94. return result;
  95. };

12.递归寻找子类的父类

  1. /**
  2. * 递归寻找子类的父类
  3. */
  4. export const findParent = (menu, id) => {
  5. for (let i = 0; i < menu.length; i++) {
  6. if (menu[i].children.length != 0) {
  7. for (let j = 0; j < menu[i].children.length; j++) {
  8. if (menu[i].children[j].id == id) {
  9. return menu[i];
  10. } else {
  11. if (menu[i].children[j].children.length != 0) {
  12. return findParent(menu[i].children[j].children, id);
  13. }
  14. }
  15. }
  16. }
  17. }
  18. };

13.判断路由是否相等

  1. /**
  2. * 判断路由是否相等
  3. */
  4. export const diff = (obj1, obj2) => {
  5. delete obj1.close;
  6. let o1 = obj1 instanceof Object;
  7. let o2 = obj2 instanceof Object;
  8. if (!o1 || !o2) {
  9. /* 判断不是对象 */
  10. return obj1 === obj2;
  11. }
  12. if (Object.keys(obj1).length !== Object.keys(obj2).length) {
  13. return false;
  14. //Object.keys() 返回一个由对象的自身可枚举属性(key值)组成的数组,例如:数组返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2;
  15. }
  16. for (let attr in obj1) {
  17. let t1 = obj1[attr] instanceof Object;
  18. let t2 = obj2[attr] instanceof Object;
  19. if (t1 && t2) {
  20. return diff(obj1[attr], obj2[attr]);
  21. } else if (obj1[attr] !== obj2[attr]) {
  22. return false;
  23. }
  24. }
  25. return true;
  26. };

14.根据字典的value显示label 、 根据字典的value查找对应的index

  1. /**
  2. * 根据字典的value显示label
  3. */
  4. export const findByValue = (dic, value) => {
  5. let result;
  6. if (validateNull(dic)) return value;
  7. if (typeof value == "string" || typeof value == "number" || typeof value == "boolean") {
  8. let index = 0;
  9. index = findArray(dic, value);
  10. if (index !== -1) {
  11. result = dic[index].label;
  12. } else {
  13. result = value;
  14. }
  15. } else if (value instanceof Array) {
  16. result = [];
  17. let index = 0;
  18. value.forEach((ele) => {
  19. index = findArray(dic, ele);
  20. if (index !== -1) {
  21. result.push(dic[index].label);
  22. } else {
  23. result.push(value);
  24. }
  25. });
  26. result = result.toString();
  27. }
  28. return result;
  29. };
  30. /**
  31. * 根据字典的value查找对应的index
  32. */
  33. export const findArray = (dic, value) => {
  34. for (let i = 0; i < dic.length; i++) {
  35. if (dic[i].value === value) {
  36. return i;
  37. }
  38. }
  39. return -1;
  40. };

15.打开小窗口

  1. /**
  2. * 打开小窗口
  3. */
  4. export const openWindow = (url, title, w, h) => {
  5. // Fixes dual-screen position Most browsers Firefox
  6. const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left;
  7. const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top;
  8. const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
  9. const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
  10. const left = width / 2 - w / 2 + dualScreenLeft;
  11. const top = height / 2 - h / 2 + dualScreenTop;
  12. const newWindow = window.open(
  13. url,
  14. title,
  15. "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=" + w + ", height=" + h + ", top=" + top + ", left=" + left,
  16. );
  17. // Puts focus on the newWindow
  18. if (window.focus) {
  19. newWindow.focus();
  20. }
  21. };