validate.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-12-13 09:43:22
  4. * @LastEditTime: 2022-03-17 09:41:18
  5. * @LastEditors: your name
  6. * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  7. * @FilePath: \Foshan4A2.0\src\utils\validate.js
  8. */
  9. /**
  10. * Created by PanJiaChen on 16/11/18.
  11. */
  12. /**
  13. * @param {string} path
  14. * @returns {Boolean}
  15. */
  16. export function isExternal(path) {
  17. return /^(https?:|mailto:|tel:)/.test(path)
  18. }
  19. /**
  20. * @param {string} str
  21. * @returns {Boolean}
  22. */
  23. export function validUsername(str) {
  24. const valid_map = ['admin', 'editor']
  25. return valid_map.indexOf(str.trim()) >= 0
  26. }
  27. /**
  28. * @param {string} str
  29. * @returns {Object}
  30. */
  31. export function orgTree(str) {
  32. const valid_map = ['admin', 'editor']
  33. return valid_map.indexOf(str.trim()) >= 0
  34. }
  35. //  岗位树构造
  36. export function translateDataToTreeAll(data, parentKey, parentIDKey) {
  37. let parent = data.filter((value) => Number(value[parentKey]) <= 0);// 父数据
  38. let children = data.filter((value) => Number(value[parentKey]) > 0);// 子数据
  39. //console.log('--parent', parent)
  40. //console.log('--children', children)
  41. let translator = (parent, children) => {
  42. parent.forEach((parent) => {
  43. parent.children = [];
  44. // children.forEach((current, index) => {
  45. // if (current[parentKey] === parent[parentIDKey]) {
  46. // const temp = JSON.parse(JSON.stringify(children));
  47. // temp.splice(index, 1);
  48. // translator([current], temp);
  49. // typeof parent.children !== "undefined"
  50. // ? parent.children.push(current)
  51. // : (parent.children = [current]);
  52. // }
  53. // });
  54. for (let i = 0; i < children.length;) {
  55. if (children[i][parentKey] === parent[parentIDKey]) {
  56. const temp = children.splice(i, 1)
  57. typeof parent.children !== 'undefined'
  58. ? parent.children.push(...temp)
  59. : (parent.children = temp)
  60. translator(temp, children)
  61. } else {
  62. i++
  63. }
  64. }
  65. });
  66. };
  67. translator(parent, children);
  68. return parent;
  69. }
  70. export function deteleObject(obj) {
  71. var uniques = [];
  72. var stringify = {};
  73. for (var i = 0; i < obj.length; i++) {
  74. var keys = Object.keys(obj[i]);
  75. keys.sort(function (a, b) {
  76. return (Number(a) - Number(b));
  77. });
  78. var str = '';
  79. for (var j = 0; j < keys.length; j++) {
  80. str += JSON.stringify(keys[j]);
  81. str += JSON.stringify(obj[i][keys[j]]);
  82. }
  83. if (!stringify.hasOwnProperty(str)) {
  84. uniques.push(obj[i]);
  85. stringify[str] = true;
  86. }
  87. }
  88. uniques = uniques;
  89. return uniques;
  90. }
  91. // 随机长度
  92. function randomNum(start, end) {
  93. return Math.floor(Math.random() * (Number(end) - Number(start)) + start)
  94. }
  95. //字母随机
  96. function randomAlp(arr, count) {
  97. let shuffled = arr.slice(0)
  98. let i = arr.length
  99. if (count > i) {
  100. i = count
  101. }
  102. let min = i - count, temp, index;
  103. while (i-- > min) {
  104. index = Math.floor((arr.length) * Math.random());
  105. temp = shuffled[index];
  106. if (shuffled[i]) {
  107. shuffled[index] = shuffled[i];
  108. }
  109. else {
  110. shuffled[index] = shuffled[index]
  111. }
  112. shuffled[i] = temp;
  113. }
  114. return shuffled.slice(min);
  115. }
  116. /**
  117. * @param {minLen} 密码最小长度
  118. * @param {maxLen} 密码最大长度
  119. * @param {struc} 密码规则
  120. * @returns {Object}
  121. * 4位密码规则 1111 = 大写 小写 特殊字符 数字 都开启
  122. */
  123. export function pwdProduce(minLen, maxLen, struc) {
  124. // 密码规则转化
  125. const pwdStruc = typeof (struc) === 'string' ? struc.split('') : `${struc}`.split('')
  126. // 字母
  127. const alphabet = 'abcdefghijklmnopqrstuvwxyz'
  128. // 特殊字符
  129. const special = ['!', '%', '&', ',', ';', '=', '?', '$', '@', '#', '$', '*', "'"]
  130. //数字
  131. const numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
  132. // 密码随机长度
  133. // const pwdLen = randomNum(minLen, maxLen)
  134. const pwdLen = maxLen
  135. const datas = []
  136. if (pwdStruc.length) {
  137. let typeLong = Number(pwdStruc[0]) + Number(pwdStruc[1]) + Number(pwdStruc[2]) + Number(pwdStruc[3]);
  138. let passLong = Math.floor(pwdLen / typeLong);
  139. let dis = "";
  140. if (pwdStruc[0] == 1) {
  141. let arr = alphabet.toLocaleUpperCase().split('');
  142. let v = randomAlp(arr, passLong);
  143. for (let i = 0; i < passLong; i++) {
  144. dis += v[i]
  145. }
  146. }
  147. if (pwdStruc[1] == 1) {
  148. let arr = alphabet.split('');
  149. let v = randomAlp(arr, passLong);
  150. for (let i = 0; i < passLong; i++) {
  151. dis += v[i]
  152. }
  153. }
  154. if (pwdStruc[2] == 1) {
  155. let arr = special
  156. let v = randomAlp(arr, passLong);
  157. for (let i = 0; i < passLong; i++) {
  158. dis += v[i]
  159. }
  160. }
  161. if (pwdStruc[3] == 1) {
  162. let arr = numbers
  163. let v = randomAlp(arr, passLong);
  164. console.log(v)
  165. for (let i = 0; i < passLong; i++) {
  166. dis += v[i]
  167. }
  168. }
  169. let strlong = pwdLen - (passLong * typeLong);
  170. if (strlong > 0) {
  171. if (pwdStruc[0] == 1) {
  172. let arr = alphabet.toLocaleUpperCase().split('');
  173. let v = randomAlp(arr, strlong);
  174. for (let i = 0; i < strlong; i++) {
  175. dis += v[i]
  176. }
  177. }
  178. else if (pwdStruc[1] == 1) {
  179. let arr = alphabet.split('');
  180. let v = randomAlp(arr, strlong);
  181. for (let i = 0; i < strlong; i++) {
  182. dis += v[i]
  183. }
  184. }
  185. else if (pwdStruc[2] == 1) {
  186. let arr = special
  187. let v = randomAlp(arr, strlong);
  188. for (let i = 0; i < strlong; i++) {
  189. dis += v[i]
  190. }
  191. }
  192. else if (pwdStruc[3] == 1) {
  193. let arr = numbers
  194. let v = randomAlp(arr, strlong);
  195. for (let i = 0; i < strlong; i++) {
  196. dis += v[i]
  197. }
  198. }
  199. }
  200. return dis
  201. //缓存当前的密码规则
  202. // pwdStruc.forEach((item, index) => {
  203. // if (item == 1) {
  204. // datas.push(index)
  205. // }
  206. // })
  207. // // 只有一种规则时
  208. // if (datas.length === 1) {
  209. // const num = datas[0]
  210. // const dis = randomAlp(alphabet.split('')).splice(0, pwdLen).join('')
  211. // switch (num) {
  212. // case 0:
  213. // return dis.toLocaleUpperCase()
  214. // break;
  215. // case 1:
  216. // return dis
  217. // break;
  218. // default:
  219. // break;
  220. // }
  221. // }
  222. } else {
  223. return new Error('密码规则转换失败')
  224. }
  225. }
  226. //模糊查询
  227. export function findarrays(ar, feature, v) {
  228. var arr = [];
  229. for (var i = 0; i < ar.length; i++) {
  230. var atxt = ar[i][feature];
  231. var btxt = v;
  232. var type = 0;
  233. if (atxt) {
  234. if (atxt.match(btxt) == btxt) {
  235. type = 1;
  236. }
  237. }
  238. if (type == 1) {
  239. arr.push(ar[i]);
  240. }
  241. }
  242. // var arr = [];
  243. // for (var i = 0; i < ar.length; i++) {
  244. // var atxt = ar[i][feature];
  245. // var btxt = v;
  246. // // 将字符串按某个字符切割成若干个字符串,并以数组形式返回
  247. // var atxtarr = atxt;
  248. // var btxtarr = btxt;
  249. // var type = 0;
  250. // // for (var k = 0; k < atxtarr.length; k++) {
  251. // // if (btxtarr[0].length >= atxtarr[k].length) {
  252. // // if (atxtarr[k] == btxtarr[0]) {
  253. // // type = 1;
  254. // // }
  255. // // }
  256. // // }
  257. // if (atxtarr == btxtarr) {
  258. // type = 1;
  259. // } else if (atxtarr.length > btxtarr.length) {
  260. // for (var k = 0; k < atxtarr.length; k++) {
  261. // if (btxtarr[0].length >= atxtarr[k].length) {
  262. // if (atxtarr[k] == btxtarr) {
  263. // type = 1;
  264. // }
  265. // }
  266. // }
  267. // }
  268. // if (type == 1) {
  269. // arr.push(ar[i]);
  270. // }
  271. // }
  272. return arr;
  273. }
  274. // 表单输入长度验证
  275. function getRealLength(string) {
  276. let realLength = 0,
  277. len = string.length,
  278. charCode = -1
  279. for (let i = 0; i < len; i++) {
  280. charCode = string.charCodeAt(i)
  281. if (charCode >= 0 && charCode <= 128) {
  282. realLength += 1
  283. } else {
  284. realLength += 2
  285. }
  286. }
  287. return realLength
  288. }
  289. export function lengthValidator(rule, value, callback) {
  290. value = value ?? ''
  291. const realLength = getRealLength(value)
  292. if (realLength === 0) {
  293. callback()
  294. } else if (rule.min && realLength < rule.min) {
  295. rule.message += ` ${realLength}/${rule.min}`
  296. callback(new Error('长度小于最小值'))
  297. } else if (rule.max && realLength > rule.max) {
  298. rule.message += ` ${realLength}/${rule.max}`
  299. callback(new Error('长度超出最大值'))
  300. } else {
  301. callback()
  302. }
  303. }
  304. // 表单验证输入内容验证
  305. export const regular = {
  306. integer: /^[0-9]*$/,
  307. name: /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$/,
  308. nameMessage: '只能包含中文、英文、数字和下划线切不能以下划线开头'
  309. }