增加项目的查看及学习路径项目的复制

This commit is contained in:
lixg
2022-11-16 11:45:17 +08:00
parent 79ad5d7ae5
commit f1692b0669
6 changed files with 1273 additions and 1006 deletions

View File

@@ -1,4 +1,12 @@
import { createRouter, createWebHashHistory } from 'vue-router'; /*
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-09 09:26:26
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-11-16 09:56:16
* @FilePath: /fe-manage/src/router/index.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { createRouter,createWebHistory } from 'vue-router';
import routesConfig from './config'; import routesConfig from './config';
console.log('routesConfig', routesConfig) console.log('routesConfig', routesConfig)
@@ -12,7 +20,7 @@ const routes = [
] ]
const router = createRouter({ const router = createRouter({
history: createWebHashHistory(), history: createWebHistory(),
routes routes
}) })

View File

@@ -430,10 +430,10 @@
<span>您确定要复制此路径吗</span> <span>您确定要复制此路径吗</span>
</div> </div>
<div class="del_btnbox"> <div class="del_btnbox">
<div class="del_btn btn1" @click="delete_exit"> <div class="del_btn btn1" @click="closeCopyModal">
<div class="btnText">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="del_btn btn2" @click="delete_exit"> <div class="del_btn btn2" @click="copyLearnPath">
<div class="btnText">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
@@ -474,7 +474,7 @@
</div> </div>
</div> </div>
</a-modal> </a-modal>
<!-- 结束路径弹窗 --> <!-- 删除路径弹窗 -->
<a-modal <a-modal
v-model:visible="deleteModal" v-model:visible="deleteModal"
:footer="null" :footer="null"
@@ -724,6 +724,7 @@ export default {
routeStudentsNum: 0, routeStudentsNum: 0,
recallPathId: null, //撤回路径id recallPathId: null, //撤回路径id
stopPathId: null, //停用路径id stopPathId: null, //停用路径id
copyPathId: null, //复制路径iid
lpLoading: false, lpLoading: false,
}); });
@@ -816,12 +817,34 @@ export default {
const closePub = () => { const closePub = () => {
state.pub = false; state.pub = false;
}; };
//显示复制窗口
const showCopyModal = () => { const showCopyModal = () => {
state.copyModal = true; state.copyModal = true;
}; };
//关闭复制窗口
const closeCopyModal = () => { const closeCopyModal = () => {
state.copyModal = false; state.copyModal = false;
}; };
//确认复制
const copyLearnPath = () => {
let obj = {
routerId: state.copyPathId,
type: 2,
};
api
.handleLearnPath(obj)
.then((res) => {
console.log("复制成功", res);
message.destroy();
message.success("复制成功");
state.copyModal = false;
getLearnPath();
})
.catch((err) => {
console.log("复制失败", err);
});
};
//显示结束窗口 //显示结束窗口
const showStopModal = () => { const showStopModal = () => {
state.stopModal = true; state.stopModal = true;
@@ -1137,6 +1160,7 @@ export default {
> >
<div <div
onClick={() => { onClick={() => {
state.copyPathId = text.record.id;
showCopyModal(); showCopyModal();
}} }}
> >
@@ -1177,6 +1201,7 @@ export default {
> >
<div <div
onClick={() => { onClick={() => {
state.copyPathId = text.record.id;
showCopyModal(); showCopyModal();
}} }}
> >
@@ -1230,6 +1255,7 @@ export default {
> >
<div <div
onClick={() => { onClick={() => {
state.copyPathId = text.record.id;
showCopyModal(); showCopyModal();
}} }}
> >
@@ -1491,6 +1517,7 @@ export default {
closeCopyModal, closeCopyModal,
showStopModal, showStopModal,
closeStopModal, closeStopModal,
copyLearnPath,
stopLearnPath, stopLearnPath,
showDeleteModal, showDeleteModal,
closeDeleteModal, closeDeleteModal,
@@ -1658,7 +1685,6 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
margin-right: 6px; margin-right: 6px;
} }
} }
} }
.info { .info {

View File

@@ -3,7 +3,12 @@
<div class="projectAdd"> <div class="projectAdd">
<div class="header"> <div class="header">
<span class="title">创建/编辑班级</span> <span class="title">创建/编辑班级</span>
<div @click="backPage" style="cursor: pointer;" to="/projectmanage" class="goback"> <div
@click="backPage"
style="cursor: pointer"
to="/projectmanage"
class="goback"
>
<span class="return"></span><span class="returntext">返回</span> <span class="return"></span><span class="returntext">返回</span>
</div> </div>
</div> </div>
@@ -11,7 +16,10 @@
<div class="main"> <div class="main">
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目归属</div> <div class="inname">项目归属</div>
</div> </div>
<div class="in"> <div class="in">
@@ -22,34 +30,60 @@
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">班级名称</div> <div class="inname">班级名称</div>
</div> </div>
<div class="in"> <div class="in">
<a-input v-model:value="projectName" placeholder="请输入项目名称" show-count :maxlength="30" /> <a-input
v-model:value="projectName"
placeholder="请输入项目名称"
show-count
:maxlength="30"
:disabled="viewDetail ? true : false"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">分类</div> <div class="inname">分类</div>
</div> </div>
<div class="in select"> <div class="in select">
<a-select :getPopupContainer=" <a-select
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect" placeholder="四个养成" style="width: 100%" :options="classifyList" "
@change="classificationChange" allowClear showSearch> v-model:value="classifySelect"
placeholder="四个养成"
style="width: 100%"
:options="classifyList"
@change="classificationChange"
allowClear
showSearch
:disabled="viewDetail ? true : false"
>
</a-select> </a-select>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">封面图</div> <div class="inname">封面图</div>
</div> </div>
<div class="box" style=" <div
class="box"
style="
width: 100px; width: 100px;
height: 100px; height: 100px;
border: 1px solid rgba(78, 166, 255, 1); border: 1px solid rgba(78, 166, 255, 1);
@@ -57,15 +91,30 @@
cursor: pointer; cursor: pointer;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
"> "
<a-upload v-model:file-list="fileList" name="file" list-type="picture-card" class="avatar-uploader" >
:show-upload-list="false" action="/api/file/upload" :before-upload="beforeUpload" @change="handleChange"> <a-upload
<img style=" v-model:file-list="fileList"
name="file"
list-type="picture-card"
class="avatar-uploader"
:show-upload-list="false"
action="/api/file/upload"
:before-upload="beforeUpload"
@change="handleChange"
:disabled="viewDetail ? true : false"
>
<img
style="
width: 100px; width: 100px;
height: 100px; height: 100px;
margin-bottom: 4px; margin-bottom: 4px;
margin-right: 4px; margin-right: 4px;
" v-if="imageUrl" :src="imageUrl" alt="avatar" /> "
v-if="imageUrl"
:src="imageUrl"
alt="avatar"
/>
<div v-else> <div v-else>
<!-- <loading-outlined v-if="loading"></loading-outlined> --> <!-- <loading-outlined v-if="loading"></loading-outlined> -->
<!-- <plus-outlined v-else></plus-outlined> --> <!-- <plus-outlined v-else></plus-outlined> -->
@@ -78,43 +127,74 @@
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
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 separator="至" :placeholder="[' 开始时间', ' 结束时间']" v-model:value="rangevalue" <a-range-picker
style="width: 100%; height: 40px; border-radius: 5px" @change="onRangeChange" /> separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
v-model:value="rangevalue"
style="width: 100%; height: 40px; border-radius: 5px"
@change="onRangeChange"
:disabled="viewDetail ? true : false"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">子项目经理</div> <div class="inname">子项目经理</div>
</div> </div>
<div class="in"> <div class="in">
<a-select :getPopupContainer=" <a-select
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" :value="classifySelect1" mode="multiple" placeholder="请选择项目经理" style="width: 100%" :options="classifyList1" "
@change="classificationChange1" allowClear showSearch> :value="classifySelect1"
mode="multiple"
placeholder="请选择项目经理"
style="width: 100%"
:options="classifyList1"
@change="classificationChange1"
allowClear
showSearch
:disabled="viewDetail ? true : false"
>
</a-select> </a-select>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">资源归属</div> <div class="inname">资源归属</div>
</div> </div>
<div class="in select"> <div class="in select">
<a-select :getPopupContainer=" <a-select
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect2" placeholder="自动带出 可修改" :options="classifyList2" "
@change="classificationChange2" /> v-model:value="classifySelect2"
placeholder="自动带出 可修改"
:options="classifyList2"
@change="classificationChange2"
:disabled="viewDetail ? true : false"
/>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -122,7 +202,14 @@
<div class="inname" style="margin-top: 13px">项目说明</div> <div class="inname" style="margin-top: 13px">项目说明</div>
</div> </div>
<div class="in"> <div class="in">
<a-textarea v-model:value="remark" style="height: 80px" placeholder="请输入说明" show-count :maxlength="200" /> <a-textarea
v-model:value="remark"
style="height: 80px"
placeholder="请输入说明"
show-count
:maxlength="200"
:disabled="viewDetail ? true : false"
/>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -130,52 +217,89 @@
<div class="inname">同步学习记录</div> <div class="inname">同步学习记录</div>
</div> </div>
<div class="in"> <div class="in">
<a-radio @click="changeChecked" v-model:checked="checked"><span style=" <a-radio
@click="changeChecked"
v-model:checked="checked"
:disabled="viewDetail ? true : false"
><span
style="
width: 100%; width: 100%;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
">同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span></a-radio> "
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-radio
>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目级别</div> <div class="inname">项目级别</div>
</div> </div>
<div class="in select"> <div class="in select">
<a-select :getPopupContainer=" <a-select
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect3" :options="classifyList3" @change="classificationChange3" "
placeholder="集团级/组织级/现地级/部门级" /> v-model:value="classifySelect3"
:options="classifyList3"
@change="classificationChange3"
placeholder="集团级/组织级/现地级/部门级"
:disabled="viewDetail ? true : false"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">培训体系</div> <div class="inname">培训体系</div>
</div> </div>
<div class="in select"> <div class="in select">
<a-select :getPopupContainer=" <a-select
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect4" :options="classifyList4" @change="classificationChange4" "
placeholder="集团级/组织级/现地级/部门级" /> v-model:value="classifySelect4"
:options="classifyList4"
@change="classificationChange4"
placeholder="集团级/组织级/现地级/部门级"
:disabled="viewDetail ? true : false"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" /> <img
class="nameimg"
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 @click="changeChecked1" v-model:checked="checked1"><span style=" <a-radio
@click="changeChecked1"
v-model:checked="checked1"
:disabled="viewDetail ? true : false"
><span
style="
width: 100%; width: 100%;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
">BOEU实施</span></a-radio> "
>BOEU实施</span
></a-radio
>
</div> </div>
</div> </div>
<!-- <div class="name name2"> <!-- <div class="name name2">
@@ -202,19 +326,36 @@
<div class="name"> <div class="name">
<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 v-if="isEdit" disabled="true" :getPopupContainer=" <a-select
v-if="isEdit"
disabled="true"
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect5" placeholder="请选择模版" :size="size" style="width: 100%" :options="classifyList5" "
@change="classificationChange5"> v-model:value="classifySelect5"
placeholder="请选择模版"
:size="size"
style="width: 100%"
:options="classifyList5"
@change="classificationChange5"
>
</a-select> </a-select>
<a-select v-else :getPopupContainer=" <a-select
v-else
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect5" placeholder="请选择模版" :size="size" style="width: 100%" :options="classifyList5" "
@change="classificationChange5"> v-model:value="classifySelect5"
placeholder="请选择模版"
:size="size"
style="width: 100%"
:options="classifyList5"
@change="classificationChange5"
>
</a-select> </a-select>
</div> </div>
</div> </div>
@@ -222,7 +363,9 @@
</div> </div>
<div class="footer"> <div class="footer">
<div class="btn"> <div class="btn">
<a-button v-on:click="createProject" type="primary" class="btn1">确定</a-button> <a-button v-on:click="createProject" type="primary" class="btn1"
>确定</a-button
>
<a-button @click="backPage" class="btn2">取消</a-button> <a-button @click="backPage" class="btn2">取消</a-button>
</div> </div>
</div> </div>
@@ -232,9 +375,9 @@
import { reactive, toRefs, ref } from "vue"; import { reactive, toRefs, ref } from "vue";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import dayjs from 'dayjs'; import dayjs from "dayjs";
import * as api from "../../api/index"; import * as api from "../../api/index";
import { toDate } from '../../api/method' import { toDate } from "../../api/method";
export default { export default {
name: "projectAdd", name: "projectAdd",
@@ -260,11 +403,12 @@ export default {
classifySelect4: [], classifySelect4: [],
rangevalue: [], rangevalue: [],
projectAscription: "", projectAscription: "",
viewDetail: routers.query.viewDetail ? routers.query.viewDetail : null,
}); });
if (routers.query.name == undefined) { if (routers.query.name == undefined) {
router.push({ router.push({
path: "/projectmanage" path: "/projectmanage",
}); });
} }
@@ -274,35 +418,38 @@ export default {
if (routers.query.edit !== undefined) { if (routers.query.edit !== undefined) {
isEdit.value = true; isEdit.value = true;
// 需要编辑 // 需要编辑
api.getProjectDetail({ projectId: routers.query.projectId }).then(res => { api
.getProjectDetail({ projectId: routers.query.projectId })
.then((res) => {
if (res.status == 200 && res.data.code == 200) { if (res.status == 200 && res.data.code == 200) {
let info = res.data.data.projectInfo; let info = res.data.data.projectInfo;
console.log(info) console.log(info);
// projectName classifySelect imageUrl * classifySelect1 * remark checked classifySelect3 classifySelect4 changeChecked1 * // projectName classifySelect imageUrl * classifySelect1 * remark checked classifySelect3 classifySelect4 changeChecked1 *
projectName.value = info.name; projectName.value = info.name;
state.classifySelect = classifyList.value[1]; // info.category state.classifySelect = classifyList.value[1]; // info.category
imageUrl.value = info.picUrl; imageUrl.value = info.picUrl;
let start = toDate(info.beginTime/1000,'YYYY/MM/DD'); let start = toDate(info.beginTime / 1000, "YYYY/MM/DD");
let end = toDate(info.endTime/1000,'YYYY/MM/DD'); let end = toDate(info.endTime / 1000, "YYYY/MM/DD");
state.rangevalue = [ state.rangevalue = [
dayjs(start, 'YYYY/MM/DD'), dayjs(start, "YYYY/MM/DD"),
dayjs(end, 'YYYY/MM/DD'), dayjs(end, "YYYY/MM/DD"),
]; ];
let manageName = info.manager.split(","); let manageName = info.manager.split(",");
let manageValue = info.managerId.split(","); let manageValue = info.managerId.split(",");
let optionsManage = [] let optionsManage = [];
for (let i = 0; i < manageName.length; i++) { for (let i = 0; i < manageName.length; i++) {
let obj = { let obj = {
label: manageName[i], label: manageName[i],
value: manageValue[i] value: manageValue[i],
};
optionsManage.push(obj);
} }
optionsManage.push(obj) console.log(optionsManage);
}
console.log(optionsManage)
state.classifySelect1 = optionsManage; state.classifySelect1 = optionsManage;
state.classifySelect2 = classifyList2.value[info.sourceBelongId - 1]; state.classifySelect2 =
classifyList2.value[info.sourceBelongId - 1];
remark.value = info.remark; remark.value = info.remark;
state.checked = info.boeFlag ? info.boeFlag : false; state.checked = info.boeFlag ? info.boeFlag : false;
state.classifySelect3 = classifyList3.value[info.level]; state.classifySelect3 = classifyList3.value[info.level];
@@ -323,7 +470,10 @@ export default {
boeFlag = info.boeFlag; boeFlag = info.boeFlag;
paraentID = Number(info.parentId); paraentID = Number(info.parentId);
} }
}).catch(err => { console.log(err) }) })
.catch((err) => {
console.log(err);
});
} else { } else {
paraentID = Number(routers.query.projectId); paraentID = Number(routers.query.projectId);
} }
@@ -331,12 +481,10 @@ export default {
const backPage = () => { const backPage = () => {
setTimeout(() => { setTimeout(() => {
router.push({ router.push({
path: "/projectmanage" path: "/projectmanage",
}); });
}, 400); }, 400);
} };
const projectName = ref(""); const projectName = ref("");
@@ -451,7 +599,7 @@ export default {
let beginTime = ""; let beginTime = "";
let endTime = ""; let endTime = "";
const dateFormatList = ['YYYY/MM/DD']; const dateFormatList = ["YYYY/MM/DD"];
const onRangeChange = (value, dateString) => { const onRangeChange = (value, dateString) => {
console.log("Selected Time: ", value); console.log("Selected Time: ", value);
@@ -492,7 +640,7 @@ export default {
let newoptions = []; let newoptions = [];
for (let i = 0; i < state.classifySelect1.length; i++) { for (let i = 0; i < state.classifySelect1.length; i++) {
if (state.classifySelect1[i].value) { if (state.classifySelect1[i].value) {
newoptions.push(state.classifySelect1[i]) newoptions.push(state.classifySelect1[i]);
} }
} }
state.classifySelect1 = newoptions; state.classifySelect1 = newoptions;
@@ -507,7 +655,7 @@ export default {
{ value: 3, label: "项目三" }, { value: 3, label: "项目三" },
]); ]);
let sourceBelongIdC = ''; let sourceBelongIdC = "";
const classificationChange2 = (key) => { const classificationChange2 = (key) => {
console.log(`selected ${key}`, classifyList2); console.log(`selected ${key}`, classifyList2);
sourceBelongIdC = key; sourceBelongIdC = key;
@@ -601,13 +749,13 @@ export default {
sourceBelongId: "请选择资源归属", sourceBelongId: "请选择资源归属",
level: "请填写项目级别", level: "请填写项目级别",
systemId: "请填写项目培训体系", systemId: "请填写项目培训体系",
boeFlag: "请选择是否BOE实施" boeFlag: "请选择是否BOE实施",
}; };
const createProject = () => { const createProject = () => {
console.log('我是否要编辑项目', isEdit.value) console.log("我是否要编辑项目", isEdit.value);
if (isEdit.value) { if (isEdit.value) {
console.log('我要编辑项目', peojectID) console.log("我要编辑项目", peojectID);
let obj = { let obj = {
projectId: Number(peojectID), projectId: Number(peojectID),
name: projectName["value"], name: projectName["value"],
@@ -652,7 +800,7 @@ export default {
message.success("编辑成功"); message.success("编辑成功");
setTimeout(() => { setTimeout(() => {
router.push({ router.push({
path: "/projectmanage" path: "/projectmanage",
}); });
}, 1000); }, 1000);
} else { } else {
@@ -665,7 +813,6 @@ export default {
message.destroy(); message.destroy();
message.error("编辑失败,请检查当前网络状态。"); message.error("编辑失败,请检查当前网络状态。");
}); });
} else { } else {
let obj = { let obj = {
name: projectName["value"], name: projectName["value"],

View File

@@ -28,6 +28,7 @@
placeholder="请输入项目名称" placeholder="请输入项目名称"
show-count show-count
:maxlength="30" :maxlength="30"
:disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
@@ -53,6 +54,7 @@
@change="classificationChange" @change="classificationChange"
allowClear allowClear
showSearch showSearch
:disabled="viewDetail ? true : false"
> >
</a-select> </a-select>
</div> </div>
@@ -86,6 +88,7 @@
action="/api/file/upload" action="/api/file/upload"
:before-upload="beforeUpload" :before-upload="beforeUpload"
@change="handleChange" @change="handleChange"
:disabled="viewDetail ? true : false"
> >
<img <img
style=" style="
@@ -124,6 +127,7 @@
v-model:value="rangevalue" v-model:value="rangevalue"
style="width: 100%; height: 40px; border-radius: 5px" style="width: 100%; height: 40px; border-radius: 5px"
@change="onRangeChange" @change="onRangeChange"
:disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
@@ -150,6 +154,7 @@
@change="classificationChange1" @change="classificationChange1"
allowClear allowClear
showSearch showSearch
:disabled="viewDetail ? true : false"
> >
</a-select> </a-select>
</div> </div>
@@ -174,6 +179,7 @@
placeholder="自动带出 可修改" placeholder="自动带出 可修改"
:options="classifyList2" :options="classifyList2"
@change="classificationChange2" @change="classificationChange2"
:disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
@@ -188,6 +194,7 @@
placeholder="请输入说明" placeholder="请输入说明"
show-count show-count
:maxlength="200" :maxlength="200"
:disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
@@ -196,7 +203,10 @@
<div class="inname">同步学习记录</div> <div class="inname">同步学习记录</div>
</div> </div>
<div class="in"> <div class="in">
<a-radio @click="changeChecked" v-model:checked="checked" <a-radio
@click="changeChecked"
v-model:checked="checked"
:disabled="viewDetail ? true : false"
><span ><span
style=" style="
width: 100%; width: 100%;
@@ -227,6 +237,7 @@
:options="classifyList3" :options="classifyList3"
@change="classificationChange3" @change="classificationChange3"
placeholder="集团级/组织级/现地级/部门级" placeholder="集团级/组织级/现地级/部门级"
:disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
@@ -249,6 +260,7 @@
:options="classifyList4" :options="classifyList4"
@change="classificationChange4" @change="classificationChange4"
placeholder="集团级/组织级/现地级/部门级" placeholder="集团级/组织级/现地级/部门级"
:disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
@@ -261,7 +273,10 @@
<div class="inname">是否BOEU实施</div> <div class="inname">是否BOEU实施</div>
</div> </div>
<div class="in"> <div class="in">
<a-radio @click="changeChecked1" v-model:checked="checked1" <a-radio
@click="changeChecked1"
v-model:checked="checked1"
:disabled="viewDetail ? true : false"
><span ><span
style=" style="
width: 100%; width: 100%;
@@ -509,6 +524,7 @@ export default {
tableDataTotal: -1, //模版列表总数 tableDataTotal: -1, //模版列表总数
pageSize: 10, //每页10条数据 pageSize: 10, //每页10条数据
totalPages: 0, //总页数 totalPages: 0, //总页数
viewDetail: routers.query.viewDetail ? routers.query.viewDetail : null,
}); });
const projectName = ref(""); const projectName = ref("");

View File

@@ -816,10 +816,10 @@
<span>您确定要复制此路径吗</span> <span>您确定要复制此路径吗</span>
</div> </div>
<div class="del_btnbox"> <div class="del_btnbox">
<div class="del_btn btn1" @click="delete_exit"> <div class="del_btn btn1" @click="closeCopyModal">
<div class="btnText">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="del_btn btn2" @click="delete_exit"> <div class="del_btn btn2" @click="copyProject">
<div class="btnText">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
@@ -1093,6 +1093,7 @@ export default {
finishProjectId: null, //结束的项目id finishProjectId: null, //结束的项目id
deleteProjectId: null, //删除的项目id deleteProjectId: null, //删除的项目id
templateProjectId: null, //存为模版的项目id templateProjectId: null, //存为模版的项目id
copyProjectId: null, //复制项目id
}); });
// 数据接入 - start - // 数据接入 - start -
const router = useRouter(); const router = useRouter();
@@ -1922,6 +1923,34 @@ export default {
const closeStartModal = () => { const closeStartModal = () => {
state.startModal = false; state.startModal = false;
}; };
//打开确认复制弹窗
const showCopyModal = (projectId) => {
state.copyModal = true;
state.copyProjectId = projectId;
};
//关闭确认复制弹窗
const closeCopyModal = () => {
state.copyModal = false;
};
//确认复制
const copyProject = () => {
let obj = {
projectId: state.copyProjectId,
type: 2,
};
api
.handleProject(obj)
.then((res) => {
console.log("复制成功", res);
message.destroy();
message.success("复制成功");
state.copyModal = false;
getTableDate();
})
.catch((err) => {
console.log("复制失败", err);
});
};
// 数据接入 - end - // 数据接入 - end -
@@ -2119,7 +2148,7 @@ export default {
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
@@ -2190,7 +2219,7 @@ export default {
<span <span
class="operation3" class="operation3"
// onClick={() => { // onClick={() => {
// showCopyModal(); // showCopyModal(value.record.projectId);
// }} // }}
></span> ></span>
@@ -2217,7 +2246,7 @@ export default {
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
@@ -2279,7 +2308,7 @@ export default {
<span <span
class="operation3" class="operation3"
// onClick={() => { // onClick={() => {
// showCopyModal(); // showCopyModal(value.record.projectId);
// }} // }}
></span> ></span>
<div class="tableSelect"> <div class="tableSelect">
@@ -2305,7 +2334,7 @@ export default {
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
@@ -2420,7 +2449,7 @@ export default {
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
@@ -2502,7 +2531,7 @@ export default {
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
@@ -2572,7 +2601,7 @@ export default {
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
@@ -2640,7 +2669,52 @@ export default {
编辑 编辑
</span> </span>
) : ( ) : (
<span class="operation1"></span> <span
onClick={() => {
console.log("单层子项目的编辑");
console.log(value);
{
/* 判断是班级\单层项目\单层子项目 */
}
if (value.record.parentId == "0") {
router.push({
path: "/projectadd",
query: {
projectId: value.record.projectId,
name: value.record.name,
viewDetail:1,
},
});
} else {
if (value.record.isbj) {
router.push({
path: "/classadd",
query: {
projectId: value.record.projectId,
name: value.record.paraentName,
edit: 0,
viewDetail:1,
},
});
} else {
router.push({
path: "/sonproject",
query: {
projectId: value.record.projectId,
name: value.record.paraentName,
edit: 0,
viewDetail:1,
},
});
}
}
}}
style="cursor:pointer;"
class="operation1"
>
查看
</span>
)} )}
<div class="tableSelect"> <div class="tableSelect">
<a-select <a-select
@@ -2727,7 +2801,7 @@ export default {
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
@@ -2774,16 +2848,16 @@ export default {
// options={state.projectNameList} // options={state.projectNameList}
dropdownClassName="tabledropdown" dropdownClassName="tabledropdown"
> >
<a-select-option value="存为模版" label="存为模版">
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
</div> </div>
</a-select-option> </a-select-option>
<a-select-option value="存为模版" label="存为模版">
<div <div
onClick={() => { onClick={() => {
showStartModal(value.record.projectId); showStartModal(value.record.projectId);
@@ -2842,7 +2916,7 @@ export default {
<a-select-option value="复制" label="复制"> <a-select-option value="复制" label="复制">
<div <div
onClick={() => { onClick={() => {
showCopyModal(); showCopyModal(value.record.projectId);
}} }}
> >
复制 复制
@@ -2978,12 +3052,6 @@ export default {
state.doublesonpro = true; state.doublesonpro = true;
state.sonproject = false; state.sonproject = false;
}; };
const showCopyModal = () => {
state.copyModal = true;
};
const closeCopyModal = () => {
state.copyModal = false;
};
const showProjOwner = () => { const showProjOwner = () => {
state.ProjOwnervisible = true; state.ProjOwnervisible = true;
@@ -3098,6 +3166,7 @@ export default {
finishProject, finishProject,
deleteProject, deleteProject,
templateProject, templateProject,
copyProject,
}; };
}, },
}; };

View File

@@ -26,7 +26,7 @@
<div class="inname">子项目名称</div> <div class="inname">子项目名称</div>
</div> </div>
<div class="in"> <div class="in">
<a-input v-model:value="projectName" placeholder="请输入项目名称" show-count :maxlength="30" /> <a-input v-model:value="projectName" placeholder="请输入项目名称" show-count :maxlength="30" :disabled="viewDetail ? true : false" />
</div> </div>
</div> </div>
<div class="name"> <div class="name">
@@ -40,7 +40,7 @@
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect" placeholder="四个养成" style="width: 100%" :options="classifyList" " v-model:value="classifySelect" placeholder="四个养成" style="width: 100%" :options="classifyList"
@change="classificationChange" allowClear showSearch> @change="classificationChange" allowClear showSearch :disabled="viewDetail ? true : false">
</a-select> </a-select>
</div> </div>
</div> </div>
@@ -59,7 +59,7 @@
overflow: hidden; overflow: hidden;
"> ">
<a-upload v-model:file-list="fileList" name="file" list-type="picture-card" class="avatar-uploader" <a-upload v-model:file-list="fileList" name="file" list-type="picture-card" class="avatar-uploader"
:show-upload-list="false" action="/api/file/upload" :before-upload="beforeUpload" @change="handleChange"> :show-upload-list="false" action="/api/file/upload" :before-upload="beforeUpload" @change="handleChange" :disabled="viewDetail ? true : false">
<img style=" <img style="
width: 100px; width: 100px;
height: 100px; height: 100px;
@@ -84,7 +84,7 @@
<div class="in"> <div class="in">
<a-range-picker separator="至" :placeholder="[' 开始时间', ' 结束时间']" v-model:value="rangevalue" <a-range-picker separator="至" :placeholder="[' 开始时间', ' 结束时间']" v-model:value="rangevalue"
style="width: 100%; height: 40px; border-radius: 5px" @change="onRangeChange" /> style="width: 100%; height: 40px; border-radius: 5px" @change="onRangeChange" :disabled="viewDetail ? true : false" />
</div> </div>
</div> </div>
<div class="name"> <div class="name">
@@ -98,7 +98,7 @@
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" :value="classifySelect1" mode="multiple" placeholder="请选择项目经理" style="width: 100%" :options="classifyList1" " :value="classifySelect1" mode="multiple" placeholder="请选择项目经理" style="width: 100%" :options="classifyList1"
@change="classificationChange1" allowClear showSearch> @change="classificationChange1" allowClear showSearch :disabled="viewDetail ? true : false">
</a-select> </a-select>
</div> </div>
</div> </div>
@@ -114,7 +114,7 @@
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect2" placeholder="自动带出 可修改" :options="classifyList2" " v-model:value="classifySelect2" placeholder="自动带出 可修改" :options="classifyList2"
@change="classificationChange2" /> @change="classificationChange2" :disabled="viewDetail ? true : false" />
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -122,7 +122,7 @@
<div class="inname" style="margin-top: 13px">项目说明</div> <div class="inname" style="margin-top: 13px">项目说明</div>
</div> </div>
<div class="in"> <div class="in">
<a-textarea v-model:value="remark" style="height: 80px" placeholder="请输入说明" show-count :maxlength="200" /> <a-textarea v-model:value="remark" style="height: 80px" placeholder="请输入说明" show-count :maxlength="200" :disabled="viewDetail ? true : false"/>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -130,7 +130,7 @@
<div class="inname">同步学习记录</div> <div class="inname">同步学习记录</div>
</div> </div>
<div class="in"> <div class="in">
<a-radio @click="changeChecked" v-model:checked="checked"><span style=" <a-radio @click="changeChecked" v-model:checked="checked" :disabled="viewDetail ? true : false"><span style="
width: 100%; width: 100%;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
@@ -148,7 +148,7 @@
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect3" :options="classifyList3" @change="classificationChange3" " v-model:value="classifySelect3" :options="classifyList3" @change="classificationChange3"
placeholder="集团级/组织级/现地级/部门级" /> placeholder="集团级/组织级/现地级/部门级" :disabled="viewDetail ? true : false" />
</div> </div>
</div> </div>
<div class="name"> <div class="name">
@@ -162,7 +162,7 @@
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" v-model:value="classifySelect4" :options="classifyList4" @change="classificationChange4" " v-model:value="classifySelect4" :options="classifyList4" @change="classificationChange4"
placeholder="集团级/组织级/现地级/部门级" /> placeholder="集团级/组织级/现地级/部门级" :disabled="viewDetail ? true : false" />
</div> </div>
</div> </div>
<div class="name"> <div class="name">
@@ -171,7 +171,7 @@
<div class="inname">是否BOEU实施</div> <div class="inname">是否BOEU实施</div>
</div> </div>
<div class="in"> <div class="in">
<a-radio @click="changeChecked1" v-model:checked="checked1"><span style=" <a-radio @click="changeChecked1" v-model:checked="checked1" :disabled="viewDetail ? true : false"><span style="
width: 100%; width: 100%;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
@@ -260,6 +260,7 @@ export default {
classifySelect4: [], classifySelect4: [],
rangevalue: [], rangevalue: [],
projectAscription: "", projectAscription: "",
viewDetail:routers.query.viewDetail?routers.query.viewDetail:null
}); });
if (routers.query.name == undefined) { if (routers.query.name == undefined) {