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,4 +1630,25 @@ export default { | ||
1630 | data | 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,12 +101,13 @@ service.interceptors.response.use( | ||
101 | } | 101 | } |
102 | return; | 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 | export default service; | 113 | export default service; |
src/api/urls/apis.js
@@ -426,4 +426,8 @@ export default { | @@ -426,4 +426,8 @@ export default { | ||
426 | paperWordUpload: "/api_html/common/paper/upload", | 426 | paperWordUpload: "/api_html/common/paper/upload", |
427 | //删除随堂问报表 | 427 | //删除随堂问报表 |
428 | deletePaperReport: "/api_html/teaching/deletePaperReport", | 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 | \ No newline at end of file | 2 | \ No newline at end of file |
src/views/basic/device/index.vue
@@ -7,37 +7,16 @@ | @@ -7,37 +7,16 @@ | ||
7 | <template slot="btns"> | 7 | <template slot="btns"> |
8 | <template v-if="tableData.length"> | 8 | <template v-if="tableData.length"> |
9 | <el-tooltip effect="dark" content="设备导出" placement="bottom"> | 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 | </el-tooltip> | 11 | </el-tooltip> |
19 | </template> | 12 | </template> |
20 | <template v-if="role == 'ROLE_XUEXIAO' && type == 1"> | 13 | <template v-if="role == 'ROLE_XUEXIAO' && type == 1"> |
21 | <el-tooltip effect="dark" content="设备导入" placement="bottom"> | 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 | </el-tooltip> | 16 | </el-tooltip> |
31 | <el-tooltip effect="dark" content="添加基站" placement="bottom"> | 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 | </template> | 20 | </template> |
42 | </back-box> | 21 | </back-box> |
43 | <div> | 22 | <div> |
@@ -48,16 +27,10 @@ | @@ -48,16 +27,10 @@ | ||
48 | <el-radio-button :label="3">授课端管理</el-radio-button> | 27 | <el-radio-button :label="3">授课端管理</el-radio-button> |
49 | </el-radio-group> | 28 | </el-radio-group> |
50 | </div> | 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 | type == 1 ? stationCount : clickerCount | 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 | </p> | 34 | </p> |
62 | <div class="content"> | 35 | <div class="content"> |
63 | <div v-show="type == 1"> | 36 | <div v-show="type == 1"> |
@@ -67,101 +40,39 @@ | @@ -67,101 +40,39 @@ | ||
67 | <p class="p2">基站数量</p> | 40 | <p class="p2">基站数量</p> |
68 | </div> | 41 | </div> |
69 | <div class="chart"> | 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 | </div> | 44 | </div> |
76 | </div> | 45 | </div> |
77 | <div class="table-box"> | 46 | <div class="table-box"> |
78 | <div class="answer-header"> | 47 | <div class="answer-header"> |
79 | <div class="sel-box"> | 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 | </el-option> | 53 | </el-option> |
104 | </el-select> | 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 | </el-input> | 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 | </div> | 60 | </div> |
122 | </div> | 61 | </div> |
123 | <p class="loading" v-if="!tableData.length && loading"> | 62 | <p class="loading" v-if="!tableData.length && loading"> |
124 | 加载中<i class="el-icon-loading"></i> | 63 | 加载中<i class="el-icon-loading"></i> |
125 | </p> | 64 | </p> |
126 | <el-table v-else :data="tableData" border style="width: 100%"> | 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 | <p v-for="(item, index) in scoped.row.classList" :key="index"> | 71 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
156 | {{ item.gradeName }} | 72 | {{ item.gradeName }} |
157 | </p> | 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 | <el-table-column label="关联班级" align="center"> | 76 | <el-table-column label="关联班级" align="center"> |
166 | <template slot-scope="scoped"> | 77 | <template slot-scope="scoped"> |
167 | <p v-for="(item, index) in scoped.row.classList" :key="index"> | 78 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
@@ -169,60 +80,31 @@ | @@ -169,60 +80,31 @@ | ||
169 | </p> | 80 | </p> |
170 | </template> | 81 | </template> |
171 | </el-table-column> | 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 | scope.row.onlineStatus == 1 | 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 | </el-tooltip> | 98 | </el-tooltip> |
216 | <el-tooltip effect="dark" content="日志" placement="top"> | 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 | </el-table> | 108 | </el-table> |
227 | </div> | 109 | </div> |
228 | </div> | 110 | </div> |
@@ -233,151 +115,61 @@ | @@ -233,151 +115,61 @@ | ||
233 | <p class="p2">答题器数量</p> | 115 | <p class="p2">答题器数量</p> |
234 | </div> | 116 | </div> |
235 | <div class="chart"> | 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 | </div> | 120 | </div> |
242 | </div> | 121 | </div> |
243 | <div class="table-box"> | 122 | <div class="table-box"> |
244 | <div class="answer-header"> | 123 | <div class="answer-header"> |
245 | <div class="sel-box"> | 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 | </el-option> | 129 | </el-option> |
270 | </el-select> | 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 | </el-input> | 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 | </el-input> | 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 | </div> | 140 | </div> |
303 | </div> | 141 | </div> |
304 | <p class="loading" v-if="!tableData.length && loading"> | 142 | <p class="loading" v-if="!tableData.length && loading"> |
305 | 加载中<i class="el-icon-loading"></i> | 143 | 加载中<i class="el-icon-loading"></i> |
306 | </p> | 144 | </p> |
307 | <el-table v-else :data="tableData" border style="width: 100%"> | 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 | {{ item.studentName }} | 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 | <p v-for="(item, index) in scoped.row.classList" :key="index"> | 155 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
337 | {{ item.gradeName }} | 156 | {{ item.gradeName }} |
338 | </p> | 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 | <template slot-scope="scoped"> | 160 | <template slot-scope="scoped"> |
348 | <p v-for="(item, index) in scoped.row.classList" :key="index"> | 161 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
349 | {{ item.className }} | 162 | {{ item.className }} |
350 | </p> | 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 | <el-tooltip effect="dark" content="日志" placement="top"> | 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 | </el-table> | 173 | </el-table> |
382 | </div> | 174 | </div> |
383 | </div> | 175 | </div> |
@@ -385,27 +177,12 @@ | @@ -385,27 +177,12 @@ | ||
385 | <div class="table-box"> | 177 | <div class="table-box"> |
386 | <div class="answer-header"> | 178 | <div class="answer-header"> |
387 | <div class="sel-box"> | 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 | </div> | 186 | </div> |
410 | <p class="upgrade-all" v-if="this.role == 'ROLE_XUEXIAO'"> | 187 | <p class="upgrade-all" v-if="this.role == 'ROLE_XUEXIAO'"> |
411 | <span>全校更新:</span> | 188 | <span>全校更新:</span> |
@@ -416,102 +193,49 @@ | @@ -416,102 +193,49 @@ | ||
416 | <p class="loading" v-if="!tableData.length && loading"> | 193 | <p class="loading" v-if="!tableData.length && loading"> |
417 | 加载中<i class="el-icon-loading"></i> | 194 | 加载中<i class="el-icon-loading"></i> |
418 | </p> | 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 | <el-table-column type="selection" width="55"></el-table-column> | 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 | <p v-for="(item, index) in scoped.row.classList" :key="index"> | 201 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
440 | {{ item.className }} | 202 | {{ item.className }} |
441 | </p> | 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 | <p v-for="(item, index) in scoped.row.classList" :key="index"> | 208 | <p v-for="(item, index) in scoped.row.classList" :key="index"> |
458 | {{ item.gradeName }} | 209 | {{ item.gradeName }} |
459 | </p> | 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 | scope.row.onlineStatus == 1 | 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 | </el-table> | 233 | </el-table> |
503 | </div> | 234 | </div> |
504 | </div> | 235 | </div> |
505 | <div class="pagination-box"> | 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 | </el-pagination> | 239 | </el-pagination> |
516 | </div> | 240 | </div> |
517 | </div> | 241 | </div> |
@@ -527,75 +251,33 @@ | @@ -527,75 +251,33 @@ | ||
527 | <el-button @click="diaUp = false">取 消</el-button> | 251 | <el-button @click="diaUp = false">取 消</el-button> |
528 | </div> | 252 | </div> |
529 | </el-dialog> | 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 | <el-form ref="forms" :model="form" :rules="formRules" label-width="140px"> | 255 | <el-form ref="forms" :model="form" :rules="formRules" label-width="140px"> |
536 | <el-form-item label="设备编码:" prop="sn"> | 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 | </el-form-item> | 260 | </el-form-item> |
550 | <el-form-item label="频点:" prop="frequency"> | 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 | </el-form-item> | 265 | </el-form-item> |
563 | <el-form-item label="配对码:" prop="pairingCode"> | 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 | </el-form-item> | 270 | </el-form-item> |
576 | <el-form-item label="选择班级:" prop="classIds"> | 271 | <el-form-item label="选择班级:" prop="classIds"> |
577 | <el-col :span="16"> | 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 | </el-col> | 275 | </el-col> |
586 | </el-form-item> | 276 | </el-form-item> |
587 | <el-form-item label="所在教室:"> | 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 | </el-form-item> | 281 | </el-form-item> |
600 | </el-form> | 282 | </el-form> |
601 | <div class="dialog-footer" slot="footer"> | 283 | <div class="dialog-footer" slot="footer"> |
@@ -800,6 +482,17 @@ export default { | @@ -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 | clickPieChart(obj) { | 496 | clickPieChart(obj) { |
804 | this.query.onlineStatus = | 497 | this.query.onlineStatus = |
805 | obj.name == "在线" ? 1 : obj.name == "离线" ? 0 : 2; | 498 | obj.name == "在线" ? 1 : obj.name == "离线" ? 0 : 2; |
@@ -813,14 +506,14 @@ export default { | @@ -813,14 +506,14 @@ export default { | ||
813 | obj.name == "1日内" | 506 | obj.name == "1日内" |
814 | ? 1 | 507 | ? 1 |
815 | : obj.name == "3日内" | 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 | this.query.sn = ""; | 517 | this.query.sn = ""; |
825 | this.query.classId = []; | 518 | this.query.classId = []; |
826 | this.page = 1; | 519 | this.page = 1; |
@@ -865,7 +558,7 @@ export default { | @@ -865,7 +558,7 @@ export default { | ||
865 | if (data && !data.code) { | 558 | if (data && !data.code) { |
866 | this._QueryData(false); | 559 | this._QueryData(false); |
867 | this.selectionTabIds = []; | 560 | this.selectionTabIds = []; |
868 | - this.$message.success(this.upgradeFlag?"开启自动更新成功":"关闭/停止自动更新成功"); | 561 | + this.$message.success(this.upgradeFlag ? "开启自动更新成功" : "关闭/停止自动更新成功"); |
869 | } else { | 562 | } else { |
870 | this.$message.error(data.info); | 563 | this.$message.error(data.info); |
871 | } | 564 | } |
@@ -931,6 +624,20 @@ export default { | @@ -931,6 +624,20 @@ export default { | ||
931 | this.$message.error(data.info); | 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 | async downExcel() { | 641 | async downExcel() { |
935 | let data = await this.$request.stationTemplate({ | 642 | let data = await this.$request.stationTemplate({ |
936 | id: this.id, | 643 | id: this.id, |
@@ -944,8 +651,8 @@ export default { | @@ -944,8 +651,8 @@ export default { | ||
944 | this.$message.error("下载失败"); | 651 | this.$message.error("下载失败"); |
945 | } | 652 | } |
946 | }, | 653 | }, |
654 | + //报表导出 | ||
947 | async downExl() { | 655 | async downExl() { |
948 | - //报表导出 | ||
949 | if (this.exportLoading == true) return; | 656 | if (this.exportLoading == true) return; |
950 | let query = this.setQuery(); | 657 | let query = this.setQuery(); |
951 | const exportDevice = | 658 | const exportDevice = |
@@ -967,8 +674,8 @@ export default { | @@ -967,8 +674,8 @@ export default { | ||
967 | this.type == 1 | 674 | this.type == 1 |
968 | ? "基站管理报表.xlsx" | 675 | ? "基站管理报表.xlsx" |
969 | : this.type == 2 | 676 | : this.type == 2 |
970 | - ? "答题器报表.xlsx" | ||
971 | - : "授课端报表.xlsx"; | 677 | + ? "答题器报表.xlsx" |
678 | + : "授课端报表.xlsx"; | ||
972 | downloadFile(txt, blob); | 679 | downloadFile(txt, blob); |
973 | } else { | 680 | } else { |
974 | this.$message.error(data.info); | 681 | this.$message.error(data.info); |
@@ -1079,8 +786,8 @@ export default { | @@ -1079,8 +786,8 @@ export default { | ||
1079 | item.onlineStatus == "1" | 786 | item.onlineStatus == "1" |
1080 | ? "在线" | 787 | ? "在线" |
1081 | : item.onlineStatus == 0 | 788 | : item.onlineStatus == 0 |
1082 | - ? "离线" | ||
1083 | - : "异常", | 789 | + ? "离线" |
790 | + : "异常", | ||
1084 | value: item.total, | 791 | value: item.total, |
1085 | rate: item.rate, | 792 | rate: item.rate, |
1086 | }; | 793 | }; |
@@ -1105,14 +812,14 @@ export default { | @@ -1105,14 +812,14 @@ export default { | ||
1105 | item.type == 1 | 812 | item.type == 1 |
1106 | ? "1日内" | 813 | ? "1日内" |
1107 | : item.type == 2 | 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 | count: item.total, | 823 | count: item.total, |
1117 | value: item.rate * 100, | 824 | value: item.rate * 100, |
1118 | }; | 825 | }; |
@@ -1276,39 +983,52 @@ export default { | @@ -1276,39 +983,52 @@ export default { | ||
1276 | height: 100%; | 983 | height: 100%; |
1277 | overflow-y: auto; | 984 | overflow-y: auto; |
1278 | } | 985 | } |
986 | + | ||
1279 | .tab-box { | 987 | .tab-box { |
1280 | padding: 20px 0 12px; | 988 | padding: 20px 0 12px; |
1281 | } | 989 | } |
990 | + | ||
1282 | .down { | 991 | .down { |
1283 | padding: 0 0 16px 20px; | 992 | padding: 0 0 16px 20px; |
1284 | } | 993 | } |
994 | + | ||
1285 | .error-tips { | 995 | .error-tips { |
1286 | margin-bottom: 12px; | 996 | margin-bottom: 12px; |
1287 | } | 997 | } |
998 | +.del{ | ||
999 | + margin-left: 10px; | ||
1000 | +} | ||
1001 | + | ||
1288 | .content { | 1002 | .content { |
1289 | background: #f8f8f8; | 1003 | background: #f8f8f8; |
1290 | border: 1px solid #e2e2e2; | 1004 | border: 1px solid #e2e2e2; |
1291 | border-radius: 10px; | 1005 | border-radius: 10px; |
1292 | overflow: hidden; | 1006 | overflow: hidden; |
1007 | + | ||
1293 | :deep(.fa-edit) { | 1008 | :deep(.fa-edit) { |
1294 | width: 12px; | 1009 | width: 12px; |
1295 | height: 12px; | 1010 | height: 12px; |
1011 | + | ||
1296 | &::before { | 1012 | &::before { |
1297 | margin-left: 2px; | 1013 | margin-left: 2px; |
1298 | } | 1014 | } |
1299 | } | 1015 | } |
1300 | - :deep(.fa-eye) { | 1016 | + |
1017 | + :deep(.fa) { | ||
1301 | width: 12px; | 1018 | width: 12px; |
1302 | height: 12px; | 1019 | height: 12px; |
1020 | + | ||
1303 | &::before { | 1021 | &::before { |
1304 | margin-left: 1px; | 1022 | margin-left: 1px; |
1305 | } | 1023 | } |
1306 | } | 1024 | } |
1025 | + | ||
1307 | .chart-box { | 1026 | .chart-box { |
1308 | display: flex; | 1027 | display: flex; |
1309 | overflow: hidden; | 1028 | overflow: hidden; |
1310 | height: 240px; | 1029 | height: 240px; |
1311 | border-bottom: 0.5px solid #e2e2e2; | 1030 | border-bottom: 0.5px solid #e2e2e2; |
1031 | + | ||
1312 | .device-num { | 1032 | .device-num { |
1313 | width: 280px; | 1033 | width: 280px; |
1314 | border-right: 0.5px solid #e2e2e2; | 1034 | border-right: 0.5px solid #e2e2e2; |
@@ -1316,26 +1036,32 @@ export default { | @@ -1316,26 +1036,32 @@ export default { | ||
1316 | flex-direction: column; | 1036 | flex-direction: column; |
1317 | justify-content: center; | 1037 | justify-content: center; |
1318 | align-items: center; | 1038 | align-items: center; |
1039 | + | ||
1319 | .p1 { | 1040 | .p1 { |
1320 | font-size: 28px; | 1041 | font-size: 28px; |
1321 | } | 1042 | } |
1322 | } | 1043 | } |
1044 | + | ||
1323 | .chart { | 1045 | .chart { |
1324 | flex: 1; | 1046 | flex: 1; |
1325 | height: 100%; | 1047 | height: 100%; |
1326 | } | 1048 | } |
1327 | } | 1049 | } |
1050 | + | ||
1328 | .table-box { | 1051 | .table-box { |
1329 | padding: 20px 20px 0; | 1052 | padding: 20px 20px 0; |
1053 | + | ||
1330 | .loading { | 1054 | .loading { |
1331 | text-align: center; | 1055 | text-align: center; |
1332 | line-height: 36px; | 1056 | line-height: 36px; |
1333 | font-size: 16px; | 1057 | font-size: 16px; |
1334 | color: #666; | 1058 | color: #666; |
1335 | } | 1059 | } |
1060 | + | ||
1336 | .answer-header { | 1061 | .answer-header { |
1337 | padding: 0; | 1062 | padding: 0; |
1338 | margin-bottom: 12px; | 1063 | margin-bottom: 12px; |
1064 | + | ||
1339 | .upgrade-all { | 1065 | .upgrade-all { |
1340 | display: flex; | 1066 | display: flex; |
1341 | align-items: center; | 1067 | align-items: center; |
@@ -1343,11 +1069,14 @@ export default { | @@ -1343,11 +1069,14 @@ export default { | ||
1343 | } | 1069 | } |
1344 | } | 1070 | } |
1345 | } | 1071 | } |
1072 | + | ||
1346 | .answer-header .sel-box .input-with-select { | 1073 | .answer-header .sel-box .input-with-select { |
1347 | margin-right: 20px; | 1074 | margin-right: 20px; |
1075 | + | ||
1348 | :deep(.el-input__suffix) { | 1076 | :deep(.el-input__suffix) { |
1349 | right: -5px; | 1077 | right: -5px; |
1350 | } | 1078 | } |
1079 | + | ||
1351 | :deep(.el-button) { | 1080 | :deep(.el-button) { |
1352 | padding: 12px 16px 12px 10px; | 1081 | padding: 12px 16px 12px 10px; |
1353 | } | 1082 | } |
src/views/basic/device/log.vue
@@ -286,7 +286,7 @@ export default { | @@ -286,7 +286,7 @@ export default { | ||
286 | for (let key in this.query) { | 286 | for (let key in this.query) { |
287 | if (this.query[key] != "") { | 287 | if (this.query[key] != "") { |
288 | if (key == "day" || key == "startDay" || key == "endDay") { | 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 | } else { | 290 | } else { |
291 | query[key] = this.query[key]; | 291 | query[key] = this.query[key]; |
292 | } | 292 | } |
src/views/basic/setUp/teacher.vue
@@ -6,93 +6,41 @@ | @@ -6,93 +6,41 @@ | ||
6 | </template> | 6 | </template> |
7 | <template slot="btns" v-if="!code"> | 7 | <template slot="btns" v-if="!code"> |
8 | <el-tooltip effect="dark" content="导入教师名单" placement="bottom"> | 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 | </el-tooltip> | 10 | </el-tooltip> |
18 | <el-tooltip effect="dark" content="导出教师名单" placement="bottom"> | 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 | </el-tooltip> | 14 | </el-tooltip> |
28 | <el-tooltip effect="dark" content="添加教师" placement="bottom"> | 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 | </el-tooltip> | 17 | </el-tooltip> |
38 | </template> | 18 | </template> |
39 | </back-box> | 19 | </back-box> |
40 | 20 | ||
41 | <div class="answer-header"> | 21 | <div class="answer-header"> |
42 | <div class="sel-box"> | 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 | multiple: true, | 29 | multiple: true, |
53 | checkStrictly: true, | 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 | <el-option disabled label="请选择" :value="9"></el-option> | 33 | <el-option disabled label="请选择" :value="9"></el-option> |
65 | <el-option label="已分配任课信息" :value="0"></el-option> | 34 | <el-option label="已分配任课信息" :value="0"></el-option> |
66 | <el-option label="未分配任课信息" :value="1"></el-option> | 35 | <el-option label="未分配任课信息" :value="1"></el-option> |
67 | </el-select> | 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 | </el-input> | 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 | </el-input> | 44 | </el-input> |
97 | <!-- <el-button class="serach-box" round @click="_QueryData(4)" | 45 | <!-- <el-button class="serach-box" round @click="_QueryData(4)" |
98 | >筛选</el-button | 46 | >筛选</el-button |
@@ -103,36 +51,30 @@ | @@ -103,36 +51,30 @@ | ||
103 | 共筛选出{{ teacherList.length }}名教师。 | 51 | 共筛选出{{ teacherList.length }}名教师。 |
104 | </p> | 52 | </p> |
105 | <div class="page-content"> | 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 | <div class="teacher-box" v-loading="loading" v-else> | 55 | <div class="teacher-box" v-loading="loading" v-else> |
112 | <div class="teacher-list"> | 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 | </div> | 73 | </div> |
129 | <div class="teacher-detail"> | 74 | <div class="teacher-detail"> |
130 | <div class="icon-box" v-if="!code"> | 75 | <div class="icon-box" v-if="!code"> |
131 | <i class="icon el-icon-edit-outline" @click="editTeacher(1)"></i> | 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 | </div> | 78 | </div> |
137 | <div class="detail-top"> | 79 | <div class="detail-top"> |
138 | <p class="p-item">手机号码:{{ teacherDetail.loginName }}</p> | 80 | <p class="p-item">手机号码:{{ teacherDetail.loginName }}</p> |
@@ -142,29 +84,18 @@ | @@ -142,29 +84,18 @@ | ||
142 | <p class="p-item"> | 84 | <p class="p-item"> |
143 | 性别:{{ | 85 | 性别:{{ |
144 | teacherDetail.sex == 1 | 86 | teacherDetail.sex == 1 |
145 | - ? "男" | ||
146 | - : teacherDetail.sex == 2 | 87 | + ? "男" |
88 | + : teacherDetail.sex == 2 | ||
147 | ? "女" | 89 | ? "女" |
148 | : "未知" | 90 | : "未知" |
149 | }} | 91 | }} |
150 | </p> | 92 | </p> |
151 | </div> | 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 | <p class="h-title">班主任</p> | 95 | <p class="h-title">班主任</p> |
157 | <ul class="grade-info"> | 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 | <i class="el-icon-delete" slot="reference"></i> | 99 | <i class="el-icon-delete" slot="reference"></i> |
169 | </el-popconfirm> | 100 | </el-popconfirm> |
170 | <div class="grade-item"> | 101 | <div class="grade-item"> |
@@ -182,25 +113,13 @@ | @@ -182,25 +113,13 @@ | ||
182 | </li> | 113 | </li> |
183 | </ul> | 114 | </ul> |
184 | </div> | 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 | <p class="h-title">任课老师</p> | 119 | <p class="h-title">任课老师</p> |
193 | <ul class="grade-info"> | 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 | <i class="el-icon-delete" slot="reference"></i> | 123 | <i class="el-icon-delete" slot="reference"></i> |
205 | </el-popconfirm> | 124 | </el-popconfirm> |
206 | <div class="grade-item"> | 125 | <div class="grade-item"> |
@@ -220,25 +139,13 @@ | @@ -220,25 +139,13 @@ | ||
220 | </li> | 139 | </li> |
221 | </ul> | 140 | </ul> |
222 | </div> | 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 | <p class="h-title">备课组长</p> | 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 | <li class="grade-li"> | 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 | <i class="el-icon-delete" slot="reference"></i> | 149 | <i class="el-icon-delete" slot="reference"></i> |
243 | </el-popconfirm> | 150 | </el-popconfirm> |
244 | <div class="grade-item"> | 151 | <div class="grade-item"> |
@@ -252,18 +159,8 @@ | @@ -252,18 +159,8 @@ | ||
252 | </div> | 159 | </div> |
253 | </div> | 160 | </div> |
254 | </div> | 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 | <p class="down-txt" slot="down"> | 164 | <p class="down-txt" slot="down"> |
268 | 通过Excel名单导入教师名单,点击 | 165 | 通过Excel名单导入教师名单,点击 |
269 | <el-link type="danger" @click="downExcel">模板下载</el-link> 。 | 166 | <el-link type="danger" @click="downExcel">模板下载</el-link> 。 |
@@ -273,115 +170,42 @@ | @@ -273,115 +170,42 @@ | ||
273 | <el-button @click="diaUp = false">取 消</el-button> | 170 | <el-button @click="diaUp = false">取 消</el-button> |
274 | </div> | 171 | </div> |
275 | </el-dialog> | 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 | <el-form-item v-show="!isAdd && setTercherType == 2" label="教师姓名:"> | 176 | <el-form-item v-show="!isAdd && setTercherType == 2" label="教师姓名:"> |
293 | <span>{{ formTeacher.teacherName }}</span> | 177 | <span>{{ formTeacher.teacherName }}</span> |
294 | </el-form-item> | 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 | <el-col :span="10"> | 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 | </el-col> | 183 | </el-col> |
307 | </el-form-item> | 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 | <el-col :span="10"> | 186 | <el-col :span="10"> |
314 | <el-input maxlength="30" v-model.trim="formTeacher.teacherName" /> | 187 | <el-input maxlength="30" v-model.trim="formTeacher.teacherName" /> |
315 | </el-col> | 188 | </el-col> |
316 | </el-form-item> | 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 | <el-radio-group v-model="formTeacher.sex"> | 191 | <el-radio-group v-model="formTeacher.sex"> |
323 | <el-radio :label="1">男</el-radio> | 192 | <el-radio :label="1">男</el-radio> |
324 | <el-radio :label="2">女</el-radio> | 193 | <el-radio :label="2">女</el-radio> |
325 | </el-radio-group> | 194 | </el-radio-group> |
326 | </el-form-item> | 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 | </el-option> | 200 | </el-option> |
350 | </el-select> | 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 | <i class="el-icon-close" @click="removeRoleList(index)"></i> | 209 | <i class="el-icon-close" @click="removeRoleList(index)"></i> |
386 | </div> | 210 | </div> |
387 | <p class="add-box"> | 211 | <p class="add-box"> |
@@ -415,6 +239,7 @@ export default { | @@ -415,6 +239,7 @@ export default { | ||
415 | isAdd: false, | 239 | isAdd: false, |
416 | setTercherType: 1, | 240 | setTercherType: 1, |
417 | query: { | 241 | query: { |
242 | + classType: 0, | ||
418 | gradeClassSub: [], | 243 | gradeClassSub: [], |
419 | type: 0, | 244 | type: 0, |
420 | teacherName: "", | 245 | teacherName: "", |
@@ -469,8 +294,20 @@ export default { | @@ -469,8 +294,20 @@ export default { | ||
469 | { required: true, message: "请选择角色信息", trigger: "blur" }, | 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 | async created() { | 311 | async created() { |
475 | this.code = localStorage.getItem("csCode") || ""; | 312 | this.code = localStorage.getItem("csCode") || ""; |
476 | this._QueryData(4); | 313 | this._QueryData(4); |
@@ -479,6 +316,50 @@ export default { | @@ -479,6 +316,50 @@ export default { | ||
479 | await this._QueryClass(); | 316 | await this._QueryClass(); |
480 | }, | 317 | }, |
481 | methods: { | 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 | gradeName(type) { | 363 | gradeName(type) { |
483 | return setGradeName(type); | 364 | return setGradeName(type); |
484 | }, | 365 | }, |
@@ -955,28 +836,34 @@ export default { | @@ -955,28 +836,34 @@ export default { | ||
955 | .page-content { | 836 | .page-content { |
956 | padding: 0 20px 20px; | 837 | padding: 0 20px 20px; |
957 | } | 838 | } |
839 | + | ||
958 | .total { | 840 | .total { |
959 | padding: 0 20px 10px; | 841 | padding: 0 20px 10px; |
960 | font-size: 14px; | 842 | font-size: 14px; |
961 | color: #666; | 843 | color: #666; |
962 | } | 844 | } |
845 | + | ||
963 | .teacher-box { | 846 | .teacher-box { |
964 | display: flex; | 847 | display: flex; |
965 | background: #f8f8f8; | 848 | background: #f8f8f8; |
966 | border-radius: 10px; | 849 | border-radius: 10px; |
967 | overflow: hidden; | 850 | overflow: hidden; |
968 | min-height: 400px; | 851 | min-height: 400px; |
852 | + | ||
969 | .teacher-ul { | 853 | .teacher-ul { |
970 | max-height: 60vh; | 854 | max-height: 60vh; |
971 | - overflow-y: scroll; | 855 | + overflow-y: auto; |
856 | + | ||
972 | &::-webkit-scrollbar { | 857 | &::-webkit-scrollbar { |
973 | width: 6px; | 858 | width: 6px; |
974 | } | 859 | } |
860 | + | ||
975 | &::-webkit-scrollbar-thumb { | 861 | &::-webkit-scrollbar-thumb { |
976 | border-radius: 10px; | 862 | border-radius: 10px; |
977 | background-color: #ccc; | 863 | background-color: #ccc; |
978 | } | 864 | } |
979 | } | 865 | } |
866 | + | ||
980 | .teacher-list { | 867 | .teacher-list { |
981 | width: 240px; | 868 | width: 240px; |
982 | 869 | ||
@@ -984,17 +871,38 @@ export default { | @@ -984,17 +871,38 @@ export default { | ||
984 | height: 40px; | 871 | height: 40px; |
985 | line-height: 40px; | 872 | line-height: 40px; |
986 | background: #eee; | 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 | .teacher-item { | 894 | .teacher-item { |
990 | font-size: 16px; | 895 | font-size: 16px; |
991 | color: #7f7f7f; | 896 | color: #7f7f7f; |
992 | line-height: 36px; | 897 | line-height: 36px; |
993 | cursor: pointer; | 898 | cursor: pointer; |
994 | padding-left: 12px; | 899 | padding-left: 12px; |
900 | + display: flex; | ||
901 | + | ||
995 | &:hover { | 902 | &:hover { |
996 | background: #eee; | 903 | background: #eee; |
997 | } | 904 | } |
905 | + | ||
998 | &.active { | 906 | &.active { |
999 | color: #667ffd; | 907 | color: #667ffd; |
1000 | background: #eee; | 908 | background: #eee; |
@@ -1006,19 +914,23 @@ export default { | @@ -1006,19 +914,23 @@ export default { | ||
1006 | flex: 1; | 914 | flex: 1; |
1007 | position: relative; | 915 | position: relative; |
1008 | padding-left: 10px; | 916 | padding-left: 10px; |
917 | + | ||
1009 | .icon-box { | 918 | .icon-box { |
1010 | position: absolute; | 919 | position: absolute; |
1011 | top: 12px; | 920 | top: 12px; |
1012 | right: 20px; | 921 | right: 20px; |
922 | + | ||
1013 | .icon { | 923 | .icon { |
1014 | font-size: 24px; | 924 | font-size: 24px; |
1015 | color: #7f7f7f; | 925 | color: #7f7f7f; |
1016 | cursor: pointer; | 926 | cursor: pointer; |
1017 | } | 927 | } |
928 | + | ||
1018 | .el-icon-circle-plus-outline { | 929 | .el-icon-circle-plus-outline { |
1019 | margin-left: 10px; | 930 | margin-left: 10px; |
1020 | } | 931 | } |
1021 | } | 932 | } |
933 | + | ||
1022 | .detail-top { | 934 | .detail-top { |
1023 | padding: 12px 20px; | 935 | padding: 12px 20px; |
1024 | box-sizing: border-box; | 936 | box-sizing: border-box; |
@@ -1026,20 +938,24 @@ export default { | @@ -1026,20 +938,24 @@ export default { | ||
1026 | flex-wrap: wrap; | 938 | flex-wrap: wrap; |
1027 | font-size: 14px; | 939 | font-size: 14px; |
1028 | color: #7f7f7f; | 940 | color: #7f7f7f; |
941 | + | ||
1029 | .p-item { | 942 | .p-item { |
1030 | width: 40%; | 943 | width: 40%; |
1031 | line-height: 28px; | 944 | line-height: 28px; |
1032 | } | 945 | } |
1033 | } | 946 | } |
947 | + | ||
1034 | .grade-box { | 948 | .grade-box { |
1035 | .grade-info { | 949 | .grade-info { |
1036 | display: flex; | 950 | display: flex; |
1037 | flex-wrap: wrap; | 951 | flex-wrap: wrap; |
1038 | padding: 20px 20px 0; | 952 | padding: 20px 20px 0; |
1039 | - & > li { | 953 | + |
954 | + &>li { | ||
1040 | margin-right: 20px; | 955 | margin-right: 20px; |
1041 | margin-bottom: 20px; | 956 | margin-bottom: 20px; |
1042 | position: relative; | 957 | position: relative; |
958 | + | ||
1043 | .el-icon-delete { | 959 | .el-icon-delete { |
1044 | position: absolute; | 960 | position: absolute; |
1045 | top: 8px; | 961 | top: 8px; |
@@ -1047,10 +963,12 @@ export default { | @@ -1047,10 +963,12 @@ export default { | ||
1047 | padding: 2px; | 963 | padding: 2px; |
1048 | cursor: pointer; | 964 | cursor: pointer; |
1049 | display: none; | 965 | display: none; |
966 | + | ||
1050 | &:hover { | 967 | &:hover { |
1051 | color: #667ffd; | 968 | color: #667ffd; |
1052 | } | 969 | } |
1053 | } | 970 | } |
971 | + | ||
1054 | &:hover { | 972 | &:hover { |
1055 | .el-icon-delete { | 973 | .el-icon-delete { |
1056 | display: block; | 974 | display: block; |
@@ -1065,22 +983,26 @@ export default { | @@ -1065,22 +983,26 @@ export default { | ||
1065 | border-radius: 10px; | 983 | border-radius: 10px; |
1066 | box-shadow: 1px 1px 3px #888; | 984 | box-shadow: 1px 1px 3px #888; |
1067 | } | 985 | } |
986 | + | ||
1068 | .grade-name { | 987 | .grade-name { |
1069 | font-size: 16px; | 988 | font-size: 16px; |
1070 | font-weight: bold; | 989 | font-weight: bold; |
1071 | line-height: 18px; | 990 | line-height: 18px; |
1072 | padding-bottom: 12px; | 991 | padding-bottom: 12px; |
1073 | } | 992 | } |
993 | + | ||
1074 | .grade-class { | 994 | .grade-class { |
1075 | display: flex; | 995 | display: flex; |
1076 | justify-content: space-between; | 996 | justify-content: space-between; |
1077 | font-size: 15px; | 997 | font-size: 15px; |
1078 | padding-right: 20px; | 998 | padding-right: 20px; |
999 | + | ||
1079 | .fa { | 1000 | .fa { |
1080 | font-size: 18px; | 1001 | font-size: 18px; |
1081 | margin-right: 5px; | 1002 | margin-right: 5px; |
1082 | color: #a4a4a4; | 1003 | color: #a4a4a4; |
1083 | } | 1004 | } |
1005 | + | ||
1084 | .fa-book { | 1006 | .fa-book { |
1085 | font-size: 20px; | 1007 | font-size: 20px; |
1086 | } | 1008 | } |
@@ -1089,16 +1011,20 @@ export default { | @@ -1089,16 +1011,20 @@ export default { | ||
1089 | } | 1011 | } |
1090 | } | 1012 | } |
1091 | } | 1013 | } |
1014 | + | ||
1092 | .add-box { | 1015 | .add-box { |
1093 | margin-top: 10px; | 1016 | margin-top: 10px; |
1094 | } | 1017 | } |
1018 | + | ||
1095 | .sel-c { | 1019 | .sel-c { |
1096 | width: 120px; | 1020 | width: 120px; |
1097 | margin-right: 12px; | 1021 | margin-right: 12px; |
1098 | } | 1022 | } |
1023 | + | ||
1099 | .role-list { | 1024 | .role-list { |
1100 | margin-bottom: 10px; | 1025 | margin-bottom: 10px; |
1101 | position: relative; | 1026 | position: relative; |
1027 | + | ||
1102 | .sel-p { | 1028 | .sel-p { |
1103 | position: absolute; | 1029 | position: absolute; |
1104 | left: 146px; | 1030 | left: 146px; |
@@ -1106,11 +1032,13 @@ export default { | @@ -1106,11 +1032,13 @@ export default { | ||
1106 | font-size: 13px; | 1032 | font-size: 13px; |
1107 | color: #606266; | 1033 | color: #606266; |
1108 | } | 1034 | } |
1035 | + | ||
1109 | .sel-t { | 1036 | .sel-t { |
1110 | :deep(.el-input__inner) { | 1037 | :deep(.el-input__inner) { |
1111 | background: transparent; | 1038 | background: transparent; |
1112 | } | 1039 | } |
1113 | } | 1040 | } |
1041 | + | ||
1114 | .el-icon-close { | 1042 | .el-icon-close { |
1115 | padding: 5px; | 1043 | padding: 5px; |
1116 | cursor: pointer; | 1044 | cursor: pointer; |