dev #29
|
|
@ -20,8 +20,7 @@
|
||||||
: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>
|
||||||
|
|
||||||
|
|
@ -38,25 +37,28 @@
|
||||||
: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 style="width: 100px" v-show="search.schoolId">
|
<el-form-item v-show="search.schoolId" style="width: 100px">
|
||||||
<el-select v-model="search.classId" placeholder="班级" clearable filterable>
|
<el-select
|
||||||
|
v-model="search.classId"
|
||||||
|
placeholder="班级"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in classList"
|
v-for="item in classList"
|
||||||
: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>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleReloadPaged" :icon="Search"
|
<el-button type="primary" :icon="Search" @click="handleReloadPaged"
|
||||||
>查询</el-button
|
>查询</el-button
|
||||||
>
|
>
|
||||||
|
|
||||||
|
|
@ -64,7 +66,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="toolbar-container" v-show="!selectUser">
|
<div v-show="!selectUser" class="toolbar-container">
|
||||||
<!-- 按钮组 -->
|
<!-- 按钮组 -->
|
||||||
<el-button type="success" @click="importData">导入用户</el-button>
|
<el-button type="success" @click="importData">导入用户</el-button>
|
||||||
<el-button type="default" @click="downLoadImportUsersTemplate"
|
<el-button type="default" @click="downLoadImportUsersTemplate"
|
||||||
|
|
@ -74,40 +76,49 @@
|
||||||
>导出用户</el-button
|
>导出用户</el-button
|
||||||
> -->
|
> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="toolbar-container" v-show="!selectUser">
|
<div v-show="!selectUser" class="toolbar-container">
|
||||||
<!-- 按钮组 -->
|
<!-- 按钮组 -->
|
||||||
<el-button type="success" @click="AddDialog" plain>新增</el-button>
|
<el-button type="success" plain @click="AddDialog">新增</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-table
|
<el-table
|
||||||
@row-dblclick="setCurrent"
|
|
||||||
@row-click="selectUserClick"
|
|
||||||
ref="selectUserTable"
|
ref="selectUserTable"
|
||||||
:data="table.data"
|
:data="table.data"
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:max-height="maxTableHeight"
|
:max-height="maxTableHeight"
|
||||||
|
@row-dblclick="setCurrent"
|
||||||
|
@row-click="selectUserClick"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
>
|
>
|
||||||
<!-- <el-table-column type="selection" width="40" /> -->
|
<!-- <el-table-column type="selection" width="40" /> -->
|
||||||
<el-table-column label="操作" width="100">
|
<el-table-column label="操作" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button text type="primary" @click="EditDialog(scope.row)" plain
|
<el-button text type="primary" plain @click="EditDialog(scope.row)"
|
||||||
>修改</el-button
|
>修改</el-button
|
||||||
>
|
>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="学生信息" width="450">
|
<el-table-column label="学生信息" width="450">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tooltip :content="`id ` + scope.row.id" placement="top" effect="light">
|
<el-tooltip
|
||||||
|
:content="`id ` + scope.row.id"
|
||||||
|
placement="top"
|
||||||
|
effect="light"
|
||||||
|
>
|
||||||
<div>
|
<div>
|
||||||
<span :tips="scope.row.id">{{ scope.row.realName }}</span>
|
<span :tips="scope.row.id">{{ scope.row.realName }}</span>
|
||||||
<div
|
<div
|
||||||
class="inline-block"
|
|
||||||
v-for="(position, index) in scope.row.positions"
|
v-for="(position, index) in scope.row.positions"
|
||||||
|
v-show="
|
||||||
|
index < 3 ||
|
||||||
|
(index >= 3 && showAllPosition.includes(scope.row))
|
||||||
|
"
|
||||||
:key="'Position' + index"
|
:key="'Position' + index"
|
||||||
v-show="index < 3 || (index >= 3 && showAllPosition.includes(scope.row))"
|
class="inline-block"
|
||||||
>
|
>
|
||||||
<div class="subjectTagEnableDiv">
|
<div class="subjectTagEnableDiv">
|
||||||
<el-tag v-if="position.enable === false" type="info">已禁用</el-tag>
|
<el-tag v-if="position.enable === false" type="info"
|
||||||
|
>已禁用</el-tag
|
||||||
|
>
|
||||||
<el-tag>{{ position.schoolName || "-" }}</el-tag>
|
<el-tag>{{ position.schoolName || "-" }}</el-tag>
|
||||||
<el-tag type="success">{{
|
<el-tag type="success">{{
|
||||||
position.graduationYear
|
position.graduationYear
|
||||||
|
|
@ -135,9 +146,8 @@
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span v-if="!scope.row.reliefApplication">未申请</span>
|
<span v-if="!scope.row.reliefApplication">未申请</span>
|
||||||
<span v-else
|
<span v-else
|
||||||
>{{ scope.row.reliefSubTime }}申请{{ scope.row.amountRelief }}元 <br />{{
|
>{{ scope.row.reliefSubTime }}申请{{ scope.row.amountRelief }}元
|
||||||
scope.row.reliefType
|
<br />{{ scope.row.reliefType }}
|
||||||
}}
|
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -152,20 +162,20 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
<el-pagination
|
<el-pagination
|
||||||
style="display: flex; justify-content: center; padding-top: 10px"
|
style="display: flex; justify-content: center; padding-top: 10px"
|
||||||
@size-change="pageSizeChange"
|
|
||||||
@current-change="pageIndexChange"
|
|
||||||
:current-page="pagination.now"
|
:current-page="pagination.now"
|
||||||
:page-sizes="[10, 20, 40, 80, 100]"
|
:page-sizes="[10, 20, 40, 80, 100]"
|
||||||
:page-size="pagination.size"
|
:page-size="pagination.size"
|
||||||
layout="prev, pager, next,sizes, total"
|
layout="prev, pager, next,sizes, total"
|
||||||
:total="pagination.total"
|
:total="pagination.total"
|
||||||
|
@size-change="pageSizeChange"
|
||||||
|
@current-change="pageIndexChange"
|
||||||
/>
|
/>
|
||||||
<div class="dialog-container">
|
<div class="dialog-container">
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-if="dialog.update.visible"
|
v-if="dialog.update.visible"
|
||||||
ref="UserEditFromDialog"
|
ref="UserEditFromDialog"
|
||||||
:title="dialog.update.title"
|
|
||||||
v-model="dialog.update.visible"
|
v-model="dialog.update.visible"
|
||||||
|
:title="dialog.update.title"
|
||||||
:width="dialog.update.width"
|
:width="dialog.update.width"
|
||||||
:close-on-click-modal="dialog.close"
|
:close-on-click-modal="dialog.close"
|
||||||
:close-on-press-escape="dialog.close"
|
:close-on-press-escape="dialog.close"
|
||||||
|
|
@ -189,7 +199,7 @@ import {
|
||||||
getSubjectData,
|
getSubjectData,
|
||||||
getPageUserList,
|
getPageUserList,
|
||||||
UserDetail,
|
UserDetail,
|
||||||
Position,
|
Position
|
||||||
} from "@/api/userCenter";
|
} from "@/api/userCenter";
|
||||||
import { getenum } from "@/api/enum";
|
import { getenum } from "@/api/enum";
|
||||||
import { hTableAPI } from "@/api/hTable";
|
import { hTableAPI } from "@/api/hTable";
|
||||||
|
|
@ -201,7 +211,7 @@ import {
|
||||||
Message,
|
Message,
|
||||||
ArrowDownBold,
|
ArrowDownBold,
|
||||||
Search,
|
Search,
|
||||||
Star,
|
Star
|
||||||
} 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 { ImportStudent, PageList } from "@/api/student";
|
import { ImportStudent, PageList } from "@/api/student";
|
||||||
|
|
@ -271,20 +281,20 @@ interface DialogData {
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
selectUser: {
|
selectUser: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false
|
||||||
},
|
},
|
||||||
selectCallBack: {
|
selectCallBack: {
|
||||||
type: Function,
|
type: Function,
|
||||||
default: () => {},
|
default: () => {}
|
||||||
},
|
},
|
||||||
maxTableHeight: {
|
maxTableHeight: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 580,
|
default: 580
|
||||||
},
|
},
|
||||||
searchData: {
|
searchData: {
|
||||||
type: Object as () => SearchParams,
|
type: Object as () => SearchParams,
|
||||||
default: undefined,
|
default: undefined
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const baseUrl = import.meta.env.VITE_APP_BASE_API;
|
const baseUrl = import.meta.env.VITE_APP_BASE_API;
|
||||||
|
|
@ -305,13 +315,13 @@ const search = reactive<SearchParams>({
|
||||||
grade: "",
|
grade: "",
|
||||||
classId: "",
|
classId: "",
|
||||||
subjectId: "",
|
subjectId: "",
|
||||||
positionId: "",
|
positionId: ""
|
||||||
});
|
});
|
||||||
|
|
||||||
const userTypeList = ref<ComboModel[]>([
|
const userTypeList = ref<ComboModel[]>([
|
||||||
{ value: 1, text: "学生" },
|
{ value: 1, text: "学生" },
|
||||||
{ value: 2, text: "教师" },
|
{ value: 2, text: "教师" },
|
||||||
{ value: 3, text: "管理员" },
|
{ value: 3, text: "管理员" }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const userLevelList = ref<ComboModel[]>([]);
|
const userLevelList = ref<ComboModel[]>([]);
|
||||||
|
|
@ -325,13 +335,13 @@ const table = reactive<TableData>({
|
||||||
data: [],
|
data: [],
|
||||||
selectRows: [],
|
selectRows: [],
|
||||||
sort: "",
|
sort: "",
|
||||||
border: true,
|
border: true
|
||||||
});
|
});
|
||||||
|
|
||||||
const pagination = reactive<PaginationData>({
|
const pagination = reactive<PaginationData>({
|
||||||
index: 1,
|
index: 1,
|
||||||
size: 10,
|
size: 10,
|
||||||
total: 0,
|
total: 0
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialog = reactive<DialogData>({
|
const dialog = reactive<DialogData>({
|
||||||
|
|
@ -339,32 +349,32 @@ const dialog = reactive<DialogData>({
|
||||||
update: {
|
update: {
|
||||||
title: "",
|
title: "",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "1000px",
|
width: "1000px"
|
||||||
},
|
},
|
||||||
editLevel: {
|
editLevel: {
|
||||||
userIds: [],
|
userIds: [],
|
||||||
title: "",
|
title: "",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "400px",
|
width: "400px"
|
||||||
},
|
},
|
||||||
editSubjectLevel: {
|
editSubjectLevel: {
|
||||||
userIds: [],
|
userIds: [],
|
||||||
title: "",
|
title: "",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "450px",
|
width: "450px"
|
||||||
},
|
},
|
||||||
bindUser: {
|
bindUser: {
|
||||||
title: "分配权限码",
|
title: "分配权限码",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "1150px",
|
width: "1150px",
|
||||||
height: "",
|
height: ""
|
||||||
},
|
},
|
||||||
userBindInfo: {
|
userBindInfo: {
|
||||||
title: "用户权限码",
|
title: "用户权限码",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "1150px",
|
width: "1150px",
|
||||||
height: "",
|
height: ""
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const checkUserBindInfo = () => {
|
const checkUserBindInfo = () => {
|
||||||
|
|
@ -427,7 +437,7 @@ const exportUser = async () => {
|
||||||
SubjectId: search.subjectId || 0,
|
SubjectId: search.subjectId || 0,
|
||||||
PositionId: search.positionId || 0,
|
PositionId: search.positionId || 0,
|
||||||
PageIndex: pagination.index,
|
PageIndex: pagination.index,
|
||||||
PageSize: pagination.size,
|
PageSize: pagination.size
|
||||||
};
|
};
|
||||||
|
|
||||||
// const res = await exportUserApi(data);
|
// const res = await exportUserApi(data);
|
||||||
|
|
@ -488,9 +498,9 @@ const getClass = () => {
|
||||||
const data = {
|
const data = {
|
||||||
schoolId: search.schoolId || 0,
|
schoolId: search.schoolId || 0,
|
||||||
graduationYear: search.graduationYear || 0,
|
graduationYear: search.graduationYear || 0,
|
||||||
grade: search.grade,
|
grade: search.grade
|
||||||
};
|
};
|
||||||
getClassCombo(data).then((res) => {
|
getClassCombo(data).then(res => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
classList.value = res.data;
|
classList.value = res.data;
|
||||||
}
|
}
|
||||||
|
|
@ -510,12 +520,12 @@ const fetchPagedData = (searchUnUse = false) => {
|
||||||
PositionId: search.positionId || 0,
|
PositionId: search.positionId || 0,
|
||||||
PageIndex: pagination.index,
|
PageIndex: pagination.index,
|
||||||
PageSize: pagination.size,
|
PageSize: pagination.size,
|
||||||
UnUsed: searchUnUse,
|
UnUsed: searchUnUse
|
||||||
};
|
};
|
||||||
PageList(data).then((res) => {
|
PageList(data).then(res => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
pagination.total = res.data.total;
|
pagination.total = res.data.total;
|
||||||
res.data.data.forEach((item) => {
|
res.data.data.forEach(item => {
|
||||||
if (item.positions) {
|
if (item.positions) {
|
||||||
item.positions = PositionsSort(item.positions);
|
item.positions = PositionsSort(item.positions);
|
||||||
}
|
}
|
||||||
|
|
@ -600,7 +610,7 @@ const getUserLevelTag = (level: number) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUserLevelText = (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) {
|
if (r.length > 0) {
|
||||||
return r[0].text;
|
return r[0].text;
|
||||||
}
|
}
|
||||||
|
|
@ -617,7 +627,7 @@ const PositionsSort = (arr: Position[]) => {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return arr;
|
return arr.filter(s => s.enable);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleReloadPaged = (event?: any, searchUnUse?: boolean) => {
|
const handleReloadPaged = (event?: any, searchUnUse?: boolean) => {
|
||||||
|
|
@ -663,7 +673,7 @@ const handleEditLevel = () => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dialog.editLevel.title = "修改学生层次";
|
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;
|
dialog.editLevel.visible = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -678,7 +688,7 @@ const handleEditSubjectLevel = () => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dialog.editSubjectLevel.title = "修改学生科目层次";
|
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;
|
dialog.editSubjectLevel.visible = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -724,7 +734,7 @@ const importData = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const readerBlob = (data: Blob): Promise<any> => {
|
const readerBlob = (data: Blob): Promise<any> => {
|
||||||
return new Promise((resolve) => {
|
return new Promise(resolve => {
|
||||||
const reader = new FileReader();
|
const reader = new FileReader();
|
||||||
reader.readAsText(data, "utf-8");
|
reader.readAsText(data, "utf-8");
|
||||||
reader.onload = function () {
|
reader.onload = function () {
|
||||||
|
|
|
||||||
|
|
@ -25,14 +25,18 @@
|
||||||
</el-form-item> -->
|
</el-form-item> -->
|
||||||
|
|
||||||
<el-form-item v-show="search.userType === 1" style="width: 100px">
|
<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
|
<el-option
|
||||||
v-for="item in userLevelList"
|
v-for="item in userLevelList"
|
||||||
: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>
|
||||||
|
|
||||||
|
|
@ -49,8 +53,7 @@
|
||||||
: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>
|
||||||
|
|
||||||
|
|
@ -67,49 +70,59 @@
|
||||||
: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 v-show="search.schoolId" style="width: 100px">
|
<el-form-item v-show="search.schoolId" style="width: 100px">
|
||||||
<el-select v-model="search.classId" placeholder="班级" clearable filterable>
|
<el-select
|
||||||
|
v-model="search.classId"
|
||||||
|
placeholder="班级"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in classList"
|
v-for="item in classList"
|
||||||
: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 v-show="search.schoolId" style="width: 100px">
|
<el-form-item v-show="search.schoolId" style="width: 100px">
|
||||||
<el-select v-model="search.subjectId" placeholder="科目" clearable filterable>
|
<el-select
|
||||||
|
v-model="search.subjectId"
|
||||||
|
placeholder="科目"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in subjectList"
|
v-for="item in subjectList"
|
||||||
: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>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleReloadPaged" :icon="Search"
|
<el-button type="primary" :icon="Search" @click="handleReloadPaged"
|
||||||
>查询</el-button
|
>查询</el-button
|
||||||
>
|
>
|
||||||
<el-button type="default" @click="searchReload">重置</el-button>
|
<el-button type="default" @click="searchReload">重置</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-show="selectUser">
|
<el-form-item v-show="selectUser">
|
||||||
<el-button type="success" @click="selectUserCallBack()" icon="el-icon-check"
|
<el-button
|
||||||
|
type="success"
|
||||||
|
icon="el-icon-check"
|
||||||
|
@click="selectUserCallBack()"
|
||||||
>选择用户</el-button
|
>选择用户</el-button
|
||||||
>
|
>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="toolbar-container" v-show="!selectUser">
|
<div v-show="!selectUser" class="toolbar-container">
|
||||||
<!-- 按钮组 -->
|
<!-- 按钮组 -->
|
||||||
<el-button type="success" @click="importData">导入用户</el-button>
|
<el-button type="success" @click="importData">导入用户</el-button>
|
||||||
<el-button type="default" @click="downLoadImportUsersTemplate"
|
<el-button type="default" @click="downLoadImportUsersTemplate"
|
||||||
|
|
@ -119,23 +132,23 @@
|
||||||
>导出用户</el-button
|
>导出用户</el-button
|
||||||
> -->
|
> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="toolbar-container" v-show="!selectUser">
|
<div v-show="!selectUser" class="toolbar-container">
|
||||||
<!-- 按钮组 -->
|
<!-- 按钮组 -->
|
||||||
<el-button type="success" @click="AddDialog" plain>新增</el-button>
|
<el-button type="success" plain @click="AddDialog">新增</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-table
|
<el-table
|
||||||
@row-dblclick="setCurrent"
|
|
||||||
@row-click="selectUserClick"
|
|
||||||
ref="selectUserTable"
|
ref="selectUserTable"
|
||||||
:data="table.data"
|
:data="table.data"
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:max-height="maxTableHeight"
|
:max-height="maxTableHeight"
|
||||||
|
@row-dblclick="setCurrent"
|
||||||
|
@row-click="selectUserClick"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
>
|
>
|
||||||
<!-- <el-table-column type="selection" width="40" /> -->
|
<!-- <el-table-column type="selection" width="40" /> -->
|
||||||
<el-table-column label="操作" width="100">
|
<el-table-column label="操作" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button text type="primary" @click="EditDialog(scope.row)" plain
|
<el-button text type="primary" plain @click="EditDialog(scope.row)"
|
||||||
>修改</el-button
|
>修改</el-button
|
||||||
>
|
>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -144,9 +157,13 @@
|
||||||
<el-table-column prop="id" label="用户Id" width="100" />
|
<el-table-column prop="id" label="用户Id" width="100" />
|
||||||
<el-table-column label="用户信息" width="200">
|
<el-table-column label="用户信息" width="200">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag :type="getUserTypeTag(scope.row.userType)" style="margin-right: 5px">{{
|
<el-tag
|
||||||
userTypeList.find((s) => s.value == scope.row.userType)?.text
|
:type="getUserTypeTag(scope.row.userType)"
|
||||||
}}</el-tag>
|
style="margin-right: 5px"
|
||||||
|
>{{
|
||||||
|
userTypeList.find(s => s.value == scope.row.userType)?.text
|
||||||
|
}}</el-tag
|
||||||
|
>
|
||||||
<span>{{ scope.row.realName }} </span>
|
<span>{{ scope.row.realName }} </span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -163,8 +180,10 @@
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div
|
<div
|
||||||
v-for="(position, index) in scope.row.positions"
|
v-for="(position, index) in scope.row.positions"
|
||||||
|
v-show="
|
||||||
|
index < 3 || (index >= 3 && showAllPosition.includes(scope.row))
|
||||||
|
"
|
||||||
:key="'Position' + index"
|
:key="'Position' + index"
|
||||||
v-show="index < 3 || (index >= 3 && showAllPosition.includes(scope.row))"
|
|
||||||
>
|
>
|
||||||
<div class="subjectTagEnableDiv">
|
<div class="subjectTagEnableDiv">
|
||||||
<el-tag>{{ position.schoolName || "-" }}</el-tag>
|
<el-tag>{{ position.schoolName || "-" }}</el-tag>
|
||||||
|
|
@ -183,14 +202,16 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="scope.row.positions != undefined && scope.row.positions.length > 3"
|
v-if="
|
||||||
@click="showPosition(scope.row)"
|
scope.row.positions != undefined && scope.row.positions.length > 3
|
||||||
|
"
|
||||||
class="userTagRow"
|
class="userTagRow"
|
||||||
|
@click="showPosition(scope.row)"
|
||||||
>
|
>
|
||||||
<el-icon
|
<el-icon
|
||||||
|
v-if="showAllPosition.includes(scope.row)"
|
||||||
title="折叠职位"
|
title="折叠职位"
|
||||||
class="userTagRowItop"
|
class="userTagRowItop"
|
||||||
v-if="showAllPosition.includes(scope.row)"
|
|
||||||
><ArrowDownBold
|
><ArrowDownBold
|
||||||
/></el-icon>
|
/></el-icon>
|
||||||
<el-icon v-else title="展开更多职位"><ArrowDownBold /></el-icon>
|
<el-icon v-else title="展开更多职位"><ArrowDownBold /></el-icon>
|
||||||
|
|
@ -200,20 +221,20 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
<el-pagination
|
<el-pagination
|
||||||
style="display: flex; justify-content: center"
|
style="display: flex; justify-content: center"
|
||||||
@size-change="pageSizeChange"
|
|
||||||
@current-change="pageIndexChange"
|
|
||||||
:current-page="pagination.now"
|
:current-page="pagination.now"
|
||||||
:page-sizes="[10, 20, 40, 80, 100]"
|
:page-sizes="[10, 20, 40, 80, 100]"
|
||||||
:page-size="pagination.size"
|
:page-size="pagination.size"
|
||||||
layout="prev, pager, next,sizes, total"
|
layout="prev, pager, next,sizes, total"
|
||||||
:total="pagination.total"
|
:total="pagination.total"
|
||||||
|
@size-change="pageSizeChange"
|
||||||
|
@current-change="pageIndexChange"
|
||||||
/>
|
/>
|
||||||
<div class="dialog-container">
|
<div class="dialog-container">
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-if="dialog.update.visible"
|
v-if="dialog.update.visible"
|
||||||
ref="UserEditFromDialog"
|
ref="UserEditFromDialog"
|
||||||
:title="dialog.update.title"
|
|
||||||
v-model="dialog.update.visible"
|
v-model="dialog.update.visible"
|
||||||
|
:title="dialog.update.title"
|
||||||
:width="dialog.update.width"
|
:width="dialog.update.width"
|
||||||
:close-on-click-modal="dialog.close"
|
:close-on-click-modal="dialog.close"
|
||||||
:close-on-press-escape="dialog.close"
|
:close-on-press-escape="dialog.close"
|
||||||
|
|
@ -237,7 +258,7 @@ import {
|
||||||
getSubjectData,
|
getSubjectData,
|
||||||
getPageUserList,
|
getPageUserList,
|
||||||
UserDetail,
|
UserDetail,
|
||||||
Position,
|
Position
|
||||||
} from "@/api/userCenter";
|
} from "@/api/userCenter";
|
||||||
import { getenum } from "@/api/enum";
|
import { getenum } from "@/api/enum";
|
||||||
import { hTableAPI } from "@/api/hTable";
|
import { hTableAPI } from "@/api/hTable";
|
||||||
|
|
@ -249,7 +270,7 @@ import {
|
||||||
Message,
|
Message,
|
||||||
ArrowDownBold,
|
ArrowDownBold,
|
||||||
Search,
|
Search,
|
||||||
Star,
|
Star
|
||||||
} 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";
|
||||||
|
|
@ -319,20 +340,20 @@ interface DialogData {
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
selectUser: {
|
selectUser: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false
|
||||||
},
|
},
|
||||||
selectCallBack: {
|
selectCallBack: {
|
||||||
type: Function,
|
type: Function,
|
||||||
default: () => {},
|
default: () => {}
|
||||||
},
|
},
|
||||||
maxTableHeight: {
|
maxTableHeight: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 580,
|
default: 580
|
||||||
},
|
},
|
||||||
searchData: {
|
searchData: {
|
||||||
type: Object as () => SearchParams,
|
type: Object as () => SearchParams,
|
||||||
default: undefined,
|
default: undefined
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const baseUrl = import.meta.env.VITE_API_USERCENTER_URL;
|
const baseUrl = import.meta.env.VITE_API_USERCENTER_URL;
|
||||||
|
|
@ -354,13 +375,13 @@ const search = reactive<SearchParams>({
|
||||||
grade: "",
|
grade: "",
|
||||||
classId: "",
|
classId: "",
|
||||||
subjectId: "",
|
subjectId: "",
|
||||||
positionId: "",
|
positionId: ""
|
||||||
});
|
});
|
||||||
|
|
||||||
const userTypeList = ref<ComboModel[]>([
|
const userTypeList = ref<ComboModel[]>([
|
||||||
{ value: 1, text: "学生" },
|
{ value: 1, text: "学生" },
|
||||||
{ value: 2, text: "教师" },
|
{ value: 2, text: "教师" },
|
||||||
{ value: 3, text: "管理员" },
|
{ value: 3, text: "管理员" }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const userLevelList = ref<ComboModel[]>([]);
|
const userLevelList = ref<ComboModel[]>([]);
|
||||||
|
|
@ -375,13 +396,13 @@ const table = reactive<TableData>({
|
||||||
data: [],
|
data: [],
|
||||||
selectRows: [],
|
selectRows: [],
|
||||||
sort: "",
|
sort: "",
|
||||||
border: true,
|
border: true
|
||||||
});
|
});
|
||||||
|
|
||||||
const pagination = reactive<PaginationData>({
|
const pagination = reactive<PaginationData>({
|
||||||
index: 1,
|
index: 1,
|
||||||
size: 10,
|
size: 10,
|
||||||
total: 0,
|
total: 0
|
||||||
});
|
});
|
||||||
|
|
||||||
const dialog = reactive<DialogData>({
|
const dialog = reactive<DialogData>({
|
||||||
|
|
@ -389,32 +410,32 @@ const dialog = reactive<DialogData>({
|
||||||
update: {
|
update: {
|
||||||
title: "",
|
title: "",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "1000px",
|
width: "1000px"
|
||||||
},
|
},
|
||||||
editLevel: {
|
editLevel: {
|
||||||
userIds: [],
|
userIds: [],
|
||||||
title: "",
|
title: "",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "400px",
|
width: "400px"
|
||||||
},
|
},
|
||||||
editSubjectLevel: {
|
editSubjectLevel: {
|
||||||
userIds: [],
|
userIds: [],
|
||||||
title: "",
|
title: "",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "450px",
|
width: "450px"
|
||||||
},
|
},
|
||||||
bindUser: {
|
bindUser: {
|
||||||
title: "分配权限码",
|
title: "分配权限码",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "1150px",
|
width: "1150px",
|
||||||
height: "",
|
height: ""
|
||||||
},
|
},
|
||||||
userBindInfo: {
|
userBindInfo: {
|
||||||
title: "用户权限码",
|
title: "用户权限码",
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "1150px",
|
width: "1150px",
|
||||||
height: "",
|
height: ""
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const checkUserBindInfo = () => {
|
const checkUserBindInfo = () => {
|
||||||
|
|
@ -477,7 +498,7 @@ const exportUser = async () => {
|
||||||
SubjectId: search.subjectId || 0,
|
SubjectId: search.subjectId || 0,
|
||||||
PositionId: search.positionId || 0,
|
PositionId: search.positionId || 0,
|
||||||
PageIndex: pagination.index,
|
PageIndex: pagination.index,
|
||||||
PageSize: pagination.size,
|
PageSize: pagination.size
|
||||||
};
|
};
|
||||||
|
|
||||||
// const res = await exportUserApi(data);
|
// const res = await exportUserApi(data);
|
||||||
|
|
@ -538,9 +559,9 @@ const getClass = () => {
|
||||||
const data = {
|
const data = {
|
||||||
schoolId: search.schoolId || 0,
|
schoolId: search.schoolId || 0,
|
||||||
graduationYear: search.graduationYear || 0,
|
graduationYear: search.graduationYear || 0,
|
||||||
grade: search.grade,
|
grade: search.grade
|
||||||
};
|
};
|
||||||
getClassCombo(data).then((res) => {
|
getClassCombo(data).then(res => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
classList.value = res.data;
|
classList.value = res.data;
|
||||||
}
|
}
|
||||||
|
|
@ -560,12 +581,12 @@ const fetchPagedData = (searchUnUse = false) => {
|
||||||
PositionId: search.positionId || 0,
|
PositionId: search.positionId || 0,
|
||||||
PageIndex: pagination.index,
|
PageIndex: pagination.index,
|
||||||
PageSize: pagination.size,
|
PageSize: pagination.size,
|
||||||
UnUsed: searchUnUse,
|
UnUsed: searchUnUse
|
||||||
};
|
};
|
||||||
getPageUserList(data).then((res) => {
|
getPageUserList(data).then(res => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
pagination.total = res.data.total;
|
pagination.total = res.data.total;
|
||||||
res.data.data.forEach((item) => {
|
res.data.data.forEach(item => {
|
||||||
if (item.positions) {
|
if (item.positions) {
|
||||||
item.positions = PositionsSort(item.positions);
|
item.positions = PositionsSort(item.positions);
|
||||||
}
|
}
|
||||||
|
|
@ -594,7 +615,7 @@ const getUserLevelTag = (level: number) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUserLevelText = (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) {
|
if (r.length > 0) {
|
||||||
return r[0].text;
|
return r[0].text;
|
||||||
}
|
}
|
||||||
|
|
@ -611,7 +632,7 @@ const PositionsSort = (arr: Position[]) => {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return arr;
|
return arr.filter(s => s.enable);
|
||||||
};
|
};
|
||||||
|
|
||||||
function searchReload() {
|
function searchReload() {
|
||||||
|
|
@ -661,7 +682,7 @@ const handleEditLevel = () => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dialog.editLevel.title = "修改学生层次";
|
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;
|
dialog.editLevel.visible = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -676,7 +697,7 @@ const handleEditSubjectLevel = () => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dialog.editSubjectLevel.title = "修改学生科目层次";
|
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;
|
dialog.editSubjectLevel.visible = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -694,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("所有数据录入成功");
|
||||||
|
|
@ -701,7 +723,7 @@ const importData = () => {
|
||||||
let json = JSON.parse(await res.text());
|
let json = JSON.parse(await res.text());
|
||||||
let code = json.code || json.Code;
|
let code = json.code || json.Code;
|
||||||
if (json !== undefined && code !== 200) {
|
if (json !== undefined && code !== 200) {
|
||||||
return ElMessage.error(json.Message);
|
return ElMessage.error(json.message);
|
||||||
} else {
|
} else {
|
||||||
return ElMessage.success("操所有数据录入成功作成功");
|
return ElMessage.success("操所有数据录入成功作成功");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue