Files
fe-manage/src/components/drawers/EvList.vue

460 lines
10 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div @click="openDrawer">
<slot></slot>
</div>
<a-drawer :visible="visible" class="drawerStyle addonlineDrawer" width="800" title="选择测评"
placement="right">
<div class="drawerMain">
<div class="header">
<div class="headerTitle">选择测评</div>
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"/>
</div>
<div class="contentMain">
<div class="main_items">
<div class="mi_ipts">
<div class="mii_ipt">
<div class="ipt_name"></div>
<div class="fi_input">
<a-input v-model:value="params.keyword" style="width: 424px; height: 40px; border-radius: 8px"
placeholder="请输入测评名称"/>
</div>
</div>
</div>
<div class="mi_btns">
<div class="btn btn1" @click="search">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btn btn2" @click="reset">
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
</div>
<div class="main_table">
<a-table
:customRow="customRow"
class="ant-table-striped"
:row-class-name="(_, index) => (index % 2 === 1 ? 'table-striped' : null)"
row-key="id"
:columns="columns"
:data-source="data"
:loading="loading"
:pagination="pagination"
:row-selection="rowSelection"
/>
</div>
</div>
<div class="main_btns">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="confirm">确定</button>
</div>
</div>
</a-drawer>
</template>
<script setup>
import {computed, defineEmits, defineProps, ref, watch} from "vue";
import {useBoeApiPage} from "@/api/request";
import {TEST_PAGE} from "@/api/ThirdApi";
import {message} from "ant-design-vue";
import {useStore} from "vuex";
const props = defineProps({
taskList: []
})
const visible = ref(false)
const emit = defineEmits({})
const columns = ref([
{
title: "测评编号",
width: "20%",
dataIndex: "quiz_code",
key: "code",
ellipsis: true,
},
{
title: "测评名称",
width: "20%",
dataIndex: "title",
key: "title",
align: "center",
ellipsis: true,
},
{
title: "备注",
width: "40%",
dataIndex: "theme_desc",
key: "content",
align: "center",
ellipsis: true,
},
{
title: "可答题人数",
width: "20%",
dataIndex: "quiz_range",
key: "time",
align: "center",
ellipsis: true,
},
])
const store = useStore();
const initParams = {
keyword: '',
page: 1,
size: 10,
user_id: store.state.userInfo.id
// orderAsc: true
}
const params = ref(initParams)
const rowSelectKeys = ref([]);
const selectsData = ref([]);
const taskIndex = ref(-1);
const {data, loading, total, fetch} = useBoeApiPage(TEST_PAGE, params.value, {
init: false,
result: res => {
let newArr = []
for(let i=0;i<res.result.data.length;i++){
res.result.data[i].id = res.result.data[i].quiz_kid;
newArr.push(res.result.data[i])
}
return newArr
},
totalPage: res => res.result.total_page_num,
total: res => res.result.count
})
console.log(data,222)
watch(taskIndex, () => {
if (taskIndex.value >= 0) {
rowSelectKeys.value = [props.taskList[taskIndex.value].courseId]
selectsData.value = data.value.find(t => t.id === props.taskList[taskIndex.value].courseId) || {}
}
})
const customRow = (record) => ({
onClick: () => {
rowSelectKeys.value = [record.id]
selectsData.value = [record]
}
})
const pagination = computed(() => ({
total: total.value,
showSizeChanger: false,
current: params.value.pageIndex,
pageSize: params.value.pageSize,
onChange: changePagination,
}));
const changePagination = (e) => {
params.value.pageIndex = e;
fetch()
};
const rowSelection = computed(() => ({
type: 'radio',
columnWidth: 20,
selectedRowKeys: rowSelectKeys.value,
onChange: onSelectChange,
preserveSelectedRowKeys: true,
}));
function onSelectChange(e, l) {
rowSelectKeys.value = e;
selectsData.value = l;
}
function search() {
params.value.pageIndex = 1
fetch()
}
function reset() {
rowSelectKeys.value = [];
selectsData.value = [];
params.value.pageIndex = 1
params.value.keyWord = ''
fetch()
}
const closeDrawer = () => {
visible.value = false
taskIndex.value = -1
reset()
};
function confirm() {
if (!selectsData.value.length || !rowSelectKeys.value.length) {
message.warning("请选择测评");
return
}
if (taskIndex.value === -1) {
let list = props.taskList
console.log(props,222,list);
if(list!=undefined){
list.push({
name: selectsData.value[0].title,
type: 3,
courseId: selectsData.value[0].id,
info: selectsData.value[0]
})
}
} else {
const data = props.taskList[taskIndex.value]
data.name = selectsData.value[0].title
data.courseId = selectsData.value[0].id
data.info = selectsData.value[0]
}
if(props.taskList!=undefined){
emit('update:taskList', [...props.taskList])
}
closeDrawer()
}
function openDrawer(i) {
(i >= 0) && (taskIndex.value = i)
visible.value = true
}
defineExpose({openDrawer})
</script>
<style lang="scss">
.ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important;
}
.addonlineDrawer {
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
}
}
.contentMain {
padding-right: 12px;
.main_items {
display: flex;
margin-bottom: 12px;
flex-wrap: wrap;
.mi_ipts {
display: flex;
margin-bottom: 20px;
.mii_ipt {
display: flex;
align-items: center;
margin-right: 24px;
.ipt_name {
white-space: nowrap;
}
}
}
.mi_btns {
display: flex;
cursor: pointer;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-left: 14px;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background: rgb(64, 158, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: rgb(255, 255, 255);
}
}
.btn2 {
background: rgb(255, 255, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/reset1.png");
}
.btnText {
color: rgb(64, 158, 255);
}
}
.btn1:hover {
background: rgb(255, 255, 255);
.search {
background-image: url("@/assets/images/courseManage/search1.png");
}
.btnText {
color: #4ea6ff;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("@/assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.main_notice {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 32px;
height: 40px;
background-color: #e9f6fe;
.mntc_left {
display: flex;
align-items: center;
.notice_icon {
width: 14px;
height: 14px;
margin-right: 9px;
margin-left: 9px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
}
}
.mntc_right {
cursor: pointer;
}
}
.main_table {
position: relative;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
}
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 5px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > td {
background: #f6f9fd;
}
.pa {
left: 0;
width: 100%;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
}
}
}
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
}
</style>