util.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. import {
  2. validatenull
  3. } from './validate';
  4. export const getObjType = obj => {
  5. var toString = Object.prototype.toString;
  6. var map = {
  7. '[object Boolean]': 'boolean',
  8. '[object Number]': 'number',
  9. '[object String]': 'string',
  10. '[object Function]': 'function',
  11. '[object Array]': 'array',
  12. '[object Date]': 'date',
  13. '[object RegExp]': 'regExp',
  14. '[object Undefined]': 'undefined',
  15. '[object Null]': 'null',
  16. '[object Object]': 'object'
  17. };
  18. if (obj instanceof Element) {
  19. return 'element';
  20. }
  21. return map[toString.call(obj)];
  22. };
  23. /**
  24. * 对象深拷贝
  25. */
  26. export const deepClone = data => {
  27. var type = getObjType(data);
  28. var obj;
  29. if (type === 'array') {
  30. obj = [];
  31. } else if (type === 'object') {
  32. obj = {};
  33. } else {
  34. //不再具有下一层次
  35. return data;
  36. }
  37. if (type === 'array') {
  38. for (var i = 0, len = data.length; i < len; i++) {
  39. obj.push(deepClone(data[i]));
  40. }
  41. } else if (type === 'object') {
  42. for (var key in data) {
  43. obj[key] = deepClone(data[key]);
  44. }
  45. }
  46. return obj;
  47. };
  48. /**
  49. * 根据字典的value显示label
  50. */
  51. let result = '';
  52. export const findByvalue = (dic, value, props, first) => {
  53. props = props || {};
  54. const labelKey = props.label || 'label';
  55. const valueKey = props.value || 'value';
  56. const childrenKey = props.children || 'children';
  57. if (validatenull(first)) result = value;
  58. if (validatenull(dic)) return result;
  59. //正常字典
  60. if (typeof(value) === 'string' || typeof(value) === 'number' || typeof(value) === 'boolean') {
  61. for (let i = 0; i < dic.length; i++) {
  62. if (dic[i][valueKey] === value) {
  63. result = dic[i][labelKey];
  64. break;
  65. } else {
  66. findByvalue(dic[i][childrenKey], value, props, true);
  67. }
  68. }
  69. //父子集字典
  70. } else if (value instanceof Array && dic[0][childrenKey]) {
  71. let index = 0;
  72. let count = 0;
  73. result = [];
  74. while (count < value.length) {
  75. index = findArray(dic, value[count], valueKey);
  76. if (index !== -1) {
  77. result.push(dic[index][labelKey]);
  78. } else {
  79. result.push(value[count]);
  80. }
  81. if (!validatenull(dic[index][childrenKey])) {
  82. dic = dic[index][childrenKey] || [];
  83. }
  84. count++;
  85. }
  86. result = result.join('/').toString();
  87. //多选字典
  88. } else if (value instanceof Array) {
  89. let index = 0;
  90. let count = 0;
  91. result = [];
  92. while (count < value.length) {
  93. index = findArray(dic, value[count], valueKey);
  94. if (index !== -1) {
  95. result.push(dic[index][labelKey]);
  96. } else {
  97. result.push(value[count]);
  98. }
  99. count++;
  100. }
  101. result = result.join(',').toString();
  102. }
  103. return result;
  104. };
  105. /**
  106. * 根据字典的value查找对应的index
  107. */
  108. export const findArray = (dic, value, valueKey) => {
  109. valueKey = valueKey || 'value';
  110. for (let i = 0; i < dic.length; i++) {
  111. if (dic[i][valueKey] === value) {
  112. return i;
  113. }
  114. }
  115. return -1;
  116. };
  117. /**
  118. * 获取字典
  119. */
  120. export const setDic = (dicData, DIC) => {
  121. return (typeof(dicData) === 'string') ? DIC : dicData;
  122. };
  123. /**
  124. * 设置px
  125. */
  126. export const setPx = (val, defval) => {
  127. if (validatenull(val)) {
  128. val = defval;
  129. }
  130. val = val + '';
  131. if (val.indexOf('%') === -1) {
  132. val = val + 'px';
  133. }
  134. return val;
  135. };
  136. /**
  137. * 表格初始化值
  138. */
  139. export const formInitVal = (list) => {
  140. let tableForm = {};
  141. let searchForm = {};
  142. list.forEach(ele => {
  143. if (
  144. ele.type === 'checkbox' ||
  145. ele.type === 'cascader' ||
  146. ele.type === 'dates' ||
  147. (ele.type === 'upload' && ele.listType !== 'picture-img') ||
  148. ele.multiple ||
  149. ele.range || ele.dataType === 'array'
  150. ) {
  151. tableForm[ele.prop] = [];
  152. if (ele.search) searchForm[ele.prop] = [];
  153. } else if (['number', 'rate', 'silder'].includes(ele.type) || ele.dataType === 'number') {
  154. tableForm[ele.prop] = 0;
  155. if (ele.search) {
  156. searchForm[ele.prop] = 0;
  157. }
  158. } else {
  159. tableForm[ele.prop] = '';
  160. if (ele.search) {
  161. searchForm[ele.prop] = '';
  162. }
  163. }
  164. //表单默认值设置
  165. if (!validatenull(ele.valueDefault)) tableForm[ele.prop] = ele.valueDefault;
  166. //搜索表单默认值设置
  167. if (!validatenull(ele.searchDefault)) searchForm[ele.prop] = ele.searchDefault;
  168. });
  169. return {
  170. tableForm,
  171. searchForm
  172. };
  173. };
  174. export const getType = (column) => {
  175. const type = column.type
  176. const more = column.more || false;
  177. if (more) {
  178. if (type === 'date') {
  179. return 'daterange';
  180. } else if (type === 'datetime') {
  181. return 'datetimerange';
  182. } else if (type === 'time') {
  183. return 'timerange';
  184. } else {
  185. return type;
  186. }
  187. }
  188. return type;
  189. };
  190. /**
  191. * 搜索框获取动态组件
  192. */
  193. export const getSearchType = (type) => {
  194. if (['select', 'radio', 'checkbox'].includes(type)) {
  195. return 'crudSelect';
  196. } else if (['time', 'timerange'].includes(type)) {
  197. return 'crudTime';
  198. } else if (['dates', 'date', 'datetime', 'datetimerange', 'daterange', 'week', 'month', 'year'].includes(type)) {
  199. return 'crudDate';
  200. } else if (['cascader'].includes(type)) {
  201. return 'crudCascader';
  202. } else if (['number'].includes(type)) {
  203. return 'crudInputNumber';
  204. } else {
  205. return 'crudInput';
  206. }
  207. };
  208. /**
  209. * 动态获取组件
  210. */
  211. export const getComponent = ({ type, component }) => {
  212. if (!validatenull(component)) {
  213. return component;
  214. } else if (type === 'select') {
  215. return 'crudSelect';
  216. } else if (type === 'radio') {
  217. return 'crudRadio';
  218. } else if (type === 'checkbox') {
  219. return 'crudCheckbox';
  220. } else if (['time', 'timerange'].includes(type)) {
  221. return 'crudTime';
  222. } else if (['dates', 'date', 'datetime', 'datetimerange', 'daterange', 'week', 'month', 'year'].includes(type)) {
  223. return 'crudDate';
  224. } else if (type === 'cascader') {
  225. return 'crudCascader';
  226. } else if (type === 'number') {
  227. return 'crudInputNumber';
  228. } else if (type === 'password') {
  229. return 'crudInput';
  230. } else if (type === 'switch') {
  231. return 'crudSwitch';
  232. } else if (type === 'rate') {
  233. return 'crudRate';
  234. } else if (type === 'upload') {
  235. return 'crudUpload';
  236. } else if (type === 'silder') {
  237. return 'crudSilder';
  238. } else {
  239. return 'crudInput';
  240. }
  241. };
  242. export const getPasswordChar = (len, char) => {
  243. let result = '';
  244. for (let i = 0; i < len; i++) {
  245. result = result + char;
  246. }
  247. return result;
  248. }
  249. export const vaildData = (val, dafult) => {
  250. if (typeof val === 'boolean') {
  251. return val;
  252. }
  253. return !validatenull(val) ? val : dafult;
  254. };