zhuoyuan.wang
2024-06-19 15ebe96f28cadec6a726c5324593a40bbf56205f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import * as api from '@/api';
/**
 *
 * @param structure target :{ name:属性名称,field:字段名称 } entity: {name:dataName,field} type 'object' || 'list'
 * @returns {[{}]}
 */
const useStructureData = (structure) => {
  const actionStructure = async (data) => {
    structure.forEach(e => {
      const target = data[e.target.name];
      if (typeof target === 'object') {
        if (target instanceof Array) {
          e.filter = Array.from(new Set(target.map(t => t[e.target.field]).filter(Boolean)));
        } else {
          e.filter = [target[e.target.field]];
        }
      }
    });
 
    const result = await Promise.all(
      structure.map(e =>
        e.filter.length ?
          api.entity.getEntitySet({
            dataName: e.entity.name,
            attachMeta: true,
            filter: `${e.entity.field} in (${e.filter.reduce((prev, cur) => `${prev},'${cur}'`, '').substring(1)})`
          }) :
          Promise.resolve({data: {entityset: []}}))
    );
 
    structure.forEach((e, i) => {
      const target = data[e.target.name];
      if (typeof target === 'object') {
        const {type} = e;
        if (target instanceof Array) {
          target.forEach(t => {
 
            if (type === 'object') {
              t[`$${e.target.field}`] = result[i].data.entityset.find(d => d[e.entity.field] === t[e.target.field]);
            }
 
            if (type === 'list') {
              t[`$${e.target.field}`] = result[i].data.entityset.filter(d => d[e.entity.field] === t[e.target.field]);
            }
 
          });
        } else {
 
          if (type === 'object') {
            target[`$${e.target.field}`] = result[i].data.entityset[0];
          }
 
          if (type === 'list') {
            target[`$${e.target.field}`] = result[i].data.entityset.filter(d => d[e.entity.field] === t[e.target.field]);
          }
 
        }
      }
    });
 
    return data;
  }
 
  return [actionStructure]
}
 
export default {
  useStructureData
};