This commit is contained in:
dongwug
2022-11-03 17:45:11 +08:00
5 changed files with 875 additions and 1014 deletions

51
src/api/storage.js Normal file
View File

@@ -0,0 +1,51 @@
/**
* 封装操作localstorage本地存储的方法
*/
export const storage = {
//存储
set(key, value) {
localStorage.setItem(key, JSON.stringify(value))
},
//取出数据
get(key) {
const value = localStorage.getItem(key)
if (value && value != "undefined" && value != "null") {
return JSON.parse(value)
}
},
// 删除数据
remove(key) {
localStorage.removeItem(key)
},
// 获取所有数据
getAllStorage() {
return JSON.parse(window.localStorage.getItem() || "{}")
},
// 删除所有数据
removeAllLocalStorage() {
window.localStorage.clear()
return { message: "ok" }
}
};
/**
* 封装操作sessionStorage本地存储的方法
*/
export const sessionStorage = {
//存储
set(key, value) {
window.sessionStorage.setItem(key, JSON.stringify(value))
},
//取出数据
get(key) {
const value = window.sessionStorage.getItem(key)
if (value && value != "undefined" && value != "null") {
return JSON.parse(value)
}
return null
},
// 删除数据
remove(key) {
window.sessionStorage.removeItem(key)
}
}

View File

