validate.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-12-13 09:43:22
  4. * @LastEditTime: 2022-01-08 12:21:58
  5. * @LastEditors: Please set LastEditors
  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. });
  55. };
  56. translator(parent, children);
  57. return parent;
  58. }
  59. export function deteleObject(obj) {
  60. var uniques = [];
  61. var stringify = {};
  62. for (var i = 0; i < obj.length; i++) {
  63. var keys = Object.keys(obj[i]);
  64. keys.sort(function (a, b) {
  65. return (Number(a) - Number(b));
  66. });
  67. var str = '';
  68. for (var j = 0; j < keys.length; j++) {
  69. str += JSON.stringify(keys[j]);
  70. str += JSON.stringify(obj[i][keys[j]]);
  71. }
  72. if (!stringify.hasOwnProperty(str)) {
  73. uniques.push(obj[i]);
  74. stringify[str] = true;
  75. }
  76. }
  77. uniques = uniques;
  78. return uniques;
  79. }
  80. // 随机长度
  81. function randomNum(start, end) {
  82. return Math.floor(Math.random() * (Number(end) - Number(start)) + start)
  83. }
  84. //字母随机
  85. function randomAlp(arr, count) {
  86. let shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
  87. while (i-- > min) {
  88. index = Math.floor((i + 1) * Math.random());
  89. temp = shuffled[index];
  90. shuffled[index] = shuffled[i];
  91. shuffled[i] = temp;
  92. }
  93. return shuffled.slice(min);
  94. }
  95. /**
  96. * @param {minLen} 密码最小长度
  97. * @param {maxLen} 密码最大长度
  98. * @param {struc} 密码规则
  99. * @returns {Object}
  100. * 4位密码规则 1111 = 大写 小写 特殊字符 数字 都开启
  101. */
  102. export function pwdProduce(minLen, maxLen, struc) {
  103. // 密码规则转化
  104. const pwdStruc = typeof (struc) === 'string' ? struc.split('') : `${struc}`.split('')
  105. // 字母
  106. const alphabet = 'abcdefghijklmnopqrstuvwxyz'
  107. // 特殊字符
  108. const special = ['~','!','@','#','$','%','^','&','*','_','+','.']
  109. //数字
  110. const numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
  111. // 密码随机长度
  112. const pwdLen = randomNum(minLen, maxLen)
  113. const datas = []
  114. if (pwdStruc.length) {
  115. let typeLong = Number(pwdStruc[0]) + Number(pwdStruc[1]) + Number(pwdStruc[2]) + Number(pwdStruc[3]);
  116. let passLong = Math.ceil(pwdLen / typeLong);
  117. let dis="";
  118. if(pwdStruc[0]==1){
  119. let arr = alphabet.toLocaleUpperCase().split('');
  120. let v = randomAlp(arr,passLong);
  121. for(let i = 0 ; i < passLong ; i++){
  122. dis+=v[i]
  123. }
  124. }
  125. if(pwdStruc[1]==1){
  126. let arr = alphabet.split('');
  127. let v = randomAlp(arr,passLong);
  128. for(let i = 0 ; i < passLong ; i++){
  129. dis+=v[i]
  130. }
  131. }
  132. if(pwdStruc[2]==1){
  133. let arr = special
  134. let v = randomAlp(arr,passLong);
  135. for(let i = 0 ; i < passLong ; i++){
  136. dis+=v[i]
  137. }
  138. }
  139. if(pwdStruc[3]==1){
  140. let arr = numbers
  141. let v = randomAlp(arr,passLong);
  142. for(let i = 0 ; i < passLong ; i++){
  143. dis+=v[i]
  144. }
  145. }
  146. return dis
  147. //缓存当前的密码规则
  148. // pwdStruc.forEach((item, index) => {
  149. // if (item == 1) {
  150. // datas.push(index)
  151. // }
  152. // })
  153. // // 只有一种规则时
  154. // if (datas.length === 1) {
  155. // const num = datas[0]
  156. // const dis = randomAlp(alphabet.split('')).splice(0, pwdLen).join('')
  157. // switch (num) {
  158. // case 0:
  159. // return dis.toLocaleUpperCase()
  160. // break;
  161. // case 1:
  162. // return dis
  163. // break;
  164. // default:
  165. // break;
  166. // }
  167. // }
  168. } else {
  169. return new Error('密码规则转换失败')
  170. }
  171. }