Merge branch 'develop' of ssh://gitlab.dongwu-inc.com:10022/BOE/fe-manage into develop

This commit is contained in:
zhangyc
2022-12-04 17:30:26 +08:00
34 changed files with 2874 additions and 2185 deletions

View File

@@ -29,7 +29,7 @@ import BreadCrumb from "@/components/BreadCrumb";
import zhCN from "ant-design-vue/es/locale/zh_CN"; import zhCN from "ant-design-vue/es/locale/zh_CN";
import * as api from "./api/index1"; import * as api from "./api/index1";
import * as api1 from "@/api/index1"; import * as api1 from "@/api/index1";
import * as api2 from "@/api/index";
export default defineComponent({ export default defineComponent({
components: { components: {
NavLeft, NavLeft,
@@ -43,22 +43,20 @@ export default defineComponent({
const store = useStore(); const store = useStore();
const isLogin = ref(false); const isLogin = ref(false);
// console.log("router", router.getRoutes(), route); // console.log("router", router.getRoutes(), route);
console.log("版本0.11------------"); console.log("版本0.13------------");
const routes = computed(() => { const routes = computed(() => {
return router.getRoutes().filter((e) => e.meta?.isLink); return router.getRoutes().filter((e) => e.meta?.isLink);
}); });
watch( watch(
() => route.path, () => route.path,
() => { () => {
route.path === "/login" && (isLogin.value = true); route.path === "/login" && (isLogin.value = true);
} }
); );
const currentRouteName = computed(() => route.name); const currentRouteName = computed(() => route.name);
function init() { function init() {
console.log(store); console.log(store);
getUserInfo();
initDict("faceclassPic"); initDict("faceclassPic");
initDict("faceclassClass"); initDict("faceclassClass");
initDict("faceclassScene"); initDict("faceclassScene");
@@ -67,9 +65,25 @@ export default defineComponent({
initDict("pathmapPic"); initDict("pathmapPic");
initDict("projectClass"); initDict("projectClass");
initDict("projectPic"); initDict("projectPic");
getMemberInfo();
getOrgTree(); getOrgTree();
} }
async function getMemberInfo() {
const list = localStorage.getItem("memberInitInfo");
if (list) {
store.commit("SET_MEMBER_INFO", JSON.parse(list));
return;
}
const memberInitInfo = await api1
.getMemberInfo({ keyWord: "", pageNo: 1, pageSize: 10 })
.then((res) => res.data.data.rows);
store.commit("SET_MEMBER_INFO", memberInitInfo);
localStorage.setItem("memberInitInfo", JSON.stringify(memberInitInfo));
}
async function getUserInfo() {
const userInfo = await api2.userInfo();
store.commit("SET_USER", userInfo);
}
async function initDict(key) { async function initDict(key) {
let list = localStorage.getItem(key); let list = localStorage.getItem(key);
if (list) { if (list) {
@@ -80,7 +94,6 @@ export default defineComponent({
localStorage.setItem(key, JSON.stringify(list)); localStorage.setItem(key, JSON.stringify(list));
store.commit("SET_DICT", { key, data: list }); store.commit("SET_DICT", { key, data: list });
} }
const getDictList = (param) => const getDictList = (param) =>
api1 api1
.getDict({ .getDict({
@@ -89,7 +102,6 @@ export default defineComponent({
setCode: param, setCode: param,
}) })
.then((res) => res.data.data.rows); .then((res) => res.data.data.rows);
//获取组织树 //获取组织树
const getOrgTree = () => { const getOrgTree = () => {
const orgtreeList = localStorage.getItem("orgtreeList"); const orgtreeList = localStorage.getItem("orgtreeList");
@@ -117,9 +129,7 @@ export default defineComponent({
console.log("组织树获取失败", err); console.log("组织树获取失败", err);
}); });
}; };
init(); init();
return { return {
isLogin, isLogin,
routes, routes,
@@ -140,17 +150,14 @@ export default defineComponent({
color: #2c3e50; color: #2c3e50;
height: 100%; height: 100%;
} }
#container { #container {
margin: 0; margin: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
min-width: 1000px; min-width: 1000px;
min-height: 100%; min-height: 100%;
background-color: rgba(245, 247, 250, 1); background-color: rgba(245, 247, 250, 1);
main { main {
height: 0; height: 0;
flex: 1 1 auto; flex: 1 1 auto;
@@ -166,7 +173,6 @@ export default defineComponent({
background: #ffffff; background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07); box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
} }
// @media screen and (max-width: 1366px) { // @media screen and (max-width: 1366px) {
// .cmMain { // .cmMain {
// width: 750px; // width: 750px;
@@ -188,4 +194,4 @@ export default defineComponent({
// } // }
// } // }
} }
</style> </style>

View File

@@ -2,10 +2,11 @@
* @Author: lixg lixg@dongwu-inc.com * @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-21 14:32:52 * @Date: 2022-11-21 14:32:52
* @LastEditors: lixg lixg@dongwu-inc.com * @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-12-02 17:13:55 * @LastEditTime: 2022-12-04 13:27:07
* @FilePath: /fe-manage/src/api/config.js * @FilePath: /fe-manage/src/api/config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
import { message } from "ant-design-vue";
import axios from "axios"; import axios from "axios";
// import { getCookie } from '../api/method' // import { getCookie } from '../api/method'
// const Qs = require("qs"); // const Qs = require("qs");
@@ -23,6 +24,7 @@ const http = axios.create({
http.interceptors.request.use( http.interceptors.request.use(
(config) => { (config) => {
// console.log('config', config)
// const token = localStorage.getItem("token"); // const token = localStorage.getItem("token");
// // const token = getCookie('token') // // const token = getCookie('token')
// // console.log('token', token) // // console.log('token', token)
@@ -54,12 +56,17 @@ http.interceptors.response.use(
} else { } else {
if (code === 1000) { if (code === 1000) {
// window.open("https://u-pre.boe.com/web/", '_self'); // window.open("https://u-pre.boe.com/web/", '_self');
// window.open("http://111.231.196.214:12013/manage/login", '_self');
} }
console.log("api %o", msg); console.log("api %o", msg);
} }
return response; return response;
}, },
function (error) { function (error) {
if (error.message == "timeout of 1ms exceeded") {
message.destroy()
message.error("请求超时")
}
console.log("api error %o", error); console.log("api error %o", error);
return Promise.reject(error); return Promise.reject(error);
} }

View File

@@ -18,28 +18,28 @@ import http from "./config";
* name: user * name: user
* } * }
* }).then(res => console.log(res)) * }).then(res => console.log(res))
* *
* 接口传参三种方式post/put/patch * 接口传参三种方式post/put/patch
* *
* 1.'Content-Type'= 'multipart/form-data',传参格式为 formData。 * 1.'Content-Type'= 'multipart/form-data',传参格式为 formData。
* (全局请求头:'Content-Type'= 'application/x-www-form-urlencoded' * (全局请求头:'Content-Type'= 'application/x-www-form-urlencoded'
* request的Header:'Content-Type'= 'multipart/form-data' * request的Header:'Content-Type'= 'multipart/form-data'
* var formData=new FormData(); * var formData=new FormData();
* formData.append('user',123456);formData.append('pass',12345678); * formData.append('user',123456);formData.append('pass',12345678);
* axios.post("/notice",formData).then() * axios.post("/notice",formData).then()
* *
* 2.'Content-Type'= 'application/x-www-form-urlencoded',传参格式为 query 形式,使用$qs.stringify。 * 2.'Content-Type'= 'application/x-www-form-urlencoded',传参格式为 query 形式,使用$qs.stringify。
* (全局请求头:'Content-Type'= 'application/x-www-form-urlencoded' * (全局请求头:'Content-Type'= 'application/x-www-form-urlencoded'
* request的Header:'Content-Type'= 'application/x-www-form-urlencoded' * request的Header:'Content-Type'= 'application/x-www-form-urlencoded'
* let data = {"code":"1234","name":"yyyy"}; * let data = {"code":"1234","name":"yyyy"};
* axios.post(`${this.$url}/test/testRequest`,qs.stringify({data})).then() * axios.post(`${this.$url}/test/testRequest`,qs.stringify({data})).then()
* *
* 3.'Content-Type'= 'application/json传参格式为 raw (JSON格式)。 * 3.'Content-Type'= 'application/json传参格式为 raw (JSON格式)。
* (全局请求头:'Content-Type'= 'application/x-www-form-urlencoded' * (全局请求头:'Content-Type'= 'application/x-www-form-urlencoded'
* request的Header:'Content-Type'= 'application/json;charset=UTF-8' * request的Header:'Content-Type'= 'application/json;charset=UTF-8'
* let data = {"code":"1234","name":"yyyy"} * let data = {"code":"1234","name":"yyyy"}
* axios.post(`${this.$url}/test/testRequest`,data).then() * axios.post(`${this.$url}/test/testRequest`,data).then()
* *
*/ */
@@ -52,7 +52,7 @@ export const createProject = (obj) => http.post('/admin/project/edit', obj)
export const getProjectList = (obj) => http.post('/admin/project/list', obj) export const getProjectList = (obj) => http.post('/admin/project/list', obj)
// 获取项目详情信息(包含阶段及任务列表) // 获取项目详情信息(包含阶段及任务列表)
export const getProjectDetail = (obj) => http.get('/admin/project/detail', { params: obj }) export const getProjectDetail = (obj) => http.get('/admin/project/detail', {params: obj})
//发布项目 //发布项目
export const releaseProject = (obj) => http.post('/admin/project/publish', obj) export const releaseProject = (obj) => http.post('/admin/project/publish', obj)
//获取项目学员 //获取项目学员
@@ -70,10 +70,11 @@ export const getDiscussDetail = (obj) => http.post('/discuss/getDiscussDetail',
//获取模版列表 //获取模版列表
export const getTemplate = (obj) => http.post('/admin/project/template/list', obj) export const getTemplate = (obj) => http.post('/admin/project/template/list', obj)
//获取模版详细信息 //获取模版详细信息
export const getTemplateDetail = (obj) => http.get('/admin/project/template/detail', { params: obj }) export const getTemplateDetail = (obj) => http.get('/admin/project/template/detail', {params: obj})
//获取项目统计 //获取项目统计
export const getProjectCount = (projectId) => http.get('/admin/project/projectCount', { params: { projectId: projectId } }) export const getProjectCount = (projectId) => http.get('/admin/project/projectCount', {params: {projectId: projectId}})
export const login = (obj) => http.post('/admin/CheckUser/userLogin', obj) export const login = (obj) => http.post('/admin/CheckUser/userLogin', obj)
export const userInfo = () => http.get('/admin/CheckUser/userInfo')

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

View File

@@ -2,8 +2,8 @@
<div class="navTop"> <div class="navTop">
<div class="navTopMain"> <div class="navTopMain">
<img <img
style="width: 205px; height: 29px; margin-left: 37px; margin-top: 22px" style="width: 205px; height: 29px; margin-left: 37px; margin-top: 22px"
src="../assets/images/navtop/logo.png" src="../assets/images/navtop/logo.png"
/> />
<div class="navTopRight"> <div class="navTopRight">
<div class="role"> <div class="role">
@@ -11,10 +11,10 @@
<div class="roleArrow"></div> <div class="roleArrow"></div>
<div class="roleItems"> <div class="roleItems">
<div <div
v-for="(value, index) in roleList" v-for="(value, index) in roleList"
:key="index" :key="index"
class="roleItem" class="roleItem"
@click="changeRole(value)" @click="changeRole(value)"
> >
{{ value.name }} {{ value.name }}
</div> </div>
@@ -22,14 +22,14 @@
</div> </div>
<div class="user"> <div class="user">
<img <img
style=" style="
width: 40px; width: 40px;
height: 40px; height: 40px;
margin-left: 8px; margin-left: 8px;
border-radius: 15px; border-radius: 15px;
margin-right: 10px; margin-right: 10px;
" "
:src="avatar" :src="avatar"
/> />
<div style="margin-right: 20px">{{ username }}</div> <div style="margin-right: 20px">{{ username }}</div>
</div> </div>
@@ -47,20 +47,21 @@
</div> --> </div> -->
<div class="signOutMain" @click="logOut"> <div class="signOutMain" @click="logOut">
<img <img
style="width: 27px; height: 27px" style="width: 27px; height: 27px"
src="../assets/images/navtop/signout.png" src="../assets/images/navtop/signout.png"
/> />
<span class="signOut">登出</span> <span class="signOut">登出</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<down-load v-model:downloadVisible="visible" /> <down-load v-model:downloadVisible="visible"/>
</template> </template>
<script> <script>
import { reactive, toRefs } from "vue"; import {reactive, toRefs} from "vue";
import DownLoad from "../components/drawers/DownLoad"; import DownLoad from "../components/drawers/DownLoad";
import * as api from "../api/index1"; import * as api from "../api/index1";
export default { export default {
name: "NavTop", name: "NavTop",
components: { components: {
@@ -100,24 +101,32 @@ export default {
}; };
const getUser = () => { const getUser = () => {
api api
.getUser() .getUser()
.then((res) => { .then((res) => {
console.log("获取登录信息成功", res); console.log("获取登录信息成功", res);
if (res.data.code === 200) { if (res.data.code === 200) {
state.username = res.data.data.realName; state.username = res.data.data.realName;
// state.avatar = res.data.data.avatar // state.avatar = res.data.data.avatar
// ? res.data.data.avatar // ? res.data.data.avatar
// : require("../assets/images/avatar.png"); // : require("../assets/images/avatar.png");
state.avatar = require("../assets/images/avatar.png"); state.avatar = require("../assets/images/avatar.png");
} }
}) })
.catch((err) => { .catch((err) => {
console.log("获取登录信息失败", err); console.log("获取登录信息失败", err);
}); });
}; };
getUser(); getUser();
const logOut = () => { const logOut = () => {
localStorage.removeItem('faceclassPic');
localStorage.removeItem('faceclassClass');
localStorage.removeItem('faceclassScene');
localStorage.removeItem('projectLevel');
localStorage.removeItem('projectSys');
localStorage.removeItem('pathmapPic');
localStorage.removeItem('projectClass');
localStorage.removeItem('projectPic');
window.open("https://u-pre.boe.com/web/", "_self"); window.open("https://u-pre.boe.com/web/", "_self");
}; };
return { return {
@@ -142,9 +151,11 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
background-color: rgba(255, 255, 255, 1); background-color: rgba(255, 255, 255, 1);
.navTopRight { .navTopRight {
display: flex; display: flex;
} }
.role { .role {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -154,6 +165,7 @@ export default {
line-height: 36px; line-height: 36px;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
.roleArrow { .roleArrow {
width: 13px; width: 13px;
height: 7px; height: 7px;
@@ -161,6 +173,7 @@ export default {
background-image: url(../assets/images/navtop/down.png); background-image: url(../assets/images/navtop/down.png);
background-size: 100%; background-size: 100%;
} }
.roleItems { .roleItems {
width: 109px; width: 109px;
height: 90px; height: 90px;
@@ -174,22 +187,27 @@ export default {
display: none; display: none;
z-index: 100; z-index: 100;
} }
.roleItem { .roleItem {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
color: rgba(79, 81, 86, 1); color: rgba(79, 81, 86, 1);
line-height: 36px; line-height: 36px;
} }
.roleItem:hover { .roleItem:hover {
color: #4ea6ff; color: #4ea6ff;
} }
} }
.role:hover .roleItems { .role:hover .roleItems {
display: block; display: block;
} }
.role:hover .roleArrow { .role:hover .roleArrow {
background-image: url(../assets/images/navtop/up.png); background-image: url(../assets/images/navtop/up.png);
} }
.user { .user {
margin-left: 37px; margin-left: 37px;
display: flex; display: flex;
@@ -199,12 +217,14 @@ export default {
color: #b3bdc4; color: #b3bdc4;
line-height: 36px; line-height: 36px;
} }
.signOutMain { .signOutMain {
cursor: pointer; cursor: pointer;
margin-right: 29px; margin-right: 29px;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.signOut { .signOut {
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;

View File

@@ -30,7 +30,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<button class="xkbtn" @click="showDrawerSelFacet"> <button class="xkbtn" @click="showDrawerSelFacet">
{{ chooseCourse == null ? "选择" : 重选 }}面授课 {{ chooseCourse == null ? "选择" : "重选" }}面授课
</button> </button>
<div v-if="chooseCourse"> <div v-if="chooseCourse">
<a-tag closable color="processing" @close="logC"> <a-tag closable color="processing" @close="logC">
@@ -209,7 +209,7 @@
<button class="xkbtn">配置</button> <button class="xkbtn">配置</button>
<div v-if="EditWorkId > 0"> <div v-if="EditWorkId > 0">
<a-tag closable color="processing" @close="logW"> <a-tag closable color="processing" @close="logW">
<span style="font-size:14px;line-height: 33px;">删除作业{{EditWorkId}}</span> <span style="font-size:14px;line-height: 33px;">删除作业</span>
</a-tag> </a-tag>
</div> </div>
@@ -233,7 +233,7 @@
<button class="xkbtn">配置</button> <button class="xkbtn">配置</button>
<div v-if="EditTestId > 0"> <div v-if="EditTestId > 0">
<a-tag closable color="processing" @close="logT"> <a-tag closable color="processing" @close="logT">
<span style="font-size:14px;line-height: 33px;">删除考试{{EditTestId}}</span> <span style="font-size:14px;line-height: 33px;">删除考试</span>
</a-tag> </a-tag>
</div> </div>

View File

@@ -31,6 +31,7 @@
<div class="btnbox"> <div class="btnbox">
<a-form-item has-feedback label="作业名称" name="workName"> <a-form-item has-feedback label="作业名称" name="workName">
<a-input <a-input
v-model:value="formState.workName" v-model:value="formState.workName"
style="width: 424px; height: 32px; margin-left: 35px" style="width: 424px; height: 32px; margin-left: 35px"
placeholder="请输入作业名称" placeholder="请输入作业名称"
@@ -49,10 +50,12 @@
placeholder="请输入作业要求" placeholder="请输入作业要求"
autocomplete="off" autocomplete="off"
allow-clear allow-clear
:rows="6" :rows="6"
style="margin-left: 35px" style="margin-left: 35px"
show-count :maxlength="200" show-count :maxlength="200"
/></div> /></div>
</a-form-item> </a-form-item>
</div> </div>
<div class="main_item"> <div class="main_item">

View File

@@ -202,7 +202,7 @@
<div class="signbox"></div> <div class="signbox"></div>
<div class="btnbox"> <div class="btnbox">
<button class="xkbtn" @click="showAssessment">选择评估</button> <button class="xkbtn" @click="showAssessment">选择评估</button>
<div v-if="(assessmentId !== '0')"> <div v-if="(assessmentId > 0)">
<a-tag closable @close="removePG" color="processing"> <a-tag closable @close="removePG" color="processing">
<span style="font-size: 14px; line-height: 33px" <span style="font-size: 14px; line-height: 33px"
>删除评估</span >删除评估</span
@@ -596,10 +596,11 @@ export default {
}; };
const showAssessment = () => { const showAssessment = () => {
state.assessmentVisible = true; state.assessmentVisible = true;
console.log("hshs======", state.assessmentVisible);
}; };
//创建直播 //创建直播
const updateLiveBroadcast = () => { const updateLiveBroadcast = () => {
console.log("hshs======", state.memberValue);
if (!state.inputV1) { if (!state.inputV1) {
message.destroy(); message.destroy();
return message.warning("请输入直播名称"); return message.warning("请输入直播名称");
@@ -612,6 +613,14 @@ export default {
message.destroy(); message.destroy();
return message.warning("请输入直播时长"); return message.warning("请输入直播时长");
} }
if (state.memberValue.value=="") {
message.destroy();
return message.warning("请选择授课教师");
}
if (!state.imageUrl) {
message.destroy();
return message.warning("请上传封面");
}
const regular = /^[+]{0,1}(\d+)$/; const regular = /^[+]{0,1}(\d+)$/;
if (!regular.test(state.inputV2)) { if (!regular.test(state.inputV2)) {
message.destroy(); message.destroy();

View File

@@ -115,26 +115,20 @@
</a-menu> </a-menu>
</template> </template>
</a-dropdown> --> </a-dropdown> -->
<span style="margin-left: 10px">
<a-tag <a-tag v-if="paperName != ''" closable color="processing" @close="delTag">
class="tag-style" <span style="font-size:14px;line-height: 33px;">删除考试</span>
v-if="paperName != ''" </a-tag>
:closable="true"
@close="delTag"
>{{ paperName }}</a-tag
>
<!-- <a-tag
class="tag-style"
v-for="item in choosedTestList"
:closable="true"
@close="closeTag(item.key)"
:key="item.key"
>{{ item.value }}</a-tag
> -->
</span>
</a-form-item> </a-form-item>
</div> </div>
</div> </div>
<div class="main_item"> <div class="main_item">
<div class="btnbox"> <div class="btnbox">
<a-form-item has-feedback label="考试时间" name="choosedTime"> <a-form-item has-feedback label="考试时间" name="choosedTime">
@@ -525,6 +519,7 @@ export default {
return Promise.reject("请选择时间"); return Promise.reject("请选择时间");
} }
}; };
let checkExaminationDuration = async (_rule, value) => { let checkExaminationDuration = async (_rule, value) => {
if (!value) { if (!value) {
return Promise.reject("请输入考试时长"); return Promise.reject("请输入考试时长");
@@ -674,7 +669,7 @@ export default {
state.paperName = ""; state.paperName = "";
}; };
const queryTest = () => { const queryTest = () => {
state.addLoading = true; // state.addLoading = true;
queryExaminationDetailById({ examinationId: props.EditTestId }) queryExaminationDetailById({ examinationId: props.EditTestId })
.then((res) => { .then((res) => {
formState.examinationName = res.data.data.examinationName; formState.examinationName = res.data.data.examinationName;
@@ -729,9 +724,13 @@ export default {
scoringModel: formState.scoringModel, scoringModel: formState.scoringModel,
showAnalysis: formState.showAnalysis, showAnalysis: formState.showAnalysis,
showAnswers: formState.showAnswers, showAnswers: formState.showAnswers,
examinationTestId: state.id, examinationTestId: state.paperId,
examinationTestName: state.testName, examinationTestName: state.paperName,
}; };
if(!(state.paperId >0)){
message.destroy();
return message.error("请选择考试");
}
if (props.edit) { if (props.edit) {
// 编辑任务 // 编辑任务
updateExamination(obj) updateExamination(obj)
@@ -740,6 +739,7 @@ export default {
closeDrawer(); closeDrawer();
}) })
.catch(() => { .catch(() => {
message.destroy();
message.error(`编辑失败`); message.error(`编辑失败`);
}); });
} else { } else {
@@ -750,6 +750,7 @@ export default {
closeDrawer(); closeDrawer();
}) })
.catch(() => { .catch(() => {
message.destroy();
message.error(`创建失败`); message.error(`创建失败`);
}); });
} }
@@ -860,6 +861,7 @@ export default {
state.id = value.id; state.id = value.id;
state.testName = value.testName; state.testName = value.testName;
}; };
return { return {
formState, formState,
afterVisibleChange, afterVisibleChange,
@@ -885,6 +887,7 @@ export default {
chooseTest, chooseTest,
closeTag, closeTag,
getData, getData,
...toRefs(state), ...toRefs(state),
}; };
}, },

View File

@@ -79,7 +79,6 @@
<div class="chooseLeft"> <div class="chooseLeft">
<div class="boeTree"> <div class="boeTree">
<div class="boeTreeTitle">BOE组织树</div> <div class="boeTreeTitle">BOE组织树</div>
<a-tree <a-tree
v-model:value="valueSelectboe" v-model:value="valueSelectboe"
class="treeMain" class="treeMain"
@@ -110,14 +109,14 @@
style="border: 1px solid #f2f6fe" style="border: 1px solid #f2f6fe"
:columns="tablecolumns" :columns="tablecolumns"
:data-source="tabledata" :data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false" :loading="loading"
expandRowByClick="true"
@expand="expandTable"
:pagination="false" :pagination="false"
rowKey="id"
:row-selection="{ :row-selection="{
columnWidth: 20, columnWidth: 20,
selectedRowKeys: selectedRowKeys, selectedRowKeys: selectedRowKeys,
onChange: onSelectChange, onChange: onSelectChange,
preserveSelectedRowKeys: true,
}" }"
/> />
<div class="pa"> <div class="pa">
@@ -206,7 +205,6 @@
> >
<template #suffixIcon></template> <template #suffixIcon></template>
</a-tree> </a-tree>
<a-tree <a-tree
v-else-if="isSearchOrg" v-else-if="isSearchOrg"
class="treeMain treeMain2" class="treeMain treeMain2"
@@ -288,7 +286,6 @@
</div> </div>
</div> </div>
</div> </div>
<!-- <div class="line"> <!-- <div class="line">
<div class="inline"> <div class="inline">
<div class="left1"> <div class="left1">
@@ -316,6 +313,7 @@
columnWidth: 30, columnWidth: 30,
selectedRowKeys: selectedRowKeys2, selectedRowKeys: selectedRowKeys2,
onChange: onSelectChange2, onChange: onSelectChange2,
preserveSelectedRowKeys: true,
}" }"
/> />
<div class="pa" style="margin-top: 20px"> <div class="pa" style="margin-top: 20px">
@@ -356,7 +354,7 @@
<div class="selecteds" id="selecteds"> <div class="selecteds" id="selecteds">
<!-- 遍历生成 --> <!-- 遍历生成 -->
<div class="chose" v-for="item in choosepeople" :key="item.key"> <div class="chose" v-for="item in choosepeople" :key="item.key">
<div>{{ item.name }}</div> <div>{{ item.name || item.realName }}</div>
<div class="ch" @click="deleteChoosePeople(item)"></div> <div class="ch" @click="deleteChoosePeople(item)"></div>
</div> </div>
</div> </div>
@@ -541,7 +539,6 @@
<button class="btn2" @click="submitAuth">确定</button> <button class="btn2" @click="submitAuth">确定</button>
</div> </div>
</div> </div>
<!-- 确认添加部门弹窗 --> <!-- 确认添加部门弹窗 -->
<a-modal <a-modal
v-model:visible="showOrgModal" v-model:visible="showOrgModal"
@@ -574,7 +571,6 @@
<!-- 确认添加部门弹窗 --> <!-- 确认添加部门弹窗 -->
</a-drawer> </a-drawer>
</template> </template>
<script> <script>
import { reactive, toRefs, onMounted, onUnmounted, computed } from "vue"; import { reactive, toRefs, onMounted, onUnmounted, computed } from "vue";
import elementResizeDetectorMaker from "element-resize-detector"; import elementResizeDetectorMaker from "element-resize-detector";
@@ -598,6 +594,14 @@ export default {
type: Number, type: Number,
default: null, default: null,
}, },
classify: {
type: String,
default: "",
},
selectProjectId: {
type: Number,
default: null,
},
}, },
setup(props, ctx) { setup(props, ctx) {
const store = useStore(); const store = useStore();
@@ -606,30 +610,24 @@ export default {
//快速选人 //快速选人
pageSize: 10, pageSize: 10,
currentPage: 1, currentPage: 1,
tableDataTotal: 0, tableDataTotal: 100,
nameSearch: "", //搜索名称 nameSearch: "", //搜索名称
loading: false,
//受众 //受众
pageSize2: 10, pageSize2: 10,
currentPage2: 1, currentPage2: 1,
tableDataTotal2: 0, tableDataTotal2: 0,
audienceName: "", audienceName: "",
pageSize1: 10, pageSize1: 10,
currentPage1: 1, currentPage1: 1,
tableDataTotal1: 0, tableDataTotal1: 0,
selectedRowKeys1: [], selectedRowKeys1: [],
activeKey: "1", activeKey: "1",
value: [], //级联选择框 value: [], //级联选择框
choosevalue: null, //受众选择 choosevalue: null, //受众选择
valueSelect: null, //树形选择 valueSelect: null, //树形选择
valueSelectboe2: null, //boe树形选择 valueSelectboe2: null, //boe树形选择
nameadd: "", nameadd: "",
searchOrgName: "", //搜索组织 searchOrgName: "", //搜索组织
//组织树 //组织树
treeData: [], treeData: [],
@@ -646,8 +644,8 @@ export default {
tablecolumns: [ tablecolumns: [
{ {
title: "姓名", title: "姓名",
dataIndex: "name", dataIndex: "realName",
key: "name", key: "realName",
width: 80, width: 80,
align: "center", align: "center",
className: "h", className: "h",
@@ -655,8 +653,8 @@ export default {
}, },
{ {
title: "工号", title: "工号",
dataIndex: "numb", dataIndex: "userNo",
key: "numb", key: "userNo",
width: 80, width: 80,
align: "center", align: "center",
className: "h", className: "h",
@@ -664,8 +662,8 @@ export default {
}, },
{ {
title: "归属组织", title: "归属组织",
dataIndex: "guishu", dataIndex: "orgName",
key: "guishu", key: "orgName",
width: 80, width: 80,
align: "center", align: "center",
className: "h", className: "h",
@@ -673,15 +671,14 @@ export default {
}, },
{ {
title: "部门", title: "部门",
dataIndex: "bum", dataIndex: "departName",
key: "bum", key: "departName",
width: 80, width: 80,
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true, ellipsis: true,
}, },
], ],
//受众关联table数据 //受众关联table数据
tabledata2: [ tabledata2: [
// { // {
@@ -761,46 +758,59 @@ export default {
selectOrgName: null, //选中的组织名称 selectOrgName: null, //选中的组织名称
//快速选人------------------------------------- //快速选人-------------------------------------
//添加组织------------------------------------- //添加组织-------------------------------------
selectedKeys1: [], //选中部门的key selectedKeys1: [], //选中部门的key
chooseorganization: [], //添加组织的选择组织 chooseorganization: [], //添加组织的选择组织
chooseorganization1: [], //显示到右侧的数组 chooseorganization1: [], //显示到右侧的数组
showMore1: false, //是否显示添加组织的查看更多 showMore1: false, //是否显示添加组织的查看更多
showHidden1: false, //是否显示添加组织的收回 showHidden1: false, //是否显示添加组织的收回
showOrgModal: false, //确认弹窗 showOrgModal: false, //确认弹窗
isSearchOrg: false, isSearchOrg: false,
treeData2: [], treeData2: [],
//添加组织------------------------------------- //添加组织-------------------------------------
//受众关联------------------------------------- //受众关联-------------------------------------
relationpeople: [], //总的数组 relationpeople: [], //总的数组
showMore2: false, //是否显示快速选人的查看更多 showMore2: false, //是否显示快速选人的查看更多
showHidden2: false, //是否显示收回 showHidden2: false, //是否显示收回
selectedRowKeys2: [], //表格选中的key selectedRowKeys2: [], //表格选中的key
//受众关联------------------------------------- //受众关联-------------------------------------
selectAllArr: null, //所有选中 selectAllArr: null, //所有选中
expandedKeys: [], //展开的节点 expandedKeys: [], //展开的节点
}); });
const closeDrawer = () => { const closeDrawer = () => {
state.activeKey = "1"; state.activeKey = "1";
ctx.emit("update:ProjCheckvisible", false); ctx.emit("update:ProjCheckvisible", false);
deleteAll(); deleteAll();
// console.log("expandedKeys", state.expandedKeys); // console.log("expandedKeys", state.expandedKeys);
state.expandedKeys = []; state.expandedKeys = [];
state.tabledata = [];
//快速选人
state.currentPage = 1;
state.tableDataTotal = 0;
state.nameSearch = ""; //搜索名称
//受众
state.currentPage2 = 1;
state.tableDataTotal2 = 0;
state.audienceName = "";
state.currentPage1 = 1;
state.tableDataTotal1 = 0;
state.selectedKeys = [];
state.selectOrgId = null; //选中的组织id
state.selectOrgName = null; //选中的组织名称
state.searchOrgName = null;
state.isSearchOrg = false;
state.treeData2 = [];
getAudienceInfo();
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
console.log("state", bool); console.log("state", bool);
if (bool) {
optionAuthPerm();
}
}; };
//获取组织树 //获取组织树
state.treeData = computed(() => { state.treeData = computed(() => {
return store.state.orgtreeList ? store.state.orgtreeList : []; return store.state.orgtreeList ? store.state.orgtreeList : [];
}); });
const getClientHeight = () => { const getClientHeight = () => {
state.screenHeight = document.body.clientHeight; state.screenHeight = document.body.clientHeight;
}; };
@@ -808,19 +818,14 @@ export default {
// const getClientHeightSelecteds = () => { // const getClientHeightSelecteds = () => {
// state.selectedsHeight = document.getElementById('selecteds').offsetHeight // state.selectedsHeight = document.getElementById('selecteds').offsetHeight
// console.log('selectedsHeight',state.selectedsHeight) // console.log('selectedsHeight',state.selectedsHeight)
// }; // };
onMounted(() => { onMounted(() => {
// console.log("11111", 1);
window.addEventListener("resize", getClientHeight, false); window.addEventListener("resize", getClientHeight, false);
// window.addEventListener("resize", getClientHeightSelecteds, false); state.tabledata = store.state.memberInitInfo;
// judgeUrl();
}); });
onUnmounted(() => { onUnmounted(() => {
window.removeEventListener("resize", getClientHeight, false); window.removeEventListener("resize", getClientHeight, false);
// window.removeEventListener("resize", getClientHeightSelecteds, false);
}); });
// 开始 快速选人------------------------------------------------------------------ // 开始 快速选人------------------------------------------------------------------
//选中部门 //选中部门
const departmentSelect = (e, k) => { const departmentSelect = (e, k) => {
@@ -836,11 +841,10 @@ export default {
}; };
//获取学员 //获取学员
const getMember = async (org) => { const getMember = async (org) => {
if (!state.nameSearch && !org) { // if (!state.nameSearch && !org) {
return false; // return false;
} // }
console.log("org", org); await api
const item1 = await api
.getMemberInfo({ .getMemberInfo({
pageNo: state.currentPage, pageNo: state.currentPage,
pageSize: state.pageSize, pageSize: state.pageSize,
@@ -848,30 +852,28 @@ export default {
org: state.nameSearch ? null : org, org: state.nameSearch ? null : org,
}) })
.then((res) => { .then((res) => {
if (res.data.code === 200) { state.tabledata = res.data.data.rows;
console.log("获取学员", res.data); state.tableDataTotal = res.data.data.total;
state.tableDataTotal = res.data.data.total;
return res.data.data.rows;
}
}); });
state.tabledata = traverseArr(item1, {
key: "id",
name: "realName",
bum: "depName",
numb: "id",
guishu: "orgName",
});
}; };
// state.tabledata = traverseArr(item1, {
// key: "id",
// name: "realName",
// bum: "depName",
// numb: "id",
// guishu: "orgName",
// });
// };
//分页获取学员 //分页获取学员
const changePagination = (page) => { const changePagination = (page) => {
state.currentPage = page; state.currentPage = page;
console.log("1111111"); console.log("1111111", state.selectedRowKeys, state.choosepeople);
getMember(state.selectOrgId); getMember(state.selectOrgId);
}; };
//搜索学员 //搜索学员
const handleSearchStu = () => { const handleSearchStu = () => {
deleteDepSelect(); deleteDepSelect();
state.currentPage = 1;
state.currentPage2 = 1; state.currentPage2 = 1;
console.log("22222"); console.log("22222");
getMember(); getMember();
@@ -891,10 +893,19 @@ export default {
}; };
//快速选人 选中的数组 //快速选人 选中的数组
const onSelectChange = (selectedRowKeys, item) => { const onSelectChange = (selectedRowKeys, item) => {
// console.log("selectedRowKeys changed: ", selectedRowKeys,item); console.log("selectedRowKeys changed: ", selectedRowKeys, item);
state.selectedRowKeys.push(selectedRowKeys[selectedRowKeys.length - 1]); state.selectedRowKeys = selectedRowKeys;
state.choosepeople.unshift(item[item.length - 1]); state.choosepeople = item.reverse();
selectedsHeight(); selectedsHeight();
// if (selectedRowKeys.length > 0 && item.length > 0) {
// state.selectedRowKeys.push(selectedRowKeys[selectedRowKeys.length - 1]);
// state.choosepeople.unshift(item[item.length - 1]);
// // console.log(
// // "selectedRowKeys changed22222: ",
// // state.selectedRowKeys,
// // state.choosepeople
// // );
// }
}; };
//单个删除选中的人 //单个删除选中的人
const deleteChoosePeople = (item) => { const deleteChoosePeople = (item) => {
@@ -920,7 +931,7 @@ export default {
resize.listenTo( resize.listenTo(
document.getElementById("ProjCheckship").querySelector("#selecteds"), document.getElementById("ProjCheckship").querySelector("#selecteds"),
function (ele) { function (ele) {
console.log("ele", ele.offsetHeight); console.log("ele", ele.clientHeight, ele.offsetHeight);
if (ele.offsetHeight > 160 && !state.showHidden) { if (ele.offsetHeight > 160 && !state.showHidden) {
state.showMore = true; state.showMore = true;
document document
@@ -962,9 +973,7 @@ export default {
.getElementById("ProjCheckship") .getElementById("ProjCheckship")
.querySelector("#selectedsBox").style.height = "160px"; .querySelector("#selectedsBox").style.height = "160px";
}; };
// 结束 快速选人------------------------------------------------------------------ // 结束 快速选人------------------------------------------------------------------
// 开始 添加组织------------------------------------------------------------------ // 开始 添加组织------------------------------------------------------------------
//搜索组织 //搜索组织
const searchOrg = (id) => { const searchOrg = (id) => {
@@ -1002,7 +1011,6 @@ export default {
return store.state.orgtreeList ? store.state.orgtreeList : []; return store.state.orgtreeList ? store.state.orgtreeList : [];
}); });
}; };
// //搜索组织 // //搜索组织
// const searchOrg = () => { // const searchOrg = () => {
// let treeTitle = document // let treeTitle = document
@@ -1027,7 +1035,6 @@ export default {
// message.warning("请输入组织名称"); // message.warning("请输入组织名称");
// } // }
// }; // };
//选中部门 //选中部门
const departmentSelect1 = (e, k) => { const departmentSelect1 = (e, k) => {
console.log("选中的部门", e, k); console.log("选中的部门", e, k);
@@ -1046,8 +1053,7 @@ export default {
} }
} }
} }
console.log("选中的部门2", state.selectedKeys1, state.chooseorganization);
// console.log("选中的部门2", state.selectedKeys1, state.chooseorganization);
}; };
//点击确认添加-判断是否显示确定弹窗 //点击确认添加-判断是否显示确定弹窗
const addOrgModal = () => { const addOrgModal = () => {
@@ -1069,27 +1075,25 @@ export default {
const closeOrgModal = () => { const closeOrgModal = () => {
state.showOrgModal = false; state.showOrgModal = false;
}; };
//单个删除选中的组织
//单个删除选中的人
const deleteChoosePeople1 = (item) => { const deleteChoosePeople1 = (item) => {
console.log("item", item); console.log("item", item, state.chooseorganization);
let arr = state.chooseorganization; let arr = state.chooseorganization;
for (let i = 0; i < arr.length; i++) { for (let i = 0; i < arr.length; i++) {
if (arr[i].key === item.key) { if (arr[i].id === item.id) {
arr.splice(i, 1); arr.splice(i, 1);
} }
} }
state.chooseorganization = arr; state.chooseorganization = arr;
let array = state.selectedKeys1; let array = state.selectedKeys1;
for (let i = 0; i < array.length; i++) { for (let i = 0; i < array.length; i++) {
if (array[i] === item.key) { if (array[i] === item.id) {
array.splice(i, 1); array.splice(i, 1);
} }
} }
state.selectedKeys1 = array; state.selectedKeys1 = array;
console.log("state.selectedKeys1", state.selectedKeys1); console.log("state.selectedKeys1", state.selectedKeys1);
}; };
//根据右侧快速选人高度,判断是否显示更多 //根据右侧快速选人高度,判断是否显示更多
const selectedsHeight1 = () => { const selectedsHeight1 = () => {
let resize = elementResizeDetectorMaker(); let resize = elementResizeDetectorMaker();
@@ -1138,11 +1142,8 @@ export default {
.getElementById("ProjCheckship") .getElementById("ProjCheckship")
.querySelector("#selectedsBox1").style.height = "160px"; .querySelector("#selectedsBox1").style.height = "160px";
}; };
// 结束 添加组织------------------------------------------------------------------ // 结束 添加组织------------------------------------------------------------------
// 开始 受众关联------------------------------------------------------------------ // 开始 受众关联------------------------------------------------------------------
//获取受众 //获取受众
const getAudienceInfo = async () => { const getAudienceInfo = async () => {
const item1 = await api const item1 = await api
@@ -1189,13 +1190,13 @@ export default {
state.audienceName = ""; state.audienceName = "";
getAudienceInfo(); getAudienceInfo();
}; };
//受众关联 选中的数组 //受众关联 选中的数组
const onSelectChange2 = (selectedRowKeys, item) => { const onSelectChange2 = (selectedRowKeys, item) => {
// console.log("selectedRowKeys changed: ", selectedRowKeys, item); // console.log("selectedRowKeys changed: ", selectedRowKeys, item);
state.selectedRowKeys2.push(selectedRowKeys[selectedRowKeys.length - 1]); state.selectedRowKeys2 = selectedRowKeys;
state.relationpeople.unshift(item[item.length - 1]); state.relationpeople = item.reverse();
// state.selectedRowKeys2.push(selectedRowKeys[selectedRowKeys.length - 1]);
// state.relationpeople.unshift(item[item.length - 1]);
selectedsHeight2(); selectedsHeight2();
}; };
//单个删除选中的人 //单个删除选中的人
@@ -1263,9 +1264,7 @@ export default {
.getElementById("ProjCheckship") .getElementById("ProjCheckship")
.querySelector("#selectedsBox2").style.height = "160px"; .querySelector("#selectedsBox2").style.height = "160px";
}; };
// 结束 受众关联------------------------------------------------------------------ // 结束 受众关联------------------------------------------------------------------
//全部清除 //全部清除
const deleteAll = () => { const deleteAll = () => {
//快速选人------------------------------------- //快速选人-------------------------------------
@@ -1278,37 +1277,31 @@ export default {
state.selectOrgName = null; //选中的组织名称 state.selectOrgName = null; //选中的组织名称
//快速选人------------------------------------- //快速选人-------------------------------------
//添加组织------------------------------------- //添加组织-------------------------------------
state.selectedKeys1 = []; //选中部门的key state.selectedKeys1 = []; //选中部门的key
state.chooseorganization = []; //添加组织的选择组织 state.chooseorganization = []; //添加组织的选择组织
state.chooseorganization1 = []; //显示到右侧的数组 state.chooseorganization1 = []; //显示到右侧的数组
state.showMore1 = false; //是否显示添加组织的查看更多 state.showMore1 = false; //是否显示添加组织的查看更多
state.showHidden1 = false; //是否显示添加组织的收回 state.showHidden1 = false; //是否显示添加组织的收回
state.showOrgModal = false; //确认弹窗 state.showOrgModal = false; //确认弹窗
//添加组织------------------------------------- //添加组织-------------------------------------
//受众关联------------------------------------- //受众关联-------------------------------------
state.relationpeople = []; //总的数组 state.relationpeople = []; //总的数组
state.showMore2 = false; //是否显示快速选人的查看更多 state.showMore2 = false; //是否显示快速选人的查看更多
state.showHidden2 = false; //是否显示收回 state.showHidden2 = false; //是否显示收回
state.selectedRowKeys2 = []; //表格选中的key state.selectedRowKeys2 = []; //表格选中的key
//受众关联------------------------------------- //受众关联-------------------------------------
state.selectAllArr = null; //所有选中 state.selectAllArr = null; //所有选中
}; };
//确定添加授权 //确定添加授权
const submitAuth = () => { const submitAuth = () => {
let choosepeople = []; let choosepeople = [];
state.choosepeople.map((value) => { state.choosepeople.map((value) => {
let obj = { let obj = {
id: value.key, id: value.id,
name: value.name, name: value.realName,
}; };
choosepeople.push(obj); choosepeople.push(obj);
}); });
let chooseorganization1 = []; let chooseorganization1 = [];
state.chooseorganization1.map((value) => { state.chooseorganization1.map((value) => {
let obj = { let obj = {
@@ -1317,7 +1310,6 @@ export default {
}; };
chooseorganization1.push(obj); chooseorganization1.push(obj);
}); });
let relationpeople = []; let relationpeople = [];
state.relationpeople.map((value) => { state.relationpeople.map((value) => {
let obj = { let obj = {
@@ -1331,7 +1323,71 @@ export default {
ctx.emit("update:addAuthList", state.selectAllArr); ctx.emit("update:addAuthList", state.selectAllArr);
closeDrawer(); closeDrawer();
}; };
//获取授权 坐回显
const optionAuthPerm = () => {
let obj = {
keyWord: "",
type:
props.classify === "learnPath"
? 1
: props.classify === "project"
? 2
: props.classify === "course"
? 3
: null,
tag: props.authClassify === 1 ? 3 : props.authClassify === 2 ? 4 : "",
opt: 1,
refId: props.selectProjectId,
pageNo: 0,
pageSize: 0,
deptList: [],
groupList: [],
studentList: [],
};
console.log("获取权限名单obj", obj);
api
.optionAuthPerm(obj)
.then((res) => {
// console.log("获取权限名单成功", res);
if (res.data.code === 200) {
let studentArr = res.data.data.studentList;
let selectedRowKeys = [];
let choosepeople = [];
for (let i = 0; i < studentArr.length; i++) {
selectedRowKeys.push(studentArr[i].id);
choosepeople.push(studentArr[i]);
}
//快速选人
state.selectedRowKeys = selectedRowKeys;
state.choosepeople = choosepeople;
let deptArr = res.data.data.deptList;
let selectedKeys1 = [];
let chooseorganization = [];
for (let i = 0; i < deptArr.length; i++) {
selectedKeys1.push(deptArr[i].id);
chooseorganization.push(deptArr[i]);
}
//组织
state.selectedKeys1 = selectedKeys1;
state.chooseorganization = chooseorganization;
state.chooseorganization1 = chooseorganization;
let groupArr = res.data.data.groupList;
let selectedRowKeys2 = [];
let relationpeople = [];
for (let i = 0; i < groupArr.length; i++) {
selectedRowKeys2.push(groupArr[i].id);
relationpeople.push(groupArr[i]);
}
//受众
state.selectedRowKeys2 = selectedRowKeys2;
state.relationpeople = relationpeople;
console.log("获取权限名单成功", res);
}
})
.catch((err) => {
console.log("获取权限名单失败", err);
});
};
return { return {
...toRefs(state), ...toRefs(state),
afterVisibleChange, afterVisibleChange,
@@ -1344,7 +1400,6 @@ export default {
selectedsHeight, selectedsHeight,
morePeopleShow, morePeopleShow,
morePeopleHidden, morePeopleHidden,
departmentSelect1, departmentSelect1,
addOrgModal, addOrgModal,
addOrg, addOrg,
@@ -1353,32 +1408,26 @@ export default {
morePeopleShow1, morePeopleShow1,
morePeopleHidden1, morePeopleHidden1,
deleteChoosePeople1, deleteChoosePeople1,
selectedsHeight2, selectedsHeight2,
morePeopleShow2, morePeopleShow2,
morePeopleHidden2, morePeopleHidden2,
deleteChoosePeople2, deleteChoosePeople2,
deleteAll, deleteAll,
searchOrg, searchOrg,
changePagination, changePagination,
handleSearchStu, handleSearchStu,
resetStu, resetStu,
getAudienceInfo, getAudienceInfo,
changePagination1, changePagination1,
searchAudienceInfo, searchAudienceInfo,
resetAudienceInfo, resetAudienceInfo,
resetOrg, resetOrg,
submitAuth, submitAuth,
optionAuthPerm,
}; };
}, },
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
.ProjCheckship { .ProjCheckship {
.ant-drawer-content-wrapper { .ant-drawer-content-wrapper {
@@ -1527,42 +1576,35 @@ export default {
align-items: center; align-items: center;
margin-top: 20px; margin-top: 20px;
border: 1px solid #c3e6fc; border: 1px solid #c3e6fc;
.inline { .inline {
width: 95%; width: 95%;
height: 100%; height: 100%;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
// background-color: #bfa; // background-color: #bfa;
.left1 { .left1 {
height: 100%; height: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
.img { .img {
width: 14px; width: 14px;
height: 15px; height: 15px;
background-image: url(../../assets/images/leveladd/gan.png); background-image: url(../../assets/images/leveladd/gan.png);
background-size: 100% 100%; background-size: 100% 100%;
} }
.text { .text {
color: #999ba3; color: #999ba3;
} }
.text2 { .text2 {
color: #4ea6ff; color: #4ea6ff;
margin-left: 5px; margin-left: 5px;
margin-right: 5px; margin-right: 5px;
} }
.text3 { .text3 {
color: #999ba3; color: #999ba3;
margin-left: 20px; margin-left: 20px;
} }
} }
.right1 { .right1 {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
@@ -1649,7 +1691,6 @@ export default {
th.h { th.h {
background-color: #eff4fc !important; background-color: #eff4fc !important;
} }
.ant-table-tbody .ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td { > td {
@@ -1684,7 +1725,6 @@ export default {
} }
} }
} }
.tab2 { .tab2 {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -1700,7 +1740,6 @@ export default {
font-size: 14px; font-size: 14px;
} }
} }
.t1 { .t1 {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -1748,7 +1787,6 @@ export default {
font-size: 14px; font-size: 14px;
white-space: nowrap; white-space: nowrap;
} }
.ant-select-dropdown { .ant-select-dropdown {
min-width: 800px !important; min-width: 800px !important;
} }
@@ -1904,7 +1942,9 @@ export default {
margin-right: 32px; margin-right: 32px;
margin-left: 32px; margin-left: 32px;
min-height: 100px; min-height: 100px;
// height: 170px;
// overflow: hidden; // overflow: hidden;
flex-shrink: 0;
.chose { .chose {
// width: 64px; // width: 64px;
padding-left: 10px; padding-left: 10px;
@@ -1920,6 +1960,7 @@ export default {
color: rgba(56, 139, 225, 1); color: rgba(56, 139, 225, 1);
font-size: 12px; font-size: 12px;
position: relative; position: relative;
flex-shrink: 0;
.ch { .ch {
position: absolute; position: absolute;
width: 18px; width: 18px;
@@ -1977,7 +2018,6 @@ export default {
width: 7px !important; width: 7px !important;
} }
} }
.changetreedropdownboe { .changetreedropdownboe {
width: 240px !important; width: 240px !important;
border-radius: 5px; border-radius: 5px;
@@ -2078,7 +2118,6 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
flex-shrink: 0; flex-shrink: 0;
cursor: pointer; cursor: pointer;
.btnText { .btnText {
@@ -2106,4 +2145,4 @@ export default {
} }
} }
} }
</style> </style>

View File

@@ -133,6 +133,7 @@
<script> <script>
import { toRefs, reactive } from "vue"; import { toRefs, reactive } from "vue";
import * as api from "../../api/index1"; import * as api from "../../api/index1";
import { message } from "ant-design-vue";
export default { export default {
name: "ProjPowerList", name: "ProjPowerList",
props: { props: {
@@ -172,6 +173,7 @@ export default {
// }, // },
], ],
cancelAuthInfo: null, //取消授权id cancelAuthInfo: null, //取消授权id
cancelAuthState: null, //取消授权种类
}); });
const closeDrawer = () => { const closeDrawer = () => {
@@ -199,6 +201,7 @@ export default {
name: item.name, name: item.name,
}; };
state.cancelAuthInfo = obj; state.cancelAuthInfo = obj;
state.cancelAuthState = item.state;
}; };
const closeCancelModal = () => { const closeCancelModal = () => {
state.cancelModal = false; state.cancelModal = false;
@@ -364,7 +367,14 @@ export default {
: props.classify === "course" : props.classify === "course"
? 3 ? 3
: null, : null,
tag: 1, tag:
state.cancelAuthState === "归属权"
? 2
: state.cancelAuthState === "查看权"
? 3
: state.cancelAuthState === "管理权"
? 4
: null,
opt: 4, opt: 4,
refId: props.selectProjectId, refId: props.selectProjectId,
pageNo: 1, pageNo: 1,
@@ -373,7 +383,7 @@ export default {
groupList: [], groupList: [],
studentList: [state.cancelAuthInfo], studentList: [state.cancelAuthInfo],
}; };
console.log("取消权限名单obj", obj); console.log("取消权限名单obj", obj, state.cancelAuthState);
api api
.optionAuthPerm(obj) .optionAuthPerm(obj)
.then((res) => { .then((res) => {
@@ -381,6 +391,7 @@ export default {
if (res.data.code === 200) { if (res.data.code === 200) {
// console.log("取消授权成功", res.data.data); // console.log("取消授权成功", res.data.data);
optionAuthPerm(); optionAuthPerm();
message.success("取消授权成功");
closeCancelModal(); closeCancelModal();
} }
}) })

View File

@@ -28,13 +28,13 @@
<div class="nameinp"> <div class="nameinp">
<div class="namee">姓名</div> <div class="namee">姓名</div>
<a-input <a-input
v-model:value="name" v-model:value="nameSearch"
style="width: 270px; height: 40px; border-radius: 8px" style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入姓名" placeholder="请输入姓名"
/> />
</div> </div>
<div class="btns"> <div class="btns">
<div class="btn1"> <div class="btn1" @click="handleSearchStu">
<div class="img1"> <div class="img1">
<img <img
src="../../assets/images/courseManage/search0.png" src="../../assets/images/courseManage/search0.png"
@@ -42,7 +42,7 @@
</div> </div>
<div class="wz">搜索</div> <div class="wz">搜索</div>
</div> </div>
<div class="btn2"> <div class="btn2" @click="resetStu">
<div class="img2"> <div class="img2">
<img <img
src="../../assets/images/courseManage/reset1.png" src="../../assets/images/courseManage/reset1.png"
@@ -242,7 +242,7 @@ export default {
valueSelect: null, //树形选择 valueSelect: null, //树形选择
valueSelectboe2: null, //boe树形选择 valueSelectboe2: null, //boe树形选择
name: "", nameSearch: "",
nameadd: "", nameadd: "",
nameaddd: "", nameaddd: "",
com: "", com: "",
@@ -317,6 +317,18 @@ export default {
ctx.emit("update:ProjOwnervisible", false); ctx.emit("update:ProjOwnervisible", false);
state.openKeys = []; state.openKeys = [];
state.isDisabled = true; state.isDisabled = true;
state.nameSearch = "";
state.tabledata = [];
state.currentPage = 1;
state.selectedKeys = [];
state.valueSelectboe = null;
state.choosepeople = []; //选中的组织名称
state.selectDepartment = null; //选中部门名称
state.showMore = false; //是否显示快速选人的查看更多
state.showHidden = false; //是否显示收回
state.selectedRowKeys = []; //表格选中的key
state.selectPeopleArr = []; //表格选中的人
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
@@ -336,16 +348,22 @@ export default {
}); });
//获取选中部门的人员信息 //获取选中部门的人员信息
const getPeoples = () => { const getPeoples = () => {
if (!state.nameSearch && !state.selectedKeys[0]) {
state.tableDataTotal = 0;
return false;
}
// console.log("org", org);
let obj = { let obj = {
org: state.selectedKeys[0],
pageNo: state.currentPage, pageNo: state.currentPage,
pageSize: state.pageSize, pageSize: state.pageSize,
keyWord: state.nameSearch,
org: state.nameSearch ? null : state.selectedKeys[0],
}; };
if (!state.selectedKeys[0]) { // if (!state.selectedKeys[0]) {
state.tableDataTotal = 0; // state.tableDataTotal = 0;
return; // return;
} // }
// console.log("obj", obj); console.log("obj", obj);
api api
.getMemberInfo(obj) .getMemberInfo(obj)
.then((res) => { .then((res) => {
@@ -373,7 +391,26 @@ export default {
console.log("获取学员失败", err); console.log("获取学员失败", err);
}); });
}; };
//搜索学员
const handleSearchStu = () => {
// deleteDepSelect();
state.currentPage = 1;
console.log("22222");
getPeoples();
};
//重置
const resetStu = () => {
state.nameSearch = "";
state.currentPage = 1;
state.tableDataTotal = 0;
state.tabledata = [];
};
// //清空选择部门信息
// const deleteDepSelect = () => {
// state.selectedKeys = null;
// state.selectOrgId = null;
// state.selectOrgName = null;
// };
//分页 //分页
const changePagination = () => { const changePagination = () => {
getPeoples(); getPeoples();
@@ -610,6 +647,8 @@ export default {
changeOwnership, changeOwnership,
addAuth, addAuth,
removeClick, removeClick,
handleSearchStu,
resetStu,
}; };
}, },
}; };

View File

@@ -29,6 +29,7 @@
/> />
</div> </div>
</div> </div>
<!--
<div class="mii_ipt"> <div class="mii_ipt">
<div class="ipt_name">课程状态</div> <div class="ipt_name">课程状态</div>
<div class="select fitems"> <div class="select fitems">
@@ -44,6 +45,7 @@
</a-select> </a-select>
</div> </div>
</div> </div>
-->
</div> </div>
<div class="mi_btns"> <div class="mi_btns">
<div class="btn btn1" @click="search"> <div class="btn btn1" @click="search">
@@ -113,9 +115,9 @@
:loading="tableDataTotal === -1 ? true : false" :loading="tableDataTotal === -1 ? true : false"
:pagination="false" :pagination="false"
/> />
<div class="pa"> <div class="pa" style="display:flex;justify-content:center;padding:20px;">
<a-pagination <a-pagination
v-if="total > 10" v-if="tableDataTotal > 10"
showSizeChanger="true" showSizeChanger="true"
showQuickJumper="true" showQuickJumper="true"
hideOnSinglePage="true" hideOnSinglePage="true"
@@ -134,7 +136,7 @@
</template> </template>
<script> <script>
//import { ApiFilled } from "@ant-design/icons-vue"; //import { ApiFilled } from "@ant-design/icons-vue";
import {reactive, toRefs, ref, computed} from "vue"; import {reactive, toRefs, computed} from "vue";
// import { planList } from "../../api/indexTaskadd"; // import { planList } from "../../api/indexTaskadd";
//import {detail} from "../../api/indexCourse"; //import {detail} from "../../api/indexCourse";
import {list} from "../../api/indexTaskadd"; import {list} from "../../api/indexTaskadd";
@@ -279,14 +281,14 @@ export default {
//获取面授课列表 //获取面授课列表
const getClassList = (obj) => { const getClassList = (obj) => {
let objn = obj || { let objn = obj || {
auditStatus: state.auditStatus, auditStatus:2,
name: state.name, name: state.name,
pageNo: state.currentPage, pageNo: state.currentPage,
pageSize: state.pageSize pageSize: state.pageSize
}; };
list(objn) list(objn)
.then((res) => { .then((res) => {
console.log(res.data.data.rows); console.log('面授课列表', res.data.data);
let result = res.data.data; let result = res.data.data;
state.tableDataTotal = result.total; state.tableDataTotal = result.total;
getClassData(result.rows); getClassData(result.rows);
@@ -314,7 +316,7 @@ export default {
}); });
state.classTableData = array; state.classTableData = array;
}; };
/**
const options1 = ref([ const options1 = ref([
{ {
value: 0, value: 0,
@@ -328,11 +330,8 @@ export default {
value: 2, value: 2,
label: "已审核", label: "已审核",
}, },
{
value: -1, ]);*/
label: "审核未通过",
},
]);
const handleChange = (value, option) => { const handleChange = (value, option) => {
console.log("改变了", value, option); console.log("改变了", value, option);
console.log(state.valueContent); console.log(state.valueContent);
@@ -359,7 +358,7 @@ export default {
// showDrawerSelFacet, // showDrawerSelFacet,
afterVisibleChange, afterVisibleChange,
closeDrawer, closeDrawer,
options1,
columns1, columns1,
getClassData, getClassData,
handleChange, handleChange,

View File

@@ -1,5 +1,10 @@
<template> <template>
<a-tree-select <a-tree-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="id" v-model:value="id"
style="width: 100%" style="width: 100%"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
@@ -11,58 +16,36 @@
label: 'name', label: 'name',
value: 'id', value: 'id',
}" }"
:disabled="viewDetail ? true : false" :disabled="disabled"
@change="change" @change="change"
dropdownClassName="treeDropdown" dropdownClassName="treeDropdown"
> >
</a-tree-select> </a-tree-select>
</template> </template>
<script> <script setup>
import {onMounted, reactive, toRefs, watch} from "vue"; import {computed, defineEmits, defineProps, onMounted, ref} from "vue";
import {useStore} from "vuex"; import {useStore} from "vuex";
export default { const store = useStore();
name: "OrgClass",
props: { const props = defineProps({
modelValue: { value: String
type: Number, })
}, const emit = defineEmits({})
name: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({ const options = ref([])
options: [],
id: props.value
});
watch(state.id, () => {
ctx.emit('update:modelValue', state.id)
})
watch(props, () => {
if (props.modelValue !== state.id) {
state.id = props.modelValue
}
})
onMounted(() => {
state.options = [...store.state.orgtreeList]
})
function change(key, obj) { const id = computed(() => {
ctx.emit('update:name', obj[0]) return props.value
} })
onMounted(() => {
options.value = [...store.state.orgtreeList]
})
function change(key, obj) {
emit('update:name', obj[0])
emit('update:value', key)
}
return {
...toRefs(state),
change
};
},
};
</script> </script>

View File

@@ -1,55 +1,46 @@
<!-- 评估管理-创建评估页面 --> <!-- 评估管理-创建评估页面 -->
<template> <template>
<a-select <a-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="id" v-model:value="id"
placeholder="请选择分类" placeholder="请选择分类"
style="width: 100%" style="width: 100%"
:options="options" :options="options"
allowClear allowClear
@change="change"
:disabled="disabled" :disabled="disabled"
> >
</a-select> </a-select>
</template> </template>
<script> <script setup>
import {onMounted, reactive, toRefs, watch} from "vue"; import {computed, defineEmits, defineProps, onMounted, ref} from "vue";
import {useStore} from "vuex"; import {useStore} from "vuex";
export default { const store = useStore();
name: "ProjectClass",
props: { const props = defineProps({
modelValue: { value: String,
type: Number, disabled: String
}, })
disabled: { const emit = defineEmits({})
type: Boolean,
default: false
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({ const options = ref([])
options: [],
id: props.modelValue
});
watch(props, () => { const id = computed(() => {
if (props.modelValue !== state.id) { return props.value
state.id = props.modelValue })
}
}) onMounted(() => {
options.value = store.state.projectClass.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
watch(state.id,()=>{ })
ctx.emit('update:modelValue',state.id)
}) function change(key, obj) {
emit('update:name', obj[0])
emit('update:value', key)
}
onMounted(() => {
state.options = store.state.projectClass.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
})
return {
...toRefs(state),
};
},
};
</script> </script>

View File

@@ -1,45 +1,42 @@
<template> <template>
<a-select <a-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="id" v-model:value="id"
:options="options" :options="options"
style="width: 100%" style="width: 100%"
placeholder="请选择项目级别" placeholder="请选择项目级别"
@change="change"
:disabled="disabled" :disabled="disabled"
/> />
</template> </template>
<script> <script setup>
import {onMounted, reactive, toRefs, watch} from "vue"; import {computed, defineEmits, defineProps, onMounted, ref} from "vue";
import {useStore} from "vuex"; import {useStore} from "vuex";
export default {
name: "ProjectClass",
props: { const store = useStore();
modelValue: { const props = defineProps({
type: Number, value: String,
}, disabled: String
disabled: { })
type: Boolean,
default: false
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({ const id = computed(() => {
options: [], return props.value
id: props.modelValue })
});
watch(state.id, () => {
ctx.emit('update:modelValue', state.id)
})
onMounted(() => { const emit = defineEmits({})
state.options = store.state.projectLevel.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
}) const options = ref([])
return {
...toRefs(state), onMounted(() => {
}; options.value = store.state.projectLevel.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
}, })
};
function change(key) {
emit('update:value', key)
}
</script> </script>

View File

@@ -1,5 +1,10 @@
<template> <template>
<a-select <a-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="managerArray" v-model:value="managerArray"
:placeholder="placeholder" :placeholder="placeholder"
:filterOption="false" :filterOption="false"
@@ -28,10 +33,12 @@ export default {
props: { props: {
value: { value: {
type: Number, type: String,
default: ''
}, },
name: { name: {
type: Number, type: String,
default: ''
}, },
disabled: { disabled: {
type: Boolean, type: Boolean,
@@ -55,9 +62,9 @@ export default {
loading: false, loading: false,
init: false init: false
}); });
const getMemberThrottle = throttle(getMember, 500)
watch(() => state.memberParam, getMemberThrottle) watch(()=>state.memberParam.keyWord , throttle(getMember, 500))
watch(()=>state.memberParam.pageNo , throttle(getPushMember, 500))
watch(props, init) watch(props, init)
onMounted(() => { onMounted(() => {
@@ -71,15 +78,21 @@ export default {
getMemberData() getMemberData()
} }
function getPushMember() {
state.loading = true
getMemberData()
}
function getMemberData() { function getMemberData() {
console.log('getMemberData')
api1.getMemberInfo(state.memberParam).then((res) => { api1.getMemberInfo(state.memberParam).then((res) => {
const list = res.data.data.rows.filter(e => !props.value?.includes(e.id + '')).map(e => ({ const list = res.data.data.rows.filter(e => !(props.value + '')?.includes(e.id + '')).map(e => ({
label: e.realName, label: e.realName,
value: e.id value: e.id
})); }));
if (state.memberParam.pageNo === 1 && props.value) { if (state.memberParam.pageNo === 1 && props.value) {
const arrManagerId = props.value.split(',') const arrManagerId = (props.value + '').split(',')
const arrManager = props.name.split(',') const arrManager = props.name.split(',')
state.options = [...arrManager.map((e, i) => ({label: e, value: arrManagerId[i]})), ...list] state.options = [...arrManager.map((e, i) => ({label: e, value: arrManagerId[i]})), ...list]
} else state.options.push(...list) } else state.options.push(...list)
@@ -102,10 +115,11 @@ export default {
function init() { function init() {
console.log('init--', props) console.log('init--', props)
if (props.value !== typeof state.managerArray === 'object' ? state.managerArray.join(',') : state.managerArray) { console.log(Array.isArray(state.managerArray))
if ((props.value + '') !== (Array.isArray(state.managerArray) ? state.managerArray.join(',') : (state.managerArray + ''))) {
if (props.value) { if (props.value) {
const arrManager = props.name.split(',') const arrManager = props.name.split(',')
const arrManagerId = props.value.split(',') const arrManagerId = (props.value + '').split(',')
state.managerArray = props.mode === 'select' ? props.value : arrManagerId; state.managerArray = props.mode === 'select' ? props.value : arrManagerId;
state.options = arrManager.map((e, i) => ({label: e, value: arrManagerId[i]})) state.options = arrManager.map((e, i) => ({label: e, value: arrManagerId[i]}))
} else { } else {
@@ -124,7 +138,7 @@ export default {
} }
function change(e, l) { function change(e, l) {
console.log('change') console.log('change', l)
if (Array.isArray(l)) { if (Array.isArray(l)) {
ctx.emit('update:value', l.map(t => t.value).join(',')) ctx.emit('update:value', l.map(t => t.value).join(','))
ctx.emit('update:name', l.map(t => t.label).join(',')) ctx.emit('update:name', l.map(t => t.label).join(','))

View File

@@ -0,0 +1,126 @@
<template>
<a-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="managerArray"
:placeholder="placeholder"
:filterOption="true"
style="width: 100%"
:options="options"
allowClear
showSearch
:mode="mode"
:disabled="disabled"
@popupScroll="memberScroll"
@search="searchMember"
@change="change"
>
<template v-if="loading" #notFoundContent>
<a-spin size="small"/>
</template>
</a-select>
</template>
<script setup>
import {computed, defineEmits, defineProps, onMounted, ref, watch} from "vue";
import {scrollLoad, throttle} from "@/api/method";
import * as api1 from "@/api/index1";
import {useStore} from "vuex";
const props = defineProps({
value: {
type: String,
default: ''
},
name: {
type: String,
default: ''
},
disabled: Boolean,
placeholder: String,
mode: String
})
const store = useStore();
const managerArray = computed(() => {
return props.mode === 'select' ? props.value : props.value.split(',')
})
const emit = defineEmits({})
const options = ref([])
const memberParam = ref({keyWord: '', pageNo: 1, pageSize: 10})
const loading = ref(false)
watch(() => memberParam.value.keyWord, throttle(getSearchMember, 500))
watch(() => memberParam.value.pageNo, throttle(getPageMember, 500))
onMounted(() => {
console.log('onMounted')
const memberOptions = store.state.memberInitInfo.map(e => ({
label: e.realName,
value: e.id
}))
if (props.value) {
options.value = [...(props.value + '').split(',').map((value, i) => ({
label: (props.name + '').split(',')[i],
value
})), ...memberOptions]
} else options.value = memberOptions
})
function getSearchMember() {
loading.value = true
options.value = []
getMemberData()
}
function getPageMember() {
loading.value = true
getMemberData()
}
function getMemberData() {
api1.getMemberInfo(memberParam.value).then((res) => {
const list = res.data.data.rows.filter(e => !(props.value + '').includes(e.id)).map(e => ({
label: e.realName,
value: e.id
}));
if (memberParam.value.pageNo === 1 && props.value) {
const arrManagerId = (props.value + '').split(',')
const arrManager = props.name.split(',')
options.value = [...arrManager.map((e, i) => ({label: e, value: arrManagerId[i]})), ...list]
} else options.value.push(...list)
loading.value = false
});
}
const memberScroll = (e) => {
let num = scrollLoad(e);
if (num === 2) {
memberParam.value.pageNo++;
}
};
//搜索学员
const searchMember = (keyWord) => {
keyWord && (memberParam.value = {keyWord, pageNo: 1, pageSize: 10});
};
function change(e, l) {
console.log('change', l)
if (Array.isArray(l)) {
emit('update:value', l.map(t => t.value).join(','))
emit('update:name', l.map(t => t.label).join(','))
} else {
emit('update:value', l.value)
emit('update:name', l.label)
}
}
</script>

View File

@@ -1,52 +1,43 @@
<template> <template>
<a-select <a-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="id" v-model:value="id"
:options="options" :options="options"
style="width: 100%" style="width: 100%"
placeholder="请选择分类" placeholder="请选择分类"
@change="change"
:disabled="disabled" :disabled="disabled"
/> />
</template> </template>
<script> <script setup>
import {onMounted, reactive, toRefs, watch} from "vue"; import {computed, defineEmits, defineProps, onMounted, ref} from "vue";
import {useStore} from "vuex"; import {useStore} from "vuex";
export default { const store = useStore();
name: "TrainClass",
props: { const props = defineProps({
modelValue: { value: String,
type: Number, disabled: String
}, })
disabled: {
type: Boolean,
default: false
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({ const id = computed(() => {
options: [], return props.value
id: props.modelValue })
});
watch(state.id, () => {
ctx.emit('update:modelValue', state.id)
})
watch(props, () => { const emit = defineEmits({})
if (props.modelValue !== state.id) {
state.id = props.modelValue
}
})
const options = ref([])
onMounted(() => {
options.value = store.state.projectSys.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
})
function change(key) {
emit('update:value', key)
}
onMounted(() => {
state.options = store.state.projectSys.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
})
return {
...toRefs(state),
};
},
};
</script> </script>

View File

@@ -6,60 +6,68 @@
* @FilePath: /fe-manage/src/store/index.js * @FilePath: /fe-manage/src/store/index.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
import { createStore } from "vuex"; import {createStore} from "vuex";
// import * as api from '../api/index1' // import * as api from '../api/index1'
export default createStore({ export default createStore({
state: { state: {
openpages: localStorage.getItem("openpages") openpages: localStorage.getItem("openpages")
? JSON.parse(localStorage.getItem("openpages")) ? JSON.parse(localStorage.getItem("openpages"))
: [ : [
{ {
pagename: "学习路径图", pagename: "学习路径图",
href: "/learningpath", href: "/learningpath",
active: true, active: true,
},
],
assessmentName: "",
routerId: null,
projectTemplateId: null,
userInfo: {},
orgtreeList: [],
faceclassPic: null,
faceclassClass: [],
faceclassScene: [],
projectLevel: [],//项目级别
projectSys: [],//培训分类
pathmapPic: [],//学习路径背景图
memberInitInfo: [],//学员默认
},
getters: {},
mutations: {
chengeOpenpages(state, list) {
// console.log('list', list)
state.openpages = list;
},
chengeRouterId(state, routerId) {
// console.log('list', list)
state.routerId = routerId;
}, },
],
assessmentName: "", SET_assessmentName(state, name) {
routerId: null, state.assessmentName = name;
projectTemplateId: null, console.log("state.assessmentName");
orgtreeList: [], console.log(state.assessmentName);
faceclassPic: null, },
faceclassClass: [], //获取组织树
faceclassScene: [], getOrgtreeList(state, data) {
projectLevel: [],//项目级别 state.orgtreeList = data
projectSys: [],//培训分类 },
pathmapPic: [],//学习路径背景图 SET_DICT(state, {key, data}) {
}, state[key] = data
getters: {}, },
mutations: { SET_MEMBER_INFO(state, data) {
chengeOpenpages(state, list) { state.memberInitInfo = data
// console.log('list', list) },
state.openpages = list; SET_USER(state, userInfo) {
}, state.userInfo = userInfo
chengeRouterId(state, routerId) { },
// console.log('list', list) SET_projectTemplateId(state, projectTemplateId) {
state.routerId = routerId; state.projectTemplateId = projectTemplateId;
}, }
SET_assessmentName(state, name) {
state.assessmentName = name;
console.log("state.assessmentName");
console.log(state.assessmentName);
},
//获取组织树
getOrgtreeList(state, data) {
state.orgtreeList = data
},
SET_DICT(state, { key, data }) {
state[key] = data
},
SET_projectTemplateId(state, projectTemplateId) {
state.projectTemplateId = projectTemplateId;
}
}, },
actions: {}, actions: {},
modules: {}, modules: {},
}); });

File diff suppressed because it is too large Load Diff

View File

@@ -230,13 +230,14 @@
</div> </div>
</div> </div>
<div class="mbl_items"> <div class="mbl_items">
<div class="item_nam"> <div v-if="(attachMap.length>0)" class="item_nam">
<span style="margin-right: 10px">附件</span> <span style="margin-right: 10px">附件</span>
</div> </div>
<div class="item_inp" v-for="(value, index) in attachMap" :key="index"> <div class="item_inp" v-for="(value, index) in attachMap" :key="index">
<a :src="value"> <a>
{{ ['附件一', '附件二', '附件三', '附件四', '附件五', '附件六'][index] }} {{ ['附件一', '附件二', '附件三', '附件四', '附件五', '附件六'][index] }}
</a> </a>
<a style="margin-left:120px;" :src="value" :href="value">查看</a>
<!-- <a-upload multiple :show-upload-list="false" :before-upload="beforeUpload2"> <!-- <a-upload multiple :show-upload-list="false" :before-upload="beforeUpload2">
<div class="accessory" style="cursor: pointer"> <div class="accessory" style="cursor: pointer">
<div class="accessory_icon"> <div class="accessory_icon">
@@ -287,9 +288,9 @@
</div> </div>
<div class="fotarea"> <div class="fotarea">
<div style="border: 1px solid #ccc"> <div style="border: 1px solid #ccc">
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" <!-- <Toolbar style="border-bottom: 1px solid #ccc;width:900px;height: 300px;" :defaultConfig="toolbarConfig"
:mode="mode" /> :mode="mode" /> -->
<Editor v-model="valueHtml" :defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" /> <Editor @focus="onEditorFocus" style="border-bottom: 1px solid #ccc;width:900px;height: 300px;" v-model="valueHtml" :defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" />
</div> </div>
</div> </div>
</div> </div>
@@ -319,7 +320,7 @@ import { reactive, toRefs, onMounted, ref } from "vue";
import { list, courseAuditView, courseDetail } from "../../api/indexAudit"; import { list, courseAuditView, courseDetail } from "../../api/indexAudit";
import { toDate } from "../../api/method"; import { toDate } from "../../api/method";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue"; import { Editor } from "@wangeditor/editor-for-vue";
import { iframeUrl } from "../../api/method"; import { iframeUrl } from "../../api/method";
import * as api1 from "@/api/index1"; import * as api1 from "@/api/index1";
@@ -327,7 +328,7 @@ export default {
name: "CoursereViewedN", name: "CoursereViewedN",
components: { components: {
Editor, Editor,
Toolbar, // Toolbar,
}, },
setup() { setup() {
const state = reactive({ const state = reactive({
@@ -505,7 +506,7 @@ export default {
state.faceDetailObj = result; state.faceDetailObj = result;
heroImg.value.src = result.picUrl heroImg.value.src = result.picUrl
valueHtml.value = result.outline valueHtml.value = result.outline
attachMap.value = result.attach.split(",") attachMap.value = result.attach==""?[]:result.attach.split(",")
console.log(result, attachMap.value); console.log(result, attachMap.value);
}) })
.catch((err) => { .catch((err) => {
@@ -654,6 +655,11 @@ export default {
//获取分类列表 //获取分类列表
state.calssifyList = (await getDictList("faceclassClass")).map(e => ({ label: e.dictName, value: e.dictCode })) state.calssifyList = (await getDictList("faceclassClass")).map(e => ({ label: e.dictName, value: e.dictCode }))
}); });
// 禁止用户编辑文本框内容
const onEditorFocus = (event) => {
event.enable(false);
}
return { return {
...toRefs(state), ...toRefs(state),
getFaceList, getFaceList,
@@ -671,7 +677,8 @@ export default {
valueHtml, valueHtml,
attachMap, attachMap,
contentList11, contentList11,
sceneist11 sceneist11,
onEditorFocus
}; };
}, },
}; };

View File

@@ -188,6 +188,7 @@ export default {
key: "topName", key: "topName",
align: "center", align: "center",
width: "10%", width: "10%",
customRender: ({record: {parentId,name}}) => <div>{parentId==0?name:(parentId)}</div>,
}, },
{ {
title: "项目经理", title: "项目经理",
@@ -219,6 +220,7 @@ export default {
dataIndex: "description", dataIndex: "description",
key: "description", key: "description",
align: "center", align: "center",
customRender: ({record: {auditList,description}}) => <div>{auditList.length!==0?auditList[auditList.length-1].description?auditList[auditList.length-1].description:'-':description?description:'-'}</div>,
}, },
{ {
@@ -290,6 +292,7 @@ export default {
status: 1, status: 1,
}; };
auditedlist(objn).then((res) => { auditedlist(objn).then((res) => {
console.log('获取已审核项目列表数据',res)
let result = res.data.data; let result = res.data.data;
state.total = res.data.data.total; state.total = res.data.data.total;
state.tableData1 = result.rows state.tableData1 = result.rows
@@ -347,7 +350,7 @@ export default {
reset, reset,
closeProjAuditModal, closeProjAuditModal,
showProjAuditModal, showProjAuditModal,
setAudit, setAudit
}; };
}, },
}; };

View File

@@ -589,20 +589,20 @@
/> />
<!-- 查看权抽屉 --> <!-- 查看权抽屉 -->
<proj-check-ship <proj-check-ship
v-model:ProjCheckvisible="Queryvisible" v-model:ProjCheckvisible="showCheck"
:selectProjectId="selectPathId" v-model:selectProjectId="selectPathId"
v-model:addAuthList="addAuthList" v-model:addAuthList="addAuthList"
:authClassify="authClassify" v-model:authClassify="authClassify"
classify="learnPath" classify="learnPath"
/> />
<!-- 管理权抽屉 --> <!-- 管理权抽屉 -->
<proj-check-ship <!-- <proj-check-ship
v-model:ProjCheckvisible="Managevisible" v-model:ProjCheckvisible="Managevisible"
:selectProjectId="selectPathId" :selectProjectId="selectPathId"
v-model:addAuthList="addAuthList" v-model:addAuthList="addAuthList"
:authClassify="authClassify" :authClassify="authClassify"
classify="learnPath" classify="learnPath"
/> /> -->
<!-- 创建路径loading --> <!-- 创建路径loading -->
<!-- 更多背景图 v-model:visible="learnBgMore" --> <!-- 更多背景图 v-model:visible="learnBgMore" -->
@@ -733,6 +733,7 @@ export default {
PLvisible: false, //授权名单抽屉 PLvisible: false, //授权名单抽屉
Queryvisible: false, //查看权抽屉 Queryvisible: false, //查看权抽屉
Managevisible: false, //管理权抽屉 Managevisible: false, //管理权抽屉
showCheck: false,
value1: "", value1: "",
value2: "", value2: "",
@@ -991,12 +992,12 @@ export default {
const showQuery = (id) => { const showQuery = (id) => {
state.authClassify = 1; state.authClassify = 1;
state.selectPathId = id; state.selectPathId = id;
state.Queryvisible = true; state.showCheck = true;
}; };
const showManage = (id) => { const showManage = (id) => {
state.authClassify = 2; state.authClassify = 2;
state.selectPathId = id; state.selectPathId = id;
state.Managevisible = true; state.showCheck = true;
}; };
const getTableDate = (tableData) => { const getTableDate = (tableData) => {
let data = tableData; let data = tableData;
@@ -1713,6 +1714,7 @@ export default {
}); });
} }
); );
return { return {
...toRefs(state), ...toRefs(state),
selectProjectName, selectProjectName,

View File

@@ -98,7 +98,7 @@
<div class="taskmain">快速创建项目详情</div> <div class="taskmain">快速创建项目详情</div>
</div> </div>
<div class="second"> <div class="second">
<router-link :to="{ path: '/leveladddetail' }"> <div @click="totask">
<div <div
class="taskbox" class="taskbox"
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)" style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"
@@ -117,10 +117,10 @@
</div> </div>
<div class="centermain">快速添加任务/关卡</div> <div class="centermain">快速添加任务/关卡</div>
</div> </div>
</router-link> </div>
<div <div
class="taskbox" class="taskbox"
@click="showAddStu" @click="tostudent"
style="background: linear-gradient(180deg, #ddeaff, #f0f8fe)" style="background: linear-gradient(180deg, #ddeaff, #f0f8fe)"
> >
<div class="leftt"> <div class="leftt">
@@ -415,31 +415,33 @@
> >
<img <img
:src=" :src="
item.type === 1 item.type == 1
? require('../../assets/images/leveladd/zai.png') ? require('../../assets/images/leveladd/zai.png')
: type === 2 : item.type == 2
? require('../../assets/images/leveladd/mian.png') ? require('../../assets/images/leveladd/mian.png')
: item.type === 3 : item.type == 3
? require('../../assets/images/leveladd/an.png') ? require('../../assets/images/leveladd/an.png')
: item.type === 4 : item.type == 4
? require('../../assets/images/leveladd/zuo.png') ? require('../../assets/images/leveladd/zuo.png')
: item.type === 5 : item.type == 5
? require('../../assets/images/leveladd/kao.png') ? require('../../assets/images/leveladd/kao.png')
: item.type === 6 : item.type == 6
? require('../../assets/images/leveladd/zhi.png') ? require('../../assets/images/leveladd/zhi.png')
: item.type === 7 : item.type == 7
? require('../../assets/images/leveladd/wai.png') ? require('../../assets/images/leveladd/wai.png')
: item.type === 8 : item.type == 8
? require('../../assets/images/leveladd/tao.png') ? require('../../assets/images/leveladd/tao.png')
: item.type === 9 : item.type == 9
? require('../../assets/images/leveladd/huo.png') ? require('../../assets/images/leveladd/huo.png')
: item.type === 10 : item.type == 10
? require('../../assets/images/leveladd/ce.png') ? require('../../assets/images/leveladd/ce.png')
: item.type === 11 : item.type == 11
? require('../../assets/images/leveladd/diao.png') ? require('../../assets/images/leveladd/pinggu.png')
: item.type === 12 : item.type == 12
? require('../../assets/images/leveladd/tou.png') ? require('../../assets/images/leveladd/tou.png')
: null : item.type == 13
? require('../../assets/images/leveladd/tou.png')
: require('../../assets/images/leveladd/xiangmu.png')
" "
/> />
</div> </div>
@@ -458,11 +460,11 @@
</div> </div>
<div class="time"> <div class="time">
<div class="timetext">开始时间</div> <div class="timetext">开始时间</div>
<div class="timetext">{{ item.beginTime }}</div> <div class="timetext">{{ item.startTime!==null?item.startTime:''}}</div>
</div> </div>
<div class="progress"> <div class="progress">
<div class="progresstext"> <div class="progresstext">
{{ item.complete }}/{{ item.total }} {{ item.complete?item.complete:0 }}/{{ item.total?item.total:0 }}
</div> </div>
<div style="display: flex"> <div style="display: flex">
<a-progress <a-progress
@@ -472,7 +474,7 @@
trailColor="rgba(253, 209, 98, 0.2)" trailColor="rgba(253, 209, 98, 0.2)"
/> />
<span class="progresstext" style="margin-left: 10px" <span class="progresstext" style="margin-left: 10px"
>{{ item.percent }}%</span >{{ item.percent?item.percent:0 }}%</span
> >
</div> </div>
</div> </div>
@@ -771,7 +773,7 @@
</div> </div>
<div class="btnbox" style="margin: 20px"> <div class="btnbox" style="margin: 20px">
<a-upload <a-upload
v-if="(docChecked==true)" v-if="docChecked == true"
v-model:file-list="fileList" v-model:file-list="fileList"
name="file" name="file"
action="/manageApi/file/upload" action="/manageApi/file/upload"
@@ -788,7 +790,11 @@
alt="" alt=""
/> />
</a-upload> </a-upload>
<div v-if="(docChecked==true)" class="btnbox" style="margin: 20px"> <div
v-if="docChecked == true"
class="btnbox"
style="margin: 20px"
>
<span style="color: #999999"> <span style="color: #999999">
支持pdf.ppt.pptx.doc.docx.xls.xlsx.jpeg.png.gif.zip 支持pdf.ppt.pptx.doc.docx.xls.xlsx.jpeg.png.gif.zip
</span> </span>
@@ -992,7 +998,7 @@
<div class="header"> <div class="header">
<div class="icon"></div> <div class="icon"></div>
<span>活动管理</span> <span>活动管理</span>
<div class="close_exit" @click="closehuodModal"></div> <!-- <div class="close_exit" @click="closehuodModal"></div> -->
</div> </div>
<div class="body"> <div class="body">
<div><img src="../../assets/images/taskpage/erweima.png" /></div> <div><img src="../../assets/images/taskpage/erweima.png" /></div>
@@ -1882,6 +1888,7 @@ export default {
const getOverview = () => { const getOverview = () => {
getRouterOverview(state.routerId) getRouterOverview(state.routerId)
.then((res) => { .then((res) => {
console.log(res)
Object.keys(res.data.data.routerInfoOverview).forEach((item) => { Object.keys(res.data.data.routerInfoOverview).forEach((item) => {
levelList.routerInfoOverview[item] = levelList.routerInfoOverview[item] =
res.data.data.routerInfoOverview[item] || 0; res.data.data.routerInfoOverview[item] || 0;
@@ -1894,7 +1901,7 @@ export default {
// console.log(r) // console.log(r)
// }) // })
state.addLoading = false; state.addLoading = false;
console.log("项目概览--" + res); console.log("项目概览--", res);
}) })
.catch((err) => { .catch((err) => {
state.addLoading = false; state.addLoading = false;
@@ -1906,6 +1913,8 @@ export default {
const myGetRouterDetail = () => { const myGetRouterDetail = () => {
GetRouterDetail(state.routerId) GetRouterDetail(state.routerId)
.then((res) => { .then((res) => {
console.log('router-list',res)
state.fileList = JSON.parse(res.data.data.routerInfo.attach)
if (res.data.data.routerInfo.status == 1) { if (res.data.data.routerInfo.status == 1) {
state.nodata = false; state.nodata = false;
} }
@@ -2111,6 +2120,15 @@ export default {
}); });
} }
); );
const totask = () => {
state.activeKey = "2";
};
const tostudent = () => {
state.activeKey = "3";
getStudent();
// state.activeKey1 = "8";
};
return { return {
...toRefs(state), ...toRefs(state),
...toRefs(levelList), ...toRefs(levelList),
@@ -2162,6 +2180,8 @@ export default {
setconfig, setconfig,
deFile, deFile,
deleteStu, deleteStu,
totask,
tostudent,
}; };
}, },
}; };

View File

@@ -1385,10 +1385,13 @@ export default {
const dataAssignment = (id) => { const dataAssignment = (id) => {
console.log(state.level); console.log(state.level);
for (let i = 0; i < state.level.length; i++) { for (let i = 0; i < state.level.length; i++) {
if (state.level[i].chapterId === id) { console.log("state.level[i].chapterId", state.level[i].chapterId, id);
if (state.level[i].chapterId == Number(id)) {
let array = []; let array = [];
state.chooseProjectList = JSON.stringify(state.level[i].taskList); state.chooseProjectList = JSON.stringify(state.level[i].taskList);
console.log("state.level[i].taskList", state.level[i].taskList);
state.level[i].taskList.forEach((element) => { state.level[i].taskList.forEach((element) => {
// console.log("element", element);
let obj = { let obj = {
id: element.routerTaskId, id: element.routerTaskId,
key: element.routerTaskId, key: element.routerTaskId,
@@ -1403,9 +1406,12 @@ export default {
routerId: element.routerId, routerId: element.routerId,
chapterId: element.chapterId, chapterId: element.chapterId,
}; };
// console.log("obj", obj);
array.push(obj); array.push(obj);
// console.log("array", array);
}); });
state.tableData = array; state.tableData = array;
// console.log("tableData", state.tableData);
} }
} }
}; };
@@ -1432,12 +1438,15 @@ export default {
}); });
console.log("路径图详情", res); console.log("路径图详情", res);
if (state.level.length > 0) { if (state.level.length > 0) {
let chapter = localStorage.getItem("chapterId"); let chapter = localStorage.getItem("chapterId")
// console.log("chapter", chapter, chapter !== "null"); ? JSON.parse(localStorage.getItem("chapterId"))
: null;
console.log("chapter", chapter);
if (chapter) { if (chapter) {
dataAssignment(chapter); //用哪个的任务表 dataAssignment(chapter); //用哪个的任务表
state.isactive = chapter; //哪个亮 state.isactive = chapter; //哪个亮
} else { } else {
console.log("state.level[0]", state.level[0]);
dataAssignment(state.level[0].chapterId); dataAssignment(state.level[0].chapterId);
state.isactive = state.level[0].chapterId; state.isactive = state.level[0].chapterId;
} }
@@ -1740,7 +1749,7 @@ export default {
const moveTask = () => { const moveTask = () => {
if (state.isactive == state.removeStageId) { if (state.isactive == state.removeStageId) {
message.destroy(); message.destroy();
message.warning("选择的任务已在当前阶段"); message.warning("选择的任务已在当前关卡");
} else if (state.removeStageId == null) { } else if (state.removeStageId == null) {
message.destroy(); message.destroy();
message.warning("请选择关卡"); message.warning("请选择关卡");

View File

@@ -15,7 +15,7 @@
</div> </div>
</div> </div>
<div class="right"> <div class="right">
<img class="img1" src="../../assets/images/leveladd/ma.png" /> <!-- <img class="img1" src="../../assets/images/leveladd/ma.png" />
<div class="line"></div> <div class="line"></div>
<img class="img2" src="../../assets/images/projectadd/ending.png" /> <img class="img2" src="../../assets/images/projectadd/ending.png" />
<div class="pub">结束项目</div> <div class="pub">结束项目</div>
@@ -33,7 +33,7 @@
<div class="sammo">复制</div> <div class="sammo">复制</div>
</div> </div>
</div> </div>
<div class="line"></div> <div class="line"></div> -->
<router-link to="/templatelibrary" <router-link to="/templatelibrary"
><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" />

View File

@@ -2,12 +2,14 @@
<template> <template>
<div class="projectAdd"> <div class="projectAdd">
<div class="header"> <div class="header">
<span class="title">{{ projectInfo.parentId ? '编辑' : '创建' }}项目</span> <span class="title"
>{{ projectInfo.parentId ? "编辑" : "创建" }}项目</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>
@@ -17,8 +19,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>
@@ -31,26 +33,26 @@
<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-input <a-input
v-model:value="projectInfo.name" v-model:value="projectInfo.name"
placeholder="请输入项目名称" placeholder="请输入项目名称"
show-count show-count
:maxlength="30" :maxlength="30"
: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>
@@ -61,14 +63,14 @@
<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 <div
:class="`box ${projectInfo.picUrl == src?'active':''}`" :class="`box ${projectInfo.picUrl == src ? 'active' : ''}`"
style=" style="
width: 100px; width: 100px;
height: 100px; height: 100px;
border-radius: 5px; border-radius: 5px;
@@ -76,68 +78,77 @@
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="()=>{ @click="
projectInfo.picUrl = src () => {
}" projectInfo.picUrl = src;
}
"
> >
<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" :src="src"
alt="avatar" alt="avatar"
/> />
</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">
<a-range-picker <a-range-picker
separator="至" separator="至"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="[' 开始时间', ' 结束时间']"
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:ss" valueFormat="YYYY-MM-DD HH:mm:ss"
@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 v-model:value="projectInfo.managerId" v-model:name="projectInfo.manager" mode="multiple"></ProjectManager> <ProjectManager
v-model:value="projectInfo.managerId"
v-model:name="projectInfo.manager"
mode="multiple"
></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 v-model:value="projectInfo.sourceBelongId" v-model:name="projectInfo.sourceBelongName"></OrgClass> <OrgClass
v-model:value="projectInfo.sourceBelongId"
v-model:name="projectInfo.sourceBelongName"
></OrgClass>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -146,12 +157,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>
@@ -160,26 +171,39 @@
<div class="inname">同步学习记录</div> <div class="inname">同步学习记录</div>
</div> </div>
<div class="in"> <div class="in">
<a-switch <a-checkbox
v-model:checked="projectInfo.courseSyncFlag" v-model:checked="courseSyncFlag"
:checkedValue="1" :disabled="viewDetail ? true : false"
:unCheckedValue="0" ><span
:disabled="viewDetail ? true : false"
><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-switch> ></a-checkbox
>
<!-- <a-switch
v-model:checked="projectInfo.courseSyncFlag"
:checkedValue="1"
:unCheckedValue="0"
:disabled="viewDetail ? true : false"
><span
style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-switch
> -->
</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>
@@ -190,8 +214,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>
@@ -201,19 +225,30 @@
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<!-- <img-->
<!-- class="nameimg"-->
<!-- src="../../assets/images/basicinfo/asterisk.png"-->
<!-- />-->
<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-switch <!-- <a-switch
v-model:checked="projectInfo.boeFlag" v-model:checked="projectInfo.boeFlag"
:checkedValue="1" :checkedValue="1"
:unCheckedValue="0" :unCheckedValue="0"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
></a-switch> ></a-switch> -->
<a-radio-group
v-model:value="projectInfo.boeFlag"
:disabled="viewDetail ? true : false"
>
<a-radio :style="radioStyle" :value="1"></a-radio>
<a-radio :style="radioStyle" :value="0"></a-radio>
</a-radio-group>
</div> </div>
</div> </div>
</div> </div>
@@ -222,19 +257,19 @@
<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" v-model:value="classifySelect5"
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',
}" }"
@@ -247,26 +282,25 @@
<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 @click="backPage" class="btn2">取消</a-button> <a-button @click="backPage" class="btn2">取消</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/ProjectManager"; import ProjectManager from "@/components/project/ProjectManager";
import ProjectLevel from "@/components/project/ProjectLevel"; import ProjectLevel from "@/components/project/ProjectLevel";
import {scrollLoad} from "@/api/method"; import { scrollLoad } from "@/api/method";
export default { export default {
name: "projectAdd", name: "projectAdd",
@@ -275,7 +309,7 @@ export default {
ProjectLevel, ProjectLevel,
ProjectClass, ProjectClass,
TrainClass, TrainClass,
OrgClass OrgClass,
}, },
setup() { setup() {
const store = useStore(); const store = useStore();
@@ -294,37 +328,48 @@ export default {
pageSize: 10, pageSize: 10,
keyWord: "", keyWord: "",
}, },
classifyList5: [] classifyList5: [],
courseSyncFlag: false,
}); });
onMounted(() => { onMounted(() => {
state.projectPic = store.state.projectPic.map(e => e.dictValue) state.projectPic = store.state.projectPic.map((e) => e.dictValue);
state.viewDetail = routers.query.viewDetail state.viewDetail = routers.query.viewDetail;
getProjectInfo() getProjectInfo();
getTemplate() getTemplate();
}) });
watch(routers.query, () => { watch(routers.query, () => {
state.projectInfo.projectId = routers.query.projectId state.projectInfo.projectId = routers.query.projectId;
state.projectInfo.parentName = routers.query.parentName state.projectInfo.parentName = routers.query.parentName;
state.projectInfo.parentId = routers.query.parentId state.projectInfo.parentId = routers.query.parentId;
}) });
function getProjectInfo() { function getProjectInfo() {
if (!routers.query.projectId) { if (!routers.query.projectId) {
state.projectInfo = {parentName: routers.query.parentName, parentId: routers.query.parentId} state.projectInfo = {
return parentName: routers.query.parentName,
parentId: routers.query.parentId,
};
return;
} }
api.getProjectDetail({projectId: routers.query.projectId}).then(res => { api
state.projectInfo = res.data.data.projectInfo .getProjectDetail({ projectId: routers.query.projectId })
state.projectInfo.rangeTime = [state.projectInfo.beginTime, state.projectInfo.endTime] .then((res) => {
state.projectInfo.parentName = routers.query.parentName state.projectInfo = res.data.data.projectInfo;
}) state.projectInfo.rangeTime = [
state.projectInfo.beginTime,
state.projectInfo.endTime,
];
state.projectInfo.parentName = routers.query.parentName;
state.courseSyncFlag = state.projectInfo.courseSyncFlag
? true
: false;
});
} }
const backPage = () => { const backPage = () => {
router.back() router.back();
}; };
//选择分类 //选择分类
@@ -333,24 +378,24 @@ export default {
state.projectType = value; //分类选择的id state.projectType = value; //分类选择的id
}; };
const classificationChange5 = (key, option) => { const classificationChange5 = (key, option) => {
state.projectInfo = option state.projectInfo = option;
state.projectInfo.type = 3 state.projectInfo.type = 3;
state.projectInfo.rangeTime = [option.beginTime, option.endTime] state.projectInfo.rangeTime = [option.beginTime, option.endTime];
state.projectInfo.parentName = routers.query.parentName state.projectInfo.parentName = routers.query.parentName;
state.projectInfo.parentId = routers.query.parentId state.projectInfo.parentId = routers.query.parentId;
}; };
//获取模版列表 //获取模版列表
const getTemplate = () => { const getTemplate = () => {
let obj = { let obj = {
pageNo: state.currentPage, pageNo: state.currentPage,
pageSize: state.pageSize, pageSize: state.pageSize,
status: 1,
}; };
api.getTemplate(obj).then((res) => { api.getTemplate(obj).then((res) => {
state.totalPages = Number(res.data.data.pages); state.totalPages = Number(res.data.data.pages);
state.classifyList5 = res.data.data.rows state.classifyList5 = res.data.data.rows;
}) });
}; };
//模版滚动加载模板信息 //模版滚动加载模板信息
@@ -376,18 +421,19 @@ export default {
sourceBelongId: "请选择资源归属", sourceBelongId: "请选择资源归属",
level: "请填写项目级别", level: "请填写项目级别",
systemId: "请填写项目培训体系", systemId: "请填写项目培训体系",
boeFlag: "请选择是否BOEU实施",
}; };
function timeChange(e) { function timeChange(e) {
if (e && e.length === 2) { if (e && e.length === 2) {
state.projectInfo.beginTime = e[0] state.projectInfo.beginTime = e[0];
state.projectInfo.endTime = e[1] state.projectInfo.endTime = e[1];
} }
} }
function validate(obj, errorMsgs) { function validate(obj, errorMsgs) {
for (let i in errorMsgs) { for (let i in errorMsgs) {
if (!obj[i]) { if (!obj[i] && obj[i] !== 0) {
message.destroy(); message.destroy();
message.warning(errorMsgs[i]); message.warning(errorMsgs[i]);
return false; return false;
@@ -401,13 +447,13 @@ export default {
if (!validate(state.projectInfo, errorMsgs)) { if (!validate(state.projectInfo, errorMsgs)) {
return; return;
} }
state.projectInfo.type = 3 state.projectInfo.type = 3;
state.projectInfo.courseSyncFlag = state.courseSyncFlag ? 1 : 0;
api.createProject(state.projectInfo).then(() => { api.createProject(state.projectInfo).then(() => {
message.destroy(); message.destroy();
message.success("编辑成功"); message.success("编辑成功");
router.back() router.back();
} });
)
}; };
return { return {
@@ -417,7 +463,7 @@ export default {
classificationChange5, classificationChange5,
createProject, createProject,
backPage, backPage,
templateScroll templateScroll,
}; };
}, },
}; };
@@ -521,7 +567,6 @@ export default {
position: relative; position: relative;
margin-left: 14px; margin-left: 14px;
.box1 { .box1 {
position: absolute; position: absolute;
left: 50%; left: 50%;

View File

@@ -47,14 +47,14 @@
showSearch showSearch
></a-select> ></a-select>
</div> </div>
<!-- <div class="select">--> <div class="select">
<!-- <a-date-picker--> <a-range-picker
<!-- v-model:value="searchParam.createTime"--> v-model:value="searchParam.valueDate"
<!-- type="date"--> style="border-radius: 8px; height: 40px; margin-left: 5px"
<!-- placeholder="创建时间"--> :placeholder="[' 开始时间', ' 结束时间']"
<!-- style="width: 270px"--> valueFormat="X"
<!-- />--> />
<!-- </div>--> </div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnn btn1" @click="searchSubmit"> <div class="btnn btn1" @click="searchSubmit">
<div class="search"></div> <div class="search"></div>
@@ -148,7 +148,7 @@
> >
<div class="headerLeft" style="margin-left: 32px"> <div class="headerLeft" style="margin-left: 32px">
<span class="headerLeftText" style="font-size: 16px" <span class="headerLeftText" style="font-size: 16px"
>{{ projectInfo.projectId ? '编辑' : '创建' }}多层项目</span >{{ projectInfo.projectId ? "编辑" : "创建" }}多层项目</span
> >
</div> </div>
<div style="cursor: pointer; margin-right: 32px" @click="closeModal2"> <div style="cursor: pointer; margin-right: 32px" @click="closeModal2">
@@ -159,9 +159,14 @@
</div> </div>
</div> </div>
<div class="modalMain"> <div class="modalMain">
<div style="margin-left: 40px; margin-top: 40px;width:78%" v-if="projectInfo.parentName"> <div
style="margin-left: 40px; margin-top: 40px; width: 78%"
v-if="projectInfo.parentName"
>
<span style="color: #000000; font-size: 14px">项目归属</span> <span style="color: #000000; font-size: 14px">项目归属</span>
<span style="color: #999999; font-size: 14px; margin-left: 10px">{{ projectInfo.parentName }}</span> <span style="color: #999999; font-size: 14px; margin-left: 10px">{{
projectInfo.parentName
}}</span>
</div> </div>
<div class="name"> <div class="name">
<div class="star" style="margin-top: -4px"> <div class="star" style="margin-top: -4px">
@@ -202,7 +207,11 @@
</div> </div>
<div class="inname">项目经理:</div> <div class="inname">项目经理:</div>
<div class="in"> <div class="in">
<ProjectManager v-model:value="projectInfo.managerId" v-model:name="projectInfo.manager" mode="multiple"></ProjectManager> <ProjectManager
v-model:value="projectInfo.managerId"
v-model:name="projectInfo.manager"
mode="multiple"
></ProjectManager>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
@@ -214,16 +223,17 @@
</div> </div>
<div class="inname">资源归属:</div> <div class="inname">资源归属:</div>
<div class="in select"> <div class="in select">
<OrgClass v-model:value="projectInfo.sourceBelongId" <OrgClass
v-model:name="projectInfo.sourceBelongName"></OrgClass> v-model:value="projectInfo.sourceBelongId"
v-model:name="projectInfo.sourceBelongName"
></OrgClass>
</div> </div>
</div> </div>
<div class="pubtn"> <div class="pubtn">
<a-button class="pubtn1" @click="closeModal2">取消</a-button> <a-button class="pubtn1" @click="closeModal2">取消</a-button>
<a-button class="pubtn2" @click="createStoreyProject" <a-button class="pubtn2" @click="createStoreyProject"
>确定 >确定
</a-button </a-button>
>
</div> </div>
</div> </div>
</a-modal> </a-modal>
@@ -347,7 +357,11 @@
</div> </div>
</div> </div>
<div class="modalMain"> <div class="modalMain">
<router-link :to="`/projectadd?parentId=${projectInfo.parentId || ''}&parentName=${projectInfo.parentName || ''}`"> <router-link
:to="`/projectadd?parentId=${
projectInfo.parentId || ''
}&parentName=${projectInfo.parentName || ''}`"
>
<div <div
class="taskbox" class="taskbox"
style=" style="
@@ -722,7 +736,6 @@
</div> </div>
</div> </div>
</a-modal> </a-modal>
<!-- 授权名单抽屉 --> <!-- 授权名单抽屉 -->
<proj-power-list <proj-power-list
v-model:ProjPvisible="ProjPvisible" v-model:ProjPvisible="ProjPvisible"
@@ -762,7 +775,6 @@ import ProjPowerList from "../../components/drawers/ProjPowerList";
import ProjCheckShip from "../../components/drawers/ProjCheckPower"; import ProjCheckShip from "../../components/drawers/ProjCheckPower";
import * as api from "../../api/index"; import * as api from "../../api/index";
import * as api1 from "../../api/index1"; import * as api1 from "../../api/index1";
import {toDate} from "../../api/method";
import {storage} from "../../api/storage"; import {storage} from "../../api/storage";
import ProjectManager from "@/components/project/ProjectManager"; import ProjectManager from "@/components/project/ProjectManager";
import ProjectClass from "@/components/project/ProjectClass"; import ProjectClass from "@/components/project/ProjectClass";
@@ -776,7 +788,7 @@ export default {
ProjCheckShip, ProjCheckShip,
ProjectManager, ProjectManager,
ProjectClass, ProjectClass,
OrgClass OrgClass,
// ProjManageShip // ProjManageShip
}, },
setup() { setup() {
@@ -803,23 +815,18 @@ export default {
reminderModal: false, //温馨提示弹窗 reminderModal: false, //温馨提示弹窗
reviewModal: false, //提交审核 reviewModal: false, //提交审核
recallReviewModal: false, //撤回审核 recallReviewModal: false, //撤回审核
ProjOwnervisible: false, ProjOwnervisible: false,
ProjPvisible: false, ProjPvisible: false,
ProjCheckvisible: false, ProjCheckvisible: false,
ProjManagevisible: false, ProjManagevisible: false,
currentProjectId: "", currentProjectId: "",
currentProjectName: "", currentProjectName: "",
currentEdProjectName: "", currentEdProjectName: "",
currentEditChildrensProjectId: "", currentEditChildrensProjectId: "",
dcProjectID: "", dcProjectID: "",
currentPage: 1, //当前页 currentPage: 1, //当前页
tableDataTotal: -1, //学习路径列表总数 tableDataTotal: -1, //学习路径列表总数
pageSize: 10, //每页10条数据 pageSize: 10, //每页10条数据
projectStudentsNum: 0, //发布弹窗-学员人 projectStudentsNum: 0, //发布弹窗-学员人
projectStages: 0, projectStages: 0,
projectTasks: 0, projectTasks: 0,
@@ -833,12 +840,9 @@ export default {
copyProjectId: null, //复制项目id copyProjectId: null, //复制项目id
reviewId: null, //提交审核id reviewId: null, //提交审核id
recallReviewId: null, //撤回审核id recallReviewId: null, //撤回审核id
selectProjectId: null, //选择的授权id selectProjectId: null, //选择的授权id
addAuthList: null, //确定授权列表 addAuthList: null, //确定授权列表
authClassify: null, //显示的是管理权还是查看权 authClassify: null, //显示的是管理权还是查看权
currentPage1: 1, //项目经理分页 currentPage1: 1, //项目经理分页
pageSize1: 10, pageSize1: 10,
projectInfo: {}, projectInfo: {},
@@ -853,11 +857,11 @@ export default {
searchParam: { searchParam: {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
} },
valueDate: [],
}); });
// 数据接入 - start - // 数据接入 - start -
const router = useRouter(); const router = useRouter();
const sProjectStateList = ref([ const sProjectStateList = ref([
{value: 0, label: "草稿"}, {value: 0, label: "草稿"},
{value: 1, label: "审核中"}, {value: 1, label: "审核中"},
@@ -865,16 +869,25 @@ export default {
{value: 3, label: "已发布"}, {value: 3, label: "已发布"},
{value: -2, label: "未通过"}, {value: -2, label: "未通过"},
]); ]);
const searchReset = () => { const searchReset = () => {
state.searchParam = {pageNo: 1, pageSize: 10} state.searchParam = {pageNo: 1, pageSize: 10};
getTableDate() getTableDate();
};
const searchSubmit = () => {
state.searchParam.pageNo = 1;
getTableDate();
}; };
const searchSubmit = () => { function timeChange(e) {
state.searchParam.pageNo = 1 console.log(e);
getTableDate() if (e && e.length === 2) {
}; state.searchParam.beginTime = e[0];
state.searchParam.endTime = e[1];
} else {
state.searchParam.beginTime = "";
state.searchParam.endTime = "";
}
}
function validate(obj, errorMsgs) { function validate(obj, errorMsgs) {
for (let i in errorMsgs) { for (let i in errorMsgs) {
@@ -905,11 +918,11 @@ export default {
message.success("创建成功"); message.success("创建成功");
state.currentPage = 1; state.currentPage = 1;
getTableDate(); getTableDate();
}) });
} };
// 取消按钮 清空输入的数据 // 取消按钮 清空输入的数据
const closeModal2 = () => { const closeModal2 = () => {
state.projectInfo = {} state.projectInfo = {};
// value1.value = ""; // value1.value = "";
// type = ""; // type = "";
// manager = ""; // manager = "";
@@ -925,7 +938,6 @@ export default {
const closeeditModal2 = () => { const closeeditModal2 = () => {
state.eddoublepro = false; state.eddoublepro = false;
}; };
// 创建单层子项目 (需要传入多层项目的ProjectID) // 创建单层子项目 (需要传入多层项目的ProjectID)
const createChildProject = () => { const createChildProject = () => {
console.log(state.currentProjectId); console.log(state.currentProjectId);
@@ -937,17 +949,13 @@ export default {
}, },
}); });
}; };
// 取消按钮 清空数据 // 取消按钮 清空数据
const closeModal3 = () => { const closeModal3 = () => {
state.doublesonpro = false; state.doublesonpro = false;
}; };
const closeeditModal3 = () => { const closeeditModal3 = () => {
state.eddoublesonpro = false; state.eddoublesonpro = false;
}; };
//打开发布弹窗 //打开发布弹窗
const showProjectPub = (object) => { const showProjectPub = (object) => {
state.projectPub = true; state.projectPub = true;
@@ -1114,7 +1122,7 @@ export default {
message.success("模版保存成功"); message.success("模版保存成功");
state.startModal = false; state.startModal = false;
getTableDate(); getTableDate();
}) });
}; };
//关闭存为模版弹窗 //关闭存为模版弹窗
const closeStartModal = () => { const closeStartModal = () => {
@@ -1135,18 +1143,19 @@ export default {
projectId: state.copyProjectId, projectId: state.copyProjectId,
type: 2, type: 2,
}; };
api.handleProject(obj).then((res) => { api
console.log("复制成功", res); .handleProject(obj)
message.destroy(); .then((res) => {
message.success("复制成功"); console.log("复制成功", res);
state.copyModal = false; message.destroy();
getTableDate(); message.success("复制成功");
}) state.copyModal = false;
getTableDate();
})
.catch((err) => { .catch((err) => {
console.log("复制失败", err); console.log("复制失败", err);
}); });
}; };
//打开提交审核弹窗 //打开提交审核弹窗
const showReviewModal = (projectId) => { const showReviewModal = (projectId) => {
state.reviewModal = true; state.reviewModal = true;
@@ -1176,7 +1185,6 @@ export default {
const closeReviewModal = () => { const closeReviewModal = () => {
state.reviewModal = false; state.reviewModal = false;
}; };
//打开撤回审核弹窗 //打开撤回审核弹窗
const showRecallReviewModal = (projectId) => { const showRecallReviewModal = (projectId) => {
state.recallReviewModal = true; state.recallReviewModal = true;
@@ -1206,15 +1214,12 @@ export default {
const closeRecallReviewModal = () => { const closeRecallReviewModal = () => {
state.recallReviewModal = false; state.recallReviewModal = false;
}; };
const expandTable = (e, a) => { const expandTable = (e, a) => {
// console.log("惦记了"); // console.log("惦记了");
console.log("e", e, a); console.log("e", e, a);
}; };
// 获取项目列表信息 // 获取项目列表信息
let tableData = ref([]); let tableData = ref([]);
const columns = ref([ const columns = ref([
{ {
title: "项目名称", title: "项目名称",
@@ -1319,255 +1324,288 @@ export default {
fixed: "right", fixed: "right",
customRender: (value) => { customRender: (value) => {
// console.log("value", value.record.type, value.record.status); // console.log("value", value.record.type, value.record.status);
return <div className="operation"> return (
{value.record.status === 0 || value.record.status === -2 ? <span <div className="operation">
onClick={() => { {value.record.status === 0 || value.record.status === -2 ? (
if (value.record.type === 1 || value.record.type === 2) { <span
state.doublepro = true; onClick={() => {
state.projectInfo = value.record if (value.record.type === 1 || value.record.type === 2) {
} else { state.doublepro = true;
console.log(value.record) state.projectInfo = value.record;
router.push({ } else {
path: '/projectadd', query: { console.log(value.record);
projectId: value.record.projectId, router.push({
parentId: value.record.parentId, path: "/projectadd",
parentName: value.record.parentName query: {
projectId: value.record.projectId,
parentId: value.record.parentId,
parentName: value.record.parentName,
},
});
} }
}) }}
} style="cursor:pointer;"
}} className="operation1"
style="cursor:pointer;" >
className="operation1"
>
编辑 编辑
</span> </span>
: ''} ) : (
{(value.record.status === 0 || value.record.status === -2) && value.record.type === 3 ? ""
<span )}
onClick={() => { {(value.record.status === 0 || value.record.status === -2) &&
showReviewModal(value.record.projectId); value.record.type === 3 ? (
}} <span
style="cursor:pointer" onClick={() => {
class="operation3" showReviewModal(value.record.projectId);
> }}
提交审核 style="cursor:pointer"
</span> class="operation3"
: ''} >
{value.record.status === 1 && value.record.type !== 1 ? 提交审核
<span </span>
onClick={() => { ) : (
showRecallReviewModal(value.record.projectId); ""
}} )}
style="cursor:pointer" {value.record.status === 1 && value.record.type !== 1 ? (
class="operation3" <span
> onClick={() => {
撤回审核 showRecallReviewModal(value.record.projectId);
</span> : ''} }}
{value.record.status === 2 ? style="cursor:pointer"
<span class="operation3"
onClick={() => { >
console.log("value.record", value.record); 撤回审核
let beginTime = value.record.beginTime </span>
? toDate(value.record.beginTime, "Y/M/D") ) : (
: ""; ""
let endTime = value.record.beginTime )}
? toDate(value.record.endTime, "Y/M/D") {value.record.status === 2 ? (
: ""; <span
let time = onClick={() => {
beginTime && endTime ? beginTime + "-" + endTime : ""; let time = value.record.beginTime + "-" + value.record.beginTime;
let obj = { let obj = {
projectId: value.record.projectId, projectId: value.record.projectId,
name: value.record.name, name: value.record.name,
time: time, time: time,
}; };
showProjectPub(obj); showProjectPub(obj);
}} }}
style="cursor:pointer" style="cursor:pointer"
class="operation3" class="operation3"
> >
发布 发布
</span> </span>
: ''} ) : (
<div className="tableSelect"> ""
<a-select )}
style="width: 50px" <div className="tableSelect">
value="授权" <a-select
// options={state.projectNameList} style="width: 50px"
dropdownClassName="tabledropdown" value="授权"
> // options={state.projectNameList}
<a-select-option value="权限名单" label="权限名单"> dropdownClassName="tabledropdown"
<div
onClick={() => {
showProjPrower(value.record.projectId);
}}
> >
权限名单 <a-select-option value="权限名单" label="权限名单">
</div>
</a-select-option>
<a-select-option value="归属权" label="归属权">
<div
onClick={() => {
console.log("点击了111");
showProjOwner(value.record.projectId);
}}
>
归属权
</div>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<div
onClick={() => {
console.log("点击了111");
showProjCheck(value.record.projectId);
}}
>
查看权
</div>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<div
onClick={() => {
showProjManage(value.record.projectId);
}}
>
管理权
</div>
</a-select-option>
</a-select>
</div>
{value.record.type === 1 ? <span
className="operation3"
style="cursor: pointer"
onClick={() => {
state.projectInfo = {parentName: value.record.name, parentId: value.record.projectId,type:2};
state.reminderModal = true;
}}
>
创建子项目
</span> : ''}
{value.record.type === 2 ? <span
className="operation3"
style="cursor: pointer"
onClick={() => {
router.push({
path: '/projectadd', query: {
parentId: value.record.projectId,
parentName: value.record.name
}
})
}}
>
创建班级
</span> : ''}
<div className="tableSelect">
<a-select
style="width: 50px"
value="更多"
// options={state.projectNameList}
dropdownClassName="tabledropdown"
>
<a-select-option value="复制" label="复制">
<div
onClick={() => {
showCopyModal(value.record.projectId);
}}
>
复制
</div>
</a-select-option>
<a-select-option value="删除" label="删除">
<div
onClick={() => {
showDeleteModal(value.record.projectId);
}}
>
删除
</div>
</a-select-option>
{value.record.type === 3 ?
<a-select-option value="存为模版" label="存为模版">
<div <div
onClick={() => { onClick={() => {
showStartModal(value.record.projectId); showProjPrower(value.record.projectId);
}} }}
> >
存为模版 权限名单
</div> </div>
</a-select-option> : ''} </a-select-option>
{value.record.type === 3 ? <a-select-option value="归属权" label="归属权">
<a-select-option value="基础信息" label="基础信息">
<div <div
onClick={() => { onClick={() => {
router.push({ console.log("点击了111");
path: "/taskpage", showProjOwner(value.record.projectId);
});
storage.set("projectId", value.record.projectId);
}} }}
> >
基础信息 归属权
</div> </div>
</a-select-option> : ''} </a-select-option>
</a-select> <a-select-option value="查看权" label="查看权">
</div> <div
</div> onClick={() => {
} console.log("点击了111");
} showProjCheck(value.record.projectId);
}}
>
查看权
</div>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<div
onClick={() => {
showProjManage(value.record.projectId);
}}
>
管理权
</div>
</a-select-option>
</a-select>
</div>
{value.record.type === 1 ? (
<span
className="operation3"
style="cursor: pointer"
onClick={() => {
state.projectInfo = {
parentName: value.record.name,
parentId: value.record.projectId,
type: 2,
};
state.reminderModal = true;
}}
>
创建子项目
</span>
) : (
""
)}
{value.record.type === 2 ? (
<span
className="operation3"
style="cursor: pointer"
onClick={() => {
router.push({
path: "/projectadd",
query: {
parentId: value.record.projectId,
parentName: value.record.name,
},
});
}}
>
创建班级
</span>
) : (
""
)}
<div className="tableSelect">
<a-select
style="width: 50px"
value="更多"
// options={state.projectNameList}
dropdownClassName="tabledropdown"
>
<a-select-option value="复制" label="复制">
<div
onClick={() => {
showCopyModal(value.record.projectId);
}}
>
复制
</div>
</a-select-option>
<a-select-option value="删除" label="删除">
<div
onClick={() => {
showDeleteModal(value.record.projectId);
}}
>
删除
</div>
</a-select-option>
{value.record.type === 3 ? (
<a-select-option value="存为模版" label="存为模版">
<div
onClick={() => {
showStartModal(value.record.projectId);
}}
>
存为模版
</div>
</a-select-option>
) : (
""
)}
{value.record.type === 3 ? (
<a-select-option value="基础信息" label="基础信息">
<div
onClick={() => {
router.push({
path: "/taskpage",
});
storage.set("projectId", value.record.projectId);
}}
>
基础信息
</div>
</a-select-option>
) : (
""
)}
</a-select>
</div>
</div>
);
},
},
]); ]);
const getTableDate = () =>
const getTableDate = () => api.getProjectList(state.searchParam).then((res) => { api
console.log(res); .getProjectList({
state.tableDataTotal = Number(res.data.data.total); ...state.searchParam,
const data = res.data.data.rows; beginTime:
initDataSublist('', data) state.searchParam.valueDate &&
console.log(data) state.searchParam.valueDate.length === 2
tableData.value = data; ? state.searchParam.valueDate[0]
console.log("tableData", tableData); : "",
}); endTime:
state.searchParam.valueDate &&
state.searchParam.valueDate.length === 2
? state.searchParam.valueDate[1]
: "",
})
.then((res) => {
console.log(res);
state.tableDataTotal = Number(res.data.data.total);
const data = res.data.data.rows;
initDataSublist("", data);
console.log(data);
tableData.value = data;
console.log("tableData", tableData);
});
function initDataSublist(parentName, data) { function initDataSublist(parentName, data) {
if (data && data.length) { if (data && data.length) {
data.forEach(e => { data.forEach((e) => {
e.parentName = parentName e.parentName = parentName;
e.key = e.projectId e.key = e.projectId;
initDataSublist(e.name, e.subList) initDataSublist(e.name, e.subList);
e.subList && e.subList.length && (e.children = e.subList) e.subList && e.subList.length && (e.children = e.subList);
}) });
} }
} }
getTableDate(); getTableDate();
// 翻页 // 翻页
const changePagination = (page) => { const changePagination = (page) => {
state.searchParam.pageNo = page state.searchParam.pageNo = page;
getTableDate() getTableDate();
}; };
const showModal = () => { const showModal = () => {
state.sonproject = true; state.sonproject = true;
}; };
const closeModal = () => { const closeModal = () => {
state.sonproject = false; state.sonproject = false;
}; };
const showModal1 = () => { const showModal1 = () => {
state.projectInfo = {} state.projectInfo = {};
state.reminderModal = true; state.reminderModal = true;
}; };
const closeModal1 = () => { const closeModal1 = () => {
state.estabish = false; state.estabish = false;
}; };
const showModal2 = () => { const showModal2 = () => {
state.doublepro = true; state.doublepro = true;
state.estabish = false; state.estabish = false;
}; };
const showModal3 = () => { const showModal3 = () => {
state.doublesonpro = true; state.doublesonpro = true;
state.sonproject = false; state.sonproject = false;
}; };
const showProjOwner = (id) => { const showProjOwner = (id) => {
state.ProjOwnervisible = true; state.ProjOwnervisible = true;
state.selectProjectId = id; state.selectProjectId = id;
@@ -1587,7 +1625,6 @@ export default {
// state.ProjManagevisible = true; // state.ProjManagevisible = true;
state.ProjCheckvisible = true; state.ProjCheckvisible = true;
}; };
const closeReminderModal = () => { const closeReminderModal = () => {
state.reminderModal = false; state.reminderModal = false;
}; };
@@ -1595,9 +1632,10 @@ export default {
state.reminderModal = false; state.reminderModal = false;
state.estabish = true; state.estabish = true;
}; };
//添加权限 //添加权限
watch(() => state.addAuthList, (res) => { watch(
() => state.addAuthList,
(res) => {
console.log("res", res, state.addAuthList); console.log("res", res, state.addAuthList);
let obj = { let obj = {
type: 2, type: 2,
@@ -1623,9 +1661,10 @@ export default {
console.log("添加授权失败", err); console.log("添加授权失败", err);
}); });
} }
) );
return { return {
...toRefs(state), ...toRefs(state),
timeChange,
expandTable, expandTable,
showModal, showModal,
closeModal, closeModal,
@@ -1657,7 +1696,6 @@ export default {
showRecallReviewModal, showRecallReviewModal,
recallReviewProject, recallReviewProject,
closeRecallReviewModal, closeRecallReviewModal,
tableData, tableData,
columns, columns,
createStoreyProject, createStoreyProject,
@@ -1679,8 +1717,7 @@ export default {
okReminderModal, okReminderModal,
}; };
}, },
} };
;
</script> </script>
<style lang="scss"> <style lang="scss">
.projectManage { .projectManage {
@@ -1801,7 +1838,6 @@ export default {
.btns { .btns {
display: flex; display: flex;
// flex-wrap: wrap; // flex-wrap: wrap;
.btn { .btn {
padding: 0px 26px 0px 26px; padding: 0px 26px 0px 26px;
@@ -1884,7 +1920,6 @@ export default {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
color: #4ea6ff; color: #4ea6ff;
// line-height: 36px; // line-height: 36px;
.operation1 { .operation1 {
margin-left: 21px; margin-left: 21px;
@@ -1905,7 +1940,6 @@ export default {
margin-left: 21px; margin-left: 21px;
position: relative; position: relative;
text-align: left; text-align: left;
// z-index: 99999; // z-index: 99999;
.moreArrow { .moreArrow {
width: 13px; width: 13px;
@@ -1971,7 +2005,6 @@ export default {
align-items: center; align-items: center;
height: 40px; height: 40px;
// border: 1px solid black; // border: 1px solid black;
.inname { .inname {
color: #000000; color: #000000;
font-size: 14px; font-size: 14px;
@@ -2009,7 +2042,6 @@ export default {
display: flex; display: flex;
justify-content: center; justify-content: center;
margin-top: 25px; margin-top: 25px;
//margin-bottom: 29px; //margin-bottom: 29px;
.pubtn1 { .pubtn1 {
width: 100px; width: 100px;
@@ -2070,7 +2102,6 @@ export default {
align-items: center; align-items: center;
height: 40px; height: 40px;
// border: 1px solid black; // border: 1px solid black;
.inname { .inname {
color: #000000; color: #000000;
font-size: 14px; font-size: 14px;
@@ -2108,7 +2139,6 @@ export default {
display: flex; display: flex;
justify-content: center; justify-content: center;
margin-top: 25px; margin-top: 25px;
//margin-bottom: 29px; //margin-bottom: 29px;
.pubtn1 { .pubtn1 {
width: 100px; width: 100px;
@@ -2159,7 +2189,6 @@ export default {
display: flex; display: flex;
justify-content: center; justify-content: center;
margin-top: 48px; margin-top: 48px;
//margin-bottom: 40px; //margin-bottom: 40px;
.taskbox { .taskbox {
width: 310px; width: 310px;
@@ -2227,7 +2256,6 @@ export default {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
margin-top: 48px; margin-top: 48px;
//margin-bottom: 40px; //margin-bottom: 40px;
.taskbox { .taskbox {
width: 438px; width: 438px;
@@ -2319,7 +2347,6 @@ export default {
background: #ffffff; background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21); box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px; border-radius: 4px;
// position: absolute; // position: absolute;
// left: 50%; // left: 50%;
// top: 10%; // top: 10%;
@@ -2396,7 +2423,6 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
flex-shrink: 0; flex-shrink: 0;
cursor: pointer; cursor: pointer;
@@ -2581,4 +2607,4 @@ export default {
} }
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

View File

@@ -343,7 +343,14 @@
<span class="editext">编辑</span> <span class="editext">编辑</span>
</router-link> </router-link>
</div> --> </div> -->
<div class="taskSyllabus"> <div
class="taskSyllabus"
v-if="
taskSyllabus &&
taskSyllabus.length &&
(taskSyllabus.length > 1 || taskSyllabus[0].name)
"
>
<a-collapse v-model:activeKey="taskSyllabusActive" accordion> <a-collapse v-model:activeKey="taskSyllabusActive" accordion>
<template #expandIcon="{ isActive }"> <template #expandIcon="{ isActive }">
<img <img
@@ -383,31 +390,33 @@
> >
<img <img
:src=" :src="
item.type == '1' item.type == 1
? require('../../assets/images/leveladd/zai.png') ? require('../../assets/images/leveladd/zai.png')
: item.type == '2' : item.type == 2
? require('../../assets/images/leveladd/mian.png') ? require('../../assets/images/leveladd/mian.png')
: item.type == '3' : item.type == 3
? require('../../assets/images/leveladd/an.png') ? require('../../assets/images/leveladd/an.png')
: item.type == '4' : item.type == 4
? require('../../assets/images/leveladd/zuo.png') ? require('../../assets/images/leveladd/zuo.png')
: item.type == '5' : item.type == 5
? require('../../assets/images/leveladd/kao.png') ? require('../../assets/images/leveladd/kao.png')
: item.type == '6' : item.type == 6
? require('../../assets/images/leveladd/zhi.png') ? require('../../assets/images/leveladd/zhi.png')
: item.type == '7' : item.type == 7
? require('../../assets/images/leveladd/wai.png') ? require('../../assets/images/leveladd/wai.png')
: item.type == '8' : item.type == 8
? require('../../assets/images/leveladd/tao.png') ? require('../../assets/images/leveladd/tao.png')
: item.type == '9' : item.type == 9
? require('../../assets/images/leveladd/huo.png') ? require('../../assets/images/leveladd/huo.png')
: item.type == '10' : item.type == 10
? require('../../assets/images/leveladd/ce.png') ? require('../../assets/images/leveladd/ce.png')
: item.type == '11' : item.type == 11
? require('../../assets/images/leveladd/diao.png') ? require('../../assets/images/leveladd/pinggu.png')
: item.type == '12' : item.type == 12
? require('../../assets/images/leveladd/tou.png') ? require('../../assets/images/leveladd/tou.png')
: null : item.type == 13
? require('../../assets/images/leveladd/tou.png')
: require('../../assets/images/leveladd/xiangmu.png')
" "
/> />
</div> </div>
@@ -427,11 +436,23 @@
</div> </div>
<div class="time"> <div class="time">
<div class="timetext">开始时间</div> <div class="timetext">开始时间</div>
<div class="timetext">{{item.createTime?toDate(Number(item.createTime),"Y-M-D"):'---'}}</div> <div class="timetext">
{{
item.startTime !== null ? item.startTime: ''
}}
</div>
</div> </div>
<div class="progress"> <div class="progress">
<div class="progresstext"> <div class="progresstext">
{{ item.finishStuCnt&&item.finishStuCnt!==null?item.finishStuCnt:0 }}/{{ item.totalStuCnt&&item.totalStuCnt!==null?item.totalStuCnt:0 }} {{
item.finishStuCnt && item.finishStuCnt !== null
? item.finishStuCnt
: 0
}}/{{
item.totalStuCnt && item.totalStuCnt !== null
? item.totalStuCnt
: 0
}}人
</div> </div>
<div style="display: flex"> <div style="display: flex">
<a-progress <a-progress
@@ -442,7 +463,12 @@
/> />
<span class="progresstext" style="margin-left: 10px" <span class="progresstext" style="margin-left: 10px"
>{{ >{{
(item.finishStuCnt&&item.finishStuCnt!==null?item.finishStuCnt:0 / item.totalStuCnt&&item.totalStuCnt!==null?item.totalStuCnt:0) * 100 (item.finishStuCnt && item.finishStuCnt !== null
? item.finishStuCnt
: 0 / item.totalStuCnt &&
item.totalStuCnt !== null
? item.totalStuCnt
: 0) * 100
}}%</span }}%</span
> >
</div> </div>
@@ -533,6 +559,31 @@
</router-link> </router-link>
<!-- 无数据创建任务 --> <!-- 无数据创建任务 -->
</div> </div>
<div v-else>
<div
class="taskbox"
@click="
() => {
routered.push({ path: '/taskadd' });
}
"
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"
>
<div class="leftt">
<img src="../../assets/images/taskpage/left1.png" />
</div>
<div class="photo">
<img src="../../assets/images/taskpage/picture1.png" />
</div>
<div class="rightt">
<img src="../../assets/images/taskpage/right1.png" />
</div>
<div class="centerbox" style="color: rgba(255, 182, 78, 1)">
添加任务
</div>
<div class="centermain">快速添加任务/阶段</div>
</div>
</div>
<div style="display: flex; height: 20px"></div> <div style="display: flex; height: 20px"></div>
</div> </div>
</a-tab-pane> </a-tab-pane>
@@ -666,11 +717,11 @@
style="border: 1px solid #f2f6fe" style="border: 1px solid #f2f6fe"
:columns="studentColumns()" :columns="studentColumns()"
:data-source="tabledata" :data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true" expandRowByClick="true"
:scroll="{ x: 1400 }" :scroll="{ x: 1400 }"
@expand="expandTable" @expand="expandTable"
:pagination="false" :pagination="false"
:loading="loading"
:row-selection="{ :row-selection="{
columnWidth: 30, columnWidth: 30,
selectedRowKeys: selectedRowKeys, selectedRowKeys: selectedRowKeys,
@@ -766,28 +817,28 @@
@click="showMemberList(item.projectGroupId)" @click="showMemberList(item.projectGroupId)"
> >
<div class="ftext">组员名单 ></div> <div class="ftext">组员名单 ></div>
<div class="peoples"> <!-- <div class="peoples">
<div class="people1"> <div class="people1">
<img <img
src="../../assets/images/taskpage/people1.png" src="../../assets/images/taskpage/people1.png"
/> />
</div> </div>
<div class="people2"> <div class="people2">
<img <img
src="../../assets/images/taskpage/people2.png" src="../../assets/images/taskpage/people2.png"
/> />
</div> </div>
<div class="people3"> <div class="people3">
<img <img
src="../../assets/images/taskpage/people3.png" src="../../assets/images/taskpage/people3.png"
/> />
</div> </div>
<div class="people4"> <div class="people4">
<img <img
src="../../assets/images/taskpage/people4.png" src="../../assets/images/taskpage/people4.png"
/> />
</div> </div>
</div> </div> -->
</div> </div>
</div> </div>
</div> </div>
@@ -799,12 +850,12 @@
<a-tab-pane key="4" tab="公告"> <a-tab-pane key="4" tab="公告">
<div class="split"></div> <div class="split"></div>
<a-tabs v-model:activeKey="activeKeyNotice"> <a-tabs v-model:activeKey="activeKeyNotice">
<a-tab-pane key="11" tab="公告" <a-tab-pane key="11" tab="公告">
><NoticePub v-model:projectId="projectId"></NoticePub <NoticePub v-model:projectId="projectId"></NoticePub>
></a-tab-pane> </a-tab-pane>
<a-tab-pane key="12" tab="历史公告" force-render <a-tab-pane key="12" tab="历史公告" force-render>
><NoticeHis v-model:projectId="projectId"></NoticeHis <NoticeHis v-model:projectId="projectId"></NoticeHis>
></a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
</a-tab-pane> </a-tab-pane>
<!-- 2022-11-30注释 后面放开 --> <!-- 2022-11-30注释 后面放开 -->
@@ -992,7 +1043,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">
<a-radio v-model:checked="checkedSty" <a-radio v-model:checked="checkedSty" :disabled="true"
><span style="color: #333333" ><span style="color: #333333"
>同步课程学习记录(如学员在课程库中拥有课程的学习记录,自动免修该课程)</span >同步课程学习记录(如学员在课程库中拥有课程的学习记录,自动免修该课程)</span
></a-radio ></a-radio
@@ -1002,19 +1053,29 @@
<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">{{ level }}</span> <span style="color: #999999"
><ProjectLevel
v-model:value="level"
:disabled="true"
></ProjectLevel
></span>
</div> </div>
</div> </div>
<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">{{ systemId }}</span> <span style="color: #999999"
><TrainClass
v-model:value="systemId"
:disabled="true"
></TrainClass
></span>
</div> </div>
</div> </div>
<div class="set_content"> <div class="set_content">
<div class="setc_name"><span>是否BOEU实施</span></div> <div class="setc_name"><span>是否BOEU实施</span></div>
<div class="setc_main"> <div class="setc_main">
<a-radio v-model:checked="checkedBOEU" <a-radio v-model:checked="checkedBOEU" :disabled="true"
><span style="color: #333333">BOEU实施</span></a-radio ><span style="color: #333333">BOEU实施</span></a-radio
> >
</div> </div>
@@ -1036,7 +1097,7 @@
</div> </div>
<div class="btnbox" style="margin: 20px"> <div class="btnbox" style="margin: 20px">
<a-upload <a-upload
v-if="(docChecked==true)" v-if="docChecked == true"
v-model:file-list="fileList" v-model:file-list="fileList"
name="file" name="file"
action="/manageApi/file/upload" action="/manageApi/file/upload"
@@ -1053,7 +1114,11 @@
alt="" alt=""
/> />
</a-upload> </a-upload>
<div v-if="(docChecked==true)" class="btnbox" style="margin: 20px"> <div
v-if="docChecked == true"
class="btnbox"
style="margin: 20px"
>
<span style="color: #999999"> <span style="color: #999999">
支持pdf.ppt.pptx.doc.docx.xls.xlsx.jpeg.png.gif.zip 支持pdf.ppt.pptx.doc.docx.xls.xlsx.jpeg.png.gif.zip
</span> </span>
@@ -1394,11 +1459,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="closeDeleteOne">
<div class="btnText" @click="closeDeleteOne">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="del_btn btn2"> <div class="del_btn btn2" @click="closeDeleteOneConfirm">
<div class="btnText" @click="closeDeleteOneConfirm">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
</div> </div>
@@ -1462,11 +1527,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="closeCancelDelete">
<div class="btnText" @click="closeCancelDelete">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="del_btn btn2"> <div class="del_btn btn2" @click="closeAllDelete">
<div class="btnText" @click="closeAllDelete">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
</div> </div>
@@ -1700,9 +1765,14 @@ import projSet from "../../components/Modals/projSet";
import { overview } from "../../api/indexProjStu"; import { overview } from "../../api/indexProjStu";
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue"; import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import ProjectLevel from "@/components/project/ProjectLevel";
import TrainClass from "@/components/project/TrainClass";
export default { export default {
name: "taskPage", name: "taskPage",
components: { components: {
ProjectLevel,
TrainClass,
TimeManage, TimeManage,
FaceManage, FaceManage,
SubsetManage, SubsetManage,
@@ -1726,6 +1796,7 @@ export default {
setup() { setup() {
const store = useStore(); const store = useStore();
const state = reactive({ const state = reactive({
loading: false,
projectId: storage.get("projectId") projectId: storage.get("projectId")
? JSON.parse(storage.get("projectId")) ? JSON.parse(storage.get("projectId"))
: null, : null,
@@ -2914,18 +2985,18 @@ export default {
</div> </div>
{/** {/**
2022-11-30注释 后面放开 2022-11-30注释 后面放开
<div <div
class="studentopea2" class="studentopea2"
onClick={() => { onClick={() => {
state.Seevisible = true; state.Seevisible = true;
console.log(text.record.studentId, "点击了查看"); console.log(text.record.studentId, "点击了查看");
state.checkStuId = text.record.studentId; state.checkStuId = text.record.studentId;
}} }}
> >
查看 查看
</div> </div>
*/} */}
<div class="studentSelect"> <div class="studentSelect">
<a-select <a-select
style="width: 50px" style="width: 50px"
@@ -3047,6 +3118,7 @@ export default {
//点击确认删除单个学员 //点击确认删除单个学员
const closeDeleteOneConfirm = () => { const closeDeleteOneConfirm = () => {
state.deleteOneStu = false; state.deleteOneStu = false;
state.loading = true;
deleteStu({ deleteStu({
projectId: state.projectId, projectId: state.projectId,
studentIds: state.chooseDeleteOne, studentIds: state.chooseDeleteOne,
@@ -3077,6 +3149,7 @@ export default {
}; };
//点击确定的批量删除弹窗 //点击确定的批量删除弹窗
const closeAllDelete = () => { const closeAllDelete = () => {
state.loading = true;
deleteStu({ deleteStu({
projectId: state.projectId, projectId: state.projectId,
studentIds: state.selectedRows, studentIds: state.selectedRows,
@@ -3236,6 +3309,7 @@ export default {
// studentData(); // studentData();
} }
} }
state.loading = false;
}) })
.catch((err) => { .catch((err) => {
console.log("获取学员列表失败", err); console.log("获取学员列表失败", err);
@@ -3249,39 +3323,21 @@ export default {
console.log("get task", res.data.data); console.log("get task", res.data.data);
let info = res.data.data.projectInfo; let info = res.data.data.projectInfo;
// let start = toDate(info.beginTime / 1000, "Y-M-D h:m"); // let start = toDate(info.beginTime / 1000, "Y-M-D h:m");
let start = info.beginTime let start = info.beginTime;
// let end = toDate(info.endTime / 1000, "Y-M-D h:m"); // let end = toDate(info.endTime / 1000, "Y-M-D h:m");
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.sourceBelongId; state.tsourceBelong = info.sourceBelongName;
state.parentId = info.parentId; state.parentId = info.parentId;
state.name = info.name; state.name = info.name;
state.startTime = start; state.startTime = start;
state.endTime = end; state.endTime = end;
state.manager = info.manager; state.manager = info.manager;
state.remark = info.remark; state.remark = info.remark;
state.level = state.level = info.level;
info.level == 1
? "集团级"
: info.level == 2
? "组织级"
: info.level == 3
? "现地级"
: info.level == 4
? "部门级"
: "-";
state.tlevel = info.level; state.tlevel = info.level;
state.systemId = state.systemId = info.systemId;
info.systemId == 1
? "集团级"
: info.systemId == 2
? "组织级"
: info.systemId == 3
? "现地级"
: info.systemId == 4
? "部门级"
: "-";
state.tsystemId = info.systemId; state.tsystemId = info.systemId;
state.checkedSty = info.courseSyncFlag == 1 ? true : false; state.checkedSty = info.courseSyncFlag == 1 ? true : false;
state.courseSyncFlag = info.courseSyncFlag; state.courseSyncFlag = info.courseSyncFlag;
@@ -3296,14 +3352,7 @@ export default {
state.noticeFlag = info.noticeFlag; state.noticeFlag = info.noticeFlag;
// state.attach = info.attach; // state.attach = info.attach;
// state.templateId = info.templateId; // state.templateId = info.templateId;
state.sourceBelong = state.sourceBelong = info.sourceBelongName;
info.sourceBelongId == 1
? "项目一"
: info.sourceBelongId == 2
? "项目二"
: info.sourceBelongId == 3
? "项目三"
: "-";
// 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);
@@ -3713,6 +3762,7 @@ export default {
projectGroupId: 0, projectGroupId: 0,
}; };
console.log("obj", obj); console.log("obj", obj);
state.loading = true;
api api
.addStudentProject(obj) .addStudentProject(obj)
.then((res) => { .then((res) => {
@@ -3825,7 +3875,8 @@ export default {
templateProject, templateProject,
changeGrouped, changeGrouped,
deFile, deFile,
toDate toDate,
routered,
}; };
}, },
}; };
@@ -4497,12 +4548,14 @@ export default {
.ant-modal { .ant-modal {
.ant-modal-body { .ant-modal-body {
padding: 0; padding: 0;
.modalHeader { .modalHeader {
background: linear-gradient( background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%, rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100% rgba(78, 166, 255, 0) 100%
); );
} }
.modalMain { .modalMain {
.projectname { .projectname {
color: rgba(79, 81, 86, 1); color: rgba(79, 81, 86, 1);
@@ -4512,23 +4565,28 @@ export default {
font-weight: 500; font-weight: 500;
text-align: center; text-align: center;
} }
.projecttime { .projecttime {
margin-left: 221px; margin-left: 221px;
.timeti { .timeti {
color: rgba(153, 155, 163, 1); color: rgba(153, 155, 163, 1);
font-size: 14px; font-size: 14px;
line-height: 36px; line-height: 36px;
} }
.timeme { .timeme {
color: rgba(79, 81, 86, 1); color: rgba(79, 81, 86, 1);
font-size: 14px; font-size: 14px;
line-height: 36px; line-height: 36px;
} }
} }
.projectbox { .projectbox {
margin-top: 26px; margin-top: 26px;
display: flex; display: flex;
justify-content: center; justify-content: center;
.promessage { .promessage {
width: 280px; width: 280px;
height: 110px; height: 110px;
@@ -4539,6 +4597,7 @@ export default {
); );
border-radius: 10px; border-radius: 10px;
margin-right: 7px; margin-right: 7px;
.messageme { .messageme {
color: rgba(255, 182, 78, 1); color: rgba(255, 182, 78, 1);
font-size: 14px; font-size: 14px;
@@ -4546,12 +4605,14 @@ export default {
margin-top: 17px; margin-top: 17px;
margin-left: 30px; margin-left: 30px;
} }
.messagege { .messagege {
color: rgba(153, 155, 163, 1); color: rgba(153, 155, 163, 1);
font-size: 14px; font-size: 14px;
margin-left: 30px; margin-left: 30px;
} }
} }
.stumessage { .stumessage {
width: 280px; width: 280px;
height: 110px; height: 110px;
@@ -4561,6 +4622,7 @@ export default {
rgba(240, 248, 254, 1) rgba(240, 248, 254, 1)
); );
border-radius: 10px; border-radius: 10px;
.messageme1 { .messageme1 {
color: rgba(78, 166, 255, 1); color: rgba(78, 166, 255, 1);
font-size: 14px; font-size: 14px;
@@ -4568,6 +4630,7 @@ export default {
margin-top: 17px; margin-top: 17px;
margin-left: 30px; margin-left: 30px;
} }
.messagege1 { .messagege1 {
color: rgba(153, 155, 163, 1); color: rgba(153, 155, 163, 1);
font-size: 14px; font-size: 14px;
@@ -4575,26 +4638,32 @@ export default {
} }
} }
} }
.send { .send {
margin-top: 30px; margin-top: 30px;
margin-left: 61px; margin-left: 61px;
.sendtext { .sendtext {
margin-left: 11px; margin-left: 11px;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
} }
} }
.ckb { .ckb {
margin-top: 20px; margin-top: 20px;
margin-left: 62px; margin-left: 62px;
.sendpeo { .sendpeo {
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
} }
.ant-checkbox-inner { .ant-checkbox-inner {
border-radius: 4px; border-radius: 4px;
} }
} }
.pubtn { .pubtn {
display: flex; display: flex;
justify-content: center; justify-content: center;
@@ -4613,6 +4682,7 @@ export default {
align-items: center; align-items: center;
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
} }
.pubtn2 { .pubtn2 {
width: 100px; width: 100px;
height: 40px; height: 40px;
@@ -6139,6 +6209,7 @@ export default {
} }
} }
} }
//设置的共享文档 //设置的共享文档
.sametab { .sametab {
// margin-left: 30px; // margin-left: 30px;
@@ -6148,35 +6219,43 @@ export default {
// background-color: green; // background-color: green;
.Gcon { .Gcon {
display: flex; display: flex;
.pad { .pad {
height: 100%; height: 100%;
width: 40px; width: 40px;
} }
.Gin { .Gin {
// background-color: #bfa; // background-color: #bfa;
margin-top: 30px; margin-top: 30px;
.headone { .headone {
// background-color: red; // background-color: red;
display: flex; display: flex;
text-align: center; text-align: center;
.box { .box {
width: 4px; width: 4px;
height: 20px; height: 20px;
background-color: #409eff; background-color: #409eff;
border-radius: 2px; border-radius: 2px;
} }
.onetitle { .onetitle {
margin-left: 15px; margin-left: 15px;
color: #333333; color: #333333;
font-size: 14px; font-size: 14px;
} }
.oneedi { .oneedi {
margin-left: 15px; margin-left: 15px;
color: #4ea6ff; color: #4ea6ff;
cursor: pointer; cursor: pointer;
} }
.twobtn { .twobtn {
display: flex; display: flex;
.btnone { .btnone {
width: 42px; width: 42px;
height: 24px; height: 24px;
@@ -6186,6 +6265,7 @@ export default {
margin-left: 20px; margin-left: 20px;
cursor: pointer; cursor: pointer;
} }
.btntwo { .btntwo {
width: 42px; width: 42px;
height: 24px; height: 24px;
@@ -6198,38 +6278,46 @@ export default {
} }
} }
} }
.btnbox { .btnbox {
.ant-upload-list { .ant-upload-list {
display: none !important; display: none !important;
} }
} }
.onemain { .onemain {
margin-top: 20px; margin-top: 20px;
margin-left: 55px; margin-left: 55px;
color: #6f6f6f; color: #6f6f6f;
font-size: 14px; font-size: 14px;
.checkcon { .checkcon {
position: relative; position: relative;
.in { .in {
position: absolute; position: absolute;
// margin-top: 10px; // margin-top: 10px;
left: 0; left: 0;
top: 3px; top: 3px;
} }
.yulan { .yulan {
// color: yellow; // color: yellow;
margin-left: 22px; margin-left: 22px;
// display: inline-block; // display: inline-block;
} }
.yulan2 { .yulan2 {
margin-left: 22px; margin-left: 22px;
} }
.ant-input-number { .ant-input-number {
height: 24px; height: 24px;
width: 24px; width: 24px;
margin: 10px; margin: 10px;
border-radius: 4px; border-radius: 4px;
border: 1px solid #6d7584; border: 1px solid #6d7584;
.ant-input-number-input { .ant-input-number-input {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -6241,58 +6329,72 @@ export default {
} }
} }
} }
.twomain { .twomain {
margin-left: 20px; margin-left: 20px;
margin-top: 20px; margin-top: 20px;
.ant-switch-checked { .ant-switch-checked {
background-color: #5dc988; background-color: #5dc988;
} }
.info { .info {
margin-left: 10px; margin-left: 10px;
color: #6f6f6f; color: #6f6f6f;
font-size: 14px; font-size: 14px;
// margin-top: 10px; // margin-top: 10px;
} }
.infor { .infor {
margin-left: 38px; margin-left: 38px;
margin-top: 10px; margin-top: 10px;
color: #c7cbd2; color: #c7cbd2;
font-size: 14px; font-size: 14px;
} }
.chooseshow { .chooseshow {
// background-color: red; // background-color: red;
margin-left: 38px; margin-left: 38px;
margin-top: 12px; margin-top: 12px;
.fane { .fane {
color: #6f6f6f; color: #6f6f6f;
font-size: 14px; font-size: 14px;
} }
} }
.choo { .choo {
display: none; display: none;
} }
.btm { .btm {
margin-left: 38px; margin-left: 38px;
margin-top: 20px; margin-top: 20px;
.bmo { .bmo {
color: #6f6f6f; color: #6f6f6f;
font-size: 14px; font-size: 14px;
} }
.bmt { .bmt {
color: #c7cbd2; color: #c7cbd2;
font-size: 14px; font-size: 14px;
margin-top: 3px; margin-top: 3px;
} }
.chosecon { .chosecon {
display: flex; display: flex;
margin-top: 6px; margin-top: 6px;
margin-bottom: 20px; margin-bottom: 20px;
.chose { .chose {
position: relative; position: relative;
.inl { .inl {
position: absolute; position: absolute;
top: 2px; top: 2px;
} }
.sh { .sh {
margin-left: 23px; margin-left: 23px;
color: #6f6f6f; color: #6f6f6f;
@@ -6303,8 +6405,10 @@ export default {
} }
} }
} }
.Lhead { .Lhead {
display: flex; display: flex;
.btns { .btns {
display: flex; display: flex;
margin-left: 20px; margin-left: 20px;
@@ -6321,9 +6425,11 @@ export default {
margin-right: 14px; margin-right: 14px;
flex-shrink: 0; flex-shrink: 0;
cursor: pointer; cursor: pointer;
.search { .search {
background-size: 100%; background-size: 100%;
} }
.btnText { .btnText {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
@@ -6332,6 +6438,7 @@ export default {
margin-left: 5px; margin-left: 5px;
} }
} }
.btn1 { .btn1 {
.search { .search {
width: 15px; width: 15px;
@@ -6339,6 +6446,7 @@ export default {
background-image: url("../../assets/images/courseManage/search1.png"); background-image: url("../../assets/images/courseManage/search1.png");
} }
} }
.btn2 { .btn2 {
.search { .search {
width: 16px; width: 16px;
@@ -6346,46 +6454,59 @@ export default {
background-image: url("../../assets/images/courseManage/reset1.png"); background-image: url("../../assets/images/courseManage/reset1.png");
} }
} }
.btn3 { .btn3 {
margin-right: 0px; margin-right: 0px;
.search { .search {
width: 17px; width: 17px;
height: 18px; height: 18px;
background-image: url("../../assets/images/courseManage/add1.png"); background-image: url("../../assets/images/courseManage/add1.png");
} }
} }
.btn1:hover { .btn1:hover {
background: rgba(64, 158, 255, 1); background: rgba(64, 158, 255, 1);
.search { .search {
background-image: url("../../assets/images/courseManage/search0.png"); background-image: url("../../assets/images/courseManage/search0.png");
} }
.btnText { .btnText {
color: #ffffff; color: #ffffff;
} }
} }
.btn2:hover { .btn2:hover {
background: rgba(64, 158, 255, 1); background: rgba(64, 158, 255, 1);
.search { .search {
background-image: url("../../assets/images/courseManage/reset0.png"); background-image: url("../../assets/images/courseManage/reset0.png");
} }
.btnText { .btnText {
color: #ffffff; color: #ffffff;
} }
} }
.btn3:hover { .btn3:hover {
background: rgba(64, 158, 255, 1); background: rgba(64, 158, 255, 1);
.search { .search {
background-image: url("../../assets/images/courseManage/add0.png"); background-image: url("../../assets/images/courseManage/add0.png");
} }
.btnText { .btnText {
color: #ffffff; color: #ffffff;
} }
} }
} }
} }
.Lbom { .Lbom {
position: relative; position: relative;
margin-bottom: 20px; margin-bottom: 20px;
.item { .item {
width: 100%; width: 100%;
height: 200px; height: 200px;
@@ -6393,6 +6514,7 @@ export default {
margin-top: 40px; margin-top: 40px;
border-radius: 8px; border-radius: 8px;
border: 1px solid #f0f4fe; border: 1px solid #f0f4fe;
.itemhead { .itemhead {
height: 50px; height: 50px;
width: 100%; width: 100%;
@@ -6400,6 +6522,7 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
position: relative; position: relative;
.lev { .lev {
margin-left: 27px; margin-left: 27px;
margin-right: 16px; margin-right: 16px;
@@ -6407,64 +6530,77 @@ export default {
color: #409eff; color: #409eff;
font-size: 16px; font-size: 16px;
} }
.lin { .lin {
width: 1px; width: 1px;
height: 35%; height: 35%;
background-color: #c7cbd2; background-color: #c7cbd2;
} }
.nam { .nam {
margin-left: 16px; margin-left: 16px;
color: #4f5156; color: #4f5156;
line-height: 100%; line-height: 100%;
font-size: 16px; font-size: 16px;
} }
.count { .count {
position: absolute; position: absolute;
line-height: 100%; line-height: 100%;
color: #4f5156; color: #4f5156;
font-size: 14px; font-size: 14px;
right: 40px; right: 40px;
span:nth-child(2) { span:nth-child(2) {
color: #63ca8c; color: #63ca8c;
} }
} }
} }
.itembomm { .itembomm {
display: flex; display: flex;
align-items: center; align-items: center;
height: 150px; height: 150px;
.it { .it {
// margin-left: 110px; // margin-left: 110px;
// margin-right: 110px; // margin-right: 110px;
width: 13%; width: 13%;
text-align: center; text-align: center;
.on { .on {
font-size: 30px; font-size: 30px;
} }
.ittext { .ittext {
color: #4f5156; color: #4f5156;
margin-top: 16px; margin-top: 16px;
margin-left: -5px; margin-left: -5px;
} }
} }
.linee { .linee {
background-color: #ecf2fb; background-color: #ecf2fb;
width: 1px; width: 1px;
height: 55%; height: 55%;
} }
.itright { .itright {
position: absolute; position: absolute;
right: 45px; right: 45px;
display: flex; display: flex;
.te { .te {
color: #4ea6ff; color: #4ea6ff;
font-size: 14px; font-size: 14px;
cursor: pointer; cursor: pointer;
} }
.more { .more {
position: relative; position: relative;
height: 30px; height: 30px;
display: flex; display: flex;
.moreArrow { .moreArrow {
width: 13px; width: 13px;
height: 7px; height: 7px;
@@ -6475,6 +6611,7 @@ export default {
margin-left: 7px; margin-left: 7px;
margin-top: 6px; margin-top: 6px;
} }
.moreItems { .moreItems {
width: 80px; width: 80px;
height: 70px; height: 70px;
@@ -6487,6 +6624,7 @@ export default {
left: 0px; left: 0px;
top: 20px; top: 20px;
z-index: 100; z-index: 100;
.roleItem { .roleItem {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
@@ -6496,14 +6634,17 @@ export default {
justify-content: center; justify-content: center;
cursor: pointer; cursor: pointer;
} }
.roleItem:hover { .roleItem:hover {
color: #4ea6ff; color: #4ea6ff;
} }
} }
} }
.more:hover .moreArrow { .more:hover .moreArrow {
background-image: url("../../assets/images/navtop/up.png"); background-image: url("../../assets/images/navtop/up.png");
} }
.more:hover .moreItems { .more:hover .moreItems {
display: block; display: block;
} }
@@ -6513,12 +6654,15 @@ export default {
.show { .show {
color: blue; color: blue;
} }
.noshow { .noshow {
display: none; display: none;
} }
} }
.create { .create {
margin-top: 40px; margin-top: 40px;
.taskbox { .taskbox {
width: 412px; width: 412px;
height: 160px; height: 160px;
@@ -6527,21 +6671,25 @@ export default {
// margin-left: 68px; // margin-left: 68px;
margin-bottom: 40px; margin-bottom: 40px;
cursor: pointer; cursor: pointer;
.leftt { .leftt {
position: absolute; position: absolute;
top: 18px; top: 18px;
left: 0; left: 0;
} }
.photo { .photo {
position: absolute; position: absolute;
top: 42px; top: 42px;
left: 37px; left: 37px;
} }
.rightt { .rightt {
position: absolute; position: absolute;
top: 69px; top: 69px;
right: 26px; right: 26px;
} }
.centerbox { .centerbox {
position: absolute; position: absolute;
top: 52px; top: 52px;
@@ -6550,6 +6698,7 @@ export default {
font-weight: 700; font-weight: 700;
//line-height: 36px; //line-height: 36px;
} }
.centermain { .centermain {
color: rgba(135, 139, 146, 1); color: rgba(135, 139, 146, 1);
font-size: 14px; font-size: 14px;

View File

@@ -37,8 +37,23 @@
</div> </div>
<div class="tmpl_body"> <div class="tmpl_body">
<div class="tmpl_tabbox"> <div class="tmpl_tabbox">
<a-table :columns="columns1" :data-source="tableData1" :loading="tableDataTotal === -1 ? true : false" <a-table :columns="columns1" :data-source="tableData1"
expandRowByClick="true" @expand="expandTable" :pagination="pagination" /> expandRowByClick="true" @expand="expandTable" :pagination="false"/>
<div class="tableBox" style="display:flex;justify-content:center;padding:20px;">
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
v-model:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -73,13 +88,13 @@ const columns1 = [
key: "creator", key: "creator",
align: "center", align: "center",
}, },
{ // {
title: "最近学习时间", // title: "最近学习时间",
width: "25%", // width: "25%",
dataIndex: "stutime", // dataIndex: "stutime",
key: "stutime", // key: "stutime",
align: "center", // align: "center",
}, // },
{ {
title: "操作", title: "操作",
width: "22%", width: "22%",
@@ -100,6 +115,7 @@ export default defineComponent({
currentPage: 1, currentPage: 1,
pageSize: 10, pageSize: 10,
total:50, total:50,
tableDataTotal:0,
tableData1: [ tableData1: [
{ {
key: "1", key: "1",
@@ -180,6 +196,12 @@ export default defineComponent({
getLibraryList(); getLibraryList();
}) })
// 翻页
const changePagination = (page) => {
pagination.current = page;
getLibraryList();
};
// 获取模板列表 // 获取模板列表
const getLibraryList = () => { const getLibraryList = () => {
let date = Math.ceil(new Date(state.time).getTime() / 1000); let date = Math.ceil(new Date(state.time).getTime() / 1000);
@@ -193,6 +215,7 @@ export default defineComponent({
} }
api.templateList(obj).then((res) => { api.templateList(obj).then((res) => {
state.tableData1 = [] state.tableData1 = []
state.tableDataTotal = res.data.data.total;
console.log(res); console.log(res);
let resData = res.data.data.rows let resData = res.data.data.rows
if (resData.length) { if (resData.length) {
@@ -253,6 +276,7 @@ export default defineComponent({
resetLevel, resetLevel,
pagination, pagination,
toLibraryAdd, toLibraryAdd,
changePagination
}; };
}, },
}); });

View File

@@ -15,8 +15,7 @@ module.exports = defineConfig({
proxy: { proxy: {
"/manageApi": { "/manageApi": {
target:"http://111.231.196.214:30001/", target:"http://111.231.196.214:30001/",
// target: "http://localhost:30001/", //这里后台的地址模拟的;应该填写你们真实的后台接口 changeOrigin: true, //表示是否改变原域名
changeOrigin: true, //表示是否改变原域名
// secure: false, // secure: false,
// ws: false, //表示WebSocket协议 // ws: false, //表示WebSocket协议
pathRewrite: { pathRewrite: {