@@ -628,6 +628,8 @@ export default {
}) })
.then((res) => { .then((res) => {
console.log("调用项目添加接口后", res.data); console.log("调用项目添加接口后", res.data);
//自定义事件给父组件传值
ctx.emit("changeData", false);
//重新获取任务列表 //重新获取任务列表
// apiTask.getTask({ projectId: 28 }); // apiTask.getTask({ projectId: 28 });
// router.push("/taskadd"); // router.push("/taskadd");

View File

@@ -1743,17 +1743,25 @@ export default {
onClick={() => { onClick={() => {
console.log("单层子项目的编辑") console.log("单层子项目的编辑")
console.log(value) console.log(value)
{/* 判断是班级还是单层子项目 */ }
{/* 判断是班级\单层项目\单层子项目 */ }
if (value.record.parentId == "0") { if (value.record.parentId == "0") {
router.push({ router.push({
path: '/sonproject', path: '/projectadd',
query: { projectId: value.record.projectId, name: value.record.name } query: { projectId: value.record.projectId, name: value.record.name }
}); });
} else { } else {
if (value.record.isbj) {
router.push({ router.push({
path: '/classadd', path: '/classadd',
query: { projectId: value.record.projectId, name: value.record.paraentName } query: { projectId: value.record.projectId, name: value.record.paraentName }
}); });
} else {
router.push({
path: '/sonproject',
query: { projectId: value.record.projectId, name: value.record.name }
});
}
} }
}} }}
style="cursor:pointer;" style="cursor:pointer;"
@@ -2008,6 +2016,7 @@ export default {
data.paraentName = value.name; data.paraentName = value.name;
data.subList.map((data2) => { data.subList.map((data2) => {
data2.paraentName = value.name + '/' + data.name; data2.paraentName = value.name + '/' + data.name;
data2.isbj = "class";
}) })
console.log('lalallalaa', data) console.log('lalallalaa', data)
} }

View File

@@ -11,10 +11,7 @@
<div class="main"> <div class="main">
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目归属</div> <div class="inname">项目归属</div>
</div> </div>
<div class="in"> <div class="in">
@@ -25,58 +22,34 @@
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
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 <a-input v-model:value="projectName" placeholder="请输入子项目名称" show-count :maxlength="30" />
v-model:value="projectName"
placeholder="请输入子项目名称"
show-count
:maxlength="30"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
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 <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect" placeholder="四个养成" style="width: 100%" :options="classifyList"
v-model:value="classifySelect" @change="classificationChange" allowClear showSearch>
placeholder="四个养成"
style="width: 100%"
:options="classifyList"
@change="classificationChange"
allowClear
showSearch
>
</a-select> </a-select>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">封面图</div> <div class="inname">封面图</div>
</div> </div>
<div <div class="box" style="
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);
@@ -84,29 +57,15 @@
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"
<a-upload :show-upload-list="false" action="/api/file/upload" :before-upload="beforeUpload" @change="handleChange">
v-model:file-list="fileList" <img style="
name="file"
list-type="picture-card"
class="avatar-uploader"
:show-upload-list="false"
action="/api/file/upload"
:before-upload="beforeUpload"
@change="handleChange"
>
<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> -->
@@ -119,71 +78,43 @@
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
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 <a-range-picker separator="至" :placeholder="[' 开始时间', ' 结束时间']"
separator="至" style="width: 100%; height: 40px; border-radius: 5px" show-time @change="onRangeChange" />
:placeholder="[' 开始时间', ' 结束时间']"
style="width: 100%; height: 40px; border-radius: 5px"
show-time
@change="onRangeChange"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
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 <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " :value="classifySelect1" mode="multiple" placeholder="请选择子项目经理" style="width: 100%" :options="classifyList1"
:value="classifySelect1" @change="classificationChange1" allowClear showSearch>
mode="multiple"
placeholder="请选择子项目经理"
style="width: 100%"
:options="classifyList1"
@change="classificationChange1"
allowClear
showSearch
>
</a-select> </a-select>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
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 <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect2" placeholder="自动带出 可修改" :options="classifyList2"
v-model:value="classifySelect2" @change="classificationChange2" />
placeholder="自动带出 可修改"
:options="classifyList2"
@change="classificationChange2"
/>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -191,13 +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 <a-textarea v-model:value="remark" style="height: 80px" placeholder="请输入说明" show-count :maxlength="200" />
v-model:value="remark"
style="height: 80px"
placeholder="请输入说明"
show-count
:maxlength="200"
/>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -205,113 +130,67 @@
<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"><span style="
><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 <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
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 <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect3" :options="classifyList3" @change="classificationChange3"
v-model:value="classifySelect3" placeholder="集团级/组织级/现地级/部门级" />
:options="classifyList3"
@change="classificationChange3"
placeholder="集团级/组织级/现地级/部门级"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
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 <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect4" :options="classifyList4" @change="classificationChange4"
v-model:value="classifySelect4" placeholder="集团级/组织级/现地级/部门级" />
:options="classifyList4"
@change="classificationChange4"
placeholder="集团级/组织级/现地级/部门级"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
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" <a-radio @click="changeChecked1" v-model:checked="checked1"><span style="
><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">
<div class="namebox" style="margin-top: 8px"> <div class="namebox" style="margin-top: 8px">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">附件</div> <div class="inname">附件</div>
</div> </div>
<div class="filebox"> <div class="filebox">
<div> <div>
<img <img v-if="fileList1.length < 6" class="fileimg" src="../../assets/images/projectadd/enclosure.png" />
v-if="fileList1.length < 6" <a-upload :disabled="fileList1.length > 5" :before-upload="beforeUpload1" v-model:file-list="fileList1"
class="fileimg" @remove="removeFile" name="file" action="/api/file/upload" :headers="headers" @change="handleChange1">
src="../../assets/images/projectadd/enclosure.png"
/>
<a-upload
:disabled="fileList1.length > 5"
:before-upload="beforeUpload1"
v-model:file-list="fileList1"
@remove="removeFile"
name="file"
action="/api/file/upload"
:headers="headers"
@change="handleChange1"
>
<!-- <a-button> --> <!-- <a-button> -->
<!-- <upload-outlined></upload-outlined> --> <!-- <upload-outlined></upload-outlined> -->
<span v-if="fileList1.length > 5" class="filetext" <span v-if="fileList1.length > 5" class="filetext">上传数量已经达到最大值</span>
>上传数量已经达到最大值</span
>
<span v-else class="filetext">上传附件</span> <span v-else class="filetext">上传附件</span>
<!-- </a-button> --> <!-- </a-button> -->
</a-upload> </a-upload>
@@ -326,19 +205,12 @@
<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 <a-select :getPopupContainer="
: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"
v-model:value="classifySelect5" @change="classificationChange5">
placeholder="请选择模版"
:size="size"
style="width: 100%"
:options="classifyList5"
@change="classificationChange5"
>
</a-select> </a-select>
</div> </div>
</div> </div>
@@ -346,9 +218,7 @@
</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 v-on:click="createProject" type="primary" class="btn1">确定</a-button>
>确定</a-button
>
<a-button class="btn2">取消</a-button> <a-button class="btn2">取消</a-button>
</div> </div>
</div> </div>
@@ -359,6 +229,7 @@ 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 * as api from "../../api/index"; import * as api from "../../api/index";
import { storage } from '../../api/storage';
export default { export default {
name: "sonProject", name: "sonProject",
@@ -381,6 +252,10 @@ export default {
state.projectAscription = routers.query.name; state.projectAscription = routers.query.name;
if (routers.query.name) {
storage.set("editproject", routers.query)
}
const classifyList = ref([ const classifyList = ref([
{ value: 1, label: "管理者" }, { value: 1, label: "管理者" },
{ value: 2, label: "领军者" }, { value: 2, label: "领军者" },

View File

@@ -154,11 +154,14 @@
</div> </div>
<div class="text">直播</div> <div class="text">直播</div>
</div> </div>
<!-- 添加考试侧弹窗 --> <!-- 添加直播侧弹窗 -->
<div> <div>
<add-live v-model:addliveVisible="addlivevisible" /> <add-live
v-model:addliveVisible="addlivevisible"
@changeData="updateTableData"
/>
</div> </div>
<!-- 添加考试侧弹窗 --> <!-- 添加直播侧弹窗 -->
<div class="lin"></div> <div class="lin"></div>
</div> </div>
<div class="item" @click="showDrawerAddRef"> <div class="item" @click="showDrawerAddRef">
@@ -488,7 +491,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"
@@ -665,97 +668,7 @@ export default {
], ],
//任务数据 //任务数据
tableData: [ tableData: [],
// {
// key: 1,
// lei: "在线",
// // state: "已发布",
// creater: "管理者课程",
// // pubtime: "2022-07-20 14:00:03",
// cretime: "60分钟",
// haspub: false,
// checked1: false,
// checkedd: false,
// id: "ssss",
// },
// {
// key: 2,
// lei: "面授",
// // state: "草稿",
// creater: "管理者面授",
// // pubtime: "2022-07-20 14:00:03",
// cretime: "20分钟",
// haspub: true,
// checked1: false,
// checkedd: false,
// },
// {
// key: 1,
// lei: "在线",
// // state: "已发布",
// creater: "管理者课程",
// // pubtime: "2022-07-20 14:00:03",
// cretime: "60分钟",
// haspub: false,
// checked1: false,
// checkedd: false,
// },
// {
// key: 3,
// lei: "作业",
// // state: "已停用",
// creater: "管理者作业",
// // pubtime: "2022-07-20 14:00:03",
// cretime: "60分钟",
// haspub: false,
// checked1: false,
// checkedd: false,
// },
// {
// key: 4,
// lei: "考试",
// // state: "草稿",
// creater: "管理者考试",
// // pubtime: "2022-07-20 14:00:03",
// cretime: "20分钟",
// haspub: true,
// checked1: false,
// checkedd: false,
// },
// {
// key: 5,
// lei: "案例",
// // state: "草稿",
// creater: "腾飞班1案例",
// // pubtime: "2022-07-20 14:00:03",
// cretime: "20分钟",
// haspub: true,
// checked1: true,
// checkedd: false,
// },
// {
// key: 4,
// lei: "考试",
// // state: "草稿",
// creater: "管理者考试",
// // pubtime: "2022-07-20 14:00:03",
// cretime: "20分钟",
// haspub: true,
// checked1: false,
// checkedd: false,
// },
// {
// key: 5,
// lei: "案例",
// // state: "草稿",
// creater: "腾飞班1案例",
// // pubtime: "2022-07-20 14:00:03",
// cretime: "20分钟",
// haspub: true,
// checked1: true,
// checkedd: false,
// },
],
drawertableData: [ drawertableData: [
{ {
key: 1, key: 1,
@@ -1058,7 +971,7 @@ export default {
.then((res) => { .then((res) => {
if (res.status == 200) { if (res.status == 200) {
console.log("22222", res.data.data.stageList[0].taskList); console.log("22222", res.data.data.stageList[0].taskList);
let arr = res.data.data.stageList[0].taskList; let arr = res.data.data.stageList[1].taskList;
getTableData(arr); getTableData(arr);
} }
}) })
@@ -1066,6 +979,13 @@ export default {
console.log("获取任务列表失败", err); console.log("获取任务列表失败", err);
}); });
}; };
//数据变化
const updateTableData = (data) => {
console.log("添加数据", data);
getTask();
};
//删除直播 //删除直播
const deleteLiveBroadcast = () => { const deleteLiveBroadcast = () => {
let obj = { let obj = {
@@ -1443,11 +1363,14 @@ export default {
state.stage = true; state.stage = true;
//关闭确认框 //关闭确认框
closeConfirm(); closeConfirm();
}; };
const showModal1 = () => { const showModal1 = () => {
//关闭确认框 //关闭确认框
state.deleteModal = false; state.deleteModal = false;
deleteTask(); deleteTask();
message.success("删除成功");
getTask()
}; };
const closeModal = () => { const closeModal = () => {
state.stage = false; state.stage = false;
@@ -1575,6 +1498,7 @@ export default {
editVotePath, editVotePath,
getTableData, getTableData,
deleteTask, deleteTask,
updateTableData,
}; };
}, },
}; };