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; | ... | ... |