util.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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. export const findByvalue = (dic, value, props) => {
  52. props = props || {};
  53. const labelKey = props.label || 'label';
  54. const valueKey = props.value || 'value';
  55. const childrenKey = props.children || 'children';
  56. let result = '';
  57. if (validatenull(dic)) return value;
  58. if (typeof(value) === 'string' || typeof(value) === 'number' || typeof(value) === 'boolean') {
  59. let index = 0;
  60. index = findArray(dic, value, valueKey);
  61. if (index !== -1) {
  62. result = (dic[index][labelKey]);
  63. } else {
  64. result = value;
  65. }
  66. } else if (value instanceof Array && dic[0][childrenKey]) {
  67. let index = 0;
  68. let count = 0;
  69. while (count < value.length) {
  70. index = findArray(dic, value[count]);
  71. if (!validatenull(dic[index])) {
  72. result = result + dic[index][labelKey] + '/';
  73. dic = dic[index][childrenKey];
  74. }
  75. count++;
  76. }
  77. if (result.length > 0) {
  78. result = result.substr(0, result.length - 1);
  79. }
  80. } else if (value instanceof Array) {
  81. result = [];
  82. let index = 0;
  83. value.forEach(ele => {
  84. index = findArray(dic, ele);
  85. if (index !== -1) {
  86. result.push(dic[index][labelKey]);
  87. } else {
  88. result.push(ele);
  89. }
  90. });
  91. result = result.toString();
  92. }
  93. return result;
  94. };
  95. /**
  96. * 根据字典的value查找对应的index
  97. */
  98. export const findArray = (dic, value, valueKey) => {
  99. valueKey = valueKey || 'value';
  100. for (let i = 0; i < dic.length; i++) {
  101. if (dic[i][valueKey] === value) {
  102. return i;
  103. }
  104. }
  105. return -1;
  106. };
  107. /**
  108. * 获取字典
  109. */
  110. export const setDic = (dicData, DIC) => {
  111. return (typeof(dicData) === 'string') ? DIC : dicData;
  112. };
  113. /**
  114. * 设置px
  115. */
  116. export const setPx = (val, defval) => {
  117. if (validatenull(val)) {
  118. val = defval;
  119. }
  120. val = val + '';
  121. if (val.indexOf('%') === -1) {
  122. val = val + 'px';
  123. }
  124. return val;
  125. };
  126. /**
  127. * 表格初始化值
  128. */
  129. export const formInitVal = (list) => {
  130. let tableForm = {};
  131. let searchForm = {};
  132. list.forEach(ele => {
  133. if (
  134. ele.type === 'checkbox' ||
  135. ele.type === 'cascader' ||
  136. ele.type === 'dates' ||
  137. (ele.type === 'upload' && ele.listType !== 'picture-img') ||
  138. ele.multiple ||
  139. ele.range || ele.dataType === 'array'
  140. ) {
  141. tableForm[ele.prop] = [];
  142. if (ele.search) searchForm[ele.prop] = [];
  143. } else if (['number', 'rate', 'silder'].includes(ele.type) || ele.dataType === 'number') {
  144. tableForm[ele.prop] = 0;
  145. if (ele.search) {
  146. searchForm[ele.prop] = 0;
  147. }
  148. } else {
  149. tableForm[ele.prop] = '';
  150. if (ele.search) {
  151. searchForm[ele.prop] = '';
  152. }
  153. }
  154. //表单默认值设置
  155. if (!validatenull(ele.valueDefault)) tableForm[ele.prop] = ele.valueDefault;
  156. //搜索表单默认值设置
  157. if (!validatenull(ele.searchDefault)) searchForm[ele.prop] = ele.searchDefault;
  158. });
  159. return {
  160. tableForm,
  161. searchForm
  162. };
  163. };
  164. export const getType = (column) => {
  165. const type = column.type
  166. const more = column.more || false;
  167. if (more) {
  168. if (type === 'date') {
  169. return 'daterange';
  170. } else if (type === 'datetime') {
  171. return 'datetimerange';
  172. } else if (type === 'time') {
  173. return 'timerange';
  174. } else {
  175. return type;
  176. }
  177. }
  178. return type;
  179. };
  180. /**
  181. * 搜索框获取动态组件
  182. */
  183. export const getSearchType = (type) => {
  184. if (['select', 'radio', 'checkbox'].includes(type)) {
  185. return 'crudSelect';
  186. } else if (['time', 'timerange'].includes(type)) {
  187. return 'crudTime';
  188. } else if (['dates', 'date', 'datetime', 'datetimerange', 'daterange', 'week', 'month', 'year'].includes(type)) {
  189. return 'crudDate';
  190. } else if (['cascader'].includes(type)) {
  191. return 'crudCascader';
  192. } else if (['number'].includes(type)) {
  193. return 'crudInputNumber';
  194. } else {
  195. return 'crudInput';
  196. }
  197. };
  198. /**
  199. * 动态获取组件
  200. */
  201. export const getComponent = ({ type, component }) => {
  202. if (!validatenull(component)) {
  203. return component;
  204. } else if (type === 'select') {
  205. return 'crudSelect';
  206. } else if (type === 'radio') {
  207. return 'crudRadio';
  208. } else if (type === 'checkbox') {
  209. return 'crudCheckbox';
  210. } else if (['time', 'timerange'].includes(type)) {
  211. return 'crudTime';
  212. } else if (['dates', 'date', 'datetime', 'datetimerange', 'daterange', 'week', 'month', 'year'].includes(type)) {
  213. return 'crudDate';
  214. } else if (type === 'cascader') {
  215. return 'crudCascader';
  216. } else if (type === 'number') {
  217. return 'crudInputNumber';
  218. } else if (type === 'password') {
  219. return 'crudInput';
  220. } else if (type === 'switch') {
  221. return 'crudSwitch';
  222. } else if (type === 'rate') {
  223. return 'crudRate';
  224. } else if (type === 'upload') {
  225. return 'crudUpload';
  226. } else if (type === 'silder') {
  227. return 'crudSilder';
  228. } else {
  229. return 'crudInput';
  230. }
  231. };
  232. export const vaildData = (val, dafult) => {
  233. if (typeof val === 'boolean') {
  234. return val;
  235. }
  236. return !validatenull(val) ? val : dafult;
  237. };