专业力必修提交

This commit is contained in:
Pengxiansen
2025-01-23 23:27:54 +08:00
parent f1956e6249
commit 1bab523091
13 changed files with 1028 additions and 1020 deletions

View File

@@ -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 }) 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 }) 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 exportStudentTaskPage = (obj) => http.post('/professional/studentTask/export', obj)
// 任务管理概览
export const taskInformation = (growthId) => http.get('/professional/managementOverview/taskInformation/' + growthId)

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

View File

@@ -90,7 +90,7 @@
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 20px; height: 18px" style="width: 20px; height: 18px"
src="../assets/images/navleft/studyPath.png" src="../assets/images/navleft/pathIcon.png"
/> />
</div> </div>
<router-link to="/growthpath">专业力必修</router-link> <router-link to="/growthpath">专业力必修</router-link>

View File

@@ -31,41 +31,36 @@
</div> --> </div> -->
<div class="search" style="justify-content: flex-start"> <div class="search" style="justify-content: flex-start">
<div class="sealeft"> <div class="sealeft">
<div class="namecon" style="margin-right: 30px"> <div class="namecon" style="margin-right: 16px">
<div class="name">标准岗位</div> <PostSelectNew width="200px" v-model:value="stdPosition">
<PostSelectNew width="200px" v-model:value="stdPositionId">
</PostSelectNew> </PostSelectNew>
</div> </div>
<div class="namecon" style="margin-right: 30px"> <div class="namecon" style="margin-right: 16px">
<div class="name">任职资格</div>
<OfficeSelect <OfficeSelect
v-model:value="qualsLevelCode" v-model:value="qualsLevelCode"
:searchData="stdPositionId" :searchData="stdPosition"
width="200px" width="200px"
/> />
</div> </div>
<div class="namecon" style="margin-right: 16px">
<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="select"> <div class="select">
<a-select <a-select
v-model:value="projectName" v-model:value="projectName"
style="width: 200px" style="width: 200px"
placeholder="请选择" placeholder="任务状态"
:options="projectNameList" :options="projectNameList"
@change="selectProjectName" @change="selectProjectName"
allowClear allowClear
></a-select> ></a-select>
</div> </div>
</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>
<div class="btns"> <div class="btns">
<div <div
@@ -191,13 +186,13 @@ export default {
const state = reactive({ const state = reactive({
visible: props.Tvisible, visible: props.Tvisible,
name: "", name: "",
pageNo: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
currentPage: 1, currentPage: 1,
tableDataTotal: 0, tableDataTotal: 0,
projectName: undefined, projectName: undefined,
TASK_TYPE: TASK_TYPE, TASK_TYPE: TASK_TYPE,
stdPositionId: null, stdPosition: null,
qualsLevelCode: null, qualsLevelCode: null,
projectNameList: [ projectNameList: [
{ {
@@ -227,7 +222,7 @@ export default {
title: "工号", title: "工号",
dataIndex: "username", dataIndex: "username",
key: "username", key: "username",
width: 50, width: 80,
align: "center", align: "center",
className: "h head", className: "h head",
customRender: (text) => { customRender: (text) => {
@@ -245,7 +240,7 @@ export default {
title: "姓名", title: "姓名",
dataIndex: "userNickName", dataIndex: "userNickName",
key: "userNickName", key: "userNickName",
width: 50, width: 80,
align: "center", align: "center",
className: "h head", className: "h head",
customRender: (text) => { 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: "标准岗位", title: "标准岗位",
dataIndex: "stdPositionName", dataIndex: "stdPositionName",
key: "stdPositionName", key: "stdPositionName",
width: 60, width: 150,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
className: "h", className: "h",
@@ -300,7 +279,7 @@ export default {
title: "任职资格", title: "任职资格",
dataIndex: "qualsLevelDesr", dataIndex: "qualsLevelDesr",
key: "qualsLevelDesr", key: "qualsLevelDesr",
width: 60, width: 80,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
className: "h", className: "h",
@@ -349,22 +328,6 @@ export default {
4: "添加", 4: "添加",
}[joinMethod]), }[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: "完成时间", title: "完成时间",
dataIndex: "finishTime", dataIndex: "finishTime",
@@ -456,6 +419,8 @@ export default {
state.name = ""; state.name = "";
state.projectName = undefined; state.projectName = undefined;
state.tabledata = []; state.tabledata = [];
state.stdPosition = null;
state.qualsLevelCode = null;
}; };
const afterVisibleChange = (bol) => { const afterVisibleChange = (bol) => {
if (bol == true) { if (bol == true) {
@@ -494,13 +459,13 @@ export default {
// 获取数据 // 获取数据
function getData() { function getData() {
getStudentTaskPage({ getStudentTaskPage({
pageNo: state.currentPage, pageNum: state.currentPage,
pageSize: state.pageSize, pageSize: state.pageSize,
completionStatus: state.projectName, completionStatus: state.projectName,
username: state.name, username: state.name,
taskId: props.datasource.id, taskId: props.datasource.id,
qualsLevelCode: state.qualsLevelCode, qualsLevelCode: state.qualsLevelCode,
stdPositionId: state.stdPositionId, stdPosition: state.stdPosition,
}) })
.then((res) => { .then((res) => {
console.log("在线课数据获取", res); console.log("在线课数据获取", res);
@@ -528,6 +493,8 @@ export default {
state.currentPage = 1; state.currentPage = 1;
state.name = ""; state.name = "";
state.projectName = null; state.projectName = null;
state.stdPosition = null;
state.qualsLevelCode = null;
getData(); getData();
} }
@@ -540,56 +507,35 @@ export default {
// 导出数据 // 导出数据
function exportTaskStu() { function exportTaskStu() {
exportStudentTaskPage({ let params = {
pageNo: state.currentPage, pageNo: state.currentPage || "",
pageSize: state.pageSize, pageSize: state.pageSize || "",
completionStatus: state.projectName, completionStatus: state.projectName || "",
username: state.name, username: state.name || "",
taskId: props.datasource.id, taskId: props.datasource.id || "",
qualsLevelCode: state.qualsLevelCode, qualsLevelCode: state.qualsLevelCode || "",
stdPositionId: state.stdPositionId, stdPosition: state.stdPosition || "",
}).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}`)
// }
// window.open( // window.open(
// `${ // buildUrl(
// process.env.VUE_APP_BASE_API // "http://192.168.18.141:32002/professional/studentTask/export",
// }/admin/online/manage/exportOnline?type=${14}&targetId=${ // params
// props.datasource.targetId // )
// }&taskId=${props.datasource.courseId}`
// ); // );
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 { return {
...toRefs(state), ...toRefs(state),
selectProjectName, selectProjectName,

View File

@@ -56,9 +56,9 @@
</div> </div>
</div> </div>
<div class="mi_btns" style="margin-left: 0px"> <div class="mi_btns" style="margin-left: 0px">
<div class="btn btn1"> <div class="btn btn1" @click="search">
<div class="search"></div> <div class="search"></div>
<div class="btnText" @click="search">搜索</div> <div class="btnText">搜索</div>
</div> </div>
<div class="btn btn2" @click="reset"> <div class="btn btn2" @click="reset">
<div class="search"></div> <div class="search"></div>
@@ -321,7 +321,6 @@ defineExpose({ openDrawer });
margin-bottom: 20px; margin-bottom: 20px;
color: #fff; color: #fff;
} }
} }
} }

View File

@@ -8,7 +8,7 @@
> >
<div class="drawerMain" id="ProjCheckship" style=""> <div class="drawerMain" id="ProjCheckship" style="">
<div class="header" style="margin-bottom: 20px"> <div class="header" style="margin-bottom: 20px">
<div class="headerTitle">归属权转移</div> <div class="headerTitle">{{ title }}</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@@ -98,7 +98,11 @@
<template #action="{ record }"> <template #action="{ record }">
<a-space :size="2"> <a-space :size="2">
<a-button <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" style="margin-right: 12px"
type="link" type="link"
@click="setPermissions(record)" @click="setPermissions(record)"
@@ -106,11 +110,15 @@
> >
<a-button <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)" @click="del(record)"
type="link" type="link"
danger danger
>删除</a-button >移除权限</a-button
> >
<div v-else>--</div> <div v-else>--</div>
</a-space> </a-space>
@@ -161,13 +169,16 @@ import {
assignPermissions, assignPermissions,
delAssignPermissions, delAssignPermissions,
} from "@/api/growthpath"; } from "@/api/growthpath";
import { useStore } from "vuex";
import { delStudentList } from "@/api/index1"; import { delStudentList } from "@/api/index1";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import dialog from "@/utils/dialog"; import dialog from "@/utils/dialog";
const { state } = useStore();
console.log(state, "sssssssssss");
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
id: String, id: String,
title: String,
}); });
const visiable = ref(false); const visiable = ref(false);

View File

@@ -93,21 +93,21 @@
</div> </div>
<div class="cancel" style="margin-left: 15px"></div> <div class="cancel" style="margin-left: 15px"></div>
</div> </div>
<div v-if="downloadErrUrl !== ''" class="defeat"> <!-- <div v-if="downloadErrUrl !== ''" class="defeat">
<div class="detext" @click="downloadEeeorData"> <div class="detext" @click="downloadEeeorData">
下载失败数据 下载失败数据
</div> </div>
</div> </div> -->
<div <!-- <div
v-if="notMatchUrl != ''" v-if="notMatchUrl != ''"
:style="{ left: downloadErrUrl !== '' ? '181px' : '46px' }" :style="{ left: downloadErrUrl !== '' ? '181px' : '46px' }"
class="defeat2" class="defeat2"
> >
<div class="detext" @click="notDown">下载不匹配的学员</div> <div class="detext" @click="notDown">下载不匹配的学员</div>
</div> </div> -->
</div> </div>
</div> </div>
<div <!-- <div
v-if="showBottomBar" v-if="showBottomBar"
:class="downloadErrUrl == '' ? 'succebox' : 'defeatbox'" :class="downloadErrUrl == '' ? 'succebox' : 'defeatbox'"
> >
@@ -117,26 +117,26 @@
downloadErrUrl == "" ? 0 : errNum downloadErrUrl == "" ? 0 : errNum
}}条数据解析失败 }}条数据解析失败
</div> </div>
</div> </div> -->
<div v-if="showBottomBar && notMatchUrl != ''" class="group_data"> <!-- <div v-if="showBottomBar && notMatchUrl != ''" class="group_data">
<div class="icon"> <div class="icon">
<RightCircleFilled style="color: #4ea6ff; fontsize: 18px" /> <RightCircleFilled style="color: #4ea6ff; fontsize: 18px" />
</div> </div>
<div class="text"> <div class="text">
待导入学员的岗位与本专业力必修的要求不匹配是否导入 待导入学员的岗位与本专业力必修的要求不匹配是否导入
</div> </div>
<div class="right"> <div class="right"> -->
<!-- <a-radio-group size="small" v-model:value="groupValue" button-style="solid"> <!-- <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="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-button style="width: 50px;text-align: center;" value="0"></a-radio-button>
</a-radio-group> --> </a-radio-group> -->
<a-switch <!-- <a-switch
v-model:checked="groupValue" v-model:checked="groupValue"
checkedChildren="是" checkedChildren="是"
unCheckedChildren="否" unCheckedChildren="否"
/> />
</div> </div>
</div> </div> -->
<!-- <div class="loadborder"> <!-- <div class="loadborder">
<div class="content"> <div class="content">
<div class="img"></div> <div class="img"></div>
@@ -205,7 +205,7 @@
import { computed, reactive, toRefs } from "vue"; import { computed, reactive, toRefs } from "vue";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { import {
getImportStatus, // getImportStatus,
saveStudent, saveStudent,
downLoadImpTemplate, downLoadImpTemplate,
} from "@/api/growthpath"; } from "@/api/growthpath";
@@ -235,10 +235,10 @@ export default {
const store = useStore(); const store = useStore();
const state = reactive({ const state = reactive({
redisKey: "", redisKey: "",
locationHref: process.env.VUE_APP_BASE_API,
template: process.env.VUE_APP_UP_LOAD_STUDENT_TEMPLATE,
importStudent: 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: "", // 定时器,用于清空定时器使用 timers: "", // 定时器,用于清空定时器使用
isAddStudent: false, // 用于判断用户是否关闭弹框需要重新获取学员列表 isAddStudent: false, // 用于判断用户是否关闭弹框需要重新获取学员列表
uploadpercent: -1, uploadpercent: -1,
@@ -293,28 +293,11 @@ export default {
state.isAddStudent = false; state.isAddStudent = false;
}; };
const downloadTemplate = () => { const downloadTemplate = () => {
downLoadImpTemplate().catch((err) => { window.open(
let blob = new Blob([err.data], { `${process.env.VUE_APP_BOE_API_URL}${process.env.VUE_APP_BASE_API_GROWTH}/professional/allocation/downloadTemplate.do`
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( // 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); message.error(info.file.response.msg);
return; return;
} }
state.timers = setInterval(() => { // state.timers = setInterval(() => {
state.redisKey = info.file.response.data; // state.redisKey = info.file.response.data;
getImportStatus({ redisKey: state.redisKey }) // getImportStatus({ redisKey: state.redisKey })
.then((res) => { // .then((res) => {
console.log("查询导入状态", res); // console.log("查询导入状态", res);
if (res.data.code === 200) { // if (res.data.code === 200) {
if (res.data.data.status !== "START") { // if (res.data.data.status !== "START") {
i++; // i++;
if (i === 1) { // if (i === 1) {
message.destroy(); // message.destroy();
// message.success(`${info.file.name}解析成功`); // // message.success(`${info.file.name}解析成功`);
state.showBottomBar = true; // state.showBottomBar = true;
state.addLoading = false; // state.addLoading = false;
state.isAddStudent = true; // state.isAddStudent = true;
} // }
state.succNum = res.data.data.successNum; // state.succNum = res.data.data.successNum;
state.errNum = res.data.data.failedNum; // state.errNum = res.data.data.failedNum;
state.downloadErrUrl = res.data.data.url; // state.downloadErrUrl = res.data.data.url;
state.notMatchUrl = res.data.data.notMatchUrl; // state.notMatchUrl = res.data.data.notMatchUrl;
clearInterval(state.timers); // clearInterval(state.timers);
} // }
} // }
}) // })
.catch((err) => { // .catch((err) => {
clearInterval(state.timers); // clearInterval(state.timers);
state.showBottomBar = true; // state.showBottomBar = true;
state.addLoading = false; // state.addLoading = false;
console.log("查询导入状态失败", err); // console.log("查询导入状态失败", err);
}); // });
}, 500); // }, 500);
} else if (status === "error") { } else if (status === "error") {
state.addLoading = false; state.addLoading = false;
state.uploadErr = true; state.uploadErr = true;

View File

@@ -45,7 +45,7 @@ export default {
default: false, default: false,
}, },
}, },
emits: ["update:value"], emits: ["update:value", "change"],
setup(props, { emit }) { setup(props, { emit }) {
const selectedValue = ref(null); const selectedValue = ref(null);
const options = ref([]); const options = ref([]);
@@ -71,6 +71,7 @@ export default {
(val) => { (val) => {
if (val) { if (val) {
fetchOptions(props.searchData || ""); fetchOptions(props.searchData || "");
emit("update:value", null);
} }
} }
); );
@@ -82,6 +83,7 @@ export default {
); );
function onSelectChange(newVal, postList) { function onSelectChange(newVal, postList) {
emit("update:value", newVal); emit("update:value", newVal);
emit("change");
} }
async function handleSearch(val) { async function handleSearch(val) {
console.log(val, "val"); console.log(val, "val");

View File

@@ -5,10 +5,20 @@
gutter="12" gutter="12"
style="padding-left: 20px; margin-right: 0px" 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-col>
<a-form-item title="选择岗位" style="min-width: 170px"> <a-form-item title="选择岗位" style="min-width: 170px">
<div class="select in"> <div class="select in">
<PostSelect v-model:value="tableParam.qualsLevelCode"> </PostSelect> <PostSelect v-model:value="tableParam.stdPosition"> </PostSelect>
</div> </div>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -16,20 +26,21 @@
<a-form-item title="选择职级" style="min-width: 170px"> <a-form-item title="选择职级" style="min-width: 170px">
<div class="select in"> <div class="select in">
<OfficeSelect <OfficeSelect
v-model:value="tableParam.stdPosition" v-model:value="tableParam.qualsLevelCode"
:searchData="tableParam.qualsLevelCode" :searchData="tableParam.stdPosition"
@change="officeSelectChange"
></OfficeSelect> ></OfficeSelect>
</div> </div>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col> <a-col>
<a-form-item title="加入方式" style="width: 193px"> <a-form-item title="Band职级" style="width: 193px">
<div class="select in"> <div class="select in">
<a-select <a-select
v-model:value="tableParam.joinMethod" v-model:value="tableParam.bandCode"
placeholder="请选择加入方式" placeholder="请选择Band职级"
:options="statusValues" :options="bandOption"
@change="selectstatusValue" notFoundContent="请先选择任职资格"
allowClear allowClear
></a-select> ></a-select>
</div> </div>
@@ -39,11 +50,23 @@
<a-form-item title="姓名:" style="width: 170px"> <a-form-item title="姓名:" style="width: 170px">
<a-input <a-input
class="cus-input" class="cus-input"
v-model:value="tableParam.keyword" v-model:value="tableParam.username"
placeholder="请输入姓名" placeholder="请输入姓名/工号"
/> />
</a-form-item> </a-form-item>
</a-col> </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-col>
<a-button <a-button
class="cus-btn" class="cus-btn"
@@ -93,7 +116,6 @@
:id="id" :id="id"
@confirm="submitCall" @confirm="submitCall"
:stage="stage" :stage="stage"
:coulmsList="coulmsList"
:selectStu="true" :selectStu="true"
> >
<a-button class="cus-btn" style="background: #4ea6ff; color: #fff"> <a-button class="cus-btn" style="background: #4ea6ff; color: #fff">
@@ -102,7 +124,7 @@
style="margin-right: 10px" style="margin-right: 10px"
src="../../assets/images/courseManage/add0.png" src="../../assets/images/courseManage/add0.png"
/></template> /></template>
添加学员 新增学员
</a-button> </a-button>
</GrowthCommonStudent> </GrowthCommonStudent>
</a-col> </a-col>
@@ -132,7 +154,7 @@
style="margin-right: 10px" style="margin-right: 10px"
src="../../assets/images/projectadd/delete.png" src="../../assets/images/projectadd/delete.png"
/></template> /></template>
批量删除 批量删除学员
</a-button> </a-button>
</a-col> </a-col>
<a-col :span="1.5"> <a-col :span="1.5">
@@ -149,21 +171,6 @@
导出学员信息 导出学员信息
</a-button> </a-button>
</a-col> </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> </a-row>
<div class="tips"> <div class="tips">
@@ -260,11 +267,6 @@
:courseId="id" :courseId="id"
:courseType="type" :courseType="type"
/> />
<!-- <GrowShowText
:permissions="permissions"
@isSearchList="isSearchLists"
v-model:showText="showText"
/> -->
</template> </template>
<script setup lang="jsx"> <script setup lang="jsx">
import { computed, defineProps, onMounted, ref, watch } from "vue"; import { computed, defineProps, onMounted, ref, watch } from "vue";
@@ -275,6 +277,7 @@ import {
batchDelStudents, batchDelStudents,
allocationList, allocationList,
addLearners, addLearners,
getBandList,
} from "@/api/growthpath"; } from "@/api/growthpath";
import GrowthCommonStudent from "./GrowthCommonStudent"; import GrowthCommonStudent from "./GrowthCommonStudent";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
@@ -284,7 +287,7 @@ import { checkGrowthPer } from "@/utils/utils";
import dialog from "@/utils/dialog"; import dialog from "@/utils/dialog";
import PostSelect from "@/components/growthpath/PostSelect"; import PostSelect from "@/components/growthpath/PostSelect";
import OfficeSelect from "@/components/growthpath/OfficeSelect"; import OfficeSelect from "@/components/growthpath/OfficeSelect";
import GrowShowText from "@/components/growthpath/GrowShowText"; import OrgClass from "@/components/growthpath/OrgClass";
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
permissions: { permissions: {
@@ -316,35 +319,41 @@ const props = defineProps({
type: Array, type: Array,
default: () => [], default: () => [],
}, },
params: {
type: Object,
default: () => ({}),
},
growId: String, growId: String,
}); });
// const { loading: stuAsyncLoading, start } = useAsyncStu(props.id, props.type, getStuList); // 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([]); const visibleName = ref([]);
// band职级选项
const bandOption = ref([]);
// 加入方式选项
const statusValues = 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) => { const getRowClass = (record) => {
return record.moveStatus ? "row-moveStatus-true" : ""; 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([ const tablecolumns = ref([
{ {
title: "姓名", title: "姓名",
@@ -367,32 +376,39 @@ const tablecolumns = ref([
}, },
{ {
title: "归属组织", title: "归属组织",
dataIndex: "studentOrgName", dataIndex: "orgName",
key: "studentOrgName", key: "orgName",
width: 230, width: 230,
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true, ellipsis: true,
}, },
{ {
title: "岗位", title: "标准岗位",
dataIndex: "studentJobName", dataIndex: "stdPositionName",
key: "studentJobName", key: "stdPositionName",
width: 170, width: 170,
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true, ellipsis: true,
}, },
{ {
title: "Band", title: "任职资格等级",
dataIndex: "studentBandCode", dataIndex: "qualsLevelDesr",
key: "studentBandCode", key: "qualsLevelDesr",
width: 100,
align: "center",
className: "h",
ellipsis: true,
},
{
title: "Band职级",
dataIndex: "bandName",
key: "bandName",
width: 100, width: 100,
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true, ellipsis: true,
// customRender: ({ record: { studentOrgName, studentDepartName } }) =>
// allDepartShow(studentOrgName, studentDepartName),
}, },
{ {
title: "加入方式", title: "加入方式",
@@ -403,7 +419,7 @@ const tablecolumns = ref([
customRender: ({ record: { joinMethod } }) => customRender: ({ record: { joinMethod } }) =>
({ ({
1: "自动匹配", 1: "自动匹配",
2: "手动添加", 2: "手动匹配",
3: "导入", 3: "导入",
4: "添加", 4: "添加",
}[joinMethod]), }[joinMethod]),
@@ -412,17 +428,15 @@ const tablecolumns = ref([
title: "进度", title: "进度",
width: 100, width: 100,
align: "center", align: "center",
dataIndex: "finishNeedfinish", dataIndex: "progress",
key: "finishNeedfinish", key: "progress",
className: "h", className: "h",
customRender: ({ record }) => ( customRender: ({ record }) => (
<div class="text"> <div class="text">{record.progress || 0}%</div>
{record.finishTaskNum || 0}/{record.needFinishTaskNum || 0}
</div>
), ),
}, },
{ {
title: "状态", title: "完成状态",
dataIndex: "finishStatus", dataIndex: "finishStatus",
key: "finishStatus", key: "finishStatus",
width: 100, 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({ const tableParam = ref({
joinMethod: null, username: "", //学员名称
keyword: "", //学员名称
// groupName: "", //学员小组
// studentDepartName: null, //部门名称
topFlag: null, //是否是优秀学员
pageNum: 1, pageNum: 1,
status: 1,
pageSize: 10, pageSize: 10,
type: props.type, type: props.type,
// pid: props.id,
growthId: props.growId, growthId: props.growId,
...props.params,
bandCodeList: "",
positionNameList: "",
}); });
const stuSelectKeys = ref([]); const stuSelectKeys = ref([]);
@@ -520,19 +490,26 @@ function search() {
// 导出数据 // 导出数据
function exportTaskStu() { function exportTaskStu() {
console.log("props.datasource", props);
window.open( window.open(
`${ buildUrl(
process.env.VUE_APP_BASE_API `${process.env.VUE_APP_BOE_API_URL}${process.env.VUE_APP_BASE_API_GROWTH}/professional/allocation/export`,
}/admin/student/exportTaskStudent?type=${14}&pid=${props.id}` 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(() => { onMounted(() => {
// debugger // debugger
console.log("props.activeKey1" + props.activeKey1); console.log("props.activeKey1" + props.activeKey1);
@@ -587,14 +564,14 @@ function getStuList() {
} }
function reset() { function reset() {
tableParam.value.keyword = ""; tableParam.value.username = "";
// tableParam.value.groupName = ""; //学员小组 // tableParam.value.groupName = ""; //学员小组
tableParam.value.topFlag = null; //是否是优秀学员 tableParam.value.topFlag = null; //是否是优秀学员
tableParam.value.bandCodeList = "";
tableParam.value.positionNameList = "";
tableParam.value.joinMethod = null; tableParam.value.joinMethod = null;
tableParam.value.qualsLevelCode = null; tableParam.value.qualsLevelCode = null;
tableParam.value.stdPosition = null; tableParam.value.stdPosition = null;
tableParam.value.organizationId = null;
tableParam.value.bandCode = null;
getStuList(); getStuList();
} }
@@ -646,7 +623,6 @@ function del(row) {
}); });
} }
function submitCall(selectList) { function submitCall(selectList) {
tableData.value.loading = true; tableData.value.loading = true;
addLearners({ addLearners({

View File

@@ -18,7 +18,7 @@
<div class="header_top"> <div class="header_top">
<div class="pathnameInp"> <div class="pathnameInp">
<a-input <a-input
v-model:value="nameUserNo" v-model:value="username"
style="width: 270px; height: 40px; border-radius: 8px" style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入操作人姓名/工号" placeholder="请输入操作人姓名/工号"
/> />
@@ -30,6 +30,7 @@
separator="至" separator="至"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="[' 开始时间', ' 结束时间']"
@change="searchTimeChange" @change="searchTimeChange"
valueFormat="YYYY-MM-DD"
/> />
</div> </div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
@@ -62,13 +63,15 @@ export default {
name: "UpdateRecord", name: "UpdateRecord",
setup(props, ctx) { setup(props, ctx) {
const state = reactive({ const state = reactive({
nameUserNo: null, username: null,
searchdate: [], searchdate: [],
avisible: false, avisible: false,
growthId: null, growthId: null,
pageSize: 10, pageSize: 10,
pageNum: 1, pageNum: 1,
total: 0, total: 0,
startTime: "",
endTime: "",
}); });
const pagination = computed(() => ({ const pagination = computed(() => ({
total: state.total, total: state.total,
@@ -83,6 +86,9 @@ export default {
growthId: state.growthId, growthId: state.growthId,
pageSize: state.pageSize, pageSize: state.pageSize,
pageNum: state.pageNum, pageNum: state.pageNum,
username: state.username,
startTime: state.startTime,
endTime: state.endTime,
}).then((res) => { }).then((res) => {
console.log(res); console.log(res);
tableData.value = res.data.data.records; tableData.value = res.data.data.records;
@@ -117,19 +123,28 @@ export default {
align: "center", align: "center",
}, },
]); ]);
const searchTimeChange = (e) => { const searchTimeChange = (date) => {
console.log(e, "eeeee"); 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 = () => { const resetLearnPath = () => {
state.nameUserNo = null; state.username = null;
state.searchdate = []; state.searchdate = [];
state.pageNum = 1; state.pageNum = 1;
getList(); getList();
}; };
const closeDrawer = () => { const closeDrawer = () => {
state.nameUserNo = null; state.username = null;
state.searchdate = []; state.searchdate = [];
state.avisible = false; state.avisible = false;
state.startTime = "";
state.endTime = "";
}; };
const open = (row) => { const open = (row) => {
state.growthId = row.id; state.growthId = row.id;

View File

@@ -1,257 +1,266 @@
<template> <template>
<div class="editing-tasks"> <div class="editing-tasks">
<div style="display: flex"> <a-spin :spinning="spinning">
<div class="right"> <div style="display: flex">
<div class="addhead"> <div class="right">
<div class="filt"> <div class="addhead">
<div class="le"> <div class="filt">
<div class="imgfor"> <div class="le">
<div class="fort" style="color: #333333; font-size: 16px"> <div class="imgfor">
{{ <div class="fort" style="color: #333333; font-size: 16px">
`${basicData?.organizationName || ""}${ {{
basicData?.stdPosition || "" `${basicData?.stdPosition || ""}${
}${basicData?.qualsLevelDesr || ""}` 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" />
</div> </div>
<div class="text">{{ value.name }}</div> <div class="fort">创建时间{{ basicData?.createTime }}</div>
</div> </div>
</component> </div>
<div></div> <div class="rightt">
<div class="lin"></div> <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>
</div>
<div class="boom"> <div class="mid">
<div class="boomcen"> <div class="tabs">
<div class="title"> <a-tabs
<div class="tit_left"> v-model:activeKey="activeKey"
<span>任务列表</span> size="large"
</div> @change="tabsChange"
<div
v-if="listDatas.length != 0"
class="btn btn2"
@click="confirmDelTask()"
> >
<div class="imgIcon"></div> <a-tab-pane key="1" tab="必修"></a-tab-pane>
<div class="btnText">批量删除</div> <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> </div>
<div v-if="listDatas.length != 0" class="tableBox"> </div>
<div <div class="boom">
style=" <div class="boomcen">
height: 50px; <div class="title">
display: flex; <div class="tit_left">
justify-content: space-between; <span>任务列表</span>
align-items: center; <div class="tips" v-show="activeKey == 2">
background-color: #eff4fc; <div>提示该专业力必修的学员需完成</div>
font-size: 14px; <div style="color: #ee8237; margin: 0 4px">
font-weight: 400; {{ basicData.electivesCompletedNum }}
color: #999ba3; </div>
line-height: 36px; <div>个选修任务</div>
border-bottom: 1px solid #f2f6fc; </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 <div
style=" style="
width: 87px; height: 50px;
text-align: center;
display: flex; 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=" style="
width: 16px; width: 87px;
height: 16px; text-align: center;
cursor: pointer; display: flex;
margin-top: 12px; margin-left: 46px;
" "
:src=" >
selectAll === 0 <img
? require('../../assets/images/notSelect.png') style="
: selectAll === 1 width: 16px;
? require('../../assets/images/selectAll.png') height: 16px;
: require('../../assets/images/select.png') cursor: pointer;
" margin-top: 12px;
@click="selectRowAll" "
/> :src="
<div style="margin-top: 2px; margin-left: 8px">类型</div> selectAll === 0
</div> ? require('../../assets/images/notSelect.png')
<div style="width: 120px; text-align: center">名称</div> : selectAll === 1
<div style="width: 87px; text-align: center">时长</div> ? require('../../assets/images/selectAll.png')
<div style="width: 87px; text-align: center">状态</div> : require('../../assets/images/select.png')
<div "
style="width: 120px; text-align: center; margin-right: 20px" @click="selectRowAll"
> />
操作 <div style="margin-top: 2px; margin-left: 8px">类型</div>
</div> </div>
</div> <div style="width: 120px; text-align: center">名称</div>
<div style="width: 87px; text-align: center">时长</div>
<div <div style="width: 87px; text-align: center">状态</div>
v-for="(element, index) of listDatas" <div
style=" style="width: 120px; text-align: center; margin-right: 20px"
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> </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 <div
style="color: #4ea6ff; cursor: pointer" v-for="(element, index) of listDatas"
@click="editTaskForType(element, index)" style="
> height: 50px;
编辑 display: flex;
</span> justify-content: space-between;
<span align-items: center;
style="color: #4ea6ff; cursor: pointer" border-bottom: 1px solid #f2f6fc;
@click="confirmDelTask(element, index)" font-size: 14px;
> font-weight: 400;
删除 color: #4f5156;
</span> line-height: 36px;
</template> "
<template v-else> class="tableRow"
<span >
v-if="element.status == '1'" <div
style="color: #4ea6ff; cursor: pointer" style="
@click="withdraw(element, index)" width: 87px;
> text-align: center;
撤回 margin-left: 46px;
</span> position: relative;
</template> "
>
<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>
</div> </div>
</div> <!-- 无数据样式 -->
<!-- 无数据样式 --> <div v-else class="notable">
<div v-else class="notable"> <div class="notablebox">
<div class="notablebox"> <div class="boxbody">
<div class="boxbody"> <div class="boximg"></div>
<div class="boximg"></div> <div class="boxtitle">
<div class="boxtitle"> <span style="color: #ffb64e; font-size: 20px"
<span style="color: #ffb64e; font-size: 20px">无任务</span> >无任务</span
</div> >
<div class="boxtitle2"> </div>
<span style="color: #878b92">请点击上方创建任务</span> <div class="boxtitle2">
<span style="color: #878b92">请点击上方创建任务</span>
</div>
</div> </div>
<div class="smallleft"></div>
<div class="smallright"></div>
</div> </div>
<div class="smallleft"></div>
<div class="smallright"></div>
</div> </div>
<!-- 无数据样式 -->
</div> </div>
<!-- 无数据样式 -->
</div> </div>
</div> </div>
</div> </div>
</div> </a-spin>
</div> </div>
</template> </template>
<script setup> <script setup>
@@ -329,15 +338,22 @@ const dataListUp = (val) => {
getListTask(); getListTask();
}; };
const listDatas = ref([]); const listDatas = ref([]);
const spinning = ref(false);
const getListTask = () => { const getListTask = () => {
spinning.value = true;
notPublishedTaskList({ notPublishedTaskList({
growthId: growId, growthId: growId,
type: activeKey.value, type: activeKey.value,
}).then((res) => { })
if (res.data.code === 200) { .then((res) => {
listDatas.value = res.data.data.records; if (res.data.code === 200) {
} listDatas.value = res.data.data.records;
}); }
spinning.value = false;
})
.catch((err) => {
spinning.value = false;
});
}; };
const basicData = ref({}); const basicData = ref({});
@@ -601,8 +617,14 @@ const withdraw = (element) => {
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
color: #363636; color: #363636;
line-height: 36px; line-height: 24px;
// margin-top: 30px; // margin-top: 30px;
.tips {
display: flex;
align-items: center;
font-size: 12px;
color: #999;
}
} }
.tit_right { .tit_right {

View File

@@ -5,9 +5,6 @@
<PostSelectNew v-model:value="statusPost"> </PostSelectNew> <PostSelectNew v-model:value="statusPost"> </PostSelectNew>
</div> </div>
<div class="select multi" style="min-width: 181px; height: 40px"> <div class="select multi" style="min-width: 181px; height: 40px">
<!-- <RankSelect
v-model:value="statusRank"
></RankSelect> -->
<OfficeSelect v-model:value="statusOffice" :searchData="statusPost" /> <OfficeSelect v-model:value="statusOffice" :searchData="statusPost" />
</div> </div>
<div class="select"> <div class="select">
@@ -62,13 +59,13 @@
>管理</a-button >管理</a-button
> >
<DropDown v-if="record?.permissions?.includes('17')" value="授权"> <DropDown v-if="record?.permissions?.includes('17')" value="授权">
<TableModelStudent :id="record.id" :type="17" <TableModelStudent :id="record.id" title="转移归属权" :type="17"
>归属权</TableModelStudent >归属权</TableModelStudent
> >
<TableModelStudent :id="record.id" :type="15" <TableModelStudent :id="record.id" title="添加查看权" :type="15"
>查看权</TableModelStudent >查看权</TableModelStudent
> >
<TableModelStudent :id="record.id" :type="16" <TableModelStudent :id="record.id" title="添加管理权" :type="16"
>管理权</TableModelStudent >管理权</TableModelStudent
> >
</DropDown> </DropDown>
@@ -153,11 +150,7 @@
<span>标准岗位</span> <span>标准岗位</span>
</div> </div>
<div class="bg_body_input"> <div class="bg_body_input">
<PostSelectNew <PostSelectNew v-model:value="statusPosts" width="384px" disabled>
v-model:value="statusPosts"
width="384px"
:disabled="editId"
>
</PostSelectNew> </PostSelectNew>
</div> </div>
</div> </div>
@@ -173,7 +166,7 @@
</div> </div>
<div class="bg_body_input"> <div class="bg_body_input">
<OfficeSelect <OfficeSelect
:disabled="editId" disabled
width="384px" width="384px"
:searchData="statusPosts" :searchData="statusPosts"
@bandCodes="getBandCodes" @bandCodes="getBandCodes"
@@ -250,10 +243,9 @@
<div class="bg_body_input"> <div class="bg_body_input">
<a-radio-group v-model:value="template"> <a-radio-group v-model:value="template">
<div style="display: flex"> <div style="display: flex">
<a-radio :value="1" style="margin-bottom: 15px" <a-radio value="1" style="margin-bottom: 15px">路径图</a-radio
>路径图</a-radio
><br /> ><br />
<a-radio :value="2">任务列表</a-radio> <a-radio value="2">任务列表</a-radio>
</div> </div>
</a-radio-group> </a-radio-group>
</div> </div>
@@ -348,6 +340,7 @@ export default {
statusRankCreate: [], statusRankCreate: [],
courseNum: "", courseNum: "",
matStudens: "", matStudens: "",
elePublishedNum: 0, // 选修发布数量
pathWays: "", pathWays: "",
statusPost: null, statusPost: null,
matchRules: "1", matchRules: "1",
@@ -446,10 +439,10 @@ export default {
let params = { let params = {
pageNum: state.pageNum, pageNum: state.pageNum,
pageSize: state.pageSize, pageSize: state.pageSize,
stdPosition: state.statusOffice, stdPosition: state.statusPost,
isPublished: state.statusValue, isPublished: state.statusValue,
bandIdList: state.statusRank, //职级 bandIdList: state.statusRank, //职级
qualsLevelCode: state.statusPost, qualsLevelCode: state.statusOffice,
}; };
console.log(store); console.log(store);
// 判断当前用户是否是专业力必修角色管理员,如果不是查询列表时需传入员工工号 // 判断当前用户是否是专业力必修角色管理员,如果不是查询列表时需传入员工工号
@@ -491,18 +484,22 @@ export default {
state.statusPosts = record.stdPosition; state.statusPosts = record.stdPosition;
state.statusOffices = record.qualsLevelCode; state.statusOffices = record.qualsLevelCode;
state.courseNum = record.electivesCompletedNum; state.courseNum = record.electivesCompletedNum;
state.elePublishedNum = record.elePublishedNum;
state.pathWays = record.description; state.pathWays = record.description;
state.band = record.bandCodes; state.band = record.bandCodes;
state.matchRules = record.matchRules; state.matchRules = record.matchRules || "1";
state.template = state.template || "1";
state.bg_check = true; state.bg_check = true;
}; };
// 确定 // 确定
const confirm = () => { const confirm = () => {
if (state.statusPosts == "" || state.statusPosts == null) { if (state.courseNum !== 0 && !state.courseNum) {
return message.error("请选择岗位"); return message.error("请输入完成选修数量");
} }
if (state.statusOffices == "" || state.statusRanks == null) { if (state.courseNum > state.elePublishedNum) {
return message.error("请选择任职资格等级"); message.warning("完成选修数量不能大于已发布的选修数量");
state.courseNum = state.elePublishedNum;
return;
} }
const params = { const params = {
stdPosition: state.statusPosts, stdPosition: state.statusPosts,

File diff suppressed because it is too large Load Diff