优化 用户职位流程
This commit is contained in:
parent
823a2d5fa9
commit
10b9a5caed
|
|
@ -21,3 +21,4 @@ tests/**/coverage/
|
|||
*.sln
|
||||
tsconfig.tsbuildinfo
|
||||
.vscode
|
||||
.vscode/settings.json
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@
|
|||
"editor.tabSize": 2,
|
||||
"editor.formatOnPaste": true,
|
||||
"editor.guides.bracketPairs": "active",
|
||||
"files.autoSave": "afterDelay",
|
||||
// "files.autoSave": "afterDelay",
|
||||
"files.autoSave": "off",
|
||||
"git.confirmSync": false,
|
||||
"workbench.startupEditor": "newUntitledFile",
|
||||
"editor.suggestSelection": "first",
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ const tableData: TableConfig = {
|
|||
grade: {
|
||||
label: "年级",
|
||||
width: "120px",
|
||||
custom: (s) => `${s.gradeYear}${s.gradeLevel}`,
|
||||
// custom: (s) => `${s.gradeLevel}${s.gradeYear}`,
|
||||
search: true,
|
||||
add: false, // 字段允许添加
|
||||
edit: false, // 字段允许修改
|
||||
|
|
|
|||
|
|
@ -133,6 +133,15 @@ const tableData: TableConfig = {
|
|||
add: true, // 字段允许添加
|
||||
edit: true, // 字段允许修改
|
||||
},
|
||||
baseSchoolScore: {
|
||||
label: "资源校平均分",
|
||||
// rules: ruleRequiredNumber,
|
||||
search: true,
|
||||
width: "150px",
|
||||
setting: {},
|
||||
add: true, // 字段允许添加
|
||||
edit: true, // 字段允许修改
|
||||
},
|
||||
startTime: {
|
||||
label: "考试时间",
|
||||
width: "210px",
|
||||
|
|
|
|||
|
|
@ -1,32 +1,12 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-form
|
||||
ref="userEditForm"
|
||||
:model="form"
|
||||
:label-width="formLabelWidth"
|
||||
clearable
|
||||
>
|
||||
<el-form ref="userEditForm" :model="form" :label-width="formLabelWidth" clearable>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="账号:" prop="Account">
|
||||
<el-input
|
||||
type="text"
|
||||
v-model="form.account"
|
||||
autocomplete="off"
|
||||
minlength="6"
|
||||
maxlength="33"
|
||||
:show-word-limit="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="电话号码" :rules="rulePhone" prop="phone">
|
||||
<el-input type="text" v-model="form.phone" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名:" prop="realName" :rules="ruleRequired">
|
||||
<el-input
|
||||
|
|
@ -38,7 +18,10 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="所属云校" prop="cloudSchoolId">
|
||||
<el-select
|
||||
v-model="form.cloudSchoolId"
|
||||
|
|
@ -55,7 +38,7 @@
|
|||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
|
||||
<el-row v-show="form.userType === 1">
|
||||
|
|
@ -119,12 +102,9 @@
|
|||
<el-col :span="24">
|
||||
<el-form-item label="学生层次:" prop="level">
|
||||
<el-radio-group v-model="form.subjectLevel.Level">
|
||||
<el-radio
|
||||
v-for="(item, i) in userLevelList"
|
||||
:key="i"
|
||||
:label="item.value"
|
||||
>{{ item.text }}</el-radio
|
||||
>
|
||||
<el-radio v-for="(item, i) in userLevelList" :key="i" :label="item.value">{{
|
||||
item.text
|
||||
}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
@ -134,10 +114,7 @@
|
|||
<el-col :span="24">
|
||||
<el-form-item label="科目层次:">
|
||||
<ul class="userform_ul">
|
||||
<li
|
||||
v-for="(value, i) in getUserSubjectLevel(form.subjectLevel)"
|
||||
:key="i"
|
||||
>
|
||||
<li v-for="(value, i) in getUserSubjectLevel(form.subjectLevel)" :key="i">
|
||||
{{ userLevel2subject(value[0]) }}:
|
||||
<el-radio-group v-model="form.subjectLevel[value[0]]">
|
||||
<el-radio
|
||||
|
|
@ -158,13 +135,11 @@
|
|||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="职位:" prop="positionIds" :rules="ruleRequired">
|
||||
<el-button type="success" @click="CheckPosition()"
|
||||
>分配职位</el-button
|
||||
>
|
||||
<el-button type="success" @click="CheckPosition()">分配职位</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div class="max-h-[400px] overflow-auto pb-1">
|
||||
<div
|
||||
v-for="(position, index) in positionList"
|
||||
:key="index"
|
||||
|
|
@ -197,6 +172,7 @@
|
|||
<el-tag type="danger">{{ position.name || "-" }}</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="loading" @click="handleSubmitForm()"
|
||||
>立即提交</el-button
|
||||
|
|
@ -227,17 +203,13 @@
|
|||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from "vue";
|
||||
import {} from "@/api/user";
|
||||
import {
|
||||
cloudSchoolCombo,
|
||||
getUserInfo,
|
||||
editUser,
|
||||
Position
|
||||
} from "@/api/userCenter";
|
||||
import { cloudSchoolCombo, getUserInfo, editUser, Position } from "@/api/userCenter";
|
||||
import PositionForm from "./positionForm.vue";
|
||||
import { getenum, getenumDic } from "@/api/enum";
|
||||
import { ruleRequired, rulePhone } from "@/utils/rules";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { ElMessage, FormInstance } from "element-plus";
|
||||
import { ComboModel } from "@/components/hTable/hTable";
|
||||
import { InformationEvent } from "http";
|
||||
|
||||
interface FormData {
|
||||
id: number;
|
||||
|
|
@ -268,7 +240,7 @@ interface DialogConfig {
|
|||
width: string;
|
||||
}
|
||||
defineOptions({
|
||||
name: "UserEditForm"
|
||||
name: "UserEditForm",
|
||||
});
|
||||
|
||||
const props = defineProps<{
|
||||
|
|
@ -281,14 +253,14 @@ const loading = ref(false);
|
|||
|
||||
const subject1 = ref<ComboModel[]>([
|
||||
{ value: 4, text: "物理" },
|
||||
{ value: 8, text: "历史" }
|
||||
{ value: 8, text: "历史" },
|
||||
]);
|
||||
|
||||
const subject2 = ref<ComboModel[]>([
|
||||
{ value: 5, text: "化学" },
|
||||
{ value: 6, text: "生物" },
|
||||
{ value: 9, text: "地理" },
|
||||
{ value: 7, text: "政治" }
|
||||
{ value: 7, text: "政治" },
|
||||
]);
|
||||
|
||||
const userTypeList = ref<ComboModel[]>([]);
|
||||
|
|
@ -311,7 +283,7 @@ const defaultSubjectLevel = reactive({
|
|||
Subject7: 0,
|
||||
Subject8: 0,
|
||||
Subject9: 0,
|
||||
CreatePositionId: 1
|
||||
CreatePositionId: 1,
|
||||
});
|
||||
|
||||
const form = ref<FormData>({
|
||||
|
|
@ -328,14 +300,14 @@ const form = ref<FormData>({
|
|||
subjectLevels: [],
|
||||
subjectLevel: { ...defaultSubjectLevel },
|
||||
positionIds: [],
|
||||
positionFormIds: []
|
||||
positionFormIds: [],
|
||||
});
|
||||
|
||||
const dialog = reactive<DialogConfig>({
|
||||
close: false,
|
||||
title: "",
|
||||
visible: false,
|
||||
width: "1200px"
|
||||
width: "1200px",
|
||||
});
|
||||
|
||||
const customeRules = reactive({
|
||||
|
|
@ -344,9 +316,9 @@ const customeRules = reactive({
|
|||
{
|
||||
pattern: /^1[3456789]\d{9}$/,
|
||||
message: "手机号码格式不正确",
|
||||
trigger: "blur"
|
||||
}
|
||||
]
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const getUserSubjectLevel = (obj: Record<string, any>) => {
|
||||
|
|
@ -354,7 +326,7 @@ const getUserSubjectLevel = (obj: Record<string, any>) => {
|
|||
form.value.subjectLevel = { ...defaultSubjectLevel };
|
||||
obj = form.value.subjectLevel;
|
||||
}
|
||||
return Object.entries(obj).filter(s => s[0].includes("Subject"));
|
||||
return Object.entries(obj).filter((s) => s[0].includes("Subject"));
|
||||
};
|
||||
|
||||
const userLevel2subject = (str: string) => {
|
||||
|
|
@ -365,32 +337,20 @@ const userLevel2subject = (str: string) => {
|
|||
const handlePagedCallback = () => {
|
||||
// Emit event to parent if needed
|
||||
};
|
||||
|
||||
const userEditForm = ref<FormInstance>();
|
||||
const handleSubmitForm = () => {
|
||||
// Form validation and submission logic
|
||||
userEditForm.value.validate((valid) => {
|
||||
if (valid) {
|
||||
loading.value = true;
|
||||
const formData = {
|
||||
id: form.value.id || 0,
|
||||
userType: form.value.userType || 1,
|
||||
level: form.value.level || 0,
|
||||
account: form.value.account || "",
|
||||
// PassWord: form.value.id === 0 ? md5(form.value.PassWord).toUpperCase() : "",
|
||||
realName: form.value.realName || "",
|
||||
studentId: form.value.studentId || "",
|
||||
templateId: form.value.templateId || 0,
|
||||
...form.value,
|
||||
account: form.value.phone || "",
|
||||
subjectLevels: form.value.subjectLevels || [],
|
||||
subjectLevel: form.value.subjectLevel || { ...defaultSubjectLevel },
|
||||
positionIds: form.value.positionIds || [],
|
||||
gLSubject: form.value.gLSubject,
|
||||
gSubject1: form.value.gSubject1,
|
||||
gSubject2: form.value.gSubject2,
|
||||
idCard: form.value.idCard,
|
||||
cloudSchoolId: form.value.cloudSchoolId,
|
||||
phone: form.value.phone,
|
||||
pointPenSN: form.value.pointPenSN
|
||||
};
|
||||
|
||||
editUser(formData).then(res => {
|
||||
editUser(formData).then((res) => {
|
||||
loading.value = false;
|
||||
if (res.code === 200) {
|
||||
ElMessage.success("操作成功");
|
||||
|
|
@ -399,6 +359,9 @@ const handleSubmitForm = () => {
|
|||
ElMessage.error(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// Form validation and submission logic
|
||||
};
|
||||
|
||||
const handleResetForm = () => {
|
||||
|
|
@ -416,7 +379,7 @@ const handleResetForm = () => {
|
|||
idCard: "",
|
||||
phone: "",
|
||||
cloudSchoolId: "",
|
||||
pointPenSN: ""
|
||||
pointPenSN: "",
|
||||
});
|
||||
positionList.value = [];
|
||||
};
|
||||
|
|
@ -429,11 +392,11 @@ const fetchInitData = async () => {
|
|||
const typeRes = await getenum("UserTypeEnum");
|
||||
userTypeList.value = typeRes.data;
|
||||
|
||||
// 云校
|
||||
const schoolRes = await cloudSchoolCombo();
|
||||
if (schoolRes.code === 200) {
|
||||
CloudSchoolArr.value = schoolRes.data;
|
||||
}
|
||||
// // 云校
|
||||
// const schoolRes = await cloudSchoolCombo();
|
||||
// if (schoolRes.code === 200) {
|
||||
// CloudSchoolArr.value = schoolRes.data;
|
||||
// }
|
||||
|
||||
const enumDicRes = await getenumDic("SubjectEnum");
|
||||
subjectLEnum.value = enumDicRes.data;
|
||||
|
|
@ -442,7 +405,7 @@ const fetchInitData = async () => {
|
|||
const fetchFormData = () => {
|
||||
handleResetForm();
|
||||
if (props.id !== 0) {
|
||||
getUserInfo(props.id).then(res => {
|
||||
getUserInfo(props.id).then((res) => {
|
||||
if (res.code === 200) {
|
||||
if (res.data.SubjectLevel && res.data.SubjectLevel.CreatePositionId) {
|
||||
delete res.data.SubjectLevel.CreatePositionId;
|
||||
|
|
@ -468,7 +431,7 @@ const fetchFormData = () => {
|
|||
idCard: res.data.idCard,
|
||||
phone: res.data.phone,
|
||||
cloudSchoolId: res.data.cloudSchoolId,
|
||||
pointPenSN: res.data.pointPenSN
|
||||
pointPenSN: res.data.pointPenSN,
|
||||
});
|
||||
|
||||
positionList.value = res.data.positions;
|
||||
|
|
@ -491,14 +454,14 @@ const CheckPosition = () => {
|
|||
dialog.title = "选择职位";
|
||||
dialog.visible = true;
|
||||
PositionFormIds.value = positionList.value
|
||||
.filter(s => s.enable !== false)
|
||||
.map(s => s.id);
|
||||
.filter((s) => s.enable !== false)
|
||||
.map((s) => s.id);
|
||||
};
|
||||
|
||||
const handleCheckCallback = (checkPosition: Position[]) => {
|
||||
dialog.visible = false;
|
||||
positionList.value = checkPosition;
|
||||
form.value.positionIds = positionList.value.map(w => w.id);
|
||||
form.value.positionIds = positionList.value.map((w) => w.id);
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
|
|
|
|||
|
|
@ -25,12 +25,7 @@
|
|||
</el-form-item> -->
|
||||
|
||||
<el-form-item v-show="search.userType === 1" style="width: 100px">
|
||||
<el-select
|
||||
v-model="search.level"
|
||||
placeholder="学生层次"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-select v-model="search.level" placeholder="学生层次" clearable filterable>
|
||||
<el-option
|
||||
v-for="item in userLevelList"
|
||||
:key="item.value"
|
||||
|
|
@ -78,12 +73,7 @@
|
|||
</el-form-item>
|
||||
|
||||
<el-form-item style="width: 100px">
|
||||
<el-select
|
||||
v-model="search.classId"
|
||||
placeholder="班级"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-select v-model="search.classId" placeholder="班级" clearable filterable>
|
||||
<el-option
|
||||
v-for="item in classList"
|
||||
:key="item.value"
|
||||
|
|
@ -95,12 +85,7 @@
|
|||
</el-form-item>
|
||||
|
||||
<el-form-item style="width: 100px">
|
||||
<el-select
|
||||
v-model="search.subjectId"
|
||||
placeholder="科目"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-select v-model="search.subjectId" placeholder="科目" clearable filterable>
|
||||
<el-option
|
||||
v-for="item in subjectList"
|
||||
:key="item.value"
|
||||
|
|
@ -117,10 +102,7 @@
|
|||
>
|
||||
</el-form-item>
|
||||
<el-form-item v-show="selectUser">
|
||||
<el-button
|
||||
type="success"
|
||||
@click="selectUserCallBack()"
|
||||
icon="el-icon-check"
|
||||
<el-button type="success" @click="selectUserCallBack()" icon="el-icon-check"
|
||||
>选择用户</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
|
|
@ -161,13 +143,9 @@
|
|||
<el-table-column prop="id" label="用户Id" width="100" />
|
||||
<el-table-column label="用户信息" width="200">
|
||||
<template #default="scope">
|
||||
<el-tag
|
||||
:type="getUserTypeTag(scope.row.userType)"
|
||||
style="margin-right: 5px"
|
||||
>{{
|
||||
userTypeList.find(s => s.value == scope.row.userType)?.text
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag :type="getUserTypeTag(scope.row.userType)" style="margin-right: 5px">{{
|
||||
userTypeList.find((s) => s.value == scope.row.userType)?.text
|
||||
}}</el-tag>
|
||||
<span>{{ scope.row.realName }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -183,9 +161,7 @@
|
|||
<div
|
||||
v-for="(position, index) in scope.row.positions"
|
||||
:key="'Position' + index"
|
||||
v-show="
|
||||
index < 3 || (index >= 3 && showAllPosition.includes(scope.row))
|
||||
"
|
||||
v-show="index < 3 || (index >= 3 && showAllPosition.includes(scope.row))"
|
||||
>
|
||||
<div v-if="position.enable === false">
|
||||
<el-tag type="info">{{ position.schoolName || "-" }}</el-tag>
|
||||
|
|
@ -213,9 +189,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
scope.row.positions != undefined && scope.row.positions.length > 3
|
||||
"
|
||||
v-if="scope.row.positions != undefined && scope.row.positions.length > 3"
|
||||
@click="showPosition(scope.row)"
|
||||
class="userTagRow"
|
||||
>
|
||||
|
|
@ -268,7 +242,7 @@ import {
|
|||
getSubjectData,
|
||||
getPageUserList,
|
||||
UserDetail,
|
||||
Position
|
||||
Position,
|
||||
} from "@/api/userCenter";
|
||||
import { getenum } from "@/api/enum";
|
||||
import { hTableAPI } from "@/api/hTable";
|
||||
|
|
@ -280,7 +254,7 @@ import {
|
|||
Message,
|
||||
ArrowDownBold,
|
||||
Search,
|
||||
Star
|
||||
Star,
|
||||
} from "@element-plus/icons-vue";
|
||||
import { ComboModel } from "@/components/hTable/hTable";
|
||||
|
||||
|
|
@ -348,20 +322,20 @@ interface DialogData {
|
|||
const props = defineProps({
|
||||
selectUser: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
selectCallBack: {
|
||||
type: Function,
|
||||
default: () => {}
|
||||
default: () => {},
|
||||
},
|
||||
maxTableHeight: {
|
||||
type: Number,
|
||||
default: 580
|
||||
default: 580,
|
||||
},
|
||||
searchData: {
|
||||
type: Object as () => SearchParams,
|
||||
default: undefined
|
||||
}
|
||||
default: undefined,
|
||||
},
|
||||
});
|
||||
|
||||
const baseUrl = import.meta.env.VITE_API_USERCENTER_URL;
|
||||
|
|
@ -382,13 +356,13 @@ const search = reactive<SearchParams>({
|
|||
grade: "",
|
||||
classId: "",
|
||||
subjectId: "",
|
||||
positionId: ""
|
||||
positionId: "",
|
||||
});
|
||||
|
||||
const userTypeList = ref<ComboModel[]>([
|
||||
{ value: 1, text: "学生" },
|
||||
{ value: 2, text: "教师" },
|
||||
{ value: 3, text: "管理员" }
|
||||
{ value: 3, text: "管理员" },
|
||||
]);
|
||||
|
||||
const userLevelList = ref<ComboModel[]>([]);
|
||||
|
|
@ -399,7 +373,7 @@ const gradeList = ref<ComboModel[]>([
|
|||
{ value: "初三", text: "初三" },
|
||||
{ value: "高一", text: "高一" },
|
||||
{ value: "高二", text: "高二" },
|
||||
{ value: "高三", text: "高三" }
|
||||
{ value: "高三", text: "高三" },
|
||||
]);
|
||||
const classList = ref<ComboModel[]>([]);
|
||||
const subjectList = ref<ComboModel[]>([]);
|
||||
|
|
@ -409,13 +383,13 @@ const table = reactive<TableData>({
|
|||
data: [],
|
||||
selectRows: [],
|
||||
sort: "",
|
||||
border: true
|
||||
border: true,
|
||||
});
|
||||
|
||||
const pagination = reactive<PaginationData>({
|
||||
index: 1,
|
||||
size: 10,
|
||||
total: 0
|
||||
total: 0,
|
||||
});
|
||||
|
||||
const dialog = reactive<DialogData>({
|
||||
|
|
@ -423,32 +397,32 @@ const dialog = reactive<DialogData>({
|
|||
update: {
|
||||
title: "",
|
||||
visible: false,
|
||||
width: "800px"
|
||||
width: "1000px",
|
||||
},
|
||||
editLevel: {
|
||||
userIds: [],
|
||||
title: "",
|
||||
visible: false,
|
||||
width: "400px"
|
||||
width: "400px",
|
||||
},
|
||||
editSubjectLevel: {
|
||||
userIds: [],
|
||||
title: "",
|
||||
visible: false,
|
||||
width: "450px"
|
||||
width: "450px",
|
||||
},
|
||||
bindUser: {
|
||||
title: "分配权限码",
|
||||
visible: false,
|
||||
width: "1150px",
|
||||
height: ""
|
||||
height: "",
|
||||
},
|
||||
userBindInfo: {
|
||||
title: "用户权限码",
|
||||
visible: false,
|
||||
width: "1150px",
|
||||
height: ""
|
||||
}
|
||||
height: "",
|
||||
},
|
||||
});
|
||||
|
||||
const checkUserBindInfo = () => {
|
||||
|
|
@ -511,7 +485,7 @@ const exportUser = async () => {
|
|||
SubjectId: search.subjectId || 0,
|
||||
PositionId: search.positionId || 0,
|
||||
PageIndex: pagination.index,
|
||||
PageSize: pagination.size
|
||||
PageSize: pagination.size,
|
||||
};
|
||||
|
||||
// const res = await exportUserApi(data);
|
||||
|
|
@ -563,9 +537,9 @@ const getClass = () => {
|
|||
const data = {
|
||||
schoolId: search.schoolId || 0,
|
||||
graduationYear: search.graduationYear || 0,
|
||||
grade: search.grade
|
||||
grade: search.grade,
|
||||
};
|
||||
getClassCombo(data).then(res => {
|
||||
getClassCombo(data).then((res) => {
|
||||
if (res.code === 200) {
|
||||
classList.value = res.data;
|
||||
}
|
||||
|
|
@ -585,12 +559,12 @@ const fetchPagedData = (searchUnUse = false) => {
|
|||
PositionId: search.positionId || 0,
|
||||
PageIndex: pagination.index,
|
||||
PageSize: pagination.size,
|
||||
UnUsed: searchUnUse
|
||||
UnUsed: searchUnUse,
|
||||
};
|
||||
getPageUserList(data).then(res => {
|
||||
getPageUserList(data).then((res) => {
|
||||
if (res.code === 200) {
|
||||
pagination.total = res.data.total;
|
||||
res.data.data.forEach(item => {
|
||||
res.data.data.forEach((item) => {
|
||||
if (item.positions) {
|
||||
item.positions = PositionsSort(item.positions);
|
||||
}
|
||||
|
|
@ -670,7 +644,7 @@ const getUserLevelTag = (level: number) => {
|
|||
};
|
||||
|
||||
const getUserLevelText = (level: number) => {
|
||||
const r = userLevelList.value.filter(w => w.value === level);
|
||||
const r = userLevelList.value.filter((w) => w.value === level);
|
||||
if (r.length > 0) {
|
||||
return r[0].text;
|
||||
}
|
||||
|
|
@ -707,7 +681,7 @@ function pageIndexChange(o) {
|
|||
|
||||
const AddDialog = () => {
|
||||
editId.value = 0;
|
||||
dialog.update.title = "添加用户";
|
||||
dialog.update.title = "添加教师";
|
||||
dialog.update.visible = true;
|
||||
};
|
||||
|
||||
|
|
@ -732,7 +706,7 @@ const handleEditLevel = () => {
|
|||
return;
|
||||
}
|
||||
dialog.editLevel.title = "修改学生层次";
|
||||
dialog.editLevel.userIds = table.selectRows.map(w => w.id);
|
||||
dialog.editLevel.userIds = table.selectRows.map((w) => w.id);
|
||||
dialog.editLevel.visible = true;
|
||||
};
|
||||
|
||||
|
|
@ -747,7 +721,7 @@ const handleEditSubjectLevel = () => {
|
|||
return;
|
||||
}
|
||||
dialog.editSubjectLevel.title = "修改学生科目层次";
|
||||
dialog.editSubjectLevel.userIds = table.selectRows.map(w => w.id);
|
||||
dialog.editSubjectLevel.userIds = table.selectRows.map((w) => w.id);
|
||||
dialog.editSubjectLevel.visible = true;
|
||||
};
|
||||
|
||||
|
|
@ -791,7 +765,7 @@ const importData = () => {
|
|||
};
|
||||
|
||||
const readerBlob = (data: Blob): Promise<any> => {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
const reader = new FileReader();
|
||||
reader.readAsText(data, "utf-8");
|
||||
reader.onload = function () {
|
||||
|
|
|
|||
|
|
@ -62,12 +62,7 @@
|
|||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-select
|
||||
v-model="search.classId"
|
||||
placeholder="班级"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-select v-model="search.classId" placeholder="班级" clearable filterable>
|
||||
<el-option
|
||||
v-for="item in classList"
|
||||
:key="item.value"
|
||||
|
|
@ -78,12 +73,7 @@
|
|||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-select
|
||||
v-model="search.subjectId"
|
||||
placeholder="科目"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-select v-model="search.subjectId" placeholder="科目" clearable filterable>
|
||||
<el-option
|
||||
v-for="item in subjectList"
|
||||
:key="item.value"
|
||||
|
|
@ -93,7 +83,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<!-- <el-form-item>
|
||||
<el-select
|
||||
v-model="search.status"
|
||||
placeholder="状态"
|
||||
|
|
@ -107,21 +97,16 @@
|
|||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleReloadPaged"
|
||||
icon="el-icon-search"
|
||||
<el-button type="primary" @click="handleReloadPaged" :icon="Search"
|
||||
>查询</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="success" @click="asyncPosition"
|
||||
>选择勾选职位</el-button
|
||||
>
|
||||
<el-button type="success" @click="asyncPosition">选择勾选职位</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
|
@ -147,15 +132,11 @@
|
|||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="40" />
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="职位名称[双击行快速选择]"
|
||||
width="220"
|
||||
>
|
||||
<el-table-column prop="name" label="职位名称[双击行快速选择]" width="220">
|
||||
<template #default="scope">
|
||||
<span
|
||||
>{{ scope.row.name }}
|
||||
<el-tag v-show="selectPositions.find(s => scope.row.Id == s.id)"
|
||||
<el-tag v-show="selectPositions.find((s) => scope.row.Id == s.id)"
|
||||
>已选</el-tag
|
||||
>
|
||||
</span>
|
||||
|
|
@ -163,29 +144,19 @@
|
|||
</el-table-column>
|
||||
<el-table-column prop="positionLevel" label="职级" width="80">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.positionLevel === 1" type="danger"
|
||||
>教委</el-tag
|
||||
>
|
||||
<el-tag v-else-if="scope.row.positionLevel === 2" type="warning"
|
||||
>校级</el-tag
|
||||
>
|
||||
<el-tag v-if="scope.row.positionLevel === 1" type="danger">教委</el-tag>
|
||||
<el-tag v-else-if="scope.row.positionLevel === 2" type="warning">校级</el-tag>
|
||||
<el-tag v-else-if="scope.row.positionLevel === 3">年级</el-tag>
|
||||
<el-tag v-else-if="scope.row.positionLevel === 4" type="success"
|
||||
>班级</el-tag
|
||||
>
|
||||
<el-tag v-else-if="scope.row.positionLevel === 5" type="info"
|
||||
>教师</el-tag
|
||||
>
|
||||
<el-tag v-else-if="scope.row.positionType === 1" type="info"
|
||||
>学生</el-tag
|
||||
>
|
||||
<el-tag v-else-if="scope.row.positionLevel === 4" type="success">班级</el-tag>
|
||||
<el-tag v-else-if="scope.row.positionLevel === 5" type="info">教师</el-tag>
|
||||
<el-tag v-else-if="scope.row.positionType === 1" type="info">学生</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="学校 - 年级 - 班级 - 学科">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="!scope.row.status" type="danger">锁定</el-tag>
|
||||
{{ scope.row.schoolName }} {{ scope.row.grade }}
|
||||
{{ scope.row.className }} {{ scope.row.subjectName }}
|
||||
{{ scope.row.schoolName }} {{ scope.row.grade }} {{ scope.row.className }}
|
||||
{{ scope.row.subjectName }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -198,7 +169,7 @@
|
|||
style="float: right"
|
||||
type="success"
|
||||
@click="handleConfirm"
|
||||
icon="el-icon-check"
|
||||
:icon="Check"
|
||||
>提交分配职位</el-button
|
||||
>
|
||||
</div>
|
||||
|
|
@ -217,7 +188,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from "vue";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
|
|
@ -228,9 +198,10 @@ import {
|
|||
getSubjectData,
|
||||
getPositionList,
|
||||
getPositions,
|
||||
Position
|
||||
Position,
|
||||
} from "@/api/userCenter";
|
||||
import { ComboModel } from "@/components/hTable/hTable";
|
||||
import { Check, Search } from "@element-plus/icons-vue";
|
||||
|
||||
interface SearchParams {
|
||||
schoolId: string | number;
|
||||
|
|
@ -259,16 +230,16 @@ interface Dialog {
|
|||
const props = defineProps({
|
||||
userType: {
|
||||
type: Number,
|
||||
default: 0
|
||||
default: 0,
|
||||
},
|
||||
positions: {
|
||||
type: Array as () => number[],
|
||||
default: () => []
|
||||
default: () => [],
|
||||
},
|
||||
selectionCount: {
|
||||
type: Number,
|
||||
default: 999
|
||||
}
|
||||
default: 999,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(["handleCheckCallback", "handleCheckCallback"]);
|
||||
|
|
@ -279,7 +250,7 @@ const search = reactive<SearchParams>({
|
|||
grade: "",
|
||||
classId: "",
|
||||
subjectId: "",
|
||||
status: ""
|
||||
status: 1,
|
||||
});
|
||||
|
||||
const selectPositions = ref<Position[]>([]);
|
||||
|
|
@ -290,7 +261,7 @@ const gradeList = ref<ComboModel[]>([
|
|||
{ value: "初三", text: "初三" },
|
||||
{ value: "高一", text: "高一" },
|
||||
{ value: "高二", text: "高二" },
|
||||
{ value: "高三", text: "高三" }
|
||||
{ value: "高三", text: "高三" },
|
||||
]);
|
||||
const classList = ref<ComboModel[]>([]);
|
||||
const subjectList = ref<ComboModel[]>([]);
|
||||
|
|
@ -298,17 +269,17 @@ const tableExpandRowKeys = ref<string[]>([]);
|
|||
const positionList = ref<ComboModel[]>([
|
||||
{ text: "学生", value: 1 },
|
||||
{ text: "教师", value: 2 },
|
||||
{ text: "管理员", value: 3 }
|
||||
{ text: "管理员", value: 3 },
|
||||
]);
|
||||
const statusList = ref<ComboModel[]>([
|
||||
{ text: "正常", value: 1 },
|
||||
{ text: "锁定", value: 2 }
|
||||
{ text: "锁定", value: 2 },
|
||||
]);
|
||||
|
||||
const table = reactive<TableData>({
|
||||
data: [],
|
||||
selectRows: [],
|
||||
border: true
|
||||
border: true,
|
||||
});
|
||||
|
||||
const dialog = reactive<Dialog>({
|
||||
|
|
@ -317,7 +288,7 @@ const dialog = reactive<Dialog>({
|
|||
close: false,
|
||||
title: "编辑职位",
|
||||
visible: false,
|
||||
width: "800px"
|
||||
width: "800px",
|
||||
});
|
||||
|
||||
const authDialog = reactive<Dialog>({
|
||||
|
|
@ -326,7 +297,7 @@ const authDialog = reactive<Dialog>({
|
|||
close: false,
|
||||
title: "职位授权",
|
||||
visible: false,
|
||||
width: "400px"
|
||||
width: "400px",
|
||||
});
|
||||
|
||||
const positionTb = ref<FormInstance>();
|
||||
|
|
@ -430,7 +401,7 @@ const gradeChange = () => {
|
|||
const getClass = async () => {
|
||||
const data = {
|
||||
schoolId: search.schoolId || 0,
|
||||
grade: search.grade
|
||||
grade: search.grade,
|
||||
};
|
||||
const res = await getClassCombo(data);
|
||||
if (res.code === 200) {
|
||||
|
|
@ -445,12 +416,17 @@ const fetchPagedData = async () => {
|
|||
ClassId: search.classId || 0,
|
||||
SubjectId: search.subjectId || 0,
|
||||
PositionType: search.positionType || 0,
|
||||
Status: search.status || 0
|
||||
Status: search.status || 0,
|
||||
};
|
||||
const res = await getPositionList(data);
|
||||
if (res.code === 200) {
|
||||
table.data = res.data;
|
||||
tableExpandRowKeys.value = table.data.map(s => s.id.toString());
|
||||
tableExpandRowKeys.value = [];
|
||||
tableExpandRowKeys.value = table.data.map((s) => s.id.toString());
|
||||
debugger;
|
||||
tableExpandRowKeys.value.push(
|
||||
res.data.find((s) => s.id == 1).children.map((s) => s.id.toString())
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -463,7 +439,7 @@ const handleConfirm = () => {
|
|||
};
|
||||
|
||||
const tagClose = (p: Position) => {
|
||||
selectPositions.value = selectPositions.value.filter(s => s !== p);
|
||||
selectPositions.value = selectPositions.value.filter((s) => s !== p);
|
||||
};
|
||||
|
||||
const asyncPosition = (event: Event | null, rows?: Position[]) => {
|
||||
|
|
@ -472,9 +448,9 @@ const asyncPosition = (event: Event | null, rows?: Position[]) => {
|
|||
ElMessage.warning("请选择要分配的职位");
|
||||
return;
|
||||
}
|
||||
const pIds = selectPositions.value.map(s => s.id);
|
||||
const pIds = selectPositions.value.map((s) => s.id);
|
||||
selectPositions.value = selectPositions.value.concat(
|
||||
datas.filter(s => !pIds.includes(s.id))
|
||||
datas.filter((s) => !pIds.includes(s.id))
|
||||
);
|
||||
};
|
||||
|
||||
|
|
@ -482,7 +458,7 @@ onMounted(async () => {
|
|||
userTypeToPosition();
|
||||
if (props.positions && props.positions.length > 0) {
|
||||
const res = await getPositions(props.positions);
|
||||
selectPositions.value = res.data.map(s => ({ ...s }));
|
||||
selectPositions.value = res.data.map((s) => ({ ...s }));
|
||||
}
|
||||
fetchInitData();
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue