@@ -35,6 +35,7 @@ export namespace SysUserPersonnel { | |||
userName?: string | number | undefined; | |||
majorId?: any; | |||
majorName?: any; | |||
teacherId?: any; | |||
} | |||
/** 人脸信息 */ | |||
export interface SysUserAvatar { | |||
@@ -4,7 +4,7 @@ | |||
* @Date: 2023-12-15 15:38:32 | |||
!--> | |||
<template> | |||
<el-select :placeholder="placeholder" :filterable="filterable" class="w-full" v-bind="$attrs" clearable> | |||
<el-select :placeholder="placeholder" :filterable="filterable" class="w-full" v-bind="$attrs" :clearable="clearable"> | |||
<el-option v-for="(item, index) in options" :key="index" :label="item[props.label]" :value="item[props.value]" /> | |||
</el-select> | |||
</template> | |||
@@ -21,7 +21,8 @@ const props = withDefaults(defineProps<SSelectProps>(), { | |||
value: "value", | |||
label: "label", | |||
button: false, | |||
filterable: false //是否可搜索 | |||
filterable: false, //是否可搜索 | |||
clearable: true //是否可清空 | |||
}); | |||
const placeholder = computed(() => { | |||
@@ -22,4 +22,5 @@ export interface SSelectProps { | |||
/** 选项值 */ | |||
value?: string; | |||
filterable?: boolean; | |||
clearable?: boolean; | |||
} |
@@ -15,7 +15,7 @@ | |||
label-width="auto" | |||
label-suffix=" :" | |||
> | |||
<s-form-item label="指定推送人" prop="userId"> | |||
<s-form-item label="指定人员" prop="userId"> | |||
<el-button link type="primary" @click="showSelector">选择</el-button> | |||
<el-tag v-if="liveUserProps.record.userId" class="ml-3px" type="warning" closable @close="removeDirector">{{ | |||
liveUserProps.record.userInfo?.name | |||
@@ -32,7 +32,7 @@ | |||
</template> | |||
<script setup lang="ts"> | |||
import { SysOrg, SysUser, sysOrgApi, sysPositionApi, sysRoleApi, sysUserApi, monitorLIVEApi } from "@/api"; | |||
import { SysOrg, SysUser, sysOrgApi, userManageTeacherApi, sysPositionApi, sysRoleApi, sysUserApi, monitorLIVEApi } from "@/api"; | |||
import { FormOptEnum, SysDictEnum } from "@/enums"; | |||
import { required } from "@/utils/formRules"; | |||
import { FormInstance } from "element-plus"; | |||
@@ -51,7 +51,7 @@ const liveUserProps = reactive<FormProps.Base<any>>({ | |||
// 表单验证规则 | |||
const rules = reactive({ | |||
userId: [required("请选择指定推送人")] | |||
userId: [required("请选择指定人")] | |||
}); | |||
/** | |||
@@ -98,7 +98,7 @@ async function handleSubmit() { | |||
.finally(() => { | |||
onClose(); | |||
}); | |||
} else { | |||
} else if (liveUserProps.opt == "视频推送人") { | |||
params.userId = liveUserProps.record.userId; | |||
params.ids.push(liveUserProps.record.id); | |||
//提交表单 | |||
@@ -111,6 +111,29 @@ async function handleSubmit() { | |||
onClose(); | |||
}); | |||
// delete params. | |||
} else if (liveUserProps.opt == "绑定班主任") { | |||
await userManageTeacherApi | |||
.add(liveUserProps.record) | |||
.then(() => { | |||
liveUserProps.successful!(); //调用父组件的successful方法 | |||
}) | |||
.finally(() => { | |||
onClose(); | |||
}); | |||
} else if (liveUserProps.opt == "修改班主任") { | |||
let params = { | |||
id: liveUserProps.record.teacherId, | |||
userId: liveUserProps.record.userId, | |||
personSetId: liveUserProps.record.personSetId | |||
}; | |||
await userManageTeacherApi | |||
.update(params) | |||
.then(() => { | |||
liveUserProps.successful!(); //调用父组件的successful方法 | |||
}) | |||
.finally(() => { | |||
onClose(); | |||
}); | |||
} | |||
// console.log(params); | |||
// return; | |||
@@ -35,13 +35,13 @@ | |||
<el-link type="primary" :underline="false" :icon="ArrowDown"> 更多 </el-link> | |||
<template #dropdown> | |||
<el-dropdown-menu> | |||
<el-dropdown-item v-if="!scope.row.userId" :command="commander(scope.row, cmdEnumTree.AddTeacher)"> | |||
<el-dropdown-item v-if="!scope.row.pushUserId" :command="commander(scope.row, cmdEnumTree.AddTeacher)"> | |||
{{ cmdEnumTree.AddTeacher }} | |||
</el-dropdown-item> | |||
<el-dropdown-item v-if="scope.row.userId" :command="commander(scope.row, cmdEnumTree.UpdateTeacher)"> | |||
<el-dropdown-item v-if="scope.row.pushUserId" :command="commander(scope.row, cmdEnumTree.UpdateTeacher)"> | |||
{{ cmdEnumTree.UpdateTeacher }} | |||
</el-dropdown-item> | |||
<el-dropdown-item v-if="scope.row.userId" :command="commander(scope.row, cmdEnumTree.DeleteTeacher)"> | |||
<el-dropdown-item v-if="scope.row.pushUserId" :command="commander(scope.row, cmdEnumTree.DeleteTeacher)"> | |||
{{ cmdEnumTree.DeleteTeacher }} | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
@@ -54,8 +54,8 @@ | |||
<!-- 班级新增/编辑表单 --> | |||
<FormClass ref="formRefC" /> | |||
<!-- 班主任绑定/修改 --> | |||
<FormTeacher ref="formRefT" /> | |||
<!-- 人员选择 --> | |||
<userForm ref="userFormRef" /> | |||
</div> | |||
</template> | |||
<script setup lang="tsx" name="SysUserKeyPersonnel"> | |||
@@ -63,9 +63,9 @@ import { userManageClassManageApi,userManageTeacherApi,SysUserPersonnel,userMana | |||
import { useHandleData } from "@/hooks/useHandleData"; | |||
import { FormOptEnum } from "@/enums"; | |||
import FormClass from "./components/formClass/index.vue"; | |||
import FormTeacher from "./components/formTeacher/index.vue"; | |||
import { ArrowDown } from "@element-plus/icons-vue"; | |||
import { ColumnProps, ProTableInstance } from "@/components/ProTable/interface"; | |||
import userForm from "@/views/monitor/live/components/userForm.vue"; | |||
// 获取 ProTable 元素,调用其获取刷新数据方法(还能获取到当前查询参数,方便导出携带参数) | |||
const proTable = ref<ProTableInstance>(); | |||
const majorOptions = ref<any>([]) | |||
@@ -127,9 +127,6 @@ const columns: ColumnProps<SysUserPersonnel.ClassPage>[] = [ | |||
// 班级表单引用 | |||
const formRefC = ref<InstanceType<typeof FormClass> | null>(null); | |||
// 班级表单引用 | |||
const formRefT = ref<InstanceType<typeof FormTeacher> | null>(null); | |||
/** | |||
* 打开班级表单 | |||
@@ -184,20 +181,30 @@ function commander(row: SysUserPersonnel.ClassPage, commander: cmdEnumTree): Com | |||
async function handleCommandTree(commander: CommandTree) { | |||
switch (commander.commander) { | |||
case cmdEnumTree.AddTeacher: | |||
formRefT.value?.onOpen({ opt: commander.commander, record: commander.row, successful: RefreshTable }); | |||
pushPerson(cmdEnumTree.AddTeacher, commander.row) | |||
break | |||
case cmdEnumTree.UpdateTeacher: | |||
formRefT.value?.onOpen({ opt: commander.commander, record: commander.row, successful: RefreshTable }); | |||
pushPerson(cmdEnumTree.UpdateTeacher, commander.row) | |||
break; | |||
case cmdEnumTree.DeleteTeacher: | |||
// 二次确认 => 请求api => 刷新表格 | |||
await useHandleData(userManageTeacherApi.delete, {id: commander.row.userId}, '解绑教师'); | |||
await useHandleData(userManageTeacherApi.delete, {id: commander.row.teacherId}, '解绑教师'); | |||
RefreshTable(); //刷新表格 | |||
break; | |||
} | |||
} | |||
// 人员选择 | |||
// 表单引用 | |||
const userFormRef = ref<InstanceType<typeof userForm> | null>(null); | |||
/** | |||
* 打开表单 | |||
* @param opt 操作类型 | |||
* @param record 记录 | |||
*/ | |||
function pushPerson(opt: cmdEnumTree, record: {}) { | |||
userFormRef.value?.onOpen({ opt: opt, record: record, successful: RefreshTable }); | |||
} | |||
onMounted(() => { | |||
// 获取专业下拉数据 | |||
getMajorList(); | |||
@@ -107,7 +107,13 @@ | |||
<div class="situation attendanceStatus"> | |||
<div class="top"> | |||
<span class="title">出勤情况分析</span> | |||
<s-select v-model="state.attendanceTime" :options="state.options" style="width: 100px" @change="getStuAttendance"></s-select> | |||
<s-select | |||
v-model="state.attendanceTime" | |||
:clearable="false" | |||
:options="state.options" | |||
style="width: 100px" | |||
@change="getStuAttendance" | |||
></s-select> | |||
</div> | |||
<div class="contentBox"> | |||
<div class="tip"> | |||
@@ -123,7 +129,13 @@ | |||
<div class="situation schoolStatus"> | |||
<div class="top"> | |||
<span class="title">出校访学情况</span> | |||
<s-select v-model="state.leavesSchTime" :options="state.options" style="width: 100px" @change="getStuLeave"></s-select> | |||
<s-select | |||
v-model="state.leavesSchTime" | |||
:clearable="false" | |||
:options="state.options" | |||
style="width: 100px" | |||
@change="getStuLeave" | |||
></s-select> | |||
</div> | |||
<div class="contentBox"> | |||
<div class="tip"> | |||
@@ -168,7 +180,13 @@ | |||
<div class="situation attendanceStatus"> | |||
<div class="top"> | |||
<span class="title">图书馆使用情况</span> | |||
<s-select v-model="state.libraryTime" :options="state.options" style="width: 100px" @change="getStuLibrary"></s-select> | |||
<s-select | |||
v-model="state.libraryTime" | |||
:clearable="false" | |||
:options="state.options" | |||
style="width: 100px" | |||
@change="getStuLibrary" | |||
></s-select> | |||
</div> | |||
<div class="contentBox"> | |||
<div class="tip"> | |||
@@ -188,7 +206,13 @@ | |||
<div class="situation attendanceStatus"> | |||
<div class="top"> | |||
<span class="title">一卡通消费情况</span> | |||
<s-select v-model="state.oneCardTime" :options="state.options" style="width: 100px" @change="getOneCardSolution"></s-select> | |||
<s-select | |||
v-model="state.oneCardTime" | |||
:clearable="false" | |||
:options="state.options" | |||
style="width: 100px" | |||
@change="getOneCardSolution" | |||
></s-select> | |||
</div> | |||
<div class="contentBox"> | |||
<div class="tip"> | |||