Blame view

src/pages/pms/entity.ts 6.72 KB
38e3fe2f   baiyun   配件计划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  /**
   * 在axios的get请求中{a: 1, b: [1, 2]}需要转换为{a: 1, b: "1, 2"}
   */
  export function ParamArrToStr(params: any) {
    if (typeof params != 'object') {
      return params;
    }
    if (params instanceof Array) {
      return params.join(",");
    }
    const _params = deepClone(params);
    // eslint-disable-next-line guard-for-in
    for (let key in _params) {
      _params[key] = ParamArrToStr(_params[key]);
    }
    return _params;
  }
  
  /**
   * 深拷贝
   */
  //利用 WeekMap() 的键对自己所引用对象的引用都是弱引用的特性,在没有其他引用和该键引用同一对象的情况下,这个对象将会被垃圾回收
  //为了解决循环引用的问题,设置一个哈希表存储已拷贝过的对象进行循环检测,当检测到当前对象已存在于哈希表中时,取出该值并返回即可
  export function deepClone(obj: any, hash = new WeakMap()) {
38e3fe2f   baiyun   配件计划
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
    function isComplexDataType(obj: any) {
      return (typeof obj === 'object' || typeof obj === 'function') && (obj !== null);
    }
    //查哈希表,防止循环拷贝。如果成环了(对象循环引用),参数obj = obj.loop = 最初的obj,则会在WeakMap中找到第一次放入的obj提前返回第一次放入WeakMap的cloneObj,解决对象循环引用的问题
    if (hash.has(obj)) return hash.get(obj);
  
    //如果参数为Date, RegExp, Set, Map, WeakMap, WeakSet等引用类型,则直接生成一个新的实例
    let type = [Date, RegExp, Set, Map, WeakMap, WeakSet];
    if (type.includes(obj.constructor)) return new obj.constructor(obj);
  
    //遍历传入参数所有属性描述符
    let allDesc = Object.getOwnPropertyDescriptors(obj);
    //继承原型
    let cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc);
  
    // 获取所有 Symbol 类型键
    let symKeys = Object.getOwnPropertySymbols(obj);
    // 拷贝 Symbol 类型键对应的属性
    if (symKeys.length > 0) {
      symKeys.forEach(symKey => {
        cloneObj[symKey] = isComplexDataType(obj[symKey]) ? deepClone(obj[symKey], hash) : obj[symKey];
      });
    }
    // 哈希表设值
    hash.set(obj, cloneObj);
    //Reflect.ownKeys(obj)拷贝不可枚举属性和符号类型
    for (let key of Reflect.ownKeys(obj)) {
38e3fe2f   baiyun   配件计划
52
53
54
55
56
57
      cloneObj[key] =
        (isComplexDataType(obj[key]) && typeof obj[key] !== 'function') ? deepClone(obj[key], hash) : obj[key];
    }
    return cloneObj;
  }
  
ebd701f2   by1642146903   配件计划申请页面联调
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  export function flattenDeep(list: any[] = []): any[] {
    const arr: any[] = [];
    if (list instanceof Array) {
      for (let ele of list) {
        if (ele instanceof Array) {
          const arr1 = flattenDeep(ele);
          for (let ele1 of arr1) {
            arr.push(ele1);
          }
        } else {
          arr.push(ele);
        }
      }
    }
    return arr;
  }
  
38e3fe2f   baiyun   配件计划
75
76
77
78
79
80
81
82
83
84
85
86
87
  export function groupBy(list: any[], key: string) {
    const data: any[] = [];
    for (let listEle of list) {
      let item = data.find(i => i[key] == listEle[key]);
      if (!item) {
        item = deepClone({...listEle, list: []});
        data.push(item);
      }
      item.list.push(listEle);
    }
    return data;
  }
  
c52b00d6   jiangwei   Merge branch 'cas...
88
89
90
91
92
93
94
95
96
97
98
99
100
  export function groupBys(list: any[], key1: string, key2: string) {
    const data: any[] = [];
    for (let listEle of list) {
      let item = data.find(i => i[key1] == listEle[key1] && i[key2] == listEle[key2]);
      if (!item) {
        item = deepClone({...listEle, list: []});
        data.push(item);
      }
      item.list.push(listEle);
    }
    return data;
  }
  
38e3fe2f   baiyun   配件计划
101
102
103
  export function numFormat(num: number = 0, unit?: string): string {
    return (unit == '%' ? num * 100 : unit == '万元' ? num / 10000 : num).toFixed(2);
  }
