Commit 21dfdeae42638efda117a313af013e4d57b39001

Authored by 梁保满
1 parent 03bce046

平台管理员

src/api/apis/apis.js
@@ -1120,4 +1120,46 @@ export default { @@ -1120,4 +1120,46 @@ export default {
1120 data 1120 data
1121 }); 1121 });
1122 }, 1122 },
  1123 +
  1124 + /** 平台管理 */
  1125 + //账户管理
  1126 + tenantPage(data) {
  1127 + return service({
  1128 + url: setUpUrls.tenantPage,
  1129 + method: "POST",
  1130 + data
  1131 + });
  1132 + },
  1133 + //修改账号
  1134 + updateTenant(data) {
  1135 + return service({
  1136 + url: setUpUrls.updateTenant,
  1137 + method: "POST",
  1138 + data
  1139 + });
  1140 + },
  1141 + //新增租户账号
  1142 + addTenant(data) {
  1143 + return service({
  1144 + url: setUpUrls.addTenant,
  1145 + method: "POST",
  1146 + data
  1147 + });
  1148 + },
  1149 + //授课端版本管理
  1150 + versionPage(data) {
  1151 + return service({
  1152 + url: setUpUrls.versionPage,
  1153 + method: "POST",
  1154 + data
  1155 + });
  1156 + },
  1157 + //新增授课端版本
  1158 + addVersion(data) {
  1159 + return service({
  1160 + url: setUpUrls.addVersion,
  1161 + method: "POST",
  1162 + data
  1163 + });
  1164 + },
