-- 添加学员

This commit is contained in:
yuping
2022-12-17 17:40:47 +08:00
parent 9090261a8f
commit c1983082a5
11 changed files with 1558 additions and 1603 deletions

2
.env
View File

@@ -3,6 +3,8 @@ VUE_APP_BASE_API=/manageApi
VUE_APP_PROXY_URL=http://111.231.196.214:30001/
VUE_APP_LOGIN_URL=https://u-pre.boe.com/web
VUE_APP_BOE_API_URL=https://u-pre.boe.com
VUE_APP_IFRAME_URL=https://u-pre.boe.com/pc/iframe
VUE_APP_IFRAME_STUDENT_URL=https://u-pre.boe.com/pc/loading

View File

@@ -1,27 +1,27 @@
<template>
<div id="container" v-if="!isLogin">
<nav-top />
<nav-top/>
<div style="display: flex">
<nav-left />
<nav-left/>
<div style="flex: 1; display: flex; flex-direction: column; width: 0">
<open-pages />
<bread-crumb />
<open-pages/>
<bread-crumb/>
<main>
<a-config-provider :locale="zhCN">
<router-view />
<router-view/>
</a-config-provider>
</main>
</div>
</div>
</div>
<div id="container" v-if="isLogin">
<router-view />
<router-view/>
</div>
</template>
<script>
import { computed, defineComponent, ref } from "vue";
import { useRouter, useRoute } from "vue-router";
import { useStore } from "vuex";
import {computed, defineComponent, ref} from "vue";
import {useRouter, useRoute} from "vue-router";
import {useStore} from "vuex";
import NavLeft from "@/components/NavLeft";
import NavTop from "@/components/NavTop";
import OpenPages from "@/components/OpenPages";
@@ -78,7 +78,7 @@ export default defineComponent({
return;
}
const memberInitInfo = await api1
.getMemberInfo({ keyWord: "", pageNo: 1, pageSize: 10 })
.getMemberInfo({keyWord: "", pageNo: 1, pageSize: 10})
.then((res) => res.data.data.rows);
store.commit("SET_MEMBER_INFO", memberInitInfo);
localStorage.setItem("memberInitInfo", JSON.stringify(memberInitInfo));
@@ -94,13 +94,13 @@ export default defineComponent({
if (localStory) {
list = localStorage.getItem(key);
if (list) {
store.commit("SET_DICT", { key, data: JSON.parse(list) });
store.commit("SET_DICT", {key, data: JSON.parse(list)});
return;
}
}
list = await getDictList(key);
localStory && localStorage.setItem(key, JSON.stringify(list));
store.commit("SET_DICT", { key, data: list });
store.commit("SET_DICT", {key, data: list});
}
const getDictList = (param) =>
@@ -199,6 +199,34 @@ export default defineComponent({
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
}
.cus-btn {
width: 100%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
background: #4ea6ff;
cursor: pointer;
color: #fff;
}
.white {
background: #fff;
color: #4ea6ff;
}
.cus-input {
height: 40px;
border-radius: 8px;
}
.cus-select{
height: 40px;
border-radius: 8px;
}
// @media screen and (max-width: 1366px) {
// .cmMain {
// width: 750px;

View File

@@ -1,8 +1,4 @@
export const BASE = 'https://pre.boe.com'
export const BASE_DEV = 'https://u-pre.boe.com'
export const USER_LIST = '/userbasic/user/list post'
export const ORG_LIST = '/userbasic/org/list post'
export const ORG_CHILD_LIST = '/userbasic/org/info post'
export const AUDIENCE_LIST = '/userbasic/audience/list post'

View File

@@ -131,6 +131,8 @@ export const addStudentCourse = (obj) => http.post("/admin/offcourse/addStudent"
// 获取组织结构树
export const orgtree = () => http.get("/org/tree");
export const saveStu = obj => http.post("/admin/student/addStudent", obj);
export const getStuPage = obj => http.get("/admin/student/getStudent", {params: obj});
export const delStudentList = obj => http.post("/admin/student/delStudent", obj);
export const validateName = obj => http.post("/admin/validate/validateName", obj);
//获取积分列表

View File

@@ -122,7 +122,7 @@ export function useRequest(_url, params = {}, init = true) {
export async function request(_url, params) {
const s = _url.split(' ')
let url = s[0]
const method = s[1] || 'get'
const method = s[1]?.toLowerCase() || 'get'
if (method === 'get') {
let paramsArray = [];
//拼接参数

View File

@@ -1,187 +1,195 @@
<template>
<a-drawer
:visible="visiableState"
class="drawerStyle ProjCheckship"
placement="right"
width="45%"
>
<div class="drawerMain" id="ProjCheckship">
<div class="header">
<div class="headerTitle">
{{ {1: '查看权', 2: '管理权', 3: '添加学员'}[type] || '' }}
<div>
<a-drawer
:visible="visiable"
class="drawerStyle ProjCheckship"
placement="right"
width="45%"
>
<div class="drawerMain" id="ProjCheckship">
<div class="header">
<div class="headerTitle">
{{ {1: '添加学员', 2: '添加学员', 3: '添加学员'}[type] || '' }}
</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div style="width:100%;display: grid;grid-template-columns: 750px auto;">
<div class="tabs">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane :key="1" tab="快速选人">
<div :style="{ height: screenHeight - 235 + 'px' }">
<div class="tab1">
<a-form-item label="姓名">
<a-input
v-model:value="nameSearch.keyword"
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入姓名"
/>
<a-button type="primary" @click="onSearchStu" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetStu" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
<div style="width:100%;display: grid;grid-template-columns: 750px auto;">
<div class="tabs">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane :key="1" tab="快速选人">
<div :style="{ height: screenHeight - 235 + 'px' }">
<div class="tab1">
<a-form-item label="姓名">
<a-input
v-model:value="nameSearch.keyword"
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入姓名"
/>
<a-button type="primary" @click="onSearchStu" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetStu" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
</div>
<div class="chooseLeft" style="display: grid;grid-template-columns: 250px auto">
<div :style="{ height: screenHeight - 235 + 'px' ,overflowY:'auto'}">
<a-tree
allow-clear
tree-default-expand-all
:tree-data="treeData"
:fieldNames="{
children: 'treeChildList',
key: 'id',
title: 'name',
value: 'name',
}"
@select="stuStuOrgSelect"
>
</a-tree>
</div>
<div class="tableBox tabb">
<a-table
:columns="stuColumns"
:data-source="stuData"
:pagination="stuPagination"
:loading="stuLoading"
row-key="id"
:row-selection="stuRowSelection"
/>
</div>
</div>
</div>
<div class="chooseLeft" style="display: grid;grid-template-columns: 250px auto">
<div :style="{ height: screenHeight - 235 + 'px' ,overflowY:'auto'}">
</a-tab-pane>
<a-tab-pane :key="2" tab="添加组织">
<div
:style="{ height: screenHeight - 235 + 'px' }"
>
<div class="tab2">
<a-form-item label="组织:">
<a-input
v-model:value="searchOrgName.keyword"
style="width: 230px; height: 40px; border-radius: 8px"
placeholder="请输入组织"
/>
<a-button type="primary" @click="searchOrg" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetOrg" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
</div>
<div class="boeTree">
<a-tree
allow-clear
tree-default-expand-all
:tree-data="treeData"
:tree-data="searchOrgName.keyword ? orgData : treeData"
@select="onOrgSelectChange"
:fieldNames="{
children: 'treeChildList',
key: 'id',
title: 'name',
value: 'name',
}"
@select="stuStuOrgSelect"
row-key="id"
:row-selection="orgRowSelection"
multiple
>
</a-tree>
</div>
</div>
</a-tab-pane>
<a-tab-pane :key="3" tab="受众关联">
<div
:style="{ height: screenHeight - 235 + 'px' }"
>
<div>
<a-form-item label="受众名称:">
<a-input
v-model:value="audienceName.keyword"
style="width: 260px; height: 40px; border-radius: 8px"
placeholder="请输入受众名称"
/>
<a-button type="primary" @click="searchAudi" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetAudienceInfo" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
</div>
<div class="tableBox tabb">
<a-table
:columns="stuColumns"
:data-source="stuData"
:pagination="stuPagination"
:loading="stuLoading"
style="border: 1px solid #f2f6fe"
row-key="id"
:row-selection="stuRowSelection"
:columns="audiColums"
:data-source="audiData"
:loading="audiLoading"
:pagination="auditPagination"
:row-selection="auditRowSelection"
/>
</div>
</div>
</div>
</a-tab-pane>
<a-tab-pane :key="2" tab="添加组织">
<div
:style="{ height: screenHeight - 235 + 'px' }"
>
<div class="tab2">
<a-form-item label="组织:">
<a-input
v-model:value="searchOrgName.keyword"
style="width: 230px; height: 40px; border-radius: 8px"
placeholder="请输入组织"
/>
<a-button type="primary" @click="searchOrg" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetOrg" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
</div>
<div class="boeTree">
<a-tree
:tree-data="searchOrgName.keyword ? orgData : treeData"
@select="onOrgSelectChange"
:fieldNames="{
children: 'treeChildList',
key: 'id',
title: 'name',
value: 'name',
}"
row-key="id"
:row-selection="orgRowSelection"
multiple
>
</a-tree>
<!-- <div>-->
<!-- <a-table-->
<!-- :columns="stuColumns"-->
<!-- :data-source="stuData"-->
<!-- :pagination="stuPagination"-->
<!-- :loading="orgLoading"-->
<!-- row-key="id"-->
<!-- :row-selection="stuRowSelection"-->
<!-- />-->
<!-- </div>-->
</div>
</div>
</a-tab-pane>
<a-tab-pane :key="3" tab="受众关联">
<div
:style="{ height: screenHeight - 235 + 'px' }"
>
<div>
<a-form-item label="受众名称:">
<a-input
v-model:value="audienceName.keyword"
style="width: 260px; height: 40px; border-radius: 8px"
placeholder="请输入受众名称"
/>
<a-button type="primary" @click="searchAudi" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetAudienceInfo" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
</div>
<div class="tableBox tabb">
<a-table
style="border: 1px solid #f2f6fe"
row-key="id"
:columns="audiColums"
:data-source="audiData"
:loading="audiLoading"
:pagination="auditPagination"
:row-selection="auditRowSelection"
/>
</div>
</div>
</a-tab-pane>
</a-tabs>
</div>
<div style="padding:100px 0 0 20px;display: grid;grid-template-rows: auto auto auto;">
<div>
<div style="margin-top: 20px">快速选人</div>
<a-tag :closable="true" color="#4ea6ff" @close="stuDel(i)" v-for="(item,i) in selectsData.studentList"
:key="i" style="margin-top:20px">
{{ item.realName }}
</a-tag>
</a-tab-pane>
</a-tabs>
</div>
<div>
<div style="margin-top: 20px">组织添加</div>
<a-tag :closable="true" color="#4ea6ff" @close="orgDel(i)" v-for="(item,i) in selectsData.deptList" :key="i"
style="margin-top:20px">
{{ item.name }}
</a-tag>
</div>
<div>
<div style="margin-top: 20px">受众添加</div>
<a-tag :closable="true" color="#4ea6ff" @close="AuditDel(i)" v-for="(item,i) in selectsData.groupList"
:key="i" style="margin-top:20px">
{{ item.audienceName }}
</a-tag>
<div style="padding:100px 0 0 20px;display: grid;grid-template-rows: auto auto auto;">
<div>
<div style="margin-top: 20px">快速选人</div>
<a-tag :closable="true" color="#4ea6ff" @close="stuDel(i)" v-for="(item,i) in selectsData.studentList"
:key="i" style="margin-top:20px">
{{ item.realName }}
</a-tag>
</div>
<div>
<div style="margin-top: 20px">组织添加</div>
<a-tag :closable="true" color="#4ea6ff" @close="orgDel(i)" v-for="(item,i) in selectsData.deptList"
:key="i"
style="margin-top:20px">
{{ item.name }}
</a-tag>
</div>
<div>
<div style="margin-top: 20px">受众添加</div>
<a-tag :closable="true" color="#4ea6ff" @close="AuditDel(i)" v-for="(item,i) in selectsData.groupList"
:key="i" style="margin-top:20px">
{{ item.audienceName }}
</a-tag>
</div>
</div>
</div>
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="submitAuth">确定</button>
</div>
</div>
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="submitAuth">确定</button>
</div>
</a-drawer>
<div @click="openDrawer">
<slot></slot>
</div>
</a-drawer>
</div>
<a-modal v-model:visible="stageVisible" width="1000px" title="选择阶段" @ok="handleStageOk">
<div>
{{ type === 1 ? '选择阶段' : '选择关卡' }}
<a-select style="width: 150px" :placeholder="type===1?'选择阶段':'选择关卡'" v-model:value="selectsData.stageId"
className="cus-select">
<a-select-option v-for="(item,i) in stageIds" :key="i" :value="item.id">{{
item.name || '默认'
}}
</a-select-option>
</a-select>
</div>
</a-modal>
</template>
<script setup>
import {computed, defineEmits, defineProps, onMounted, ref} from "vue";
import {computed, defineEmits, defineProps, ref, watch} from "vue";
import {useStore} from "vuex";
import {useBoeApi, useBoeApiPage} from "@/api/request";
import {AUDIENCE_LIST, ORG_LIST, USER_LIST} from "@/api/ThirdApi";
@@ -191,16 +199,17 @@ const store = useStore();
const emit = defineEmits({})
const props = defineProps({
type: Number,
visiable: {
type: Boolean,
default: false
},
id: String,
stage: {
type: Array,
default: () => []
}
})
const visiableState = computed(() => props.visiable)
const visiable = ref(false)
const activeKey = ref(1)
const stageVisible = ref(false)
const selectsData = ref({
stageId: '',
studentList: [],
deptList: [],
groupList: []
@@ -222,6 +231,8 @@ const searchOrgName = ref({
pageSize: 10
})
const stageIds = computed(() => props.stage)
const {
data: stuData,
fetch: searchStu,
@@ -250,7 +261,7 @@ const {
total: audiTotal
} = useBoeApiPage(AUDIENCE_LIST, audienceName.value, {
init: true,
result: res => res.result.audienceList,
result: res => res.result.audienceList.map(e => ({...e, id: e.id + ''})),
totalPage: res => res.result.totalPage,
total: res => res.result.totalElement
})
@@ -367,11 +378,11 @@ const auditRowSelection = computed(() => ({
preserveSelectedRowKeys: true,
}))
onMounted(() => {
});
const closeDrawer = () => {
visiable.value = false
};
const openDrawer = () => {
visiable.value = true
};
//获取组织树
const treeData = computed(() => {
@@ -397,6 +408,7 @@ function AuditDel(i) {
auditSelectKeys.value = auditSelectKeys.value.filter(e => e !== selectsData.value.groupList[i].id)
selectsData.value.groupList.splice(i, 1)
}
//
// function orgSelect(key, obj) {
// console.log(obj)
@@ -432,8 +444,6 @@ const changePagination = (page) => {
};
const auditChangePagination = (page) => {
console.log(1111111111)
console.log(page)
audienceName.value.page = page;
searchAudi()
};
@@ -468,14 +478,50 @@ const resetAudienceInfo = () => {
// };
//确定添加授权
const submitAuth = () => {
emit('update:visiable', false)
saveStu(selectsData.value)
if (props.type !== 3) {
stageVisible.value = true
} else {
handleStageOk()
}
};
function handleStageOk() {
stageVisible.value = false
visiable.value = false
emit('finash', false)
saveStu({
targetId: props.id,
type: props.type,
deptIds: selectsData.value.deptList?.map(e => e.id),
stageId: selectsData.value.stageId,
groupIds: selectsData.value.groupList?.map(e => e.id),
studentList: selectsData.value.studentList
}).then(() => {
emit('finash', true)
})
}
watch(visiable, () => {
stuSelectKeys.value = []
orgSelectKeys.value = []
auditSelectKeys.value = []
selectsData.value = {
stageId: '',
studentList: [],
deptList: [],
groupList: []
}
})
</script>
<style>
.ant-btn-primary {
background-color: #4ea6ff !important;
}
.cus-select {
height: 40px;
border-radius: 8px;
}
</style>

View File

@@ -0,0 +1,213 @@
<template>
<div>
<a-row type="flex" gutter="12" style="padding-left: 20px">
<a-col>
<a-form-item title="姓名:" @click="getStuList">
<a-input class="cus-input" v-model:value="tableParam.studentName" placeholder="请输入姓名"/>
</a-form-item>
</a-col>
<a-col>
<a-button class="cus-btn" style="width: 100px">
<template #icon>
<img style="margin-right: 10px" src="../../assets/images/courseManage/search0.png"/></template>
搜索
</a-button>
</a-col>
<a-col :span="2">
<a-button class="cus-btn white" style="width: 100px" @click="reset">重置</a-button>
</a-col>
</a-row>
<a-row type="flex" gutter="12" style="padding-left: 20px">
<a-col :span="1.5">
<CommonStudent :type="type" :id="id" @finash="submitCall" :stage="stage">
<a-button class="cus-btn">
<template #icon><img style="margin-right: 10px" src="../../assets/images/courseManage/add0.png"/></template>
添加学员
</a-button>
</CommonStudent>
</a-col>
<a-col :span="1.5">
<a-button class="cus-btn white" @click="bathDel">
<template #icon><img style="margin-right: 10px" src="../../assets/images/projectadd/delete.png"/></template>
批量删除
</a-button>
</a-col>
</a-row>
<div style="margin-top: 20px">
<a-table
:columns="tablecolumns"
:data-source="tableData.list"
:pagination="stuPagination"
:loading="tableData.loading"
row-key="id"
:row-selection="stuRowSelection"
>
<template #action="{record}">
<a-row gutter="12">
<a-col>
<slot name="extension" v-bind:data="{record}"></slot>
</a-col>
<a-col>
<a-select style="width: 80px" value="更多">
<a-select-option value="删除" label="删除">
<div @click="del(record.id)">删除</div>
</a-select-option>
</a-select>
</a-col>
</a-row>
</template>
</a-table>
</div>
</div>
</template>
<script setup>
import {computed, defineProps, onMounted, ref, watch} from "vue";
import {delStudentList, getStuPage} from "@/api/index1";
import CommonStudent from '@/components/student/CommonStudent'
const props = defineProps({
type: Number,
id: String,
columns: {
type: Array,
default: () => []
},
stage: {
type: Array,
default: () => []
}
})
const tablecolumns = ref([
{
title: "姓名",
dataIndex: "studentName",
key: "studentName",
width: "20%",
align: "left",
className: "h",
},
{
title: "工号",
dataIndex: "studentUserNo",
key: "studentUserNo",
width: "10%",
align: "center",
className: "h",
ellipsis: true,
},
{
title: "部门",
dataIndex: "studentDepartName",
key: "studentDepartName",
width: "10%",
align: "center",
className: "h",
ellipsis: true,
},
{
title: "加入方式",
dataIndex: "source",
key: "source",
width: "10%",
align: "center",
customRender: ({record: {source}}) => ({1: '快速添加', 2: '组织', 3: '受众'}[source])
},
...props.columns,
{
title: "操作",
dataIndex: "operation",
key: "operation",
width: "25%",
align: "center",
slots: {customRender: 'action'}
},
]);
const tableParam = ref({
studentName: "",
pageNo: 1,
pageSize: 10,
type: props.type,
pid: props.id,
})
const stuSelectKeys = ref([])
const tableData = ref({
list: [],
total: 0,
loading: false
})
const stuRowSelection = computed(() => ({
columnWidth: 20,
selectedRowKeys: stuSelectKeys.value,
onChange: onStuSelectChange,
preserveSelectedRowKeys: true,
}))
onMounted(() => {
getStuList()
})
function onStuSelectChange(e) {
stuSelectKeys.value = e
}
const stuPagination = computed(() => ({
total: tableData.value.total,
showSizeChanger: false,
current: tableParam.value.pageNo,
pageSize: tableParam.value.pageSize,
onChange: changePagination
}))
function changePagination(page) {
tableParam.value.pageNo = page;
getStuList()
}
function getStuList() {
tableData.value.loading = true
getStuPage(tableParam.value).then(res => {
tableData.value.total = res.data.data.total;
tableData.value.list = res.data.data.records;
tableData.value.loading = false;
})
}
function reset() {
}
function bathDel() {
stuSelectKeys.value && stuSelectKeys.value.length && delStudentList({
ids: stuSelectKeys.value,
}).then(() => {
getStuList()
})
}
function del(id) {
id && delStudentList({
ids: [id],
}).then(() => {
getStuList()
})
}
function submitCall(flag) {
tableData.value.loading = true
flag && getStuList()
}
</script>
<style>
.studentopea1 {
font-size: 14px;
font-weight: 400;
color: #387df7;
line-height: 22px;
padding-right: 8px;
border-right: 1px solid #e9e9e9;
cursor: pointer;
}
</style>

View File

@@ -2276,236 +2276,168 @@
<span>{{ currentPlanItem.teacher }}</span>
</div>
<div class="stmm_i5">
<div class="i5_left">
<!-- <a-input
v-model:value="xygl_inputV1"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
placeholder="请输入姓名"
/> -->
<a-input
v-model:value="xygl_inputV1"
placeholder="请输入姓名"
style="
width: 400px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
/>
<div class="btn btn1" @click="handleSearchStu">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btnn btn2" @click="handleRestStu">
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
<div class="btns">
<div class="btn btn3" @click="showStuAdd(currentPlanItem)">
<div class="search"></div>
<div class="btnText">添加学员</div>
</div>
<!-- 2022-11-30注释 后面放开 -->
<!-- <div class="stmm_btn btn4" @click="hideShow">
<div class="btn4_sub">
<span style="color: #4ea6ff; margin-right: 4px">
批量操作
</span>
<div
class="b_zk"
:style="{ display: hideshow ? 'block' : 'none' }"
></div>
<div
class="b_sq"
:style="{ display: hideshow ? 'none' : 'block' }"
></div>
</div>
<div
class="btn4_sup"
:style="{ display: hideshow ? 'none' : 'block' }"
>
<div class="btnsbox">
<div class="btn4_tit" @click="handleAllJion">
<span style="color: #4ea6ff">批量录入成绩</span>
</div>
<div class="btn4_op1" @click="handleAllover">
<span>批量结业</span>
</div>
<div class="btn4_op2" @click="handleAllSuc">
<span>批量通过</span>
</div>
<div class="btn4_op3" @click="handleAllReject">
<span>批量拒绝</span>
</div>
</div>
</div>
</div>
<div class="stmm_btn btn5" @click="handleExportStu">
<div class="export"></div>
<div class="btnText">导出</div>
</div> -->
</div>
<TableStudent :type="3" :id="offcourseId" :columns="stuColumns">
<!-- <template #extension = "data">-->
<!-- <div style="display: flex">-->
<!-- <button @click="handlJoinStu(data)">成绩录入</button>-->
<!-- </div>-->
<!-- </template>-->
</TableStudent>
</div>
<div class="tableBox" style="margin-top: 20px">
<a-table
:columns="columns7"
:data-source="tableData7"
:loading="tableDataTotal3 === -1 ? true : false"
:scroll="{ x: 800 }"
expandRowByClick="true"
@expand="expandTable"
:pagination="false"
:row-selection="{
selectedRowKeys: selectedRowKeys7,
onChange: onSelectChange7,
}"
>
<template #bodyCell="{ record, column }">
<!-- 操作1 -->
<template
v-if="
(String(record.applyStatus) === '0' ||
record.status === '待审核') &&
column.key === 'overstatus'
"
>
<span class="table-operation">-</span>
</template>
<template
v-if="
(String(record.applyStatus) === '-1' ||
record.status === '已拒绝') &&
column.key === 'overstatus'
"
>
<span class="table-operation">-</span>
</template>
<template
v-if="
(String(record.applyStatus) === '1' ||
record.status === '已通过') &&
column.key === 'overstatus'
"
>
<span class="table-operation">
<a
@click="
() => {
handlJoinStu(record);
}
"
>
成绩录入
</a>
<a
@click="
() => {
handleOverStu(record);
}
"
>
结业
</a>
</span>
</template>
<!-- 操作2 -->
<template
v-if="
(String(record.applyStatus) === '0' ||
record.status === '待审核') &&
column.key === 'operation'
"
>
<span class="table-operation">
<a
@click="
() => {
handleSucessStu(record);
}
"
>
通过
</a>
<a
@click="
() => {
handleRejectStu(record);
}
"
>
拒绝
</a>
<a
@click="
() => {
handleDeleteStu(record);
}
"
>
删除
</a>
</span>
</template>
<template
v-if="
(String(record.applyStatus) === '1' ||
record.status === '已通过') &&
column.key === 'operation'
"
>
<span class="table-operation">
<a
@click="
() => {
handleDeleteStu(record);
}
"
>
删除
</a>
</span>
</template>
<template
v-if="
(String(record.applyStatus) === '-1' ||
record.status === '已拒绝') &&
column.key === 'operation'
"
>
<span class="table-operation">
<a
@click="
() => {
handleDeleteStu(record);
}
"
>
删除
</a>
</span>
</template>
</template>
</a-table>
<div class="tableBox" style="margin-top: 50px">
<div class="pa">
<a-pagination
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize3"
:current="currentPage3"
:total="tableDataTotal3"
class="pagination"
@change="handelChangePage3"
/>
</div>
</div>
<!-- <a-table-->
<!-- :columns="columns7"-->
<!-- :data-source="tableData7"-->
<!-- :loading="tableDataTotal3 === -1 ? true : false"-->
<!-- :scroll="{ x: 800 }"-->
<!-- expandRowByClick="true"-->
<!-- @expand="expandTable"-->
<!-- :pagination="false"-->
<!-- :row-selection="{-->
<!-- selectedRowKeys: selectedRowKeys7,-->
<!-- onChange: onSelectChange7,-->
<!-- }"-->
<!-- >-->
<!-- <template #bodyCell="{ record, column }">-->
<!-- &lt;!&ndash; 操作1 &ndash;&gt;-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '0' ||-->
<!-- record.status === '待审核') &&-->
<!-- column.key === 'overstatus'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-</span>-->
<!-- </template>-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '-1' ||-->
<!-- record.status === '已拒绝') &&-->
<!-- column.key === 'overstatus'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-</span>-->
<!-- </template>-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '1' ||-->
<!-- record.status === '已通过') &&-->
<!-- column.key === 'overstatus'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handlJoinStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 成绩录入-->
<!-- </a>-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleOverStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 结业-->
<!-- </a>-->
<!-- </span>-->
<!-- </template>-->
<!-- &lt;!&ndash; 操作2 &ndash;&gt;-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '0' ||-->
<!-- record.status === '待审核') &&-->
<!-- column.key === 'operation'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleSucessStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 通过-->
<!-- </a>-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleRejectStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 拒绝-->
<!-- </a>-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleDeleteStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 删除-->
<!-- </a>-->
<!-- </span>-->
<!-- </template>-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '1' ||-->
<!-- record.status === '已通过') &&-->
<!-- column.key === 'operation'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleDeleteStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 删除-->
<!-- </a>-->
<!-- </span>-->
<!-- </template>-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '-1' ||-->
<!-- record.status === '已拒绝') &&-->
<!-- column.key === 'operation'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleDeleteStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 删除-->
<!-- </a>-->
<!-- </span>-->
<!-- </template>-->
<!-- </template>-->
<!-- </a-table>-->
<!-- <div class="tableBox" style="margin-top: 50px">-->
<!-- <div class="pa">-->
<!-- <a-pagination-->
<!-- :showSizeChanger="false"-->
<!-- showQuickJumper="true"-->
<!-- hideOnSinglePage="true"-->
<!-- :pageSize="pageSize3"-->
<!-- :current="currentPage3"-->
<!-- :total="tableDataTotal3"-->
<!-- class="pagination"-->
<!-- @change="handelChangePage3"-->
<!-- />-->
<!-- </div>-->
<!-- </div>-->
</div>
</div>
</div>
@@ -2604,11 +2536,11 @@
</div>
</div>
<div class="qrm_btnbox">
<div class="qrm_btn btn1">
<div class="btnText" @click="rg_exit">取消</div>
<div class="qrm_btn btn1" @click="rg_exit">
<div class="btnText">取消</div>
</div>
<div class="qrm_btn btn2">
<div class="btnText" @click="handleJoin">确定</div>
<div class="qrm_btn btn2" @click="handleJoin">
<div class="btnText">确定</div>
</div>
</div>
</div>
@@ -2930,6 +2862,7 @@ import { queryWorkDetailById } from "@/api/indexWork";
import { queryExaminationDetailById } from "@/api/indexExam";
import AddHomework from "../../components/drawers/AddHomework.vue";
import AddTest from "../../components/drawers/AddTest.vue";
import TableStudent from "@/components/student/TableStudent";
//列表表格
const columns1 = [
// {
@@ -3448,6 +3381,7 @@ export default defineComponent({
AddHomework,
AddTest,
NameInput,
TableStudent,
// VNodes: (_, {attrs}) => {
// return attrs.vnodes;
// },
@@ -3458,6 +3392,72 @@ export default defineComponent({
const CourseModalRef = ref(null);
const state = reactive({
stuColumns:[
{
title: "报名状态",
width: '10%',
dataIndex: "status",
key: "5",
align: "center",
customRender: ({ record }) => {
switch (String(record.source)) {
case "0":
return "待审核";
case "1":
return "审核通过";
case "2":
return "审核拒绝";
}
},
},
{
title: "加入方式",
width: '10%',
dataIndex: "join",
key: "6",
align: "center",
customRender: ({ record }) => {
switch (String(record.source)) {
case "1":
return "手动加入";
case "2":
return "报名加入";
}
},
},
{
title: "签到状态",
width: '10%',
dataIndex: "signstatus",
key: "7",
align: "center",
customRender: ({ record }) => {
switch (String(record.signStatus)) {
case "0":
return "未签到";
case "1":
return "已签到";
case "2":
return "请假";
}
},
},
{
title: "评估状态",
width: '10%',
dataIndex: "evastatus",
key: "8",
align: "center",
customRender: ({ record }) => {
switch (String(record.evalStatus)) {
case "0":
return "未评估";
case "1":
return "已评估";
}
},
},
],
shipType: 1,
addLoading: false,
currentPlanItem: {},
@@ -8640,6 +8640,30 @@ export default defineComponent({
margin-bottom: 20px;
}
.cus-btn {
width: 100%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
background: #4ea6ff;
cursor: pointer;
color: #fff;
}
.white {
background: #fff;
color: #4ea6ff;
}
.cus-input {
height: 40px;
border-radius: 8px;
}
// .tableSelect {
// position: relative;
// .hoverList {

View File

@@ -505,127 +505,7 @@
</div>
</a-tab-pane>
<a-tab-pane key="3" tab="学员管理" force-render>
<div class="split"></div>
<div class="xwid">
<div class="pad"></div>
<div class="xin" style="overflow-x: auto">
<div class="xhead">
<a-input
v-model:value="gatenamee"
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入姓名"
/>
<div class="btns" @click="searchLevel">
<div class="btn btn1">
<div class="search"></div>
<a-button
class="btnText"
style="
border: none;
background: none;
transform: translateY(-20%);
"
>搜索
</a-button>
</div>
<div class="btn btn2" @click="resetLevel">
<div class="search"></div>
<a-button
style="
border: none;
background: none;
transform: translateY(-20%);
width: 100%;
"
class="btnText"
>重置</a-button
>
</div>
</div>
</div>
<div class="xheadb">
<button class="addx" @click="showAddStu">添加学员</button>
<!-- 2022-11-30注释 后面放开 -->
<!-- <button class="addd" @click="showImpStu">导入学员</button> -->
<div class="select">
<a-button
style="
border: 1px solid rgba(64, 158, 255, 1);
background: none;
width: 130px;
height: 40px;
font-size: 14px;
font-weight: 400;
color: rgba(64, 158, 255, 1);
margin-left: 5px;
border-radius: 8px;
cursor: pointer;
"
class="btnText"
@click="deleteStu()"
>批量删除</a-button
>
<!-- <a-select
style="width: 130px"
value="更多操作"
@change="handleStuChange"
:options="projectNameList"
>
</a-select> -->
</div>
</div>
<!-- 2022-12-11注释 后面放开 -->
<!--
<div class="talk">
<img class="im" src="../../assets/images/leveladd/gan.png" />
<div class="xu">
<span class="yi">已选择</span>
<div style="width: 5px; display: inline-block"></div>
<span class="th">{{ selectedRowKeys.length }}</span>
<div style="width: 5px; display: inline-block"></div>
<span class="yi"></span>
<span class="zon">列表选项总数</span>
<span class="th">{{ stuTotal }}</span>
<span class="yi"> </span>
</div>
<div class="clear" @click="clearChooseStu">清空</div>
</div>-->
<div class="tableBox" style="margin-top: 30px">
<a-table
style="border: 1px solid #f2f6fe"
:columns="tableDataFunc()"
:scroll="{ x: 1400 }"
:data-source="tableData"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
@expand="expandTable"
:pagination="false"
:row-selection="{
columnWidth: 30,
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"
/>
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
@change="pageChange"
class="pagination"
style="display: block"
/>
</div>
</div>
</div>
<div class="pad"></div>
</div>
<TableStudent :type="3" :id="routerId"></TableStudent>
</a-tab-pane>
<!--1211注释 待开放
<a-tab-pane key="4" tab="设置">
@@ -1232,6 +1112,7 @@ import * as api from "../../api/index1";
import { editRoutered } from "../../api/indexLearningPath";
import { codeUrl } from "../../api/method";
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import TableStudent from "@/components/student/TableStudent";
// import * as student from "@/api/student";
export default {
name: "LevelAdd",
@@ -1248,6 +1129,7 @@ export default {
WorkManage,
SeeStu,
TwoDimensionalCode,
TableStudent,
},
setup() {
const router = useRouter();

File diff suppressed because it is too large Load Diff

View File

@@ -22,6 +22,9 @@ module.exports = defineConfig({
pathRewrite: {
"^/manageApi": "",
},
},"/userbasic": {
target: process.env.VUE_APP_BOE_API_URL,
changeOrigin: true, //表示是否改变原域名
},
},
},