Merge remote-tracking branch 'origin/manage-release' into release

This commit is contained in:
yujicun
2022-12-27 09:44:55 +08:00
17 changed files with 6982 additions and 6895 deletions

View File

@@ -29,6 +29,7 @@ export const studentProcess = (obj) => http.get('/admin/project/studentProcess',
//是否优秀学员 //是否优秀学员
export const topStudent = (obj) => http.post('/admin/project/topStudent', obj) export const topStudent = (obj) => http.post('/admin/project/topStudent', obj)
export const updateStudent = (obj) => http.post('/admin/student/updateStudent', obj)
//项目概览 //项目概览
export const overview = (obj) => http.get('/admin/project/overview', { params: obj }) export const overview = (obj) => http.get('/admin/project/overview', { params: obj })

View File

@@ -264,7 +264,7 @@ export default {
workEnclosureAddress: state.attach workEnclosureAddress: state.attach
? state.attach ? state.attach
: "", : "",
workId: props.edit ? props.EditWorkId : 0, workId: props.EditWorkId >0 ? props.EditWorkId:0 ,
workName: state.name, workName: state.name,
workRequirement: state.workRequirement, workRequirement: state.workRequirement,
}; };

View File

@@ -538,11 +538,13 @@ export default {
//TODO缺少paperName字段 //TODO缺少paperName字段
state.test.examinationTestName = state.paperName; state.test.examinationTestName = state.paperName;
//考试推送 //考试推送
state.test.targetId = 0; state.test.targetId = 0;
state.test.type = 0; state.test.type = 0;
if (props.isLevel == 1) { state.test.chapterId=0;
state.test.targetId = props.routerId; if(props.isLevel == 1){
state.test.type = 2; state.test.targetId = props.routerId;
state.test.chapterId = props.isactive;
state.test.type = 2;
} else if (props.isLevel == 2) { } else if (props.isLevel == 2) {
state.test.targetId = props.projectId; state.test.targetId = props.projectId;

View File

@@ -39,7 +39,7 @@
<div class="set_content"> <div class="set_content">
<div class="setc_name"><span>资源归属</span></div> <div class="setc_name"><span>资源归属</span></div>
<div class="setc_main"> <div class="setc_main">
<span style="color: #999999">{{ projectInfo.sourceBelongName }}</span> <span style="color: #999999">{{ (projectInfo.sourceBelongFullName || '')+projectInfo.sourceBelongName }}</span>
</div> </div>
</div> </div>
<div class="set_content"> <div class="set_content">

View File

@@ -15,7 +15,8 @@
@click="closeDrawer" @click="closeDrawer"
/> />
</div> </div>
<div class="main"> <a-spin v-if="loading" :spinning="loading"/>
<div v-if="!loading" class="main">
<div class="stuinfor"> <div class="stuinfor">
<div class="portrait"> <div class="portrait">
<img src="../../assets/images/studentimg/character.png" /> <img src="../../assets/images/studentimg/character.png" />
@@ -176,6 +177,7 @@ export default {
}, },
setup(props, ctx) { setup(props, ctx) {
const state = reactive({ const state = reactive({
loading:false,
userName: null, //用户名 userName: null, //用户名
deptName: null, //部门 deptName: null, //部门
jobName: null, //岗位 jobName: null, //岗位
@@ -302,11 +304,13 @@ export default {
state.stageList = array; state.stageList = array;
}; };
const check = () => { const check = () => {
state.loading = true
let obj = { let obj = {
projectId: 37, projectId: props.projectId,
studentId: 3, studentId: props.checkStuId,
}; };
studentProcess(obj).then((res) => { studentProcess(obj).then((res) => {
state.loading = false
console.log("查看了学员", res.data.data); console.log("查看了学员", res.data.data);
let result = res.data.data; let result = res.data.data;
state.userName = result.userInfoBo.userName; state.userName = result.userInfoBo.userName;

View File

@@ -43,9 +43,9 @@ const id = computed(() => {
return props.value return props.value
}) })
function change(key, obj) { function change(key, obj, {triggerNode: {props: {namePath}}}) {
console.log(obj[0], key, props.value);
emit('update:name', obj[0]) emit('update:name', obj[0])
emit('update:fullName', namePath)
emit('update:value', key) emit('update:value', key)
} }

View File

@@ -107,7 +107,7 @@ function change(e, l) {
memberParam.value.page = 1 memberParam.value.page = 1
isOpen.value = false isOpen.value = false
Array.isArray(l) && (selectOptions.value = l) Array.isArray(l) && (selectOptions.value = l)
Array.isArray(selectOptions.value) && emit('onChange', e, l, selectOptions.value.find(e => e.departId)?.departId, selectOptions.value.find(e => e.departId)?.departName) Array.isArray(selectOptions.value) && emit('onChange', e, l, selectOptions.value.find(e => e.departId)?.departId, selectOptions.value.find(e => e.departId)?.departName, selectOptions.value.find(e => e.departId)?.orgName)
if (Array.isArray(l)) { if (Array.isArray(l)) {
emit('update:name', l.map(t => t.label).join(',')) emit('update:name', l.map(t => t.label).join(','))
emit('update:value', l.map(t => t.value).join(',')) emit('update:value', l.map(t => t.value).join(','))

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -76,13 +76,13 @@
</div> </div>
</div> </div>
</div> </div>
<div class="mbl_items" v-if="detail.sceneId"> <div class="mbl_items" v-if="detail.sceneContent">
<div class="item_nam"> <div class="item_nam">
<span style="margin-right: 14px">场景</span> <span style="margin-right: 14px">场景</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="select i7_input"> <div class="select i7_input">
{{ filterSenceTxt(detail.sceneId) }} {{ detail.sceneContent }}
</div> </div>
</div> </div>
</div> </div>
@@ -123,10 +123,10 @@
<div class="i12_box1" style="position: relative" v-for="(item, index) in detail.attach" :key="index"> <div class="i12_box1" style="position: relative" v-for="(item, index) in detail.attach" :key="index">
<div class="file_img"> <div class="file_img">
<img v-if=" <img v-if="
item.indexOf('jpg') !== -1 || item.indexOf('jpg') !== -1 ||
item.indexOf('jpeg') !== -1 || item.indexOf('jpeg') !== -1 ||
item.indexOf('png') !== -1 item.indexOf('png') !== -1
" src="@/assets/images/coursewareManage/pngpic.png" /> " src="@/assets/images/coursewareManage/pngpic.png" />
<div v-else> <div v-else>
<img v-if="item.indexOf('doc') !== -1" src="@/assets/images/coursewareManage/docpic.png" /> <img v-if="item.indexOf('doc') !== -1" src="@/assets/images/coursewareManage/docpic.png" />
<div v-else> <div v-else>
@@ -160,13 +160,13 @@
left: 72px; left: 72px;
"> ">
{{ {{
item.indexOf("-") !== -1 item.indexOf("-") !== -1
? item.slice( ? item.slice(
item.lastIndexOf("/") + 1, item.lastIndexOf("/") + 1,
item.lastIndexOf("-") item.lastIndexOf("-")
) + item.slice(item.lastIndexOf(".")) ) + item.slice(item.lastIndexOf("."))
: item : item
}} }}
</span> </span>
</div> </div>

View File

@@ -154,10 +154,10 @@
<!-- />--> <!-- />-->
<a-tree-select style="width: 440px" placeholder="请选择内容分类" :treeDefaultExpandAll="true" <a-tree-select style="width: 440px" placeholder="请选择内容分类" :treeDefaultExpandAll="true"
:getPopupContainer=" :getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" @change="changeTreeSelectValue" v-model:value="fen_lei" :tree-data="options2222"> " @change="changeTreeSelectValue" v-model:value="fen_lei" :tree-data="options2222">
</a-tree-select> </a-tree-select>
</div> </div>
</div> </div>
@@ -192,26 +192,34 @@
</div> </div>
</div> </div>
</div> </div>
<!--
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<span style="margin-right: 14px">场景</span> <span style="margin-right: 14px">场景</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<div class="select i7_input"> <div class="i1_input">
<a-select :getPopupContainer=" <a-input v-model:value="chang_jin" maxlength="50"
(triggerNode) => { style="width: 440px; height: 40px; border-radius: 8px" placeholder="请输入场景" />
return triggerNode.parentNode || document.body; <div class="inp_num">
} <span style="color: #c7cbd2">
" v-model:value="chang_jin" dropdownClassName="dropdown-style" style="width: 440px" placeholder="请选择" {{ chang_jin.length }}/50
:options="options3" allowClear showSearch /> </span>
</div>
</div> </div>
</div> </div>
<!-- <div class="item_inp">
<div class="select i7_input">
<a-select :getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
" v-model:value="chang_jin" dropdownClassName="dropdown-style" style="width: 440px" placeholder="请选择"
:options="options3" allowClear showSearch />
</div>
</div> -->
</div> </div>
-->
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div class="item_nam">
<span style="margin-right: 14px">内容标签</span> <span style="margin-right: 14px">内容标签</span>
@@ -359,7 +367,7 @@ export default defineComponent({
fen_lei: null, fen_lei: null,
fen_lei1: null, fen_lei1: null,
feng_mian_1: null, feng_mian_1: null,
chang_jin: null, chang_jin: "",
tags_val_single: "", tags_val_single: "",
tags_val: [], tags_val: [],
qdms_inputV6: "", qdms_inputV6: "",
@@ -564,7 +572,7 @@ export default defineComponent({
state.fen_lei = null; state.fen_lei = null;
state.fen_lei1 = null; state.fen_lei1 = null;
state.feng_mian_1 = null; state.feng_mian_1 = null;
state.chang_jin = null; state.chang_jin = "";
state.tags_val_single = ""; state.tags_val_single = "";
state.tags_val = []; state.tags_val = [];
state.qdms_inputV6 = ""; state.qdms_inputV6 = "";
@@ -751,7 +759,7 @@ export default defineComponent({
targetUser: state.qdms_inputV2, targetUser: state.qdms_inputV2,
meaning: state.qdms_inputV3, meaning: state.qdms_inputV3,
categoryId: state.fen_lei, categoryId: state.fen_lei,
sceneId: state.chang_jin, sceneContent: state.chang_jin,
tips: state.tags_val ? state.tags_val.join(",") : null, tips: state.tags_val ? state.tags_val.join(",") : null,
teacherId: state.member.value, teacherId: state.member.value,
teacher: state.member.name, teacher: state.member.name,
@@ -841,7 +849,7 @@ export default defineComponent({
state.qdms_inputV3 = item.meaning; state.qdms_inputV3 = item.meaning;
state.fen_lei = String(item.categoryId); state.fen_lei = String(item.categoryId);
state.fen_lei1 = changeTreeSelectValue(String(item.categoryId)); state.fen_lei1 = changeTreeSelectValue(String(item.categoryId));
state.chang_jin = String(item.sceneId); state.chang_jin = String(item.sceneContent ? item.sceneContent : '');
state.tags_val = item.tips ? item.tips.split(",") : []; state.tags_val = item.tips ? item.tips.split(",") : [];
state.qdms_inputV6 = item.intro; state.qdms_inputV6 = item.intro;
state.member = { value: item.teacherId, name: item.teacher }; state.member = { value: item.teacherId, name: item.teacher };

View File

@@ -536,7 +536,7 @@
<div class="setc_name"><span>资源归属</span></div> <div class="setc_name"><span>资源归属</span></div>
<div class="setc_main"> <div class="setc_main">
<span style="color: #999999">{{ <span style="color: #999999">{{
projectInfo.sourceBelongName (projectInfo.sourceBelongFullName || '') + projectInfo.sourceBelongName
}}</span> }}</span>
</div> </div>
</div> </div>

View File

@@ -3,14 +3,15 @@
<div class="projectAdd"> <div class="projectAdd">
<div class="header"> <div class="header">
<span class="title" <span class="title"
>{{ projectInfo.projectId ? "编辑" : "创建" >{{
projectInfo.projectId ? "编辑" : "创建"
}}{{ ptojectType == "3" ? "班级" : "项目" }}</span }}{{ ptojectType == "3" ? "班级" : "项目" }}</span
> >
<div <div
@click="backPage" @click="backPage"
style="cursor: pointer" style="cursor: pointer"
to="/projectmanage" to="/projectmanage"
class="goback" class="goback"
> >
<span class="return"></span><span class="returntext">返回</span> <span class="return"></span><span class="returntext">返回</span>
</div> </div>
@@ -20,8 +21,8 @@
<div class="name" v-if="projectInfo.parentName"> <div class="name" v-if="projectInfo.parentName">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目归属</div> <div class="inname">项目归属</div>
</div> </div>
@@ -34,8 +35,8 @@
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname"> <div class="inname">
{{ ptojectType == 3 ? "班级名称" : "项目名称" }} {{ ptojectType == 3 ? "班级名称" : "项目名称" }}
@@ -43,27 +44,27 @@
</div> </div>
<div class="in"> <div class="in">
<NameInput <NameInput
placeholder="请输入项目名称" placeholder="请输入项目名称"
v-model:value="projectInfo.name" v-model:value="projectInfo.name"
v-model:validate="projectInfo.validate" v-model:validate="projectInfo.validate"
:maxlength="30" :maxlength="30"
show-count show-count
:id="projectInfo.projectId" :id="projectInfo.projectId"
></NameInput> ></NameInput>
</div> </div>
</div> </div>
<div class="name flex-top"> <div class="name flex-top">
<div class="namebox" style="margin-top: 10px"> <div class="namebox" style="margin-top: 10px">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">封面图</div> <div class="inname">封面图</div>
</div> </div>
<div class="in select" style="flex: 1; display: flex"> <div class="in select" style="flex: 1; display: flex">
<div <div
:class="`box ${projectInfo.picUrl === src.value ? 'active' : ''}`" :class="`box ${projectInfo.picUrl === src.value ? 'active' : ''}`"
style=" style="
width: 100px; width: 100px;
height: 100px; height: 100px;
border-radius: 5px; border-radius: 5px;
@@ -71,19 +72,19 @@
position: relative; position: relative;
overflow: hidden; overflow: hidden;
" "
v-for="(src, index) in projectPic" v-for="(src, index) in projectPic"
:key="index" :key="index"
@click="() => (projectInfo.picUrl = src.value)" @click="() => (projectInfo.picUrl = src.value)"
> >
<img <img
style=" style="
width: 100px; width: 100px;
height: 100px; height: 100px;
margin-bottom: 4px; margin-bottom: 4px;
margin-right: 4px; margin-right: 4px;
" "
:src="src.value" :src="src.value"
alt="avatar" alt="avatar"
/> />
</div> </div>
</div> </div>
@@ -91,64 +92,65 @@
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目时间</div> <div class="inname">项目时间</div>
</div> </div>
<div class="in"> <div class="in">
<a-range-picker <a-range-picker
separator="至" separator="至"
:show-time="{ format: 'HH:mm' }" :show-time="{ format: 'HH:mm' }"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="[' 开始时间', ' 结束时间']"
:disabled-date="disabledDate" :disabled-date="disabledDate"
v-model:value="projectInfo.rangeTime" v-model:value="projectInfo.rangeTime"
style="width: 100%; height: 40px; border-radius: 5px" style="width: 100%; height: 40px; border-radius: 5px"
valueFormat="YYYY-MM-DD HH:mm" valueFormat="YYYY-MM-DD HH:mm"
@change="timeChange" @change="timeChange"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目经理</div> <div class="inname">项目经理</div>
</div> </div>
<div class="in"> <div class="in">
<ProjectManager <ProjectManager
v-model:value="projectInfo.managerId" v-model:value="projectInfo.managerId"
v-model:name="projectInfo.manager" v-model:name="projectInfo.manager"
@onChange="managerChange" @onChange="managerChange"
mode="multiple" mode="multiple"
></ProjectManager> ></ProjectManager>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">资源归属</div> <div class="inname">资源归属</div>
</div> </div>
<div class="in select"> <div class="in select">
<OrgClass <OrgClass
v-model:value="projectInfo.sourceBelongId" v-model:value="projectInfo.sourceBelongId"
v-model:name="projectInfo.sourceBelongName" v-model:name="projectInfo.sourceBelongName"
v-model:fullName="projectInfo.sourceBelongFullName"
></OrgClass> ></OrgClass>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目级别</div> <div class="inname">项目级别</div>
</div> </div>
@@ -159,8 +161,8 @@
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">培训分类</div> <div class="inname">培训分类</div>
</div> </div>
@@ -171,15 +173,15 @@
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">是否BOEU实施</div> <div class="inname">是否BOEU实施</div>
</div> </div>
<div class="in"> <div class="in">
<a-radio-group <a-radio-group
v-model:value="projectInfo.boeFlag" v-model:value="projectInfo.boeFlag"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
> >
<a-radio :style="radioStyle" :value="1"></a-radio> <a-radio :style="radioStyle" :value="1"></a-radio>
<a-radio :style="radioStyle" :value="0"></a-radio> <a-radio :style="radioStyle" :value="0"></a-radio>
@@ -192,16 +194,16 @@
</div> </div>
<div class="in"> <div class="in">
<a-checkbox <a-checkbox
v-model:checked="courseSyncFlag" v-model:checked="courseSyncFlag"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
><span ><span
style=" style="
width: 100%; width: 100%;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
" "
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span >同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-checkbox ></a-checkbox
> >
</div> </div>
</div> </div>
@@ -211,12 +213,12 @@
</div> </div>
<div class="in"> <div class="in">
<a-textarea <a-textarea
v-model:value="projectInfo.remark" v-model:value="projectInfo.remark"
style="height: 80px" style="height: 80px"
placeholder="请输入说明" placeholder="请输入说明"
show-count show-count
:maxlength="200" :maxlength="200"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
@@ -235,18 +237,18 @@
<div class="inname" style="width: 50px">模版</div> <div class="inname" style="width: 50px">模版</div>
<div class="in select" style="margin-left: 2px"> <div class="in select" style="margin-left: 2px">
<a-select <a-select
:getPopupContainer=" :getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" "
placeholder="请选择模版" placeholder="请选择模版"
:size="size" :size="size"
style="width: 100%" style="width: 100%"
:options="classifyList5" :options="classifyList5"
@change="classificationChange5" @change="classificationChange5"
@popupScroll="templateScroll" @popupScroll="templateScroll"
:fieldNames="{ :fieldNames="{
label: 'name', label: 'name',
value: 'projectTemplateId', value: 'projectTemplateId',
}" }"
@@ -260,33 +262,33 @@
<div class="btn"> <div class="btn">
<a-button @click="backPage" class="btn2">取消</a-button> <a-button @click="backPage" class="btn2">取消</a-button>
<a-button <a-button
:loading="loading" :loading="loading"
v-on:click="createProject" v-on:click="createProject"
type="primary" type="primary"
class="btn1" class="btn1"
style="margin-left: 20px" style="margin-left: 20px"
>确定 >确定
</a-button> </a-button>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { onMounted, reactive, toRefs, watch } from "vue"; import {onMounted, reactive, toRefs, watch} from "vue";
import { message } from "ant-design-vue"; import {message} from "ant-design-vue";
import { useRoute, useRouter } from "vue-router"; import {useRoute, useRouter} from "vue-router";
import * as api from "../../api/index"; import * as api from "../../api/index";
import { useStore } from "vuex"; import {useStore} from "vuex";
// import ProjectClass from "@/components/project/ProjectClass"; // import ProjectClass from "@/components/project/ProjectClass";
import TrainClass from "@/components/project/TrainClass"; import TrainClass from "@/components/project/TrainClass";
import OrgClass from "@/components/project/OrgClass"; import OrgClass from "@/components/project/OrgClass";
import ProjectManager from "@/components/project/ProjectManagerNew"; import ProjectManager from "@/components/project/ProjectManagerNew";
import NameInput from "@/components/project/NameInput"; import NameInput from "@/components/project/NameInput";
import ProjectLevel from "@/components/project/ProjectLevel"; import ProjectLevel from "@/components/project/ProjectLevel";
import { changeOwnership, scrollLoad } from "@/api/method"; import {changeOwnership, scrollLoad} from "@/api/method";
import { storage } from "../../api/storage"; import {storage} from "../../api/storage";
import * as api2 from "../../api/indexAudit"; import * as api2 from "../../api/indexAudit";
import { validateName } from "@/api/index1"; import {validateName} from "@/api/index1";
import dayjs from "dayjs"; import dayjs from "dayjs";
export default { export default {
@@ -304,7 +306,7 @@ export default {
const routers = useRoute(); const routers = useRoute();
const router = useRouter(); const router = useRouter();
const state = reactive({ const state = reactive({
loading:false, loading: false,
currentPage: 1, //当前页 currentPage: 1, //当前页
tableDataTotal: -1, //模版列表总数 tableDataTotal: -1, //模版列表总数
pageSize: 10, //每页10条数据 pageSize: 10, //每页10条数据
@@ -351,10 +353,10 @@ export default {
state.projectInfo.parentId = routers.query.parentId; state.projectInfo.parentId = routers.query.parentId;
state.projectInfo.projectId = routers.query.projectId; state.projectInfo.projectId = routers.query.projectId;
(state.projectInfo.projectId || state.projectInfo.parentId) && (state.projectInfo.projectId || state.projectInfo.parentId) &&
api api
.getProjectDetail({ .getProjectDetail({
projectId: projectId:
state.projectInfo.projectId || state.projectInfo.parentId, state.projectInfo.projectId || state.projectInfo.parentId,
}) })
.then((res) => { .then((res) => {
state.projectInfo = { state.projectInfo = {
@@ -380,8 +382,8 @@ export default {
if (res.rows && res.rows.length > 0) { if (res.rows && res.rows.length > 0) {
let i = res.rows.length; let i = res.rows.length;
state.auditDescription = res.rows[i - 1].description state.auditDescription = res.rows[i - 1].description
? res.rows[i - 1].description ? res.rows[i - 1].description
: "-"; : "-";
} }
} }
}); });
@@ -490,24 +492,26 @@ export default {
api.createProject(state.projectInfo).then((res) => { api.createProject(state.projectInfo).then((res) => {
state.loading = false state.loading = false
state.projectInfo.projectId || state.projectInfo.projectId ||
changeOwnership("project", res.data.data.projectId, [ changeOwnership("project", res.data.data.projectId, [
{ id: res.data.data.createId, name: res.data.data.createName }, {id: res.data.data.createId, name: res.data.data.createName},
]); ]);
message.destroy(); message.destroy();
message.success(state.projectInfo.projectId ? "编辑成功" : "创建成功"); message.success(state.projectInfo.projectId ? "编辑成功" : "创建成功");
// router.back(); // router.back();
router.push({ router.push({
path: "/taskpage", path: "/taskpage",
query: { projectId: res.data.data.projectId }, query: {projectId: res.data.data.projectId},
}); });
storage.set("projectId", res.data.data.projectId); storage.set("projectId", res.data.data.projectId);
}); });
}; };
function managerChange(e, l, d, t) { function managerChange(e, l, d, t, orgName) {
state.projectInfo.sourceBelongId = d state.projectInfo.sourceBelongId = d
state.projectInfo.sourceBelongName = t state.projectInfo.sourceBelongName = t
state.projectInfo.sourceBelongFullName = orgName
} }
const disabledDate = (current) => { const disabledDate = (current) => {
return current && current < dayjs().startOf('day'); return current && current < dayjs().startOf('day');
}; };

View File

@@ -231,6 +231,7 @@
<OrgClass <OrgClass
v-model:value="projectInfo.sourceBelongId" v-model:value="projectInfo.sourceBelongId"
v-model:name="projectInfo.sourceBelongName" v-model:name="projectInfo.sourceBelongName"
v-model:fullName="projectInfo.sourceBelongFullName"
></OrgClass> ></OrgClass>
</div> </div>
</div> </div>
@@ -1229,22 +1230,13 @@ export default {
}; };
//确认复制 //确认复制
const copyProject = () => { const copyProject = () => {
let obj = { state.tableLoading = true
api.handleProject({
projectId: state.copyProjectId, projectId: state.copyProjectId,
type: 2, type: 2,
}; }).then(() => getTableDate())
api message.success("复制成功");
.handleProject(obj) state.copyModal = false;
.then((res) => {
console.log("复制成功", res);
message.destroy();
message.success("复制成功");
state.copyModal = false;
getTableDate();
})
.catch((err) => {
console.log("复制失败", err);
});
}; };
//打开提交审核弹窗 //打开提交审核弹窗
const showReviewModal = (projectId) => { const showReviewModal = (projectId) => {
@@ -1803,9 +1795,10 @@ export default {
} }
); );
function managerChange(e, l, d, t) { function managerChange(e, l, d, t,orgName) {
state.projectInfo.sourceBelongId = d state.projectInfo.sourceBelongId = d
state.projectInfo.sourceBelongName = t state.projectInfo.sourceBelongName = t
state.projectInfo.sourceBelongFullName = orgName
} }
return { return {

View File

@@ -83,7 +83,7 @@
</div> </div>
<div class="in select"> <div class="in select">
<OrgClass v-model:value="projectInfo.sourceBelongId" v-model:name="projectInfo.sourceBelongName"></OrgClass> <OrgClass v-model:value="projectInfo.sourceBelongId" v-model:name="projectInfo.sourceBelongName" v-model:fullName="projectInfo.sourceBelongFullName"></OrgClass>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
@@ -313,9 +313,10 @@ export default {
}); });
}; };
function managerChange(e, l, d, t) { function managerChange(e, l, d, t,orgName) {
state.projectInfo.sourceBelongId = d state.projectInfo.sourceBelongId = d
state.projectInfo.sourceBelongName = t state.projectInfo.sourceBelongName = t
state.projectInfo.sourceBelongFullName = orgName
} }
const disabledDate = (current) => { const disabledDate = (current) => {
return current && current < dayjs().startOf('day'); return current && current < dayjs().startOf('day');

View File

@@ -688,7 +688,7 @@
<div style="display: flex; height: 20px"></div> <div style="display: flex; height: 20px"></div>
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="3" tab="学员"> <a-tab-pane key="3" tab="学员">
<div class="split"></div> <div class="split"></div>
<div class="content3"> <div class="content3">
@@ -700,7 +700,24 @@
:columns="stuColumns" :columns="stuColumns"
:stage="stage" :stage="stage"
:visable ="tabFlag" :visable ="tabFlag"
></TableStudent> >
<template #extension="{data:{record}}">
<div style="display:flex">
<div
@click="showStudent(record)"
style="color: #4ea6ff; font-size: 14px; text-align: center;margin-left: 20px;cursor: pointer;"
>
查看
</div>
<div
@click="settingTopFlag(record)"
style="color: #4ea6ff; font-size: 14px; text-align: center;margin-left: 20px;cursor: pointer;"
>
{{record.topFlag?'取消优秀':'优秀学员'}}
</div>
</div>
</template>
</TableStudent>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
</div> </div>
@@ -1275,7 +1292,7 @@
:closable="close" :closable="close"
wrapClassName="canclestu" wrapClassName="canclestu"
centered="true" centered="true"
@cancel="closeModal1" @cancel="cancelyou"
> >
<div class="delete"> <div class="delete">
<div class="del_header"></div> <div class="del_header"></div>
@@ -1288,11 +1305,11 @@
<span>您是否授予此学员优秀学员称号?</span> <span>您是否授予此学员优秀学员称号?</span>
</div> </div>
<div class="del_btnbox"> <div class="del_btnbox">
<div class="del_btn btn1"> <div class="del_btn btn1" @click="cancelyou">
<div class="btnText" @click="cancelyou">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="del_btn btn2"> <div class="del_btn btn2" @click="closeModal1">
<div class="btnText" @click="closeModal1">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
</div> </div>
@@ -1320,11 +1337,11 @@
<span>您是否取消此学员优学员称号?</span> <span>您是否取消此学员优学员称号?</span>
</div> </div>
<div class="del_btnbox"> <div class="del_btnbox">
<div class="del_btn btn1"> <div class="del_btn btn1" @click="cancelcanyou">
<div class="btnText" @click="cancelcanyou">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="del_btn btn2"> <div class="del_btn btn2" @click="closeModal3">
<div class="btnText" @click="closeModal3">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
</div> </div>
@@ -1678,7 +1695,7 @@ import {
getGroupList, getGroupList,
deleteGroup, deleteGroup,
editGroup, editGroup,
topStudent, updateStudent,
} from "../../api/indexProjStu"; } from "../../api/indexProjStu";
import { message, Modal } from "ant-design-vue"; import { message, Modal } from "ant-design-vue";
import * as apitl from "../../api/index"; import * as apitl from "../../api/index";
@@ -1725,6 +1742,7 @@ export default {
const store = useStore(); const store = useStore();
const route = useRoute(); const route = useRoute();
const state = reactive({ const state = reactive({
editRecord:{},
tabFlag:true, tabFlag:true,
stage: [], stage: [],
stuColumns: [ stuColumns: [
@@ -2559,26 +2577,12 @@ export default {
}; };
//点击确定授予优秀学员后 //点击确定授予优秀学员后
const closeModal1 = () => { const closeModal1 = () => {
let obj = { state.editRecord.topFlag = 1
projectId: state.projectId, updateStudent(state.editRecord)
studentIds: state.changeGoods,
topFlag: 1,
};
topStudent(obj)
.then((res) => {
console.log(`优秀学员授予成功${res.data}`);
message.success("优秀学员称号授予成功");
getStu();
})
.catch((err) => {
console.log(`优秀学员授予成功${err}`);
message.warning("优秀学员称号授予失败");
});
state.changeGoods = [];
state.canclestu = false; state.canclestu = false;
message.success("优秀学员称号授予成功");
}; };
//点击取消授予优秀学员后 //点击取消授予优秀学员后
const cancelyou = () => { const cancelyou = () => {
state.changeGoods = []; state.changeGoods = [];
@@ -2589,24 +2593,10 @@ export default {
}; };
//点击确定取消优秀学员称号 //点击确定取消优秀学员称号
const closeModal3 = () => { const closeModal3 = () => {
let obj = { state.editRecord.topFlag = 0
projectId: state.projectId, updateStudent(state.editRecord)
studentIds: state.changeGoods,
topFlag: 0,
};
topStudent(obj)
.then((res) => {
console.log(`取消优秀学员称号成功${res}`);
message.success("优秀学员称号取消成功");
getStu();
})
.catch((err) => {
console.log(`取消优秀学员称号失败${err}`);
message.warning("优秀学员称号取消失败");
});
state.changeGoods = [];
state.canclestu1 = false; state.canclestu1 = false;
message.success("优秀学员称号取消成功");
}; };
//点击取消取消授予优秀学员后 //点击取消取消授予优秀学员后
const cancelcanyou = () => { const cancelcanyou = () => {
@@ -3071,8 +3061,8 @@ export default {
//tabs切换 //tabs切换
const tabsChange = (e) => { const tabsChange = (e) => {
//排行榜 //排行榜
if (e == 6) { if (e == 6) {
//获取进度榜 //获取进度榜
@@ -3390,7 +3380,7 @@ export default {
let end = info.endTime; let end = info.endTime;
state.tstartTime = info.beginTime; state.tstartTime = info.beginTime;
state.tendTime = info.endTime; state.tendTime = info.endTime;
state.tsourceBelong = info.sourceBelongName; state.tsourceBelong = (info.sourceBelongFullName || '')+info.sourceBelongName;
state.parentId = info.parentId; state.parentId = info.parentId;
state.name = info.name; state.name = info.name;
state.startTime = start; state.startTime = start;
@@ -3417,7 +3407,7 @@ export default {
// state.attach = info.attach; // state.attach = info.attach;
// state.templateId = info.templateId; // state.templateId = info.templateId;
state.sourceBelong = info.sourceBelongName; state.sourceBelong = (info.sourceBelongFullName || '')+info.sourceBelongName;
// state.fileList=info.attach.split(",") // state.fileList=info.attach.split(",")
let d = info.attach.indexOf(","); let d = info.attach.indexOf(",");
// console.log(info.attach, "xgo", info.attach.length); // console.log(info.attach, "xgo", info.attach.length);
@@ -4024,9 +4014,19 @@ export default {
}; };
state.codeInfo = obj; state.codeInfo = obj;
}; };
function settingTopFlag(record){
record.topFlag?(state.canclestu1 = true):(state.canclestu=true)
state.editRecord = record
}
function showStudent(record){
state.Seevisible = true
state.checkStuId = record.studentId
}
return { return {
...toRefs(state), ...toRefs(state),
...toRefs(levelList), ...toRefs(levelList),
showStudent,
settingTopFlag,
totask, totask,
tostudent, tostudent,
showModal, showModal,
@@ -4037,7 +4037,7 @@ export default {
closeModal2, closeModal2,
showModal3, showModal3,
closeModal3, closeModal3,
showDeleteOne, showDeleteOne,
closeDeleteOne, closeDeleteOne,
showTime, showTime,

View File

@@ -119,6 +119,7 @@
<OrgClass <OrgClass
v-model:value="projectInfo.sourceBelongId" v-model:value="projectInfo.sourceBelongId"
v-model:name="projectInfo.sourceBelongName" v-model:name="projectInfo.sourceBelongName"
v-model:fullName="projectInfo.sourceBelongFullName"
></OrgClass> ></OrgClass>
</div> </div>
</div> </div>
@@ -296,9 +297,10 @@ const createProject = () => {
}); });
}; };
function managerChange(e, l, d, t) { function managerChange(e, l, d, t,orgName) {
projectInfo.value.valuesourceBelongId = d; projectInfo.value.valuesourceBelongId = d;
projectInfo.value.sourceBelongName = t; projectInfo.value.sourceBelongName = t;
projectInfo.value.sourceBelongFullName = orgName
} }
</script> </script>
<style lang="scss"> <style lang="scss">