1123 }; 1165 };
src/router/permission.js
@@ -34,6 +34,9 @@ router.beforeEach((to, from, next) => { @@ -34,6 +34,9 @@ router.beforeEach((to, from, next) => {
34 "portrait", 34 "portrait",
35 "dataSync", 35 "dataSync",
36 "down", 36 "down",
  37 + "account",
  38 + "device",
  39 + "clientVersion"
37 ]); 40 ]);
38 //end 41 //end
39 42
src/store/index.js
@@ -40,9 +40,9 @@ const store = new Vuex.Store({ @@ -40,9 +40,9 @@ const store = new Vuex.Store({
40 }, 40 },
41 setRouters: (state, routers) => { 41 setRouters: (state, routers) => {
42 let addrouterList = [] 42 let addrouterList = []
43 - if(state.info.showRole == 'ROLE_PINGTAI'){ 43 + if(state.info.showRole == 'ROLE_PERSONAL'){
44 addrouterList = [...addroutersPersonal] 44 addrouterList = [...addroutersPersonal]
45 - }else if(state.info.showRole == 'ROLE_ADMIN'){ 45 + }else if(state.info.showRole == 'ROLE_PINGTAI'){
46 addrouterList = [...addRoutersAdmin] 46 addrouterList = [...addRoutersAdmin]
47 }else{ 47 }else{
48 addrouterList = [...addrouters] 48 addrouterList = [...addrouters]
@@ -80,33 +80,33 @@ const store = new Vuex.Store({ @@ -80,33 +80,33 @@ const store = new Vuex.Store({
80 const userInfo = { ...response.data }; 80 const userInfo = { ...response.data };
81 if (userInfo.permissions && userInfo.permissions.length) { 81 if (userInfo.permissions && userInfo.permissions.length) {
82 userInfo.showRoleName = response.data.permissions[0]?.roleName; 82 userInfo.showRoleName = response.data.permissions[0]?.roleName;
83 - // userInfo.showRole = response.data.permissions[0]?.role; 83 + userInfo.showRole = response.data.permissions[0]?.role;
84 // 开发用,测试删除 84 // 开发用,测试删除
85 - userInfo.showRole = "ROLE_PINGTAI"; 85 + // userInfo.showRole = "ROLE_PERSONAL";
86 commit("setToken", "isLogin"); 86 commit("setToken", "isLogin");
87 commit("setInfo", { ...userInfo }); 87 commit("setInfo", { ...userInfo });
88 - // commit("setRouters", [  
89 - // ...userInfo.permissions[0]?.authorityRouter,  
90 - // ]); 88 + commit("setRouters", [
  89 + ...userInfo.permissions[0]?.authorityRouter,
  90 + ]);
91 //start 开发用,测试删除 91 //start 开发用,测试删除
92 - commit("setRouters", [  
93 - "setUpStudent",  
94 - "examinationPaper",  
95 - "examinationPaperAdd",  
96 - "examinationPaperEdit",  
97 - "examinationPaperRecycle",  
98 - "ask",  
99 - "askAnalysis",  
100 - "test",  
101 - "testAnalysis",  
102 - "portrait",  
103 - "dataSync",  
104 - "down", 92 + // commit("setRouters", [
  93 + // "setUpStudent",
  94 + // "examinationPaper",
  95 + // "examinationPaperAdd",
  96 + // "examinationPaperEdit",
  97 + // "examinationPaperRecycle",
  98 + // "ask",
  99 + // "askAnalysis",
  100 + // "test",
  101 + // "testAnalysis",
  102 + // "portrait",
  103 + // "dataSync",
  104 + // "down",
105 105
106 - "account",  
107 - "device",  
108 - "clientVersion"  
109 - ]); 106 + // "account",
  107 + // "device",
  108 + // "clientVersion"
  109 + // ]);
110 //end 110 //end
111 111
112 state.addRouters.forEach((res) => { 112 state.addRouters.forEach((res) => {
src/views/admin/account/index.vue
1 <template> 1 <template>
2 <div> 2 <div>
3 - <back-box> 3 + <back-box>
4 <template slot="title"> 4 <template slot="title">
5 <span>账号管理</span> 5 <span>账号管理</span>
6 </template> 6 </template>
  7 + <template slot="btns">
  8 + <el-tooltip effect="dark" content="添加账号" placement="bottom">
  9 + <el-button
  10 + type="primary"
  11 + icon="el-icon-plus"
  12 + size="mini"
  13 + plain
  14 + circle
  15 + @click="openAddDia"
  16 + ></el-button>
  17 + </el-tooltip>
  18 + </template>
7 </back-box> 19 </back-box>
8 - <div class="page-content">  
9 - 功能开发中。 20 + <div class="answer-header">
  21 + <div class="sel-box">
  22 + <el-select
  23 + class="sel"
  24 + v-model="query.versionType"
  25 + placeholder="选择账号类型"
  26 + @change="(page = 1), _QueryData()"
  27 + >
  28 + <el-option label="无" :value="0"></el-option>
  29 + <el-option label="标准版" :value="1"></el-option>
  30 + <el-option label="个人版" :value="2"></el-option>
  31 + <el-option label="定制版" :value="3"></el-option>
  32 + </el-select>
  33 + <el-select
  34 + class="sel"
  35 + v-model="query.available"
  36 + placeholder="选择账号状态"
  37 + @change="(page = 1), _QueryData()"
  38 + >
  39 + <el-option label="正常" :value="0"></el-option>
  40 + <el-option label="禁用" :value="1"></el-option>
  41 + </el-select>
  42 + <el-input
  43 + placeholder="请输入账号名称"
  44 + v-model="query.loginName"
  45 + class="input-with-select"
  46 + @keyup.enter.native="(page = 1), _QueryData()"
  47 + >
  48 + <el-button
  49 + slot="append"
  50 + icon="el-icon-search"
  51 + @click="(page = 1), _QueryData()"
  52 + ></el-button>
  53 + </el-input>
  54 + <el-button type="primary" round @click="(page = 1), _QueryData()"
  55 + >筛选</el-button
  56 + >
  57 + </div>
  58 + </div>
  59 + <div class="table-box">
  60 + <el-table
  61 + :data="tableData"
  62 + border
  63 + style="width: 100%"
  64 + v-loading="loading"
  65 + >
  66 + <el-table-column
  67 + prop="loginName"
  68 + label="账号"
  69 + align="center"
  70 + ></el-table-column>
  71 + <el-table-column
  72 + prop="realName"
  73 + label="姓名"
  74 + align="center"
  75 + ></el-table-column>
  76 + <el-table-column prop="versionType" label="账号类型" align="center">
  77 + <template slot-scope="scoped">{{
  78 + `${
  79 + scoped.row.versionType == 0
  80 + ? "无"
  81 + : scoped.row.versionType == 1
  82 + ? "标准版"
  83 + : scoped.row.versionType == 2
  84 + ? "个人版"
  85 + : "定制版"
  86 + }`
  87 + }}</template></el-table-column
  88 + >
  89 + <el-table-column
  90 + prop="tenantName"
  91 + label="学校名称"
  92 + align="center"
  93 + ></el-table-column>
  94 + <el-table-column prop="available" label="状态" align="center"
  95 + ><template slot-scope="scoped">{{
  96 + `${scoped.row.available == 0 ? "正常" : "禁用"}`
  97 + }}</template></el-table-column
  98 + >
  99 + <el-table-column
  100 + prop="createdTime"
  101 + label="创建时间"
  102 + align="center"
  103 + width="200"
  104 + ></el-table-column>
  105 + <el-table-column label="操作" align="center" width="160">
  106 + <template slot-scope="scoped">
  107 + <el-tooltip content="修改账号" placement="left">
  108 + <el-button
  109 + class="set-count"
  110 + type="primary"
  111 + circle
  112 + icon="el-icon-edit-outline"
  113 + size="mini"
  114 + @click="setCount(scoped.row)"
  115 + ></el-button>
  116 + </el-tooltip>
  117 + <el-dropdown
  118 + trigger="hover"
  119 + @command="handleDropdownClick($event, scoped.row)"
  120 + >
  121 + <el-button
  122 + type="info"
  123 + size="mini"
  124 + circle
  125 + icon="el-icon-more"
  126 + ></el-button>
  127 + <el-dropdown-menu slot="dropdown">
  128 + <el-dropdown-item :command="0">重置密码</el-dropdown-item>
  129 + <el-dropdown-item :command="1">{{
  130 + `${scoped.row.available == 0 ? "禁用" : "启用"}`
  131 + }}</el-dropdown-item>
  132 + <el-dropdown-item :command="2">删除</el-dropdown-item>
  133 + </el-dropdown-menu>
  134 + </el-dropdown>
  135 + </template>
  136 + </el-table-column>
  137 + </el-table>
  138 + <div class="pagination-box">
  139 + <el-pagination
  140 + layout="total,prev, pager, next"
  141 + :hide-on-single-page="true"
  142 + :total="total"
  143 + @current-change="changePage"
  144 + :current-page="page"
  145 + :page-size="size"
  146 + >
  147 + </el-pagination>
  148 + </div>
10 </div> 149 </div>
  150 + <el-dialog title="修改账号信息" :visible.sync="diaCount" width="400">
  151 + <el-form
  152 + class="form-box"
  153 + :model="formCount"
  154 + :rules="ruleCount"
  155 + ref="formCount"
  156 + label-width="160px"
  157 + >
  158 + <el-form-item label="账号:" prop="loginName">
  159 + <el-col :span="12">
  160 + <el-input
  161 + placeholder="请输入账号"
  162 + v-model.trim="formCount.loginName"
  163 + maxlength="30"
  164 + >
  165 + </el-input>
  166 + </el-col>
  167 + </el-form-item>
  168 + <el-form-item label="密码:" prop="password">
  169 + <el-col :span="12">
  170 + <el-input
  171 + placeholder="请输入密码"
  172 + v-model.trim="formCount.password"
  173 + maxlength="18"
  174 + >
  175 + </el-input>
  176 + </el-col>
  177 + </el-form-item>
  178 + <el-form-item label="联系人姓名:" prop="contactPerson">
  179 + <el-col :span="12">
  180 + <el-input
  181 + placeholder="请输入联系人姓名"
  182 + v-model.trim="formCount.contactPerson"
  183 + maxlength="12"
  184 + >
  185 + </el-input>
  186 + </el-col>
  187 + </el-form-item>
  188 + <el-form-item label="联系人手机号:" prop="contactPhone">
  189 + <el-col :span="12">
  190 + <el-input
  191 + placeholder="请输入联系人手机号"
  192 + v-model.trim="formCount.contactPhone"
  193 + type="number"
  194 + oninput="if(value.length > 11) value = value.slice(0,11)"
  195 + >
  196 + </el-input>
  197 + </el-col>
  198 + </el-form-item>
  199 + <el-form-item label="学校/集团名称:" prop="tenantName">
  200 + <el-col :span="12">
  201 + <el-input
  202 + placeholder="学校/集团名称"
  203 + v-model.trim="formCount.tenantName"
  204 + maxlength="30"
  205 + >
  206 + </el-input>
  207 + </el-col>
  208 + </el-form-item>
  209 + </el-form>
  210 + <div class="dialog-footer" slot="footer">
  211 + <el-button @click="saveCount">确 定</el-button>
  212 + <el-button @click="diaCount = false">取 消</el-button>
  213 + </div>
  214 + </el-dialog>
  215 + <el-dialog title="添加账号" :visible.sync="diaAdd" width="400">
  216 + <el-form
  217 + class="form-box"
  218 + :model="formAddCount"
  219 + :rules="ruleAddCount"
  220 + ref="formAddCount"
  221 + label-width="160px"
  222 + >
  223 + <el-form-item label="请输入账号:" prop="loginName">
  224 + <el-col :span="12">
  225 + <el-input
  226 + placeholder="请输入联系电话"
  227 + v-model.trim="formAddCount.loginName"
  228 + type="number"
  229 + oninput="if(value.length > 11) value = value.slice(0,11)"
  230 + >
  231 + </el-input>
  232 + </el-col>
  233 + </el-form-item>
  234 + <el-form-item label="选择账号类型:" prop="versionType">
  235 + <el-col :span="12">
  236 + <el-select
  237 + class="sel"
  238 + v-model="formAddCount.versionType"
  239 + placeholder="请选择账号类型"
  240 + >
  241 + <el-option label="无" :value="0"></el-option>
  242 + <el-option label="标准版" :value="1"></el-option>
  243 + <el-option label="个人版" :value="2"></el-option>
  244 + <el-option label="定制版" :value="3"></el-option>
  245 + </el-select>
  246 + </el-col>
  247 + </el-form-item>
  248 + <el-form-item label="联系人姓名:" prop="contactPerson">
  249 + <el-col :span="12">
  250 + <el-input
  251 + placeholder="请输入联系人姓名"
  252 + v-model.trim="formAddCount.contactPerson"
  253 + maxlength="12"
  254 + >
  255 + </el-input>
  256 + </el-col>
  257 + </el-form-item>
  258 + <el-form-item label="联系人手机号:" prop="contactPhone">
  259 + <el-col :span="12">
  260 + <el-input
  261 + placeholder="请输入联系人手机号"
  262 + v-model.trim="formAddCount.contactPhone"
  263 + type="number"
  264 + oninput="if(value.length > 11) value = value.slice(0,11)"
  265 + >
  266 + </el-input>
  267 + </el-col>
  268 + </el-form-item>
  269 + <el-form-item label="学校/集团名称:" prop="tenantName">
  270 + <el-col :span="12">
  271 + <el-input
  272 + placeholder="学校/集团名称"
  273 + v-model.trim="formAddCount.tenantName"
  274 + maxlength="30"
  275 + >
  276 + </el-input>
  277 + </el-col>
  278 + </el-form-item>
  279 + </el-form>
  280 + <div class="dialog-footer" slot="footer">
  281 + <el-button @click="saveAddCount">确 定</el-button>
  282 + <el-button @click="diaAdd = false">取 消</el-button>
  283 + </div>
  284 + </el-dialog>
11 </div> 285 </div>
12 </template> 286 </template>
13 287
14 <script> 288 <script>
  289 +import { encryptLoginPassword } from "@/utils";
15 export default { 290 export default {
  291 + data() {
  292 + return {
  293 + diaAdd: false,
  294 + loading: false,
  295 + diaCount: false,
  296 + props: { multiple: true, checkStrictly: true },
  297 + query: {
  298 + type: "",
  299 + available: "",
  300 + loginName: "",
  301 + },
  302 + tableData: [],
  303 + total: 0,
  304 + page: 1,
  305 + size: 20,
  306 + formCount: {
  307 + loginName: "",
  308 + type: "",
  309 + tenantName: "",
  310 + contactPerson: "",
  311 + contactPhone: "",
  312 + },
  313 + ruleCount: {
  314 + loginName: [{ required: true, message: "请输入账号", trigger: "blur" }],
  315 + password: [{ required: true, message: "请输入密码", trigger: "blur" }],
  316 + contactPhone: [
  317 + { required: true, message: "请输入联系电话", trigger: "blur" },
  318 + ],
  319 + contactPerson: [
  320 + { required: true, message: "请输入联系人姓名", trigger: "blur" },
  321 + ],
  322 + },
  323 + formAddCount: {
  324 + loginName: "",
  325 + contactPhone: "",
  326 + contactPerson: "",
  327 + versionType: "",
  328 + tenantName: "",
  329 + },
  330 + ruleAddCount: {
  331 + loginName: [{ required: true, message: "请输入账号", trigger: "blur" }],
  332 + contactPhone: [
  333 + { required: true, message: "请输入联系电话", trigger: "blur" },
  334 + ],
  335 + contactPerson: [
  336 + { required: true, message: "请输入联系人姓名", trigger: "blur" },
  337 + ],
  338 + versionType: [
  339 + { required: true, message: "请选择租户类型", trigger: "blur" },
  340 + ],
  341 + },
  342 + };
  343 + },
  344 + created() {
  345 + // _QueryData();
  346 + },
  347 + methods: {
  348 + openAddDia() {
  349 + //添加账号
  350 + this.formAddCount.loginName = "";
  351 + this.formAddCount.contactPhone = "";
  352 + this.formAddCount.contactPerson = "";
  353 + this.formAddCount.tenantName = "";
  354 + this.formAddCount.versionType = 0;
  355 + this.diaAdd = true;
  356 + },
  357 + saveAddCount() {
  358 + //保存新增账号
  359 + this.$refs.formAddCount.validate(async (valid) => {
  360 + if (valid) {
  361 + let params = { ...this.formAddCount };
  362 + const { data, status, info } = await this.$request.addUser({
  363 + ...params,
  364 + });
  365 + if (status === 0) {
  366 + this.$message.success(info);
  367 + this._QueryData();
  368 + this.diaAdd = false;
  369 + } else {
  370 + this.$message.error(info);
  371 + }
  372 + } else {
  373 + this.$message.warning("输入有误请检查!");
  374 + return false;
  375 + }
  376 + });
  377 + },
  378 + setCount(obj) {
  379 + //修改账号
  380 + this.formCount = { ...obj };
  381 + this.diaCount = true;
  382 + },
  383 + handleDropdownClick(value, item) {
  384 + console.log(item);
  385 + //更多
  386 + if (value == 2) {
  387 + this.$confirm("确定要删除这条账号信息吗?", "提示", {
  388 + customClass: "del-model",
  389 + cancelButttonText: "取消",
  390 + confirmButtonText: "确定",
  391 + type: "warning",
  392 + }).then(() => {
  393 + this.updateUser(item, value);
  394 + });
  395 + } else {
  396 + this.updateUser(item, value);
  397 + }
  398 + },
  399 + changePage(page) {
  400 + this.page = page;
  401 + this._QueryData();
  402 + },
  403 + saveCount() {
  404 + //保存修改账号
  405 + this.$refs.formCount.validate(async (valid) => {
  406 + if (valid) {
  407 + let params = { ...this.formCount };
  408 + params.password = encryptLoginPassword(params.password);
  409 + const { data, status, info } = await this.$request.tenantUpdateUser({
  410 + type: 3,
  411 + ...params,
  412 + });
  413 + if (status === 0) {
  414 + this.$message.success(info);
  415 + this.diaCount = false;
  416 + this._QueryData();
  417 + } else {
  418 + this.$message.error(info);
  419 + }
  420 + } else {
  421 + this.$message.warning("输入有误请检查!");
  422 + return false;
  423 + }
  424 + });
  425 + },
  426 + async updateUser(obj, type) {
  427 + let query = {};
  428 + console.log(query);
  429 + if (type == 1) {
  430 + query.available = obj.available == 0 ? 1 : 0;
  431 + }
  432 + const { data, status, info } = await this.$request.tenantUpdateUser({
  433 + userId: obj.id,
  434 + type: type,
  435 + ...query,
  436 + });
  437 + if (status === 0) {
  438 + this.$message.success(info);
  439 + this._QueryData();
  440 + } else {
  441 + this.$message.error(info);
  442 + }
  443 + },
  444 + async _QueryData() {
  445 + let query = { ...this.query };
  446 + if (query.loginName) {
  447 + delete query.type;
  448 + delete query.available;
  449 + }
  450 + this.loading = true;
  451 + this.tableData = [];
  452 + const { data, status, info } = await this.$request.tenantPage({
  453 + ...query,
  454 + page: this.page,
  455 + size: this.size,
  456 + });
16 457
17 -} 458 + this.loading = false;
  459 + if (status === 0) {
  460 + this.tableData = data.list || [];
  461 + this.total = data.count;
  462 + } else {
  463 + this.$message.error(info);
  464 + }
  465 + },
  466 + },
  467 +};
18 </script> 468 </script>
19 -  
20 -<style>  
21 - 469 +<style lang="scss">
  470 +.del-model {
  471 + .el-message-box__btns button:nth-child(1) {
  472 + color: #667ffd;
  473 + }
  474 +}
  475 +</style>
  476 +<style lang="scss" scoped>
  477 +.el-message-box .el-button--default {
  478 + color: red;
  479 +}
  480 +.set-count {
  481 + margin-right: 12px;
  482 +}
  483 +.table-box {
  484 + padding: 0 20px;
  485 +}
22 </style> 486 </style>
23 \ No newline at end of file 487 \ No newline at end of file
src/views/admin/clientVersion/components/upLoad.vue 0 → 100644
  1 +<template>
  2 + <div>
  3 + <slot name="down"></slot>
  4 + <div class="d1">
  5 + <el-upload
  6 + class="upload-demo"
  7 + ref="upload"
  8 + :action="url"
  9 + :multiple="false"
  10 + :data="{ ...query }"
  11 + :with-credentials="true"
  12 + :limit="1"
  13 + :on-change="change"
  14 + :on-success="upSuccess"
  15 + :on-error="upError"
  16 + >
  17 + <!-- accept="application/vnd.ms-excel" -->
  18 + <div class="upload-btn">
  19 + <el-button class="btn" size="mini" type="primary">选择文件</el-button>
  20 + </div>
  21 + </el-upload>
  22 + </div>
  23 + </div>
  24 +</template>
  25 +
  26 +<script>
  27 +export default {
  28 + name: "downUpData",
  29 + props: {
  30 + query: {
  31 + type: Object,
  32 + default: function () {
  33 + return {};
  34 + },
  35 + },
  36 + url: {
  37 + type: String,
  38 + default: "",
  39 + },
  40 + },
  41 + data() {
  42 + return {
  43 + file: null,
  44 + };
  45 + },
  46 + methods: {
  47 + async submitUpload() {
  48 + this.$refs.upload.submit();
  49 +
  50 + // const formData = new FormData()
  51 + // formData.append('id',this.componentId)
  52 + // formData.append('file',new File(this.file.raw))
  53 + // let {status,info} = await uploadExcel(formData);
  54 + // if(status===0){
  55 + // this.$message.success(info);
  56 + // this.$emit("upSuccess")
  57 + // } else {
  58 + // this.$message.error(info);
  59 + // }
  60 + },
  61 + upSuccess(res) {
  62 + if (res && res.status == 0) {
  63 + this.$message.success("上传成功");
  64 + this.$emit("upSuccess", res);
  65 + } else {
  66 + this.$message.error(res.info);
  67 + }
  68 + },
  69 + upError(res) {
  70 + if (res && res.status == 0) {
  71 + this.$message.error("上传失败");
  72 + } else {
  73 + this.$message.error(res.message);
  74 + }
  75 + },
  76 + change(file) {
  77 + this.file = file;
  78 + },
  79 + },
  80 +};
  81 +</script>
  82 +
  83 +<style lang="scss" scoped>
  84 +.btn {
  85 + border-radius: 8px;
  86 + font-weight: normal;
  87 +}
  88 +.upload-btn {
  89 + .el-icon-upload {
  90 + font-size: 48px;
  91 + margin-bottom: 6px;
  92 + color: #667ffd;
  93 + }
  94 +}
  95 +</style>
src/views/admin/clientVersion/components/upLoadImg.vue 0 → 100644
  1 +<template>
  2 + <div>
  3 + <slot name="down"></slot>
  4 + <el-upload
  5 + class="avatar-uploader"
  6 + ref="upload"
  7 + :action="url"
  8 + :multiple="false"
  9 + :data="{ ...query }"
  10 + :with-credentials="true"
  11 + :limit="1"
  12 + :on-success="upSuccess"
  13 + :on-error="upError"
  14 + >
  15 + <!-- accept="application/vnd.ms-excel" -->
  16 + <img v-if="imageUrl" :src="imageUrl" class="avatar" />
  17 + <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  18 + </el-upload>
  19 + </div>
  20 +</template>
  21 +
  22 +<script>
  23 +export default {
  24 + name: "downUpData",
  25 + props: {
  26 + query: {
  27 + type: Object,
  28 + default: function () {
  29 + return {};
  30 + },
  31 + },
  32 + url: {
  33 + type: String,
  34 + default: "",
  35 + },
  36 + },
  37 + data() {
  38 + return {
  39 + file: null,
  40 + imageUrl: "",
  41 + };
  42 + },
  43 + methods: {
  44 + async submitUpload() {
  45 + this.$refs.upload.submit();
  46 +
  47 + // const formData = new FormData()
  48 + // formData.append('id',this.componentId)
  49 + // formData.append('file',new File(this.file.raw))
  50 + // let {status,info} = await uploadExcel(formData);
  51 + // if(status===0){
  52 + // this.$message.success(info);
  53 + // this.$emit("upSuccess")
  54 + // } else {
  55 + // this.$message.error(info);
  56 + // }
  57 + },
  58 + upSuccess(res, file) {
  59 + if (res && res.status == 0) {
  60 + this.imageUrl = URL.createObjectURL(file.raw);
  61 + this.$message.success("上传成功");
  62 + this.$emit("upSuccess", res);
  63 + } else {
  64 + this.$message.error(res.info);
  65 + }
  66 + },
  67 + upError(res) {
  68 + if (res && res.status == 0) {
  69 + this.$message.error("上传失败");
  70 + } else {
  71 + this.$message.error(res.message);
  72 + }
  73 + },
  74 + },
  75 +};
  76 +</script>
  77 +
  78 +<style>
  79 +.avatar-uploader {
  80 + line-height: 1;
  81 +}
  82 +.avatar-uploader .el-upload {
  83 + border: 1px dashed #d9d9d9;
  84 + border-radius: 6px;
  85 + cursor: pointer;
  86 + position: relative;
  87 + overflow: hidden;
  88 +}
  89 +.avatar-uploader .el-upload:hover {
  90 + border-color: #409eff;
  91 +}
  92 +.avatar-uploader .avatar-uploader-icon {
  93 + font-size: 24px;
  94 + color: #8c939d;
  95 + width: 80px;
  96 + height: 80px;
  97 + line-height: 80px;
  98 + text-align: center;
  99 +}
  100 +.avatar-uploader .avatar {
  101 + width: 80px;
  102 + height: 80px;
  103 + display: block;
  104 +}
  105 +</style>
src/views/admin/clientVersion/index.vue
1 <template> 1 <template>
2 <div> 2 <div>
3 - <back-box> 3 + <back-box>
4 <template slot="title"> 4 <template slot="title">
5 <span>授课端版本管理</span> 5 <span>授课端版本管理</span>
6 </template> 6 </template>
  7 + <template slot="btns">
  8 + <el-tooltip effect="dark" content="添加版本" placement="bottom">
  9 + <el-button
  10 + type="primary"
  11 + icon="el-icon-plus"
  12 + size="mini"
  13 + plain
  14 + circle
  15 + @click="openAddDia"
  16 + ></el-button>
  17 + </el-tooltip>
  18 + </template>
7 </back-box> 19 </back-box>
8 - <div class="page-content">  
9 - 功能开发中。 20 + <div class="table-box">
  21 + <el-table
  22 + :data="tableData"
  23 + border
  24 + style="width: 100%"
  25 + v-loading="loading"
  26 + >
  27 + <el-table-column
  28 + prop="md5"
  29 + label="MD5编码"
  30 + align="center"
  31 + ></el-table-column>
  32 + <el-table-column
  33 + prop="versionName"
  34 + label="版本名称"
  35 + align="center"
  36 + ></el-table-column>
  37 + <el-table-column
  38 + prop="versionNumber"
  39 + label="版本号"
  40 + align="center"
  41 + ></el-table-column>
  42 + <el-table-column
  43 + prop="createdTime"
  44 + label="上传时间"
  45 + align="center"
  46 + width="200"
  47 + ></el-table-column>
  48 + <el-table-column
  49 + prop="fileSize"
  50 + label="文件大小"
  51 + align="center"
  52 + ></el-table-column>
  53 + <el-table-column
  54 + prop="description"
  55 + label="更新描述"
  56 + align="center"
  57 + ></el-table-column>
  58 + <el-table-column label="操作" align="center" width="160">
  59 + <template slot-scope="scoped">
  60 + <el-popconfirm title="确定删除吗?" @confirm="remove(scoped.row)">
  61 + <span class="del" slot="reference">删除</span>
  62 + </el-popconfirm>
  63 + </template>
  64 + </el-table-column>
  65 + </el-table>
  66 + <div class="pagination-box">
  67 + <el-pagination
  68 + layout="total,prev, pager, next"
  69 + :hide-on-single-page="true"
  70 + :total="total"
  71 + @current-change="changePage"
  72 + :current-page="page"
  73 + :page-size="size"
  74 + >
  75 + </el-pagination>
  76 + </div>
10 </div> 77 </div>
  78 + <el-dialog title="添加账号" :visible.sync="diaAdd" width="400">
  79 + <el-form
  80 + class="form-box"
  81 + :model="formAdd"
  82 + :rules="ruleAdd"
  83 + ref="formAdd"
  84 + label-width="160px"
  85 + >
  86 + <el-form-item label="版本名称:" prop="versionName">
  87 + <el-col :span="12">
  88 + <el-input
  89 + placeholder="请输入版本名称"
  90 + v-model.trim="formAdd.versionName"
  91 + maxlength="30"
  92 + >
  93 + </el-input>
  94 + </el-col>
  95 + </el-form-item>
  96 + <el-form-item label="版本号:" prop="versionNumber">
  97 + <el-col :span="12">
  98 + <el-input
  99 + placeholder="请输入版本号"
  100 + v-model.trim="formAdd.versionNumber"
  101 + maxlength="30"
  102 + >
  103 + </el-input>
  104 + </el-col>
  105 + </el-form-item>
  106 + <el-form-item label="软件图标:" prop="logo">
  107 + <el-col :span="12">
  108 + <upLoadImg :url="url" @upSuccess="logoSuccess"/>
  109 + </el-col>
  110 + </el-form-item>
  111 + <el-form-item label="上传全量文件包:" prop="appfiles">
  112 + <el-col :span="12">
  113 + <upLoad :url="url" @upSuccess="appfilesSuccess"/>
  114 + </el-col>
  115 + </el-form-item>
  116 + <el-form-item label="上传增量文件包:" prop="addfiles">
  117 + <el-col :span="12">
  118 + <upLoad :url="url" @upSuccess="addfilesSuccess"/>
  119 + </el-col>
  120 + </el-form-item>
  121 + <el-form-item label="更新描述:" prop="description">
  122 + <el-col :span="12">
  123 + <el-input
  124 + type="textarea"
  125 + :rows="3"
  126 + v-model="formAdd.description"
  127 + placeholder="填写描述"
  128 + ></el-input>
  129 + </el-col>
  130 + </el-form-item>
  131 + </el-form>
  132 + <div class="dialog-footer" slot="footer">
  133 + <el-button @click="save">确 定</el-button>
  134 + <el-button @click="diaAdd = false">取 消</el-button>
  135 + </div>
  136 + </el-dialog>
11 </div> 137 </div>
12 </template> 138 </template>
13 139
14 <script> 140 <script>
  141 +import upLoad from "./components/upLoad.vue"
  142 +import upLoadImg from "./components/upLoadImg.vue"
15 export default { 143 export default {
  144 + components:{
  145 + upLoad,
  146 + upLoadImg
  147 + },
  148 + data() {
  149 + return {
  150 + url: "/file/uploadApp",
  151 + loading: false,
  152 + diaAdd: false,
  153 + tableData: [
  154 + {
  155 + schoolName: "111",
  156 + },
  157 + ],
  158 + formAdd: {
  159 + versionName: "",
  160 + versionNumber: "",
  161 + appImage: "",
  162 + filePath: "",
  163 + incrementFilePath: "",
  164 + description: "",
  165 + },
  166 + ruleAdd: {
  167 + versionName: [
  168 + { required: true, message: "请输入版本名称", trigger: "blur" },
  169 + ],
  170 + versionNumber: [
  171 + { required: true, message: "请输入版本号", trigger: "blur" },
  172 + ],
  173 + appImage: [
  174 + { required: true, message: "请上传软件图标", trigger: "blur" },
  175 + ],
  176 + filePath: [
  177 + { required: true, message: "请上传全量文件包", trigger: "blur" },
  178 + ],
  179 + incrementFilePath: [
  180 + { required: true, message: "请上传增量文件包", trigger: "blur" },
  181 + ],
  182 + },
  183 + page: 1,
  184 + size: 20,
  185 + total: 0,
  186 + };
  187 + },
  188 + created() {
  189 + // this._QueryData();
  190 + },
  191 + methods: {
  192 + openAddDia() {
  193 + this.formAdd.versionName = "";
  194 + this.formAdd.versionNumber = "";
  195 + this.formAdd.appImage = "";
  196 + this.formAdd.filePath = "";
  197 + this.formAdd.incrementFilePath = "";
  198 + this.formAdd.description = "";
  199 + this.diaAdd = true;
  200 + },
  201 + changePage(page) {
  202 + this.page = page;
  203 + this._QueryData();
  204 + },
  205 + remove(obj) {},
  206 + logoSuccess(res){
  207 + this.formAdd.appImage = res.data;
  208 + },
  209 + appfilesSuccess(res){
  210 + this.formAdd.filePath = res.data;
  211 + },
  212 + addfilesSuccess(res){
  213 + this.formAdd.incrementFilePath = res.data;
  214 + },
  215 + save() {},
  216 + async _QueryData() {
  217 + this.loading = true;
  218 + this.tableData = [];
  219 + const { data, status, info } = await this.$request.versionPage({
  220 + page: this.page,
  221 + size: this.size,
  222 + });
16 223
17 -} 224 + this.loading = false;
  225 + if (status === 0) {
  226 + this.tableData = data.list || [];
  227 + this.total = data.count;
  228 + } else {
  229 + this.$message.error(info);
  230 + }
  231 + },
  232 + },
  233 +};
18 </script> 234 </script>
19 235
20 -<style>  
21 - 236 +<style lang="scss" scoped>
  237 +.table-box {
  238 + padding: 20px;
  239 +}
  240 +.del {
  241 + font-size: 14px;
  242 + color: #666;
  243 + cursor: pointer;
  244 +}
22 </style> 245 </style>
23 \ No newline at end of file 246 \ No newline at end of file
src/views/admin/device/index.vue
@@ -10,7 +10,6 @@ @@ -10,7 +10,6 @@
10 <el-radio-group v-model="type"> 10 <el-radio-group v-model="type">
11 <el-radio-button :label="1">基站管理</el-radio-button> 11 <el-radio-button :label="1">基站管理</el-radio-button>
12 <el-radio-button :label="2">答题器管理</el-radio-button> 12 <el-radio-button :label="2">答题器管理</el-radio-button>
13 - <el-radio-button :label="3">授课端管理</el-radio-button>  
14 </el-radio-group> 13 </el-radio-group>
15 </div> 14 </div>
16 <div class="content"> 15 <div class="content">
@@ -24,32 +23,20 @@ @@ -24,32 +23,20 @@
24 <pie-chart 23 <pie-chart
25 id="pieChart" 24 id="pieChart"
26 :params="chartData" 25 :params="chartData"
27 - @clickPieChart="clickPieChart"  
28 ></pie-chart> 26 ></pie-chart>
29 </div> 27 </div>
30 </div> 28 </div>
31 <div class="table-box"> 29 <div class="table-box">
32 <div class="answer-header"> 30 <div class="answer-header">
33 <div class="sel-box"> 31 <div class="sel-box">
34 - <el-cascader  
35 - size="small"  
36 - class="sel sel2"  
37 - clearable  
38 - placeholder="选择班级"  
39 - v-model="query.classId"  
40 - :options="gradeList"  
41 - :props="props"  
42 - collapse-tags  
43 - :show-all-levels="false"  
44 - ></el-cascader>  
45 <el-select 32 <el-select
46 class="sel" 33 class="sel"
47 - v-model="query.onlineStatus"  
48 - placeholder="选择状态" 34 + v-model="query.school"
  35 + placeholder="选择学校"
49 @change="_QueryData(true)" 36 @change="_QueryData(true)"
50 > 37 >
51 <el-option 38 <el-option
52 - v-for="item in statusList" 39 + v-for="item in schoolList"
53 :key="item.value" 40 :key="item.value"
54 :label="item.label" 41 :label="item.label"
55 :value="item.value" 42 :value="item.value"
@@ -57,7 +44,7 @@ @@ -57,7 +44,7 @@
57 </el-option> 44 </el-option>
58 </el-select> 45 </el-select>
59 <el-input 46 <el-input
60 - placeholder="请输入设备编码" 47 + placeholder="请输入租户"
61 v-model="query.sn" 48 v-model="query.sn"
62 class="input-with-select" 49 class="input-with-select"
63 @keyup.enter.native="_QueryData(true)" 50 @keyup.enter.native="_QueryData(true)"
@@ -147,32 +134,20 @@ @@ -147,32 +134,20 @@
147 <scatter-chart 134 <scatter-chart
148 id="scatterChart" 135 id="scatterChart"
149 :params="chartData2" 136 :params="chartData2"
150 - @clickScatterChart="clickScatterChart"  
151 ></scatter-chart> 137 ></scatter-chart>
152 </div> 138 </div>
153 </div> 139 </div>
154 <div class="table-box"> 140 <div class="table-box">
155 <div class="answer-header"> 141 <div class="answer-header">
156 <div class="sel-box"> 142 <div class="sel-box">
157 - <el-cascader  
158 - size="small"  
159 - class="sel sel2"  
160 - clearable  
161 - placeholder="选择班级"  
162 - v-model="query.classId"  
163 - :options="gradeList"  
164 - :props="props"  
165 - collapse-tags  
166 - :show-all-levels="false"  
167 - ></el-cascader>  
168 - <el-select 143 + <el-select
169 class="sel" 144 class="sel"
170 - v-model="query.type"  
171 - placeholder="选择状态" 145 + v-model="query.school"
  146 + placeholder="选择学校"
172 @change="_QueryData(true)" 147 @change="_QueryData(true)"
173 > 148 >
174 <el-option 149 <el-option
175 - v-for="item in typeList" 150 + v-for="item in schoolList"
176 :key="item.value" 151 :key="item.value"
177 :label="item.label" 152 :label="item.label"
178 :value="item.value" 153 :value="item.value"
@@ -180,7 +155,7 @@ @@ -180,7 +155,7 @@
180 </el-option> 155 </el-option>
181 </el-select> 156 </el-select>
182 <el-input 157 <el-input
183 - placeholder="请输入设备编码" 158 + placeholder="请输入租户"
184 v-model="query.sn" 159 v-model="query.sn"
185 class="input-with-select" 160 class="input-with-select"
186 @keyup.enter.native="_QueryData(true)" 161 @keyup.enter.native="_QueryData(true)"
@@ -303,36 +278,12 @@ export default { @@ -303,36 +278,12 @@ export default {
303 return { 278 return {
304 code: "", 279 code: "",
305 loading: false, 280 loading: false,
306 - gradeList: [],  
307 - gradeListAll: [],  
308 - schoolAll: [],  
309 - school: {}, //校园账号所属学校信息  
310 - props: {  
311 - multiple: true,  
312 - checkStrictly: true,  
313 - }, 281 + schoolList: [],
314 type: 1, 282 type: 1,
315 query: { 283 query: {
316 - classId: [],  
317 - onlineStatus: "",  
318 - sn: "",  
319 - type: "", 284 + school: [],
  285 + zuhu: "",
320 }, 286 },
321 - statusList: [  
322 - { label: "全部", value: "" },  
323 - { label: "离线", value: 0 },  
324 - { label: "在线", value: 1 },  
325 - { label: "异常", value: 2 },  
326 - ],  
327 - typeList: [  
328 - { label: "全部", value: 0 },  
329 - { label: "1日内", value: 1 },  
330 - { label: "3日内", value: 2 },  
331 - { label: "7日内", value: 3 },  
332 - { label: "1月内", value: 4 },  
333 - { label: "3月内", value: 5 },  
334 - { label: "3月以上", value: 6 },  
335 - ],  
336 tableData: [], 287 tableData: [],
337 total: 0, 288 total: 0,
338 count: 0, 289 count: 0,
@@ -344,37 +295,8 @@ export default { @@ -344,37 +295,8 @@ export default {
344 }, 295 },
345 created() { 296 created() {
346 this.code = localStorage.getItem("csCode") || ""; 297 this.code = localStorage.getItem("csCode") || "";
347 -  
348 - (this.props.lazy = true),  
349 - (this.props.lazyLoad = function (node, resolve) {  
350 - const { level } = node;  
351 - if (level == 2) {  
352 - console.log(node);  
353 - api  
354 - .tenantClassList({  
355 - schoolId: node.data.value,  
356 - })  
357 - .then((res) => {  
358 - let children = formatGradeNameClass(res.data?.list).sort(  
359 - (a, b) => {  
360 - return a.grade - b.grade;  
361 - }  
362 - );  
363 - console.log();  
364 -  
365 - const nodes = [...children];  
366 - // 通过调用resolve将子节点数据返回,通知组件数据加载完成  
367 - resolve(nodes);  
368 - });  
369 - } else {  
370 - resolve(node);  
371 - }  
372 - });  
373 -  
374 - this.stationReport();  
375 - this._QueryGradeList();  
376 - this._QueryData();  
377 - this.showSchool(); 298 + // this.stationReport();
  299 + // this._QueryData();
378 }, 300 },
379 activated() { 301 activated() {
380 const that = this; 302 const that = this;
@@ -383,16 +305,13 @@ export default { @@ -383,16 +305,13 @@ export default {
383 that.page = 1; 305 that.page = 1;
384 that.total = 0; 306 that.total = 0;
385 that.count = 0; 307 that.count = 0;
386 - that.query.classId = [];  
387 - that.query.onlineStatus = "";  
388 - that.query.sn = "";  
389 - that.query.type = "";  
390 - that.stationReport();  
391 - that._QueryData(); 308 + that.query.school = "";
  309 + that.query.zuhu = "";
  310 + // that.stationReport();
  311 + // that._QueryData();
392 }); 312 });
393 }, 313 },
394 methods: { 314 methods: {
395 -  
396 linkTo(obj, type) { 315 linkTo(obj, type) {
397 this.$router.push({ 316 this.$router.push({
398 path: "/deviceLog", 317 path: "/deviceLog",
@@ -402,87 +321,10 @@ export default { @@ -402,87 +321,10 @@ export default {
402 }, 321 },
403 }); 322 });
404 }, 323 },
405 - clickPieChart(obj) {  
406 - this.query.onlineStatus =  
407 - obj.name == "在线" ? 1 : obj.name == "离线" ? 0 : 2;  
408 - this.query.sn = "";  
409 - this.query.classId = [];  
410 - this.page = 1;  
411 - this._QueryData(false);  
412 - },  
413 - clickScatterChart(obj) {  
414 - this.query.type =  
415 - obj.name == "1日内"  
416 - ? 1  
417 - : obj.name == "3日内"  
418 - ? 2  
419 - : obj.name == "7日内"  
420 - ? 3  
421 - : obj.name == "1月内"  
422 - ? 4  
423 - : obj.name == "3月内"  
424 - ? 5  
425 - : 6;  
426 - this.query.sn = "";  
427 - this.query.classId = [];  
428 - this.page = 1;  
429 - this._QueryData(false);  
430 - },  
431 changePage(page) { 324 changePage(page) {
432 this.page = page; 325 this.page = page;
433 this._QueryData(false); 326 this._QueryData(false);
434 }, 327 },
435 -  
436 - async showSchool() {  
437 - const { data, status, info } = await this.$request.schoolList();  
438 - if (status === 0) {  
439 - let gradeListAll = data.list?.map((item) => {  
440 - return {  
441 - value: item.id,  
442 - label: item.schoolName,  
443 - };  
444 - });  
445 - this.schoolAll = [  
446 - {  
447 - value: 0,  
448 - label: "全部",  
449 - children: [...gradeListAll],  
450 - },  
451 - ];  
452 - this.gradeList = [...this.schoolAll, ...this.gradeList];  
453 - } else {  
454 - this.$message.error(info);  
455 - }  
456 - },  
457 -  
458 -  
459 - // 查找班级  
460 - async _QueryGradeList() {  
461 - this.loading = true;  
462 - const { data, status, info } = await this.$request.gradeList();  
463 - if (status === 0) {  
464 - if (!!data.list) {  
465 - this.gradeList =  
466 - data.list?.map((item) => {  
467 - let gradeList = {  
468 - value: item.id,  
469 - label: item.regionName,  
470 - };  
471 - gradeList.children =  
472 - item.schoolList?.map((items) => {  
473 - return {  
474 - value: items.id,  
475 - label: items.schoolName,  
476 - };  
477 - }) || [];  
478 - return gradeList;  
479 - }) || [];  
480 - this.gradeList = [...this.schoolAll, ...this.gradeList];  
481 - }  
482 - } else {  
483 - this.$message.error(info);  
484 - }  
485 - },  
486 // 基站统计数据 328 // 基站统计数据
487 async stationReport() { 329 async stationReport() {
488 const { data, status, info } = await this.$request.stationReport(); 330 const { data, status, info } = await this.$request.stationReport();
@@ -595,13 +437,16 @@ export default { @@ -595,13 +437,16 @@ export default {
595 // 设备列表信息 437 // 设备列表信息
596 async _QueryData(isRef) { 438 async _QueryData(isRef) {
597 this.loading = true; 439 this.loading = true;
598 - let query = this.setQuery(); 440 + let query = {...this.query};
  441 + if(query.zuhu){
  442 + delete query.school
  443 + }
599 if (isRef) { 444 if (isRef) {
600 this.page = 1; 445 this.page = 1;
601 } 446 }
602 this.loading = true; 447 this.loading = true;
603 this.tableData = []; 448 this.tableData = [];
604 - const { data, status, info } = await this.$request.deviceList({ 449 + const { data, status, info } = await this.$request.pDeviceList({
605 ...query, 450 ...query,
606 deviceType: this.type, 451 deviceType: this.type,
607 page: this.page, 452 page: this.page,
@@ -646,7 +491,6 @@ export default { @@ -646,7 +491,6 @@ export default {
646 } 491 }
647 .content { 492 .content {
648 background: #f8f8f8; 493 background: #f8f8f8;
649 - border: 1px solid #e2e2e2;  
650 border-radius: 10px; 494 border-radius: 10px;
651 overflow: hidden; 495 overflow: hidden;
652 :deep(.fa-edit) { 496 :deep(.fa-edit) {
src/views/admin/device/log.vue
@@ -267,7 +267,7 @@ export default { @@ -267,7 +267,7 @@ export default {
267 this._QueryData(); 267 this._QueryData();
268 }, 268 },
269 async _QueryDetail() { 269 async _QueryDetail() {
270 - const { data, status, info } = await this.$request.deviceDetail({ 270 + const { data, status, info } = await this.$request.pDeviceDetail({
271 deviceId: this.id, 271 deviceId: this.id,
272 }); 272 });
273 if (status === 0) { 273 if (status === 0) {
src/views/index/mainIndex.vue
@@ -158,7 +158,7 @@ @@ -158,7 +158,7 @@
158 </li> 158 </li>
159 </template> 159 </template>
160 </ul> 160 </ul>
161 - <ul class="nav-list" v-if="type == 'ROLE_PINGTAI'"> 161 + <ul class="nav-list" v-if="type == 'ROLE_PERSONAL'">
162 <li class="nav-item item1" @click="links('/examinationPaper')"> 162 <li class="nav-item item1" @click="links('/examinationPaper')">
163 <img class="icon" src="../../assets/nav/setUpAccount.png" alt="" /> 163 <img class="icon" src="../../assets/nav/setUpAccount.png" alt="" />
164 <div class="text"> 164 <div class="text">
@@ -225,7 +225,7 @@ @@ -225,7 +225,7 @@
225 </li> 225 </li>
226 226
227 </ul> 227 </ul>
228 - <ul class="nav-list" v-if="type == 'ROLE_ADMIN'"> 228 + <ul class="nav-list" v-if="type == 'ROLE_PINGTAI'">
229 <li class="nav-item item1" @click="links('/account')"> 229 <li class="nav-item item1" @click="links('/account')">
230 <img class="icon" src="../../assets/nav/setUpAccount.png" alt="" /> 230 <img class="icon" src="../../assets/nav/setUpAccount.png" alt="" />
231 <div class="text"> 231 <div class="text">
@@ -279,7 +279,6 @@ export default { @@ -279,7 +279,6 @@ export default {
279 }, 279 },
280 _Init(val) { 280 _Init(val) {
281 this.type = this.$store.getters.info.showRole || this.$store.getters.info.permissions[0].role; 281 this.type = this.$store.getters.info.showRole || this.$store.getters.info.permissions[0].role;
282 - this.type = 'ROLE_PINGTAI'  
283 this.navList = this.$store.getters.addRouters.map((item) => { 282 this.navList = this.$store.getters.addRouters.map((item) => {
284 return { 283 return {
285 name: item.name, 284 name: item.name,
@@ -296,7 +295,7 @@ export default { @@ -296,7 +295,7 @@ export default {
296 this.tenantIndex(); 295 this.tenantIndex();
297 } else if (this.type == "ROLE_BANZHUREN") { 296 } else if (this.type == "ROLE_BANZHUREN") {
298 this.classIndex(); 297 this.classIndex();
299 - } else if (this.type == "ROLE_PINGTAI") { 298 + } else if (this.type == "ROLE_PERSONAL") {
300 this.personalIndex(); 299 this.personalIndex();
301 } 300 }
302 }, 301 },
src/views/layout/header/header.vue
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 <!-- <li> 9 <!-- <li>
10 <langSelect></langSelect> 10 <langSelect></langSelect>
11 </li> --> 11 </li> -->
12 - <li class="dropdown-box" v-if="role != 'ROLE_PINGTAI'"> 12 + <li class="dropdown-box" v-if="role != 'ROLE_PERSONAL'&&role != 'ROLE_PINGTAI'">
13 <div class="userInfo"> 13 <div class="userInfo">
14 <img :src="avatar" /> 14 <img :src="avatar" />
15 <div class="txt"> 15 <div class="txt">
@@ -34,7 +34,16 @@ @@ -34,7 +34,16 @@
34 </el-dropdown-menu> 34 </el-dropdown-menu>
35 </el-dropdown> 35 </el-dropdown>
36 </li> 36 </li>
37 - <li class="dropdown-box" v-else @click="linkToUserInfo"> 37 + <li class="dropdown-box" v-if="role == 'ROLE_PINGTAI'">
  38 + <div class="userInfo">
  39 + <img :src="avatar" />
  40 + <div class="txt">
  41 + <p>{{ `${this.$store.getters.info.name}` }}</p>
  42 + <p>管理员</p>
  43 + </div>
  44 + </div>
  45 + </li>
  46 + <li class="dropdown-box" v-if="role == 'ROLE_PERSONAL'" @click="linkToUserInfo">
38 <div class="userInfo"> 47 <div class="userInfo">
39 <img :src="avatar" /> 48 <img :src="avatar" />
40 <div class="txt"> 49 <div class="txt">
src/views/personal/examinationPaper/add.vue
@@ -572,7 +572,6 @@ @@ -572,7 +572,6 @@
572 questionForm.questionType == 2 || 572 questionForm.questionType == 2 ||
573 questionForm.questionType == 6 573 questionForm.questionType == 6
574 " 574 "
575 - class="answer-box"  
576 > 575 >
577 <template v-for="(option, opIdx) in rightOptions"> 576 <template v-for="(option, opIdx) in rightOptions">
578 <span 577 <span
src/views/standard/examinationPaper/add.vue
@@ -570,7 +570,6 @@ @@ -570,7 +570,6 @@
570 questionForm.questionType == 2 || 570 questionForm.questionType == 2 ||
571 questionForm.questionType == 6 571 questionForm.questionType == 6
572 " 572 "
573 - class="answer-box"  
574 > 573 >
575 <template v-for="(option, opIdx) in rightOptions"> 574 <template v-for="(option, opIdx) in rightOptions">
576 <span 575 <span
@@ -792,7 +791,7 @@ @@ -792,7 +791,7 @@
792 >,</span 791 >,</span
793 > 792 >
794 </template> 793 </template>
795 - <template v-if="formAns.qusType == 2" class="answer-box"> 794 + <template v-if="formAns.qusType == 2">
796 <span 795 <span
797 class="answer-s active" 796 class="answer-s active"
798 v-for="option in formAns.answerOptions.split(',')" 797 v-for="option in formAns.answerOptions.split(',')"
src/views/standard/examinationPaper/edit.vue
@@ -301,7 +301,7 @@ @@ -301,7 +301,7 @@
301 >,</span 301 >,</span
302 > 302 >
303 </template> 303 </template>
304 - <template v-if="formAns.qusType == 2" class="answer-box"> 304 + <template v-if="formAns.qusType == 2">
305 <span 305 <span
306 class="answer-s active" 306 class="answer-s active"
307 v-for="option in formAns.answerOptions.split(',')" 307 v-for="option in formAns.answerOptions.split(',')"