业务场景:

数据隶属于区域之下,区域分为二级,分别为一级区域和二级区域,二级区域隶属于一级区域。存放该数据的数据库表,每条记录和其关联的一级区域、二级区域的id做关联。

现要将数据在前端页面统一管理,并将区域id显示为区域名称;

初始表格渲染数据的写法为:

后端接口查询数据库记录,根据数据记录关联的各个id查询对应区域数据库表的数据,在接口中将区域名称等信息返回给前端,前端直接渲染区域名称字段,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<el-table :data="overviewTableData" style="width: 100% ;" size="small"
:header-cell-style="{ background: '#F8F8F9', color: '#606266' }"
height="83vh"
v-loading="loading"
element-loading-text="拼命加载中"
@row-dblclick="overviewRowClickDispose">
<el-table-column prop="id" label="编号" width="50px" align="center">
<template slot-scope="scope">
{{scope.$index}}
</template>
</el-table-column>
<el-table-column prop="factory_id" label="分厂" align="center">
</el-table-column>
<el-table-column prop="workshop_id" label="车间" align="center">
</el-table-column>
<el-table-column prop="alarm_type_id" label="报警类型" align="center">
</el-table-column>
<el-table-column prop="name" label="报警原因" align="center">
</el-table-column>
<el-table-column label="操作" align="center">
</el-table-column>
</el-table>

面临问题:在编辑信息时,由于字段对应的是区域名称,而数据库中需要的是区域id,需要作处理,有两种方式:

  • 前端增加两个列表,存放所有区域的信息,并在渲染表格时,使用v-for、v-if,做名称匹配
  • 后端在接受的前端数据后,根据名称查询区域id

这里采用第一种方式,代码如下:

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
<el-table :data="overviewTableData" style="width: 100% ;" size="small"
:header-cell-style="{ background: '#F8F8F9', color: '#606266' }"
height="83vh"
v-loading="loading"
element-loading-text="拼命加载中"
@row-dblclick="overviewRowClickDispose">
<el-table-column prop="id" label="编号" width="50px" align="center">
<template slot-scope="scope">
{{scope.$index}}
</template>
</el-table-column>
<el-table-column prop="factory_id" label="分厂" align="center">
<template slot-scope="scope">
<span
v-for="item in factoryList"
:key="item.id"
:value="item.id"
v-if="scope.row.factory_id == item.id"
>
{{ item.company }}
</span>
</template>
</el-table-column>
<el-table-column prop="workshop_id" label="车间" align="center">
<template slot-scope="scope">
<span
v-for="item in workshopListAll"
:key="item.id"
:value="item.id"
v-if="scope.row.workshop_id == item.id"
>
{{ item.team_name }}
</span>
</template>
</el-table-column>
<el-table-column prop="alarm_type_id" label="报警类型" align="center">
<template slot-scope="scope">
<span
v-for="item in alarmTypeList"
:key="item.id"
:value="item.id"
v-if="scope.row.alarm_type_id == item.id"
>
{{ item.type_name }}
</span>
</template>
</el-table-column>
<el-table-column prop="name" label="报警原因" align="center">
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="text"
@click="overviewDelete(scope.row)">删除</el-button>
<el-button type="text"
@click="overviewUpdate(scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>