8c9decf4   baiyun   机油维护
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
  
  /**机油类型 */
  export const motorOilTypeData = [
    { value: '全合成机油', label: "全合成机油" },
    { value: '半合成机油', label: "半合成机油" },
    { value: '矿物机油', label: "矿物机油" },
  ];
  /**机油等级 */
  export const oilLevelData = [
    {value: "SA", label: "SA"},
    {value: "SB", label: "SB"},
    {value: "SC", label: "SC"},
    {value: "SD", label: "SD"},
    {value: "SE", label: "SE"},
    {value: "SF", label: "SF"},
    {value: "SG", label: "SG"},
    {value: "SH", label: "SH"},
    {value: "SJ", label: "SJ"},
    {value: "SL", label: "SL"},
    {value: "SM", label: "SM"},
    {value: "SN", label: "SN"},
    {value: "CA", label: "CA"},
    {value: "CB", label: "CB"},
    {value: "CC", label: "CC"},
    {value: "CD", label: "CD"},
    {value: "CE", label: "CE"},
    {value: "CF", label: "CF"},
    {value: "CF-2", label: "CF-2"},
    {value: "CF-4", label: "CF-4"},
    {value: "CG-4", label: "CG-4"},
    {value: "CH-4", label: "CH-4"},
02335b53   baiyun   机油等级NE1
135
136
    {value: "CI-4", label: "CI-4"},
    {value: "NE1", label: "NE1"},
8c9decf4   baiyun   机油维护
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
  ];
  /**粘稠度 */
  export const oilViscosityData = [
    {value: "0W-20", label: "0W-20"},
    {value: "0W-30", label: "0W-30"},
    {value: "0W-40", label: "0W-40"},
    {value: "0W-50", label: "0W-50"},
    {value: "0W-60", label: "0W-60"},
    {value: "5W-20", label: "5W-20"},
    {value: "5W-30", label: "5W-30"},
    {value: "5W-40", label: "5W-40"},
    {value: "5W-50", label: "5W-50"},
    {value: "5W-60", label: "5W-60"},
    {value: "10W-20", label: "10W-20"},
    {value: "10W-30", label: "10W-30"},
    {value: "10W-40", label: "10W-40"},
    {value: "10W-50", label: "10W-50"},
    {value: "10W-60", label: "10W-60"},
    {value: "15W-20", label: "15W-20"},
    {value: "15W-30", label: "15W-30"},
    {value: "15W-40", label: "15W-40"},
    {value: "15W-50", label: "15W-50"},
    {value: "15W-60", label: "15W-60"},
    {value: "20W-20", label: "20W-20"},
    {value: "20W-30", label: "20W-30"},
    {value: "20W-40", label: "20W-40"},
    {value: "20W-50", label: "20W-50"},
    {value: "20W-60", label: "20W-60"}
  ];
  /**燃油种类 */
  export const fuelTypeData = [
    { value: '汽油', label: "汽油" },
    { value: '柴油', label: "柴油" },
  ];
4a34f2e3   baiyun   配件类型
171
172
173
174
175
  
  /**配件类型*/
  export const partTypeData = [
    { value: 1, label: "配件" },
    { value: 2, label: "装潢" },
74664329   baiyun   养护类配件兼容
176
    { value: 4, label: "养护" },
c8dc9e64   jiangwei   配件类型
177
178
179
180
181
    { value: 5, label: "机修辅料" },
    { value: 6, label: "钣金辅料" },
    { value: 7, label: "喷漆辅料" },
    { value: 8, label: "装潢辅料" },
    { value: 9, label: "打磨辅料" },
4a34f2e3   baiyun   配件类型
182
  ];
b34403f5   baiyun   配件锁件明细
183
  
f33cc9f7   by1642146903   计划池
184
185
  /**配件类型*/
  export const planPoolTypeData = [
f64dba4f   jiangwei   fix
186
187
188
189
    { value: 11, label: "指定金额计划" },
    { value: 12, label: "最低库销比计划" },
    { value: 13, label: "指定配件计划" },
    { value: 10, label: "客户订件计划" },
f33cc9f7   by1642146903   计划池
190
191
  ];
  
b34403f5   baiyun   配件锁件明细
192
193
  export const typeReceiverObj: {[key: string]: string} = {
    '售后工单锁定': '服务',
c527848f   jiangwei   装潢零售价格系数
194
    '装潢零售锁定': '销售',
67c1c3e7   jiangwei   配件外采计划池筛选条件
195
    '调出锁定': '',
b34403f5   baiyun   配件锁件明细
196
197
198
    '': '',
  };
  export const typeSenderObj: {[key: string]: string} = {
67c1c3e7   jiangwei   配件外采计划池筛选条件
199
200
201
    '售后工单锁定': '送修人:',
    '装潢零售锁定': '下单人:',
    '调出锁定': '',
b34403f5   baiyun   配件锁件明细
202
203
    '': '',
  };
8546c12e   jiangwei   计划池导出
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
  
  export function getUrl(url: string, obj: object): string {
   if (!Object.keys(obj).length) {
    return url;
   }
    const pa: string[] = [];
    for (let k in obj) {
      if (obj[k]) {
        pa.push(`${k}=${obj[k]}`);
      }
    }
    const st = pa.join("&");
    if (st) {
      return `${url}?${st}`;
    }
    return '';
  }