Compare commits

..

No commits in common. "e46a54ddb9f878b798db067462c1d6e91cc38950" and "6d2b14fcc51753494176a373ea181e62729cde9b" have entirely different histories.

3 changed files with 64 additions and 93 deletions

View File

@ -12,12 +12,11 @@ import type {
import { stringify } from "qs"; import { stringify } from "qs";
import NProgress from "../progress"; import NProgress from "../progress";
import { getToken, formatToken } from "@/utils/auth"; import { getToken, formatToken } from "@/utils/auth";
import { useUserStore, useUserStoreHook } from "@/store/modules/user"; import { useUserStoreHook } from "@/store/modules/user";
// import { string } from "vue-types"; // import { string } from "vue-types";
import router from "@/router"; import router from "@/router";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { message } from "../message"; import { message } from "../message";
import { store } from "@/store";
/**请求后端的地址 未配置则访问BaseURL */ /**请求后端的地址 未配置则访问BaseURL */
const apiServiceConfig = { const apiServiceConfig = {
@ -209,10 +208,6 @@ class PureHttp {
router.push({ router.push({
path: "/error/403" path: "/error/403"
}); });
}if (error.response?.status == 401) {
debugger;
ElMessage.warning("登录信息失效,请重新登录!");
return useUserStore(store).logOut();
} }
// 所有的响应异常 区分来源为取消请求/非取消请求 // 所有的响应异常 区分来源为取消请求/非取消请求
return Promise.reject($error); return Promise.reject($error);
@ -239,14 +234,14 @@ class PureHttp {
PureHttp.axiosInstance PureHttp.axiosInstance
.request(config) .request(config)
.then((response: any) => { .then((response: any) => {
if (response.code != null && response.code !== 200) { if (response.code != null && response.code !== 200) {
message(response.message, { type: "error" });
} message(response.message, { type: "error" });
resolve(response); } resolve(response);
}) })
.catch(error => { .catch(error => {
if (error.status != 200) { if (error.status != 200) {
ElMessage.warning("请求失败: " + error.message); ElMessage.warning("请求失败" + error.message);
} }
reject(error); reject(error);
}); });

View File

@ -1,22 +1,17 @@
<template> <template>
<div> <div>
<el-form <el-form ref="userEditForm" :model="form" :label-width="formLabelWidth" clearable>
ref="userEditForm"
:model="form"
:label-width="formLabelWidth"
clearable
>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="电话号码" :rules="rulePhone" prop="phone"> <el-form-item label="电话号码" :rules="rulePhone" prop="phone">
<el-input v-model="form.phone" type="text" /> <el-input type="text" v-model="form.phone" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="姓名:" prop="realName" :rules="ruleRequired"> <el-form-item label="姓名:" prop="realName" :rules="ruleRequired">
<el-input <el-input
v-model="form.realName"
type="text" type="text"
v-model="form.realName"
autocomplete="off" autocomplete="off"
maxlength="20" maxlength="20"
:show-word-limit="true" :show-word-limit="true"
@ -29,8 +24,8 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="职务:" prop="studentId"> <el-form-item label="职务:" prop="studentId">
<el-input <el-input
v-model="form.studentId"
type="text" type="text"
v-model="form.studentId"
autocomplete="off" autocomplete="off"
maxlength="16" maxlength="16"
:show-word-limit="true" :show-word-limit="true"
@ -40,14 +35,8 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item <el-form-item label="任教信息:" prop="positionList" :rules="ruleRequired">
label="任教信息:" <el-button type="success" @click="AddPosition()">添加职位</el-button>
prop="positionList"
:rules="ruleRequired"
>
<el-button type="success" @click="AddPosition()"
>添加职位</el-button
>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -56,7 +45,7 @@
>提示:任职信息所有项值<span class="text-red-500">必填</span>, >提示:任职信息所有项值<span class="text-red-500">必填</span>,
如若查询不到对应班级,请先添加 如若查询不到对应班级,请先添加
</span> </span>
<el-form ref="positionEditForm" :model="positionList" inline> <el-form :model="positionList" inline ref="positionEditForm">
<div <div
v-for="(position, index) in positionList" v-for="(position, index) in positionList"
:key="index" :key="index"
@ -69,18 +58,15 @@
class="mr-[5px]!" class="mr-[5px]!"
type="danger" type="danger"
:icon="Delete" :icon="Delete"
circle
@click="positionClose(position)" @click="positionClose(position)"
circle
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item :prop="`${index}.positionLevel`" :rules="ruleRequired">
:prop="`${index}.positionLevel`"
:rules="ruleRequired"
>
<el-select <el-select
v-model="position.positionLevel"
:disabled="position.id != undefined" :disabled="position.id != undefined"
class="w-[100px]!" class="w-[100px]!"
v-model="position.positionLevel"
placeholder="类型" placeholder="类型"
clearable clearable
filterable filterable
@ -90,15 +76,16 @@
:key="item.value" :key="item.value"
:label="item.text" :label="item.text"
:value="item.value" :value="item.value"
/> >
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :prop="`${index}.schoolId`" :rules="ruleRequired"> <el-form-item :prop="`${index}.schoolId`" :rules="ruleRequired">
<el-select <el-select
v-model="position.schoolId"
:disabled="position.id != undefined" :disabled="position.id != undefined"
class="w-[250px]!" class="w-[250px]!"
v-model="position.schoolId"
placeholder="学校" placeholder="学校"
clearable clearable
filterable filterable
@ -109,15 +96,16 @@
:key="item.value" :key="item.value"
:label="item.text" :label="item.text"
:value="item.value" :value="item.value"
/> >
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :prop="`${index}.grade`" :rules="ruleRequired"> <el-form-item :prop="`${index}.grade`" :rules="ruleRequired">
<el-select <el-select
v-model="position.grade"
:disabled="position.id != undefined" :disabled="position.id != undefined"
class="w-[150px]!" class="w-[150px]!"
v-model="position.grade"
placeholder="年级" placeholder="年级"
clearable clearable
filterable filterable
@ -128,7 +116,8 @@
:key="item.value" :key="item.value"
:label="item.text" :label="item.text"
:value="item.value" :value="item.value"
/> >
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -137,10 +126,10 @@
:rules="position.positionLevel > 3 ? ruleRequired : []" :rules="position.positionLevel > 3 ? ruleRequired : []"
> >
<el-select <el-select
v-show="position.positionLevel > 3"
v-model="position.classId"
:disabled="position.id != undefined" :disabled="position.id != undefined"
v-show="position.positionLevel > 3"
class="w-[120px]!" class="w-[120px]!"
v-model="position.classId"
placeholder="班级" placeholder="班级"
clearable clearable
filterable filterable
@ -150,7 +139,8 @@
:key="item.value" :key="item.value"
:label="item.text" :label="item.text"
:value="item.value" :value="item.value"
/> >
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -159,10 +149,10 @@
:rules="position.positionLevel == 5 ? ruleRequired : []" :rules="position.positionLevel == 5 ? ruleRequired : []"
> >
<el-select <el-select
v-show="position.positionLevel == 5"
v-model="position.subjectId"
:disabled="position.id != undefined" :disabled="position.id != undefined"
v-show="position.positionLevel == 5"
class="w-[100px]!" class="w-[100px]!"
v-model="position.subjectId"
placeholder="学科" placeholder="学科"
clearable clearable
filterable filterable
@ -172,7 +162,8 @@
:key="item.value" :key="item.value"
:label="item.text" :label="item.text"
:value="item.value" :value="item.value"
/> >
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
@ -196,7 +187,7 @@ import {
editUser, editUser,
Position, Position,
getSchoolData, getSchoolData,
getClassCombo getClassCombo,
} from "@/api/userCenter"; } from "@/api/userCenter";
import PositionForm from "./positionForm.vue"; import PositionForm from "./positionForm.vue";
import { getenum, getenumDic } from "@/api/enum"; import { getenum, getenumDic } from "@/api/enum";
@ -204,14 +195,7 @@ import { PosititonIds } from "@/api/student";
import { ruleRequired, rulePhone } from "@/utils/rules"; import { ruleRequired, rulePhone } from "@/utils/rules";
import { ElMessage, FormInstance } from "element-plus"; import { ElMessage, FormInstance } from "element-plus";
import { ComboModel, gradeComboModel } from "@/components/hTable/hTable"; import { ComboModel, gradeComboModel } from "@/components/hTable/hTable";
import { import { Check, Delete, Edit, Message, Search, Star } from "@element-plus/icons-vue";
Check,
Delete,
Edit,
Message,
Search,
Star
} from "@element-plus/icons-vue";
import { de } from "element-plus/es/locales.mjs"; import { de } from "element-plus/es/locales.mjs";
interface FormData { interface FormData {
@ -244,7 +228,7 @@ interface DialogConfig {
width: string; width: string;
} }
defineOptions({ defineOptions({
name: "UserEditForm" name: "UserEditForm",
}); });
const props = defineProps<{ const props = defineProps<{
@ -257,14 +241,14 @@ const loading = ref(false);
const subject1 = ref<ComboModel[]>([ const subject1 = ref<ComboModel[]>([
{ value: 4, text: "物理" }, { value: 4, text: "物理" },
{ value: 8, text: "历史" } { value: 8, text: "历史" },
]); ]);
const subject2 = ref<ComboModel[]>([ const subject2 = ref<ComboModel[]>([
{ value: 5, text: "化学" }, { value: 5, text: "化学" },
{ value: 6, text: "生物" }, { value: 6, text: "生物" },
{ value: 9, text: "地理" }, { value: 9, text: "地理" },
{ value: 7, text: "政治" } { value: 7, text: "政治" },
]); ]);
const emit = defineEmits(["handlePagedCallback"]); const emit = defineEmits(["handlePagedCallback"]);
@ -284,7 +268,7 @@ const subjectList = ref<ComboModel[]>([]);
const positionEnumList = ref<ComboModel[]>([ const positionEnumList = ref<ComboModel[]>([
{ text: "年级主任", value: 3 }, { text: "年级主任", value: 3 },
{ text: "班主任", value: 4 }, { text: "班主任", value: 4 },
{ text: "科任老师", value: 5 } { text: "科任老师", value: 5 },
]); ]);
function schoolChange(p: Position) { function schoolChange(p: Position) {
p.graduationYear = null; p.graduationYear = null;
@ -303,9 +287,9 @@ function getClass(p: Position) {
const data = { const data = {
schoolId: p.schoolId || 0, schoolId: p.schoolId || 0,
graduationYear: p.graduationYear || 0, graduationYear: p.graduationYear || 0,
grade: p.grade grade: p.grade,
}; };
getClassCombo(data).then(res => { getClassCombo(data).then((res) => {
if (res.code === 200) { if (res.code === 200) {
p.classList = res.data; p.classList = res.data;
} }
@ -324,7 +308,7 @@ const defaultSubjectLevel = reactive({
Subject7: 0, Subject7: 0,
Subject8: 0, Subject8: 0,
Subject9: 0, Subject9: 0,
CreatePositionId: 1 CreatePositionId: 1,
}); });
const form = ref<FormData>({ const form = ref<FormData>({
@ -342,14 +326,14 @@ const form = ref<FormData>({
subjectLevels: [], subjectLevels: [],
subjectLevel: { ...defaultSubjectLevel }, subjectLevel: { ...defaultSubjectLevel },
positionIds: [], positionIds: [],
positionFormIds: [] positionFormIds: [],
}); });
const dialog = reactive<DialogConfig>({ const dialog = reactive<DialogConfig>({
close: false, close: false,
title: "", title: "",
visible: false, visible: false,
width: "1200px" width: "1200px",
}); });
const customeRules = reactive({ const customeRules = reactive({
@ -358,13 +342,13 @@ const customeRules = reactive({
{ {
pattern: /^1[3456789]\d{9}$/, pattern: /^1[3456789]\d{9}$/,
message: "手机号码格式不正确", message: "手机号码格式不正确",
trigger: "blur" trigger: "blur",
} },
] ],
}); });
function positionClose(p: Position) { function positionClose(p: Position) {
positionList.value = positionList.value.filter(s => s != p); positionList.value = positionList.value.filter((s) => s != p);
} }
const AddPositionArr: Position[] = []; const AddPositionArr: Position[] = [];
@ -379,9 +363,9 @@ function AddPosition() {
subjectId: null, subjectId: null,
positionType: 2, positionType: 2,
positionLevel: null, positionLevel: null,
status: true status: true,
}; };
let p1 = p as unknown as Position; let p1 = (p as unknown) as Position;
form.value.positionList.push(p1); form.value.positionList.push(p1);
AddPositionArr.push(p1); AddPositionArr.push(p1);
positionList.value.push(p1); positionList.value.push(p1);
@ -402,11 +386,11 @@ const handleSubmitForm = async () => {
} }
try { try {
loading.value = true; loading.value = true;
const postIdArr = positionList.value.map(s => s.id).filter(s => s != null); const postIdArr = positionList.value.map((s) => s.id).filter((s) => s != null);
const addPArr = positionList.value const addPArr = positionList.value
.filter(s => s.id == null) .filter((s) => s.id == null)
.map(s => { .map((s) => {
return { return {
positionLevel: s.positionLevel, positionLevel: s.positionLevel,
subjectId: s.subjectId, subjectId: s.subjectId,
@ -414,7 +398,7 @@ const handleSubmitForm = async () => {
classId: s.classId, classId: s.classId,
positionType: 2, positionType: 2,
gradeLevel: s.grade[0], gradeLevel: s.grade[0],
graduationYear: parseInt(s.grade.slice(1, 5)) graduationYear: parseInt(s.grade.slice(1, 5)),
}; };
}); });
if (addPArr.length > 0) { if (addPArr.length > 0) {
@ -433,7 +417,7 @@ const handleSubmitForm = async () => {
const formData = { const formData = {
...form.value, ...form.value,
account: form.value.phone || "", account: form.value.phone || "",
positionIds: postIdArr positionIds: postIdArr,
}; };
const res = await editUser(formData); const res = await editUser(formData);
@ -465,7 +449,7 @@ const handleResetForm = () => {
idCard: "", idCard: "",
phone: "", phone: "",
cloudSchoolId: "", cloudSchoolId: "",
pointPenSN: "" pointPenSN: "",
}); });
positionList.value = []; positionList.value = [];
}; };
@ -478,9 +462,7 @@ const fetchInitData = async () => {
userTypeList.value = typeRes.data; userTypeList.value = typeRes.data;
schoolList.value = (await getSchoolData()).data; schoolList.value = (await getSchoolData()).data;
subjectList.value = (await getenum("SubjectEnum")).data.filter( subjectList.value = (await getenum("SubjectEnum")).data.filter((s) => s.value < 10);
s => s.value < 10
);
// // // //
// const schoolRes = await cloudSchoolCombo(); // const schoolRes = await cloudSchoolCombo();
@ -495,7 +477,7 @@ const fetchInitData = async () => {
const fetchFormData = () => { const fetchFormData = () => {
handleResetForm(); handleResetForm();
if (props.id !== 0) { if (props.id !== 0) {
getUserInfo(props.id).then(res => { getUserInfo(props.id).then((res) => {
if (res.code === 200) { if (res.code === 200) {
if (res.data.SubjectLevel && res.data.SubjectLevel.CreatePositionId) { if (res.data.SubjectLevel && res.data.SubjectLevel.CreatePositionId) {
delete res.data.SubjectLevel.CreatePositionId; delete res.data.SubjectLevel.CreatePositionId;
@ -529,7 +511,7 @@ const fetchFormData = () => {
phone: res.data.phone, phone: res.data.phone,
cloudSchoolId: res.data.cloudSchoolId, cloudSchoolId: res.data.cloudSchoolId,
pointPenSN: res.data.pointPenSN, pointPenSN: res.data.pointPenSN,
positionList: positionList.value ?? [] positionList: positionList.value ?? [],
}); });
positionList.value = res.data.positions positionList.value = res.data.positions
.filter((s: Position) => s.enable) .filter((s: Position) => s.enable)
@ -560,17 +542,17 @@ const CheckPosition = () => {
dialog.title = "选择职位"; dialog.title = "选择职位";
dialog.visible = true; dialog.visible = true;
PositionFormIds.value = positionList.value PositionFormIds.value = positionList.value
.filter(s => s.enable !== false) .filter((s) => s.enable !== false)
.map(s => s.id); .map((s) => s.id);
}; };
const handleCheckCallback = (checkPosition: Position[]) => { const handleCheckCallback = (checkPosition: Position[]) => {
dialog.visible = false; dialog.visible = false;
positionList.value = checkPosition.map(s => { positionList.value = checkPosition.map((s) => {
s.enable = true; s.enable = true;
return s; return s;
}); });
form.value.positionIds = positionList.value.map(w => w.id); form.value.positionIds = positionList.value.map((w) => w.id);
}; };
onMounted(async () => { onMounted(async () => {

View File

@ -6,9 +6,6 @@
<el-form-item> <el-form-item>
<el-input v-model="search.searchStr" placeholder="姓名/账号/学号" /> <el-input v-model="search.searchStr" placeholder="姓名/账号/学号" />
</el-form-item> </el-form-item>
<el-form-item>
<el-input v-model="search.phone" placeholder="手机号" />
</el-form-item>
<!-- <el-form-item style="width: 100px"> <!-- <el-form-item style="width: 100px">
<el-select <el-select
v-model="search.userType" v-model="search.userType"
@ -273,8 +270,7 @@ import {
Message, Message,
ArrowDownBold, ArrowDownBold,
Search, Search,
Star, Star
Phone
} from "@element-plus/icons-vue"; } from "@element-plus/icons-vue";
import { ComboModel, gradeComboModel } from "@/components/hTable/hTable"; import { ComboModel, gradeComboModel } from "@/components/hTable/hTable";
import { ImportTeacher } from "@/api/student"; import { ImportTeacher } from "@/api/student";
@ -284,7 +280,6 @@ const schoolsAPI = new hTableAPI("usercenter/back/schools");
interface SearchParams { interface SearchParams {
searchStr: string; searchStr: string;
phone: string;
userType: string | number; userType: string | number;
level: string | number; level: string | number;
schoolId: string | number; schoolId: string | number;
@ -373,7 +368,6 @@ const selectUserTable = ref();
const search = reactive<SearchParams>({ const search = reactive<SearchParams>({
searchStr: "", searchStr: "",
phone: "",
userType: "", userType: "",
level: "", level: "",
schoolId: "", schoolId: "",
@ -577,7 +571,6 @@ const getClass = () => {
const fetchPagedData = (searchUnUse = false) => { const fetchPagedData = (searchUnUse = false) => {
const data = { const data = {
SearchStr: search.searchStr, SearchStr: search.searchStr,
Phone: search.phone,
UserType: 2, UserType: 2,
Level: search.level || 0, Level: search.level || 0,
SchoolId: search.schoolId || 0, SchoolId: search.schoolId || 0,
@ -722,6 +715,7 @@ const importData = () => {
fileE.onchange = async function () { fileE.onchange = async function () {
formData.append("file", fileE.files[0]); formData.append("file", fileE.files[0]);
let res = await ImportTeacher(fileE.files[0]); let res = await ImportTeacher(fileE.files[0]);
debugger;
if (res.code != undefined) { if (res.code != undefined) {
if (res.code !== 200) return ElMessage.error(res.message); if (res.code !== 200) return ElMessage.error(res.message);
else return ElMessage.success("所有数据录入成功"); else return ElMessage.success("所有数据录入成功");