mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-10 03:16:44 +08:00
专业力必修提交
This commit is contained in:
@@ -41,7 +41,8 @@ export const deleteTask = (ids) => http.get('/professional/task/delete/' + ids)
|
||||
|
||||
//获取岗位
|
||||
export const getStdPosition = (obj) => http.get('/professional/compulsory/getStdPositionList', { params: obj })
|
||||
|
||||
//获取Band
|
||||
export const getBandList = (obj) => http.get('/professional/compulsory/getBandList', { params: obj })
|
||||
//获取职级
|
||||
export const getQualsLevelCode = (obj) => http.get('/professional/compulsory/getQualsLevelCodeList', { params: obj })
|
||||
|
||||
@@ -74,7 +75,8 @@ export const getStudentTaskPage = (obj) => http.get('/professional/studentTask/g
|
||||
// 导出任务管理学员
|
||||
export const exportStudentTaskPage = (obj) => http.post('/professional/studentTask/export', obj)
|
||||
|
||||
|
||||
// 任务管理概览
|
||||
export const taskInformation = (growthId) => http.get('/professional/managementOverview/taskInformation/' + growthId)
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
src/assets/images/navleft/pathIcon.png
Normal file
BIN
src/assets/images/navleft/pathIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 326 B |
@@ -90,7 +90,7 @@
|
||||
<div class="imgBox">
|
||||
<img
|
||||
style="width: 20px; height: 18px"
|
||||
src="../assets/images/navleft/studyPath.png"
|
||||
src="../assets/images/navleft/pathIcon.png"
|
||||
/>
|
||||
</div>
|
||||
<router-link to="/growthpath">专业力必修</router-link>
|
||||
|
||||
@@ -31,41 +31,36 @@
|
||||
</div> -->
|
||||
<div class="search" style="justify-content: flex-start">
|
||||
<div class="sealeft">
|
||||
<div class="namecon" style="margin-right: 30px">
|
||||
<div class="name">标准岗位:</div>
|
||||
<PostSelectNew width="200px" v-model:value="stdPositionId">
|
||||
<div class="namecon" style="margin-right: 16px">
|
||||
<PostSelectNew width="200px" v-model:value="stdPosition">
|
||||
</PostSelectNew>
|
||||
</div>
|
||||
<div class="namecon" style="margin-right: 30px">
|
||||
<div class="name">任职资格:</div>
|
||||
<div class="namecon" style="margin-right: 16px">
|
||||
<OfficeSelect
|
||||
v-model:value="qualsLevelCode"
|
||||
:searchData="stdPositionId"
|
||||
:searchData="stdPosition"
|
||||
width="200px"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="namecon" style="margin-right: 30px">
|
||||
<div class="name">姓名/工号:</div>
|
||||
<a-input
|
||||
v-model:value="name"
|
||||
style="width: 200px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入姓名/工号"
|
||||
/>
|
||||
</div>
|
||||
<div class="namecon" style="margin-right: 50px">
|
||||
<div class="name">任务状态:</div>
|
||||
<div class="namecon" style="margin-right: 16px">
|
||||
<div class="select">
|
||||
<a-select
|
||||
v-model:value="projectName"
|
||||
style="width: 200px"
|
||||
placeholder="请选择"
|
||||
placeholder="任务状态"
|
||||
:options="projectNameList"
|
||||
@change="selectProjectName"
|
||||
allowClear
|
||||
></a-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="namecon" style="margin-right: 16px">
|
||||
<a-input
|
||||
v-model:value="name"
|
||||
style="width: 200px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入姓名/工号"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btns">
|
||||
<div
|
||||
@@ -191,13 +186,13 @@ export default {
|
||||
const state = reactive({
|
||||
visible: props.Tvisible,
|
||||
name: "",
|
||||
pageNo: 1,
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
currentPage: 1,
|
||||
tableDataTotal: 0,
|
||||
projectName: undefined,
|
||||
TASK_TYPE: TASK_TYPE,
|
||||
stdPositionId: null,
|
||||
stdPosition: null,
|
||||
qualsLevelCode: null,
|
||||
projectNameList: [
|
||||
{
|
||||
@@ -227,7 +222,7 @@ export default {
|
||||
title: "工号",
|
||||
dataIndex: "username",
|
||||
key: "username",
|
||||
width: 50,
|
||||
width: 80,
|
||||
align: "center",
|
||||
className: "h head",
|
||||
customRender: (text) => {
|
||||
@@ -245,7 +240,7 @@ export default {
|
||||
title: "姓名",
|
||||
dataIndex: "userNickName",
|
||||
key: "userNickName",
|
||||
width: 50,
|
||||
width: 80,
|
||||
align: "center",
|
||||
className: "h head",
|
||||
customRender: (text) => {
|
||||
@@ -259,27 +254,11 @@ export default {
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "归属组织",
|
||||
dataIndex: "orgName",
|
||||
key: "orgName",
|
||||
width: 160,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.orgName ? text.record.orgName : "-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "标准岗位",
|
||||
dataIndex: "stdPositionName",
|
||||
key: "stdPositionName",
|
||||
width: 60,
|
||||
width: 150,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
@@ -300,7 +279,7 @@ export default {
|
||||
title: "任职资格",
|
||||
dataIndex: "qualsLevelDesr",
|
||||
key: "qualsLevelDesr",
|
||||
width: 60,
|
||||
width: 80,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
@@ -349,22 +328,6 @@ export default {
|
||||
4: "添加",
|
||||
}[joinMethod]),
|
||||
},
|
||||
/** {
|
||||
title: "学员关卡",
|
||||
dataIndex: "currentStageName",
|
||||
key: "currentStageName",
|
||||
width: 60,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
customRender: () => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {props.levelName}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},*/
|
||||
{
|
||||
title: "完成时间",
|
||||
dataIndex: "finishTime",
|
||||
@@ -456,6 +419,8 @@ export default {
|
||||
state.name = "";
|
||||
state.projectName = undefined;
|
||||
state.tabledata = [];
|
||||
state.stdPosition = null;
|
||||
state.qualsLevelCode = null;
|
||||
};
|
||||
const afterVisibleChange = (bol) => {
|
||||
if (bol == true) {
|
||||
@@ -494,13 +459,13 @@ export default {
|
||||
// 获取数据
|
||||
function getData() {
|
||||
getStudentTaskPage({
|
||||
pageNo: state.currentPage,
|
||||
pageNum: state.currentPage,
|
||||
pageSize: state.pageSize,
|
||||
completionStatus: state.projectName,
|
||||
username: state.name,
|
||||
taskId: props.datasource.id,
|
||||
qualsLevelCode: state.qualsLevelCode,
|
||||
stdPositionId: state.stdPositionId,
|
||||
stdPosition: state.stdPosition,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log("在线课数据获取", res);
|
||||
@@ -528,6 +493,8 @@ export default {
|
||||
state.currentPage = 1;
|
||||
state.name = "";
|
||||
state.projectName = null;
|
||||
state.stdPosition = null;
|
||||
state.qualsLevelCode = null;
|
||||
getData();
|
||||
}
|
||||
|
||||
@@ -540,56 +507,35 @@ export default {
|
||||
|
||||
// 导出数据
|
||||
function exportTaskStu() {
|
||||
exportStudentTaskPage({
|
||||
pageNo: state.currentPage,
|
||||
pageSize: state.pageSize,
|
||||
completionStatus: state.projectName,
|
||||
username: state.name,
|
||||
taskId: props.datasource.id,
|
||||
qualsLevelCode: state.qualsLevelCode,
|
||||
stdPositionId: state.stdPositionId,
|
||||
}).catch((err) => {
|
||||
let blob = new Blob([err.data], {
|
||||
type: "application/vnd.ms-excel",
|
||||
});
|
||||
console.log(blob);
|
||||
let url = window.URL.createObjectURL(blob);
|
||||
|
||||
// 创建a标签并为其添加属性
|
||||
const link = document.createElement("a");
|
||||
link.href = url;
|
||||
link.download = `【${
|
||||
state.TASK_TYPE[props.datasource.taskType].name
|
||||
}】${props.datasource.taskName}.xlsx`;
|
||||
// 触发点击事件执行下载
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
// 下载完成就删掉a标签
|
||||
document.body.removeChild(link);
|
||||
//释放blob对象
|
||||
window.URL.revokeObjectURL(url);
|
||||
});
|
||||
// if(props.datasource.type==1){
|
||||
// {/* 在线课导出 */}
|
||||
// window.open(`${process.env.VUE_APP_BASE_API}/admin/online/manage/exportOnline?chapterId=${props.datasource.stageId}&type=${1}&targetId=${props.datasource.projectId}&taskId=${props.datasource.courseId}`)
|
||||
// }else if(props.datasource.taskType==11){
|
||||
// {/* 评估导出 */}
|
||||
// window.open(`${process.env.VUE_APP_BASE_API}/admin/assessment/manage/exportAssessmentMessage?chapterId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&courseId=${props.datasource.courseId}&taskId=${props.datasource.id}&taskType=${props.datasource.taskType}`)
|
||||
// }else if(props.datasource.taskType==8){
|
||||
// {/* 讨论导出 */}
|
||||
// window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportDiscussStudent?chapterId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&courseId=${props.datasource.courseId}&taskId=${props.datasource.id}&taskType=${props.datasource.taskType}`)
|
||||
// }else{
|
||||
// window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.id}&taskType=${props.datasource.taskType}`)
|
||||
// }
|
||||
let params = {
|
||||
pageNo: state.currentPage || "",
|
||||
pageSize: state.pageSize || "",
|
||||
completionStatus: state.projectName || "",
|
||||
username: state.name || "",
|
||||
taskId: props.datasource.id || "",
|
||||
qualsLevelCode: state.qualsLevelCode || "",
|
||||
stdPosition: state.stdPosition || "",
|
||||
};
|
||||
// window.open(
|
||||
// `${
|
||||
// process.env.VUE_APP_BASE_API
|
||||
// }/admin/online/manage/exportOnline?type=${14}&targetId=${
|
||||
// props.datasource.targetId
|
||||
// }&taskId=${props.datasource.courseId}`
|
||||
// buildUrl(
|
||||
// "http://192.168.18.141:32002/professional/studentTask/export",
|
||||
// params
|
||||
// )
|
||||
// );
|
||||
window.open(
|
||||
buildUrl(
|
||||
`${process.env.VUE_APP_BOE_API_URL}${process.env.VUE_APP_BASE_API_GROWTH}/professional/studentTask/export`,
|
||||
params
|
||||
)
|
||||
);
|
||||
}
|
||||
function buildUrl(url, params) {
|
||||
const searchParams = new URLSearchParams();
|
||||
Object.keys(params).forEach((key) => {
|
||||
searchParams.append(key, params[key]);
|
||||
});
|
||||
return `${url}?${searchParams.toString()}`;
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
selectProjectName,
|
||||
|
||||
@@ -56,9 +56,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="mi_btns" style="margin-left: 0px">
|
||||
<div class="btn btn1">
|
||||
<div class="btn btn1" @click="search">
|
||||
<div class="search"></div>
|
||||
<div class="btnText" @click="search">搜索</div>
|
||||
<div class="btnText">搜索</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="reset">
|
||||
<div class="search"></div>
|
||||
@@ -321,7 +321,6 @@ defineExpose({ openDrawer });
|
||||
margin-bottom: 20px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
>
|
||||
<div class="drawerMain" id="ProjCheckship" style="">
|
||||
<div class="header" style="margin-bottom: 20px">
|
||||
<div class="headerTitle">归属权转移</div>
|
||||
<div class="headerTitle">{{ title }}</div>
|
||||
<img
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="../../assets/images/basicinfo/close.png"
|
||||
@@ -98,7 +98,11 @@
|
||||
<template #action="{ record }">
|
||||
<a-space :size="2">
|
||||
<a-button
|
||||
v-if="type == 17 && record.permission != 17"
|
||||
v-if="
|
||||
type == 17 &&
|
||||
record.permission != 17 &&
|
||||
record.userId != state.userInfo.userId
|
||||
"
|
||||
style="margin-right: 12px"
|
||||
type="link"
|
||||
@click="setPermissions(record)"
|
||||
@@ -106,11 +110,15 @@
|
||||
>
|
||||
|
||||
<a-button
|
||||
v-else-if="type !== 17 && record.permission"
|
||||
v-else-if="
|
||||
type !== 17 &&
|
||||
record.userId != state.userInfo.userId &&
|
||||
record.permission == type
|
||||
"
|
||||
@click="del(record)"
|
||||
type="link"
|
||||
danger
|
||||
>删除</a-button
|
||||
>移除权限</a-button
|
||||
>
|
||||
<div v-else>--</div>
|
||||
</a-space>
|
||||
@@ -161,13 +169,16 @@ import {
|
||||
assignPermissions,
|
||||
delAssignPermissions,
|
||||
} from "@/api/growthpath";
|
||||
import { useStore } from "vuex";
|
||||
import { delStudentList } from "@/api/index1";
|
||||
import { message } from "ant-design-vue";
|
||||
import dialog from "@/utils/dialog";
|
||||
|
||||
const { state } = useStore();
|
||||
console.log(state, "sssssssssss");
|
||||
const props = defineProps({
|
||||
type: Number,
|
||||
id: String,
|
||||
title: String,
|
||||
});
|
||||
|
||||
const visiable = ref(false);
|
||||
|
||||
@@ -93,21 +93,21 @@
|
||||
</div>
|
||||
<div class="cancel" style="margin-left: 15px"></div>
|
||||
</div>
|
||||
<div v-if="downloadErrUrl !== ''" class="defeat">
|
||||
<!-- <div v-if="downloadErrUrl !== ''" class="defeat">
|
||||
<div class="detext" @click="downloadEeeorData">
|
||||
下载失败数据
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
</div> -->
|
||||
<!-- <div
|
||||
v-if="notMatchUrl != ''"
|
||||
:style="{ left: downloadErrUrl !== '' ? '181px' : '46px' }"
|
||||
class="defeat2"
|
||||
>
|
||||
<div class="detext" @click="notDown">下载不匹配的学员</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
<!-- <div
|
||||
v-if="showBottomBar"
|
||||
:class="downloadErrUrl == '' ? 'succebox' : 'defeatbox'"
|
||||
>
|
||||
@@ -117,26 +117,26 @@
|
||||
downloadErrUrl == "" ? 0 : errNum
|
||||
}}条数据解析失败
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="showBottomBar && notMatchUrl != ''" class="group_data">
|
||||
</div> -->
|
||||
<!-- <div v-if="showBottomBar && notMatchUrl != ''" class="group_data">
|
||||
<div class="icon">
|
||||
<RightCircleFilled style="color: #4ea6ff; fontsize: 18px" />
|
||||
</div>
|
||||
<div class="text">
|
||||
待导入学员的岗位与本专业力必修的要求不匹配,是否导入
|
||||
</div>
|
||||
<div class="right">
|
||||
<!-- <a-radio-group size="small" v-model:value="groupValue" button-style="solid">
|
||||
<div class="right"> -->
|
||||
<!-- <a-radio-group size="small" v-model:value="groupValue" button-style="solid">
|
||||
<a-radio-button style="margin-right:20px;width: 50px;text-align: center;" value="1">是</a-radio-button>
|
||||
<a-radio-button style="width: 50px;text-align: center;" value="0">否</a-radio-button>
|
||||
</a-radio-group> -->
|
||||
<a-switch
|
||||
<!-- <a-switch
|
||||
v-model:checked="groupValue"
|
||||
checkedChildren="是"
|
||||
unCheckedChildren="否"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<!-- <div class="loadborder">
|
||||
<div class="content">
|
||||
<div class="img"></div>
|
||||
@@ -205,7 +205,7 @@
|
||||
import { computed, reactive, toRefs } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import {
|
||||
getImportStatus,
|
||||
// getImportStatus,
|
||||
saveStudent,
|
||||
downLoadImpTemplate,
|
||||
} from "@/api/growthpath";
|
||||
@@ -235,10 +235,10 @@ export default {
|
||||
const store = useStore();
|
||||
const state = reactive({
|
||||
redisKey: "",
|
||||
locationHref: process.env.VUE_APP_BASE_API,
|
||||
template: process.env.VUE_APP_UP_LOAD_STUDENT_TEMPLATE,
|
||||
importStudent:
|
||||
process.env.VUE_APP_BASE_API + "/professional/allocation/importLearner",
|
||||
process.env.VUE_APP_BOE_API_URL +
|
||||
process.env.VUE_APP_BASE_API_GROWTH +
|
||||
"/professional/allocation/importLearner",
|
||||
timers: "", // 定时器,用于清空定时器使用
|
||||
isAddStudent: false, // 用于判断用户是否关闭弹框需要重新获取学员列表
|
||||
uploadpercent: -1,
|
||||
@@ -293,28 +293,11 @@ export default {
|
||||
state.isAddStudent = false;
|
||||
};
|
||||
const downloadTemplate = () => {
|
||||
downLoadImpTemplate().catch((err) => {
|
||||
let blob = new Blob([err.data], {
|
||||
type: "application/vnd.ms-excel",
|
||||
});
|
||||
console.log(blob);
|
||||
let url = window.URL.createObjectURL(blob);
|
||||
|
||||
// 创建a标签并为其添加属性
|
||||
const link = document.createElement("a");
|
||||
link.href = url;
|
||||
link.download = "专业力必修-录入学员模版.xlsx";
|
||||
// 触发点击事件执行下载
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
// 下载完成就删掉a标签
|
||||
document.body.removeChild(link);
|
||||
//释放blob对象
|
||||
window.URL.revokeObjectURL(url);
|
||||
});
|
||||
|
||||
window.open(
|
||||
`${process.env.VUE_APP_BOE_API_URL}${process.env.VUE_APP_BASE_API_GROWTH}/professional/allocation/downloadTemplate.do`
|
||||
);
|
||||
// window.open(
|
||||
// `${process.env.VUE_APP_BOE_API_URL}/upload/files/2024/7/专业力必修-录入学员模版.xlsx`
|
||||
// `http://192.168.18.141:32002/professional/allocation/downloadTemplate.do`
|
||||
// );
|
||||
};
|
||||
|
||||
@@ -370,36 +353,36 @@ export default {
|
||||
message.error(info.file.response.msg);
|
||||
return;
|
||||
}
|
||||
state.timers = setInterval(() => {
|
||||
state.redisKey = info.file.response.data;
|
||||
getImportStatus({ redisKey: state.redisKey })
|
||||
.then((res) => {
|
||||
console.log("查询导入状态", res);
|
||||
if (res.data.code === 200) {
|
||||
if (res.data.data.status !== "START") {
|
||||
i++;
|
||||
if (i === 1) {
|
||||
message.destroy();
|
||||
// message.success(`${info.file.name}解析成功`);
|
||||
state.showBottomBar = true;
|
||||
state.addLoading = false;
|
||||
state.isAddStudent = true;
|
||||
}
|
||||
state.succNum = res.data.data.successNum;
|
||||
state.errNum = res.data.data.failedNum;
|
||||
state.downloadErrUrl = res.data.data.url;
|
||||
state.notMatchUrl = res.data.data.notMatchUrl;
|
||||
clearInterval(state.timers);
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
clearInterval(state.timers);
|
||||
state.showBottomBar = true;
|
||||
state.addLoading = false;
|
||||
console.log("查询导入状态失败", err);
|
||||
});
|
||||
}, 500);
|
||||
// state.timers = setInterval(() => {
|
||||
// state.redisKey = info.file.response.data;
|
||||
// getImportStatus({ redisKey: state.redisKey })
|
||||
// .then((res) => {
|
||||
// console.log("查询导入状态", res);
|
||||
// if (res.data.code === 200) {
|
||||
// if (res.data.data.status !== "START") {
|
||||
// i++;
|
||||
// if (i === 1) {
|
||||
// message.destroy();
|
||||
// // message.success(`${info.file.name}解析成功`);
|
||||
// state.showBottomBar = true;
|
||||
// state.addLoading = false;
|
||||
// state.isAddStudent = true;
|
||||
// }
|
||||
// state.succNum = res.data.data.successNum;
|
||||
// state.errNum = res.data.data.failedNum;
|
||||
// state.downloadErrUrl = res.data.data.url;
|
||||
// state.notMatchUrl = res.data.data.notMatchUrl;
|
||||
// clearInterval(state.timers);
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// clearInterval(state.timers);
|
||||
// state.showBottomBar = true;
|
||||
// state.addLoading = false;
|
||||
// console.log("查询导入状态失败", err);
|
||||
// });
|
||||
// }, 500);
|
||||
} else if (status === "error") {
|
||||
state.addLoading = false;
|
||||
state.uploadErr = true;
|
||||
|
||||
@@ -45,7 +45,7 @@ export default {
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
emits: ["update:value"],
|
||||
emits: ["update:value", "change"],
|
||||
setup(props, { emit }) {
|
||||
const selectedValue = ref(null);
|
||||
const options = ref([]);
|
||||
@@ -71,6 +71,7 @@ export default {
|
||||
(val) => {
|
||||
if (val) {
|
||||
fetchOptions(props.searchData || "");
|
||||
emit("update:value", null);
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -82,6 +83,7 @@ export default {
|
||||
);
|
||||
function onSelectChange(newVal, postList) {
|
||||
emit("update:value", newVal);
|
||||
emit("change");
|
||||
}
|
||||
async function handleSearch(val) {
|
||||
console.log(val, "val");
|
||||
|
||||
@@ -5,10 +5,20 @@
|
||||
gutter="12"
|
||||
style="padding-left: 20px; margin-right: 0px"
|
||||
>
|
||||
<a-col>
|
||||
<a-form-item title="归属组织" style="min-width: 170px">
|
||||
<div class="select in">
|
||||
<OrgClass
|
||||
v-model:value="tableParam.organizationId"
|
||||
:placeName="'请选择归属组织'"
|
||||
></OrgClass>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col>
|
||||
<a-form-item title="选择岗位" style="min-width: 170px">
|
||||
<div class="select in">
|
||||
<PostSelect v-model:value="tableParam.qualsLevelCode"> </PostSelect>
|
||||
<PostSelect v-model:value="tableParam.stdPosition"> </PostSelect>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
@@ -16,20 +26,21 @@
|
||||
<a-form-item title="选择职级" style="min-width: 170px">
|
||||
<div class="select in">
|
||||
<OfficeSelect
|
||||
v-model:value="tableParam.stdPosition"
|
||||
:searchData="tableParam.qualsLevelCode"
|
||||
v-model:value="tableParam.qualsLevelCode"
|
||||
:searchData="tableParam.stdPosition"
|
||||
@change="officeSelectChange"
|
||||
></OfficeSelect>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col>
|
||||
<a-form-item title="加入方式" style="width: 193px">
|
||||
<a-form-item title="Band职级" style="width: 193px">
|
||||
<div class="select in">
|
||||
<a-select
|
||||
v-model:value="tableParam.joinMethod"
|
||||
placeholder="请选择加入方式"
|
||||
:options="statusValues"
|
||||
@change="selectstatusValue"
|
||||
v-model:value="tableParam.bandCode"
|
||||
placeholder="请选择Band职级"
|
||||
:options="bandOption"
|
||||
notFoundContent="请先选择任职资格"
|
||||
allowClear
|
||||
></a-select>
|
||||
</div>
|
||||
@@ -39,11 +50,23 @@
|
||||
<a-form-item title="姓名:" style="width: 170px">
|
||||
<a-input
|
||||
class="cus-input"
|
||||
v-model:value="tableParam.keyword"
|
||||
placeholder="请输入姓名"
|
||||
v-model:value="tableParam.username"
|
||||
placeholder="请输入姓名/工号"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col>
|
||||
<a-form-item title="加入方式" style="width: 193px">
|
||||
<div class="select in">
|
||||
<a-select
|
||||
v-model:value="tableParam.joinMethod"
|
||||
placeholder="请选择加入方式"
|
||||
:options="statusValues"
|
||||
allowClear
|
||||
></a-select>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col>
|
||||
<a-button
|
||||
class="cus-btn"
|
||||
@@ -93,7 +116,6 @@
|
||||
:id="id"
|
||||
@confirm="submitCall"
|
||||
:stage="stage"
|
||||
:coulmsList="coulmsList"
|
||||
:selectStu="true"
|
||||
>
|
||||
<a-button class="cus-btn" style="background: #4ea6ff; color: #fff">
|
||||
@@ -102,7 +124,7 @@
|
||||
style="margin-right: 10px"
|
||||
src="../../assets/images/courseManage/add0.png"
|
||||
/></template>
|
||||
添加学员
|
||||
新增学员
|
||||
</a-button>
|
||||
</GrowthCommonStudent>
|
||||
</a-col>
|
||||
@@ -132,7 +154,7 @@
|
||||
style="margin-right: 10px"
|
||||
src="../../assets/images/projectadd/delete.png"
|
||||
/></template>
|
||||
批量删除
|
||||
批量删除学员
|
||||
</a-button>
|
||||
</a-col>
|
||||
<a-col :span="1.5">
|
||||
@@ -149,21 +171,6 @@
|
||||
导出学员信息
|
||||
</a-button>
|
||||
</a-col>
|
||||
|
||||
<!-- <a-col :span="1.5">
|
||||
<a-button
|
||||
class="cus-btn"
|
||||
@click="showTexts"
|
||||
style="background: #ffffff; color: #578afc; border: 1px solid #578afc"
|
||||
>
|
||||
<template #icon
|
||||
><img
|
||||
style="margin-right: 10px"
|
||||
src="../../assets/images/projectadd/edit.png"
|
||||
/></template>
|
||||
导入记录
|
||||
</a-button>
|
||||
</a-col> -->
|
||||
</a-row>
|
||||
|
||||
<div class="tips">
|
||||
@@ -260,11 +267,6 @@
|
||||
:courseId="id"
|
||||
:courseType="type"
|
||||
/>
|
||||
<!-- <GrowShowText
|
||||
:permissions="permissions"
|
||||
@isSearchList="isSearchLists"
|
||||
v-model:showText="showText"
|
||||
/> -->
|
||||
</template>
|
||||
<script setup lang="jsx">
|
||||
import { computed, defineProps, onMounted, ref, watch } from "vue";
|
||||
@@ -275,6 +277,7 @@ import {
|
||||
batchDelStudents,
|
||||
allocationList,
|
||||
addLearners,
|
||||
getBandList,
|
||||
} from "@/api/growthpath";
|
||||
import GrowthCommonStudent from "./GrowthCommonStudent";
|
||||
import { message } from "ant-design-vue";
|
||||
@@ -284,7 +287,7 @@ import { checkGrowthPer } from "@/utils/utils";
|
||||
import dialog from "@/utils/dialog";
|
||||
import PostSelect from "@/components/growthpath/PostSelect";
|
||||
import OfficeSelect from "@/components/growthpath/OfficeSelect";
|
||||
import GrowShowText from "@/components/growthpath/GrowShowText";
|
||||
import OrgClass from "@/components/growthpath/OrgClass";
|
||||
const props = defineProps({
|
||||
type: Number,
|
||||
permissions: {
|
||||
@@ -316,35 +319,41 @@ const props = defineProps({
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
params: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
},
|
||||
growId: String,
|
||||
});
|
||||
|
||||
// const { loading: stuAsyncLoading, start } = useAsyncStu(props.id, props.type, getStuList);
|
||||
|
||||
const topFlagList = ref([
|
||||
{
|
||||
id: 0,
|
||||
value: 0,
|
||||
label: "普通学员",
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
value: 1,
|
||||
label: "优秀学员",
|
||||
},
|
||||
]);
|
||||
const visibleName = ref([]);
|
||||
// band职级选项
|
||||
const bandOption = ref([]);
|
||||
// 加入方式选项
|
||||
const statusValues = ref([
|
||||
{ value: "0", label: "岗位匹配" },
|
||||
{ value: "1", label: "手动加入" },
|
||||
{ value: "1", label: "自动匹配" },
|
||||
{ value: "2", label: "手动匹配" },
|
||||
{ value: "3", label: "导入" },
|
||||
{ value: "4", label: "添加" },
|
||||
]);
|
||||
const getRowClass = (record) => {
|
||||
return record.moveStatus ? "row-moveStatus-true" : "";
|
||||
};
|
||||
// 职级change
|
||||
const officeSelectChange = () => {
|
||||
getBandList({
|
||||
stdPosition: tableParam.value.stdPosition,
|
||||
qualsLevelCode: tableParam.value.qualsLevelCode,
|
||||
}).then((res) => {
|
||||
// 清空筛选band职级的值
|
||||
tableParam.value.bandCode = null;
|
||||
|
||||
bandOption.value = res.data.data.map((item) => {
|
||||
return {
|
||||
value: item,
|
||||
lable: item,
|
||||
};
|
||||
});
|
||||
});
|
||||
};
|
||||
const tablecolumns = ref([
|
||||
{
|
||||
title: "姓名",
|
||||
@@ -367,32 +376,39 @@ const tablecolumns = ref([
|
||||
},
|
||||
{
|
||||
title: "归属组织",
|
||||
dataIndex: "studentOrgName",
|
||||
key: "studentOrgName",
|
||||
dataIndex: "orgName",
|
||||
key: "orgName",
|
||||
width: 230,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "岗位",
|
||||
dataIndex: "studentJobName",
|
||||
key: "studentJobName",
|
||||
title: "标准岗位",
|
||||
dataIndex: "stdPositionName",
|
||||
key: "stdPositionName",
|
||||
width: 170,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "Band",
|
||||
dataIndex: "studentBandCode",
|
||||
key: "studentBandCode",
|
||||
title: "任职资格等级",
|
||||
dataIndex: "qualsLevelDesr",
|
||||
key: "qualsLevelDesr",
|
||||
width: 100,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "Band职级",
|
||||
dataIndex: "bandName",
|
||||
key: "bandName",
|
||||
width: 100,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
// customRender: ({ record: { studentOrgName, studentDepartName } }) =>
|
||||
// allDepartShow(studentOrgName, studentDepartName),
|
||||
},
|
||||
{
|
||||
title: "加入方式",
|
||||
@@ -403,7 +419,7 @@ const tablecolumns = ref([
|
||||
customRender: ({ record: { joinMethod } }) =>
|
||||
({
|
||||
1: "自动匹配",
|
||||
2: "手动添加",
|
||||
2: "手动匹配",
|
||||
3: "导入",
|
||||
4: "添加",
|
||||
}[joinMethod]),
|
||||
@@ -412,17 +428,15 @@ const tablecolumns = ref([
|
||||
title: "进度",
|
||||
width: 100,
|
||||
align: "center",
|
||||
dataIndex: "finishNeedfinish",
|
||||
key: "finishNeedfinish",
|
||||
dataIndex: "progress",
|
||||
key: "progress",
|
||||
className: "h",
|
||||
customRender: ({ record }) => (
|
||||
<div class="text">
|
||||
{record.finishTaskNum || 0}/{record.needFinishTaskNum || 0}
|
||||
</div>
|
||||
<div class="text">{record.progress || 0}%</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "状态",
|
||||
title: "完成状态",
|
||||
dataIndex: "finishStatus",
|
||||
key: "finishStatus",
|
||||
width: 100,
|
||||
@@ -447,56 +461,12 @@ const tablecolumns = ref([
|
||||
},
|
||||
]);
|
||||
|
||||
function allDepartShow(a, b) {
|
||||
let org =
|
||||
a == "" || a == null || a == undefined
|
||||
? (a = "")
|
||||
: a.slice(0, 1) == "/"
|
||||
? a.slice(1, a.length)
|
||||
: a;
|
||||
let depart = b == "" || b == null || b == undefined ? (b = "") : b;
|
||||
let allname = org == "" && depart == "" ? "-" : org + depart;
|
||||
return allname;
|
||||
}
|
||||
const isSearchLists = (item) => {
|
||||
console.log(item, "item");
|
||||
getStuList();
|
||||
};
|
||||
const coulmsList = ref([
|
||||
{
|
||||
title: "岗位",
|
||||
dataIndex: "jobName",
|
||||
key: "jobName",
|
||||
width: 80,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "职级",
|
||||
dataIndex: "bandCode",
|
||||
key: "bandCode",
|
||||
width: 80,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
},
|
||||
]);
|
||||
const tableParam = ref({
|
||||
joinMethod: null,
|
||||
keyword: "", //学员名称
|
||||
// groupName: "", //学员小组
|
||||
// studentDepartName: null, //部门名称
|
||||
topFlag: null, //是否是优秀学员
|
||||
username: "", //学员名称
|
||||
pageNum: 1,
|
||||
status: 1,
|
||||
pageSize: 10,
|
||||
type: props.type,
|
||||
// pid: props.id,
|
||||
growthId: props.growId,
|
||||
...props.params,
|
||||
bandCodeList: "",
|
||||
positionNameList: "",
|
||||
});
|
||||
|
||||
const stuSelectKeys = ref([]);
|
||||
@@ -520,19 +490,26 @@ function search() {
|
||||
|
||||
// 导出数据
|
||||
function exportTaskStu() {
|
||||
console.log("props.datasource", props);
|
||||
window.open(
|
||||
`${
|
||||
process.env.VUE_APP_BASE_API
|
||||
}/admin/student/exportTaskStudent?type=${14}&pid=${props.id}`
|
||||
buildUrl(
|
||||
`${process.env.VUE_APP_BOE_API_URL}${process.env.VUE_APP_BASE_API_GROWTH}/professional/allocation/export`,
|
||||
tableParam.value
|
||||
)
|
||||
);
|
||||
// window.open(
|
||||
// buildUrl(
|
||||
// "http://192.168.18.141:32002/professional/allocation/export",
|
||||
// tableParam.value
|
||||
// )
|
||||
// );
|
||||
}
|
||||
function buildUrl(url, params) {
|
||||
const searchParams = new URLSearchParams();
|
||||
Object.keys(params).forEach((key) => {
|
||||
searchParams.append(key, params[key]);
|
||||
});
|
||||
return `${url}?${searchParams.toString()}`;
|
||||
}
|
||||
|
||||
const showText = ref(false);
|
||||
const showTexts = () => {
|
||||
showText.value = true;
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
// debugger
|
||||
console.log("props.activeKey1" + props.activeKey1);
|
||||
@@ -587,14 +564,14 @@ function getStuList() {
|
||||
}
|
||||
|
||||
function reset() {
|
||||
tableParam.value.keyword = "";
|
||||
tableParam.value.username = "";
|
||||
// tableParam.value.groupName = ""; //学员小组
|
||||
tableParam.value.topFlag = null; //是否是优秀学员
|
||||
tableParam.value.bandCodeList = "";
|
||||
tableParam.value.positionNameList = "";
|
||||
tableParam.value.joinMethod = null;
|
||||
tableParam.value.qualsLevelCode = null;
|
||||
tableParam.value.stdPosition = null;
|
||||
tableParam.value.organizationId = null;
|
||||
tableParam.value.bandCode = null;
|
||||
getStuList();
|
||||
}
|
||||
|
||||
@@ -646,7 +623,6 @@ function del(row) {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function submitCall(selectList) {
|
||||
tableData.value.loading = true;
|
||||
addLearners({
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<div class="header_top">
|
||||
<div class="pathnameInp">
|
||||
<a-input
|
||||
v-model:value="nameUserNo"
|
||||
v-model:value="username"
|
||||
style="width: 270px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入操作人姓名/工号"
|
||||
/>
|
||||
@@ -30,6 +30,7 @@
|
||||
separator="至"
|
||||
:placeholder="[' 开始时间', ' 结束时间']"
|
||||
@change="searchTimeChange"
|
||||
valueFormat="YYYY-MM-DD"
|
||||
/>
|
||||
</div>
|
||||
<div style="display: flex; margin-bottom: 20px">
|
||||
@@ -62,13 +63,15 @@ export default {
|
||||
name: "UpdateRecord",
|
||||
setup(props, ctx) {
|
||||
const state = reactive({
|
||||
nameUserNo: null,
|
||||
username: null,
|
||||
searchdate: [],
|
||||
avisible: false,
|
||||
growthId: null,
|
||||
pageSize: 10,
|
||||
pageNum: 1,
|
||||
total: 0,
|
||||
startTime: "",
|
||||
endTime: "",
|
||||
});
|
||||
const pagination = computed(() => ({
|
||||
total: state.total,
|
||||
@@ -83,6 +86,9 @@ export default {
|
||||
growthId: state.growthId,
|
||||
pageSize: state.pageSize,
|
||||
pageNum: state.pageNum,
|
||||
username: state.username,
|
||||
startTime: state.startTime,
|
||||
endTime: state.endTime,
|
||||
}).then((res) => {
|
||||
console.log(res);
|
||||
tableData.value = res.data.data.records;
|
||||
@@ -117,19 +123,28 @@ export default {
|
||||
align: "center",
|
||||
},
|
||||
]);
|
||||
const searchTimeChange = (e) => {
|
||||
console.log(e, "eeeee");
|
||||
const searchTimeChange = (date) => {
|
||||
console.log(date);
|
||||
if (date) {
|
||||
state.startTime = date[0] + " 00:00:00";
|
||||
state.endTime = date[1] + " 23:59:59";
|
||||
} else {
|
||||
state.startTime = "";
|
||||
state.endTime = "";
|
||||
}
|
||||
};
|
||||
const resetLearnPath = () => {
|
||||
state.nameUserNo = null;
|
||||
state.username = null;
|
||||
state.searchdate = [];
|
||||
state.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
const closeDrawer = () => {
|
||||
state.nameUserNo = null;
|
||||
state.username = null;
|
||||
state.searchdate = [];
|
||||
state.avisible = false;
|
||||
state.startTime = "";
|
||||
state.endTime = "";
|
||||
};
|
||||
const open = (row) => {
|
||||
state.growthId = row.id;
|
||||
|
||||
@@ -1,257 +1,266 @@
|
||||
<template>
|
||||
<div class="editing-tasks">
|
||||
<div style="display: flex">
|
||||
<div class="right">
|
||||
<div class="addhead">
|
||||
<div class="filt">
|
||||
<div class="le">
|
||||
<div class="imgfor">
|
||||
<div class="fort" style="color: #333333; font-size: 16px">
|
||||
{{
|
||||
`${basicData?.organizationName || ""}${
|
||||
basicData?.stdPosition || ""
|
||||
}${basicData?.qualsLevelDesr || ""}`
|
||||
}}
|
||||
</div>
|
||||
<div class="fort">归属组织:{{ basicData?.ownershipOrg }}</div>
|
||||
<div class="fort">创建时间:{{ basicData?.createTime }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rightt">
|
||||
<router-link
|
||||
:to="{
|
||||
path: '/pathmanage',
|
||||
query: { id: growId, routerEdit: true, pre: pre },
|
||||
}"
|
||||
>
|
||||
<div style="display: flex">
|
||||
<img
|
||||
class="img2"
|
||||
src="../../assets/images/leveladd/back.png"
|
||||
/>
|
||||
<div class="return">返回</div>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mid">
|
||||
<div class="tabs">
|
||||
<a-tabs
|
||||
v-model:activeKey="activeKey"
|
||||
size="large"
|
||||
@change="tabsChange"
|
||||
>
|
||||
<a-tab-pane key="1" tab="必修"></a-tab-pane>
|
||||
<a-tab-pane key="2" tab="选修"></a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
<div class="handler">
|
||||
<div class="item" v-for="(value, key) in TASK_TYPE" :key="key">
|
||||
<component
|
||||
:ref="(el) => (courseRef['el' + key] = el)"
|
||||
v-model:taskList="listDatas"
|
||||
:is="value.component"
|
||||
:growId="growId"
|
||||
:id="growId"
|
||||
:type="value.type"
|
||||
:activeKey="activeKey"
|
||||
:infoType="2"
|
||||
@dataListUp="dataListUp"
|
||||
@refresh="getListTask"
|
||||
>
|
||||
<div class="itcon">
|
||||
<div class="img">
|
||||
<img :src="value.img" />
|
||||
<a-spin :spinning="spinning">
|
||||
<div style="display: flex">
|
||||
<div class="right">
|
||||
<div class="addhead">
|
||||
<div class="filt">
|
||||
<div class="le">
|
||||
<div class="imgfor">
|
||||
<div class="fort" style="color: #333333; font-size: 16px">
|
||||
{{
|
||||
`${basicData?.stdPosition || ""}${
|
||||
basicData?.qualsLevelDesr || ""
|
||||
}`
|
||||
}}
|
||||
</div>
|
||||
<div class="text">{{ value.name }}</div>
|
||||
<div class="fort">创建时间:{{ basicData?.createTime }}</div>
|
||||
</div>
|
||||
</component>
|
||||
<div></div>
|
||||
<div class="lin"></div>
|
||||
</div>
|
||||
<div class="rightt">
|
||||
<router-link
|
||||
:to="{
|
||||
path: '/pathmanage',
|
||||
query: { id: growId, routerEdit: true, pre: pre },
|
||||
}"
|
||||
>
|
||||
<div style="display: flex">
|
||||
<img
|
||||
class="img2"
|
||||
src="../../assets/images/leveladd/back.png"
|
||||
/>
|
||||
<div class="return">返回</div>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="boom">
|
||||
<div class="boomcen">
|
||||
<div class="title">
|
||||
<div class="tit_left">
|
||||
<span>任务列表</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="listDatas.length != 0"
|
||||
class="btn btn2"
|
||||
@click="confirmDelTask()"
|
||||
|
||||
<div class="mid">
|
||||
<div class="tabs">
|
||||
<a-tabs
|
||||
v-model:activeKey="activeKey"
|
||||
size="large"
|
||||
@change="tabsChange"
|
||||
>
|
||||
<div class="imgIcon"></div>
|
||||
<div class="btnText">批量删除</div>
|
||||
<a-tab-pane key="1" tab="必修"></a-tab-pane>
|
||||
<a-tab-pane key="2" tab="选修"></a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
<div class="handler">
|
||||
<div class="item" v-for="(value, key) in TASK_TYPE" :key="key">
|
||||
<component
|
||||
:ref="(el) => (courseRef['el' + key] = el)"
|
||||
v-model:taskList="listDatas"
|
||||
:is="value.component"
|
||||
:growId="growId"
|
||||
:id="growId"
|
||||
:type="value.type"
|
||||
:activeKey="activeKey"
|
||||
:infoType="2"
|
||||
@dataListUp="dataListUp"
|
||||
@refresh="getListTask"
|
||||
>
|
||||
<div class="itcon">
|
||||
<div class="img">
|
||||
<img :src="value.img" />
|
||||
</div>
|
||||
<div class="text">{{ value.name }}</div>
|
||||
</div>
|
||||
</component>
|
||||
<div></div>
|
||||
<div class="lin"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="listDatas.length != 0" class="tableBox">
|
||||
<div
|
||||
style="
|
||||
height: 50px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background-color: #eff4fc;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #999ba3;
|
||||
line-height: 36px;
|
||||
border-bottom: 1px solid #f2f6fc;
|
||||
"
|
||||
>
|
||||
</div>
|
||||
<div class="boom">
|
||||
<div class="boomcen">
|
||||
<div class="title">
|
||||
<div class="tit_left">
|
||||
<span>任务列表</span>
|
||||
<div class="tips" v-show="activeKey == 2">
|
||||
<div>提示:该专业力必修的学员需完成</div>
|
||||
<div style="color: #ee8237; margin: 0 4px">
|
||||
{{ basicData.electivesCompletedNum }}
|
||||
</div>
|
||||
<div>个选修任务</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="listDatas.length != 0"
|
||||
class="btn btn2"
|
||||
@click="confirmDelTask()"
|
||||
>
|
||||
<div class="imgIcon"></div>
|
||||
<div class="btnText">批量删除</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="listDatas.length != 0" class="tableBox">
|
||||
<div
|
||||
style="
|
||||
width: 87px;
|
||||
text-align: center;
|
||||
height: 50px;
|
||||
display: flex;
|
||||
margin-left: 46px;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background-color: #eff4fc;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #999ba3;
|
||||
line-height: 36px;
|
||||
border-bottom: 1px solid #f2f6fc;
|
||||
"
|
||||
>
|
||||
<img
|
||||
<div
|
||||
style="
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
margin-top: 12px;
|
||||
width: 87px;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
margin-left: 46px;
|
||||
"
|
||||
:src="
|
||||
selectAll === 0
|
||||
? require('../../assets/images/notSelect.png')
|
||||
: selectAll === 1
|
||||
? require('../../assets/images/selectAll.png')
|
||||
: require('../../assets/images/select.png')
|
||||
"
|
||||
@click="selectRowAll"
|
||||
/>
|
||||
<div style="margin-top: 2px; margin-left: 8px">类型</div>
|
||||
</div>
|
||||
<div style="width: 120px; text-align: center">名称</div>
|
||||
<div style="width: 87px; text-align: center">时长</div>
|
||||
<div style="width: 87px; text-align: center">状态</div>
|
||||
<div
|
||||
style="width: 120px; text-align: center; margin-right: 20px"
|
||||
>
|
||||
操作
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-for="(element, index) of listDatas"
|
||||
style="
|
||||
height: 50px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #f2f6fc;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #4f5156;
|
||||
line-height: 36px;
|
||||
"
|
||||
class="tableRow"
|
||||
>
|
||||
<div
|
||||
style="
|
||||
width: 87px;
|
||||
text-align: center;
|
||||
margin-left: 46px;
|
||||
position: relative;
|
||||
"
|
||||
>
|
||||
<div class="racona">
|
||||
<a-checkbox
|
||||
:id="element.id"
|
||||
v-model:checked="element.checked"
|
||||
></a-checkbox>
|
||||
<div style="margin-top: 2px; margin-left: 8px">
|
||||
{{ TASK_TYPE[element.taskType]?.name || "" }}
|
||||
</div>
|
||||
>
|
||||
<img
|
||||
style="
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
margin-top: 12px;
|
||||
"
|
||||
:src="
|
||||
selectAll === 0
|
||||
? require('../../assets/images/notSelect.png')
|
||||
: selectAll === 1
|
||||
? require('../../assets/images/selectAll.png')
|
||||
: require('../../assets/images/select.png')
|
||||
"
|
||||
@click="selectRowAll"
|
||||
/>
|
||||
<div style="margin-top: 2px; margin-left: 8px">类型</div>
|
||||
</div>
|
||||
<div style="width: 120px; text-align: center">名称</div>
|
||||
<div style="width: 87px; text-align: center">时长</div>
|
||||
<div style="width: 87px; text-align: center">状态</div>
|
||||
<div
|
||||
style="width: 120px; text-align: center; margin-right: 20px"
|
||||
>
|
||||
操作
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
width: 120px;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
"
|
||||
:title="element.taskName"
|
||||
>
|
||||
{{ element.taskName }}
|
||||
</div>
|
||||
<div style="width: 87px; text-align: center">
|
||||
{{ element.duration ? element.duration + "分钟" : "-" }}
|
||||
</div>
|
||||
<div style="width: 87px; text-align: center">
|
||||
{{ element.status == "0" ? "未发布" : "已发布" }}
|
||||
</div>
|
||||
<div
|
||||
style="width: 120px; text-align: center; margin-right: 20px"
|
||||
>
|
||||
<div class="opa">
|
||||
<div class="opacation">
|
||||
<template v-if="element.status == '0'">
|
||||
<span
|
||||
style="color: #4ea6ff; cursor: pointer"
|
||||
@click="published(element, index)"
|
||||
>
|
||||
发布
|
||||
</span>
|
||||
|
||||
<span
|
||||
style="color: #4ea6ff; cursor: pointer"
|
||||
@click="editTaskForType(element, index)"
|
||||
>
|
||||
编辑
|
||||
</span>
|
||||
<span
|
||||
style="color: #4ea6ff; cursor: pointer"
|
||||
@click="confirmDelTask(element, index)"
|
||||
>
|
||||
删除
|
||||
</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span
|
||||
v-if="element.status == '1'"
|
||||
style="color: #4ea6ff; cursor: pointer"
|
||||
@click="withdraw(element, index)"
|
||||
>
|
||||
撤回
|
||||
</span>
|
||||
</template>
|
||||
<div
|
||||
v-for="(element, index) of listDatas"
|
||||
style="
|
||||
height: 50px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #f2f6fc;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #4f5156;
|
||||
line-height: 36px;
|
||||
"
|
||||
class="tableRow"
|
||||
>
|
||||
<div
|
||||
style="
|
||||
width: 87px;
|
||||
text-align: center;
|
||||
margin-left: 46px;
|
||||
position: relative;
|
||||
"
|
||||
>
|
||||
<div class="racona">
|
||||
<a-checkbox
|
||||
:id="element.id"
|
||||
v-model:checked="element.checked"
|
||||
></a-checkbox>
|
||||
<div style="margin-top: 2px; margin-left: 8px">
|
||||
{{ TASK_TYPE[element.taskType]?.name || "" }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
width: 120px;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
"
|
||||
:title="element.taskName"
|
||||
>
|
||||
{{ element.taskName }}
|
||||
</div>
|
||||
<div style="width: 87px; text-align: center">
|
||||
{{ element.duration ? element.duration + "分钟" : "-" }}
|
||||
</div>
|
||||
<div style="width: 87px; text-align: center">
|
||||
{{ element.status == "0" ? "未发布" : "已发布" }}
|
||||
</div>
|
||||
<div
|
||||
style="width: 120px; text-align: center; margin-right: 20px"
|
||||
>
|
||||
<div class="opa">
|
||||
<div class="opacation">
|
||||
<template v-if="element.status == '0'">
|
||||
<span
|
||||
style="color: #4ea6ff; cursor: pointer"
|
||||
@click="published(element, index)"
|
||||
>
|
||||
发布
|
||||
</span>
|
||||
|
||||
<span
|
||||
style="color: #4ea6ff; cursor: pointer"
|
||||
@click="editTaskForType(element, index)"
|
||||
>
|
||||
编辑
|
||||
</span>
|
||||
<span
|
||||
style="color: #4ea6ff; cursor: pointer"
|
||||
@click="confirmDelTask(element, index)"
|
||||
>
|
||||
删除
|
||||
</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span
|
||||
v-if="element.status == '1'"
|
||||
style="color: #4ea6ff; cursor: pointer"
|
||||
@click="withdraw(element, index)"
|
||||
>
|
||||
撤回
|
||||
</span>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 无数据样式 -->
|
||||
<div v-else class="notable">
|
||||
<div class="notablebox">
|
||||
<div class="boxbody">
|
||||
<div class="boximg"></div>
|
||||
<div class="boxtitle">
|
||||
<span style="color: #ffb64e; font-size: 20px">无任务</span>
|
||||
</div>
|
||||
<div class="boxtitle2">
|
||||
<span style="color: #878b92">请点击上方,创建任务</span>
|
||||
<!-- 无数据样式 -->
|
||||
<div v-else class="notable">
|
||||
<div class="notablebox">
|
||||
<div class="boxbody">
|
||||
<div class="boximg"></div>
|
||||
<div class="boxtitle">
|
||||
<span style="color: #ffb64e; font-size: 20px"
|
||||
>无任务</span
|
||||
>
|
||||
</div>
|
||||
<div class="boxtitle2">
|
||||
<span style="color: #878b92">请点击上方,创建任务</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="smallleft"></div>
|
||||
<div class="smallright"></div>
|
||||
</div>
|
||||
<div class="smallleft"></div>
|
||||
<div class="smallright"></div>
|
||||
</div>
|
||||
<!-- 无数据样式 -->
|
||||
</div>
|
||||
<!-- 无数据样式 -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</a-spin>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
@@ -329,15 +338,22 @@ const dataListUp = (val) => {
|
||||
getListTask();
|
||||
};
|
||||
const listDatas = ref([]);
|
||||
const spinning = ref(false);
|
||||
const getListTask = () => {
|
||||
spinning.value = true;
|
||||
notPublishedTaskList({
|
||||
growthId: growId,
|
||||
type: activeKey.value,
|
||||
}).then((res) => {
|
||||
if (res.data.code === 200) {
|
||||
listDatas.value = res.data.data.records;
|
||||
}
|
||||
});
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.data.code === 200) {
|
||||
listDatas.value = res.data.data.records;
|
||||
}
|
||||
spinning.value = false;
|
||||
})
|
||||
.catch((err) => {
|
||||
spinning.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
const basicData = ref({});
|
||||
@@ -601,8 +617,14 @@ const withdraw = (element) => {
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: #363636;
|
||||
line-height: 36px;
|
||||
line-height: 24px;
|
||||
// margin-top: 30px;
|
||||
.tips {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.tit_right {
|
||||
|
||||
@@ -5,9 +5,6 @@
|
||||
<PostSelectNew v-model:value="statusPost"> </PostSelectNew>
|
||||
</div>
|
||||
<div class="select multi" style="min-width: 181px; height: 40px">
|
||||
<!-- <RankSelect
|
||||
v-model:value="statusRank"
|
||||
></RankSelect> -->
|
||||
<OfficeSelect v-model:value="statusOffice" :searchData="statusPost" />
|
||||
</div>
|
||||
<div class="select">
|
||||
@@ -62,13 +59,13 @@
|
||||
>管理</a-button
|
||||
>
|
||||
<DropDown v-if="record?.permissions?.includes('17')" value="授权">
|
||||
<TableModelStudent :id="record.id" :type="17"
|
||||
<TableModelStudent :id="record.id" title="转移归属权" :type="17"
|
||||
>归属权</TableModelStudent
|
||||
>
|
||||
<TableModelStudent :id="record.id" :type="15"
|
||||
<TableModelStudent :id="record.id" title="添加查看权" :type="15"
|
||||
>查看权</TableModelStudent
|
||||
>
|
||||
<TableModelStudent :id="record.id" :type="16"
|
||||
<TableModelStudent :id="record.id" title="添加管理权" :type="16"
|
||||
>管理权</TableModelStudent
|
||||
>
|
||||
</DropDown>
|
||||
@@ -153,11 +150,7 @@
|
||||
<span>标准岗位</span>
|
||||
</div>
|
||||
<div class="bg_body_input">
|
||||
<PostSelectNew
|
||||
v-model:value="statusPosts"
|
||||
width="384px"
|
||||
:disabled="editId"
|
||||
>
|
||||
<PostSelectNew v-model:value="statusPosts" width="384px" disabled>
|
||||
</PostSelectNew>
|
||||
</div>
|
||||
</div>
|
||||
@@ -173,7 +166,7 @@
|
||||
</div>
|
||||
<div class="bg_body_input">
|
||||
<OfficeSelect
|
||||
:disabled="editId"
|
||||
disabled
|
||||
width="384px"
|
||||
:searchData="statusPosts"
|
||||
@bandCodes="getBandCodes"
|
||||
@@ -250,10 +243,9 @@
|
||||
<div class="bg_body_input">
|
||||
<a-radio-group v-model:value="template">
|
||||
<div style="display: flex">
|
||||
<a-radio :value="1" style="margin-bottom: 15px"
|
||||
>路径图</a-radio
|
||||
<a-radio value="1" style="margin-bottom: 15px">路径图</a-radio
|
||||
><br />
|
||||
<a-radio :value="2">任务列表</a-radio>
|
||||
<a-radio value="2">任务列表</a-radio>
|
||||
</div>
|
||||
</a-radio-group>
|
||||
</div>
|
||||
@@ -348,6 +340,7 @@ export default {
|
||||
statusRankCreate: [],
|
||||
courseNum: "",
|
||||
matStudens: "",
|
||||
elePublishedNum: 0, // 选修发布数量
|
||||
pathWays: "",
|
||||
statusPost: null,
|
||||
matchRules: "1",
|
||||
@@ -446,10 +439,10 @@ export default {
|
||||
let params = {
|
||||
pageNum: state.pageNum,
|
||||
pageSize: state.pageSize,
|
||||
stdPosition: state.statusOffice,
|
||||
stdPosition: state.statusPost,
|
||||
isPublished: state.statusValue,
|
||||
bandIdList: state.statusRank, //职级
|
||||
qualsLevelCode: state.statusPost,
|
||||
qualsLevelCode: state.statusOffice,
|
||||
};
|
||||
console.log(store);
|
||||
// 判断当前用户是否是专业力必修角色管理员,如果不是查询列表时需传入员工工号
|
||||
@@ -491,18 +484,22 @@ export default {
|
||||
state.statusPosts = record.stdPosition;
|
||||
state.statusOffices = record.qualsLevelCode;
|
||||
state.courseNum = record.electivesCompletedNum;
|
||||
state.elePublishedNum = record.elePublishedNum;
|
||||
state.pathWays = record.description;
|
||||
state.band = record.bandCodes;
|
||||
state.matchRules = record.matchRules;
|
||||
state.matchRules = record.matchRules || "1";
|
||||
state.template = state.template || "1";
|
||||
state.bg_check = true;
|
||||
};
|
||||
// 确定
|
||||
const confirm = () => {
|
||||
if (state.statusPosts == "" || state.statusPosts == null) {
|
||||
return message.error("请选择岗位");
|
||||
if (state.courseNum !== 0 && !state.courseNum) {
|
||||
return message.error("请输入完成选修数量");
|
||||
}
|
||||
if (state.statusOffices == "" || state.statusRanks == null) {
|
||||
return message.error("请选择任职资格等级");
|
||||
if (state.courseNum > state.elePublishedNum) {
|
||||
message.warning("完成选修数量不能大于已发布的选修数量");
|
||||
state.courseNum = state.elePublishedNum;
|
||||
return;
|
||||
}
|
||||
const params = {
|
||||
stdPosition: state.statusPosts,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user