下拉列表框 名称帅选

This commit is contained in:
gengxin
2025-02-18 15:44:11 +08:00
parent c8d8bd0b59
commit 6afe5f9635
2 changed files with 194 additions and 221 deletions

View File

@@ -1,33 +1,18 @@
<template> <template>
<a-select <a-select :getPopupContainer="(triggerNode) => {
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="managerArray" :placeholder="placeholder" :filterOption="false"
v-model:value="managerArray" :options="isOpen ? options : selectOptions" allowClear showSearch :disabled="disabled" @popupScroll="memberScroll"
:placeholder="placeholder" @search="searchMember" :open="isOpen" @change="change" @blur="blur" :show-arrow="false" style="width: 100%">
:filterOption="false"
:options="isOpen?options:selectOptions"
allowClear
showSearch
:disabled="disabled"
@popupScroll="memberScroll"
@search="searchMember"
:open="isOpen"
@change="change"
@blur="blur"
:show-arrow="false"
style="width: 100%"
>
<template v-if="loading" #notFoundContent> <template v-if="loading" #notFoundContent>
<a-spin size="small"/> <a-spin size="small" />
</template> </template>
</a-select> </a-select>
</template> </template>
<script setup> <script setup>
import {computed, defineEmits, defineProps, onMounted, ref, watch} from "vue"; import { computed, defineEmits, defineProps, onMounted, ref, watch } from "vue";
import {useThrottlePage} from "@/api/request"; import { useThrottlePage } from "@/api/request";
import { getTeacherList } from "@/api/Lecturer"; import { getTeacherList } from "@/api/Lecturer";
const props = defineProps({ const props = defineProps({
value: { value: {
@@ -59,31 +44,32 @@ const emit = defineEmits({})
const isOpen = ref(false) const isOpen = ref(false)
function debounce(func, wait) { function debounce(func, wait) {
let timeout; let timeout;
return function(...args) { return function (...args) {
clearTimeout(timeout); clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), wait); timeout = setTimeout(() => func.apply(this, args), wait);
}; };
} }
const memberParam = ref({name: '', pageNo:1, pageSize: 999,teacherType:2 ,status:1}) const memberParam = ref({ name: '', pageNo: 1, pageSize: 999, teacherType: 2, status: 1 })
const userList = ref([]) const userList = ref([])
const loading = ref(false) const loading = ref(false)
const getOutTeacher = () => { const getOutTeacher = () => {
getTeacherList(memberParam.value).then(res=>{ getTeacherList(memberParam.value).then(res => {
if(res.data.code == 200){ if (res.data.code == 200) {
userList.value = res.data.data.records userList.value = res.data.data.records
loading.value = false loading.value = false
} }
}) })
} }
const options = computed(() => userList.value.map(e => ({ const options = computed(() =>
userList.value.map(e => ({
// label: e.name + '(' + e.userNo + ')' + e.organizationName, // label: e.name + '(' + e.userNo + ')' + e.organizationName,
label:e.name+ '(' +e.supplier + ')', label: e.name + '(' + e.supplier + ')',
value: e.name, value: e.name,
...e, ...e,
audienceList: null audienceList: null
}))) })
))
watch(props, init) watch(props, init)
@@ -101,10 +87,10 @@ onMounted(() => {
}) })
const memberScroll = ({target: {scrollHeight, scrollTop, clientHeight}}) => { const memberScroll = ({ target: { scrollHeight, scrollTop, clientHeight } }) => {
scrollHeight === (clientHeight + scrollTop) && memberParam.value.pageNo++ scrollHeight === (clientHeight + scrollTop) && memberParam.value.pageNo++
}; };
const debounceObject = debounce(getOutTeacher,1000) const debounceObject = debounce(getOutTeacher, 1000)
//搜索学员 //搜索学员
const searchMember = (keyword) => { const searchMember = (keyword) => {
console.log('searchMember', keyword) console.log('searchMember', keyword)
@@ -112,7 +98,7 @@ const searchMember = (keyword) => {
isOpen.value = true isOpen.value = true
userList.value = [] userList.value = []
memberParam.value.pageNo = 1 memberParam.value.pageNo = 1
memberParam.value.teacherType=2 memberParam.value.teacherType = 2
memberParam.value.name = keyword memberParam.value.name = keyword
console.log('searchMember', memberParam.value) console.log('searchMember', memberParam.value)
debounceObject() debounceObject()
@@ -122,16 +108,23 @@ function blur() {
isOpen.value = false isOpen.value = false
memberParam.value.name = '' memberParam.value.name = ''
memberParam.value.pageNo = 1 memberParam.value.pageNo = 1
memberParam.value.teacherType=2 memberParam.value.teacherType = 2
} }
function change(e, l) { function change(e, l) {
memberParam.value.name = '' memberParam.value.name = ''
memberParam.value.teacherType=2 memberParam.value.teacherType = 2
memberParam.value.pageNo = 1 memberParam.value.pageNo = 1
isOpen.value = false isOpen.value = false
Array.isArray(l) && (selectOptions.value = l) Array.isArray(l) && (selectOptions.value = l)
Array.isArray(selectOptions.value) && emit('onChange', e, l) Array.isArray(selectOptions.value) && emit('onChange', e, l)
selectOptions.value.map(e => ({
// label: e.name + '(' + e.userNo + ')' + e.organizationName,
label: e.name + '(' + e.supplier + ')',
value: e.name,
...e,
audienceList: null
}));
emit('update:name', l?.label) emit('update:name', l?.label)
emit('update:value', l?.value) emit('update:value', l?.value)
emit('update:mobile', l?.label) emit('update:mobile', l?.label)

View File

@@ -9,34 +9,30 @@
<!-- <a-input v-model:value="searchParam.userNo" style="width: 276px; height: 40px; border-radius: 8px" <!-- <a-input v-model:value="searchParam.userNo" style="width: 276px; height: 40px; border-radius: 8px"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch> placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch>
</a-input> --> </a-input> -->
<a-input style="width: 235px; height: 40px; border-radius: 8px" placeholder="请输入姓名进行检索" showSearch <a-input style="width: 235px; height: 40px; border-radius: 8px" placeholder="请输入姓名进行检索" showSearch allowClear
allowClear v-model:value="searchParam.name" v-model:value="searchParam.name" v-on:keydown.enter="enterPressHadlerSearch"></a-input>
v-on:keydown.enter="enterPressHadlerSearch"></a-input>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.supplier" placeholder="请输入供应商" :options="supperList" allowClear <a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.supplier" placeholder="请输入供应商"
v-on:keydown.enter="enterPressHadlerSearch" showSearch > :options="supperList" allowClear v-on:keydown.enter="enterPressHadlerSearch" showSearch>
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-input v-model:value="searchParam.courseName" style="width: 235px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.courseName" style="width: 235px; height: 40px; border-radius: 8px"
placeholder="请输入课程名称进行搜索" allowClear showSearch placeholder="请输入课程名称进行搜索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
v-on:keydown.enter="enterPressHadlerSearch">
</a-input> </a-input>
</a-form-item> </a-form-item>
<a-form-item class="select "> <a-form-item class="select ">
<!-- <div class="select addTimeBox"> <!-- <div class="select addTimeBox">
<div class="addTime">授课日期</div> --> <div class="addTime">授课日期</div> -->
<a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" <a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD"
separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间'] valueFormat="YYYY-MM-DD" separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间']
" " v-on:keydown.enter="enterPressHadlerSearch" />
v-on:keydown.enter="enterPressHadlerSearch" />
<!-- </div> --> <!-- </div> -->
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型" <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型"
:options="entryTypeList" allowClear :options="entryTypeList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
@@ -47,14 +43,12 @@
}" allow-clear :getPopupContainer="triggerNode => triggerNode.parentNode || document.body" }" allow-clear :getPopupContainer="triggerNode => triggerNode.parentNode || document.body"
v-model:value="searchParam.courseTypeId" show-search v-model:value="searchParam.courseTypeId" show-search
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类" tree-default-expand-all :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类" tree-default-expand-all
:tree-data="sysTypeOptions" :tree-data="sysTypeOptions" v-on:keydown.enter="enterPressHadlerSearch">
v-on:keydown.enter="enterPressHadlerSearch">
</a-tree-select> </a-tree-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 200px" v-model:value="searchParam.courseStatus" placeholder="开课状态" <a-select style="width: 200px" v-model:value="searchParam.courseStatus" placeholder="开课状态"
:options="AuthenticationStatusList" allowClear :options="AuthenticationStatusList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
@@ -105,8 +99,10 @@
<template v-if="column.key === 'operation'"> <template v-if="column.key === 'operation'">
<a-space> <a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button> <a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button type="link" @click="() => handleModify(record, String(record.courseform))" v-if="record.createFrom == 1&&checkMenu('lecturerRecordsEdit')">编辑</a-button> <a-button type="link" @click="() => handleModify(record, String(record.courseform))"
<a-button v-if="record.isSuperPermission==='true'&&checkMenu('lecturerRecordsDel')" type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> v-if="record.createFrom == 1 && checkMenu('lecturerRecordsEdit')">编辑</a-button>
<a-button v-if="record.isSuperPermission === 'true' && checkMenu('lecturerRecordsDel')" type="link"
@click="() => deleteModal(record, String(record.courseform))">删除</a-button>
</a-space> </a-space>
</template> </template>
</template> </template>
@@ -116,31 +112,20 @@
</div> </div>
<div class="tableBox "> <div class="tableBox ">
<div class="pa"> <div class="pa">
<a-pagination <a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
v-if="tableDataTotal > 10" :hideOnSinglePage="false" :pageSize="searchParam.pageSize" :current="searchParam.pageNo"
:showSizeChanger="true" :total="tableDataTotal" class="pagination" @change="changePagination" />
:showQuickJumper="false"
:hideOnSinglePage="false"
:pageSize="searchParam.pageSize"
:current="searchParam.pageNo"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
<!-- :show-total="total => `共 ${total} 条数据`" --> <!-- :show-total="total => `共 ${total} 条数据`" -->
</div> </div>
</div> </div>
<!-- 弹窗组件 --> <!-- 弹窗组件 -->
<a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" placement="right" :maskClosable="false" :closable="false" <a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" placement="right" :maskClosable="false"
width="60%" :title="false"> :closable="false" width="60%" :title="false">
<div style="padding:24px;"> <div style="padding:24px;">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;">
<div class="headerTitle">{{ teacherdialogtitle }}</div> <div class="headerTitle">{{ teacherdialogtitle }}</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="@/assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="cancelTeacherDialog" />
src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog"
/>
</div> </div>
<a-form :model="formParam" layout="vertical" ref="formRef"> <a-form :model="formParam" layout="vertical" ref="formRef">
<!--讲师名称 teacherName 内容分类 coursetypeid --> <!--讲师名称 teacherName 内容分类 coursetypeid -->
@@ -149,17 +134,13 @@
<a-form-item name="teacherName"> <a-form-item name="teacherName">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师名称 讲师名称
</template> </template>
<ProjectManagerOutTeacher v-model:value="formParam.name" <!-- TODO GX01 -->
v-model:name="formParam.teacherName" <ProjectManagerOutTeacher v-model:value="formParam.name" v-model:name="formParam.teacherName"
placeholder="请输入工号/讲师姓名进行检索" placeholder="请输入工号/讲师姓名进行检索" @onChange="managerChange"></ProjectManagerOutTeacher>
@onChange="managerChange"></ProjectManagerOutTeacher>
<!-- <a-input v-model:value="formParam.teacherName" allowClear showSearch class="draitem" <!-- <a-input v-model:value="formParam.teacherName" allowClear showSearch class="draitem"
placeholder="请输入讲师姓名"></a-input> --> placeholder="请输入讲师姓名"></a-input> -->
@@ -168,11 +149,8 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="courseTypeId"> <a-form-item name="courseTypeId">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
内容分类 内容分类
</template> </template>
<a-tree-select :fieldNames="{ <a-tree-select :fieldNames="{
@@ -181,9 +159,8 @@
value: 'code', value: 'code',
}" allow-clear :getPopupContainer="triggerNode => triggerNode.parentNode || document.body" }" allow-clear :getPopupContainer="triggerNode => triggerNode.parentNode || document.body"
v-model:value="formParam.courseTypeId" show-search v-model:value="formParam.courseTypeId" show-search
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类" tree-default-expand-all :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类"
:tree-data="sysTypeOptions" tree-default-expand-all :tree-data="sysTypeOptions" @change="treetype">
@change="treetype">
</a-tree-select> </a-tree-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -193,14 +170,12 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="courseName"> <a-form-item name="courseName">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
课程名称 课程名称
</template> </template>
<a-input class="draitem" v-model:value="formParam.courseName" :maxlength="20" showCount placeholder="请输入课程名称" @blur="sendName" allowClear showSearch> <a-input class="draitem" v-model:value="formParam.courseName" :maxlength="20" showCount
placeholder="请输入课程名称" @blur="sendName" allowClear showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -215,15 +190,12 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="teachingDate"> <a-form-item name="teachingDate">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
授课/课程日期 : 授课/课程日期 :
</template> </template>
<a-date-picker class="draitem" v-model:value="teachingDate" style="width:100%" format="YYYY-MM-DD HH:mm" :show-time="{ format: 'HH:mm' }" <a-date-picker class="draitem" v-model:value="teachingDate" style="width:100%" format="YYYY-MM-DD HH:mm"
placeholder="请选择课程日期" /> :show-time="{ format: 'HH:mm' }" placeholder="请选择课程日期" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -233,16 +205,12 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="teaching"> <a-form-item name="teaching">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
授课时长 授课时长
</template> </template>
<a-input v-model:value="formParam.teaching" style="width:100%; height: 40px; border-radius: 8px; " <a-input v-model:value="formParam.teaching" style="width:100%; height: 40px; border-radius: 8px; "
placeholder="请输入授课时长" allowClear showSearch suffix="分钟" placeholder="请输入授课时长" allowClear showSearch suffix="分钟" :maxLength="8" @change="clearNonNumber">
:maxLength="8" @change="clearNonNumber">
</a-input> </a-input>
<!-- <span style="margin-left: 5px ;" v-if="formParam.teaching != null">{{ (formParam.teaching / 60 <!-- <span style="margin-left: 5px ;" v-if="formParam.teaching != null">{{ (formParam.teaching / 60
).toFixed(2) }}小时</span> ).toFixed(2) }}小时</span>
@@ -252,15 +220,12 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="studys"> <a-form-item name="studys">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
参训人数 参训人数
</template> </template>
<a-input v-model:value="formParam.studys" class="draitem" placeholder="请输入参训人数" allowClear showSearch :maxLength="8" <a-input v-model:value="formParam.studys" class="draitem" placeholder="请输入参训人数" allowClear showSearch
@blur="clearstudysNumber"> :maxLength="8" @blur="clearstudysNumber">
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -271,17 +236,14 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="score"> <a-form-item name="score">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
评分 评分
</template> </template>
<!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch> <!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch>
</a-input> --> </a-input> -->
<a-input-number @blur="blurScore" @focus="focusScore" v-model:value="formParam.score" :precision="2" :min="1" :max="100" <a-input-number @blur="blurScore" @focus="focusScore" v-model:value="formParam.score" :precision="2"
style="width:100%; height: 40px; border-radius: 8px ; " placeholder="请输入评分" /> :min="1" :max="100" style="width:100%; height: 40px; border-radius: 8px ; " placeholder="请输入评分" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -289,8 +251,7 @@
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :span="24"> <a-col :span="24">
<a-form-item label="备注"> <a-form-item label="备注">
<a-textarea v-model:value="formParam.remark" showCount :maxlength="200" <a-textarea v-model:value="formParam.remark" showCount :maxlength="200" @blur="sendRemark"
@blur="sendRemark"
style="width: 100%; height: 100px; border-radius: 8px" placeholder="请输入" /> style="width: 100%; height: 100px; border-radius: 8px" placeholder="请输入" />
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -314,36 +275,36 @@
</div> </div>
</a-drawer> </a-drawer>
<!-- 查看授课记录 --> <!-- 查看授课记录 -->
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" placement="right" :maskClosable="true" :closable="false" <a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" placement="right" :maskClosable="true"
width="60%" :title="false"> :closable="false" width="60%" :title="false">
<div style="padding:24px;"> <div style="padding:24px;">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;">
<div class="headerTitle">查看讲师授课记录</div> <div class="headerTitle">查看讲师授课记录</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="@/assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="cancelTeachingDialog" />
src="@/assets/images/basicinfo/close.png"
@click="cancelTeachingDialog"
/>
</div> </div>
<a-descriptions bordered :column="2" :contentStyle="rowCenter" :labelStyle="{'width':'160px'}"> <a-descriptions bordered :column="2" :contentStyle="rowCenter" :labelStyle="{ 'width': '160px' }">
<a-descriptions-item label="讲师名称">{{ formParam.teacherName ||'-'}}</a-descriptions-item> <a-descriptions-item label="讲师名称">{{ formParam.teacherName || '-' }}</a-descriptions-item>
<a-descriptions-item label="手机号码">{{ formParam.mobile ||'-'}}</a-descriptions-item> <a-descriptions-item label="手机号码">{{ formParam.mobile || '-' }}</a-descriptions-item>
<a-descriptions-item label="课程类型">{{ formParam.type == 0 ? '在线课' : formParam.type == 1 ? '面授课' : formParam.type == 2 ? '手动录入' : '-' <a-descriptions-item label="课程类型">{{ formParam.type == 0 ? '在线课' : formParam.type == 1 ? '面授课' :
formParam.type ==
2 ? '手动录入' : '-'
}}</a-descriptions-item> }}</a-descriptions-item>
<a-descriptions-item label="课程名称">{{ formParam.courseName ||'-'}}</a-descriptions-item> <a-descriptions-item label="课程名称">{{ formParam.courseName || '-' }}</a-descriptions-item>
<a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1 <a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1
? '已开课' : '-' }}</a-descriptions-item> ? '已开课' : '-' }}</a-descriptions-item>
<a-descriptions-item label="内容分类 ">{{ formParam.courseTypeName ||'-'}}</a-descriptions-item> <a-descriptions-item label="内容分类 ">{{ formParam.courseTypeName || '-' }}</a-descriptions-item>
<a-descriptions-item label="授课/课程日期 ">{{ formParam.teachingDate ||'-' }} <a-descriptions-item label="授课/课程日期 ">{{ formParam.teachingDate || '-' }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="授课时长 "> <span > {{ formParam.teaching }} 分钟</span> <a-descriptions-item label="授课时长 "> <span> {{ formParam.teaching }} 分钟</span>
<span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60 <span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60
).toFixed(2) }}小时)</span> ).toFixed(2) }}小时)</span>
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="评分 ">{{ formParam.score?Number(formParam.score).toFixed(0)==0?'-':Number(formParam.score).toFixed(2)+'分':'-'}}</a-descriptions-item> <a-descriptions-item label="评分 ">{{
<a-descriptions-item label="参训人数 ">{{ formParam.studys ? formParam.studys+'' :'-'}}</a-descriptions-item> formParam.score ? Number(formParam.score).toFixed(0) == 0 ? '-' : Number(formParam.score).toFixed(2) +'':'-'}}</a-descriptions-item>
<a-descriptions-item label="备注 " :span="2">{{ formParam.remark ||'-' }}</a-descriptions-item> <a-descriptions-item label="参训人数 ">{{ formParam.studys ? formParam.studys + '人' : '-' }}</a-descriptions-item>
<a-descriptions-item label="备注 " :span="2">{{ formParam.remark || '-' }}</a-descriptions-item>
</a-descriptions> </a-descriptions>
<!-- <div :style="{ <!-- <div :style="{
position: 'absolute', position: 'absolute',
@@ -389,12 +350,13 @@
</a-modal> </a-modal>
</div> </div>
<!-- <div> <ImageUpload/> </div> --> <!-- <div> <ImageUpload/> </div> -->
<ImportWork v-model:showWork="showWork" :template="'外部讲师授课记录导入模版-20250115.xlsx'" :url="'/admin/export/importOutTeacherRecord'" :title="title"></ImportWork> <ImportWork v-model:showWork="showWork" :template="'外部讲师授课记录导入模版-20250115.xlsx'"
:url="'/admin/export/importOutTeacherRecord'" :title="title"></ImportWork>
</div> </div>
</template> </template>
<script lang="jsx"> <script lang="jsx">
import { reactive, toRefs, ref, computed,onMounted } from "vue"; import { reactive, toRefs, ref, computed, onMounted } from "vue";
import { useRouter ,useRoute} from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { import {
RightOutlined, RightOutlined,
@@ -408,7 +370,7 @@ import { message } from "ant-design-vue";
import ProjectManager from "@/components/project/ProjectManagerNew"; import ProjectManager from "@/components/project/ProjectManagerNew";
import ProjectManagerOutTeacher from "@/components/project/ProjectManagerOutTeacher"; import ProjectManagerOutTeacher from "@/components/project/ProjectManagerOutTeacher";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { getTeacherCourseList, updateInTeacherCourse, getNewInTeacherCourseList, deleteInTeacherCourse, insertInTeacherCourse,selectSupplier } from "../../api/Teaching"; import { getTeacherCourseList, updateInTeacherCourse, getNewInTeacherCourseList, deleteInTeacherCourse, insertInTeacherCourse, selectSupplier } from "../../api/Teaching";
// import {getProjSt} from "../../api/indexProjStu"; // import {getProjSt} from "../../api/indexProjStu";
import { checkMenu } from '@/utils/utils' import { checkMenu } from '@/utils/utils'
// import AddTeacher from "../../components/drawers/project/AddTeacher" // import AddTeacher from "../../components/drawers/project/AddTeacher"
@@ -427,7 +389,7 @@ export default {
setup() { setup() {
onMounted(() => { onMounted(() => {
const search = sessionStorage.getItem('searchExter') const search = sessionStorage.getItem('searchExter')
if(route.query.activeKey == 2&&search){ if (route.query.activeKey == 2 && search) {
state.searchParam = JSON.parse(search) state.searchParam = JSON.parse(search)
} }
searchSubmit() searchSubmit()
@@ -456,12 +418,13 @@ export default {
teachingDate: undefined, //选择时间 teachingDate: undefined, //选择时间
tableDataTotal: -1,//table列表总条数 tableDataTotal: -1,//table列表总条数
formParam: { formParam: {
name: null,
courseStatus: '1', courseStatus: '1',
createFrom: 1, createFrom: 1,
teaching: null, teaching: null,
teachingDate: null, teachingDate: null,
teacherId:null, teacherId: null,
mobile:null, mobile: null,
score: null score: null
}, },
searchdate: undefined, //选择时间 searchdate: undefined, //选择时间
@@ -503,8 +466,22 @@ export default {
//获取内容分类 //获取内容分类
const sysTypeOptions = computed(() => store.state.content_type); const sysTypeOptions = computed(() => store.state.content_type);
const treetype =(val,lab)=>{ //TODO GX01
state.formParam.courseTypeName =lab.toString() const FULL_NAME_SUPPLIER = computed(() => {
if(state.formParam.name){
let supplier = state.formParam.supplier == null ? state.formParam.supplier:"";
if(supplier){
return state.formParam.name;
}else{
return state.formParam.name + "/" + supplier;
}
}
return "";
});
const treetype = (val, lab) => {
state.formParam.courseTypeName = lab.toString()
} }
const OnTheJobStatusList = ref([ const OnTheJobStatusList = ref([
{ value: 1, label: "项目开课" }, { value: 1, label: "项目开课" },
@@ -512,13 +489,13 @@ export default {
{ value: 3, label: "面授开课" }, { value: 3, label: "面授开课" },
]) ])
const supperList = ref([]) const supperList = ref([])
const getSupplier = ()=>{ const getSupplier = () => {
selectSupplier().then(res=>{ selectSupplier().then(res => {
if(res.data.code == 200){ if (res.data.code == 200) {
supperList.value = res.data.data.map(item=>{ supperList.value = res.data.data.map(item => {
return { return {
value:item, value: item,
label:item label: item
} }
}) })
supperList.value.unshift({ supperList.value.unshift({
@@ -560,7 +537,7 @@ export default {
key: 'supplier', key: 'supplier',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 150, width: 150,
customRender: ({text})=> text||'-' customRender: ({ text }) => text || '-'
}, },
{ {
title: '课程名称 ', title: '课程名称 ',
@@ -586,13 +563,13 @@ export default {
customRender: (value) => { customRender: (value) => {
return ( return (
<div> <div>
{String(value.record.type) { String(value.record.type)
? { ? {
"0": "在线课", "0": "在线课",
"1": "面授课", "1": "面授课",
"2": "手动录入", "2": "手动录入",
}[value.record.type + ""] }[value.record.type + ""]
: "-"} : "-" }
</div> </div>
) )
} }
@@ -606,7 +583,7 @@ export default {
customRender: (value) => { customRender: (value) => {
return ( return (
<div> <div>
{value.record?.teachingDate?dayjs(value.record?.teachingDate).format("YYYY-MM-DD HH:mm"):'-'} { value.record?.teachingDate ? dayjs(value.record?.teachingDate).format("YYYY-MM-DD HH:mm") : '-' }
</div> </div>
); );
}, },
@@ -627,12 +604,12 @@ export default {
customRender: (value) => { customRender: (value) => {
return ( return (
<div> <div>
{value.record.courseStatus == 0 || value.record.courseStatus == 1 { value.record.courseStatus == 0 || value.record.courseStatus == 1
? { ? {
"0": "未开课", "0": "未开课",
"1": "已开课", "1": "已开课",
}[value.record.courseStatus + ""] || "" }[value.record.courseStatus + ""] || ""
: "-"} : "-" }
</div> </div>
) )
} }
@@ -666,7 +643,7 @@ export default {
customRender: (value) => { customRender: (value) => {
return ( return (
<div> <div>
{value.record?.teaching ? value.record.teaching + '分钟' : '-'} { value.record?.teaching ? value.record.teaching + '分钟' : '-' }
</div> </div>
); );
}, },
@@ -677,8 +654,8 @@ export default {
key: 'studys', key: 'studys',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
customRender: ({text})=>{ customRender: ({ text }) => {
return text ? text+'人' : '-' return text ? text + '人' : '-'
} }
}, },
{ {
@@ -690,7 +667,7 @@ export default {
customRender: (value) => { customRender: (value) => {
return ( return (
<div> <div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(2)+'分' : '-'} { value.record.score ? Number(value.record.score).toFixed(0) == 0 ? '-' : Number(value.record.score).toFixed(2) + '分' : '-' }
</div> </div>
) )
} }
@@ -704,12 +681,12 @@ export default {
customRender: (value) => { customRender: (value) => {
return ( return (
<div> <div>
{value.record.createFrom == "0" || value.record.createFrom == "1" { value.record.createFrom == "0" || value.record.createFrom == "1"
? { ? {
"0": "系统生成", "0": "系统生成",
"1": "手动录入", "1": "手动录入",
}[value.record.createFrom + ""] || "" }[value.record.createFrom + ""] || ""
: "-"} : "-" }
</div> </div>
) )
} }
@@ -802,7 +779,7 @@ export default {
cancel() cancel()
state.teacherdialog = true; state.teacherdialog = true;
state.teacherdialogtitle = '添加授课记录' state.teacherdialogtitle = '添加授课记录'
state.formParam.createFrom='1' state.formParam.createFrom = '1'
state.vf = true state.vf = true
} }
@@ -829,12 +806,12 @@ export default {
//保存 //保存
const createTeacherDialog = async () => { const createTeacherDialog = async () => {
state.formParam.teachingDate = state.teachingDate ? dayjs(state.teachingDate).format("YYYY-MM-DD HH:mm").toString() : "" state.formParam.teachingDate = state.teachingDate ? dayjs(state.teachingDate).format("YYYY-MM-DD HH:mm").toString() : ""
if(state.formParam.studys==0){ if (state.formParam.studys == 0) {
state.formParam.studys = null state.formParam.studys = null
} }
if(state.formParam.score||state.formParam.score==0){ if (state.formParam.score || state.formParam.score == 0) {
state.formParam.score = String(state.formParam.score) state.formParam.score = String(state.formParam.score)
}else{ } else {
state.formParam.score = null state.formParam.score = null
} }
state.formParam.courseStatus = String(state.formParam.courseStatus) state.formParam.courseStatus = String(state.formParam.courseStatus)
@@ -915,7 +892,7 @@ export default {
score: null, score: null,
remark: null, remark: null,
teachingDate: null, teachingDate: null,
teacherId:null teacherId: null
} }
state.teachingDate = null state.teachingDate = null
} }
@@ -946,8 +923,8 @@ export default {
const TeacherSystem = () => { const TeacherSystem = () => {
getTeacherCourseList({ id: state.lookTeacherId }).then((res) => { getTeacherCourseList({ id: state.lookTeacherId }).then((res) => {
state.formParam = res.data.data state.formParam = res.data.data
state.teachingDate = res.data.data.teachingDate ? dayjs(res.data.data.teachingDate, 'YYYY-MM-DD HH:mm'):'', state.teachingDate = res.data.data.teachingDate ? dayjs(res.data.data.teachingDate, 'YYYY-MM-DD HH:mm') : '',
state.formParam.name=state.formParam.teacherName state.formParam.name = state.formParam.teacherName
state.formParam.teachingDate = state.teachingDate ? dayjs(state.teachingDate).format("YYYY-MM-DD HH:mm").toString() : "" state.formParam.teachingDate = state.teachingDate ? dayjs(state.teachingDate).format("YYYY-MM-DD HH:mm").toString() : ""
state.formParam.courseStatus = String(state.formParam.courseStatus) state.formParam.courseStatus = String(state.formParam.courseStatus)
}) })
@@ -956,8 +933,8 @@ export default {
} }
function managerChange(e, l, d, t, orgName) { function managerChange(e, l, d, t, orgName) {
// console.log(e, l, d, t, orgName,'e, l, d, t, orgName'); // console.log(e, l, d, t, orgName,'e, l, d, t, orgName');
state.formParam.mobile=e?l.mobile:'' state.formParam.mobile = e ? l.mobile : ''
state.formParam.teacherId=e?l.id:'' state.formParam.teacherId = e ? l.id : ''
// state.searchParam.userNo = d; // state.searchParam.userNo = d;
// state.searchParam.name = t; // state.searchParam.name = t;
// state.searchParam.trainorgName=orgName // state.searchParam.trainorgName=orgName
@@ -972,7 +949,7 @@ export default {
//导出功能 //导出功能
const handleExport = () => { const handleExport = () => {
window.open( window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportOutTeacherRecord?recordType=2&name=${state.searchParam.name || ""}&courseName=${state.searchParam.courseName || ""}&createFrom=${state.searchParam.createFrom || ""}&beginTime=${state.searchParam.beginTime|| ""}&endTime=${state.searchParam.endTime || ""}&courseTypeId=${state.searchParam.courseTypeId || ""}&courseStatus=${state.searchParam.courseStatus || ""}&supplier=${state.searchParam.supplier || ""}` `${process.env.VUE_APP_BASE_API}/admin/export/exportOutTeacherRecord?recordType=2&name=${state.searchParam.name || ""}&courseName=${state.searchParam.courseName || ""}&createFrom=${state.searchParam.createFrom || ""}&beginTime=${state.searchParam.beginTime || ""}&endTime=${state.searchParam.endTime || ""}&courseTypeId=${state.searchParam.courseTypeId || ""}&courseStatus=${state.searchParam.courseStatus || ""}&supplier=${state.searchParam.supplier || ""}`
); );
} }
const clearstudysNumber = () => { const clearstudysNumber = () => {
@@ -982,13 +959,13 @@ export default {
state.formParam.score = state.formParam.score.replace(/\D/g, ''); state.formParam.score = state.formParam.score.replace(/\D/g, '');
} }
//回车 //回车
const enterPressHadlerSearch = e => { const enterPressHadlerSearch = e => {
    if (e.keyCode === 13) { if (e.keyCode === 13) {
      searchSubmit() searchSubmit()
    } }
}; };
const sendName=()=>{ const sendName = () => {
state.formParam.courseName = state.formParam.courseName.replace(/\s/g, ''); state.formParam.courseName = state.formParam.courseName.replace(/\s/g, '');
} }
const blurScore = () => { const blurScore = () => {
@@ -997,7 +974,7 @@ const sendName=()=>{
const focusScore = () => { const focusScore = () => {
// state.formParam.score == 0 && (state.formParam.score = null) // state.formParam.score == 0 && (state.formParam.score = null)
} }
const sendRemark=()=>{ const sendRemark = () => {
state.formParam.remark = state.formParam.remark.replace(/\s/g, ''); state.formParam.remark = state.formParam.remark.replace(/\s/g, '');
} }
return { return {
@@ -1050,10 +1027,11 @@ const sendName=()=>{
}, },
}; };
</script> </script>
<style lang="scss" scoped > <style lang="scss" scoped>
.select .ant-picker { .select .ant-picker {
width: 410px !important; width: 410px !important;
} }
.headers { .headers {
height: 73px; height: 73px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
@@ -1072,6 +1050,7 @@ const sendName=()=>{
// margin-left: 24px; // margin-left: 24px;
} }
} }
.addTimeBox { .addTimeBox {
position: relative; position: relative;
display: flex; display: flex;
@@ -1343,6 +1322,7 @@ const sendName=()=>{
margin-right: 14px; margin-right: 14px;
flex-shrink: 0; flex-shrink: 0;
cursor: pointer; cursor: pointer;
.search { .search {
width: 15px; width: 15px;
height: 16px; height: 16px;