Merge branch 'test20250220' into master_1202

This commit is contained in:
joshen
2025-02-26 21:51:53 +08:00
25 changed files with 1545 additions and 202 deletions

View File

@@ -81,7 +81,7 @@ export const taskInformation = (growthId) => http.get('/professional/managementO
export const taskCompletionRate = (growthId) => http.get('/professional/managementOverview/taskCompletionRate/' + growthId) export const taskCompletionRate = (growthId) => http.get('/professional/managementOverview/taskCompletionRate/' + growthId)
// 运营数据概览 // 运营数据概览
export const getStudyStatisticsList = (data) => http.post('/professional/statics/getStudyStatisticsList',) export const getStudyStatisticsList = (data) => http.post('/professional/statics/getStudyStatisticsList', data)
// 专业力列表 // 专业力列表
export const boeuGrowthPlatePageList = (obj) => http.post('/boeu/growth/pageList', obj) export const boeuGrowthPlatePageList = (obj) => http.post('/boeu/growth/pageList', obj)
@@ -101,3 +101,13 @@ export const delGrowth = (growthId) => http.get('/professional/compulsory/delGro
// 删除手动添加的专业力必修 // 删除手动添加的专业力必修
export const markComplete = (obj) => http.get('/professional/allocation/markComplete', { params: obj }) export const markComplete = (obj) => http.get('/professional/allocation/markComplete', { params: obj })
export const attendanceList = (obj) => http.post('/professional/task/attendanceList', obj)
export const taskSign = (obj) => http.post('/professional/task/taskSign', obj)
export const taskLeave = (obj) => http.post('/professional/task/taskLeave', obj)
export const taskBatchSign = (id) => http.get('/professional/task/batchSign/' + id)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 346 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -131,7 +131,7 @@ const params = useResetRef({
orderAsc: true, orderAsc: true,
}); });
const { data, loading, total, fetch } = useBoeApiPage(CASE_PAGE, params.value, { const { data, loading, total, fetch } = useBoeApiPage(CASE_PAGE, params, {
init: false, init: false,
result: (res) => res.result.list, result: (res) => res.result.list,
totalPage: (res) => res.result.totalPages, totalPage: (res) => res.result.totalPages,
@@ -157,7 +157,7 @@ function search() {
} }
function reset() { function reset() {
params.reset(); params.reset()
fetch(); fetch();
} }

View File

@@ -139,7 +139,7 @@ const { start } = useTimeout(async ({ uuid, file }) => {
fileList.value = [...fileList.value]; fileList.value = [...fileList.value];
if (upData && upData.status !== "START" && upData.status !== "NULL") { if (upData && upData.status !== "START" && upData.status !== "NULL") {
emit("change", "end"); emit("change", "end");
// message.success("导入成功"); message.success("导入成功");
// closeDrawer(); // closeDrawer();
throw Error("查询任务结束"); throw Error("查询任务结束");
} }
@@ -171,6 +171,7 @@ function handleChange({ file }) {
overflow-x: auto; overflow-x: auto;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%;
.main { .main {
.minatitl { .minatitl {

View File

@@ -360,8 +360,13 @@ const deleteDepSelect = () => {
//确定添加授权 //确定添加授权
const confirm = () => { const confirm = () => {
if(!stuSelectRows.value.length && !projectSelectRows.value.length){
message.warning('请选择学员')
return
}
visiable.value = false; visiable.value = false;
emit("confirm", stuSelectRows.value, projectSelectRows.value); emit("confirm", stuSelectRows.value, projectSelectRows.value);
closeDrawer()
}; };
onMounted(() => { onMounted(() => {
@@ -378,7 +383,7 @@ onMounted(() => {
} }
}); });
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.CommonStudent > .ant-drawer-content-wrapper { .CommonStudent > .ant-drawer-content-wrapper {
min-width: 1200px !important; min-width: 1200px !important;
width: 1200px !important; width: 1200px !important;
@@ -390,6 +395,10 @@ onMounted(() => {
margin-left: 24px; margin-left: 24px;
} }
.CommonStudent { .CommonStudent {
.ant-form-item{
display: flex;
align-items: center;
}
.ant-btn-primary { .ant-btn-primary {
background-color: #4ea6ff !important; background-color: #4ea6ff !important;
} }

View File

@@ -457,7 +457,6 @@
</div> </div>
<div class="btn"> <div class="btn">
<button class="samtn btn2" @click="closeLearnBgMore">取消</button> <button class="samtn btn2" @click="closeLearnBgMore">取消</button>
<a-button class="samtn btn2" @click="closeLearnBgMore">确定</a-button>
</div> </div>
</div> </div>
</a-modal> </a-modal>

View File

@@ -3,7 +3,8 @@
:visible="visiable" :visible="visiable"
class="drawerStyle" class="drawerStyle"
placement="right" placement="right"
width="60%" destroyOnClose
:width="width"
> >
<div class="drawerMain" style=""> <div class="drawerMain" style="">
<div class="header"> <div class="header">
@@ -28,17 +29,21 @@ const props = defineProps({
type: String, type: String,
default: "", default: "",
}, },
width: {
type: String,
default: "60%",
},
}); });
const visiable = ref(false); const visiable = ref(false);
const openDrawer = () => { const openDrawer = () => {
visiable.value = true; visiable.value = true;
}; };
const closeDrawer = ()=>{ const closeDrawer = () => {
visiable.value = false; visiable.value = false;
} };
defineExpose({ defineExpose({
openDrawer, openDrawer,
closeDrawer closeDrawer,
}) });
</script> </script>

View File

@@ -7,6 +7,7 @@
class="drawerStyle growth-exa" class="drawerStyle growth-exa"
width="1500" width="1500"
placement="right" placement="right"
destroyOnClose
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
@@ -511,12 +512,13 @@ const closeDrawer = () => {
if (step.value > 1) { if (step.value > 1) {
step.value = step.value - 1; step.value = step.value - 1;
} else { } else {
visible.value = false;
formData.reset(); formData.reset();
formData.value.info = { formData.value.info = {
examType: 1, examType: 1,
}; };
dateTime.value = []; dateTime.value = [];
visible.value = false;
} }
}; };

View File

@@ -8,7 +8,7 @@
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">面授{{ datasource?.name }}</div> <div class="headerTitle">面授{{ datasource?.taskName }}</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"
@@ -208,10 +208,9 @@
/> />
</div> </div>
</div> </div>
<div class="btnn"> <!-- <div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button> <button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button> </div> -->
</div>
</template> </template>
<template v-if="step == 2"> <template v-if="step == 2">
<GrowthCommonStudent <GrowthCommonStudent
@@ -331,6 +330,7 @@ const addUserConfirm = (stuSelectRows, projectSelectRows) => {
projectList: projectSelectRows, projectList: projectSelectRows,
}).then(() => { }).then(() => {
message.success("添加成功"); message.success("添加成功");
tableRef.value.fetch();
step.value = 1; step.value = 1;
}); });
}; };
@@ -544,16 +544,23 @@ const batchSign = () => {
} }
dialog({ dialog({
content: "确定批量签到吗?", content: "确定批量签到吗?",
ok: async () => { ok: () => {
message.success("批量签到成功"); api
tableRef.value.toLoading(); .attendanceSign({
await api.attendanceSign({ courseId: offcoursePlanId.value,
courseId: offcoursePlanId.value, ids: courseSelectRows.value?.map((t) => t.studentId),
ids: courseSelectRows.value?.map((t) => t.studentId), taskId: taskId.value,
taskId: taskId.value, taskType: props.datasource.taskType,
taskType: props.datasource.taskType, type: 3,
type: 3, })
}); .then((res) => {
message.success("签到成功");
tableRef.value.toLoading();
})
.catch((err) => {
message.error("签到失败");
tableRef.value.toLoading();
});
tableRef.value.fetch(); tableRef.value.fetch();
}, },
}); });
@@ -561,12 +568,19 @@ const batchSign = () => {
const batchSignAll = () => { const batchSignAll = () => {
dialog({ dialog({
content: "确定全部签到吗?", content: "确定全部签到吗?",
ok: async () => { ok: () => {
message.success("全部签到成功"); api
tableRef.value.toLoading(); .attendanceSignAll({
await api.attendanceSignAll({ courseId: offcoursePlanId.value,
courseId: offcoursePlanId.value, })
}); .then((res) => {
message.success("签到成功");
tableRef.value.toLoading();
})
.catch((err) => {
message.error("签到失败");
tableRef.value.toLoading();
});
tableRef.value.fetch(); tableRef.value.fetch();
}, },
}); });

View File

@@ -134,7 +134,12 @@
<div class="wz">批量标注完成</div> <div class="wz">批量标注完成</div>
</div> </div>
<div class="btn btn1" style="margin-right: 20px" @click="step = 2"> <div
class="btn btn1"
style="margin-right: 20px"
@click="step = 2"
v-if="homeWorkId"
>
<div class="img1"></div> <div class="img1"></div>
<div class="wz">批量录入成绩</div> <div class="wz">批量录入成绩</div>
</div> </div>
@@ -166,7 +171,6 @@
</div> </div>
<div class="btnn"> <div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button> <button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div> </div>
</template> </template>
@@ -176,7 +180,7 @@
title="录入成绩" title="录入成绩"
@close="closeDrawer" @close="closeDrawer"
v-if="homeWorkId" v-if="homeWorkId"
:template-url="scoreTemplateUrl" :templateUrl="scoreTemplateUrl"
:data="{ targetId: offcoursePlanId, type: 3, workId: homeWorkId }" :data="{ targetId: offcoursePlanId, type: 3, workId: homeWorkId }"
:url="`/admin/student/importHomeWork`" :url="`/admin/student/importHomeWork`"
name="uploadFile" name="uploadFile"

View File

@@ -51,8 +51,7 @@ const closeDrawer = () => {
selectData.value = {}; selectData.value = {};
}; };
async function confirm(row) { async function confirm(row) {
console.log(row) console.log(row);
debugger
// 新增 // 新增
if (!selectData.value?.id) { if (!selectData.value?.id) {
await saveTask({ await saveTask({
@@ -79,7 +78,7 @@ function selectCourse(row) {
} }
function openDrawer(row) { function openDrawer(row) {
window.selectCourse = selectCourse; window.selectCourse = selectCourse;
row && (selectData.value = [row.info]); row && (selectData.value = row);
visible.value = true; visible.value = true;
} }

View File

@@ -45,11 +45,11 @@
<div class="namecon" style="margin-right: 16px"> <div class="namecon" style="margin-right: 16px">
<div class="select"> <div class="select">
<a-select <a-select
v-model:value="projectName" v-model:value="completionStatus"
style="width: 200px" style="width: 200px"
placeholder="任务状态" placeholder="任务状态"
:options="projectNameList" :options="projectNameList"
@change="selectProjectName" @change="selectCompletionStatus"
allowClear allowClear
></a-select> ></a-select>
</div> </div>
@@ -96,7 +96,7 @@
<a-table <a-table
style="border: 1px solid #f2f6fe" style="border: 1px solid #f2f6fe"
:columns="tableDataFunc()" :columns="tableDataFunc()"
:data-source="tabledata" :data-source="tableData"
:loading="tableDataTotalLoading" :loading="tableDataTotalLoading"
:scroll="{ x: 900 }" :scroll="{ x: 900 }"
:pagination="false" :pagination="false"
@@ -190,7 +190,7 @@ export default {
pageSize: 10, pageSize: 10,
currentPage: 1, currentPage: 1,
tableDataTotal: 0, tableDataTotal: 0,
projectName: undefined, completionStatus: undefined,
TASK_TYPE: TASK_TYPE, TASK_TYPE: TASK_TYPE,
stdPosition: null, stdPosition: null,
qualsLevelCode: null, qualsLevelCode: null,
@@ -211,7 +211,7 @@ export default {
label: "已完成", label: "已完成",
}, },
], ],
tabledata: [], tableData: [],
tableDataTotalLoading: true, // 表格loading加载配置 tableDataTotalLoading: true, // 表格loading加载配置
evalDataSource: "", evalDataSource: "",
Assessvisible: false, Assessvisible: false,
@@ -418,8 +418,8 @@ export default {
ctx.emit("update:Tvisible", false); ctx.emit("update:Tvisible", false);
state.currentPage = 1; state.currentPage = 1;
state.name = ""; state.name = "";
state.projectName = undefined; state.completionStatus = undefined;
state.tabledata = []; state.tableData = [];
state.stdPosition = null; state.stdPosition = null;
state.qualsLevelCode = null; state.qualsLevelCode = null;
}; };
@@ -430,8 +430,8 @@ export default {
getData(); getData();
} }
}; };
const selectProjectName = (value) => { const selectCompletionStatus = (value) => {
state.projectName = value; state.completionStatus = value;
}; };
//催促 //催促
const godie = () => { const godie = () => {
@@ -462,7 +462,7 @@ export default {
getStudentTaskPage({ getStudentTaskPage({
pageNum: state.currentPage, pageNum: state.currentPage,
pageSize: state.pageSize, pageSize: state.pageSize,
completionStatus: state.projectName, completionStatus: state.completionStatus,
username: state.name, username: state.name,
taskId: props.datasource.id, taskId: props.datasource.id,
qualsLevelCode: state.qualsLevelCode, qualsLevelCode: state.qualsLevelCode,
@@ -472,7 +472,7 @@ export default {
console.log("在线课数据获取", res); console.log("在线课数据获取", res);
if (res.data.code == 200) { if (res.data.code == 200) {
state.tableDataTotalLoading = false; state.tableDataTotalLoading = false;
state.tabledata = res.data.data.records; state.tableData = res.data.data.records;
state.tableDataTotal = res.data.data.total; state.tableDataTotal = res.data.data.total;
} }
}) })
@@ -493,7 +493,7 @@ export default {
state.tableDataTotalLoading = true; state.tableDataTotalLoading = true;
state.currentPage = 1; state.currentPage = 1;
state.name = ""; state.name = "";
state.projectName = null; state.completionStatus = null;
state.stdPosition = null; state.stdPosition = null;
state.qualsLevelCode = null; state.qualsLevelCode = null;
getData(); getData();
@@ -511,7 +511,7 @@ export default {
let params = { let params = {
pageNo: state.currentPage || "", pageNo: state.currentPage || "",
pageSize: state.pageSize || "", pageSize: state.pageSize || "",
completionStatus: state.projectName || "", completionStatus: state.completionStatus || "",
username: state.name || "", username: state.name || "",
taskId: props.datasource.id || "", taskId: props.datasource.id || "",
qualsLevelCode: state.qualsLevelCode || "", qualsLevelCode: state.qualsLevelCode || "",
@@ -539,7 +539,7 @@ export default {
} }
return { return {
...toRefs(state), ...toRefs(state),
selectProjectName, selectCompletionStatus,
checkGrowthPer, checkGrowthPer,
showassess, showassess,
closeDrawer, closeDrawer,

View File

@@ -25,7 +25,7 @@
<a-input <a-input
v-model:value="params.name" v-model:value="params.name"
style="width: 220px; height: 40px; border-radius: 8px" style="width: 220px; height: 40px; border-radius: 8px"
placeholder="请输入创建人" placeholder="请输入名称"
maxlength="20" maxlength="20"
/> />
</div> </div>
@@ -78,10 +78,9 @@
</div> </div>
</div> </div>
</div> </div>
<div class="main_btns"> <!-- <div class="main_btns">
<button @click="closeDrawer" class="btn2">取消</button> <button @click="closeDrawer" class="btn2">取消</button>
<button @click="confirm" class="btn2">确定</button> </div> -->
</div>
</div> </div>
<template v-if="step == 2"> <template v-if="step == 2">
@@ -897,12 +896,10 @@ const closeDrawer = () => {
type: props.type, type: props.type,
offcourseId: params.value.offcourseId, offcourseId: params.value.offcourseId,
}); });
emit("refresh");
} }
}; };
const emit = defineEmits(["call-parent-method"]); const emit = defineEmits(["call-parent-method", "refresh"]);
const confirm = async () => {
closeDrawer();
};
const createNewCourse = () => { const createNewCourse = () => {
changeName.value = true; changeName.value = true;

View File

@@ -238,6 +238,7 @@ export default {
importStudent: `${process.env.VUE_APP_BOE_API_URL}${ importStudent: `${process.env.VUE_APP_BOE_API_URL}${
process.env.VUE_APP_BASE_API_GROWTH || "" process.env.VUE_APP_BASE_API_GROWTH || ""
}/professional/allocation/importLearner`, }/professional/allocation/importLearner`,
timers: "", // 定时器,用于清空定时器使用 timers: "", // 定时器,用于清空定时器使用
isAddStudent: false, // 用于判断用户是否关闭弹框需要重新获取学员列表 isAddStudent: false, // 用于判断用户是否关闭弹框需要重新获取学员列表
uploadpercent: -1, uploadpercent: -1,
@@ -335,6 +336,7 @@ export default {
const status = info.file.status; const status = info.file.status;
if (status !== "uploading") { if (status !== "uploading") {
console.log(info.file, info.fileList); console.log(info.file, info.fileList);
state.addLoading = false;
} }
if (status === "done") { if (status === "done") {
console.log("上传成功返回的UUID", info.file.response.data); console.log("上传成功返回的UUID", info.file.response.data);
@@ -346,6 +348,7 @@ export default {
}); });
state.fileName = info.file.name; state.fileName = info.file.name;
let i = 0; let i = 0;
message.success("上传成功");
if (info.file.response.code == 1) { if (info.file.response.code == 1) {
state.fileList = []; state.fileList = [];
state.addLoading = false; state.addLoading = false;

View File

@@ -5,7 +5,7 @@
gutter="12" gutter="12"
style="padding-left: 20px; margin-right: 0px" style="padding-left: 20px; margin-right: 0px"
> >
<!-- <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">
<OrgClass <OrgClass
@@ -45,7 +45,7 @@
></a-select> ></a-select>
</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="状态" style="width: 193px">
<div class="select in"> <div class="select in">
@@ -124,9 +124,8 @@
type="flex" type="flex"
gutter="12" gutter="12"
style="padding-left: 20px; margin-right: 0px; position: relative" style="padding-left: 20px; margin-right: 0px; position: relative"
v-if="checkGrowthPer(permissions)"
> >
<a-col :span="1.5"> <a-col :span="1.5" v-if="checkMenu('growthStudentAdd')">
<a-button <a-button
@click="addSut" @click="addSut"
class="cus-btn" class="cus-btn"
@@ -141,7 +140,7 @@
</a-button> </a-button>
</a-col> </a-col>
<!-- 新加导入学员 批量换组 导出学习信息 --> <!-- 新加导入学员 批量换组 导出学习信息 -->
<a-col :span="1.5"> <a-col :span="1.5" v-if="checkMenu('growthStudentImport')">
<a-button <a-button
class="cus-btn" class="cus-btn"
@click="showImpStu" @click="showImpStu"
@@ -155,7 +154,7 @@
导入学员 导入学员
</a-button> </a-button>
</a-col> </a-col>
<a-col :span="1.5"> <a-col :span="1.5" v-if="checkMenu('growthStudentDelete')">
<a-button <a-button
class="cus-btn" class="cus-btn"
@click="bathDel" @click="bathDel"
@@ -169,7 +168,7 @@
批量删除学员 批量删除学员
</a-button> </a-button>
</a-col> </a-col>
<a-col :span="1.5"> <a-col :span="1.5" v-if="checkMenu('growthStudentExport')">
<a-button <a-button
class="cus-btn" class="cus-btn"
@click="exportTaskStu" @click="exportTaskStu"
@@ -249,6 +248,7 @@
style="display: flex; justify-content: center; align-items: center" style="display: flex; justify-content: center; align-items: center"
> >
<a-button <a-button
v-if="checkMenu('growthStudentLookInfo')"
@click="seeStudent(record)" @click="seeStudent(record)"
type="link" type="link"
style="margin-right: 16px" style="margin-right: 16px"
@@ -256,7 +256,7 @@
查看 查看
</a-button> </a-button>
<a-button <a-button
v-if="checkGrowthPer(permissions)" v-if="checkMenu('growthStudentDelete')"
:disabled="record.isLeader === '1'" :disabled="record.isLeader === '1'"
@click="del(record)" @click="del(record)"
type="link" type="link"
@@ -280,7 +280,7 @@
:courseId="id" :courseId="id"
:courseType="type" :courseType="type"
/> />
<GrowthDrawer ref="GrowthDrawerRef" title="新增学员"> <GrowthDrawer ref="GrowthDrawerRef" title="新增学员" width="1200px">
<GrowthCommonStudent <GrowthCommonStudent
:growthId="growId" :growthId="growId"
@confirm="confirmDrawer" @confirm="confirmDrawer"
@@ -291,6 +291,7 @@
<script setup lang="jsx"> <script setup lang="jsx">
import { computed, defineProps, onMounted, ref, watch } from "vue"; import { computed, defineProps, onMounted, ref, watch } from "vue";
import { delStudentList, getStuPage } from "@/api/index1"; import { delStudentList, getStuPage } from "@/api/index1";
import { checkMenu } from "@/utils/utils";
import { import {
getGrowStudent, getGrowStudent,
delGrowStudent, delGrowStudent,
@@ -523,7 +524,9 @@ function search() {
function exportTaskStu() { function exportTaskStu() {
window.open( window.open(
buildUrl( buildUrl(
`${process.env.VUE_APP_BOE_API_URL}${process.env.VUE_APP_BASE_API_GROWTH || ''}/professional/allocation/export`, `${process.env.VUE_APP_BOE_API_URL}${
process.env.VUE_APP_BASE_API_GROWTH || ""
}/professional/allocation/export`,
tableParam.value tableParam.value
) )
); );

View File

@@ -120,10 +120,10 @@
</div> </div>
</div> </div>
</template> </template>
<template #action="{ record }"> <!-- <template #action="{ record }">
<template <template
v-if=" v-if="
record.completionStatus == 2 && checkGrowthPer(permissions) record.completionStatus == 2 && checkMenu('growthStudentMarkComplete')
" "
> >
<a-button type="link" @click="setPermissions(record)" <a-button type="link" @click="setPermissions(record)"
@@ -133,7 +133,7 @@
<template v-else> <template v-else>
<div>--</div> <div>--</div>
</template> </template>
</template> </template> -->
</a-table> </a-table>
</div> </div>
</div> </div>
@@ -150,6 +150,7 @@ import { getGrowStudentDetail, markComplete } from "@/api/growthpath";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { TASK_TYPE } from "@/utils/constGrown"; import { TASK_TYPE } from "@/utils/constGrown";
import { checkGrowthPer } from "@/utils/utils"; import { checkGrowthPer } from "@/utils/utils";
import { checkMenu } from "@/utils/utils";
export default { export default {
name: "SeeStu", name: "SeeStu",
components: {}, components: {},
@@ -170,7 +171,7 @@ export default {
title: "类型", title: "类型",
dataIndex: "courseType", dataIndex: "courseType",
key: "courseType", key: "courseType",
width: 80, width: 120,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
slots: { customRender: "courseType" }, slots: { customRender: "courseType" },
@@ -179,7 +180,6 @@ export default {
title: "任务名称", title: "任务名称",
dataIndex: "taskName", dataIndex: "taskName",
key: "taskName", key: "taskName",
width: 80,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
}, },
@@ -187,9 +187,9 @@ export default {
title: "必修/选修", title: "必修/选修",
dataIndex: "taskType", dataIndex: "taskType",
key: "taskType", key: "taskType",
width: 30,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
width: 120,
customRender: ({ record: { taskType } }) => customRender: ({ record: { taskType } }) =>
({ ({
1: "必修", 1: "必修",
@@ -200,23 +200,23 @@ export default {
title: "开始时间", title: "开始时间",
dataIndex: "startTime", dataIndex: "startTime",
key: "startTime", key: "startTime",
width: 50,
align: "center", align: "center",
width: 200,
ellipsis: true, ellipsis: true,
}, },
{ {
title: "完成时间", title: "完成时间",
dataIndex: "finishTime", dataIndex: "finishTime",
key: "finishTime", key: "finishTime",
width: 50,
align: "center", align: "center",
width: 200,
}, },
{ {
title: "任务状态", title: "任务状态",
dataIndex: "completionStatus", dataIndex: "completionStatus",
key: "completionStatus", key: "completionStatus",
width: 30,
align: "center", align: "center",
width: 120,
customRender: ({ record: { completionStatus } }) => customRender: ({ record: { completionStatus } }) =>
({ ({
2: "进行中", 2: "进行中",
@@ -224,14 +224,14 @@ export default {
0: "未开始", 0: "未开始",
}[completionStatus]), }[completionStatus]),
}, },
{ // {
title: "操作", // title: "操作",
dataIndex: "operation", // dataIndex: "operation",
key: "operation", // key: "operation",
width: 50, // width: 50,
align: "center", // align: "center",
slots: { customRender: "action" }, // slots: { customRender: "action" },
}, // },
]); ]);
const formData = ref() const formData = ref()
const openDrawer = (row) => { const openDrawer = (row) => {

View File

@@ -105,21 +105,18 @@ export default {
title: "操作内容", title: "操作内容",
dataIndex: "operationContent", dataIndex: "operationContent",
key: "operationContent", key: "operationContent",
width: "80px",
align: "center", align: "center",
}, },
{ {
title: "操作人", title: "操作人",
dataIndex: "createName", dataIndex: "createName",
key: "createName", key: "createName",
width: "150px",
align: "center", align: "center",
}, },
{ {
title: "操作时间", title: "操作时间",
dataIndex: "createTime", dataIndex: "createTime",
key: "createTime", key: "createTime",
width: "150px",
align: "center", align: "center",
}, },
]); ]);
@@ -136,6 +133,8 @@ export default {
const resetLearnPath = () => { const resetLearnPath = () => {
state.username = null; state.username = null;
state.searchdate = []; state.searchdate = [];
state.startTime = "";
state.endTime = "";
state.pageNum = 1; state.pageNum = 1;
getList(); getList();
}; };

View File

@@ -30,79 +30,92 @@ export const TASK_TYPE = {
name: '在线', name: '在线',
type: 1, type: 1,
img: onLineImg, img: onLineImg,
component: GrowthLineCourse component: GrowthLineCourse,
permissionType:'growthTaskOnline',
}, },
2: { 2: {
name: '面授', name: '面授',
type: 2, type: 2,
img: faceCourseImg, img: faceCourseImg,
component: GrowthFaceClass component: GrowthFaceClass,
permissionType:'growthTaskFack',
}, },
3: { 3: {
name: '案例', name: '案例',
type: 3, type: 3,
img: caseImg, img: caseImg,
component: GrowthCase component: GrowthCase,
permissionType:'growthTaskCase',
}, },
4: { 4: {
name: '作业', name: '作业',
type: 4, type: 4,
img: workImg, img: workImg,
component: GrowthHomework component: GrowthHomework,
permissionType:'growthHomeworkTask',
}, },
5: { 5: {
name: '考试', name: '考试',
type: 5, type: 5,
img: exaImg, img: exaImg,
component: GrowthExa component: GrowthExa,
permissionType:'growthExaminationTask',
}, },
6: { 6: {
name: '直播', name: '直播',
type: 6, type: 6,
img: liveImg, img: liveImg,
component: GrowthLive component: GrowthLive,
permissionType:'growthLiveTask',
}, },
7: { 7: {
name: '外链', name: '外链',
type: 7, type: 7,
img: linkImg, img: linkImg,
component: GrowthRef component: GrowthRef,
permissionType:'growthLinkTask',
}, },
8: { 8: {
name: '讨论', name: '讨论',
type: 8, type: 8,
img: discussImg, img: discussImg,
component: GrowthDiscuss component: GrowthDiscuss,
permissionType:'growthDiscussTask',
}, },
9: { 9: {
name: '活动', name: '活动',
type: 9, type: 9,
img: activityImg, img: activityImg,
component: GrowthActive component: GrowthActive,
permissionType:'growthActivityTask',
}, },
10: { 10: {
name: '测评', name: '测评',
type: 10, type: 10,
img: testImg, img: testImg,
component: GrowthEval component: GrowthEval,
permissionType:'growthEvaluationTask',
}, },
11: { 11: {
name: '评估', name: '评估',
type: 11, type: 11,
img: evaImg, img: evaImg,
component: GrowthInvist component: GrowthInvist,
permissionType:'growthAssessTask',
}, },
12: { 12: {
name: '投票', name: '投票',
type: 12, type: 12,
img: voteImg, img: voteImg,
component: GrowthVote component: GrowthVote,
permissionType:'growthVoteTask',
}, },
13: { 13: {
name: '项目', name: '项目',
type: 13, type: 13,
img: projectImg, img: projectImg,
component: GrowthProject component: GrowthProject,
permissionType:'growthProjectTask',
}, },
} }

View File

@@ -45,7 +45,7 @@
</div> </div>
<div class="handler"> <div class="handler">
<div class="item" v-for="(value, key) in TASK_TYPE" :key="key"> <div class="item" v-for="(value, key) in TASK_TYPE" :key="key">
<template v-if="key < 3"> <template v-if="checkMenu(value.permissionType)">
<component <component
:ref="(el) => (courseRef['el' + key] = el)" :ref="(el) => (courseRef['el' + key] = el)"
v-model:taskList="listDatas" v-model:taskList="listDatas"
@@ -85,7 +85,11 @@
</div> </div>
</div> </div>
<div <div
v-if="listDatas.length != 0 && !basicData.isPublished" v-if="
listDatas.length != 0 &&
!basicData.isPublished &&
checkMenu('growthTaskDelete')
"
class="btn btn2" class="btn btn2"
@click="confirmDelTask()" @click="confirmDelTask()"
> >
@@ -202,6 +206,7 @@
<div class="opacation"> <div class="opacation">
<template v-if="element.status == '0'"> <template v-if="element.status == '0'">
<span <span
v-if="checkMenu('growthTaslRelease')"
style="color: #4ea6ff; cursor: pointer" style="color: #4ea6ff; cursor: pointer"
@click="published(element, index)" @click="published(element, index)"
> >
@@ -211,19 +216,21 @@
<span <span
style="color: #4ea6ff; cursor: pointer" style="color: #4ea6ff; cursor: pointer"
@click="editTaskForType(element, index)" @click="editTaskForType(element, index)"
v-if="checkMenu('growthTaskEdit')"
> >
编辑 编辑
</span> </span>
<span <span
style="color: #4ea6ff; cursor: pointer" style="color: #4ea6ff; cursor: pointer"
@click="confirmDelTask(element, index)" @click="confirmDelTask(element, index)"
v-if="checkMenu('growthTaskDelete')"
> >
删除 删除
</span> </span>
</template> </template>
<template v-else> <template v-else>
<span <span
v-if="element.status == '1'" v-if="element.status == '1' && checkMenu('growthTaskWithdraw')"
style="color: #4ea6ff; cursor: pointer" style="color: #4ea6ff; cursor: pointer"
@click="withdraw(element, index)" @click="withdraw(element, index)"
> >
@@ -287,6 +294,7 @@ import { message } from "ant-design-vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import { TASK_TYPE } from "@/utils/constGrown"; import { TASK_TYPE } from "@/utils/constGrown";
import dialog from "@/utils/dialog"; import dialog from "@/utils/dialog";
import { checkMenu } from "@/utils/utils";
import { import {
getBasicInfo, getBasicInfo,
notPublishedTaskList, notPublishedTaskList,
@@ -431,7 +439,6 @@ const withdraw = (element) => {
width: 100%; width: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-width: 933px;
background-color: rgba(245, 247, 250, 1); background-color: rgba(245, 247, 250, 1);
.tableBox { .tableBox {
margin-top: 21px; margin-top: 21px;

View File

@@ -39,12 +39,14 @@
</div> </div>
</div> </div>
</div> </div>
<!-- <div class="btns"> <template v-if="checkMenu('growthAdd')">
<div class="btn btn3" @click="handleOut"> <div class="btns">
<div class="search"></div> <div class="btn btn3" @click="handleOut">
<div class="btnText">创建必修</div> <div class="search"></div>
<div class="btnText">创建必修</div>
</div>
</div> </div>
</div> --> </template>
<div class="grow_con"> <div class="grow_con">
<div class="grow_list"> <div class="grow_list">
<div class="grow_table"> <div class="grow_table">
@@ -59,18 +61,22 @@
<a-button <a-button
type="link" type="link"
class="table_btn" class="table_btn"
v-if="!record.isPublished && checkGrowthPer(record.permissions)" v-if="!record.isPublished && checkMenu('growthRelease')"
@click="releaseLearnPath(record)" @click="releaseLearnPath(record)"
>发布</a-button >发布</a-button
> >
<a-button <a-button
v-if="checkGrowthPer(record.permissions)" v-if="checkMenu('growthEdit')"
type="link" type="link"
class="table_btn" class="table_btn"
@click="editPath(record)" @click="editPath(record)"
>编辑</a-button >编辑</a-button
> >
<a-button type="link" class="table_btn" @click="manage(record)" <a-button
type="link"
v-if="checkMenu('growthManage')"
class="table_btn"
@click="manage(record)"
>管理</a-button >管理</a-button
> >
<!-- <DropDown v-if="record?.permissions?.includes('17')" value="授权"> <!-- <DropDown v-if="record?.permissions?.includes('17')" value="授权">
@@ -87,6 +93,11 @@
<a-dropdown <a-dropdown
:getPopupContainer="(triggerNode) => triggerNode.parentNode" :getPopupContainer="(triggerNode) => triggerNode.parentNode"
:trigger="['click']" :trigger="['click']"
v-if="
(record.isPublished && checkMenu('growthRevoke')) ||
checkMenu('growthModifyDiscipline') ||
(record.dataSource === '2' && checkMenu('growthDelete'))
"
> >
<a class="ant-dropdown-link" @click.prevent> <a class="ant-dropdown-link" @click.prevent>
更多 更多
@@ -96,20 +107,25 @@
<a-menu> <a-menu>
<a-menu-item <a-menu-item
key="1" key="1"
v-if=" v-if="record.isPublished && checkMenu('growthRevoke')"
record.isPublished && checkGrowthPer(record.permissions)
"
> >
<a-button type="link" @click="withdraw(record)"> <a-button type="link" @click="withdraw(record)">
撤回 撤回
</a-button> </a-button>
</a-menu-item> </a-menu-item>
<a-menu-item key="3"> <a-menu-item
key="3"
v-if="checkMenu('growthModifyDiscipline')"
>
<a-button type="link" @click="updateList(record)"> <a-button type="link" @click="updateList(record)">
修改记录 修改记录
</a-button> </a-button>
</a-menu-item> </a-menu-item>
<template v-if="record.dataSource === '2'"> <template
v-if="
record.dataSource === '2' && checkMenu('growthDelete')
"
>
<a-menu-item key="4"> <a-menu-item key="4">
<a-button type="link" @click="delData(record)"> <a-button type="link" @click="delData(record)">
删除 删除
@@ -157,7 +173,7 @@
<div class="bg_main"> <div class="bg_main">
<div class="bg_main_header"> <div class="bg_main_header">
<div class="bg_main_header_icon"></div> <div class="bg_main_header_icon"></div>
<div>{{editId?'编辑专业力必修':'新增专业力必修'}}</div> <div>{{ editId ? "编辑专业力必修" : "新增专业力必修" }}</div>
<div class="bg_main_header_close" @click="of_exit"></div> <div class="bg_main_header_close" @click="of_exit"></div>
</div> </div>
<div class="bg_body"> <div class="bg_body">
@@ -249,7 +265,7 @@
<div class="bg_body_input"> <div class="bg_body_input">
<div style="display: flex"> <div style="display: flex">
<a-tooltip> <a-tooltip>
<template #title>建议于16个学习任务时使用</template> <template #title> 建议于10个学习任务时使用</template>
<div <div
@click="template = 1" @click="template = 1"
class="learnBgItem" class="learnBgItem"
@@ -268,7 +284,7 @@
</a-tooltip> </a-tooltip>
<a-tooltip> <a-tooltip>
<template #title>建议任务时使用</template> <template #title>建议少于16个学习任务时使用</template>
<div <div
slot="reference" slot="reference"
@click="template = 2" @click="template = 2"
@@ -397,6 +413,7 @@ import CommonStudent from "@/components/growthpath/GrowthCommonStudent";
import TableModelStudent from "@/components/growthpath/GrowthTableModel"; import TableModelStudent from "@/components/growthpath/GrowthTableModel";
import UpdateRecord from "@/components/growthpath/UpdateRecord"; import UpdateRecord from "@/components/growthpath/UpdateRecord";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { checkMenu } from "@/utils/utils";
import { import {
listData, listData,
@@ -451,6 +468,7 @@ export default {
statusPostCreate: [], statusPostCreate: [],
statusRankCreate: [], statusRankCreate: [],
courseNum: "", courseNum: "",
isPublished: false,
matStudens: "", matStudens: "",
elePublishedNum: 0, // 选修发布数量 elePublishedNum: 0, // 选修发布数量
pathWays: "", pathWays: "",
@@ -485,18 +503,17 @@ export default {
ok: () => { ok: () => {
published({ published({
growId: item.id, growId: item.id,
}) }).then((res) => {
.then((res) => { if (res.data.code == 200) {
if (res.data.code == 200) { message.success("发布成功");
message.success("发布成功"); listDatas();
listDatas(); } else {
} else {
message.error(err.data.msg);
}
})
.catch((err) => {
message.error(err.data.msg); message.error(err.data.msg);
}); }
});
// .catch((err) => {
// message.error(err.data.msg);
// });
}, },
}); });
}; };
@@ -530,18 +547,18 @@ export default {
title: "标准岗位", title: "标准岗位",
dataIndex: "stdPositionName", dataIndex: "stdPositionName",
key: "stdPositionName", key: "stdPositionName",
width: 100,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
customRender: ({ record }) => { customRender: ({ record }) => {
return `${record.stdPositionName}${record.stdPosition}`; return record.stdPosition
? `${record.stdPositionName}${record.stdPosition}`
: `${record.stdPositionName}`;
}, },
}, },
{ {
title: "任职资格等级", title: "任职资格等级",
dataIndex: "qualsLevelDesr", dataIndex: "qualsLevelDesr",
key: "qualsLevelDesr", key: "qualsLevelDesr",
width: 120,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
}, },
@@ -550,7 +567,6 @@ export default {
title: "状态", title: "状态",
dataIndex: "isPublished", dataIndex: "isPublished",
key: "isPublished", key: "isPublished",
width: 100,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
customRender: ({ record }) => { customRender: ({ record }) => {
@@ -569,7 +585,6 @@ export default {
title: "数据来源", title: "数据来源",
dataIndex: "dataSource", dataIndex: "dataSource",
key: "dataSource", key: "dataSource",
width: 100,
align: "center", align: "center",
ellipsis: true, ellipsis: true,
customRender: ({ record }) => { customRender: ({ record }) => {
@@ -578,7 +593,6 @@ export default {
}, },
{ {
title: "操作", title: "操作",
width: 160,
align: "right", align: "right",
slots: { customRender: "listData" }, slots: { customRender: "listData" },
}, },
@@ -646,6 +660,7 @@ export default {
state.template = record.template; state.template = record.template;
state.matchRules = record.matchRules || "1"; state.matchRules = record.matchRules || "1";
state.bg_check = true; state.bg_check = true;
state.isPublished = record.isPublished;
}; };
// 切换匹配学员方式 // 切换匹配学员方式
@@ -666,11 +681,14 @@ export default {
if (state.courseNum !== 0 && !state.courseNum) { if (state.courseNum !== 0 && !state.courseNum) {
return message.error("请输入完成选修数量"); return message.error("请输入完成选修数量");
} }
if (state.courseNum > state.elePublishedNum) { if (state.editId && state.isPublished) {
message.warning("完成选修数量不能大于已发布的选修数量"); if (state.courseNum > state.elePublishedNum) {
state.courseNum = state.elePublishedNum; message.warning("完成选修数量不能大于已发布的选修数量");
return; state.courseNum = state.elePublishedNum;
return;
}
} }
const params = { const params = {
stdPositionDesr: state.statusPosts, stdPositionDesr: state.statusPosts,
qualsLevelDesr: state.statusOffices, qualsLevelDesr: state.statusOffices,
@@ -723,6 +741,7 @@ export default {
state.bg_check = false; state.bg_check = false;
state.editId = null; state.editId = null;
state.band = ""; state.band = "";
state.isPublished = false;
}; };
// 创建路径 // 创建路径
// 管理 // 管理
@@ -753,7 +772,6 @@ export default {
// 查看修改记录 // 查看修改记录
const UpdateRecordRef = ref(null); const UpdateRecordRef = ref(null);
const updateList = (record) => { const updateList = (record) => {
console.log(record, "record");
UpdateRecordRef.value.open(record); UpdateRecordRef.value.open(record);
}; };
return { return {
@@ -776,6 +794,7 @@ export default {
handleOut, handleOut,
releaseLearnPath, releaseLearnPath,
delData, delData,
checkMenu,
UpdateRecordRef, UpdateRecordRef,
matchRulesChange, matchRulesChange,
}; };

View File

@@ -13,31 +13,40 @@
<div class="fort">创建时间{{ basicData?.createTime }}</div> <div class="fort">创建时间{{ basicData?.createTime }}</div>
</div> </div>
<div class="right"> <div class="right">
<div <template v-if="basicData.isPublished && checkMenu('growthRevoke')">
class="pubIcon" <div class="pubIcon" @click="resize()">
v-if="checkGrowthPer(preId)" <img class="img2" src="../../assets/images/leveladd/pub.png" />
@click="basicData.isPublished ? resize() : releaseLearnPath()" <!-- 已发布的显示 -->
> <div
<img class="pub"
v-if="!basicData.isPublished" style="width: 28px"
class="img2" :style="{
src="../../assets/images/growthpath/push.png" color: '#ffb64e',
/> }"
<img >
v-else 撤回
class="img2" </div>
src="../../assets/images/leveladd/pub.png"
/>
<!-- 已发布的显示 -->
<div
class="pub"
style="width: 28px"
:style="{ color: !basicData.isPublished ? '#31AF0D' : '#ffb64e' }"
>
{{ basicData?.isPublished ? "撤回" : "发布" }}
</div> </div>
</div> <div class="line"></div>
<div class="line"></div> </template>
<template v-if="!basicData.isPublished && checkMenu('growthRelease')">
<div class="pubIcon" @click="releaseLearnPath()">
<img class="img2" src="../../assets/images/growthpath/push.png" />
<!-- 已发布的显示 -->
<div
class="pub"
style="width: 28px"
:style="{
color: '#31AF0D',
}"
>
发布
</div>
</div>
<div class="line"></div>
</template>
<router-link to="/growthpath" <router-link to="/growthpath"
><div style="display: flex"> ><div style="display: flex">
<img class="img2" src="../../assets/images/leveladd/back.png" /> <img class="img2" src="../../assets/images/leveladd/back.png" />
@@ -58,7 +67,7 @@
<a-tab-pane key="1" tab="概览" style="position: relative"> <a-tab-pane key="1" tab="概览" style="position: relative">
<!-- 概览无数据 --> <!-- 概览无数据 -->
<div v-if="!basicData.publishedTaskNum" style="display: flex"> <div v-if="!basicData.publishedTaskNum" style="display: flex">
<div class="secondadd" v-if="checkGrowthPer(preId)"> <div class="secondadd" v-if="checkMenu('growthTaskAdd')">
<div style="width: 368px; height: 22px" class="addtaskmain"> <div style="width: 368px; height: 22px" class="addtaskmain">
快速创建专业力必修任务详情 快速创建专业力必修任务详情
</div> </div>
@@ -210,7 +219,7 @@
}, },
}" }"
class="editright" class="editright"
v-if="checkGrowthPer(preId) && listTaskData.length" v-if="checkMenu('growthTaskEdit') && listTaskData.length"
> >
<span class="editextb">编辑任务</span> <span class="editextb">编辑任务</span>
</router-link> </router-link>
@@ -224,13 +233,15 @@
<a-radio-button value="1">必修</a-radio-button> <a-radio-button value="1">必修</a-radio-button>
<a-radio-button value="2">选修</a-radio-button> <a-radio-button value="2">选修</a-radio-button>
</a-radio-group> </a-radio-group>
<!-- <div class="switch"> <template v-if="checkMenu('growthSetLearningOrder')">
<a-switch <div class="switch">
@change="sortSwitchChange" <a-switch
v-model:checked="basicData.sortSwitch" @change="sortSwitchChange"
/> v-model:checked="basicData.sortSwitch"
<div style="margin-left: 5px">是否按顺序学习</div> />
</div> --> <div style="margin-left: 5px">是否按顺序学习</div>
</div>
</template>
</div> </div>
<!-- 无数据显示快速创建 --> <!-- 无数据显示快速创建 -->
<div v-if="!listTaskData.length" style="margin-top: 20px"> <div v-if="!listTaskData.length" style="margin-top: 20px">
@@ -244,7 +255,7 @@
<div <div
@click="addTask('/editingtasks')" @click="addTask('/editingtasks')"
class="taskbox" class="taskbox"
v-if="checkGrowthPer(preId)" v-if="checkMenu('growthTaskEdit')"
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)" style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"
> >
<div class="leftt"> <div class="leftt">
@@ -288,11 +299,13 @@
" "
> >
<div class="racona"> <div class="racona">
<img <a-tooltip>
style="width: 17px; height: 14px" <template #title>可拖动排序</template>
src="../../assets/images/leveladd/z1.png" <img
/> style="width: 17px; height: 14px"
src="../../assets/images/leveladd/z1.png"
/>
</a-tooltip>
<img <img
style="width: 31px; height: 28px; margin: 0 12px" style="width: 31px; height: 28px; margin: 0 12px"
:src="TASK_TYPE[element.taskType]?.img" :src="TASK_TYPE[element.taskType]?.img"
@@ -325,9 +338,12 @@
> >
</div> </div>
</div> </div>
<!-- <div <div
class="first" class="first"
v-if="checkGrowthPer(preId) && courseType == 1" v-if="
checkMenu('growthPreviousLevelTask') &&
courseType == 1
"
> >
<template v-if="element.superiorTaskName"> <template v-if="element.superiorTaskName">
<div style="margin-right: 8px"> <div style="margin-right: 8px">
@@ -347,15 +363,28 @@
</a-button> </a-button>
</div> </div>
</template> </template>
</div> --> </div>
<div class="operations" v-if="checkGrowthPer(preId)"> <div
class="operations"
v-if="
checkMenu('growthEvaluateQRCode') ||
checkMenu('growthSignQRCode') ||
checkMenu('growthFaceTeaching') ||
checkMenu('growthFaceStudent') ||
checkMenu('growthQRCode') ||
checkMenu('growthTaskManage')
"
>
<template <template
v-if=" v-if="
element.assessmentIds.length > 1 && element.assessmentIds.length > 1 &&
element.taskType == 2 element.taskType == 2
" "
> >
<div class="operations_dropdown"> <div
class="operations_dropdown"
v-if="checkMenu('growthEvaluateQRCode')"
>
<a-dropdown <a-dropdown
:getPopupContainer=" :getPopupContainer="
(triggerNode) => triggerNode.parentNode (triggerNode) => triggerNode.parentNode
@@ -386,7 +415,17 @@
</template> </template>
</a-dropdown> </a-dropdown>
</div> </div>
<div class="operations_dropdown"> </template>
<template
v-if="
element.offcourseIds.length > 1 &&
element.taskType == 2
"
>
<div
class="operations_dropdown"
v-if="checkMenu('growthSignQRCode')"
>
<a-dropdown <a-dropdown
:getPopupContainer=" :getPopupContainer="
(triggerNode) => triggerNode.parentNode (triggerNode) => triggerNode.parentNode
@@ -418,14 +457,30 @@
</a-dropdown> </a-dropdown>
</div> </div>
</template> </template>
<template
v-if="
(element.taskType == 6 || element.taskType == 9) &&
checkMenu('growthWorkAttendance')
"
>
<div
class="operation"
@click="handlerWorkAttendance(element)"
>
考勤
</div>
</template>
<template <template
v-if=" v-if="
element.assessmentIds.filter((id) => id !== null) element.assessmentIds.length == 1 &&
.length == 1 && element.taskType == 2 element.taskType == 2
" "
> >
<div class="operations_dropdown"> <div
class="operations_dropdown"
v-if="checkMenu('growthEvaluateQRCode')"
>
<a <a
class="ant-dropdown-link" class="ant-dropdown-link"
@click="qrcodeAssement(element)" @click="qrcodeAssement(element)"
@@ -433,7 +488,17 @@
评估二维码 评估二维码
</a> </a>
</div> </div>
<div class="operations_dropdown"> </template>
<template
v-if="
element.offcourseIds.length == 1 &&
element.taskType == 2
"
>
<div
class="operations_dropdown"
v-if="checkMenu('growthSignQRCode')"
>
<a <a
class="ant-dropdown-link" class="ant-dropdown-link"
@click="qrcodeVisible(element)" @click="qrcodeVisible(element)"
@@ -442,15 +507,16 @@
</a> </a>
</div> </div>
</template> </template>
<template v-if="element.taskType == 2"> <template v-if="element.taskType == 2">
<div <div
v-if="checkMenu('growthFaceTeaching')"
class="operation" class="operation"
@click="openCourse(element, index)" @click="openCourse(element, index)"
> >
开课 开课
</div> </div>
<div <div
v-if="checkMenu('growthFaceStudent')"
class="operation" class="operation"
@click="showFS(element, index)" @click="showFS(element, index)"
> >
@@ -458,7 +524,11 @@
</div> </div>
</template> </template>
<template v-if="element.taskType != 2"> <template
v-if="
element.taskType != 2 && checkMenu('growthQRCode')
"
>
<div <div
class="operation" class="operation"
style="cursor: pointer" style="cursor: pointer"
@@ -469,6 +539,7 @@
</template> </template>
<div <div
class="operation" class="operation"
v-if="checkMenu('growthTaskManage')"
style="cursor: pointer; margin-right: 35px" style="cursor: pointer; margin-right: 35px"
@click=" @click="
element.taskType == 2 element.taskType == 2
@@ -569,9 +640,14 @@
index="0" index="0"
type="课程二维码" type="课程二维码"
/> />
<!-- 考勤 -->
<GrowthActiveAttendance
v-model:workAttendanceVisible="workAttendanceVisible"
:datasource="workAttendanceData"
/>
<!-- 二维码弹窗 --> <!-- 二维码弹窗 -->
<!-- 面授课开课弹框 --> <!-- 面授课开课弹框 -->
<GrowthOpenCourse ref="coursePlanRef" :type="4" /> <GrowthOpenCourse ref="coursePlanRef" :type="4" @refresh="getListTask" />
<a-modal <a-modal
v-model:visible="setSuperiorsVisible" v-model:visible="setSuperiorsVisible"
@@ -669,6 +745,8 @@ import { DownOutlined, CloseCircleOutlined } from "@ant-design/icons-vue";
import GrowthFaceTaskManage from "../../components/growthpath/GrowthFaceTaskManage"; import GrowthFaceTaskManage from "../../components/growthpath/GrowthFaceTaskManage";
import GrowthHomeworkManage from "@/components/growthpath/GrowthHomeworkManage"; import GrowthHomeworkManage from "@/components/growthpath/GrowthHomeworkManage";
import { courseData } from "@/api/index1"; import { courseData } from "@/api/index1";
import { checkMenu } from "@/utils/utils";
import GrowthActiveAttendance from "@/components/growthpath/GrowthActiveAttendance";
import { import {
getOverview, getOverview,
getBasicInfo, getBasicInfo,
@@ -700,6 +778,7 @@ export default {
GrowthFaceTaskManage, GrowthFaceTaskManage,
GrowthOpenCourse, GrowthOpenCourse,
DownOutlined, DownOutlined,
GrowthActiveAttendance,
CloseCircleOutlined, CloseCircleOutlined,
GrowthFaceStu, GrowthFaceStu,
}, },
@@ -718,6 +797,9 @@ export default {
onlineVisible: false, onlineVisible: false,
setSuperiorsVisible: false, setSuperiorsVisible: false,
total: 0, total: 0,
// 考勤
workAttendanceVisible: false,
workAttendanceData: {},
pageSize: 99999, pageSize: 99999,
pageNum: 1, pageNum: 1,
spinning: false, spinning: false,
@@ -787,7 +869,11 @@ export default {
}, },
}); });
}; };
// 考勤
const handlerWorkAttendance = (data) => {
state.workAttendanceVisible = true;
state.workAttendanceData = data;
};
// 开启绑定上级任务的弹窗 // 开启绑定上级任务的弹窗
const setSuperiorsActive = ref(null); const setSuperiorsActive = ref(null);
const handlerSuperiors = (element) => { const handlerSuperiors = (element) => {
@@ -1101,7 +1187,7 @@ export default {
window.location.protocol + window.location.protocol +
process.env.VUE_APP_H5 + process.env.VUE_APP_H5 +
"/investigatpage?courseId=" + "/investigatpage?courseId=" +
item.info.id + item.taskId +
"&type=4&id=" + "&type=4&id=" +
item.id + item.id +
"&chapterOrStageId=0" + "&chapterOrStageId=0" +
@@ -1278,6 +1364,7 @@ export default {
...toRefs(state), ...toRefs(state),
stuRef, stuRef,
headers, headers,
checkMenu,
coursePlanRef, coursePlanRef,
changeTabs, changeTabs,
resize, resize,
@@ -1302,6 +1389,7 @@ export default {
handleMenuClick, handleMenuClick,
qrcodeVisible, qrcodeVisible,
handlerSuperiors, handlerSuperiors,
handlerWorkAttendance,
showFS, showFS,
qrCodeItems, qrCodeItems,
visibleEwm, visibleEwm,
@@ -2072,8 +2160,9 @@ export default {
.operations { .operations {
display: flex; display: flex;
width: 460px; width: 260px;
justify-content: flex-end; justify-content: flex-end;
flex-wrap: wrap;
.operation { .operation {
color: #4ea6ff; color: #4ea6ff;
font-size: 14px; font-size: 14px;

View File

@@ -1160,6 +1160,7 @@ export default {
state.tableDataTotal = Number(res.data.data.total); state.tableDataTotal = Number(res.data.data.total);
state.tableLoading = false state.tableLoading = false
}).catch(err => { }).catch(err => {
console.log("getTeacherFeeList catch err.data.msg",err.data.msg)
state.tableLoading = false state.tableLoading = false
message.destroy() message.destroy()
message.error(err.data.msg) message.error(err.data.msg)
@@ -1259,6 +1260,7 @@ export default {
cancel() cancel()
getTableDate(); getTableDate();
}).catch(err => { }).catch(err => {
console.log("updateTeacherFee catch err",err.data.msg)
message.destroy() message.destroy()
state.teacherdialog = false; state.teacherdialog = false;
message.error(err.data.msg) message.error(err.data.msg)

View File

@@ -19,8 +19,9 @@ module.exports = defineConfig({
}, },
proxy: { proxy: {
// "/professional": { // "/professional": {
// target: 'http://192.168.143.97:32002', // target: 'http://192.168.68.211:32002',
// // target: 'http://192.168.50.195:32002', // // target: 'http://192.168.50.195:32002',
// // target: 'http://192.168.86.195:32002',
// changeOrigin: true, // changeOrigin: true,
// }, // },
"/growth": { "/growth": {