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