-- 添加学员

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_PROXY_URL=http://111.231.196.214:30001/
VUE_APP_LOGIN_URL=https://u-pre.boe.com/web 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_URL=https://u-pre.boe.com/pc/iframe
VUE_APP_IFRAME_STUDENT_URL=https://u-pre.boe.com/pc/loading VUE_APP_IFRAME_STUDENT_URL=https://u-pre.boe.com/pc/loading

View File

@@ -1,27 +1,27 @@
<template> <template>
<div id="container" v-if="!isLogin"> <div id="container" v-if="!isLogin">
<nav-top /> <nav-top/>
<div style="display: flex"> <div style="display: flex">
<nav-left /> <nav-left/>
<div style="flex: 1; display: flex; flex-direction: column; width: 0"> <div style="flex: 1; display: flex; flex-direction: column; width: 0">
<open-pages /> <open-pages/>
<bread-crumb /> <bread-crumb/>
<main> <main>
<a-config-provider :locale="zhCN"> <a-config-provider :locale="zhCN">
<router-view /> <router-view/>
</a-config-provider> </a-config-provider>
</main> </main>
</div> </div>
</div> </div>
</div> </div>
<div id="container" v-if="isLogin"> <div id="container" v-if="isLogin">
<router-view /> <router-view/>
</div> </div>
</template> </template>
<script> <script>
import { computed, defineComponent, ref } from "vue"; import {computed, defineComponent, ref} from "vue";
import { useRouter, useRoute } from "vue-router"; import {useRouter, useRoute} from "vue-router";
import { useStore } from "vuex"; import {useStore} from "vuex";
import NavLeft from "@/components/NavLeft"; import NavLeft from "@/components/NavLeft";
import NavTop from "@/components/NavTop"; import NavTop from "@/components/NavTop";
import OpenPages from "@/components/OpenPages"; import OpenPages from "@/components/OpenPages";
@@ -78,7 +78,7 @@ export default defineComponent({
return; return;
} }
const memberInitInfo = await api1 const memberInitInfo = await api1
.getMemberInfo({ keyWord: "", pageNo: 1, pageSize: 10 }) .getMemberInfo({keyWord: "", pageNo: 1, pageSize: 10})
.then((res) => res.data.data.rows); .then((res) => res.data.data.rows);
store.commit("SET_MEMBER_INFO", memberInitInfo); store.commit("SET_MEMBER_INFO", memberInitInfo);
localStorage.setItem("memberInitInfo", JSON.stringify(memberInitInfo)); localStorage.setItem("memberInitInfo", JSON.stringify(memberInitInfo));
@@ -94,13 +94,13 @@ export default defineComponent({
if (localStory) { if (localStory) {
list = localStorage.getItem(key); list = localStorage.getItem(key);
if (list) { if (list) {
store.commit("SET_DICT", { key, data: JSON.parse(list) }); store.commit("SET_DICT", {key, data: JSON.parse(list)});
return; return;
} }
} }
list = await getDictList(key); list = await getDictList(key);
localStory && localStorage.setItem(key, JSON.stringify(list)); localStory && localStorage.setItem(key, JSON.stringify(list));
store.commit("SET_DICT", { key, data: list }); store.commit("SET_DICT", {key, data: list});
} }
const getDictList = (param) => const getDictList = (param) =>
@@ -199,6 +199,34 @@ export default defineComponent({
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07); 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) { // @media screen and (max-width: 1366px) {
// .cmMain { // .cmMain {
// width: 750px; // 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 USER_LIST = '/userbasic/user/list post'
export const ORG_LIST = '/userbasic/org/list post' export const ORG_LIST = '/userbasic/org/list post'
export const ORG_CHILD_LIST = '/userbasic/org/info post' export const ORG_CHILD_LIST = '/userbasic/org/info post'
export const AUDIENCE_LIST = '/userbasic/audience/list 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 orgtree = () => http.get("/org/tree");
export const saveStu = obj => http.post("/admin/student/addStudent", obj); 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); 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) { export async function request(_url, params) {
const s = _url.split(' ') const s = _url.split(' ')
let url = s[0] let url = s[0]
const method = s[1] || 'get' const method = s[1]?.toLowerCase() || 'get'
if (method === 'get') { if (method === 'get') {
let paramsArray = []; let paramsArray = [];
//拼接参数 //拼接参数

View File

@@ -1,6 +1,7 @@
<template> <template>
<div>
<a-drawer <a-drawer
:visible="visiableState" :visible="visiable"
class="drawerStyle ProjCheckship" class="drawerStyle ProjCheckship"
placement="right" placement="right"
width="45%" width="45%"
@@ -8,7 +9,7 @@
<div class="drawerMain" id="ProjCheckship"> <div class="drawerMain" id="ProjCheckship">
<div class="header"> <div class="header">
<div class="headerTitle"> <div class="headerTitle">
{{ {1: '查看权', 2: '管理权', 3: '添加学员'}[type] || '' }} {{ {1: '添加学员', 2: '添加学员', 3: '添加学员'}[type] || '' }}
</div> </div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
@@ -101,16 +102,6 @@
multiple multiple
> >
</a-tree> </a-tree>
<!-- <div>-->
<!-- <a-table-->
<!-- :columns="stuColumns"-->
<!-- :data-source="stuData"-->
<!-- :pagination="stuPagination"-->
<!-- :loading="orgLoading"-->
<!-- row-key="id"-->
<!-- :row-selection="stuRowSelection"-->
<!-- />-->
<!-- </div>-->
</div> </div>
</div> </div>
</a-tab-pane> </a-tab-pane>
@@ -159,7 +150,8 @@
</div> </div>
<div> <div>
<div style="margin-top: 20px">组织添加</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" <a-tag :closable="true" color="#4ea6ff" @close="orgDel(i)" v-for="(item,i) in selectsData.deptList"
:key="i"
style="margin-top:20px"> style="margin-top:20px">
{{ item.name }} {{ item.name }}
</a-tag> </a-tag>
@@ -179,9 +171,25 @@
</div> </div>
</div> </div>
</a-drawer> </a-drawer>
<div @click="openDrawer">
<slot></slot>
</div>
</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> </template>
<script setup> <script setup>
import {computed, defineEmits, defineProps, onMounted, ref} from "vue"; import {computed, defineEmits, defineProps, ref, watch} from "vue";
import {useStore} from "vuex"; import {useStore} from "vuex";
import {useBoeApi, useBoeApiPage} from "@/api/request"; import {useBoeApi, useBoeApiPage} from "@/api/request";
import {AUDIENCE_LIST, ORG_LIST, USER_LIST} from "@/api/ThirdApi"; import {AUDIENCE_LIST, ORG_LIST, USER_LIST} from "@/api/ThirdApi";
@@ -191,16 +199,17 @@ const store = useStore();
const emit = defineEmits({}) const emit = defineEmits({})
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
visiable: { id: String,
type: Boolean, stage: {
default: false type: Array,
}, default: () => []
}
}) })
const visiable = ref(false)
const visiableState = computed(() => props.visiable)
const activeKey = ref(1) const activeKey = ref(1)
const stageVisible = ref(false)
const selectsData = ref({ const selectsData = ref({
stageId: '',
studentList: [], studentList: [],
deptList: [], deptList: [],
groupList: [] groupList: []
@@ -222,6 +231,8 @@ const searchOrgName = ref({
pageSize: 10 pageSize: 10
}) })
const stageIds = computed(() => props.stage)
const { const {
data: stuData, data: stuData,
fetch: searchStu, fetch: searchStu,
@@ -250,7 +261,7 @@ const {
total: audiTotal total: audiTotal
} = useBoeApiPage(AUDIENCE_LIST, audienceName.value, { } = useBoeApiPage(AUDIENCE_LIST, audienceName.value, {
init: true, init: true,
result: res => res.result.audienceList, result: res => res.result.audienceList.map(e => ({...e, id: e.id + ''})),
totalPage: res => res.result.totalPage, totalPage: res => res.result.totalPage,
total: res => res.result.totalElement total: res => res.result.totalElement
}) })
@@ -367,11 +378,11 @@ const auditRowSelection = computed(() => ({
preserveSelectedRowKeys: true, preserveSelectedRowKeys: true,
})) }))
onMounted(() => {
});
const closeDrawer = () => { const closeDrawer = () => {
visiable.value = false
};
const openDrawer = () => {
visiable.value = true
}; };
//获取组织树 //获取组织树
const treeData = computed(() => { const treeData = computed(() => {
@@ -397,6 +408,7 @@ function AuditDel(i) {
auditSelectKeys.value = auditSelectKeys.value.filter(e => e !== selectsData.value.groupList[i].id) auditSelectKeys.value = auditSelectKeys.value.filter(e => e !== selectsData.value.groupList[i].id)
selectsData.value.groupList.splice(i, 1) selectsData.value.groupList.splice(i, 1)
} }
// //
// function orgSelect(key, obj) { // function orgSelect(key, obj) {
// console.log(obj) // console.log(obj)
@@ -432,8 +444,6 @@ const changePagination = (page) => {
}; };
const auditChangePagination = (page) => { const auditChangePagination = (page) => {
console.log(1111111111)
console.log(page)
audienceName.value.page = page; audienceName.value.page = page;
searchAudi() searchAudi()
}; };
@@ -468,14 +478,50 @@ const resetAudienceInfo = () => {
// }; // };
//确定添加授权 //确定添加授权
const submitAuth = () => { const submitAuth = () => {
emit('update:visiable', false) if (props.type !== 3) {
saveStu(selectsData.value) 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> </script>
<style> <style>
.ant-btn-primary { .ant-btn-primary {
background-color: #4ea6ff !important; background-color: #4ea6ff !important;
} }
.cus-select {
height: 40px;
border-radius: 8px;
}
</style> </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> <span>{{ currentPlanItem.teacher }}</span>
</div> </div>
<div class="stmm_i5"> <div class="stmm_i5">
<div class="i5_left"> <TableStudent :type="3" :id="offcourseId" :columns="stuColumns">
<!-- <a-input <!-- <template #extension = "data">-->
v-model:value="xygl_inputV1" <!-- <div style="display: flex">-->
style=" <!-- <button @click="handlJoinStu(data)">成绩录入</button>-->
width: 270px; <!-- </div>-->
height: 40px; <!-- </template>-->
border-radius: 8px; </TableStudent>
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>
</div> </div>
<div class="tableBox" style="margin-top: 20px"> <div class="tableBox" style="margin-top: 20px">
<a-table <!-- <a-table-->
:columns="columns7" <!-- :columns="columns7"-->
:data-source="tableData7" <!-- :data-source="tableData7"-->
:loading="tableDataTotal3 === -1 ? true : false" <!-- :loading="tableDataTotal3 === -1 ? true : false"-->
:scroll="{ x: 800 }" <!-- :scroll="{ x: 800 }"-->
expandRowByClick="true" <!-- expandRowByClick="true"-->
@expand="expandTable" <!-- @expand="expandTable"-->
:pagination="false" <!-- :pagination="false"-->
:row-selection="{ <!-- :row-selection="{-->
selectedRowKeys: selectedRowKeys7, <!-- selectedRowKeys: selectedRowKeys7,-->
onChange: onSelectChange7, <!-- onChange: onSelectChange7,-->
}" <!-- }"-->
> <!-- >-->
<template #bodyCell="{ record, column }"> <!-- <template #bodyCell="{ record, column }">-->
<!-- 操作1 --> <!-- &lt;!&ndash; 操作1 &ndash;&gt;-->
<template <!-- <template-->
v-if=" <!-- v-if="-->
(String(record.applyStatus) === '0' || <!-- (String(record.applyStatus) === '0' ||-->
record.status === '待审核') && <!-- record.status === '待审核') &&-->
column.key === 'overstatus' <!-- column.key === 'overstatus'-->
" <!-- "-->
> <!-- >-->
<span class="table-operation">-</span> <!-- <span class="table-operation">-</span>-->
</template> <!-- </template>-->
<template <!-- <template-->
v-if=" <!-- v-if="-->
(String(record.applyStatus) === '-1' || <!-- (String(record.applyStatus) === '-1' ||-->
record.status === '已拒绝') && <!-- record.status === '已拒绝') &&-->
column.key === 'overstatus' <!-- column.key === 'overstatus'-->
" <!-- "-->
> <!-- >-->
<span class="table-operation">-</span> <!-- <span class="table-operation">-</span>-->
</template> <!-- </template>-->
<template <!-- <template-->
v-if=" <!-- v-if="-->
(String(record.applyStatus) === '1' || <!-- (String(record.applyStatus) === '1' ||-->
record.status === '已通过') && <!-- record.status === '已通过') &&-->
column.key === 'overstatus' <!-- column.key === 'overstatus'-->
" <!-- "-->
> <!-- >-->
<span class="table-operation"> <!-- <span class="table-operation">-->
<a <!-- <a-->
@click=" <!-- @click="-->
() => { <!-- () => {-->
handlJoinStu(record); <!-- handlJoinStu(record);-->
} <!-- }-->
" <!-- "-->
> <!-- >-->
成绩录入 <!-- 成绩录入-->
</a> <!-- </a>-->
<a <!-- <a-->
@click=" <!-- @click="-->
() => { <!-- () => {-->
handleOverStu(record); <!-- handleOverStu(record);-->
} <!-- }-->
" <!-- "-->
> <!-- >-->
结业 <!-- 结业-->
</a> <!-- </a>-->
</span> <!-- </span>-->
</template> <!-- </template>-->
<!-- 操作2 --> <!-- &lt;!&ndash; 操作2 &ndash;&gt;-->
<template <!-- <template-->
v-if=" <!-- v-if="-->
(String(record.applyStatus) === '0' || <!-- (String(record.applyStatus) === '0' ||-->
record.status === '待审核') && <!-- record.status === '待审核') &&-->
column.key === 'operation' <!-- column.key === 'operation'-->
" <!-- "-->
> <!-- >-->
<span class="table-operation"> <!-- <span class="table-operation">-->
<a <!-- <a-->
@click=" <!-- @click="-->
() => { <!-- () => {-->
handleSucessStu(record); <!-- handleSucessStu(record);-->
} <!-- }-->
" <!-- "-->
> <!-- >-->
通过 <!-- 通过-->
</a> <!-- </a>-->
<a <!-- <a-->
@click=" <!-- @click="-->
() => { <!-- () => {-->
handleRejectStu(record); <!-- handleRejectStu(record);-->
} <!-- }-->
" <!-- "-->
> <!-- >-->
拒绝 <!-- 拒绝-->
</a> <!-- </a>-->
<a <!-- <a-->
@click=" <!-- @click="-->
() => { <!-- () => {-->
handleDeleteStu(record); <!-- handleDeleteStu(record);-->
} <!-- }-->
" <!-- "-->
> <!-- >-->
删除 <!-- 删除-->
</a> <!-- </a>-->
</span> <!-- </span>-->
</template> <!-- </template>-->
<template <!-- <template-->
v-if=" <!-- v-if="-->
(String(record.applyStatus) === '1' || <!-- (String(record.applyStatus) === '1' ||-->
record.status === '已通过') && <!-- record.status === '已通过') &&-->
column.key === 'operation' <!-- column.key === 'operation'-->
" <!-- "-->
> <!-- >-->
<span class="table-operation"> <!-- <span class="table-operation">-->
<a <!-- <a-->
@click=" <!-- @click="-->
() => { <!-- () => {-->
handleDeleteStu(record); <!-- handleDeleteStu(record);-->
} <!-- }-->
" <!-- "-->
> <!-- >-->
删除 <!-- 删除-->
</a> <!-- </a>-->
</span> <!-- </span>-->
</template> <!-- </template>-->
<template <!-- <template-->
v-if=" <!-- v-if="-->
(String(record.applyStatus) === '-1' || <!-- (String(record.applyStatus) === '-1' ||-->
record.status === '已拒绝') && <!-- record.status === '已拒绝') &&-->
column.key === 'operation' <!-- column.key === 'operation'-->
" <!-- "-->
> <!-- >-->
<span class="table-operation"> <!-- <span class="table-operation">-->
<a <!-- <a-->
@click=" <!-- @click="-->
() => { <!-- () => {-->
handleDeleteStu(record); <!-- handleDeleteStu(record);-->
} <!-- }-->
" <!-- "-->
> <!-- >-->
删除 <!-- 删除-->
</a> <!-- </a>-->
</span> <!-- </span>-->
</template> <!-- </template>-->
</template> <!-- </template>-->
</a-table> <!-- </a-table>-->
<div class="tableBox" style="margin-top: 50px"> <!-- <div class="tableBox" style="margin-top: 50px">-->
<div class="pa"> <!-- <div class="pa">-->
<a-pagination <!-- <a-pagination-->
:showSizeChanger="false" <!-- :showSizeChanger="false"-->
showQuickJumper="true" <!-- showQuickJumper="true"-->
hideOnSinglePage="true" <!-- hideOnSinglePage="true"-->
:pageSize="pageSize3" <!-- :pageSize="pageSize3"-->
:current="currentPage3" <!-- :current="currentPage3"-->
:total="tableDataTotal3" <!-- :total="tableDataTotal3"-->
class="pagination" <!-- class="pagination"-->
@change="handelChangePage3" <!-- @change="handelChangePage3"-->
/> <!-- />-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</div> </div>
</div> </div>
</div> </div>
@@ -2604,11 +2536,11 @@
</div> </div>
</div> </div>
<div class="qrm_btnbox"> <div class="qrm_btnbox">
<div class="qrm_btn btn1"> <div class="qrm_btn btn1" @click="rg_exit">
<div class="btnText" @click="rg_exit">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="qrm_btn btn2"> <div class="qrm_btn btn2" @click="handleJoin">
<div class="btnText" @click="handleJoin">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
</div> </div>
@@ -2930,6 +2862,7 @@ import { queryWorkDetailById } from "@/api/indexWork";
import { queryExaminationDetailById } from "@/api/indexExam"; import { queryExaminationDetailById } from "@/api/indexExam";
import AddHomework from "../../components/drawers/AddHomework.vue"; import AddHomework from "../../components/drawers/AddHomework.vue";
import AddTest from "../../components/drawers/AddTest.vue"; import AddTest from "../../components/drawers/AddTest.vue";
import TableStudent from "@/components/student/TableStudent";
//列表表格 //列表表格
const columns1 = [ const columns1 = [
// { // {
@@ -3448,6 +3381,7 @@ export default defineComponent({
AddHomework, AddHomework,
AddTest, AddTest,
NameInput, NameInput,
TableStudent,
// VNodes: (_, {attrs}) => { // VNodes: (_, {attrs}) => {
// return attrs.vnodes; // return attrs.vnodes;
// }, // },
@@ -3458,6 +3392,72 @@ export default defineComponent({
const CourseModalRef = ref(null); const CourseModalRef = ref(null);
const state = reactive({ 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, shipType: 1,
addLoading: false, addLoading: false,
currentPlanItem: {}, currentPlanItem: {},
@@ -8640,6 +8640,30 @@ export default defineComponent({
margin-bottom: 20px; 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 { // .tableSelect {
// position: relative; // position: relative;
// .hoverList { // .hoverList {

View File

@@ -505,127 +505,7 @@
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="3" tab="学员管理" force-render> <a-tab-pane key="3" tab="学员管理" force-render>
<div class="split"></div> <TableStudent :type="3" :id="routerId"></TableStudent>
<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>
</a-tab-pane> </a-tab-pane>
<!--1211注释 待开放 <!--1211注释 待开放
<a-tab-pane key="4" tab="设置"> <a-tab-pane key="4" tab="设置">
@@ -1232,6 +1112,7 @@ import * as api from "../../api/index1";
import { editRoutered } from "../../api/indexLearningPath"; import { editRoutered } from "../../api/indexLearningPath";
import { codeUrl } from "../../api/method"; import { codeUrl } from "../../api/method";
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue"; import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import TableStudent from "@/components/student/TableStudent";
// import * as student from "@/api/student"; // import * as student from "@/api/student";
export default { export default {
name: "LevelAdd", name: "LevelAdd",
@@ -1248,6 +1129,7 @@ export default {
WorkManage, WorkManage,
SeeStu, SeeStu,
TwoDimensionalCode, TwoDimensionalCode,
TableStudent,
}, },
setup() { setup() {
const router = useRouter(); const router = useRouter();

View File

@@ -3,7 +3,7 @@
<div class="taskpage"> <div class="taskpage">
<div class="addhead" style="flex-shrink: 0"> <div class="addhead" style="flex-shrink: 0">
<div class="leftimg"> <div class="leftimg">
<img class="img" :src="picUrl" /> <img class="img" :src="picUrl"/>
</div> </div>
<div class="imgfor"> <div class="imgfor">
<div class="forz">{{ name }}</div> <div class="forz">{{ name }}</div>
@@ -171,7 +171,7 @@
<div class="line"></div> <div class="line"></div>
<router-link to="/projectmanage"> <router-link to="/projectmanage">
<div style="display: flex"> <div style="display: flex">
<img class="img2" src="../../assets/images/leveladd/back.png" /> <img class="img2" src="../../assets/images/leveladd/back.png"/>
<div class="return">返回</div> <div class="return">返回</div>
</div> </div>
</router-link> </router-link>
@@ -208,13 +208,13 @@
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)" style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"
> >
<div class="leftt"> <div class="leftt">
<img src="../../assets/images/taskpage/left1.png" /> <img src="../../assets/images/taskpage/left1.png"/>
</div> </div>
<div class="photo"> <div class="photo">
<img src="../../assets/images/taskpage/picture1.png" /> <img src="../../assets/images/taskpage/picture1.png"/>
</div> </div>
<div class="rightt"> <div class="rightt">
<img src="../../assets/images/taskpage/right1.png" /> <img src="../../assets/images/taskpage/right1.png"/>
</div> </div>
<div class="centerbox" style="color: rgba(255, 182, 78, 1)"> <div class="centerbox" style="color: rgba(255, 182, 78, 1)">
添加任务 添加任务
@@ -227,13 +227,13 @@
style="background: linear-gradient(180deg, #ddeaff, #f0f8fe)" style="background: linear-gradient(180deg, #ddeaff, #f0f8fe)"
> >
<div class="leftt"> <div class="leftt">
<img src="../../assets/images/taskpage/left2.png" /> <img src="../../assets/images/taskpage/left2.png"/>
</div> </div>
<div class="photo"> <div class="photo">
<img src="../../assets/images/taskpage/picture2.png" /> <img src="../../assets/images/taskpage/picture2.png"/>
</div> </div>
<div class="rightt"> <div class="rightt">
<img src="../../assets/images/taskpage/right2.png" /> <img src="../../assets/images/taskpage/right2.png"/>
</div> </div>
<div class="centerbox" style="color: rgba(78, 166, 255, 1)"> <div class="centerbox" style="color: rgba(78, 166, 255, 1)">
添加学员 添加学员
@@ -640,13 +640,13 @@
v-if="taskSyllabus.length == 0" v-if="taskSyllabus.length == 0"
> >
<div class="leftt"> <div class="leftt">
<img src="../../assets/images/taskpage/left2.png" /> <img src="../../assets/images/taskpage/left2.png"/>
</div> </div>
<div class="photo"> <div class="photo">
<img src="../../assets/images/taskpage/picture8.png" /> <img src="../../assets/images/taskpage/picture8.png"/>
</div> </div>
<div class="rightt"> <div class="rightt">
<img src="../../assets/images/taskpage/right2.png" /> <img src="../../assets/images/taskpage/right2.png"/>
</div> </div>
<div class="centerbox" style="color: rgba(78, 166, 255, 1)"> <div class="centerbox" style="color: rgba(78, 166, 255, 1)">
创建任务 创建任务
@@ -669,13 +669,13 @@
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)" style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"
> >
<div class="leftt"> <div class="leftt">
<img src="../../assets/images/taskpage/left1.png" /> <img src="../../assets/images/taskpage/left1.png"/>
</div> </div>
<div class="photo"> <div class="photo">
<img src="../../assets/images/taskpage/picture1.png" /> <img src="../../assets/images/taskpage/picture1.png"/>
</div> </div>
<div class="rightt"> <div class="rightt">
<img src="../../assets/images/taskpage/right1.png" /> <img src="../../assets/images/taskpage/right1.png"/>
</div> </div>
<div class="centerbox" style="color: rgba(255, 182, 78, 1)"> <div class="centerbox" style="color: rgba(255, 182, 78, 1)">
添加任务 添加任务
@@ -691,271 +691,8 @@
<div class="content3"> <div class="content3">
<a-tabs v-model:activeKey="activeKey1"> <a-tabs v-model:activeKey="activeKey1">
<a-tab-pane key="8" tab="学员管理"> <a-tab-pane key="8" tab="学员管理">
<div class="group"> <TableStudent :type="1" :id="projectId" :columns="stuColumns" :stage="stage"></TableStudent>
<div class="groupleft">
<div
style="
display: flex;
align-items: center;
margin-right: 10px;
margin-bottom: 10px;
"
>
<div class="groupname" style="width: 42px">姓名:</div>
<a-input
v-model:value="valuestun"
placeholder="请输入姓名"
/>
</div>
<!-- 2022-11-30注释 后面放开 -->
<!--
<div
style="
display: flex;
align-items: center;
margin-right: 10px;
margin-bottom: 10px;
"
>
<div class="groupname">小组名称:</div>
<a-input
v-model:value="valuestugroup"
placeholder="请输入小组名称"
/>
</div>
<div
style="
display: flex;
align-items: center;
margin-right: 10px;
margin-bottom: 10px;
"
>
<div class="groupname" style="width: 42px">部门:</div>
<a-tree-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="valuestub"
:dropdown-style="{
maxHeight: '400px',
overflow: 'auto',
}"
placeholder="请选择部门"
:options="bum"
@change="handleChangeBum"
:tree-data="bum"
:fieldNames="{
children: 'treeChildList',
label: 'name',
value: 'id',
}"
></a-tree-select>
</div> -->
<!-- 2022-11-30注释 后面放开 -->
<!-- <div
style="
display: flex;
align-items: center;
margin-bottom: 10px;
"
>
<div class="groupname" style="width: 42px">学员:</div>
<a-select
v-model:value="valuegood"
placeholder="是否为优秀学员"
:options="goodstuList"
@change="handleChangeGood"
/>
</div> -->
</div>
<div class="groupright">
<div class="btn1" @click="searchStu">
<img src="../../assets/images/courseManage/search0.png" />
<span class="btn1text">搜索</span>
</div>
<div class="btn2" @click="resetCancel">
<img src="../../assets/images/courseManage/reset1.png" />
<span class="btn2text">重置</span>
</div>
</div>
</div>
<div class="second2" style="margin-top: 20px">
<div class="btn1" @click="showStuAdd">
<img src="../../assets/images/courseManage/add0.png" />
<span class="btn1text">添加学员</span>
</div>
<!-- 2022-11-30注释 后面放开 -->
<!-- <div class="btn2" @click="showImportStu">
<img src="../../assets/images/courseManage/reset2.png" />
<span class="btn2text">导入学员</span>
</div> -->
<div class="btn2" @click="showAllDelete">
<img src="../../assets/images/projectadd/delete.png" />
<span class="btn2text">批量删除</span>
</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">{{ choosed }}</span>
<div style="width: 5px; display: inline-block"></div>
<span class="yi">项</span>
<span class="zon">列表选项总计:</span>
<span class="yi">{{ total }}</span>
<span class="yi">条</span>
</div>
<div class="clear" @click="clearChooseStu">清空</div>
</div>-->
<div class="tab" style="margin: 20px 32px 30px 32px">
<a-table
style="border: 1px solid #f2f6fe"
:columns="studentColumns()"
:data-source="tabledata"
expandRowByClick="true"
:scroll="{ x: 1400 }"
@expand="expandTable"
:pagination="false"
:loading="loading"
:row-selection="{
columnWidth: 30,
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"
/>
<!-- 列表无数据样式
<div
class="nostu"
:style="{ display: total > 0 ? 'none' : 'block' }"
> -->
<div class="nostu" style="display: none">
<div class="nostuimg"></div>
</div>
<div class="tableBox">
<div class="pa">
<a-pagination
v-if="total > 10"
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="stupageSize"
:current="currentPageStu"
:total="total"
class="pagination"
@change="changePaginationStu"
/>
</div></div>
</div>
</a-tab-pane> </a-tab-pane>
<!--
<a-tab-pane key="9" tab="小组管理" force-render>
<div class="group">
<div class="groupleft">
<div class="groupname">小组名称:</div>
<a-input
v-model:value="valuestugn"
placeholder="请输入小组名称"
/>
</div>
<div class="groupright">
<div class="btn1" @click="searchGroup">
<img src="../../assets/images/courseManage/search0.png" />
<span class="btn1text">搜索</span>
</div>
<div class="btn2" @click="resetGroupName">
<img src="../../assets/images/courseManage/reset1.png" />
<span class="btn2text">重置</span>
</div>
</div>
</div>
<div class="second2">
<div class="btn1" @click="showModal2(1, null)">
<img src="../../assets/images/courseManage/add0.png" />
<span class="btn1text">创建小组</span>
</div>-->
<!-- 2022-12-2注释 后面放开 -->
<!-- <div class="btn2" @click="showSubset">
<img src="../../assets/images/courseManage/reset2.png" />
<span class="btn2text">随机分组</span>
</div>
</div>-->
<!-- 小组列表
<div class="groupmain">
<div
class="groupbox"
v-for="item in groupList"
:key="item.projectGroupId"
>
<div style="width: 90%">
<div class="grouptitle">
<div class="goodgruop">{{ item.groupName }}</div>
<div class="more">
<span
style="color: rgba(0, 0, 0, 0.45); cursor: pointer"
>. . .</span
>
<div class="moreItems">
<div class="sammo" @click="showModal2(2, item)">
编辑
</div>
<div
class="sammo"
@click="deleteGroupBtn(item.projectGroupId)"
>
删除
</div>
</div>
</div>
</div>
<div class="leader">组长:{{ item.leaderName }}</div>
<div class="grocenter">
<div class="leader1">进度</div>
<a-progress :percent="item.completeRatio" />
</div>
<div
class="grofooter"
@click="showMemberList(item.projectGroupId)"
>
<div class="ftext">组员名单 ></div>-->
<!-- <div class="peoples">
<div class="people1">
<img
src="../../assets/images/taskpage/people1.png"
/>
</div>
<div class="people2">
<img
src="../../assets/images/taskpage/people2.png"
/>
</div>
<div class="people3">
<img
src="../../assets/images/taskpage/people3.png"
/>
</div>
<div class="people4">
<img
src="../../assets/images/taskpage/people4.png"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</a-tab-pane>
-->
</a-tabs> </a-tabs>
</div> </div>
</a-tab-pane> </a-tab-pane>
@@ -1307,7 +1044,7 @@
:title="showFaceText" :title="showFaceText"
/> />
<!-- 学员(小组管理)创建小组抽屉 --> <!-- 学员(小组管理)创建小组抽屉 -->
<subset-manage v-model:Svisible="subsetVisivle" /> <subset-manage v-model:Svisible="subsetVisivle"/>
<!-- 学员管理-添加学员抽屉 --> <!-- 学员管理-添加学员抽屉 -->
<!-- <stu-add v-model:Stuvisible="Stuvisible" /> --> <!-- <stu-add v-model:Stuvisible="Stuvisible" /> -->
<!-- 添加学员抽屉 --> <!-- 添加学员抽屉 -->
@@ -1320,7 +1057,7 @@
:type="2" :type="2"
/> />
<!-- 学员管理-导入学员抽屉 --> <!-- 学员管理-导入学员抽屉 -->
<import-stu v-model:Importvisible="Importvisible" /> <import-stu v-model:Importvisible="Importvisible"/>
<!-- 查看学员 传入查看学员的id--> <!-- 查看学员 传入查看学员的id-->
<see-stu <see-stu
v-model:Seevisible="Seevisible" v-model:Seevisible="Seevisible"
@@ -1343,9 +1080,9 @@
v-model:projectId="projectId" v-model:projectId="projectId"
/> />
<!-- 面授学员抽屉 --> <!-- 面授学员抽屉 -->
<face-stu v-model:FSvisible="FSvisible" /> <face-stu v-model:FSvisible="FSvisible"/>
<!-- 活动考勤抽屉 --> <!-- 活动考勤抽屉 -->
<active-attendance v-model:AAvisible="AAvisible" :title="showkaoqinText" /> <active-attendance v-model:AAvisible="AAvisible" :title="showkaoqinText"/>
<!-- 作业管理抽屉 --> <!-- 作业管理抽屉 -->
<work-manage <work-manage
v-model:Wvisible="Wvisible" v-model:Wvisible="Wvisible"
@@ -1360,7 +1097,7 @@
:itemsType="itemstype" :itemsType="itemstype"
/> />
<!-- 批量面授报名 --> <!-- 批量面授报名 -->
<task-imp-stu v-model:TaskFaceImpStuvisible="TaskFaceImpStuvisible" /> <task-imp-stu v-model:TaskFaceImpStuvisible="TaskFaceImpStuvisible"/>
<!-- 概览(无数据)-项目发布弹窗 --> <!-- 概览(无数据)-项目发布弹窗 -->
<div> <div>
@@ -1419,7 +1156,7 @@
</div> </div>
</div> </div>
<div class="send"> <div class="send">
<a-switch v-model:checked="checked" size="small" /> <a-switch v-model:checked="checked" size="small"/>
<span class="sendtext">发送项目通知</span> <span class="sendtext">发送项目通知</span>
</div> </div>
<div class="ckb"> <div class="ckb">
@@ -1683,7 +1420,7 @@
</a-modal> </a-modal>
</div> </div>
<!-- 编辑项目弹窗 --> <!-- 编辑项目弹窗 -->
<proj-set v-model:editHs="editHs" v-model:projectId="projectId" /> <proj-set v-model:editHs="editHs" v-model:projectId="projectId"/>
<!-- 发布弹窗 --> <!-- 发布弹窗 -->
<a-modal <a-modal
@@ -1765,7 +1502,7 @@
class="aeLoading" class="aeLoading"
:style="{ display: projectPubLoading ? 'flex' : 'none' }" :style="{ display: projectPubLoading ? 'flex' : 'none' }"
> >
<a-spin :spinning="projectPubLoading" /> <a-spin :spinning="projectPubLoading"/>
</div> </div>
</a-modal> </a-modal>
@@ -1907,9 +1644,9 @@
</div> </div>
</template> </template>
<script> <script>
import { reactive, toRefs, onMounted, watch, computed } from "vue"; import {reactive, toRefs, onMounted, watch, computed} from "vue";
import { useRoute } from "vue-router"; import {useRoute} from "vue-router";
import { useRouter } from "vue-router"; import {useRouter} from "vue-router";
import TimeManage from "../../components/drawers/TimeManage"; import TimeManage from "../../components/drawers/TimeManage";
import FaceManage from "../../components/drawers/FaceManage"; import FaceManage from "../../components/drawers/FaceManage";
import SubsetManage from "../../components/drawers/SubsetManage"; import SubsetManage from "../../components/drawers/SubsetManage";
@@ -1925,7 +1662,7 @@ import ChangeGroup from "../../components/drawers/ChangeGroup";
import NoticePub from "../../components/drawers/NoticePub"; import NoticePub from "../../components/drawers/NoticePub";
import NoticeHis from "../../components/drawers/NoticeHis"; import NoticeHis from "../../components/drawers/NoticeHis";
import TaskImpStu from "../../components/drawers/TaskFaceIn"; import TaskImpStu from "../../components/drawers/TaskFaceIn";
import { storage } from "../../api/storage"; import {storage} from "../../api/storage";
import * as api from "../../api/index1"; import * as api from "../../api/index1";
import * as apis from "../../api/index"; import * as apis from "../../api/index";
import * as apiproj from "../../api/index"; import * as apiproj from "../../api/index";
@@ -1938,18 +1675,19 @@ import {
editGroup, editGroup,
topStudent, topStudent,
} from "../../api/indexProjStu"; } from "../../api/indexProjStu";
import { message, Modal } from "ant-design-vue"; import {message, Modal} from "ant-design-vue";
import * as apitl from "../../api/index"; import * as apitl from "../../api/index";
import { getTask } from "../../api/indexTaskadd"; import {getTask} from "../../api/indexTaskadd";
import { editProj } from "../../api/indexTaskadd"; import {editProj} from "../../api/indexTaskadd";
import { toDate, codeUrl } from "../../api/method"; import {toDate, codeUrl} from "../../api/method";
import projSet from "../../components/Modals/projSet"; import projSet from "../../components/Modals/projSet";
import { overview } from "../../api/indexProjStu"; import {overview} from "../../api/indexProjStu";
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue"; import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import { useStore } from "vuex"; import {useStore} from "vuex";
import ProjectLevel from "@/components/project/ProjectLevel"; import ProjectLevel from "@/components/project/ProjectLevel";
import TrainClass from "@/components/project/TrainClass"; import TrainClass from "@/components/project/TrainClass";
import ProjectManager from "@/components/project/ProjectManagerNew"; import ProjectManager from "@/components/project/ProjectManagerNew";
import TableStudent from "@/components/student/TableStudent";
export default { export default {
name: "taskPage", name: "taskPage",
@@ -1976,11 +1714,30 @@ export default {
NoticeHis, NoticeHis,
TwoDimensionalCode, TwoDimensionalCode,
ProjectManager, ProjectManager,
TableStudent
}, },
setup() { setup() {
const store = useStore(); const store = useStore();
const route = useRoute(); const route = useRoute();
const state = reactive({ const state = reactive({
stage: [],
stuColumns: [{
title: "进度",
dataIndex: "progress",
key: "progress",
width: 80,
align: "center",
className: "h",
ellipsis: true,
},
{
title: "最近学习时间",
dataIndex: "stutime",
key: "stutime",
width: 80,
align: "center",
className: "h",
}],
loading: false, loading: false,
projectId: route.query.projectId, projectId: route.query.projectId,
isbj: storage.get("isbj") ? JSON.parse(storage.get("isbj")) : null, isbj: storage.get("isbj") ? JSON.parse(storage.get("isbj")) : null,
@@ -2047,23 +1804,23 @@ export default {
projectTaskId: "", //项目任务任务id projectTaskId: "", //项目任务任务id
//进度排行学员 //进度排行学员
rankjindu: [ rankjindu: [
{ value: "学员", label: "学员" }, {value: "学员", label: "学员"},
{ value: "小组", label: "小组" }, {value: "小组", label: "小组"},
], ],
valuestu1: "学员", valuestu1: "学员",
//进度排行阶段 //进度排行阶段
rankjieduan: [{ value: "第一阶段", label: "第一阶段" }], rankjieduan: [{value: "第一阶段", label: "第一阶段"}],
valuestu2: "第一阶段", valuestu2: "第一阶段",
//积分排行 //积分排行
rankxuefen: [ rankxuefen: [
{ value: "学员", label: "学员" }, {value: "学员", label: "学员"},
{ value: "小组", label: "小组" }, {value: "小组", label: "小组"},
], ],
valuestu3: "学员", valuestu3: "学员",
//学时排行 //学时排行
rankxueshi: [ rankxueshi: [
{ value: "学员", label: "学员" }, {value: "学员", label: "学员"},
{ value: "小组", label: "小组" }, {value: "小组", label: "小组"},
], ],
valuestu4: "学员", valuestu4: "学员",
visible: false, //时间管理 visible: false, //时间管理
@@ -2211,21 +1968,21 @@ export default {
if (text.record.rank == "1") { if (text.record.rank == "1") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/one.png")} src={require("../../assets/images/taskpage/one.png")}
/> />
); );
} else if (text.record.rank == "2") { } else if (text.record.rank == "2") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/two.png")} src={require("../../assets/images/taskpage/two.png")}
/> />
); );
} else if (text.record.rank == "3") { } else if (text.record.rank == "3") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/three.png")} src={require("../../assets/images/taskpage/three.png")}
/> />
); );
@@ -2318,21 +2075,21 @@ export default {
if (text.record.rank == "1") { if (text.record.rank == "1") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/one.png")} src={require("../../assets/images/taskpage/one.png")}
/> />
); );
} else if (text.record.rank == "2") { } else if (text.record.rank == "2") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/two.png")} src={require("../../assets/images/taskpage/two.png")}
/> />
); );
} else if (text.record.rank == "3") { } else if (text.record.rank == "3") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/three.png")} src={require("../../assets/images/taskpage/three.png")}
/> />
); );
@@ -2425,21 +2182,21 @@ export default {
if (text.record.rank == "1") { if (text.record.rank == "1") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/one.png")} src={require("../../assets/images/taskpage/one.png")}
/> />
); );
} else if (text.record.rank == "2") { } else if (text.record.rank == "2") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/two.png")} src={require("../../assets/images/taskpage/two.png")}
/> />
); );
} else if (text.record.rank == "3") { } else if (text.record.rank == "3") {
return ( return (
<img <img
style={{ width: 24, height: 24 }} style={{width: 24, height: 24}}
src={require("../../assets/images/taskpage/three.png")} src={require("../../assets/images/taskpage/three.png")}
/> />
); );
@@ -2647,7 +2404,7 @@ export default {
// 输入接入 -- start -- // 输入接入 -- start --
// 资源归属 sourceBelongId 后续给接口 // 资源归属 sourceBelongId 后续给接口
state.bum = computed(() => { state.bum = computed(() => {
console.log("基础信息 store.state.orgtreeList",store.state.orgtreeList); console.log("基础信息 store.state.orgtreeList", store.state.orgtreeList);
return store.state.orgtreeList ? store.state.orgtreeList : []; return store.state.orgtreeList ? store.state.orgtreeList : [];
}); });
@@ -2771,7 +2528,7 @@ export default {
// state.activeKey = "2"; // state.activeKey = "2";
routered.push({ routered.push({
path: `/taskadd`, path: `/taskadd`,
query: { projectId: state.projectId }, query: {projectId: state.projectId},
}); });
}; };
const tostudent = () => { const tostudent = () => {
@@ -3109,7 +2866,7 @@ export default {
title: "姓名", title: "姓名",
dataIndex: "name", dataIndex: "name",
key: "name", key: "name",
width:"20%", width: "20%",
align: "left", align: "left",
className: "h", className: "h",
// scopedSlots: { customRender: "action" }, //引入的插槽 // scopedSlots: { customRender: "action" }, //引入的插槽
@@ -3146,7 +2903,7 @@ export default {
title: "部门", title: "部门",
dataIndex: "bum", dataIndex: "bum",
key: "bum", key: "bum",
width:"10%", width: "10%",
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true, ellipsis: true,
@@ -3171,7 +2928,7 @@ export default {
title: "进度", title: "进度",
dataIndex: "progress", dataIndex: "progress",
key: "progress", key: "progress",
width:"10%", width: "10%",
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true, ellipsis: true,
@@ -3188,7 +2945,7 @@ export default {
title: "最近学习时间", title: "最近学习时间",
dataIndex: "stutime", dataIndex: "stutime",
key: "stutime", key: "stutime",
width:"20%", width: "20%",
align: "center", align: "center",
className: "h", className: "h",
// sorter: { // sorter: {
@@ -3200,7 +2957,7 @@ export default {
title: "加入方式", title: "加入方式",
dataIndex: "putin", dataIndex: "putin",
key: "putin", key: "putin",
width:"10%", width: "10%",
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true, ellipsis: true,
@@ -3209,10 +2966,10 @@ export default {
title: "操作", title: "操作",
dataIndex: "operation", dataIndex: "operation",
key: "operation", key: "operation",
width:"20%", width: "20%",
align: "center", align: "center",
className: "h", className: "h",
scopedSlots: { customRender: "action" }, //引入的插槽 scopedSlots: {customRender: "action"}, //引入的插槽
customRender: (text) => { customRender: (text) => {
// console.log(text); // console.log(text);
return ( return (
@@ -3538,7 +3295,7 @@ export default {
title: "确定清空所有学员吗?", title: "确定清空所有学员吗?",
onOk: async () => { onOk: async () => {
state.tabledata = []; state.tabledata = [];
student.studentDelAll({ id: state.projectId, type: 1 }); student.studentDelAll({id: state.projectId, type: 1});
}, },
bodyStyle: "margin-top:70%", bodyStyle: "margin-top:70%",
}); });
@@ -3587,7 +3344,7 @@ export default {
if (res.data.data.status == -5 && res.data.data.projectAuditLogDtoList !== null) { if (res.data.data.status == -5 && res.data.data.projectAuditLogDtoList !== null) {
console.log("审核信息是什么", res.data.data.projectAuditLogDtoList); console.log("审核信息是什么", res.data.data.projectAuditLogDtoList);
let dataset = res.data.data.projectAuditLogDtoList; let dataset = res.data.data.projectAuditLogDtoList;
state.passInfo = dataset[dataset.length-1]; state.passInfo = dataset[dataset.length - 1];
/** /**
for (let i = 0; i < dataset.length; i++) { for (let i = 0; i < dataset.length; i++) {
@@ -3599,7 +3356,9 @@ export default {
} }
*/ */
} }
state.stage = res.data.data.stageList.map(e => ({id: e.stageId, name: e.name}))
console.log(1111111111111)
console.log(state.stage)
let info = res.data.data.projectInfo; let info = res.data.data.projectInfo;
// let start = toDate(info.beginTime / 1000, "Y-M-D h:m"); // let start = toDate(info.beginTime / 1000, "Y-M-D h:m");
let start = info.beginTime; let start = info.beginTime;
@@ -3765,7 +3524,7 @@ export default {
//start---------项目概览 //start---------项目概览
// 获取项目概览 // 获取项目概览
const getOverview = () => { const getOverview = () => {
overview({ projectId: state.projectId }) overview({projectId: state.projectId})
.then((res) => { .then((res) => {
Object.keys(res.data.data.projectInfoOverview).forEach((item) => { Object.keys(res.data.data.projectInfoOverview).forEach((item) => {
levelList.projectInfoOverview[item] = levelList.projectInfoOverview[item] =
@@ -3824,7 +3583,7 @@ export default {
}); });
}; };
const handleChange = ({ file, fileList }) => { const handleChange = ({file, fileList}) => {
let list = []; let list = [];
if (file.status !== "uploading") { if (file.status !== "uploading") {
console.log("上传的list", fileList); console.log("上传的list", fileList);
@@ -4192,7 +3951,7 @@ export default {
} }
); );
onMounted(() => { onMounted(() => {
getStu(); // getStu();
getTaskList(); getTaskList();
getTaskInfo(); getTaskInfo();
getGroup(); getGroup();

View File

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