Commit 29319cfbd8e4f3a037a7a6c1bc3aba14d998d25c
1 parent
9865dde4
设备。教师管理
Showing
7 changed files
with
402 additions
and
718 deletions
src/api/apis/apis.js
... | ... | @@ -1630,4 +1630,25 @@ export default { |
1630 | 1630 | data |
1631 | 1631 | }); |
1632 | 1632 | }, |
1633 | + //删除基站 | |
1634 | + deleteStation(data) { | |
1635 | + console.log(service({ | |
1636 | + url: setUpUrls.deleteStation, | |
1637 | + method: "POST", | |
1638 | + data | |
1639 | + })) | |
1640 | + return service({ | |
1641 | + url: setUpUrls.deleteStation, | |
1642 | + method: "POST", | |
1643 | + data | |
1644 | + }); | |
1645 | + }, | |
1646 | + //导出授课端日志 | |
1647 | + downloadDeviceLog(data) { | |
1648 | + return service({ | |
1649 | + url: setUpUrls.downloadDeviceLog, | |
1650 | + method: "POST", | |
1651 | + data | |
1652 | + }); | |
1653 | + }, | |
1633 | 1654 | }; | ... | ... |
src/api/axios.js
... | ... | @@ -101,12 +101,13 @@ service.interceptors.response.use( |
101 | 101 | } |
102 | 102 | return; |
103 | 103 | } |
104 | - Message({ | |
105 | - message: data.info || error, | |
106 | - type: "error", | |
107 | - duration: 3 * 1000, | |
108 | - }); | |
109 | - return Promise.reject(error.response); // 返回接口返回的错误信息 | |
104 | + | |
105 | + return Promise.resolve( | |
106 | + { | |
107 | + status: status, | |
108 | + info: data.info || error, | |
109 | + } | |
110 | + ); // 返回接口返回的错误信息 | |
110 | 111 | } |
111 | 112 | ); |
112 | 113 | export default service; | ... | ... |
src/api/urls/apis.js
... | ... | @@ -426,4 +426,8 @@ export default { |
426 | 426 | paperWordUpload: "/api_html/common/paper/upload", |
427 | 427 | //删除随堂问报表 |
428 | 428 | deletePaperReport: "/api_html/teaching/deletePaperReport", |
429 | + //删除基站 | |
430 | + deleteStation: "/api_html/school/manager/deleteStation", | |
431 | + //导出授课端日志 | |
432 | + downloadDeviceLog: "/api_html/school/manager/downloadDeviceLog", | |
429 | 433 | } | ... | ... |
src/assets/images/shuazi.svg
0 → 100644
1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1703748022272" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9884" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M963.54816 955.7248h-869.888l25.6 25.6v-383.06304c0-58.36288-7.77728-120.704 31.89248-169.27232 43.39712-53.12512 104.25344-50.7904 165.33504-50.7904h481.536c57.2672 0 105.06752 34.45248 129.0752 85.26848 11.0848 23.46496 10.8544 49.25952 10.8544 74.49088v443.37152c0 33.01376 51.2 33.01376 51.2 0v-383.06816c0-59.56608 4.81792-117.92896-23.86432-172.7232-38.1184-72.8064-114.02752-98.5344-190.91456-98.5344H337.65888c-54.56384 0-107.4176-3.95264-158.96576 17.85344-51.93216 21.9648-89.36448 71.43936-104.3968 124.63104-6.528 23.1168-6.23104 47.03232-6.23104 70.77376v441.06752c0 13.96224 11.64288 25.6 25.6 25.6h869.90336c33.00352-0.00512 33.00352-51.20512-0.02048-51.20512z" fill="#221714" p-id="9885"></path><path d="M121.61536 623.21152H935.59808c33.00864 0 33.00864-51.2 0-51.2H121.61024c-33.01376 0-33.01376 51.2 0.00512 51.2zM554.20928 971.0848v-217.46688c0-33.01376-51.2-33.01376-51.2 0v217.46688c0 33.01376 51.2 33.01376 51.2 0zM347.38176 971.0848v-217.46688c0-33.01376-51.2-33.01376-51.2 0v217.46688c0 33.01376 51.2 33.01376 51.2 0zM776.89856 971.0848v-217.46688c0-33.01376-51.2-33.01376-51.2 0v217.46688c0 33.01376 51.2 33.01376 51.2 0zM374.56384 348.15488V206.40768c0-86.85056 68.32128-143.40096 151.69024-143.40096 41.64096 0 78.53056 7.90016 110.61248 36.33152 30.09024 26.67008 45.77792 65.7664 45.77792 105.55392v143.26272c0 33.01888 51.2 33.01888 51.2 0 0-52.97664 2.78016-106.68544-0.60416-159.5648-6.8608-107.18208-100.0448-176.78336-202.27584-176.78336-48.03584 0-92.30336 9.23136-131.44576 38.656-41.63072 31.29856-69.25312 79.24736-74.79808 131.11296-5.85216 54.72256-1.3568 111.59552-1.3568 166.5792 0 33.01888 51.2 33.01888 51.2 0z" fill="#221714" p-id="9886"></path></svg> | |
0 | 2 | \ No newline at end of file | ... | ... |
src/views/basic/device/index.vue
... | ... | @@ -7,37 +7,16 @@ |
7 | 7 | <template slot="btns"> |
8 | 8 | <template v-if="tableData.length"> |
9 | 9 | <el-tooltip effect="dark" content="设备导出" placement="bottom"> |
10 | - <el-button | |
11 | - type="primary" | |
12 | - icon="fa fa-cloud-download" | |
13 | - size="mini" | |
14 | - plain | |
15 | - circle | |
16 | - @click="downExl" | |
17 | - ></el-button> | |
10 | + <el-button type="primary" icon="fa fa-cloud-download" size="mini" plain circle @click="downExl"></el-button> | |
18 | 11 | </el-tooltip> |
19 | 12 | </template> |
20 | 13 | <template v-if="role == 'ROLE_XUEXIAO' && type == 1"> |
21 | 14 | <el-tooltip effect="dark" content="设备导入" placement="bottom"> |
22 | - <el-button | |
23 | - type="primary" | |
24 | - icon="el-icon-upload2" | |
25 | - size="mini" | |
26 | - plain | |
27 | - circle | |
28 | - @click="diaUp = true" | |
29 | - ></el-button> | |
15 | + <el-button type="primary" icon="el-icon-upload2" size="mini" plain circle @click="diaUp = true"></el-button> | |
30 | 16 | </el-tooltip> |
31 | 17 | <el-tooltip effect="dark" content="添加基站" placement="bottom"> |
32 | - <el-button | |
33 | - type="primary" | |
34 | - icon="el-icon-receiving" | |
35 | - size="mini" | |
36 | - plain | |
37 | - circle | |
38 | - @click="addDev" | |
39 | - ></el-button> </el-tooltip | |
40 | - ></template> | |
18 | + <el-button type="primary" icon="el-icon-receiving" size="mini" plain circle @click="addDev"></el-button> | |
19 | + </el-tooltip></template> | |
41 | 20 | </template> |
42 | 21 | </back-box> |
43 | 22 | <div> |
... | ... | @@ -48,16 +27,10 @@ |
48 | 27 | <el-radio-button :label="3">授课端管理</el-radio-button> |
49 | 28 | </el-radio-group> |
50 | 29 | </div> |
51 | - <p | |
52 | - v-show="(type == 1 && stationCount) || (type == 2 && clickerCount)" | |
53 | - class="error-tips" | |
54 | - > | |
30 | + <p v-show="(type == 1 && stationCount) || (type == 2 && clickerCount)" class="error-tips"> | |
55 | 31 | 有{{ |
56 | 32 | type == 1 ? stationCount : clickerCount |
57 | - }}条设备异常信息,<router-link | |
58 | - :to="{ path: '/deviceError', query: { type: type } }" | |
59 | - >点击查看>></router-link | |
60 | - > | |
33 | + }}条设备异常信息,<router-link :to="{ path: '/deviceError', query: { type: type } }">点击查看>></router-link> | |
61 | 34 | </p> |
62 | 35 | <div class="content"> |
63 | 36 | <div v-show="type == 1"> |
... | ... | @@ -67,101 +40,39 @@ |
67 | 40 | <p class="p2">基站数量</p> |
68 | 41 | </div> |
69 | 42 | <div class="chart"> |
70 | - <pie-chart | |
71 | - id="pieChart" | |
72 | - :params="chartData" | |
73 | - @clickPieChart="clickPieChart" | |
74 | - ></pie-chart> | |
43 | + <pie-chart id="pieChart" :params="chartData" @clickPieChart="clickPieChart"></pie-chart> | |
75 | 44 | </div> |
76 | 45 | </div> |
77 | 46 | <div class="table-box"> |
78 | 47 | <div class="answer-header"> |
79 | 48 | <div class="sel-box"> |
80 | - <el-cascader | |
81 | - size="small" | |
82 | - class="sel sel2" | |
83 | - clearable | |
84 | - placeholder="选择班级" | |
85 | - v-model="query.classId" | |
86 | - :options="gradeList" | |
87 | - :props="props" | |
88 | - collapse-tags | |
89 | - :show-all-levels="false" | |
90 | - ></el-cascader> | |
91 | - <el-select | |
92 | - class="sel" | |
93 | - v-model="query.onlineStatus" | |
94 | - placeholder="选择状态" | |
95 | - @change="_QueryData(true)" | |
96 | - > | |
97 | - <el-option | |
98 | - v-for="item in statusList" | |
99 | - :key="item.value" | |
100 | - :label="item.label" | |
101 | - :value="item.value" | |
102 | - > | |
49 | + <el-cascader size="small" class="sel sel2" clearable placeholder="选择班级" v-model="query.classId" | |
50 | + :options="gradeList" :props="props" collapse-tags :show-all-levels="false"></el-cascader> | |
51 | + <el-select class="sel" v-model="query.onlineStatus" placeholder="选择状态" @change="_QueryData(true)"> | |
52 | + <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value"> | |
103 | 53 | </el-option> |
104 | 54 | </el-select> |
105 | - <el-input | |
106 | - placeholder="请输入设备编码" | |
107 | - v-model="query.sn" | |
108 | - class="input-with-select" | |
109 | - clearable | |
110 | - @keyup.enter.native="_QueryData(true)" | |
111 | - > | |
112 | - <el-button | |
113 | - slot="append" | |
114 | - icon="el-icon-search" | |
115 | - @click="_QueryData(true)" | |
116 | - ></el-button> | |
55 | + <el-input placeholder="请输入设备编码" v-model="query.sn" class="input-with-select" clearable | |
56 | + @keyup.enter.native="_QueryData(true)"> | |
57 | + <el-button slot="append" icon="el-icon-search" @click="_QueryData(true)"></el-button> | |
117 | 58 | </el-input> |
118 | - <el-button class="serach-box" round @click="_QueryData(true)" | |
119 | - >筛选</el-button | |
120 | - > | |
59 | + <el-button class="serach-box" round @click="_QueryData(true)">筛选</el-button> | |
121 | 60 | </div> |
122 | 61 | </div> |
123 | 62 | <p class="loading" v-if="!tableData.length && loading"> |
124 | 63 | 加载中<i class="el-icon-loading"></i> |
125 | 64 | </p> |
126 | 65 | <el-table v-else :data="tableData" border style="width: 100%"> |
127 | - <el-table-column | |
128 | - prop="sn" | |
129 | - label="设备编码" | |
130 | - align="center" | |
131 | - ></el-table-column> | |
132 | - <el-table-column | |
133 | - prop="frequency" | |
134 | - label="频点" | |
135 | - align="center" | |
136 | - width="60" | |
137 | - ></el-table-column> | |
138 | - <el-table-column | |
139 | - prop="pairingCode" | |
140 | - label="配对码" | |
141 | - align="center" | |
142 | - ></el-table-column> | |
143 | - <el-table-column | |
144 | - v-if="role == 'ROLE_JITUAN'" | |
145 | - prop="schoolName" | |
146 | - label="学校" | |
147 | - align="center" | |
148 | - ></el-table-column> | |
149 | - <el-table-column | |
150 | - v-if="role == 'ROLE_JITUAN'" | |
151 | - prop="gradeName" | |
152 | - label="年级" | |
153 | - align="center" | |
154 | - ><template slot-scope="scoped"> | |
66 | + <el-table-column prop="sn" label="设备编码" align="center"></el-table-column> | |
67 | + <el-table-column prop="frequency" label="频点" align="center" width="60"></el-table-column> | |
68 | + <el-table-column prop="pairingCode" label="配对码" align="center"></el-table-column> | |
69 | + <el-table-column v-if="role == 'ROLE_JITUAN'" prop="schoolName" label="学校" align="center"></el-table-column> | |
70 | + <el-table-column prop="gradeName" label="年级" align="center"><template slot-scope="scoped"> | |
155 | 71 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
156 | 72 | {{ item.gradeName }} |
157 | 73 | </p> |
158 | - </template></el-table-column | |
159 | - > | |
160 | - <el-table-column | |
161 | - prop="roomName" | |
162 | - label="所在教室" | |
163 | - align="center" | |
164 | - ></el-table-column> | |
74 | + </template></el-table-column> | |
75 | + <el-table-column prop="roomName" label="所在教室" align="center"></el-table-column> | |
165 | 76 | <el-table-column label="关联班级" align="center"> |
166 | 77 | <template slot-scope="scoped"> |
167 | 78 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
... | ... | @@ -169,60 +80,31 @@ |
169 | 80 | </p> |
170 | 81 | </template> |
171 | 82 | </el-table-column> |
172 | - <el-table-column | |
173 | - prop="otaVersionName" | |
174 | - label="固件版本号" | |
175 | - align="center" | |
176 | - ></el-table-column> | |
177 | - <el-table-column | |
178 | - prop="onlineTime" | |
179 | - label="最近上报" | |
180 | - align="center" | |
181 | - width="160" | |
182 | - ></el-table-column> | |
183 | - <el-table-column | |
184 | - prop="createdTime" | |
185 | - label="创建时间" | |
186 | - align="center" | |
187 | - width="160" | |
188 | - ></el-table-column> | |
189 | - <el-table-column label="状态" align="center" width="60" | |
190 | - ><template slot-scope="scope"> | |
83 | + <el-table-column prop="otaVersionName" label="固件版本号" align="center"></el-table-column> | |
84 | + <el-table-column prop="onlineTime" label="最近上报" align="center" width="160"></el-table-column> | |
85 | + <el-table-column prop="createdTime" label="创建时间" align="center" width="160"></el-table-column> | |
86 | + <el-table-column label="状态" align="center" width="60"><template slot-scope="scope"> | |
191 | 87 | {{ |
192 | 88 | scope.row.onlineStatus == 1 |
193 | - ? "在线" | |
194 | - : scope.row.onlineStatus == 2 | |
89 | + ? "在线" | |
90 | + : scope.row.onlineStatus == 2 | |
195 | 91 | ? "异常" |
196 | 92 | : "离线" |
197 | 93 | }} |
198 | - </template></el-table-column | |
199 | - > | |
200 | - <el-table-column label="操作" align="center" | |
201 | - ><template slot-scope="scoped"> | |
202 | - <el-tooltip | |
203 | - effect="dark" | |
204 | - v-if="role != 'ROLE_JITUAN'" | |
205 | - content="修改基站" | |
206 | - placement="top" | |
207 | - > | |
208 | - <el-button | |
209 | - type="primary" | |
210 | - circle | |
211 | - size="mini" | |
212 | - icon="fa fa-edit" | |
213 | - @click="edit(scoped.row)" | |
214 | - ></el-button> | |
94 | + </template></el-table-column> | |
95 | + <el-table-column label="操作" align="center" width="130"><template slot-scope="scoped"> | |
96 | + <el-tooltip effect="dark" v-if="role != 'ROLE_JITUAN'" content="修改基站" placement="top"> | |
97 | + <el-button type="primary" circle size="mini" icon="fa fa-edit" @click="edit(scoped.row)"></el-button> | |
215 | 98 | </el-tooltip> |
216 | 99 | <el-tooltip effect="dark" content="日志" placement="top"> |
217 | - <el-button | |
218 | - type="warning" | |
219 | - circle | |
220 | - size="mini" | |
221 | - icon="fa fa-eye" | |
222 | - @click="linkTo(scoped.row, 1)" | |
223 | - ></el-button> | |
224 | - </el-tooltip> </template | |
225 | - ></el-table-column> | |
100 | + <el-button type="warning" circle size="mini" icon="fa fa-eye" | |
101 | + @click="linkTo(scoped.row, 1)"></el-button> | |
102 | + </el-tooltip> | |
103 | + <el-popconfirm title="确定删除吗?" @confirm="delStation(scoped.row)"> | |
104 | + <el-button class="del" slot="reference" type="danger" circle size="mini" | |
105 | + icon="fa fa-trash-o"></el-button> | |
106 | + </el-popconfirm> | |
107 | + </template></el-table-column> | |
226 | 108 | </el-table> |
227 | 109 | </div> |
228 | 110 | </div> |
... | ... | @@ -233,151 +115,61 @@ |
233 | 115 | <p class="p2">答题器数量</p> |
234 | 116 | </div> |
235 | 117 | <div class="chart"> |
236 | - <scatter-chart | |
237 | - id="scatterChart" | |
238 | - :params="chartData2" | |
239 | - @clickScatterChart="clickScatterChart" | |
240 | - ></scatter-chart> | |
118 | + <scatter-chart id="scatterChart" :params="chartData2" | |
119 | + @clickScatterChart="clickScatterChart"></scatter-chart> | |
241 | 120 | </div> |
242 | 121 | </div> |
243 | 122 | <div class="table-box"> |
244 | 123 | <div class="answer-header"> |
245 | 124 | <div class="sel-box"> |
246 | - <el-cascader | |
247 | - size="small" | |
248 | - class="sel sel2" | |
249 | - clearable | |
250 | - placeholder="选择班级" | |
251 | - v-model="query.classId" | |
252 | - :options="gradeList" | |
253 | - :props="props" | |
254 | - collapse-tags | |
255 | - :show-all-levels="false" | |
256 | - ></el-cascader> | |
257 | - <el-select | |
258 | - class="sel" | |
259 | - v-model="query.type" | |
260 | - placeholder="选择状态" | |
261 | - @change="_QueryData(true)" | |
262 | - > | |
263 | - <el-option | |
264 | - v-for="item in typeList" | |
265 | - :key="item.value" | |
266 | - :label="item.label" | |
267 | - :value="item.value" | |
268 | - > | |
125 | + <el-cascader size="small" class="sel sel2" clearable placeholder="选择班级" v-model="query.classId" | |
126 | + :options="gradeList" :props="props" collapse-tags :show-all-levels="false"></el-cascader> | |
127 | + <el-select class="sel" v-model="query.type" placeholder="选择状态" @change="_QueryData(true)"> | |
128 | + <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value"> | |
269 | 129 | </el-option> |
270 | 130 | </el-select> |
271 | - <el-input | |
272 | - placeholder="请输入设备编码" | |
273 | - v-model="query.sn" | |
274 | - class="input-with-select" | |
275 | - clearable | |
276 | - @input.native="query.studentName = ''" | |
277 | - @keyup.enter.native="_QueryData(true)" | |
278 | - > | |
279 | - <el-button | |
280 | - slot="append" | |
281 | - icon="el-icon-search" | |
282 | - @click="_QueryData(true)" | |
283 | - ></el-button> | |
131 | + <el-input placeholder="请输入设备编码" v-model="query.sn" class="input-with-select" clearable | |
132 | + @input.native="query.studentName = ''" @keyup.enter.native="_QueryData(true)"> | |
133 | + <el-button slot="append" icon="el-icon-search" @click="_QueryData(true)"></el-button> | |
284 | 134 | </el-input> |
285 | - <el-input | |
286 | - placeholder="学生姓名" | |
287 | - v-model="query.studentName" | |
288 | - class="input-with-select" | |
289 | - clearable | |
290 | - @input.native="query.sn = ''" | |
291 | - @keyup.enter.native="_QueryData(true)" | |
292 | - > | |
293 | - <el-button | |
294 | - slot="append" | |
295 | - icon="el-icon-search" | |
296 | - @click="_QueryData(true)" | |
297 | - ></el-button> | |
135 | + <el-input placeholder="学生姓名" v-model="query.studentName" class="input-with-select" clearable | |
136 | + @input.native="query.sn = ''" @keyup.enter.native="_QueryData(true)"> | |
137 | + <el-button slot="append" icon="el-icon-search" @click="_QueryData(true)"></el-button> | |
298 | 138 | </el-input> |
299 | - <el-button class="serach-box" round @click="_QueryData(true)" | |
300 | - >筛选</el-button | |
301 | - > | |
139 | + <el-button class="serach-box" round @click="_QueryData(true)">筛选</el-button> | |
302 | 140 | </div> |
303 | 141 | </div> |
304 | 142 | <p class="loading" v-if="!tableData.length && loading"> |
305 | 143 | 加载中<i class="el-icon-loading"></i> |
306 | 144 | </p> |
307 | 145 | <el-table v-else :data="tableData" border style="width: 100%"> |
308 | - <el-table-column | |
309 | - prop="sn" | |
310 | - label="设备编码" | |
311 | - align="center" | |
312 | - ></el-table-column> | |
313 | - <el-table-column label="学生信息" align="center" | |
314 | - ><template slot-scope="scoped" | |
315 | - ><p | |
316 | - v-for="(item, index) in scoped.row.studentList" | |
317 | - :key="index" | |
318 | - > | |
146 | + <el-table-column prop="sn" label="设备编码" align="center"></el-table-column> | |
147 | + <el-table-column label="学生信息" align="center"><template slot-scope="scoped"> | |
148 | + <p v-for="(item, index) in scoped.row.studentList" :key="index"> | |
319 | 149 | {{ item.studentName }} |
320 | - </p></template | |
321 | - ></el-table-column | |
322 | - > | |
323 | - <el-table-column | |
324 | - v-if="role == 'ROLE_JITUAN'" | |
325 | - prop="schoolName" | |
326 | - label="学校" | |
327 | - align="center" | |
328 | - ></el-table-column> | |
329 | - <el-table-column | |
330 | - v-if="role == 'ROLE_JITUAN'" | |
331 | - prop="gradeName" | |
332 | - label="年级" | |
333 | - align="center" | |
334 | - width="120" | |
335 | - ><template slot-scope="scoped"> | |
150 | + </p> | |
151 | + </template></el-table-column> | |
152 | + <el-table-column v-if="role == 'ROLE_JITUAN'" prop="schoolName" label="学校" align="center"></el-table-column> | |
153 | + <el-table-column v-if="role == 'ROLE_JITUAN'" prop="gradeName" label="年级" align="center" | |
154 | + width="120"><template slot-scope="scoped"> | |
336 | 155 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
337 | 156 | {{ item.gradeName }} |
338 | 157 | </p> |
339 | - </template></el-table-column | |
340 | - > | |
341 | - <el-table-column | |
342 | - prop="class" | |
343 | - label="关联班级" | |
344 | - align="center" | |
345 | - width="160" | |
346 | - > | |
158 | + </template></el-table-column> | |
159 | + <el-table-column prop="class" label="关联班级" align="center" width="160"> | |
347 | 160 | <template slot-scope="scoped"> |
348 | 161 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
349 | 162 | {{ item.className }} |
350 | 163 | </p> |
351 | - </template></el-table-column | |
352 | - > | |
353 | - <!-- <el-table-column | |
354 | - prop="pairingCode" | |
355 | - label="配对码" | |
356 | - align="center" | |
357 | - ></el-table-column> --> | |
358 | - <!-- <el-table-column | |
359 | - prop="answerTimes" | |
360 | - label="答题次数" | |
361 | - align="center" | |
362 | - ></el-table-column> --> | |
363 | - <el-table-column | |
364 | - prop="latestReportTime" | |
365 | - label="最后答题时间" | |
366 | - align="center" | |
367 | - width="160" | |
368 | - ></el-table-column> | |
369 | - <el-table-column label="操作" align="center" width="80" | |
370 | - ><template slot-scope="scoped"> | |
164 | + </template></el-table-column> | |
165 | + <el-table-column prop="pairingCode" label="配对码" align="center"></el-table-column> | |
166 | + <el-table-column prop="answerTimes" label="答题次数" align="center"></el-table-column> | |
167 | + <el-table-column prop="latestReportTime" label="最后答题时间" align="center" width="160"></el-table-column> | |
168 | + <el-table-column label="操作" align="center" width="80"><template slot-scope="scoped"> | |
371 | 169 | <el-tooltip effect="dark" content="日志" placement="top"> |
372 | - <el-button | |
373 | - type="warning" | |
374 | - circle | |
375 | - size="mini" | |
376 | - icon="fa fa-eye" | |
377 | - @click="linkTo(scoped.row, 2)" | |
378 | - ></el-button> | |
379 | - </el-tooltip> </template | |
380 | - ></el-table-column> | |
170 | + <el-button type="warning" circle size="mini" icon="fa fa-eye" | |
171 | + @click="linkTo(scoped.row, 2)"></el-button> | |
172 | + </el-tooltip> </template></el-table-column> | |
381 | 173 | </el-table> |
382 | 174 | </div> |
383 | 175 | </div> |
... | ... | @@ -385,27 +177,12 @@ |
385 | 177 | <div class="table-box"> |
386 | 178 | <div class="answer-header"> |
387 | 179 | <div class="sel-box"> |
388 | - <el-cascader | |
389 | - size="small" | |
390 | - class="sel sel2" | |
391 | - clearable | |
392 | - placeholder="选择班级" | |
393 | - v-model="query.classId" | |
394 | - :options="gradeList" | |
395 | - :props="props" | |
396 | - collapse-tags | |
397 | - :show-all-levels="false" | |
398 | - @change="_QueryData(false)" | |
399 | - ></el-cascader> | |
400 | - <span class="sel" | |
401 | - >共选择{{ selectionTabIds.length }}个授课端</span | |
402 | - > | |
403 | - <el-button plan round @click="autoUpDate(false)" | |
404 | - >开启自动更新</el-button | |
405 | - > | |
406 | - <el-button plan round @click="stopUpdate(false)" | |
407 | - >停止自动更新</el-button | |
408 | - > | |
180 | + <el-cascader size="small" class="sel sel2" clearable placeholder="选择班级" v-model="query.classId" | |
181 | + :options="gradeList" :props="props" collapse-tags :show-all-levels="false" | |
182 | + @change="_QueryData(false)"></el-cascader> | |
183 | + <span class="sel">共选择{{ selectionTabIds.length }}个授课端</span> | |
184 | + <el-button plan round @click="autoUpDate(false)">开启自动更新</el-button> | |
185 | + <el-button plan round @click="stopUpdate(false)">停止自动更新</el-button> | |
409 | 186 | </div> |
410 | 187 | <p class="upgrade-all" v-if="this.role == 'ROLE_XUEXIAO'"> |
411 | 188 | <span>全校更新:</span> |
... | ... | @@ -416,102 +193,49 @@ |
416 | 193 | <p class="loading" v-if="!tableData.length && loading"> |
417 | 194 | 加载中<i class="el-icon-loading"></i> |
418 | 195 | </p> |
419 | - <el-table | |
420 | - v-else | |
421 | - ref="multipleTable" | |
422 | - :data="tableData" | |
423 | - border | |
424 | - style="width: 100%" | |
425 | - @selection-change="handleSelectionChange" | |
426 | - > | |
196 | + <el-table v-else ref="multipleTable" :data="tableData" border style="width: 100%" | |
197 | + @selection-change="handleSelectionChange"> | |
427 | 198 | <el-table-column type="selection" width="55"></el-table-column> |
428 | - <el-table-column | |
429 | - prop="sn" | |
430 | - label="设备编码" | |
431 | - align="center" | |
432 | - ></el-table-column> | |
433 | - <el-table-column | |
434 | - prop="class" | |
435 | - label="关联班级" | |
436 | - align="center" | |
437 | - width="100" | |
438 | - ><template slot-scope="scoped"> | |
199 | + <!-- <el-table-column prop="sn" label="设备编码" align="center"></el-table-column> --> | |
200 | + <el-table-column prop="class" label="关联班级" align="center" width="100"><template slot-scope="scoped"> | |
439 | 201 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
440 | 202 | {{ item.className }} |
441 | 203 | </p> |
442 | - </template></el-table-column | |
443 | - > | |
444 | - <el-table-column | |
445 | - v-if="role == 'ROLE_JITUAN'" | |
446 | - prop="schoolName" | |
447 | - label="学校" | |
448 | - align="center" | |
449 | - ></el-table-column> | |
450 | - <el-table-column | |
451 | - v-if="role == 'ROLE_JITUAN'" | |
452 | - prop="gradeName" | |
453 | - label="年级" | |
454 | - align="center" | |
455 | - width="80" | |
456 | - ><template slot-scope="scoped"> | |
204 | + </template></el-table-column> | |
205 | + <el-table-column v-if="role == 'ROLE_JITUAN'" prop="schoolName" label="学校" align="center"></el-table-column> | |
206 | + <el-table-column v-if="role == 'ROLE_JITUAN'" prop="gradeName" label="年级" align="center" | |
207 | + width="80"><template slot-scope="scoped"> | |
457 | 208 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
458 | 209 | {{ item.gradeName }} |
459 | 210 | </p> |
460 | - </template></el-table-column | |
461 | - > | |
462 | - <el-table-column | |
463 | - prop="lastUpdateTime" | |
464 | - label="最近更新" | |
465 | - align="center" | |
466 | - ></el-table-column> | |
467 | - <el-table-column | |
468 | - prop="osInfo" | |
469 | - label="软件系统" | |
470 | - align="center" | |
471 | - ></el-table-column> | |
472 | - <el-table-column | |
473 | - prop="hardwareInfo" | |
474 | - label="硬件环境" | |
475 | - align="center" | |
476 | - ></el-table-column> | |
477 | - <el-table-column | |
478 | - prop="otaVersionName" | |
479 | - label="版本号" | |
480 | - align="center" | |
481 | - width="80" | |
482 | - ></el-table-column> | |
483 | - <el-table-column label="状态" align="center" width="80" | |
484 | - ><template slot-scope="scope"> | |
211 | + </template></el-table-column> | |
212 | + <el-table-column prop="lastUpdateTime" label="最近更新" align="center"></el-table-column> | |
213 | + <el-table-column prop="osInfo" label="软件系统" align="center"></el-table-column> | |
214 | + <el-table-column prop="hardwareInfo" label="硬件环境" align="center"></el-table-column> | |
215 | + <el-table-column prop="otaVersionName" label="版本号" align="center" width="80"></el-table-column> | |
216 | + <el-table-column label="状态" align="center" width="80"><template slot-scope="scope"> | |
485 | 217 | {{ |
486 | 218 | scope.row.onlineStatus == 1 |
487 | - ? "在线" | |
488 | - : scope.row.onlineStatus == 2 | |
219 | + ? "在线" | |
220 | + : scope.row.onlineStatus == 2 | |
489 | 221 | ? "异常" |
490 | 222 | : "离线" |
491 | 223 | }} |
492 | - </template></el-table-column | |
493 | - > | |
494 | - <el-table-column label="自动更新" align="center" width="100" | |
495 | - ><template slot-scope="scoped"> | |
496 | - <el-switch | |
497 | - v-model="scoped.row.upgradeFlag" | |
498 | - @change="changeUpdate($event, scoped.row, this)" | |
499 | - > | |
500 | - </el-switch> </template | |
501 | - ></el-table-column> | |
224 | + </template></el-table-column> | |
225 | + <el-table-column label="日志记录" align="center" width="80"> | |
226 | + <template slot-scope="scope"> | |
227 | + <el-link type="primary" @click="downloadDeviceLog(scope.row.id)">下载</el-link> | |
228 | + </template> | |
229 | + </el-table-column> | |
230 | + <el-table-column label="自动更新" align="center" width="100"><template slot-scope="scoped"> | |
231 | + <el-switch v-model="scoped.row.upgradeFlag" @change="changeUpdate($event, scoped.row, this)"> | |
232 | + </el-switch> </template></el-table-column> | |
502 | 233 | </el-table> |
503 | 234 | </div> |
504 | 235 | </div> |
505 | 236 | <div class="pagination-box"> |
506 | - <el-pagination | |
507 | - small="" | |
508 | - layout="total,prev, pager, next" | |
509 | - :hide-on-single-page="true" | |
510 | - :total="total" | |
511 | - @current-change="changePage" | |
512 | - :current-page="page" | |
513 | - :page-size="size" | |
514 | - > | |
237 | + <el-pagination small="" layout="total,prev, pager, next" :hide-on-single-page="true" :total="total" | |
238 | + @current-change="changePage" :current-page="page" :page-size="size"> | |
515 | 239 | </el-pagination> |
516 | 240 | </div> |
517 | 241 | </div> |
... | ... | @@ -527,75 +251,33 @@ |
527 | 251 | <el-button @click="diaUp = false">取 消</el-button> |
528 | 252 | </div> |
529 | 253 | </el-dialog> |
530 | - <el-dialog :close-on-click-modal="false" | |
531 | - :title="isAdd ? '添加基站' : '修改基站'" | |
532 | - :visible.sync="diaAnswerEqu" | |
533 | - width="400" | |
534 | - > | |
254 | + <el-dialog :close-on-click-modal="false" :title="isAdd ? '添加基站' : '修改基站'" :visible.sync="diaAnswerEqu" width="400"> | |
535 | 255 | <el-form ref="forms" :model="form" :rules="formRules" label-width="140px"> |
536 | 256 | <el-form-item label="设备编码:" prop="sn"> |
537 | - <el-col :span="16" | |
538 | - ><el-input | |
539 | - type="text" | |
540 | - placeholder="输入设备编码" | |
541 | - v-model.trim="form.sn" | |
542 | - maxlength="30" | |
543 | - size="45" | |
544 | - show-word-limit | |
545 | - :disabled="!isAdd" | |
546 | - > | |
547 | - </el-input | |
548 | - ></el-col> | |
257 | + <el-col :span="16"><el-input type="text" placeholder="输入设备编码" v-model.trim="form.sn" maxlength="30" size="45" | |
258 | + show-word-limit :disabled="!isAdd"> | |
259 | + </el-input></el-col> | |
549 | 260 | </el-form-item> |
550 | 261 | <el-form-item label="频点:" prop="frequency"> |
551 | - <el-col :span="16" | |
552 | - ><el-input | |
553 | - type="text" | |
554 | - placeholder="输入频点" | |
555 | - v-model.trim="form.frequency" | |
556 | - maxlength="30" | |
557 | - size="45" | |
558 | - show-word-limit | |
559 | - > | |
560 | - </el-input | |
561 | - ></el-col> | |
262 | + <el-col :span="16"><el-input type="text" placeholder="输入频点" v-model.trim="form.frequency" maxlength="30" | |
263 | + size="45" show-word-limit> | |
264 | + </el-input></el-col> | |
562 | 265 | </el-form-item> |
563 | 266 | <el-form-item label="配对码:" prop="pairingCode"> |
564 | - <el-col :span="16" | |
565 | - ><el-input | |
566 | - type="text" | |
567 | - placeholder="输入配对码" | |
568 | - v-model.trim="form.pairingCode" | |
569 | - maxlength="30" | |
570 | - size="45" | |
571 | - show-word-limit | |
572 | - > | |
573 | - </el-input | |
574 | - ></el-col> | |
267 | + <el-col :span="16"><el-input type="text" placeholder="输入配对码" v-model.trim="form.pairingCode" maxlength="30" | |
268 | + size="45" show-word-limit> | |
269 | + </el-input></el-col> | |
575 | 270 | </el-form-item> |
576 | 271 | <el-form-item label="选择班级:" prop="classIds"> |
577 | 272 | <el-col :span="16"> |
578 | - <el-cascader | |
579 | - class="sel" | |
580 | - clearable | |
581 | - v-model="form.classIds" | |
582 | - :options="gradeList" | |
583 | - :show-all-levels="false" | |
584 | - ></el-cascader> | |
273 | + <el-cascader class="sel" clearable v-model="form.classIds" :options="gradeList" | |
274 | + :show-all-levels="false"></el-cascader> | |
585 | 275 | </el-col> |
586 | 276 | </el-form-item> |
587 | 277 | <el-form-item label="所在教室:"> |
588 | - <el-col :span="16" | |
589 | - ><el-input | |
590 | - type="text" | |
591 | - placeholder="输入所在教室" | |
592 | - v-model.trim="form.roomName" | |
593 | - maxlength="30" | |
594 | - size="45" | |
595 | - show-word-limit | |
596 | - > | |
597 | - </el-input | |
598 | - ></el-col> | |
278 | + <el-col :span="16"><el-input type="text" placeholder="输入所在教室" v-model.trim="form.roomName" maxlength="30" | |
279 | + size="45" show-word-limit> | |
280 | + </el-input></el-col> | |
599 | 281 | </el-form-item> |
600 | 282 | </el-form> |
601 | 283 | <div class="dialog-footer" slot="footer"> |
... | ... | @@ -800,6 +482,17 @@ export default { |
800 | 482 | }, |
801 | 483 | }); |
802 | 484 | }, |
485 | + async delStation(obj) { | |
486 | + const { status, info } = await this.$request.deleteStation({ | |
487 | + id: obj.id | |
488 | + }); | |
489 | + if (status === 0) { | |
490 | + this._QueryData(false); | |
491 | + this.$message.success(info); | |
492 | + } else { | |
493 | + this.$message.error(info); | |
494 | + } | |
495 | + }, | |
803 | 496 | clickPieChart(obj) { |
804 | 497 | this.query.onlineStatus = |
805 | 498 | obj.name == "在线" ? 1 : obj.name == "离线" ? 0 : 2; |
... | ... | @@ -813,14 +506,14 @@ export default { |
813 | 506 | obj.name == "1日内" |
814 | 507 | ? 1 |
815 | 508 | : obj.name == "3日内" |
816 | - ? 2 | |
817 | - : obj.name == "7日内" | |
818 | - ? 3 | |
819 | - : obj.name == "1月内" | |
820 | - ? 4 | |
821 | - : obj.name == "3月内" | |
822 | - ? 5 | |
823 | - : 6; | |
509 | + ? 2 | |
510 | + : obj.name == "7日内" | |
511 | + ? 3 | |
512 | + : obj.name == "1月内" | |
513 | + ? 4 | |
514 | + : obj.name == "3月内" | |
515 | + ? 5 | |
516 | + : 6; | |
824 | 517 | this.query.sn = ""; |
825 | 518 | this.query.classId = []; |
826 | 519 | this.page = 1; |
... | ... | @@ -865,7 +558,7 @@ export default { |
865 | 558 | if (data && !data.code) { |
866 | 559 | this._QueryData(false); |
867 | 560 | this.selectionTabIds = []; |
868 | - this.$message.success(this.upgradeFlag?"开启自动更新成功":"关闭/停止自动更新成功"); | |
561 | + this.$message.success(this.upgradeFlag ? "开启自动更新成功" : "关闭/停止自动更新成功"); | |
869 | 562 | } else { |
870 | 563 | this.$message.error(data.info); |
871 | 564 | } |
... | ... | @@ -931,6 +624,20 @@ export default { |
931 | 624 | this.$message.error(data.info); |
932 | 625 | } |
933 | 626 | }, |
627 | + // 导出授课端日志 | |
628 | + async downloadDeviceLog(id) { | |
629 | + let data = await this.$request.downloadDeviceLog({ | |
630 | + id: id, | |
631 | + }); | |
632 | + if (data) { | |
633 | + let blob = new Blob([data], { | |
634 | + type: "application/vnd.ms-excel;charset=utf-8", | |
635 | + }); | |
636 | + downloadFile(`基站模版.xlsx`, blob); | |
637 | + } else { | |
638 | + this.$message.error("下载失败"); | |
639 | + } | |
640 | + }, | |
934 | 641 | async downExcel() { |
935 | 642 | let data = await this.$request.stationTemplate({ |
936 | 643 | id: this.id, |
... | ... | @@ -944,8 +651,8 @@ export default { |
944 | 651 | this.$message.error("下载失败"); |
945 | 652 | } |
946 | 653 | }, |
654 | + //报表导出 | |
947 | 655 | async downExl() { |
948 | - //报表导出 | |
949 | 656 | if (this.exportLoading == true) return; |
950 | 657 | let query = this.setQuery(); |
951 | 658 | const exportDevice = |
... | ... | @@ -967,8 +674,8 @@ export default { |
967 | 674 | this.type == 1 |
968 | 675 | ? "基站管理报表.xlsx" |
969 | 676 | : this.type == 2 |
970 | - ? "答题器报表.xlsx" | |
971 | - : "授课端报表.xlsx"; | |
677 | + ? "答题器报表.xlsx" | |
678 | + : "授课端报表.xlsx"; | |
972 | 679 | downloadFile(txt, blob); |
973 | 680 | } else { |
974 | 681 | this.$message.error(data.info); |
... | ... | @@ -1079,8 +786,8 @@ export default { |
1079 | 786 | item.onlineStatus == "1" |
1080 | 787 | ? "在线" |
1081 | 788 | : item.onlineStatus == 0 |
1082 | - ? "离线" | |
1083 | - : "异常", | |
789 | + ? "离线" | |
790 | + : "异常", | |
1084 | 791 | value: item.total, |
1085 | 792 | rate: item.rate, |
1086 | 793 | }; |
... | ... | @@ -1105,14 +812,14 @@ export default { |
1105 | 812 | item.type == 1 |
1106 | 813 | ? "1日内" |
1107 | 814 | : item.type == 2 |
1108 | - ? "3日内" | |
1109 | - : item.type == 3 | |
1110 | - ? "7日内" | |
1111 | - : item.type == 4 | |
1112 | - ? "1月内" | |
1113 | - : item.type == 5 | |
1114 | - ? "3月内" | |
1115 | - : "3月以上", | |
815 | + ? "3日内" | |
816 | + : item.type == 3 | |
817 | + ? "7日内" | |
818 | + : item.type == 4 | |
819 | + ? "1月内" | |
820 | + : item.type == 5 | |
821 | + ? "3月内" | |
822 | + : "3月以上", | |
1116 | 823 | count: item.total, |
1117 | 824 | value: item.rate * 100, |
1118 | 825 | }; |
... | ... | @@ -1276,39 +983,52 @@ export default { |
1276 | 983 | height: 100%; |
1277 | 984 | overflow-y: auto; |
1278 | 985 | } |
986 | + | |
1279 | 987 | .tab-box { |
1280 | 988 | padding: 20px 0 12px; |
1281 | 989 | } |
990 | + | |
1282 | 991 | .down { |
1283 | 992 | padding: 0 0 16px 20px; |
1284 | 993 | } |
994 | + | |
1285 | 995 | .error-tips { |
1286 | 996 | margin-bottom: 12px; |
1287 | 997 | } |
998 | +.del{ | |
999 | + margin-left: 10px; | |
1000 | +} | |
1001 | + | |
1288 | 1002 | .content { |
1289 | 1003 | background: #f8f8f8; |
1290 | 1004 | border: 1px solid #e2e2e2; |
1291 | 1005 | border-radius: 10px; |
1292 | 1006 | overflow: hidden; |
1007 | + | |
1293 | 1008 | :deep(.fa-edit) { |
1294 | 1009 | width: 12px; |
1295 | 1010 | height: 12px; |
1011 | + | |
1296 | 1012 | &::before { |
1297 | 1013 | margin-left: 2px; |
1298 | 1014 | } |
1299 | 1015 | } |
1300 | - :deep(.fa-eye) { | |
1016 | + | |
1017 | + :deep(.fa) { | |
1301 | 1018 | width: 12px; |
1302 | 1019 | height: 12px; |
1020 | + | |
1303 | 1021 | &::before { |
1304 | 1022 | margin-left: 1px; |
1305 | 1023 | } |
1306 | 1024 | } |
1025 | + | |
1307 | 1026 | .chart-box { |
1308 | 1027 | display: flex; |
1309 | 1028 | overflow: hidden; |
1310 | 1029 | height: 240px; |
1311 | 1030 | border-bottom: 0.5px solid #e2e2e2; |
1031 | + | |
1312 | 1032 | .device-num { |
1313 | 1033 | width: 280px; |
1314 | 1034 | border-right: 0.5px solid #e2e2e2; |
... | ... | @@ -1316,26 +1036,32 @@ export default { |
1316 | 1036 | flex-direction: column; |
1317 | 1037 | justify-content: center; |
1318 | 1038 | align-items: center; |
1039 | + | |
1319 | 1040 | .p1 { |
1320 | 1041 | font-size: 28px; |
1321 | 1042 | } |
1322 | 1043 | } |
1044 | + | |
1323 | 1045 | .chart { |
1324 | 1046 | flex: 1; |
1325 | 1047 | height: 100%; |
1326 | 1048 | } |
1327 | 1049 | } |
1050 | + | |
1328 | 1051 | .table-box { |
1329 | 1052 | padding: 20px 20px 0; |
1053 | + | |
1330 | 1054 | .loading { |
1331 | 1055 | text-align: center; |
1332 | 1056 | line-height: 36px; |
1333 | 1057 | font-size: 16px; |
1334 | 1058 | color: #666; |
1335 | 1059 | } |
1060 | + | |
1336 | 1061 | .answer-header { |
1337 | 1062 | padding: 0; |
1338 | 1063 | margin-bottom: 12px; |
1064 | + | |
1339 | 1065 | .upgrade-all { |
1340 | 1066 | display: flex; |
1341 | 1067 | align-items: center; |
... | ... | @@ -1343,11 +1069,14 @@ export default { |
1343 | 1069 | } |
1344 | 1070 | } |
1345 | 1071 | } |
1072 | + | |
1346 | 1073 | .answer-header .sel-box .input-with-select { |
1347 | 1074 | margin-right: 20px; |
1075 | + | |
1348 | 1076 | :deep(.el-input__suffix) { |
1349 | 1077 | right: -5px; |
1350 | 1078 | } |
1079 | + | |
1351 | 1080 | :deep(.el-button) { |
1352 | 1081 | padding: 12px 16px 12px 10px; |
1353 | 1082 | } | ... | ... |
src/views/basic/device/log.vue
... | ... | @@ -286,7 +286,7 @@ export default { |
286 | 286 | for (let key in this.query) { |
287 | 287 | if (this.query[key] != "") { |
288 | 288 | if (key == "day" || key == "startDay" || key == "endDay") { |
289 | - query[key] = this.query[key].split("-").join(""); | |
289 | + query[key] = this.query[key]?.split("-").join(""); | |
290 | 290 | } else { |
291 | 291 | query[key] = this.query[key]; |
292 | 292 | } | ... | ... |
src/views/basic/setUp/teacher.vue
... | ... | @@ -6,93 +6,41 @@ |
6 | 6 | </template> |
7 | 7 | <template slot="btns" v-if="!code"> |
8 | 8 | <el-tooltip effect="dark" content="导入教师名单" placement="bottom"> |
9 | - <el-button | |
10 | - type="primary" | |
11 | - icon="el-icon-upload2" | |
12 | - size="mini" | |
13 | - plain | |
14 | - circle | |
15 | - @click="diaUp = true" | |
16 | - ></el-button> | |
9 | + <el-button type="primary" icon="el-icon-upload2" size="mini" plain circle @click="diaUp = true"></el-button> | |
17 | 10 | </el-tooltip> |
18 | 11 | <el-tooltip effect="dark" content="导出教师名单" placement="bottom"> |
19 | - <el-button | |
20 | - type="primary" | |
21 | - icon="el-icon-download" | |
22 | - size="mini" | |
23 | - plain | |
24 | - circle | |
25 | - @click="exportTeacherExl" | |
26 | - ></el-button> | |
12 | + <el-button type="primary" icon="el-icon-download" size="mini" plain circle | |
13 | + @click="exportTeacherExl"></el-button> | |
27 | 14 | </el-tooltip> |
28 | 15 | <el-tooltip effect="dark" content="添加教师" placement="bottom"> |
29 | - <el-button | |
30 | - type="primary" | |
31 | - icon="el-icon-plus" | |
32 | - size="mini" | |
33 | - plain | |
34 | - circle | |
35 | - @click="addTeacherDia" | |
36 | - ></el-button> | |
16 | + <el-button type="primary" icon="el-icon-plus" size="mini" plain circle @click="addTeacherDia"></el-button> | |
37 | 17 | </el-tooltip> |
38 | 18 | </template> |
39 | 19 | </back-box> |
40 | 20 | |
41 | 21 | <div class="answer-header"> |
42 | 22 | <div class="sel-box"> |
43 | - <el-cascader | |
44 | - size="small" | |
45 | - class="sel sel2" | |
46 | - clearable | |
47 | - placeholder="选择范围" | |
48 | - @change="_QueryData(1)" | |
49 | - v-model="query.gradeClassSub" | |
50 | - :options="gradeClassSubList" | |
51 | - :props="{ | |
23 | + <el-select class="sel" v-model="query.classType" @change="_QueryData()" placeholder="选择类型"> | |
24 | + <el-option label="行政班" :value="0"></el-option> | |
25 | + <el-option label="教学班" :value="1"></el-option> | |
26 | + </el-select> | |
27 | + <el-cascader size="small" class="sel sel2" clearable placeholder="选择范围" @change="_QueryData(1)" | |
28 | + v-model="query.gradeClassSub" :options="gradeClassSubList" :props="{ | |
52 | 29 | multiple: true, |
53 | 30 | checkStrictly: true, |
54 | - }" | |
55 | - collapse-tags | |
56 | - :show-all-levels="false" | |
57 | - ></el-cascader> | |
58 | - <el-select | |
59 | - class="sel" | |
60 | - v-model="query.type" | |
61 | - @change="_QueryData(4)" | |
62 | - placeholder="选择类型" | |
63 | - > | |
31 | + }" collapse-tags :show-all-levels="false"></el-cascader> | |
32 | + <el-select class="sel" v-model="query.type" @change="_QueryData(4)" placeholder="选择类型"> | |
64 | 33 | <el-option disabled label="请选择" :value="9"></el-option> |
65 | 34 | <el-option label="已分配任课信息" :value="0"></el-option> |
66 | 35 | <el-option label="未分配任课信息" :value="1"></el-option> |
67 | 36 | </el-select> |
68 | - <el-input | |
69 | - placeholder="请输入老师姓名" | |
70 | - v-model="query.teacherName" | |
71 | - class="input-with-select" | |
72 | - maxlength="30" | |
73 | - clearable | |
74 | - @keyup.enter.native="_QueryData(2)" | |
75 | - > | |
76 | - <el-button | |
77 | - slot="append" | |
78 | - icon="el-icon-search" | |
79 | - @click="_QueryData(2)" | |
80 | - ></el-button> | |
37 | + <el-input placeholder="请输入老师姓名" v-model="query.teacherName" class="input-with-select" maxlength="30" clearable | |
38 | + @keyup.enter.native="_QueryData(2)"> | |
39 | + <el-button slot="append" icon="el-icon-search" @click="_QueryData(2)"></el-button> | |
81 | 40 | </el-input> |
82 | - <el-input | |
83 | - type="number" | |
84 | - oninput="if(value.length > 11) value = value.slice(0,11)" | |
85 | - placeholder="请输入老师手机号" | |
86 | - v-model="query.phone" | |
87 | - clearable | |
88 | - class="input-with-select" | |
89 | - @keyup.enter.native="_QueryData(3)" | |
90 | - > | |
91 | - <el-button | |
92 | - slot="append" | |
93 | - icon="el-icon-search" | |
94 | - @click="_QueryData(3)" | |
95 | - ></el-button> | |
41 | + <el-input type="number" oninput="if(value.length > 11) value = value.slice(0,11)" placeholder="请输入老师手机号" | |
42 | + v-model="query.phone" clearable class="input-with-select" @keyup.enter.native="_QueryData(3)"> | |
43 | + <el-button slot="append" icon="el-icon-search" @click="_QueryData(3)"></el-button> | |
96 | 44 | </el-input> |
97 | 45 | <!-- <el-button class="serach-box" round @click="_QueryData(4)" |
98 | 46 | >筛选</el-button |
... | ... | @@ -103,36 +51,30 @@ |
103 | 51 | 共筛选出{{ teacherList.length }}名教师。 |
104 | 52 | </p> |
105 | 53 | <div class="page-content"> |
106 | - <el-empty | |
107 | - :image-size="100" | |
108 | - v-if="!teacherList.length && loading == false" | |
109 | - description="没有更多数据" | |
110 | - ></el-empty> | |
54 | + <el-empty :image-size="100" v-if="!teacherList.length && loading == false" description="没有更多数据"></el-empty> | |
111 | 55 | <div class="teacher-box" v-loading="loading" v-else> |
112 | 56 | <div class="teacher-list"> |
113 | - <p class="h-title">教师列表</p> | |
114 | - <ul class="teacher-ul"> | |
115 | - <li | |
116 | - class="teacher-item" | |
117 | - v-for="item in teacherList" | |
118 | - :key="item.id" | |
119 | - :class="showTId == item.id ? 'active' : ''" | |
120 | - @click="showTeacher(item)" | |
121 | - > | |
122 | - {{ item.realName | |
123 | - }}<template v-if="setClass(item)" | |
124 | - >({{ setClass(item) }})</template | |
125 | - > | |
126 | - </li> | |
127 | - </ul> | |
57 | + <p class="h-title" v-loading="removeLoading"> | |
58 | + <el-checkbox v-model="AllTeacher" :indeterminate="indeterminate" @change="handleCheckAllChange">{{ "" | |
59 | + }}</el-checkbox> | |
60 | + <span class="txt">教师列表</span> | |
61 | + <img v-show="showDel" class="clear" @click="remove" src="../../../assets/images/shuazi.svg" alt=""> | |
62 | + </p> | |
63 | + <el-checkbox-group v-model="clearTeacher" @change="handleCheckedChange"> | |
64 | + <ul class="teacher-ul"> | |
65 | + <li class="teacher-item" v-for="item in teacherList" :key="item.id" | |
66 | + :class="showTId == item.id ? 'active' : ''"> | |
67 | + <el-checkbox :label="item.id">{{ "" }}</el-checkbox> | |
68 | + <p @click="showTeacher(item)"> {{ item.realName | |
69 | + }}<template v-if="setClass(item)">({{ setClass(item) }})</template></p> | |
70 | + </li> | |
71 | + </ul> | |
72 | + </el-checkbox-group> | |
128 | 73 | </div> |
129 | 74 | <div class="teacher-detail"> |
130 | 75 | <div class="icon-box" v-if="!code"> |
131 | 76 | <i class="icon el-icon-edit-outline" @click="editTeacher(1)"></i> |
132 | - <i | |
133 | - class="icon el-icon-circle-plus-outline" | |
134 | - @click="editTeacher(2)" | |
135 | - ></i> | |
77 | + <i class="icon el-icon-circle-plus-outline" @click="editTeacher(2)"></i> | |
136 | 78 | </div> |
137 | 79 | <div class="detail-top"> |
138 | 80 | <p class="p-item">手机号码:{{ teacherDetail.loginName }}</p> |
... | ... | @@ -142,29 +84,18 @@ |
142 | 84 | <p class="p-item"> |
143 | 85 | 性别:{{ |
144 | 86 | teacherDetail.sex == 1 |
145 | - ? "男" | |
146 | - : teacherDetail.sex == 2 | |
87 | + ? "男" | |
88 | + : teacherDetail.sex == 2 | |
147 | 89 | ? "女" |
148 | 90 | : "未知" |
149 | 91 | }} |
150 | 92 | </p> |
151 | 93 | </div> |
152 | - <div | |
153 | - class="grade-box" | |
154 | - v-if="teacherDetail.managerList && teacherDetail.managerList.length" | |
155 | - > | |
94 | + <div class="grade-box" v-if="teacherDetail.managerList && teacherDetail.managerList.length"> | |
156 | 95 | <p class="h-title">班主任</p> |
157 | 96 | <ul class="grade-info"> |
158 | - <li | |
159 | - class="grade-li" | |
160 | - v-for="item in teacherDetail.managerList" | |
161 | - :key="item.classId" | |
162 | - > | |
163 | - <el-popconfirm | |
164 | - title="确定删除吗?" | |
165 | - @confirm="delTeacherManager(item, 1)" | |
166 | - v-if="!code" | |
167 | - > | |
97 | + <li class="grade-li" v-for="item in teacherDetail.managerList" :key="item.classId"> | |
98 | + <el-popconfirm title="确定删除吗?" @confirm="delTeacherManager(item, 1)" v-if="!code"> | |
168 | 99 | <i class="el-icon-delete" slot="reference"></i> |
169 | 100 | </el-popconfirm> |
170 | 101 | <div class="grade-item"> |
... | ... | @@ -182,25 +113,13 @@ |
182 | 113 | </li> |
183 | 114 | </ul> |
184 | 115 | </div> |
185 | - <div | |
186 | - class="grade-box" | |
187 | - v-if=" | |
188 | - teacherDetail.teacherCourseList && | |
189 | - teacherDetail.teacherCourseList.length | |
190 | - " | |
191 | - > | |
116 | + <div class="grade-box" v-if="teacherDetail.teacherCourseList && | |
117 | + teacherDetail.teacherCourseList.length | |
118 | + "> | |
192 | 119 | <p class="h-title">任课老师</p> |
193 | 120 | <ul class="grade-info"> |
194 | - <li | |
195 | - class="grade-li" | |
196 | - v-for="item in teacherDetail.teacherCourseList" | |
197 | - :key="item.classId+item.subjectName" | |
198 | - > | |
199 | - <el-popconfirm | |
200 | - title="确定删除吗?" | |
201 | - @confirm="delTeacherManager(item, 2)" | |
202 | - v-if="!code" | |
203 | - > | |
121 | + <li class="grade-li" v-for="item in teacherDetail.teacherCourseList" :key="item.classId + item.subjectName"> | |
122 | + <el-popconfirm title="确定删除吗?" @confirm="delTeacherManager(item, 2)" v-if="!code"> | |
204 | 123 | <i class="el-icon-delete" slot="reference"></i> |
205 | 124 | </el-popconfirm> |
206 | 125 | <div class="grade-item"> |
... | ... | @@ -220,25 +139,13 @@ |
220 | 139 | </li> |
221 | 140 | </ul> |
222 | 141 | </div> |
223 | - <div | |
224 | - class="grade-box" | |
225 | - v-if=" | |
226 | - teacherDetail.teacherGradeList && | |
227 | - teacherDetail.teacherGradeList.length | |
228 | - " | |
229 | - > | |
142 | + <div class="grade-box" v-if="teacherDetail.teacherGradeList && | |
143 | + teacherDetail.teacherGradeList.length | |
144 | + "> | |
230 | 145 | <p class="h-title">备课组长</p> |
231 | - <ul | |
232 | - class="grade-info" | |
233 | - v-for="item in teacherDetail.teacherGradeList" | |
234 | - :key="item.grade" | |
235 | - > | |
146 | + <ul class="grade-info" v-for="item in teacherDetail.teacherGradeList" :key="item.grade"> | |
236 | 147 | <li class="grade-li"> |
237 | - <el-popconfirm | |
238 | - title="确定删除吗?" | |
239 | - @confirm="delTeacherManager(item, 3)" | |
240 | - v-if="!code" | |
241 | - > | |
148 | + <el-popconfirm title="确定删除吗?" @confirm="delTeacherManager(item, 3)" v-if="!code"> | |
242 | 149 | <i class="el-icon-delete" slot="reference"></i> |
243 | 150 | </el-popconfirm> |
244 | 151 | <div class="grade-item"> |
... | ... | @@ -252,18 +159,8 @@ |
252 | 159 | </div> |
253 | 160 | </div> |
254 | 161 | </div> |
255 | - <el-dialog | |
256 | - :close-on-click-modal="false" | |
257 | - title="导入教师名单" | |
258 | - :visible.sync="diaUp" | |
259 | - width="600" | |
260 | - > | |
261 | - <upload | |
262 | - id="downTeacher" | |
263 | - :url="url" | |
264 | - @upSuccess="upSuccess" | |
265 | - fileName="教师名单" | |
266 | - > | |
162 | + <el-dialog :close-on-click-modal="false" title="导入教师名单" :visible.sync="diaUp" width="600"> | |
163 | + <upload id="downTeacher" :url="url" @upSuccess="upSuccess" fileName="教师名单"> | |
267 | 164 | <p class="down-txt" slot="down"> |
268 | 165 | 通过Excel名单导入教师名单,点击 |
269 | 166 | <el-link type="danger" @click="downExcel">模板下载</el-link> 。 |
... | ... | @@ -273,115 +170,42 @@ |
273 | 170 | <el-button @click="diaUp = false">取 消</el-button> |
274 | 171 | </div> |
275 | 172 | </el-dialog> |
276 | - <el-dialog | |
277 | - :close-on-click-modal="false" | |
278 | - :title=" | |
279 | - isAdd ? '添加教师' : setTercherType == 1 ? '编辑教师信息' : '管理班级' | |
280 | - " | |
281 | - :visible.sync="diaTeacher" | |
282 | - width="400" | |
283 | - append-to-body | |
284 | - > | |
285 | - <el-form | |
286 | - class="form-box" | |
287 | - ref="formTeacher" | |
288 | - :model="formTeacher" | |
289 | - :rules="rulesTeacher" | |
290 | - label-width="160px" | |
291 | - > | |
173 | + <el-dialog :close-on-click-modal="false" :title="isAdd ? '添加教师' : setTercherType == 1 ? '编辑教师信息' : '管理班级' | |
174 | + " :visible.sync="diaTeacher" width="400" append-to-body> | |
175 | + <el-form class="form-box" ref="formTeacher" :model="formTeacher" :rules="rulesTeacher" label="" -width="160px"> | |
292 | 176 | <el-form-item v-show="!isAdd && setTercherType == 2" label="教师姓名:"> |
293 | 177 | <span>{{ formTeacher.teacherName }}</span> |
294 | 178 | </el-form-item> |
295 | - <el-form-item | |
296 | - v-show="isAdd || (!isAdd && setTercherType == 1)" | |
297 | - label="手机号码:" | |
298 | - prop="loginName" | |
299 | - > | |
179 | + <el-form-item v-show="isAdd || (!isAdd && setTercherType == 1)" label="手机号码:" prop="loginName"> | |
300 | 180 | <el-col :span="10"> |
301 | - <el-input | |
302 | - type="number" | |
303 | - oninput="if(value.length > 11) value = value.slice(0,11)" | |
304 | - v-model.trim="formTeacher.loginName" | |
305 | - /> | |
181 | + <el-input type="number" oninput="if(value.length > 11) value = value.slice(0,11)" | |
182 | + v-model.trim="formTeacher.loginName" /> | |
306 | 183 | </el-col> |
307 | 184 | </el-form-item> |
308 | - <el-form-item | |
309 | - v-show="isAdd || (!isAdd && setTercherType == 1)" | |
310 | - label="教师姓名:" | |
311 | - prop="teacherName" | |
312 | - > | |
185 | + <el-form-item v-show="isAdd || (!isAdd && setTercherType == 1)" label="教师姓名:" prop="teacherName"> | |
313 | 186 | <el-col :span="10"> |
314 | 187 | <el-input maxlength="30" v-model.trim="formTeacher.teacherName" /> |
315 | 188 | </el-col> |
316 | 189 | </el-form-item> |
317 | - <el-form-item | |
318 | - v-show="isAdd || (!isAdd && setTercherType == 1)" | |
319 | - label="性别:" | |
320 | - prop="sex" | |
321 | - > | |
190 | + <el-form-item v-show="isAdd || (!isAdd && setTercherType == 1)" label="性别:" prop="sex"> | |
322 | 191 | <el-radio-group v-model="formTeacher.sex"> |
323 | 192 | <el-radio :label="1">男</el-radio> |
324 | 193 | <el-radio :label="2">女</el-radio> |
325 | 194 | </el-radio-group> |
326 | 195 | </el-form-item> |
327 | - <el-form-item | |
328 | - v-show="isAdd || (!isAdd && setTercherType == 2)" | |
329 | - label="教师角色:" | |
330 | - prop="roleList" | |
331 | - > | |
332 | - <div | |
333 | - class="role-list" | |
334 | - v-for="(item, index) in formTeacher.roleList" | |
335 | - :key="item.id" | |
336 | - > | |
337 | - <el-select | |
338 | - class="sel-c" | |
339 | - v-model="item.roleId" | |
340 | - placeholder="选择角色" | |
341 | - @change="item.classId = []" | |
342 | - > | |
343 | - <el-option | |
344 | - v-for="item in teacherRoleList" | |
345 | - :key="item.value" | |
346 | - :label="item.label" | |
347 | - :value="item.value" | |
348 | - > | |
196 | + <el-form-item v-show="isAdd || (!isAdd && setTercherType == 2)" label="教师角色:" prop="roleList"> | |
197 | + <div class="role-list" v-for="(item, index) in formTeacher.roleList" :key="item.id"> | |
198 | + <el-select class="sel-c" v-model="item.roleId" placeholder="选择角色" @change="item.classId = []"> | |
199 | + <el-option v-for="item in teacherRoleList" :key="item.value" :label="item.label" :value="item.value"> | |
349 | 200 | </el-option> |
350 | 201 | </el-select> |
351 | - <el-cascader | |
352 | - size="small" | |
353 | - v-if="item.roleId == 6" | |
354 | - class="sel-t" | |
355 | - collapse | |
356 | - clearable | |
357 | - placeholder="选择年级-班级" | |
358 | - v-model="item.classId" | |
359 | - :options="gradeClassList" | |
360 | - :props="{ expandTrigger: 'hover' }" | |
361 | - ></el-cascader> | |
362 | - <el-cascader | |
363 | - size="small" | |
364 | - v-if="item.roleId == 7" | |
365 | - class="sel-t teacher-cascader" | |
366 | - collapse | |
367 | - clearable | |
368 | - placeholder="选择年级-科目-班级" | |
369 | - v-model="item.classId" | |
370 | - :options="gradeSubListClass" | |
371 | - :props="{ expandTrigger: 'hover', multiple: true }" | |
372 | - popperClass="cascader-clazz" | |
373 | - ></el-cascader> | |
374 | - <el-cascader | |
375 | - size="small" | |
376 | - v-if="item.roleId == 8" | |
377 | - class="sel-t" | |
378 | - collapse | |
379 | - clearable | |
380 | - placeholder="选择年级-科目" | |
381 | - v-model="item.classId" | |
382 | - :options="gradeList" | |
383 | - :props="{ expandTrigger: 'hover' }" | |
384 | - ></el-cascader> | |
202 | + <el-cascader size="small" v-if="item.roleId == 6" class="sel-t" collapse clearable placeholder="选择年级-班级" | |
203 | + v-model="item.classId" :options="gradeClassList" :props="{ expandTrigger: 'hover' }"></el-cascader> | |
204 | + <el-cascader size="small" v-if="item.roleId == 7" class="sel-t teacher-cascader" collapse clearable | |
205 | + placeholder="选择年级-科目-班级" v-model="item.classId" :options="gradeSubListClass" | |
206 | + :props="{ expandTrigger: 'hover', multiple: true }" popperClass="cascader-clazz"></el-cascader> | |
207 | + <el-cascader size="small" v-if="item.roleId == 8" class="sel-t" collapse clearable placeholder="选择年级-科目" | |
208 | + v-model="item.classId" :options="gradeList" :props="{ expandTrigger: 'hover' }"></el-cascader> | |
385 | 209 | <i class="el-icon-close" @click="removeRoleList(index)"></i> |
386 | 210 | </div> |
387 | 211 | <p class="add-box"> |
... | ... | @@ -415,6 +239,7 @@ export default { |
415 | 239 | isAdd: false, |
416 | 240 | setTercherType: 1, |
417 | 241 | query: { |
242 | + classType: 0, | |
418 | 243 | gradeClassSub: [], |
419 | 244 | type: 0, |
420 | 245 | teacherName: "", |
... | ... | @@ -469,8 +294,20 @@ export default { |
469 | 294 | { required: true, message: "请选择角色信息", trigger: "blur" }, |
470 | 295 | ], |
471 | 296 | }, |
297 | + | |
298 | + AllTeacher: false, | |
299 | + indeterminate: false, | |
300 | + clearTeacher: [], | |
301 | + removeLoading: false | |
472 | 302 | }; |
473 | 303 | }, |
304 | + computed: { | |
305 | + showDel: function () { | |
306 | + return !this.query.gradeClassSub.some(item => { | |
307 | + return item.length > 1 | |
308 | + }) | |
309 | + } | |
310 | + }, | |
474 | 311 | async created() { |
475 | 312 | this.code = localStorage.getItem("csCode") || ""; |
476 | 313 | this._QueryData(4); |
... | ... | @@ -479,6 +316,50 @@ export default { |
479 | 316 | await this._QueryClass(); |
480 | 317 | }, |
481 | 318 | methods: { |
319 | + //选择删除 | |
320 | + handleCheckAllChange(val) { | |
321 | + this.clearTeacher = val | |
322 | + ? this.teacherList.map((item) => { | |
323 | + return item.id; | |
324 | + }) | |
325 | + : []; | |
326 | + this.indeterminate = false; | |
327 | + }, | |
328 | + handleCheckedChange(value) { | |
329 | + let checkedCount = value.length; | |
330 | + this.checkAll = checkedCount === this.teacherList.length; | |
331 | + this.indeterminate = | |
332 | + checkedCount > 0 && checkedCount < this.teacherList.length; | |
333 | + }, | |
334 | + async remove() { | |
335 | + if (this.clearTeacher.length) { | |
336 | + this.$message.warning("请选择要格式化的老师") | |
337 | + return | |
338 | + } | |
339 | + this.removeLoading = true | |
340 | + let grades = [] | |
341 | + this.query.gradeClassSub.map(item => { | |
342 | + if (item.length == 1) { | |
343 | + if (!grades.includes(item[0])) { | |
344 | + grades.push(item[0]); | |
345 | + } | |
346 | + } | |
347 | + }) | |
348 | + const { data, status, info } = await this.$request.teacherTemplate({ | |
349 | + ids: this.clearTeacher, | |
350 | + type: this.query.classType, | |
351 | + grades: grades | |
352 | + }); | |
353 | + this.removeLoading = false | |
354 | + if (status === 0) { | |
355 | + this.$message.success(info); | |
356 | + this._QueryData(); | |
357 | + } else { | |
358 | + this.$message.error(info); | |
359 | + } | |
360 | + }, | |
361 | + //end | |
362 | + | |
482 | 363 | gradeName(type) { |
483 | 364 | return setGradeName(type); |
484 | 365 | }, |
... | ... | @@ -955,28 +836,34 @@ export default { |
955 | 836 | .page-content { |
956 | 837 | padding: 0 20px 20px; |
957 | 838 | } |
839 | + | |
958 | 840 | .total { |
959 | 841 | padding: 0 20px 10px; |
960 | 842 | font-size: 14px; |
961 | 843 | color: #666; |
962 | 844 | } |
845 | + | |
963 | 846 | .teacher-box { |
964 | 847 | display: flex; |
965 | 848 | background: #f8f8f8; |
966 | 849 | border-radius: 10px; |
967 | 850 | overflow: hidden; |
968 | 851 | min-height: 400px; |
852 | + | |
969 | 853 | .teacher-ul { |
970 | 854 | max-height: 60vh; |
971 | - overflow-y: scroll; | |
855 | + overflow-y: auto; | |
856 | + | |
972 | 857 | &::-webkit-scrollbar { |
973 | 858 | width: 6px; |
974 | 859 | } |
860 | + | |
975 | 861 | &::-webkit-scrollbar-thumb { |
976 | 862 | border-radius: 10px; |
977 | 863 | background-color: #ccc; |
978 | 864 | } |
979 | 865 | } |
866 | + | |
980 | 867 | .teacher-list { |
981 | 868 | width: 240px; |
982 | 869 | |
... | ... | @@ -984,17 +871,38 @@ export default { |
984 | 871 | height: 40px; |
985 | 872 | line-height: 40px; |
986 | 873 | background: #eee; |
987 | - // border-radius: 10px 10px 0 0; | |
874 | + display: flex; | |
875 | + justify-content: space-between; | |
876 | + align-items: center; | |
877 | + | |
878 | + .txt { | |
879 | + flex: 1; | |
880 | + } | |
881 | + | |
882 | + .clear { | |
883 | + width: 18px; | |
884 | + margin-right: 10px; | |
885 | + cursor: pointer; | |
886 | + transition: all .3s; | |
887 | + | |
888 | + &:hover { | |
889 | + transform: scale(1.1); | |
890 | + } | |
891 | + } | |
988 | 892 | } |
893 | + | |
989 | 894 | .teacher-item { |
990 | 895 | font-size: 16px; |
991 | 896 | color: #7f7f7f; |
992 | 897 | line-height: 36px; |
993 | 898 | cursor: pointer; |
994 | 899 | padding-left: 12px; |
900 | + display: flex; | |
901 | + | |
995 | 902 | &:hover { |
996 | 903 | background: #eee; |
997 | 904 | } |
905 | + | |
998 | 906 | &.active { |
999 | 907 | color: #667ffd; |
1000 | 908 | background: #eee; |
... | ... | @@ -1006,19 +914,23 @@ export default { |
1006 | 914 | flex: 1; |
1007 | 915 | position: relative; |
1008 | 916 | padding-left: 10px; |
917 | + | |
1009 | 918 | .icon-box { |
1010 | 919 | position: absolute; |
1011 | 920 | top: 12px; |
1012 | 921 | right: 20px; |
922 | + | |
1013 | 923 | .icon { |
1014 | 924 | font-size: 24px; |
1015 | 925 | color: #7f7f7f; |
1016 | 926 | cursor: pointer; |
1017 | 927 | } |
928 | + | |
1018 | 929 | .el-icon-circle-plus-outline { |
1019 | 930 | margin-left: 10px; |
1020 | 931 | } |
1021 | 932 | } |
933 | + | |
1022 | 934 | .detail-top { |
1023 | 935 | padding: 12px 20px; |
1024 | 936 | box-sizing: border-box; |
... | ... | @@ -1026,20 +938,24 @@ export default { |
1026 | 938 | flex-wrap: wrap; |
1027 | 939 | font-size: 14px; |
1028 | 940 | color: #7f7f7f; |
941 | + | |
1029 | 942 | .p-item { |
1030 | 943 | width: 40%; |
1031 | 944 | line-height: 28px; |
1032 | 945 | } |
1033 | 946 | } |
947 | + | |
1034 | 948 | .grade-box { |
1035 | 949 | .grade-info { |
1036 | 950 | display: flex; |
1037 | 951 | flex-wrap: wrap; |
1038 | 952 | padding: 20px 20px 0; |
1039 | - & > li { | |
953 | + | |
954 | + &>li { | |
1040 | 955 | margin-right: 20px; |
1041 | 956 | margin-bottom: 20px; |
1042 | 957 | position: relative; |
958 | + | |
1043 | 959 | .el-icon-delete { |
1044 | 960 | position: absolute; |
1045 | 961 | top: 8px; |
... | ... | @@ -1047,10 +963,12 @@ export default { |
1047 | 963 | padding: 2px; |
1048 | 964 | cursor: pointer; |
1049 | 965 | display: none; |
966 | + | |
1050 | 967 | &:hover { |
1051 | 968 | color: #667ffd; |
1052 | 969 | } |
1053 | 970 | } |
971 | + | |
1054 | 972 | &:hover { |
1055 | 973 | .el-icon-delete { |
1056 | 974 | display: block; |
... | ... | @@ -1065,22 +983,26 @@ export default { |
1065 | 983 | border-radius: 10px; |
1066 | 984 | box-shadow: 1px 1px 3px #888; |
1067 | 985 | } |
986 | + | |
1068 | 987 | .grade-name { |
1069 | 988 | font-size: 16px; |
1070 | 989 | font-weight: bold; |
1071 | 990 | line-height: 18px; |
1072 | 991 | padding-bottom: 12px; |
1073 | 992 | } |
993 | + | |
1074 | 994 | .grade-class { |
1075 | 995 | display: flex; |
1076 | 996 | justify-content: space-between; |
1077 | 997 | font-size: 15px; |
1078 | 998 | padding-right: 20px; |
999 | + | |
1079 | 1000 | .fa { |
1080 | 1001 | font-size: 18px; |
1081 | 1002 | margin-right: 5px; |
1082 | 1003 | color: #a4a4a4; |
1083 | 1004 | } |
1005 | + | |
1084 | 1006 | .fa-book { |
1085 | 1007 | font-size: 20px; |
1086 | 1008 | } |
... | ... | @@ -1089,16 +1011,20 @@ export default { |
1089 | 1011 | } |
1090 | 1012 | } |
1091 | 1013 | } |
1014 | + | |
1092 | 1015 | .add-box { |
1093 | 1016 | margin-top: 10px; |
1094 | 1017 | } |
1018 | + | |
1095 | 1019 | .sel-c { |
1096 | 1020 | width: 120px; |
1097 | 1021 | margin-right: 12px; |
1098 | 1022 | } |
1023 | + | |
1099 | 1024 | .role-list { |
1100 | 1025 | margin-bottom: 10px; |
1101 | 1026 | position: relative; |
1027 | + | |
1102 | 1028 | .sel-p { |
1103 | 1029 | position: absolute; |
1104 | 1030 | left: 146px; |
... | ... | @@ -1106,11 +1032,13 @@ export default { |
1106 | 1032 | font-size: 13px; |
1107 | 1033 | color: #606266; |
1108 | 1034 | } |
1035 | + | |
1109 | 1036 | .sel-t { |
1110 | 1037 | :deep(.el-input__inner) { |
1111 | 1038 | background: transparent; |
1112 | 1039 | } |
1113 | 1040 | } |
1041 | + | |
1114 | 1042 | .el-icon-close { |
1115 | 1043 | padding: 5px; |
1116 | 1044 | cursor: pointer; | ... | ... |