mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-10 11:26:45 +08:00
feat:增加小组管理页面
This commit is contained in:
1
src/api/apis.js
Normal file
1
src/api/apis.js
Normal file
@@ -0,0 +1 @@
|
||||
export const STUDENT_LIST = '/admin/student/getStudent'
|
||||
@@ -37,3 +37,9 @@ export const QueryVoteManagementDetail = (obj) => http.post('/admin/vote/manage/
|
||||
|
||||
// 根据投票任务Id获取投票任务信息
|
||||
export const QueryVoteTaskDetailById = (obj) => http.post('/voteSubmit/queryVoteTaskDetailById', obj)
|
||||
|
||||
// 直播考勤请假
|
||||
export const AttendanceLeave = (obj) => http.post('/stu/task/attendance/leave', obj)
|
||||
|
||||
// 直播考勤签到
|
||||
export const AttendanceSign = (obj) => http.post('/stu/task/attendance/sign', obj)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {reactive, ref, toRefs, watch} from "vue";
|
||||
import {isRef, reactive, ref, toRefs, unref, watch, watchEffect} from "vue";
|
||||
import {getCookieForName, throttle} from "@/api/method";
|
||||
import JSONBigInt from 'json-bigint';
|
||||
|
||||
@@ -22,7 +22,7 @@ export function useBoeApiPage(_url, params = {}, config = {
|
||||
|
||||
function fetch() {
|
||||
state.loading = true
|
||||
return request(_url, params).then(r => {
|
||||
return boeRequest(_url, params).then(r => {
|
||||
state.data = config.result(r)
|
||||
state.totalPage = config.totalPage(r)
|
||||
state.total = config.total(r)
|
||||
@@ -62,7 +62,7 @@ export function useBoeApi(_url, params = {}, config = {
|
||||
|
||||
function fetch() {
|
||||
state.loading = true
|
||||
return request(_url, params).then(r => {
|
||||
return boeRequest(_url, params).then(r => {
|
||||
state.data = config.result(r)
|
||||
state.loading = false
|
||||
})
|
||||
@@ -95,7 +95,7 @@ export function useBoeUserListPage(_url, params = {}, init = true) {
|
||||
state.loading = false
|
||||
return
|
||||
}
|
||||
return request(_url, params).then(r => {
|
||||
return boeRequest(_url, params).then(r => {
|
||||
state.data = params.page === 1 ? r.result.userInfoList : [...state.data, ...r.result.userInfoList]
|
||||
state.totalPage = r.result.totalPage
|
||||
state.total = r.result.totalElement
|
||||
@@ -110,31 +110,48 @@ export function useBoeUserListPage(_url, params = {}, init = true) {
|
||||
};
|
||||
}
|
||||
|
||||
export function usePage(_url, params = {}, init = true) {
|
||||
export function usePage(_url, params, init = true) {
|
||||
|
||||
const state = reactive({
|
||||
data: [],
|
||||
total:1,
|
||||
current:1,
|
||||
pages:1,
|
||||
loading: false
|
||||
})
|
||||
|
||||
if (isRef(params)) {
|
||||
watch(params, () => {
|
||||
fetch()
|
||||
})
|
||||
}
|
||||
|
||||
function reset(){
|
||||
state.data = []
|
||||
state.loading = false
|
||||
}
|
||||
|
||||
function fetch() {
|
||||
state.loading = true
|
||||
return request(_url, params).then(r => {
|
||||
console.log('fetch')
|
||||
console.log(r)
|
||||
state.data = r.result
|
||||
return request(unref(_url), unref(params)).then(r => {
|
||||
state.data = r.data.records
|
||||
state.current = r.data.current
|
||||
state.pages = r.data.pages
|
||||
state.total = r.data.total
|
||||
state.loading = false
|
||||
})
|
||||
}
|
||||
|
||||
if (isRef(_url)) {
|
||||
watchEffect(fetch)
|
||||
} else {
|
||||
init && fetch()
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
fetch,
|
||||
reset,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -163,7 +180,7 @@ export function useRequest(_url, params = {}, init = true) {
|
||||
};
|
||||
}
|
||||
|
||||
export async function request(_url, params) {
|
||||
export async function boeRequest(_url, params) {
|
||||
const s = _url.split(' ')
|
||||
let url = s[0]
|
||||
const method = s[1]?.toLowerCase() || 'get'
|
||||
@@ -193,23 +210,34 @@ export async function request(_url, params) {
|
||||
}).then(res => {
|
||||
return JSONBigIntStr.parse(res)
|
||||
})
|
||||
// return axios({
|
||||
// url,
|
||||
// method,
|
||||
// headers: {
|
||||
// token: getCookie('token'),
|
||||
// ...method !== 'get' ? {'Content-Type': 'application/json'} : {}
|
||||
// },
|
||||
// baseURL: '',
|
||||
// ...method !== 'get' ? {data: JSON.stringify(body)} : {}
|
||||
// }).then(resp => {
|
||||
// return resp.data
|
||||
// }).then(response => {
|
||||
// console.log(response)
|
||||
// return response
|
||||
// }).catch(e => {
|
||||
// console.log(2222)
|
||||
// console.log(e)
|
||||
// // router.push({path: '/login'})
|
||||
// })
|
||||
}
|
||||
|
||||
export async function request(_url, params) {
|
||||
const s = _url.split(' ')
|
||||
let url = s[0]
|
||||
const method = s[1]?.toLowerCase() || 'get'
|
||||
if (method === 'get') {
|
||||
let paramsArray = [];
|
||||
if (params) {
|
||||
Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key]))
|
||||
if (url.search(/\?/) === -1) {
|
||||
url += '?' + paramsArray.join('&')
|
||||
} else {
|
||||
url += '&' + paramsArray.join('&')
|
||||
}
|
||||
}
|
||||
}
|
||||
const body = method !== 'get' ? params || {} : {}
|
||||
return fetch(process.env.VUE_APP_BASE_API + url, {
|
||||
method,
|
||||
headers: {
|
||||
token: getCookieForName('token'),
|
||||
...method !== 'get' ? {'Content-Type': 'application/json'} : {}
|
||||
},
|
||||
...method !== 'get' ? {body: JSON.stringify(body)} : {}
|
||||
}).then(res => {
|
||||
return res.text()
|
||||
}).then(res => {
|
||||
return JSONBigIntStr.parse(res)
|
||||
})
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
>
|
||||
<div class="drawerMain">
|
||||
<div class="header">
|
||||
<div class="headerTitle">【{{ title }}】考勤</div>
|
||||
<div class="headerTitle">【{{ datasource.type==6?"直播":"活动" }}】考勤</div>
|
||||
<img
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="../../assets/images/basicinfo/close.png"
|
||||
@@ -18,10 +18,15 @@
|
||||
<div class="centermain">
|
||||
<div class="titl">
|
||||
<div class="endtime">
|
||||
起止时间:2022-07-21 14:00 ~ 2022-7-30 14:00
|
||||
起止时间:{{
|
||||
datasource && datasource.startTime ? datasource.startTime : "-"
|
||||
}}
|
||||
~
|
||||
{{ datasource && datasource.endTime ? datasource.endTime : "-" }}
|
||||
</div>
|
||||
<div class="endtime" style="margin-left: 64px">签到时间:14:00</div>
|
||||
<div class="endtime" style="margin-left: 40px">签退时间:21:00</div>
|
||||
|
||||
<div class="endtime" style="margin-left: 64px">签到时间:{{beginTime}}</div>
|
||||
<!-- <div class="endtime" style="margin-left: 40px">签退时间:{{endTime}}</div> -->
|
||||
</div>
|
||||
|
||||
<div class="search">
|
||||
@@ -35,7 +40,7 @@
|
||||
maxlength="20"
|
||||
/>
|
||||
</div>
|
||||
<div class="namecon" style="margin-right: 30px">
|
||||
<!-- <div class="namecon" style="margin-right: 30px">
|
||||
<div class="name">考勤:</div>
|
||||
<div class="select">
|
||||
<a-select
|
||||
@@ -48,7 +53,7 @@
|
||||
showSearch
|
||||
></a-select>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="namecon">
|
||||
<div class="name">签到状态:</div>
|
||||
<div class="select">
|
||||
@@ -65,11 +70,11 @@
|
||||
</div>
|
||||
|
||||
<div class="btns">
|
||||
<div class="btn btn1" style="margin-right: 20px">
|
||||
<div class="btn btn1" style="margin-right: 20px" @click="searchTaskList">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">搜索</div>
|
||||
</div>
|
||||
<div class="btn btn2">
|
||||
<div class="btn btn2" @click="resetTaskList">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">重置</div>
|
||||
</div>
|
||||
@@ -82,12 +87,12 @@
|
||||
<div class="btn btn2" @click="showqdModal">
|
||||
<div class="wz">批量签到</div>
|
||||
</div>
|
||||
<div class="btn btn1">
|
||||
<div class="btn btn1" @click="exportTaskStu">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- <div class="line">
|
||||
<div class="inline">
|
||||
<div class="left">
|
||||
<div class="img"></div>
|
||||
@@ -99,14 +104,14 @@
|
||||
</div>
|
||||
<div class="right" @click="clearLine">清空</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div class="tableBox" style="margin-top: 30px">
|
||||
<a-table
|
||||
style="border: 1px solid #f2f6fe"
|
||||
:columns="tableDataFunc()"
|
||||
:data-source="tableData"
|
||||
:loading="tableDataTotal === -1 ? true : false"
|
||||
:loading="tableDataTotalLoading"
|
||||
:scroll="{ x: 1300 }"
|
||||
:pagination="false"
|
||||
:row-selection="{
|
||||
@@ -142,11 +147,11 @@
|
||||
<span>您确定要批量签到吗</span>
|
||||
</div>
|
||||
<div class="del_btnbox">
|
||||
<div class="del_btn btn1">
|
||||
<div class="btnText" @click="closeqdModal">取消</div>
|
||||
<div class="del_btn btn1" @click="closeqdModal">
|
||||
<div class="btnText">取消</div>
|
||||
</div>
|
||||
<div class="del_btn btn2">
|
||||
<div class="btnText" @click="closeqdModal">确定</div>
|
||||
<div class="del_btn btn2" @click="batchSign">
|
||||
<div class="btnText">确定</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -245,15 +250,29 @@
|
||||
</a-modal>
|
||||
<!-- 二维码签到弹窗 -->
|
||||
<SignQR v-model:signQRvisible="signQRvisible" />
|
||||
|
||||
<!-- 二维码弹窗 -->
|
||||
<two-dimensional-code
|
||||
v-model:codevisible="codevisible"
|
||||
:codeInfo="codeInfo"
|
||||
:index="codeIndex"
|
||||
:type="codeType == 1 ? '课程二维码' : codeType == 2 ? '签到二维码' : ''"
|
||||
/>
|
||||
<!-- 二维码弹窗 -->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { toRefs, reactive } from "vue";
|
||||
import SignQR from "./SignQR.vue";
|
||||
import TwoDimensionalCode from "../../components/TwoDimensionalCode";
|
||||
import * as api from "../../api/indexTaskManage";
|
||||
import { toDate } from "../../api/method";
|
||||
import { message } from "ant-design-vue";
|
||||
export default {
|
||||
name: "ActiveAttendance",
|
||||
components: {
|
||||
SignQR,
|
||||
TwoDimensionalCode
|
||||
},
|
||||
props: {
|
||||
AAvisible: {
|
||||
@@ -264,6 +283,16 @@ export default {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
datasource: {
|
||||
type: Object,
|
||||
default: function () {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
types: {
|
||||
type: Number,
|
||||
default: null,
|
||||
}
|
||||
},
|
||||
|
||||
setup(props, ctx) {
|
||||
@@ -284,46 +313,26 @@ export default {
|
||||
projectNameList: [
|
||||
{
|
||||
id: 1,
|
||||
value: "项目一",
|
||||
label: "项目一",
|
||||
value: "1",
|
||||
label: "签到",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
value: "项目二",
|
||||
label: "项目二",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
value: "项目三",
|
||||
label: "项目三",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
value: "项目四",
|
||||
label: "项目四",
|
||||
},
|
||||
value: "2",
|
||||
label: "请假",
|
||||
}
|
||||
],
|
||||
projectNameList2: [
|
||||
{
|
||||
id: 1,
|
||||
value: "项目一",
|
||||
label: "项目一",
|
||||
value: "1",
|
||||
label: "正常",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
value: "项目二",
|
||||
label: "项目二",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
value: "项目三",
|
||||
label: "项目三",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
value: "项目四",
|
||||
label: "项目四",
|
||||
},
|
||||
value: "2",
|
||||
label: "异常",
|
||||
}
|
||||
],
|
||||
selectedRowKeys: [],
|
||||
tableData: [
|
||||
@@ -339,72 +348,7 @@ export default {
|
||||
signIn: false, //签到
|
||||
signOut: false, //签退
|
||||
leave: false, //请假
|
||||
},
|
||||
{
|
||||
key: 2,
|
||||
name: "张三",
|
||||
com: "产研部",
|
||||
gang: "产品经理",
|
||||
cur: "2022-10-31 23:12",
|
||||
jin: "-",
|
||||
time: "签到/签退",
|
||||
state: "正常",
|
||||
signIn: true, //签到
|
||||
signOut: true, //签退
|
||||
leave: false, //请假
|
||||
},
|
||||
{
|
||||
key: 3,
|
||||
name: "张三",
|
||||
com: "产研部",
|
||||
gang: "产品经理",
|
||||
cur: "2022-10-31 23:12",
|
||||
jin: "2022-10-31 23:12",
|
||||
time: "迟到",
|
||||
state: "异常",
|
||||
signIn: false, //签到
|
||||
signOut: true, //签退
|
||||
leave: false, //请假
|
||||
},
|
||||
{
|
||||
key: 4,
|
||||
name: "张三",
|
||||
com: "产研部",
|
||||
gang: "产品经理",
|
||||
cur: "2022-10-31 23:12",
|
||||
jin: "2022-10-31 23:12",
|
||||
time: "早退",
|
||||
state: "异常",
|
||||
signIn: true, //签到
|
||||
signOut: false, //签退
|
||||
leave: false, //请假
|
||||
},
|
||||
{
|
||||
key: 5,
|
||||
name: "张三",
|
||||
com: "产研部",
|
||||
gang: "产品经理",
|
||||
cur: "2022-10-31 23:12",
|
||||
jin: "2022-10-31 23:12",
|
||||
time: "签到/签退",
|
||||
state: "正常",
|
||||
signIn: true, //签到
|
||||
signOut: true, //签退
|
||||
leave: false, //请假
|
||||
},
|
||||
{
|
||||
key: 6,
|
||||
name: "张三",
|
||||
com: "产研部",
|
||||
gang: "产品经理",
|
||||
cur: "2022-10-31 23:12",
|
||||
jin: "2022-10-31 23:12",
|
||||
time: "签到/签退",
|
||||
state: "正常",
|
||||
signIn: true, //签到
|
||||
signOut: true, //签退
|
||||
leave: false, //请假
|
||||
},
|
||||
}
|
||||
],
|
||||
options: [
|
||||
{
|
||||
@@ -420,6 +364,16 @@ export default {
|
||||
value: "Orange",
|
||||
},
|
||||
],
|
||||
tableDataTotalLoading: true, // 表格loading加载配置
|
||||
beginTime: null, //签到开始时间
|
||||
endTime: null, //签到结束时间
|
||||
selectedStudents:[],
|
||||
projectName:undefined,
|
||||
projectName2:undefined,
|
||||
codeType: null,
|
||||
codeIndex: null,
|
||||
codeInfo: null, //二维码内容
|
||||
codevisible: false, //二维码弹窗
|
||||
});
|
||||
const selectProjectName = (value, index) => {
|
||||
console.log("value", value, index);
|
||||
@@ -434,64 +388,238 @@ export default {
|
||||
const showEntryScore = () => {
|
||||
state.Evisible = true;
|
||||
};
|
||||
const onSelectChange = (selectedRowKeys) => {
|
||||
const onSelectChange = (selectedRowKeys, e) => {
|
||||
console.log("selectedRowKeys changed: ", selectedRowKeys);
|
||||
state.selectedRowKeys = selectedRowKeys;
|
||||
let array = [];
|
||||
for (let i = 0; i < e.length; i++) {
|
||||
array.push(e[i].studentId);
|
||||
}
|
||||
state.selectedStudents = array;
|
||||
};
|
||||
|
||||
// 计算签到时间
|
||||
const isSignClick = () => {
|
||||
console.log("计算签到时间", props.datasource);
|
||||
let beginTime = new Date(props.datasource.startTime).getTime();
|
||||
let endTime = !props.datasource.afterStart
|
||||
? new Date(props.datasource.endTime).getTime()
|
||||
: new Date(props.datasource.startTime).getTime();
|
||||
|
||||
if (props.datasource.beforeStart && props.datasource.afterStart) {
|
||||
//有开始前有开始后
|
||||
beginTime = beginTime - props.datasource.beforeStart * 60 * 1000;
|
||||
endTime = endTime + props.datasource.afterStart * 60 * 1000;
|
||||
console.log("1111", beginTime, endTime);
|
||||
} else if (props.datasource.beforeStart && !props.datasource.afterStart) {
|
||||
//只有开始前无开始后
|
||||
beginTime = beginTime - props.datasource.beforeStart * 60 * 1000;
|
||||
console.log("11112222", beginTime);
|
||||
} else if (!props.datasource.beforeStart && props.datasource.afterStart) {
|
||||
//无开始前有开始后
|
||||
endTime = endTime + props.datasource.afterStart * 60 * 1000;
|
||||
console.log("1111333", endTime);
|
||||
}
|
||||
|
||||
state.beginTime = toDate(beginTime / 1000, "Y/M/D h:m:s");
|
||||
state.endTime = toDate(endTime / 1000, "Y/M/D h:m:s");
|
||||
console.log("beginTime,endTime", state.beginTime, state.endTime);
|
||||
};
|
||||
|
||||
const afterVisibleChange = (bol) => {
|
||||
if (bol == true) {
|
||||
console.log("当前是什么类型", props.datasource.type);
|
||||
state.tableDataTotalLoading = true;
|
||||
getTableData();
|
||||
isSignClick();
|
||||
}
|
||||
};
|
||||
|
||||
const getTableData = () => {
|
||||
let arr = state.tableData;
|
||||
arr.map((value) => {
|
||||
// console.log("value", value);
|
||||
value.opacation = (
|
||||
<div class="opa">
|
||||
<a-checkbox
|
||||
checked={value.signIn}
|
||||
onChange={(e) => {
|
||||
console.log("点击签到", e);
|
||||
showsingleqdModal();
|
||||
}}
|
||||
>
|
||||
签到
|
||||
</a-checkbox>
|
||||
<a-checkbox
|
||||
checked={value.signOut}
|
||||
onChange={(e) => {
|
||||
console.log("点击签退", e);
|
||||
showsingleqtModal();
|
||||
}}
|
||||
>
|
||||
签退
|
||||
</a-checkbox>
|
||||
<a-checkbox
|
||||
checked={value.leave}
|
||||
onChange={(e) => {
|
||||
console.log("点击请假", e);
|
||||
showsingleqjModal();
|
||||
}}
|
||||
>
|
||||
请假
|
||||
</a-checkbox>
|
||||
</div>
|
||||
);
|
||||
console.log('当前是项目还是路径图 1 路径图 2 项目', props.types)
|
||||
if ( props.datasource.type == 6 && props.types==1 || props.datasource.type == 9 && props.types==1) {
|
||||
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
|
||||
console.log("我是传递的查询参数", {
|
||||
pageNo: state.currentPage,
|
||||
pageSize: state.pageSize,
|
||||
currentStageId: props.datasource.chapterId,
|
||||
type: 2,
|
||||
pid: props.datasource.routerId,
|
||||
taskId: props.datasource.routerTaskId,
|
||||
taskType: props.datasource.type,
|
||||
status: state.projectName,
|
||||
studentName: state.name,
|
||||
signStatus: state.projectName2
|
||||
});
|
||||
state.tableData = arr;
|
||||
api
|
||||
.AssessmentManagementMessage({
|
||||
pageNo: state.currentPage,
|
||||
pageSize: state.pageSize,
|
||||
currentStageId: props.datasource.chapterId,
|
||||
type: 2, // 1项目 2 路径
|
||||
pid: props.datasource.routerId,
|
||||
taskId: props.datasource.routerTaskId,
|
||||
taskType: props.datasource.type,
|
||||
status: state.projectName,
|
||||
studentName: state.name,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
if (res.status == 200) {
|
||||
let keyarr = []
|
||||
for(let i =0;i<res.data.data.records.length;i++){
|
||||
res.data.data.records[i].key = res.data.data.records[i].studentId
|
||||
keyarr.push( res.data.data.records[i])
|
||||
}
|
||||
state.tableData = keyarr;
|
||||
state.tableDataTotal = res.data.data.total;
|
||||
state.tableDataTotalLoading = false;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
state.tableDataTotalLoading = false;
|
||||
state.tableData = [];
|
||||
});
|
||||
} else if ( props.datasource.type == 6 && props.types==2 || props.datasource.type == 9 && props.types==2) {
|
||||
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
|
||||
console.log("我是传递的查询参数", {
|
||||
pageNo: state.currentPage,
|
||||
pageSize: state.pageSize,
|
||||
currentStageId: props.datasource.stageId,
|
||||
type: 1,
|
||||
pid: props.datasource.projectId,
|
||||
taskId: props.datasource.projectTaskId,
|
||||
taskType: props.datasource.type,
|
||||
status: state.projectName,
|
||||
studentName: state.name,
|
||||
signStatus: state.projectName2
|
||||
});
|
||||
api
|
||||
.AssessmentManagementMessage({
|
||||
pageNo: state.currentPage,
|
||||
pageSize: state.pageSize,
|
||||
currentStageId: props.datasource.stageId,
|
||||
type: 1, // 1项目 2 路径
|
||||
pid: props.datasource.projectId,
|
||||
taskId: props.datasource.projectTaskId,
|
||||
taskType: props.datasource.type,
|
||||
status: state.projectName,
|
||||
studentName: state.name,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
if (res.status == 200) {
|
||||
let keyarr = []
|
||||
for(let i =0;i<res.data.data.records.length;i++){
|
||||
res.data.data.records[i].key = res.data.data.records[i].studentId
|
||||
keyarr.push( res.data.data.records[i])
|
||||
}
|
||||
state.tableData = keyarr;
|
||||
state.tableDataTotal = res.data.data.total;
|
||||
state.tableDataTotalLoading = false;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
state.tableDataTotalLoading = false;
|
||||
state.tableData = [];
|
||||
});
|
||||
} else{
|
||||
state.tableDataTotalLoading = false;
|
||||
state.tableData = [];
|
||||
}
|
||||
|
||||
// let arr = state.tableData;
|
||||
// arr.map((value) => {
|
||||
// // console.log("value", value);
|
||||
// value.opacation = (
|
||||
// <div class="opa">
|
||||
// <a-checkbox
|
||||
// checked={value.signIn}
|
||||
// onChange={(e) => {
|
||||
// console.log("点击签到", e);
|
||||
// showsingleqdModal();
|
||||
// }}
|
||||
// >
|
||||
// 签到
|
||||
// </a-checkbox>
|
||||
// <a-checkbox
|
||||
// checked={value.signOut}
|
||||
// onChange={(e) => {
|
||||
// console.log("点击签退", e);
|
||||
// showsingleqtModal();
|
||||
// }}
|
||||
// >
|
||||
// 签退
|
||||
// </a-checkbox>
|
||||
// <a-checkbox
|
||||
// checked={value.leave}
|
||||
// onChange={(e) => {
|
||||
// console.log("点击请假", e);
|
||||
// showsingleqjModal();
|
||||
// }}
|
||||
// >
|
||||
// 请假
|
||||
// </a-checkbox>
|
||||
// </div>
|
||||
// );
|
||||
// });
|
||||
// state.tableData = arr;
|
||||
};
|
||||
|
||||
//批量签到
|
||||
const batchSign = () => {
|
||||
let obj = {
|
||||
courseId: Number(props.datasource.courseId),
|
||||
routerId: Number(props.datasource.routerId),
|
||||
ids: state.selectedStudents,
|
||||
taskId: Number(props.datasource.routerTaskId),
|
||||
taskType: Number(props.datasource.type),
|
||||
type: 1,
|
||||
};
|
||||
console.log(obj)
|
||||
state.tableDataTotalLoading = true;
|
||||
|
||||
api
|
||||
.AttendanceSign(obj)
|
||||
.then((res) => {
|
||||
console.log("签到结果", res, obj);
|
||||
if (res.data.code === 200) {
|
||||
message.destroy();
|
||||
message.success("批量签到成功");
|
||||
state.qdModal = false;
|
||||
state.selectedRowKeys = [];
|
||||
state.selectedStudents = [];
|
||||
getTableData();
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("签到失败", err, obj);
|
||||
});
|
||||
};
|
||||
|
||||
const tableDataFunc = () => {
|
||||
const columns = [
|
||||
{
|
||||
title: "工号",
|
||||
dataIndex: "workNum",
|
||||
key: "workNum",
|
||||
dataIndex: "studentUserNo",
|
||||
key: "studentUserNo",
|
||||
width: 50,
|
||||
align: "center",
|
||||
className: "h",
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.studentUserNo?text.record.studentUserNo:"-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "姓名",
|
||||
dataIndex: "name",
|
||||
key: "name",
|
||||
dataIndex: "studentName",
|
||||
key: "studentName",
|
||||
width: 50,
|
||||
align: "center",
|
||||
className: "classify",
|
||||
@@ -499,18 +627,26 @@ export default {
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.name}</span>
|
||||
<span> {text.record.studentName?text.record.studentName:"-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "所在部门",
|
||||
dataIndex: "com",
|
||||
key: "com",
|
||||
dataIndex: "studentDepartName",
|
||||
key: "studentDepartName",
|
||||
width: 50,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.studentDepartName?text.record.studentDepartName:"-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "所在岗位",
|
||||
@@ -519,38 +655,66 @@ export default {
|
||||
width: 50,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.studentJobName?text.record.studentJobName:"-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "签到时间",
|
||||
dataIndex: "cur",
|
||||
key: "cur",
|
||||
dataIndex: "signTime",
|
||||
key: "signTime",
|
||||
width: 110,
|
||||
align: "center",
|
||||
className: "h",
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.signTime?text.record.signTime:"-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
{
|
||||
title: "签退时间",
|
||||
dataIndex: "jin",
|
||||
key: "jin",
|
||||
width: 110,
|
||||
align: "center",
|
||||
className: "h",
|
||||
},
|
||||
{
|
||||
title: "考勤",
|
||||
dataIndex: "time",
|
||||
key: "time",
|
||||
dataIndex: "signStatus",
|
||||
key: "signStatus",
|
||||
width: 50,
|
||||
align: "center",
|
||||
className: "h",
|
||||
customRender: (text) => {
|
||||
// console.log("text", text);
|
||||
return (
|
||||
<div class="racona">
|
||||
<span>
|
||||
{text.record.signStatus
|
||||
? "签到"
|
||||
: text.record.leaveStatus
|
||||
? "请假"
|
||||
: "-"}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "签到状态",
|
||||
dataIndex: "state",
|
||||
key: "state",
|
||||
dataIndex: "signStatus",
|
||||
key: "signStatus",
|
||||
width: 50,
|
||||
align: "center",
|
||||
className: "h",
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span>{text.record.signStatus == null && new Date().getTime() > new Date(state.endTime).getTime() ? "异常" : text.record.signStatus ? "正常" : text.record.leaveStatus ? "异常" : text.record.signStatus == null ? "-" : "异常"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "考勤情况",
|
||||
@@ -559,18 +723,118 @@ export default {
|
||||
key: "opacation",
|
||||
width: 130,
|
||||
align: "center",
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div class="opa" style='display:flex;justify-content:center;align-items:center;'>
|
||||
<div
|
||||
onClick={()=>{
|
||||
console.log("点击签到", value);
|
||||
{/* showsingleqdModal(); */}
|
||||
{/* AttendanceSign */}
|
||||
|
||||
let obj = {
|
||||
courseId: Number(props.datasource.courseId),
|
||||
routerId: Number(props.datasource.routerId),
|
||||
ids: [value.record.studentId],
|
||||
taskId: Number(props.datasource.routerTaskId),
|
||||
taskType: Number(props.datasource.type),
|
||||
type: 1,
|
||||
};
|
||||
|
||||
let obj2 = {
|
||||
courseId: Number(props.datasource.courseId),
|
||||
routerId: Number(props.datasource.projectId),
|
||||
ids: [value.record.studentId],
|
||||
taskId: Number(props.datasource.projectTaskId),
|
||||
taskType: Number(props.datasource.type),
|
||||
type: 2,
|
||||
};
|
||||
console.log(obj, obj2)
|
||||
state.tableDataTotalLoading = true;
|
||||
api.AttendanceSign(props.types==1? obj : obj2).then(res=>{
|
||||
console.log('res----签到是否成功',res)
|
||||
message.destroy()
|
||||
message.info('签到成功')
|
||||
getTableData();
|
||||
}).catch(err=>{
|
||||
state.tableDataTotalLoading = false;
|
||||
console.log(err)
|
||||
})
|
||||
}}
|
||||
style="display:flex;justify-content:center;align-items:center;margin-right:12px;cursor:pointer;">
|
||||
{value.signStatus?
|
||||
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;display:flex;justify-content:center;align-items:center;'>
|
||||
<div style='width:8px;height:8px;border-radius:8px;background:#4ea6ff;'></div>
|
||||
</div>:
|
||||
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;'></div>
|
||||
}
|
||||
<div>签到</div>
|
||||
</div>
|
||||
<div
|
||||
onClick={()=>{
|
||||
console.log("点击请假", value);
|
||||
{/* showsingleqjModal(); */}
|
||||
|
||||
{/* AttendanceLeave */}
|
||||
let obj = {
|
||||
courseId: Number(props.datasource.courseId),
|
||||
routerId: Number(props.datasource.routerId),
|
||||
ids: [value.record.studentId],
|
||||
taskId: Number(props.datasource.routerTaskId),
|
||||
taskType: Number(props.datasource.type),
|
||||
type: 1,
|
||||
};
|
||||
let obj2 = {
|
||||
courseId: Number(props.datasource.courseId),
|
||||
routerId: Number(props.datasource.projectId),
|
||||
ids: [value.record.studentId],
|
||||
taskId: Number(props.datasource.projectTaskId),
|
||||
taskType: Number(props.datasource.type),
|
||||
type: 2,
|
||||
};
|
||||
console.log(obj, obj2)
|
||||
state.tableDataTotalLoading = true;
|
||||
api.AttendanceLeave(props.types==1? obj : obj2).then(res=>{
|
||||
console.log('res----请假是否成功',res)
|
||||
message.destroy()
|
||||
message.info('请假成功')
|
||||
getTableData();
|
||||
}).catch(err=>{
|
||||
state.tableDataTotalLoading = false;
|
||||
console.log(err)
|
||||
})
|
||||
}}
|
||||
style="display:flex;justify-content:center;align-items:center;cursor:pointer;">
|
||||
{value.leaveStatus?
|
||||
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;display:flex;justify-content:center;align-items:center;'>
|
||||
<div style='width:8px;height:8px;border-radius:8px;background:#4ea6ff;'></div>
|
||||
</div>:
|
||||
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;'></div>
|
||||
}
|
||||
<div>请假</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
},
|
||||
];
|
||||
return columns;
|
||||
};
|
||||
|
||||
// 清空所选
|
||||
const clearLine = () => {
|
||||
state.selectedRowKeys = [];
|
||||
};
|
||||
const showqdModal = () => {
|
||||
if(state.selectedStudents.length==0){
|
||||
message.destroy()
|
||||
message.error('请选择学员')
|
||||
return
|
||||
}
|
||||
state.qdModal = true;
|
||||
};
|
||||
const closeqdModal = () => {
|
||||
state.selectedRowKeys = [];
|
||||
state.qdModal = false;
|
||||
};
|
||||
const showsingleqdModal = () => {
|
||||
@@ -592,8 +856,78 @@ export default {
|
||||
state.singleqjModal = false;
|
||||
};
|
||||
const signQR = () => {
|
||||
state.signQRvisible = true;
|
||||
state.codevisible = true;
|
||||
state.codeInfo = {
|
||||
title: "【签到】二维码",
|
||||
name: props.datasource?.name,
|
||||
url:
|
||||
process.env.VUE_APP_BASE_API +
|
||||
`/admin/student/studentSign?taskId=${
|
||||
props.datasource.routerTaskId
|
||||
}&taskType=${props.datasource.type}&type=${2}`,
|
||||
};
|
||||
console.log("codeInfo", state.codeInfo);
|
||||
state.codeIndex = 0;
|
||||
state.codeType = 1;
|
||||
};
|
||||
|
||||
//搜索学员
|
||||
const searchTaskList = () => {
|
||||
state.tableDataTotalLoading = true;
|
||||
state.currentPage = 1;
|
||||
getTableData();
|
||||
};
|
||||
|
||||
// 重置按钮
|
||||
function resetTaskList() {
|
||||
state.selectedRowKeys = [];
|
||||
state.tableDataTotalLoading = true;
|
||||
state.currentPage = 1;
|
||||
state.name = null;
|
||||
state.projectName2 = undefined;
|
||||
state.tableDataTotal = -1;
|
||||
state.tableDataTotal2 = 0;
|
||||
getTableData();
|
||||
}
|
||||
|
||||
// 导出数据
|
||||
function exportTaskStu() {
|
||||
console.log("props.datasource", props.datasource);
|
||||
if(props.types==1){
|
||||
window.open(
|
||||
`${
|
||||
process.env.VUE_APP_BASE_API
|
||||
}/admin/student/exportTaskStudent?currentStageId=${
|
||||
props.datasource.chapterId
|
||||
}&type=2&pid=${props.datasource.courseId}&thirdType=1&taskId=${props.datasource.routerTaskId}`
|
||||
);
|
||||
}else{
|
||||
window.open(
|
||||
`${
|
||||
process.env.VUE_APP_BASE_API
|
||||
}/admin/student/exportTaskStudent?currentStageId=${
|
||||
props.datasource.stageId
|
||||
}&type=1&pid=${props.datasource.courseId}&thirdType=1&taskId=${props.datasource.projectTaskId}`
|
||||
);
|
||||
}
|
||||
|
||||
// api
|
||||
// .exportTaskStudent({
|
||||
// pageNo: state.currentPage,
|
||||
// pageSize: state.pageSize,
|
||||
// currentStageId: props.datasource.stageId,
|
||||
// currentTaskId: props.datasource.projectTaskId,
|
||||
// type: 1,
|
||||
// pid: props.datasource.projectId,
|
||||
// })
|
||||
// .then((res) => {
|
||||
// console.log(res);
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// console.log(err);
|
||||
// });
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
selectProjectName,
|
||||
@@ -612,6 +946,11 @@ export default {
|
||||
closesingleqtModal,
|
||||
closesingleqjModal,
|
||||
signQR,
|
||||
afterVisibleChange,
|
||||
batchSign,
|
||||
searchTaskList,
|
||||
resetTaskList,
|
||||
exportTaskStu
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -42,9 +42,14 @@
|
||||
v-model:value="value.name"
|
||||
style="border-radius: 8px; height: 40px"
|
||||
/>
|
||||
<div class="peopleNum">{{ peopleNum2 }}</div>
|
||||
<a-input-number
|
||||
:min="1"
|
||||
:precision="0"
|
||||
style="width: 64px; height: 40px; border-radius: 8px"
|
||||
v-model:value="peopleNum"
|
||||
/>
|
||||
<span style="margin-left: 3px">人</span>
|
||||
<div class="delete">删除</div>
|
||||
<div class="delete" @click="deleteGroup(value)">删除</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -110,6 +115,7 @@ export default {
|
||||
let arr = [];
|
||||
for (let i = 0; i < state.groupNum; i++) {
|
||||
let obj = {
|
||||
key: i,
|
||||
name: "",
|
||||
number: state.peopleNum,
|
||||
};
|
||||
@@ -118,10 +124,19 @@ export default {
|
||||
state.groupNum2 = arr;
|
||||
state.peopleNum2 = state.peopleNum;
|
||||
};
|
||||
//删除单个小组
|
||||
const deleteGroup = (item) => {
|
||||
for (let i = 0; i < state.groupNum2.length; i++) {
|
||||
if (item.key === state.groupNum2[i].key) {
|
||||
state.groupNum2.splice(i, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
//添加小组
|
||||
const addGroup = () => {
|
||||
console.log("state.groupNum2", state.groupNum2);
|
||||
};
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
afterVisibleChange,
|
||||
@@ -130,6 +145,7 @@ export default {
|
||||
showAddGroup,
|
||||
addGroup,
|
||||
// change,
|
||||
deleteGroup,
|
||||
};
|
||||
},
|
||||
};
|
||||
@@ -169,6 +185,12 @@ export default {
|
||||
}
|
||||
}
|
||||
.main {
|
||||
.ant-input-number-input {
|
||||
height: 38px;
|
||||
}
|
||||
.ant-input-number {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineEmits, defineProps, ref, watch } from "vue";
|
||||
import { request, useBoeApi } from "@/api/request";
|
||||
import {boeRequest, useBoeApi} from "@/api/request";
|
||||
import { ORG_CHILD_LIST, ORG_LIST } from "@/api/ThirdApi";
|
||||
|
||||
const props = defineProps({
|
||||
@@ -62,7 +62,7 @@ watch(props, () => {
|
||||
});
|
||||
|
||||
function onLoadData(treeNode) {
|
||||
return request(ORG_CHILD_LIST, { keyword: "", orgId: treeNode.id }).then(
|
||||
return boeRequest(ORG_CHILD_LIST, { keyword: "", orgId: treeNode.id }).then(
|
||||
(r) => {
|
||||
treeNode.dataRef.treeChildList = r.result.directChildList;
|
||||
options.value = [...options.value];
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<div class="drawerMain" id="ProjCheckship" style="">
|
||||
<div class="header">
|
||||
<div class="headerTitle">
|
||||
{{ {1: "添加学员", 2: "添加学员", 3: "添加学员"}[type] || "" }}
|
||||
{{ {1: "添加学员", 2: "添加学员", 3: "添加学员",4: "查看权",5: "管理权"}[type] || "" }}
|
||||
</div>
|
||||
<img
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
@@ -406,7 +406,7 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import {computed, defineEmits, defineProps, ref, watch} from "vue";
|
||||
import {request, useBoeApi, useBoeApiPage} from "@/api/request";
|
||||
import {boeRequest, useBoeApi, useBoeApiPage} from "@/api/request";
|
||||
import {
|
||||
AUDIENCE_LIST,
|
||||
ORG_CHILD_LIST,
|
||||
@@ -616,7 +616,7 @@ const closeDrawer = () => {
|
||||
};
|
||||
|
||||
function onLoadData(treeNode) {
|
||||
return request(ORG_CHILD_LIST, {keyword: "", orgId: treeNode.id}).then(
|
||||
return boeRequest(ORG_CHILD_LIST, {keyword: "", orgId: treeNode.id}).then(
|
||||
(r) => {
|
||||
treeNode.dataRef.treeChildList = r.result.directChildList;
|
||||
treeData.value = [...treeData.value];
|
||||
@@ -625,7 +625,7 @@ function onLoadData(treeNode) {
|
||||
}
|
||||
|
||||
function onLoadOrgData(treeNode) {
|
||||
return request(ORG_CHILD_LIST, {keyword: "", orgId: treeNode.id}).then(
|
||||
return boeRequest(ORG_CHILD_LIST, {keyword: "", orgId: treeNode.id}).then(
|
||||
(r) => {
|
||||
treeNode.dataRef.treeChildList = r.result.directChildList;
|
||||
treeOrgData.value = [...treeOrgData.value];
|
||||
|
||||
460
src/components/student/TableModelStudent.vue
Normal file
460
src/components/student/TableModelStudent.vue
Normal file
@@ -0,0 +1,460 @@
|
||||
<template>
|
||||
<div class="CommonStudent">
|
||||
<a-drawer
|
||||
:visible="visiable"
|
||||
class="drawerStyle ProjCheckship"
|
||||
placement="right"
|
||||
width="40%"
|
||||
>
|
||||
<div class="drawerMain" id="ProjCheckship" style="">
|
||||
<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="TableStudent">
|
||||
<a-row
|
||||
type="flex"
|
||||
gutter="12"
|
||||
style="padding-left: 20px; margin-right: 0px"
|
||||
>
|
||||
<a-col>
|
||||
<a-form-item title="姓名:">
|
||||
<a-input
|
||||
class="cus-input"
|
||||
v-model:value="searchParams.studentName"
|
||||
placeholder="请输入姓名"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col>
|
||||
<a-button
|
||||
class="cus-btn"
|
||||
style="background: #4ea6ff; color: #fff; width: 100px"
|
||||
@click="searchStu"
|
||||
>
|
||||
<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">
|
||||
<template #icon><img style="margin-right: 10px" src="../../assets/images/leveladd/reset.png"/>
|
||||
</template>
|
||||
重置
|
||||
</a-button>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div style="margin-top: 20px">
|
||||
<a-table
|
||||
:columns="columns"
|
||||
:data-source="studentList"
|
||||
:pagination="stuPagination"
|
||||
:loading="loading"
|
||||
row-key="id"
|
||||
>
|
||||
<template #action="{ record }">
|
||||
<a-space :size="2">
|
||||
<slot name="extension" v-bind:data="{ record }"></slot>
|
||||
<a-button @click="del(record.id)" type="link" danger>删除</a-button>
|
||||
</a-space>
|
||||
</template>
|
||||
</a-table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnn">
|
||||
<button class="btn1" @click="closeDrawer">取消</button>
|
||||
<button class="btn2" @click="closeDrawer">确定</button>
|
||||
</div>
|
||||
</div>
|
||||
</a-drawer>
|
||||
<div @click="openDrawer">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {computed, createVNode, defineProps, ref, watch} from "vue";
|
||||
import {usePage} from "@/api/request";
|
||||
import {STUDENT_LIST} from "@/api/apis";
|
||||
import {delStudentList} from "@/api/index1";
|
||||
import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
|
||||
import {Modal} from "ant-design-vue";
|
||||
|
||||
const props = defineProps({
|
||||
type: Number,
|
||||
id: String,
|
||||
stage: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
types: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
});
|
||||
|
||||
const visiable = ref(false);
|
||||
|
||||
const initParams = {
|
||||
studentName: "",
|
||||
page: 1,
|
||||
pageSize: 10,
|
||||
type: props.type || '',
|
||||
types: props.types,
|
||||
pid: props.id || '',
|
||||
}
|
||||
|
||||
const searchParams = ref(initParams)
|
||||
|
||||
const columns = ref([
|
||||
{
|
||||
title: "姓名",
|
||||
dataIndex: "studentName",
|
||||
key: "studentName",
|
||||
width: 30,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "工号",
|
||||
dataIndex: "studentUserNo",
|
||||
key: "studentUserNo",
|
||||
width: 50,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "部门",
|
||||
dataIndex: "studentDepartName",
|
||||
key: "studentDepartName",
|
||||
width: 80,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "权限",
|
||||
dataIndex: "type",
|
||||
key: "type",
|
||||
width: 30,
|
||||
align: "center",
|
||||
customRender: ({record: {type}}) => ({4: "查看权", 5: "管理权", 6: "归属权"}[type]),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "operation",
|
||||
key: "operation",
|
||||
width: 50,
|
||||
align: "center",
|
||||
slots: {customRender: "action"},
|
||||
},
|
||||
])
|
||||
|
||||
const {data: studentList, fetch: searchStu, total, loading} = usePage(STUDENT_LIST, searchParams.value)
|
||||
|
||||
const stuPagination = computed(() => ({
|
||||
total: total,
|
||||
showSizeChanger: false,
|
||||
current: searchParams.value.page,
|
||||
pageSize: searchParams.value.pageSize,
|
||||
onChange: changePagination,
|
||||
}));
|
||||
const openDrawer = () => {
|
||||
visiable.value = true;
|
||||
};
|
||||
|
||||
const changePagination = (page) => {
|
||||
searchParams.value.page = page;
|
||||
searchStu();
|
||||
};
|
||||
|
||||
function del(id) {
|
||||
Modal.confirm({
|
||||
title: () => '确定删除?',
|
||||
icon: () => createVNode(ExclamationCircleOutlined),
|
||||
content: () => '数据删除后不可恢复!',
|
||||
okText: () => '确定',
|
||||
okType: 'danger',
|
||||
cancelText: () => '取消',
|
||||
onOk() {
|
||||
id && delStudentList({ids: [id]}).then(() => searchStu())
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const closeDrawer = () => {
|
||||
visiable.value = false;
|
||||
};
|
||||
|
||||
function reset(){
|
||||
searchParams.value = initParams
|
||||
searchStu()
|
||||
}
|
||||
|
||||
watch(visiable, () => {
|
||||
visiable.value && searchStu()
|
||||
searchParams.value = initParams
|
||||
});
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.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;
|
||||
}
|
||||
|
||||
.CommonStudent {
|
||||
.ant-btn-primary {
|
||||
background-color: #4ea6ff !important;
|
||||
}
|
||||
|
||||
.cus-select {
|
||||
height: 40px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.tableBox .ant-table-row .ant-table-cell {
|
||||
height: 48px;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #4f5156;
|
||||
line-height: 29px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.tableBox .ant-table-thead tr th {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.ant-tabs-tabpane {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.ant-tabs {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.right1 {
|
||||
border-left: 1px solid #f2f6fe;
|
||||
margin-left: 20px;
|
||||
|
||||
.onerow {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-right: 40px;
|
||||
flex-wrap: wrap;
|
||||
|
||||
width: 100%;
|
||||
|
||||
.onleft {
|
||||
display: flex;
|
||||
text-align: center;
|
||||
|
||||
.already {
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
margin-left: 32px;
|
||||
white-space: nowrap;
|
||||
// margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.count {
|
||||
color: #4ea6ff;
|
||||
font-size: 16px;
|
||||
margin: 0 6px;
|
||||
}
|
||||
|
||||
.peo {
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.clbox {
|
||||
margin-right: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
width: 104px;
|
||||
height: 32px;
|
||||
border-radius: 4px;
|
||||
background: #4ea6ff;
|
||||
|
||||
.colose {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
// border-radius: 8px;
|
||||
// background: #ffffff;
|
||||
// position: relative;
|
||||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||||
background-size: 100%;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.allclear {
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.selecteds {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-left: 32px;
|
||||
|
||||
.person {
|
||||
width: 100%;
|
||||
margin-top: 20px;
|
||||
border-top: 1px solid #f2f6fe;
|
||||
}
|
||||
|
||||
.chose {
|
||||
width: 64px;
|
||||
height: 24px;
|
||||
margin-top: 25px;
|
||||
margin-right: 25px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 2px;
|
||||
border: 1px solid rgba(56, 139, 225, 1);
|
||||
color: rgba(56, 139, 225, 1);
|
||||
font-size: 12px;
|
||||
position: relative;
|
||||
|
||||
.ch {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||||
right: -8px;
|
||||
top: -8px;
|
||||
}
|
||||
}
|
||||
|
||||
.ifsw {
|
||||
display: flex;
|
||||
align-items: end;
|
||||
justify-content: center;
|
||||
color: #4ea6ff;
|
||||
}
|
||||
|
||||
.sw {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: justify;
|
||||
color: #4ea6ff;
|
||||
margin-top: 23px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.dept {
|
||||
width: 100%;
|
||||
margin-top: 30px;
|
||||
border-top: 1px solid #f2f6fe;
|
||||
}
|
||||
|
||||
.chose1 {
|
||||
//width: 90px;
|
||||
height: 24px;
|
||||
margin-top: 25px;
|
||||
margin-right: 25px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 2px;
|
||||
border: 1px solid rgba(56, 139, 225, 1);
|
||||
color: rgba(56, 139, 225, 1);
|
||||
font-size: 12px;
|
||||
position: relative;
|
||||
|
||||
.span {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.ch1 {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||||
right: -8px;
|
||||
top: -8px;
|
||||
}
|
||||
}
|
||||
|
||||
.group {
|
||||
width: 100%;
|
||||
margin-top: 30px;
|
||||
border-top: 1px solid #f2f6fe;
|
||||
}
|
||||
|
||||
.chose2 {
|
||||
//width: 120px;
|
||||
height: 24px;
|
||||
margin-top: 25px;
|
||||
margin-right: 25px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 2px;
|
||||
border: 1px solid rgba(56, 139, 225, 1);
|
||||
color: rgba(56, 139, 225, 1);
|
||||
font-size: 12px;
|
||||
position: relative;
|
||||
|
||||
.span {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.ch2 {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||||
right: -8px;
|
||||
top: -8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -214,67 +214,28 @@
|
||||
调整
|
||||
</div> -->
|
||||
<!-- </div>-->
|
||||
<a-row gutter="12">
|
||||
<a-col>
|
||||
<a-space :size="2">
|
||||
<slot name="extension" v-bind:data="{ record }"></slot>
|
||||
</a-col>
|
||||
<!-- 新加 换组 通过 拒绝 -->
|
||||
<a-col v-if="type === 1">
|
||||
<div
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
换组
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col v-if="type === 3 && record.status !== 0">
|
||||
<div
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
"
|
||||
<a-button
|
||||
v-if="type === 1"
|
||||
@click="updateStatus(0, record.id)"
|
||||
type="link"
|
||||
>换组</a-button
|
||||
>
|
||||
通过
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col v-if="type === 3 && record.status !== 0">
|
||||
<div
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
"
|
||||
<a-button
|
||||
v-if="type === 3 && record.status !== 0"
|
||||
@click="updateStatus(0, record.id)"
|
||||
type="link"
|
||||
>通过</a-button
|
||||
>
|
||||
<a-button
|
||||
v-if="type === 3 && record.status !== 0"
|
||||
@click="updateStatus(2, record.id)"
|
||||
type="link"
|
||||
>拒绝</a-button
|
||||
>
|
||||
拒绝
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col>
|
||||
<div
|
||||
@click="del(record.id)"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
删除
|
||||
</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-button @click="del(record.id)" type="link" danger>删除</a-button>
|
||||
</a-space>
|
||||
</template>
|
||||
</a-table>
|
||||
</div>
|
||||
@@ -383,11 +344,11 @@
|
||||
/>
|
||||
</template>
|
||||
<script setup>
|
||||
import { computed, defineProps, onMounted, ref, watch } from "vue";
|
||||
import { computed, createVNode, defineProps, onMounted, ref, watch } from "vue";
|
||||
import { delStudentList, getStuPage, batchUpdateStatus } from "@/api/index1";
|
||||
import CommonStudent from "@/components/student/CommonStudent";
|
||||
import ChangeLevelModal from "./ChangeLevelModal.vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import { message, Modal } from "ant-design-vue";
|
||||
// import { topStudent } from "../../api/indexProjStu";
|
||||
import SeeStu from "../../components/drawers/SeeStu";
|
||||
import EScore from "../drawers/ExportScore.vue";
|
||||
@@ -395,6 +356,8 @@ import OrgClass from "@/components/project/OrgClass";
|
||||
import ExportHomeWork from "../Modals/ExportHomeWork.vue";
|
||||
import * as api from "../../api/index1";
|
||||
import ImpStu from "../drawers/AddLevelImportStu";
|
||||
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
const props = defineProps({
|
||||
type: Number,
|
||||
id: String,
|
||||
@@ -629,11 +592,16 @@ function bathDel() {
|
||||
}
|
||||
|
||||
function del(id) {
|
||||
id &&
|
||||
delStudentList({
|
||||
ids: [id],
|
||||
}).then(() => {
|
||||
getStuList();
|
||||
Modal.confirm({
|
||||
title: () => "确定删除?",
|
||||
icon: () => createVNode(ExclamationCircleOutlined),
|
||||
content: () => "数据删除后不可恢复!",
|
||||
okText: () => "确定",
|
||||
okType: "danger",
|
||||
cancelText: () => "取消",
|
||||
onOk() {
|
||||
id && delStudentList({ ids: [id] }).then(() => getStuList());
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -309,628 +309,48 @@
|
||||
<a-table
|
||||
:columns="columns1"
|
||||
:data-source="tableData1"
|
||||
:loading="tableDataTotal1 === -1 ? true : false"
|
||||
:loading="tableDataTotal1 === -1"
|
||||
:scroll="{ x: 600 }"
|
||||
expandRowByClick="true"
|
||||
@expand="expandTable"
|
||||
:pagination="false"
|
||||
>
|
||||
<template #bodyCell="{ record, column }">
|
||||
<template
|
||||
v-if="
|
||||
(String(record.status) === '0' || record.status === '未提交') &&
|
||||
column.key === 'operation'
|
||||
"
|
||||
>
|
||||
<div
|
||||
style="margin-right: 24px"
|
||||
:class="[
|
||||
String(record.courseform) === '1'
|
||||
? 'disabled operation'
|
||||
: 'operation',
|
||||
]"
|
||||
>
|
||||
<div class="fb">
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleEdit(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
编辑
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleCopy(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
复制
|
||||
</div>
|
||||
<!-- 2022-12-10注释 后面放开 -->
|
||||
<!-- <a-dropdown>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
权限名单
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showOwnPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
归属权
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showViewPrower(record);
|
||||
}
|
||||
"
|
||||
>查看权</a-menu-item
|
||||
>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showManagePrower(record);
|
||||
}
|
||||
"
|
||||
>管理权</a-menu-item
|
||||
>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a>
|
||||
授权
|
||||
<down-outlined />
|
||||
</a>
|
||||
</a-dropdown> -->
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleDelete(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
删除
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template
|
||||
v-if="
|
||||
(String(record.status) === '1' || record.status === '待审核') &&
|
||||
column.key === 'operation'
|
||||
"
|
||||
>
|
||||
<div
|
||||
style="margin-right: 24px"
|
||||
:class="[
|
||||
String(record.courseform) === '1'
|
||||
? 'disabled operation'
|
||||
: 'operation',
|
||||
]"
|
||||
>
|
||||
<div class="fb">
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleRejectExit(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
撤回
|
||||
</div>
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleCopy(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
复制
|
||||
</div>
|
||||
<!-- 2022-12-10注释 后面放开 -->
|
||||
<!-- <a-dropdown>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
权限名单
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showOwnPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
归属权
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showViewPrower(record);
|
||||
}
|
||||
"
|
||||
>查看权</a-menu-item
|
||||
>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showManagePrower(record);
|
||||
}
|
||||
"
|
||||
>管理权</a-menu-item
|
||||
>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a>
|
||||
授权
|
||||
<down-outlined />
|
||||
</a>
|
||||
</a-dropdown> -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template
|
||||
v-if="
|
||||
(String(record.status) === '2' || record.status === '已审核') &&
|
||||
String(record.kkty) === '1' &&
|
||||
column.key === 'operation'
|
||||
"
|
||||
>
|
||||
<div
|
||||
style="margin-right: 24px"
|
||||
:class="[
|
||||
String(record.courseform) === '1'
|
||||
? 'disabled operation'
|
||||
: 'operation',
|
||||
]"
|
||||
>
|
||||
<div class="fb">
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleStart(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
开课
|
||||
</div>
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleLook(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
查看
|
||||
</div>
|
||||
<!-- 2022-12-11注释 后面放开 -->
|
||||
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
if (String(record.courseform) === ('1' || '线上')) {
|
||||
om_1 = true;
|
||||
ft_1 = false;
|
||||
} else if (
|
||||
String(record.courseform) === ('2' || '面授')
|
||||
) {
|
||||
om_1 = true;
|
||||
ft_1 = true;
|
||||
}
|
||||
handleGuan22(record);
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
管理
|
||||
</div>
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleCopy(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
复制
|
||||
</div>
|
||||
<!-- 2022-12-10注释 后面放开 -->
|
||||
<!-- <a-dropdown>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
权限名单
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showOwnPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
归属权
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showViewPrower(record);
|
||||
}
|
||||
"
|
||||
>查看权</a-menu-item
|
||||
>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showManagePrower(record);
|
||||
}
|
||||
"
|
||||
>管理权</a-menu-item
|
||||
>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a>
|
||||
授权
|
||||
<down-outlined />
|
||||
</a>
|
||||
</a-dropdown> -->
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleStop(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
停用
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template
|
||||
v-if="
|
||||
(String(record.status) === '2' || record.status === '已审核') &&
|
||||
String(record.kkty) === '0' &&
|
||||
column.key === 'operation'
|
||||
"
|
||||
>
|
||||
<div
|
||||
style="margin-right: 24px"
|
||||
:class="[
|
||||
String(record.courseform) === '1'
|
||||
? 'disabled operation'
|
||||
: 'operation',
|
||||
]"
|
||||
>
|
||||
<div class="fb">
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleStart(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
开课
|
||||
</div>
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleEdit(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
编辑
|
||||
</div>
|
||||
<!-- 2022-12-10注释 后面放开 -->
|
||||
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
if (String(record.courseform) === ('1' || '线上')) {
|
||||
om_1 = true;
|
||||
ft_1 = false;
|
||||
} else if (
|
||||
String(record.courseform) === ('2' || '面授')
|
||||
) {
|
||||
om_1 = true;
|
||||
ft_1 = true;
|
||||
}
|
||||
handleGuan22(record);
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
管理
|
||||
</div>
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleCopy(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
复制
|
||||
</div>
|
||||
<!-- 2022-12-10注释 后面放开 -->
|
||||
<!-- <a-dropdown>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
权限名单
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showOwnPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
归属权
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showViewPrower(record);
|
||||
}
|
||||
"
|
||||
>查看权</a-menu-item
|
||||
>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showManagePrower(record);
|
||||
}
|
||||
"
|
||||
>管理权</a-menu-item
|
||||
>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a>
|
||||
授权
|
||||
<down-outlined />
|
||||
</a>
|
||||
</a-dropdown> -->
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleOpen(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
启用
|
||||
</div>
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleDelete(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
删除
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template
|
||||
v-if="
|
||||
(String(record.status) === '-1' ||
|
||||
record.status === '审核未通过') &&
|
||||
column.key === 'operation'
|
||||
"
|
||||
>
|
||||
<div
|
||||
style="margin-right: 24px"
|
||||
:class="[
|
||||
String(record.courseform) === '1'
|
||||
? 'disabled operation'
|
||||
: 'operation',
|
||||
]"
|
||||
>
|
||||
<div class="fb">
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleEdit(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
编辑
|
||||
</div>
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleCopy(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
复制
|
||||
</div>
|
||||
<!-- 2022-12-10注释 后面放开 -->
|
||||
<!-- <a-dropdown>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
权限名单
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showOwnPrower(record);
|
||||
}
|
||||
"
|
||||
>
|
||||
归属权
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showViewPrower(record);
|
||||
}
|
||||
"
|
||||
>查看权</a-menu-item
|
||||
>
|
||||
<a-menu-item
|
||||
@click="
|
||||
() => {
|
||||
if (String(record.courseform) === '1') {
|
||||
return;
|
||||
}
|
||||
showManagePrower(record);
|
||||
}
|
||||
"
|
||||
>管理权</a-menu-item
|
||||
>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a>
|
||||
授权
|
||||
<down-outlined />
|
||||
</a>
|
||||
</a-dropdown> -->
|
||||
<div
|
||||
class="jc"
|
||||
@click="
|
||||
() => {
|
||||
handleDelete(record, String(record.courseform));
|
||||
}
|
||||
"
|
||||
style="display: inline-block; margin-left: 20px"
|
||||
>
|
||||
删除
|
||||
</div>
|
||||
<template v-if="column.key === 'operation'">
|
||||
<a-space :size="0">
|
||||
<a-button v-if="record.status===0 || record.status===-1 || !record.kkty" @click="() => handleEdit(record, String(record.courseform))" type="link">编辑</a-button>
|
||||
<a-button block v-if="record.status===2" @click="() => handleStart(record, String(record.courseform))" type="link">开课</a-button>
|
||||
<a-button v-if="record.status===2" @click="() => handleLook(record, String(record.courseform))" type="link">查看</a-button>
|
||||
<a-button v-if="record.status===2" @click="() => handleGuan22(record, String(record.courseform))" type="link">管理</a-button>
|
||||
<div className="tableSelect" style="margin-left: 0">
|
||||
<a-select value="授权" dropdownClassName="tabledropdown">
|
||||
<a-select-option value="权限名单" label="权限名单">
|
||||
<TableModelStudent :types="[10,11,12]" :id="record.offcourseId">权限名单</TableModelStudent>
|
||||
</a-select-option>
|
||||
<a-select-option value="查看权" label="查看权">
|
||||
<CommonStudent :type="10" :id="record.offcourseId">查看权</CommonStudent>
|
||||
</a-select-option>
|
||||
<a-select-option value="管理权" label="管理权">
|
||||
<CommonStudent :type="11" :id="record.offcourseId">管理权</CommonStudent>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<div className="tableSelect">
|
||||
<a-select value="更多" dropdownClassName="tabledropdown">
|
||||
<a-select-option value="复制" label="复制">
|
||||
<a-button @click="() => handleCopy(record, String(record.courseform))" type="link">复制</a-button>
|
||||
</a-select-option>
|
||||
<a-select-option v-if="record.status===1" value="撤回" label="撤回">
|
||||
<a-button @click="() => handleRejectExit(record, String(record.courseform))" type="link">撤回</a-button>
|
||||
</a-select-option>
|
||||
<a-select-option v-if="record.status===2" value="停用" label="停用">
|
||||
<a-button v-if="record.status===2 && record.kkty" @click="() => handleStop(record, String(record.courseform))" type="link">停用</a-button>
|
||||
<a-button v-if="record.status===2 && !record.kkty" @click="() => handleOpen(record, String(record.courseform))" type="link">启用</a-button>
|
||||
</a-select-option>
|
||||
<a-select-option value="删除" label="删除">
|
||||
<a-button @click="() => handleDelete(record, String(record.courseform))" type="link" danger>删除</a-button>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
</a-space>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
@@ -1702,65 +1122,9 @@
|
||||
:isgetStudent="isgetStudent"
|
||||
>
|
||||
<template #extension="{ data: { record } }">
|
||||
<div style="display: flex">
|
||||
<div
|
||||
v-if="record.source === 4 && record.status === 1"
|
||||
@click="
|
||||
() => {
|
||||
record.status = 0;
|
||||
auditStudent(record);
|
||||
}
|
||||
"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
审核通过
|
||||
</div>
|
||||
<div
|
||||
v-if="record.source === 4 && record.status === 1"
|
||||
@click="
|
||||
() => {
|
||||
record.status = 2;
|
||||
auditStudent(record);
|
||||
}
|
||||
"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
拒绝
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
record.source === 4 &&
|
||||
(record.status === 0 || record.status === 2)
|
||||
"
|
||||
@click="
|
||||
() => {
|
||||
record.status = 1;
|
||||
auditStudent(record);
|
||||
}
|
||||
"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
撤回
|
||||
</div>
|
||||
</div>
|
||||
<a-button v-if="record.source === 4 && record.status === 1" @click="() => {record.status = 0;auditStudent(record);}" type="link">审核通过</a-button>
|
||||
<a-button v-if="record.source === 4 && record.status === 1" @click="() => {record.status = 2;auditStudent(record);}" type="link">拒绝</a-button>
|
||||
<a-button v-if="record.source === 4 && (record.status === 0 || record.status === 2)" @click="() => {record.status = 1;auditStudent(record);}" type="link">撤回</a-button>
|
||||
</template>
|
||||
</TableStudent>
|
||||
</div>
|
||||
@@ -2295,6 +1659,8 @@ import * as api from "../../api/indexInvist.js";
|
||||
import * as apis from "../../api/indexTaskManage";
|
||||
import { message } from "ant-design-vue";
|
||||
import { useRouter, useRoute } from "vue-router";
|
||||
import CommonStudent from "@/components/student/CommonStudent";
|
||||
import TableModelStudent from "@/components/student/TableModelStudent";
|
||||
// import StuAdd from "../../components/drawers/StuAdd";
|
||||
// import OwnPower from "../../components/drawers/OwnPower.vue";
|
||||
// import Corpowerlist from "../../components/drawers/CorPowerlist.vue";
|
||||
@@ -2525,8 +1891,7 @@ const columns1 = [
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
width: 315,
|
||||
className: "h",
|
||||
width: 370,
|
||||
dataIndex: "operation",
|
||||
key: "operation",
|
||||
fixed: "right",
|
||||
@@ -2913,7 +2278,8 @@ export default defineComponent({
|
||||
components: {
|
||||
// OwnPower,
|
||||
// Corpowerlist,
|
||||
|
||||
CommonStudent,
|
||||
TableModelStudent,
|
||||
SeeModal,
|
||||
CourseModal,
|
||||
FJUpload,
|
||||
@@ -8093,24 +7459,24 @@ export default defineComponent({
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
// .tableSelect {
|
||||
// position: relative;
|
||||
// .hoverList {
|
||||
// display: none;
|
||||
// }
|
||||
// &:hover {
|
||||
// .hoverList {
|
||||
// display: block;
|
||||
// position: absolute;
|
||||
// top: 20px;
|
||||
// left: -20px;
|
||||
// background: #fff;
|
||||
// box-sizing: border-box;
|
||||
// // padding: 20px;
|
||||
// color: #000000;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
.tableSelect {
|
||||
position: relative;
|
||||
.hoverList {
|
||||
display: none;
|
||||
}
|
||||
&:hover {
|
||||
.hoverList {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
left: -20px;
|
||||
background: #fff;
|
||||
box-sizing: border-box;
|
||||
// padding: 20px;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ::v-deep .w-e-toolbar {
|
||||
// .w-e-bar-item {
|
||||
|
||||
@@ -690,26 +690,24 @@
|
||||
<script>
|
||||
import { reactive, toRefs, onMounted, watch, computed } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
// import OwnerShip from "../../components/drawers/Ownership";
|
||||
// import PowerList from "../../components/drawers/PowerList";
|
||||
// import QueryRight from "../../components/drawers/QueryRight";
|
||||
import CommonStudent from "@/components/student/CommonStudent";
|
||||
import TableModelStudent from "@/components/student/TableModelStudent";
|
||||
import ProjOwnerShip from "../../components/drawers/ProjectOwn";
|
||||
import ProjPowerList from "../../components/drawers/ProjPowerList";
|
||||
import ProjCheckShip from "../../components/drawers/ProjCheckPower";
|
||||
// import ManageRight from "../../components/drawers/ManageRight";
|
||||
import * as api from "../../api/index1";
|
||||
import * as apiStu from "../../api/index";
|
||||
import { message } from "ant-design-vue";
|
||||
import {
|
||||
commonData,
|
||||
changeOwnership,
|
||||
// setCookie
|
||||
} from "../../api/method";
|
||||
import { storage } from "../../api/storage";
|
||||
} from "@/api/method";
|
||||
import { storage } from "@/api/storage";
|
||||
import { useStore } from "vuex";
|
||||
import OrgClass from "@/components/project/OrgClass";
|
||||
import NameInput from "@/components/project/NameInput";
|
||||
import {validateName} from "../../api/index1";
|
||||
import {validateName} from "@/api/index1";
|
||||
|
||||
|
||||
export default {
|
||||
name: "learningPath",
|
||||
@@ -1249,51 +1247,23 @@ export default {
|
||||
>
|
||||
管理
|
||||
</div>
|
||||
{/**
|
||||
// <!-- 2022-12-10注释 后面放开 -->
|
||||
{
|
||||
<a-select
|
||||
style="width: 50px;margin-top:2px;margin-left:25px"
|
||||
value="授权"
|
||||
dropdownClassName="tabledropdown"
|
||||
>
|
||||
<a-select-option value="权限名单" label="权限名单">
|
||||
<div
|
||||
onClick={() => {
|
||||
showPower(text.record.id);
|
||||
}}
|
||||
>
|
||||
权限名单
|
||||
</div>
|
||||
</a-select-option>
|
||||
<a-select-option value="归属权" label="归属权">
|
||||
<div
|
||||
onClick={() => {
|
||||
showOwner(text.record.id);
|
||||
}}
|
||||
>
|
||||
归属权
|
||||
</div>
|
||||
<TableModelStudent types={[7,8,9]} id={text.record.id}>权限名单</TableModelStudent>
|
||||
</a-select-option>
|
||||
<a-select-option value="查看权" label="查看权">
|
||||
<div
|
||||
onClick={() => {
|
||||
showQuery(text.record.id);
|
||||
}}
|
||||
>
|
||||
查看权
|
||||
</div>
|
||||
<CommonStudent type={7} id={text.record.id}>查看权</CommonStudent>
|
||||
</a-select-option>
|
||||
<a-select-option value="管理权" label="管理权">
|
||||
<div
|
||||
onClick={() => {
|
||||
showManage(text.record.id);
|
||||
}}
|
||||
>
|
||||
管理权
|
||||
</div>
|
||||
<CommonStudent type={8} id={text.record.id}>管理权</CommonStudent>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
*/}
|
||||
}
|
||||
</div>
|
||||
<div class="tableSelect">
|
||||
{text.record.state === "草稿" ? (
|
||||
|
||||
@@ -455,7 +455,7 @@
|
||||
<div
|
||||
class="operation"
|
||||
style="cursor: pointer"
|
||||
@click="showAA(item.type, item.name)"
|
||||
@click="showAA(item.type, item.name, item)"
|
||||
:style="{
|
||||
display:
|
||||
item.type === 6 || item.type === 9
|
||||
@@ -523,32 +523,8 @@
|
||||
:columns="tableDataFunc()"
|
||||
>
|
||||
<template #extension="{ data: { record } }">
|
||||
<div style="display: flex">
|
||||
<div
|
||||
@click="showStudent(record)"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
查看
|
||||
</div>
|
||||
<div
|
||||
@click="setLevels(record)"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
调整
|
||||
</div>
|
||||
</div>
|
||||
<a-button type="link" @click="showStudent(record)">查看</a-button>
|
||||
<a-button type="link" @click="setLevels(record)">调整</a-button>
|
||||
</template>
|
||||
</TableStudent>
|
||||
<TableStudent
|
||||
@@ -559,32 +535,8 @@
|
||||
:columns="tableDataFunc()"
|
||||
>
|
||||
<template #extension="{ data: { record } }">
|
||||
<div style="display: flex">
|
||||
<div
|
||||
@click="showStudent(record)"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
查看
|
||||
</div>
|
||||
<div
|
||||
@click="setLevels(record)"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
调整
|
||||
</div>
|
||||
</div>
|
||||
<a-button type="link" @click="showStudent(record)">查看</a-button>
|
||||
<a-button type="link" @click="setLevels(record)">调整</a-button>
|
||||
</template>
|
||||
</TableStudent>
|
||||
</a-tab-pane>
|
||||
@@ -1070,7 +1022,9 @@
|
||||
<!-- 活动考勤抽屉 -->
|
||||
<active-attendance
|
||||
v-model:AAvisible="AAvisible"
|
||||
:datasource="liveData"
|
||||
:title="showKaoqinText"
|
||||
types="1"
|
||||
classify="2"
|
||||
/>
|
||||
<!-- 时间管理抽屉 -->
|
||||
@@ -1569,6 +1523,7 @@ export default {
|
||||
evaluationData: "",
|
||||
homeworkData: "",
|
||||
commonData: "",
|
||||
liveData: "",
|
||||
voteData: "",
|
||||
commonLevelName: "",
|
||||
examLevelName: "",
|
||||
@@ -1797,10 +1752,11 @@ export default {
|
||||
console.log("facestudent", state.facestudent);
|
||||
};
|
||||
//考勤的抽屉
|
||||
const showAA = (course) => {
|
||||
const showAA = (course, a, data) => {
|
||||
state.AAvisible = true;
|
||||
state.showKaoqinText = "【" + course + "】" + "考勤";
|
||||
console.log(state.showKaoqinText, 1111);
|
||||
state.liveData = data;
|
||||
state.showKaoqinText = "直播";
|
||||
console.log(state.showKaoqinText, 1111, data);
|
||||
};
|
||||
// 时间管理
|
||||
const showTime = (course) => {
|
||||
|
||||
@@ -830,7 +830,6 @@ import * as api from "../../api/index";
|
||||
import * as api1 from "../../api/index1";
|
||||
import { storage } from "../../api/storage";
|
||||
import ProjectManager from "@/components/project/ProjectManagerNew";
|
||||
// import ProjectClass from "@/components/project/ProjectClass";
|
||||
import TrainClass from "@/components/project/TrainClass";
|
||||
import OrgClass from "@/components/project/OrgClass";
|
||||
import dayjs from "dayjs";
|
||||
@@ -838,7 +837,8 @@ import * as moment from "moment";
|
||||
import { changeOwnership } from "@/api/method";
|
||||
import NameInput from "@/components/project/NameInput";
|
||||
import { validateName } from "@/api/index1";
|
||||
//import { toDate } from "../../api/method";
|
||||
import CommonStudent from "@/components/student/CommonStudent";
|
||||
import TableModelStudent from "@/components/student/TableModelStudent";
|
||||
|
||||
export default {
|
||||
name: "projectManage",
|
||||
@@ -1510,57 +1510,21 @@ export default {
|
||||
) : (
|
||||
""
|
||||
)}
|
||||
|
||||
{/**
|
||||
//<!-- 2022-12-10注释 后面放开 -->
|
||||
{
|
||||
<div className="tableSelect">
|
||||
<a-select
|
||||
style="width: 50px"
|
||||
value="授权"
|
||||
// options={state.projectNameList}
|
||||
dropdownClassName="tabledropdown"
|
||||
>
|
||||
<a-select style="width: 50px;" value="授权" dropdownClassName="tabledropdown">
|
||||
<a-select-option value="权限名单" label="权限名单">
|
||||
<div
|
||||
onClick={() => {
|
||||
showProjPrower(value.record.projectId);
|
||||
}}
|
||||
>
|
||||
权限名单
|
||||
</div>
|
||||
</a-select-option>
|
||||
<a-select-option value="归属权" label="归属权">
|
||||
<div
|
||||
onClick={() => {
|
||||
console.log("点击了111");
|
||||
showProjOwner(value.record.projectId);
|
||||
}}
|
||||
>
|
||||
归属权
|
||||
</div>
|
||||
<TableModelStudent types={[4,5,6]} id={value.record.projectId}>权限名单</TableModelStudent>
|
||||
</a-select-option>
|
||||
<a-select-option value="查看权" label="查看权">
|
||||
<div
|
||||
onClick={() => {
|
||||
console.log("点击了111");
|
||||
showProjCheck(value.record.projectId);
|
||||
}}
|
||||
>
|
||||
查看权
|
||||
</div>
|
||||
<CommonStudent type={4} id={value.record.projectId}>查看权</CommonStudent>
|
||||
</a-select-option>
|
||||
<a-select-option value="管理权" label="管理权">
|
||||
<div
|
||||
onClick={() => {
|
||||
showProjManage(value.record.projectId);
|
||||
}}
|
||||
>
|
||||
管理权
|
||||
</div>
|
||||
<CommonStudent type={5} id={value.record.projectId}>管理权</CommonStudent>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
*/}
|
||||
}
|
||||
{value.record.type === 1 ? (
|
||||
<span
|
||||
className="operation3"
|
||||
|
||||
@@ -334,7 +334,7 @@
|
||||
:key="item.stageId"
|
||||
@click="stageChange(item, index)"
|
||||
>
|
||||
{{ item.name || '无阶段' }}
|
||||
{{ item.name || "无阶段" }}
|
||||
</div>
|
||||
<!-- <div class="stage1">阶段1</div>
|
||||
<div class="stage2">阶段2</div> -->
|
||||
@@ -348,7 +348,9 @@
|
||||
<a-progress
|
||||
type="dashboard"
|
||||
gapDegree="0"
|
||||
:percent="stageOverviewList[choosedStageIndex]?.completeCourseRatio"
|
||||
:percent="
|
||||
stageOverviewList[choosedStageIndex]?.completeCourseRatio
|
||||
"
|
||||
:width="140"
|
||||
/>
|
||||
<div class="protext">课程完成率</div>
|
||||
@@ -357,7 +359,9 @@
|
||||
<a-progress
|
||||
type="dashboard"
|
||||
gapDegree="0"
|
||||
:percent="stageOverviewList[choosedStageIndex]?.completeExamRatio"
|
||||
:percent="
|
||||
stageOverviewList[choosedStageIndex]?.completeExamRatio
|
||||
"
|
||||
:width="140"
|
||||
/>
|
||||
<div class="protext">考试通过率</div>
|
||||
@@ -378,7 +382,9 @@
|
||||
<div class="proright1">
|
||||
<span class="textpro">阶段任务总数</span>
|
||||
<a-progress
|
||||
:percent="stageOverviewList[choosedStageIndex]?.totalTaskCnt"
|
||||
:percent="
|
||||
stageOverviewList[choosedStageIndex]?.totalTaskCnt
|
||||
"
|
||||
style="width: 369px"
|
||||
/>
|
||||
</div>
|
||||
@@ -540,17 +546,27 @@
|
||||
</div>
|
||||
<div class="progress">
|
||||
<div class="progresstext">
|
||||
{{item.finishStuCnt || 0 }}/{{item.totalStuCnt || 0}}人
|
||||
{{ item.finishStuCnt || 0 }}/{{
|
||||
item.totalStuCnt || 0
|
||||
}}人
|
||||
</div>
|
||||
<div style="display: flex">
|
||||
<a-progress
|
||||
:showInfo="false"
|
||||
:percent="parseInt((item.finishStuCnt / item.totalStuCnt) * 100)"
|
||||
:percent="
|
||||
parseInt(
|
||||
(item.finishStuCnt / item.totalStuCnt) * 100
|
||||
)
|
||||
"
|
||||
strokeColor="#FFC067"
|
||||
trailColor="rgba(253, 209, 98, 0.2)"
|
||||
/>
|
||||
<span class="progresstext" style="margin-left: 10px"
|
||||
>{{parseInt((item.finishStuCnt / item.totalStuCnt) * 100) || 0 }}%</span
|
||||
>{{
|
||||
parseInt(
|
||||
(item.finishStuCnt / item.totalStuCnt) * 100
|
||||
) || 0
|
||||
}}%</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@@ -567,7 +583,7 @@
|
||||
<div
|
||||
class="operation"
|
||||
style="cursor: pointer"
|
||||
@click="showAA(item.name)"
|
||||
@click="showAA(item.type, item.name, item)"
|
||||
v-if="item.type == 6 || item.type == 9"
|
||||
>
|
||||
考勤
|
||||
@@ -701,35 +717,117 @@
|
||||
:visable="tabFlag"
|
||||
>
|
||||
<template #extension="{ data: { record } }">
|
||||
<div style="display: flex">
|
||||
<div
|
||||
@click="showStudent(record)"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
<a-button @click="showStudent(record)" type="link"
|
||||
>查看</a-button
|
||||
>
|
||||
查看
|
||||
</div>
|
||||
<div
|
||||
@click="settingTopFlag(record)"
|
||||
style="
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
"
|
||||
>
|
||||
{{ record.topFlag ? "取消优秀" : "优秀学员" }}
|
||||
</div>
|
||||
</div>
|
||||
<a-button @click="settingTopFlag(record)" type="link">{{
|
||||
record.topFlag ? "取消优秀" : "优秀学员"
|
||||
}}</a-button>
|
||||
</template>
|
||||
</TableStudent>
|
||||
</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>
|
||||
<div class="btn2" @click="showSubset">
|
||||
<img src="../../assets/images/courseManage/reset2.png" />
|
||||
<span class="btn2text">随机分组</span>
|
||||
</div>
|
||||
<div class="btn2">
|
||||
<span class="btn2text">导出小组</span>
|
||||
</div>
|
||||
<div class="btn2">
|
||||
<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>
|
||||
</div>
|
||||
</a-tab-pane>
|
||||
@@ -747,11 +845,9 @@
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</a-tab-pane>
|
||||
<!-- 2022-11-30注释 后面放开 -->
|
||||
<a-tab-pane key="5" tab="项目积分">
|
||||
<ProjectScore :projectId="projectId"></ProjectScore>
|
||||
</a-tab-pane>
|
||||
<!-- 2022-11-30注释 后面放开 -->
|
||||
<a-tab-pane key="6" tab="排行榜">
|
||||
<div class="split"></div>
|
||||
<div class="content6">
|
||||
@@ -759,7 +855,6 @@
|
||||
<div class="line"></div>
|
||||
<div class="search">
|
||||
<div class="left">
|
||||
|
||||
<div class="time">
|
||||
<div class="text">选择时间:</div>
|
||||
<a-range-picker
|
||||
@@ -870,35 +965,109 @@
|
||||
<a-tab-pane key="7" tab="证书">
|
||||
<div class="split"></div>
|
||||
<!-- 没有证书显示的页面 -->
|
||||
<div v-if="3>7" style="display:flex; justify-content:center; align-items:center;height: 600px;flex-direction:column;">
|
||||
<div
|
||||
v-if="3 > 7"
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 600px;
|
||||
flex-direction: column;
|
||||
"
|
||||
>
|
||||
<img
|
||||
src="@/assets/images/nodata.png"
|
||||
style=" width: 212px; height: 212px;"
|
||||
style="width: 212px; height: 212px"
|
||||
alt=""
|
||||
/>
|
||||
<button class="xkbtn11" @click="addCertificate">
|
||||
添加证书
|
||||
</button>
|
||||
<button class="xkbtn11" @click="addCertificate">添加证书</button>
|
||||
</div>
|
||||
<!-- 有证书显示的页面 -->
|
||||
<div v-else style="padding: 36px; display: flex;min-height: 400px;">
|
||||
<div style="width:170px;height:200px;border:1px solid #b1b3b8;display: flex;justify-content: center;align-items: center;color: #4ea6ff;cursor: pointer;" @click="addCertificate">
|
||||
<div v-else style="padding: 36px; display: flex; min-height: 400px">
|
||||
<div
|
||||
style="
|
||||
width: 170px;
|
||||
height: 200px;
|
||||
border: 1px solid #b1b3b8;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
color: #4ea6ff;
|
||||
cursor: pointer;
|
||||
"
|
||||
@click="addCertificate"
|
||||
>
|
||||
<div class="ant-upload-text">+添加证书</div>
|
||||
</div>
|
||||
|
||||
<div style="width:170px;height:200px;border:1px solid #b1b3b8;margin-left: 32px;display: flex;justify-content: center;align-items: center;flex-direction:column;">
|
||||
<div
|
||||
style="
|
||||
width: 170px;
|
||||
height: 200px;
|
||||
border: 1px solid #b1b3b8;
|
||||
margin-left: 32px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
"
|
||||
>
|
||||
<img
|
||||
@click="previewPic"
|
||||
style="cursor: pointer"
|
||||
width="140"
|
||||
height="160"
|
||||
src="https://picb6.photophoto.cn/32/552/32552236_1.jpg" alt="" srcset="">
|
||||
<div style="display:flex;height: 26px;justify-content: space-around;align-items: center;">
|
||||
<div style="font-size:14px; width: 85px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">培训认证证书</div>
|
||||
<div style="font-size:12px;color:#999;width:50px;margin-left: 6px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">完成项目</div>
|
||||
<div style="cursor:pointer;position: relative;">
|
||||
src="https://picb6.photophoto.cn/32/552/32552236_1.jpg"
|
||||
alt=""
|
||||
srcset=""
|
||||
/>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
height: 26px;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<div
|
||||
style="
|
||||
font-size: 14px;
|
||||
width: 85px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
"
|
||||
>
|
||||
培训认证证书
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
width: 50px;
|
||||
margin-left: 6px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
"
|
||||
>
|
||||
完成项目
|
||||
</div>
|
||||
<div style="cursor: pointer; position: relative">
|
||||
...
|
||||
<div style="position:absolute;width: 45px;height: 60px;background: #fff;display: flex;flex-direction: column;justify-content: center;align-items: center;border: 1px solid #b1b3b8;">
|
||||
<div
|
||||
style="
|
||||
position: absolute;
|
||||
width: 45px;
|
||||
height: 60px;
|
||||
background: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border: 1px solid #b1b3b8;
|
||||
"
|
||||
>
|
||||
<div style="font-size: 12px; color: #999">查看</div>
|
||||
<div style="font-size: 12px; color: #999">编辑</div>
|
||||
<div style="font-size: 12px; color: #999">删除</div>
|
||||
@@ -1051,7 +1220,13 @@
|
||||
>
|
||||
<img
|
||||
src="@/assets/images/basicinfo/cloud.png"
|
||||
style="cursor: pointer; width: 24px; height: 24px; margin-left: 8px;margin-bottom: 3px;"
|
||||
style="
|
||||
cursor: pointer;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-left: 8px;
|
||||
margin-bottom: 3px;
|
||||
"
|
||||
alt=""
|
||||
/>
|
||||
</a-upload>
|
||||
@@ -1086,26 +1261,74 @@
|
||||
"
|
||||
alt=""
|
||||
/> -->
|
||||
<img v-if="
|
||||
<img
|
||||
v-if="
|
||||
item.name.indexOf('jpg') !== -1 ||
|
||||
item.name.indexOf('jpeg') !== -1 ||
|
||||
item.name.indexOf('png') !== -1
|
||||
"
|
||||
style="width: 27px;height: 32px;margin-right: 40px;"
|
||||
src="@/assets/images/coursewareManage/pngpic.png" />
|
||||
style="width: 27px; height: 32px; margin-right: 40px"
|
||||
src="@/assets/images/coursewareManage/pngpic.png"
|
||||
/>
|
||||
<div v-else>
|
||||
<img v-if="item.name.indexOf('doc') !== -1" style="width: 27px;height: 32px;margin-right: 40px;" src="@/assets/images/coursewareManage/docpic.png" />
|
||||
<img
|
||||
v-if="item.name.indexOf('doc') !== -1"
|
||||
style="
|
||||
width: 27px;
|
||||
height: 32px;
|
||||
margin-right: 40px;
|
||||
"
|
||||
src="@/assets/images/coursewareManage/docpic.png"
|
||||
/>
|
||||
<div v-else>
|
||||
<img v-if="item.name.indexOf('xls') !== -1" style="width: 27px;height: 32px;margin-right: 40px;" src="@/assets/images/coursewareManage/xlspic.png" />
|
||||
<img
|
||||
v-if="item.name.indexOf('xls') !== -1"
|
||||
style="
|
||||
width: 27px;
|
||||
height: 32px;
|
||||
margin-right: 40px;
|
||||
"
|
||||
src="@/assets/images/coursewareManage/xlspic.png"
|
||||
/>
|
||||
<div v-else>
|
||||
<img v-if="item.name.indexOf('ppt') !== -1" style="width: 27px;height: 32px;margin-right: 40px;" src="@/assets/images/coursewareManage/pptpic.png" />
|
||||
<img
|
||||
v-if="item.name.indexOf('ppt') !== -1"
|
||||
style="
|
||||
width: 27px;
|
||||
height: 32px;
|
||||
margin-right: 40px;
|
||||
"
|
||||
src="@/assets/images/coursewareManage/pptpic.png"
|
||||
/>
|
||||
<div v-else>
|
||||
<img v-if="item.name.indexOf('pdf') !== -1" style="width: 27px;height: 32px;margin-right: 40px;" src="@/assets/images/coursewareManage/pdfpic.png" />
|
||||
<img
|
||||
v-if="item.name.indexOf('pdf') !== -1"
|
||||
style="
|
||||
width: 27px;
|
||||
height: 32px;
|
||||
margin-right: 40px;
|
||||
"
|
||||
src="@/assets/images/coursewareManage/pdfpic.png"
|
||||
/>
|
||||
<div v-else>
|
||||
<img v-if="item.name.indexOf('zip') !== -1"
|
||||
style="width: 27px;height: 32px;margin-right: 40px;"
|
||||
src="@/assets/images/coursewareManage/zippic.png" />
|
||||
<img v-else style="width: 27px;height: 32px;margin-right: 40px;" src="@/assets/images/coursewareManage/docpic.png" />
|
||||
<img
|
||||
v-if="item.name.indexOf('zip') !== -1"
|
||||
style="
|
||||
width: 27px;
|
||||
height: 32px;
|
||||
margin-right: 40px;
|
||||
"
|
||||
src="@/assets/images/coursewareManage/zippic.png"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
style="
|
||||
width: 27px;
|
||||
height: 32px;
|
||||
margin-right: 40px;
|
||||
"
|
||||
src="@/assets/images/coursewareManage/docpic.png"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1125,8 +1348,14 @@
|
||||
>
|
||||
<a
|
||||
href="javascript:void(0);"
|
||||
@click="downloadFile(item.response ? item.response.data : '')"
|
||||
style="margin-left: 5px">下载</a>
|
||||
@click="
|
||||
downloadFile(
|
||||
item.response ? item.response.data : ''
|
||||
)
|
||||
"
|
||||
style="margin-left: 5px"
|
||||
>下载</a
|
||||
>
|
||||
<span
|
||||
style="color: #4ea6ff; float: right; cursor: pointer"
|
||||
@click="deFile(item.uid)"
|
||||
@@ -1138,7 +1367,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</a-tab-pane>
|
||||
|
||||
</a-tabs>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
@@ -1198,14 +1426,10 @@
|
||||
/>
|
||||
|
||||
<!-- 添加证书抽屉 -->
|
||||
<AddCertificate
|
||||
v-model:ACertificate="ACertificate"
|
||||
/>
|
||||
<AddCertificate v-model:ACertificate="ACertificate" />
|
||||
|
||||
<!-- 创建证书抽屉 -->
|
||||
<CreateCertificate
|
||||
v-model:CCertificate="CCertificate"
|
||||
/>
|
||||
<CreateCertificate v-model:CCertificate="CCertificate" />
|
||||
|
||||
<!-- 预览 -->
|
||||
<a-modal
|
||||
@@ -1213,12 +1437,15 @@
|
||||
width="60%"
|
||||
:footer="null"
|
||||
v-model:visible="modal1Visible"
|
||||
style="display:flex; justify-content:center; align-items:center;"
|
||||
style="display: flex; justify-content: center; align-items: center"
|
||||
@ok="setModal1Visible(false)"
|
||||
>
|
||||
<img
|
||||
:width="screenWidth * 0.55"
|
||||
src="https://picb6.photophoto.cn/32/552/32552236_1.jpg" alt="" srcset="">
|
||||
src="https://picb6.photophoto.cn/32/552/32552236_1.jpg"
|
||||
alt=""
|
||||
srcset=""
|
||||
/>
|
||||
</a-modal>
|
||||
|
||||
<!-- 学员(小组管理)创建小组抽屉 -->
|
||||
@@ -1262,11 +1489,13 @@
|
||||
v-model:FSvisible="FSvisible"
|
||||
:projectTaskInfo="facestudent"
|
||||
/>
|
||||
<!-- 活动考勤抽屉 -->
|
||||
<!-- 活动直播考勤抽屉 -->
|
||||
<active-attendance
|
||||
v-model:AAvisible="AAvisible"
|
||||
:title="showkaoqinText"
|
||||
classify="1"
|
||||
:datasource="liveData"
|
||||
:title="showKaoqinText"
|
||||
types="2"
|
||||
classify="2"
|
||||
/>
|
||||
|
||||
<!-- 批量面授报名 -->
|
||||
@@ -1899,7 +2128,7 @@ export default {
|
||||
TableStudent,
|
||||
AddCertificate,
|
||||
CreateCertificate,
|
||||
ProjectVoteManage
|
||||
ProjectVoteManage,
|
||||
},
|
||||
setup() {
|
||||
const store = useStore();
|
||||
@@ -1937,7 +2166,11 @@ export default {
|
||||
ellipsis: true,
|
||||
customRender: ({ record }) => (
|
||||
<div>
|
||||
{record.finishTaskNum ==0?"未开始":record.finishTaskNum == record.totalTaskNum?"已完成":"进行中"}
|
||||
{record.finishTaskNum == 0
|
||||
? "未开始"
|
||||
: record.finishTaskNum == record.totalTaskNum
|
||||
? "已完成"
|
||||
: "进行中"}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
@@ -2536,7 +2769,8 @@ export default {
|
||||
//直播、面授传递title
|
||||
showWorkText: "",
|
||||
//直播、活动页面传递参数
|
||||
showkaoqinText: "",
|
||||
showkaoqinText: "直播",
|
||||
liveData: "",
|
||||
//所有抽屉的传过去的type
|
||||
itemstype: null,
|
||||
|
||||
@@ -2588,8 +2822,8 @@ export default {
|
||||
evaltype: "",
|
||||
evalData: "",
|
||||
voteData: "",
|
||||
voteModelVisibleTitle:'',
|
||||
voteLevelName:'',
|
||||
voteModelVisibleTitle: "",
|
||||
voteLevelName: "",
|
||||
facestudent: "",
|
||||
|
||||
modal1Visible: false, // 证书预览
|
||||
@@ -2614,7 +2848,7 @@ export default {
|
||||
totalTaskCnt: 0,
|
||||
totalReqCnt: 0,
|
||||
totalOptCnt: 0,
|
||||
}
|
||||
},
|
||||
],
|
||||
stageList: [
|
||||
// 阶段列表
|
||||
@@ -2655,7 +2889,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
levelList.stageList = res.data.data.stageList
|
||||
levelList.stageList = res.data.data.stageList;
|
||||
//暂时传个固定的id用 到时候看数据里面是否有在更换
|
||||
// state.projectTaskId = res.data.data.stageList[0].taskList[0].projectTaskId
|
||||
let leng = res.data.data.stageList.length;
|
||||
@@ -2869,9 +3103,18 @@ export default {
|
||||
state.chooseGroupId = id;
|
||||
};
|
||||
//活动考勤的抽屉
|
||||
const showAA = (title) => {
|
||||
{
|
||||
/* const showAA = (title) => {
|
||||
state.AAvisible = true;
|
||||
state.showkaoqinText = title;
|
||||
}; */
|
||||
}
|
||||
//考勤的抽屉
|
||||
const showAA = (course, a, data) => {
|
||||
state.AAvisible = true;
|
||||
state.liveData = data;
|
||||
state.showKaoqinText = "直播";
|
||||
console.log(state.showKaoqinText, 1111, data);
|
||||
};
|
||||
//作业管理的抽屉
|
||||
const showWork = (name, id, item) => {
|
||||
@@ -2880,14 +3123,16 @@ export default {
|
||||
state.projectTaskId = id;
|
||||
state.projectTaskInfo = item;
|
||||
};
|
||||
{/* 直播管理的抽屉 */}
|
||||
{
|
||||
/* 直播管理的抽屉 */
|
||||
}
|
||||
const showVote = (name, id, data) => {
|
||||
console.log(name, id, data)
|
||||
console.log(name, id, data);
|
||||
state.projectVoteModelVisible = true;
|
||||
state.voteData = data;
|
||||
state.voteModelVisibleTitle = name;
|
||||
state.voteLevelName = '无阶段任务';
|
||||
}
|
||||
state.voteLevelName = "无阶段任务";
|
||||
};
|
||||
//考试管理的抽屉
|
||||
const showTest = (name, id, data) => {
|
||||
state.examData = data;
|
||||
@@ -3623,7 +3868,9 @@ export default {
|
||||
state.noticeFlag = info.noticeFlag;
|
||||
state.switchopen = info.attachSwitch == 1 ? true : false;
|
||||
state.docChecked = info.attachSwitch == 1 ? true : false;
|
||||
state.hasTask = !!res.data.data?.stageList.some(({taskList})=>taskList.length);
|
||||
state.hasTask = !!res.data.data?.stageList.some(
|
||||
({ taskList }) => taskList.length
|
||||
);
|
||||
// state.attach = info.attach;
|
||||
// state.templateId = info.templateId;
|
||||
state.sourceBelong =
|
||||
@@ -4246,9 +4493,9 @@ export default {
|
||||
|
||||
// 共享文档文件下载
|
||||
const downloadFile = (url) => {
|
||||
console.log(url)
|
||||
console.log(url);
|
||||
if (url) {
|
||||
window.open(url)
|
||||
window.open(url);
|
||||
}
|
||||
// if(url){
|
||||
// const filename = '操作指南'
|
||||
@@ -4265,13 +4512,15 @@ export default {
|
||||
// }
|
||||
// x.send()
|
||||
// }
|
||||
}
|
||||
};
|
||||
function stageChange(item, index) {
|
||||
state.choosedStageId = item.stageId
|
||||
state.choosedStageId = item.stageId;
|
||||
state.choosedStageIndex = index;
|
||||
}
|
||||
|
||||
{/* 证书 */}
|
||||
{
|
||||
/* 证书 */
|
||||
}
|
||||
function addCertificate() {
|
||||
state.ACertificate = true;
|
||||
}
|
||||
@@ -4390,7 +4639,7 @@ export default {
|
||||
checkType,
|
||||
downloadFile,
|
||||
addCertificate,
|
||||
previewPic
|
||||
previewPic,
|
||||
};
|
||||
},
|
||||
};
|
||||
@@ -5966,7 +6215,7 @@ export default {
|
||||
|
||||
.groupright {
|
||||
display: flex;
|
||||
|
||||
margin-left: 48px;
|
||||
.btn1 {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
|
||||
Reference in New Issue
Block a user