下拉列表框 名称帅选

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,25 +1,10 @@
<template>
<a-select
:getPopupContainer="
(triggerNode) => {
<a-select :getPopupContainer="(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="managerArray"
:placeholder="placeholder"
: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%"
>
" v-model:value="managerArray" :placeholder="placeholder" :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>
<a-spin size="small" />
</template>
@@ -76,14 +61,15 @@ const getOutTeacher = () => {
}
})
}
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.supplier + ')',
value: e.name,
...e,
audienceList: null
})))
})
))
watch(props, init)
@@ -132,6 +118,13 @@ function change(e, l) {
isOpen.value = false
Array.isArray(l) && (selectOptions.value = 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:value', l?.value)
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"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch>
</a-input> -->
<a-input style="width: 235px; height: 40px; border-radius: 8px" placeholder="请输入姓名进行检索" showSearch
allowClear v-model:value="searchParam.name"
v-on:keydown.enter="enterPressHadlerSearch"></a-input>
<a-input style="width: 235px; height: 40px; border-radius: 8px" placeholder="请输入姓名进行检索" showSearch allowClear
v-model:value="searchParam.name" v-on:keydown.enter="enterPressHadlerSearch"></a-input>
</a-form-item>
<a-form-item class="select">
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.supplier" placeholder="请输入供应商" :options="supperList" allowClear
v-on:keydown.enter="enterPressHadlerSearch" showSearch >
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.supplier" placeholder="请输入供应商"
:options="supperList" allowClear v-on:keydown.enter="enterPressHadlerSearch" showSearch>
</a-select>
</a-form-item>
<a-form-item class="select">
<a-input v-model:value="searchParam.courseName" style="width: 235px; height: 40px; border-radius: 8px"
placeholder="请输入课程名称进行搜索" allowClear showSearch
v-on:keydown.enter="enterPressHadlerSearch">
placeholder="请输入课程名称进行搜索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-input>
</a-form-item>
<a-form-item class="select ">
<!-- <div class="select addTimeBox">
<div class="addTime">授课日期</div> -->
<a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间']
"
v-on:keydown.enter="enterPressHadlerSearch" />
<a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD" separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间']
" v-on:keydown.enter="enterPressHadlerSearch" />
<!-- </div> -->
</a-form-item>
<a-form-item class="select">
<a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型"
:options="entryTypeList" allowClear
v-on:keydown.enter="enterPressHadlerSearch">
:options="entryTypeList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<a-form-item class="select">
@@ -47,14 +43,12 @@
}" allow-clear :getPopupContainer="triggerNode => triggerNode.parentNode || document.body"
v-model:value="searchParam.courseTypeId" show-search
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类" tree-default-expand-all
:tree-data="sysTypeOptions"
v-on:keydown.enter="enterPressHadlerSearch">
:tree-data="sysTypeOptions" v-on:keydown.enter="enterPressHadlerSearch">
</a-tree-select>
</a-form-item>
<a-form-item class="select">
<a-select style="width: 200px" v-model:value="searchParam.courseStatus" placeholder="开课状态"
:options="AuthenticationStatusList" allowClear
v-on:keydown.enter="enterPressHadlerSearch">
:options="AuthenticationStatusList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<div style="display: flex; margin-bottom: 20px">
@@ -105,8 +99,10 @@
<template v-if="column.key === 'operation'">
<a-space>
<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 v-if="record.isSuperPermission==='true'&&checkMenu('lecturerRecordsDel')" type="link" @click="() => deleteModal(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 v-if="record.isSuperPermission === 'true' && checkMenu('lecturerRecordsDel')" type="link"
@click="() => deleteModal(record, String(record.courseform))">删除</a-button>
</a-space>
</template>
</template>
@@ -116,31 +112,20 @@
</div>
<div class="tableBox ">
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
:showSizeChanger="true"
:showQuickJumper="false"
:hideOnSinglePage="false"
:pageSize="searchParam.pageSize"
:current="searchParam.pageNo"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
<a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
:hideOnSinglePage="false" :pageSize="searchParam.pageSize" :current="searchParam.pageNo"
:total="tableDataTotal" class="pagination" @change="changePagination" />
<!-- :show-total="total => `共 ${total} 条数据`" -->
</div>
</div>
<!-- 弹窗组件 -->
<a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" placement="right" :maskClosable="false" :closable="false"
width="60%" :title="false">
<a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" placement="right" :maskClosable="false"
:closable="false" width="60%" :title="false">
<div style="padding:24px;">
<div class="headers" style="margin-top:-24px;">
<div class="headerTitle">{{ teacherdialogtitle }}</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog"
/>
<img style="width: 29px; height: 29px; cursor: pointer" src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog" />
</div>
<a-form :model="formParam" layout="vertical" ref="formRef">
<!--讲师名称 teacherName 内容分类 coursetypeid -->
@@ -149,17 +134,13 @@
<a-form-item name="teacherName">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
讲师名称
</template>
<ProjectManagerOutTeacher v-model:value="formParam.name"
v-model:name="formParam.teacherName"
placeholder="请输入工号/讲师姓名进行检索"
@onChange="managerChange"></ProjectManagerOutTeacher>
<!-- TODO GX01 -->
<ProjectManagerOutTeacher v-model:value="formParam.name" v-model:name="formParam.teacherName"
placeholder="请输入工号/讲师姓名进行检索" @onChange="managerChange"></ProjectManagerOutTeacher>
<!-- <a-input v-model:value="formParam.teacherName" allowClear showSearch class="draitem"
placeholder="请输入讲师姓名"></a-input> -->
@@ -168,11 +149,8 @@
<a-col :span="12">
<a-form-item name="courseTypeId">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
内容分类
</template>
<a-tree-select :fieldNames="{
@@ -181,9 +159,8 @@
value: 'code',
}" allow-clear :getPopupContainer="triggerNode => triggerNode.parentNode || document.body"
v-model:value="formParam.courseTypeId" show-search
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类" tree-default-expand-all
:tree-data="sysTypeOptions"
@change="treetype">
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类"
tree-default-expand-all :tree-data="sysTypeOptions" @change="treetype">
</a-tree-select>
</a-form-item>
</a-col>
@@ -193,14 +170,12 @@
<a-col :span="12">
<a-form-item name="courseName">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
课程名称
</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-form-item>
</a-col>
@@ -215,15 +190,12 @@
<a-col :span="12">
<a-form-item name="teachingDate">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
授课/课程日期 :
</template>
<a-date-picker class="draitem" v-model:value="teachingDate" style="width:100%" format="YYYY-MM-DD HH:mm" :show-time="{ format: 'HH:mm' }"
placeholder="请选择课程日期" />
<a-date-picker class="draitem" v-model:value="teachingDate" style="width:100%" format="YYYY-MM-DD HH:mm"
:show-time="{ format: 'HH:mm' }" placeholder="请选择课程日期" />
</a-form-item>
</a-col>
</a-row>
@@ -233,16 +205,12 @@
<a-col :span="12">
<a-form-item name="teaching">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
授课时长
</template>
<a-input v-model:value="formParam.teaching" style="width:100%; height: 40px; border-radius: 8px; "
placeholder="请输入授课时长" allowClear showSearch suffix="分钟"
:maxLength="8" @change="clearNonNumber">
placeholder="请输入授课时长" allowClear showSearch suffix="分钟" :maxLength="8" @change="clearNonNumber">
</a-input>
<!-- <span style="margin-left: 5px ;" v-if="formParam.teaching != null">{{ (formParam.teaching / 60
).toFixed(2) }}小时</span>
@@ -252,15 +220,12 @@
<a-col :span="12">
<a-form-item name="studys">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
参训人数
</template>
<a-input v-model:value="formParam.studys" class="draitem" placeholder="请输入参训人数" allowClear showSearch :maxLength="8"
@blur="clearstudysNumber">
<a-input v-model:value="formParam.studys" class="draitem" placeholder="请输入参训人数" allowClear showSearch
:maxLength="8" @blur="clearstudysNumber">
</a-input>
</a-form-item>
</a-col>
@@ -271,17 +236,14 @@
<a-col :span="12">
<a-form-item name="score">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
评分
</template>
<!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch>
</a-input> -->
<a-input-number @blur="blurScore" @focus="focusScore" v-model:value="formParam.score" :precision="2" :min="1" :max="100"
style="width:100%; height: 40px; border-radius: 8px ; " placeholder="请输入评分" />
<a-input-number @blur="blurScore" @focus="focusScore" v-model:value="formParam.score" :precision="2"
:min="1" :max="100" style="width:100%; height: 40px; border-radius: 8px ; " placeholder="请输入评分" />
</a-form-item>
</a-col>
</a-row>
@@ -289,8 +251,7 @@
<a-row :gutter="16">
<a-col :span="24">
<a-form-item label="备注">
<a-textarea v-model:value="formParam.remark" showCount :maxlength="200"
@blur="sendRemark"
<a-textarea v-model:value="formParam.remark" showCount :maxlength="200" @blur="sendRemark"
style="width: 100%; height: 100px; border-radius: 8px" placeholder="请输入" />
</a-form-item>
</a-col>
@@ -314,21 +275,20 @@
</div>
</a-drawer>
<!-- 查看授课记录 -->
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" placement="right" :maskClosable="true" :closable="false"
width="60%" :title="false">
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" placement="right" :maskClosable="true"
:closable="false" width="60%" :title="false">
<div style="padding:24px;">
<div class="headers" style="margin-top:-24px;">
<div class="headerTitle">查看讲师授课记录</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="@/assets/images/basicinfo/close.png"
@click="cancelTeachingDialog"
/>
<img style="width: 29px; height: 29px; cursor: pointer" src="@/assets/images/basicinfo/close.png"
@click="cancelTeachingDialog" />
</div>
<a-descriptions bordered :column="2" :contentStyle="rowCenter" :labelStyle="{ 'width': '160px' }">
<a-descriptions-item label="讲师名称">{{ formParam.teacherName || '-' }}</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 label="课程名称">{{ formParam.courseName || '-' }}</a-descriptions-item>
<a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1
@@ -341,7 +301,8 @@
<span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60
).toFixed(2) }}小时)</span>
</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="评分 ">{{
formParam.score ? Number(formParam.score).toFixed(0) == 0 ? '-' : Number(formParam.score).toFixed(2) +'分':'-'}}</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>
@@ -389,7 +350,8 @@
</a-modal>
</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>
</template>
<script lang="jsx">
@@ -456,6 +418,7 @@ export default {
teachingDate: undefined, //选择时间
tableDataTotal: -1,//table列表总条数
formParam: {
name: null,
courseStatus: '1',
createFrom: 1,
teaching: null,
@@ -503,6 +466,20 @@ export default {
//获取内容分类
const sysTypeOptions = computed(() => store.state.content_type);
//TODO GX01
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()
}
@@ -983,10 +960,10 @@ export default {
}
//回车
const enterPressHadlerSearch = e => {
    if (e.keyCode === 13) {
      searchSubmit()
if (e.keyCode === 13) {
searchSubmit()
    }
}
};
const sendName = () => {
state.formParam.courseName = state.formParam.courseName.replace(/\s/g, '');
@@ -1054,6 +1031,7 @@ const sendName=()=>{
.select .ant-picker {
width: 410px !important;
}
.headers {
height: 73px;
border-bottom: 1px solid #e8e8e8;
@@ -1072,6 +1050,7 @@ const sendName=()=>{
// margin-left: 24px;
}
}
.addTimeBox {
position: relative;
display: flex;
@@ -1343,6 +1322,7 @@ const sendName=()=>{
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 15px;
height: 16px;