Commit b21d90ef1ac840d0b39338b89fa8d2fe3ed1e8cc

Authored by 梁保满
1 parent e5ff81a1

长水登录

E/system-commandline-sentinel-files/dotnet-suggest-registration-git-credential-manager-core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null deleted
1   -Exception during registration:
2   -System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。
3   - 在 System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
4   - 在 System.Diagnostics.Process.Start()
5   - 在 System.CommandLine.Invocation.Process.StartProcess(String command, String args, String workingDir, Action`1 stdOut, Action`1 stdErr, ValueTuple`2[] environmentVariables)
6   - 在 System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__10_1>d.MoveNext()
7 0 \ No newline at end of file
src/api/axios.js
... ... @@ -63,6 +63,8 @@ service.interceptors.response.use(
63 63 return Promise.resolve(res);
64 64 },
65 65 (error) => {
  66 + const { data, status } = error.response;
  67 +
66 68 Message({
67 69 message: error,
68 70 type: "error",
... ... @@ -71,14 +73,31 @@ service.interceptors.response.use(
71 73 if (error.response == undefined) {
72 74 return Promise.reject(error);
73 75 }
74   - const { data, status } = error.response;
  76 +
75 77 if (status === 403 || status === 401) {
  78 + if (data.status === 999) {
  79 + if (!location.href.includes("localhost")) {
  80 + if (data.data) {
  81 + window.location.href = data.data;
  82 + } else {
  83 + router.push({ path: "/login" });
  84 + if (res.message.includes("不存在")) {
  85 + Message({
  86 + message: res.message,
  87 + type: "error",
  88 + duration: 3 * 1000,
  89 + });
  90 + }
  91 + }
  92 + }
  93 + }
76 94 Message.closeAll();
77 95 Message({
78 96 message: data.info || "未登录或登录超时,即将跳转到登录页面",
79 97 type: "error",
80 98 duration: 3 * 1000,
81 99 });
  100 +
82 101 if (!window.location.href.includes("login")) {
83 102 router.push({
84 103 path: "/login",
... ... @@ -86,6 +105,7 @@ service.interceptors.response.use(
86 105 url: window.location.href,
87 106 },
88 107 });
  108 +
89 109 }
90 110 return;
91 111 }
... ...
src/store/index.js
... ... @@ -86,7 +86,6 @@ const store = new Vuex.Store({
86 86 hidden: true,
87 87 children: [],
88 88 });
89   - console.log(Cookies.get("ZT_YIJIAO_TOKEN"));
90 89 if (params.url) {
91 90 window.location.href = params.url;
92 91 } else {
... ... @@ -109,6 +108,49 @@ const store = new Vuex.Store({
109 108 })
110 109 .catch(() => {});
111 110 },
  111 + CSLogin({ state, commit }, code) {
  112 + request
  113 + .ssoLogin({ code:code})
  114 + .then((res) => {
  115 + let response = res;
  116 + if (response.status == 0) {
  117 + const userInfo = { ...response.data };
  118 + if (userInfo.permissions && userInfo.permissions.length) {
  119 + userInfo.showRoleName = response.data.permissions[0]?.roleName;
  120 + commit("setToken", "isLogin");
  121 + commit("setCode", code);
  122 + commit("setInfo", { ...userInfo });
  123 + commit("setRouters", [
  124 + ...userInfo.permissions[0]?.authorityRouter,
  125 + ]);
  126 + state.addRouters.forEach((res) => {
  127 + router.addRoute(res);
  128 + });
  129 + router.addRoute({
  130 + path: "*",
  131 + redirect: "/404",
  132 + hidden: true,
  133 + children: [],
  134 + });
  135 + router.push({ path: "/" });
  136 +
  137 + } else {
  138 + Message({
  139 + message: "该账号暂无权限,请联系管理员~",
  140 + type: "error",
  141 + duration: 3 * 1000,
  142 + });
  143 + }
  144 + } else {
  145 + Message({
  146 + message: response.info,
  147 + type: "error",
  148 + duration: 3 * 1000,
  149 + });
  150 + }
  151 + })
  152 + .catch(() => {});
  153 + },
112 154 permissions({ state, commit }, role) {
113 155 commit("setToken", "isLogin");
114 156 let userInfo = state.info;
... ...
src/views/device/index.vue
... ... @@ -62,13 +62,12 @@
62 62 :options="gradeList"
63 63 :props="props"
64 64 :show-all-levels="false"
65   - @change="_QueryData(false)"
66 65 ></el-cascader>
67 66 <el-select
68 67 class="sel"
69 68 v-model="query.onlineStatus"
70 69 placeholder="选择状态"
71   - @change="_QueryData(false)"
  70 + @change="_QueryData(true)"
72 71 >
73 72 <el-option
74 73 v-for="item in statusList"
... ... @@ -91,6 +90,12 @@
91 90 @click="_QueryData(true)"
92 91 ></el-button>
93 92 </el-input>
  93 + <el-button
  94 + class="serach-box"
  95 + round
  96 + @click="_QueryData(true)"
  97 + >筛选</el-button
  98 + >
94 99 </div>
95 100 </div>
96 101 <el-table :data="tableData" border style="width: 100%">
... ... @@ -192,13 +197,12 @@
192 197 :options="gradeList"
193 198 :props="props"
194 199 :show-all-levels="false"
195   - @change="_QueryData(false)"
196 200 ></el-cascader>
197 201 <el-select
198 202 class="sel"
199 203 v-model="query.type"
200 204 placeholder="选择状态"
201   - @change="_QueryData(false)"
  205 + @change="_QueryData(true)"
202 206 >
203 207 <el-option
204 208 v-for="item in typeList"
... ... @@ -221,6 +225,12 @@
221 225 @click="_QueryData(true)"
222 226 ></el-button>
223 227 </el-input>
  228 + <el-button
  229 + class="serach-box"
  230 + round
  231 + @click="_QueryData(true)"
  232 + >筛选</el-button
  233 + >ƒ
224 234 </div>
225 235 </div>
226 236 <el-table :data="tableData" border style="width: 100%">
... ... @@ -571,7 +581,7 @@ export default {
571 581 obj.name == "在线" ? 1 : obj.name == "离线" ? 0 : 2;
572 582 this.query.sn = "";
573 583 this.page = 1;
574   - this._QueryData();
  584 + this._QueryData(false);
575 585 },
576 586 clickScatterChart(obj) {
577 587 this.query.type =
... ... @@ -588,7 +598,7 @@ export default {
588 598 : 6;
589 599 this.query.sn = "";
590 600 this.page = 1;
591   - this._QueryData();
  601 + this._QueryData(false);
592 602 },
593 603 handleSelectionChange(val) {
594 604 console.log(val);
... ... @@ -606,7 +616,7 @@ export default {
606 616 }, 800),
607 617 changePage(page) {
608 618 this.page = page;
609   - this._QueryData();
  619 + this._QueryData(false);
610 620 },
611 621 async autoUpDate(id) {
612 622 if (!this.selectionTabIds.length && !id) {
... ... @@ -783,7 +793,7 @@ export default {
783 793 }
784 794 },
785 795 // 设备列表信息
786   - async _QueryData() {
  796 + async _QueryData(isRef) {
787 797 this.loading = true;
788 798 let query = {};
789 799 let gradeNames = [];
... ... @@ -807,7 +817,9 @@ export default {
807 817 this.query.type !== "" ? (query.type = this.query.type) : "";
808 818 }
809 819 }
810   -
  820 + if(isRef){
  821 + this.page= 1
  822 + }
811 823 this.loading = true;
812 824 const deviceList =
813 825 this.role != "ROLE_JITUAN"
... ...
src/views/login/index.vue
... ... @@ -84,20 +84,21 @@
84 84 </div>
85 85 </template>
86 86 <script>
  87 +import { getURLParams } from "@/utils";
87 88 export default {
88 89 data() {
89 90 return {
90 91 disableClick: true,
91 92 passwordType: "password",
92 93 loginForm: {
93   - // username: "13610050254",
94   - // password: "Pw050254#",
  94 + username: "13610050254",
  95 + password: "Pw050254#",
95 96 // username: "18946034886",
96 97 // password: "Pw034886#",
97 98 // username: "18332123505",
98 99 // password: "Pw123505#",
99   - username: "15911715665",
100   - password: "Csiy88888",
  100 + // username: "15911715665",
  101 + // password: "Csiy88888",
101 102 },
102 103 loginRules: {
103 104 username: [
... ... @@ -108,10 +109,17 @@ export default {
108 109 ],
109 110 },
110 111 url: "",
  112 + code: "",
  113 + dockkey: "",
111 114 };
112 115 },
113 116 created() {
114 117 this.url = this.$route.query?.url || "";
  118 + this.code = getURLParams("code") || localStorage.getItem("csCode") || "";
  119 + this.dockkey = getURLParams("dockkey") || "";
  120 + if (this.code || this.dockkey) {
  121 + this._LoginCheck();
  122 + }
115 123 },
116 124 methods: {
117 125 showPwd() {
... ... @@ -136,6 +144,9 @@ export default {
136 144 this.$store.dispatch("Login", { ...this.loginForm, url: this.url });
137 145 }
138 146 },
  147 + _LoginCheck() {
  148 + this.$store.dispatch("CSLogin", this.code || this.dockkey);
  149 + },
139 150 },
140 151 mounted() {},
141 152 };
... ...
src/views/setUp/school.vue
... ... @@ -4,7 +4,7 @@
4 4 <template slot="title">
5 5 <span>学校设置</span>
6 6 </template>
7   - <template slot="btns">
  7 + <template slot="btns" v-if="!code">
8 8 <el-tooltip effect="dark" content="导入学校名单" placement="bottom">
9 9 <el-button
10 10 type="primary"
... ... @@ -226,6 +226,7 @@ export default {
226 226 },
227 227 data() {
228 228 return {
  229 + code:"",
229 230 loading: false,
230 231 url: "xxx",
231 232 diaUp: false,
... ... @@ -275,6 +276,7 @@ export default {
275 276 };
276 277 },
277 278 created() {
  279 + this.code = localStorage.getItem("csCode")||""
278 280 this._QueryDataSchool();
279 281 this._QueryDataGrade();
280 282 this._QuerySubject();
... ...
src/views/setUp/teacher.vue
... ... @@ -4,7 +4,7 @@
4 4 <template slot="title">
5 5 <span>教师管理</span>
6 6 </template>
7   - <template slot="btns">
  7 + <template slot="btns" v-if="!code">
8 8 <el-tooltip effect="dark" content="导入教师名单" placement="bottom">
9 9 <el-button
10 10 type="primary"
... ... @@ -95,7 +95,7 @@
95 95 </ul>
96 96 </div>
97 97 <div class="teacher-detail">
98   - <div class="icon-box">
  98 + <div class="icon-box" v-if="!code">
99 99 <i class="icon el-icon-edit-outline" @click="editTeacher(1)"></i>
100 100 <i
101 101 class="icon el-icon-circle-plus-outline"
... ... @@ -128,7 +128,11 @@
128 128 v-for="item in teacherDetail.managerList"
129 129 :key="item.classId"
130 130 >
131   - <el-popconfirm title="确定删除吗?" confirm="">
  131 + <el-popconfirm
  132 + title="确定删除吗?"
  133 + @confirm="delTeacherManager(item, 1)"
  134 + v-if="!code"
  135 + >
132 136 <i class="el-icon-delete" slot="reference"></i>
133 137 </el-popconfirm>
134 138 <div class="grade-item">
... ... @@ -158,7 +162,11 @@
158 162 v-for="item in teacherDetail.teacherCourseList"
159 163 :key="item.classId"
160 164 >
161   - <el-popconfirm title="确定删除吗?" confirm="">
  165 + <el-popconfirm
  166 + title="确定删除吗?"
  167 + @confirm="delTeacherManager(item, 2)"
  168 + v-if="!code"
  169 + >
162 170 <i class="el-icon-delete" slot="reference"></i>
163 171 </el-popconfirm>
164 172 <div class="grade-item">
... ... @@ -190,7 +198,11 @@
190 198 :key="item.grade"
191 199 >
192 200 <li class="grade-li">
193   - <el-popconfirm title="确定删除吗?" confirm="">
  201 + <el-popconfirm
  202 + title="确定删除吗?"
  203 + @confirm="delTeacherManager(item, 3)"
  204 + v-if="!code"
  205 + >
194 206 <i class="el-icon-delete" slot="reference"></i>
195 207 </el-popconfirm>
196 208 <div class="grade-item">
... ... @@ -338,6 +350,7 @@ import { downloadFile, formatGradeClass, randomWord } from &quot;@/utils&quot;;
338 350 export default {
339 351 data() {
340 352 return {
  353 + code: "",
341 354 loading: false,
342 355 url: "",
343 356 diaUp: false,
... ... @@ -402,6 +415,7 @@ export default {
402 415 };
403 416 },
404 417 async created() {
  418 + this.code = localStorage.getItem("csCode") || "";
405 419 await this._QueryDataGrade();
406 420 this._QueryData(1);
407 421 this._RoleList();
... ... @@ -582,6 +596,39 @@ export default {
582 596 });
583 597 });
584 598 },
  599 + async delTeacherManager(obj, type) {
  600 + let query;
  601 + switch (type) {
  602 + case 1:
  603 + query = {
  604 + classId: obj.classId,
  605 + };
  606 + break;
  607 + case 2:
  608 + query = {
  609 + classId: obj.classId,
  610 + subjectName: obj.subjectName,
  611 + };
  612 + break;
  613 + case 3:
  614 + query = {
  615 + classId: obj.classId,
  616 + grade: obj.grade,
  617 + subjectName: obj.subjectName,
  618 + };
  619 + break;
  620 + }
  621 + //角色
  622 + const { data, status, info } = await this.$request.delTeacherManager({
  623 + teacherId: obj.teacherId,
  624 + ...query
  625 + });
  626 + if (status === 0) {
  627 + this._QueryData(10);
  628 + } else {
  629 + this.$message.error(info);
  630 + }
  631 + },
585 632 async _RoleList() {
586 633 //角色
587 634 const { data, status, info } = await this.$request.roleList();
... ... @@ -730,7 +777,7 @@ export default {
730 777 overflow: hidden;
731 778 min-height: 400px;
732 779 .teacher-ul {
733   - max-height: 70vh;
  780 + max-height: 60vh;
734 781 overflow-y: scroll;
735 782 }
736 783 .teacher-list {
... ...