mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-15 05:46:45 +08:00
合并
This commit is contained in:
19
src/App.vue
19
src/App.vue
@@ -18,11 +18,13 @@
|
|||||||
<script>
|
<script>
|
||||||
import { computed, defineComponent } from "vue";
|
import { computed, defineComponent } from "vue";
|
||||||
import { useRouter, useRoute } from "vue-router";
|
import { useRouter, useRoute } from "vue-router";
|
||||||
|
import { useStore } from "vuex";
|
||||||
import NavLeft from "@/components/NavLeft";
|
import NavLeft from "@/components/NavLeft";
|
||||||
import NavTop from "@/components/NavTop";
|
import NavTop from "@/components/NavTop";
|
||||||
import OpenPages from "@/components/OpenPages";
|
import OpenPages from "@/components/OpenPages";
|
||||||
import BreadCrumb from "@/components/BreadCrumb";
|
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";
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
NavLeft,
|
NavLeft,
|
||||||
@@ -33,13 +35,28 @@ export default defineComponent({
|
|||||||
setup() {
|
setup() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
const store = useStore();
|
||||||
// console.log("router", router.getRoutes(), route);
|
// console.log("router", router.getRoutes(), route);
|
||||||
const routes = computed(() => {
|
const routes = computed(() => {
|
||||||
return router.getRoutes().filter((e) => e.meta?.isLink);
|
return router.getRoutes().filter((e) => e.meta?.isLink);
|
||||||
});
|
});
|
||||||
|
|
||||||
const currentRouteName = computed(() => route.name);
|
const currentRouteName = computed(() => route.name);
|
||||||
|
//获取组织树
|
||||||
|
const orgTree = () => {
|
||||||
|
api
|
||||||
|
.orgtree()
|
||||||
|
.then((res) => {
|
||||||
|
console.log("获取集团组织成功", res);
|
||||||
|
if (res.status === 200) {
|
||||||
|
store.commit("getOrgtreeList", res.data.data);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log("获取集团组织失败", err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
orgTree();
|
||||||
return {
|
return {
|
||||||
routes,
|
routes,
|
||||||
name: currentRouteName,
|
name: currentRouteName,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: lixg lixg@dongwu-inc.com
|
* @Author: lixg lixg@dongwu-inc.com
|
||||||
* @Date: 2022-11-07 17:06:45
|
* @Date: 2022-11-07 17:06:45
|
||||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||||
* @LastEditTime: 2022-11-15 16:43:26
|
* @LastEditTime: 2022-11-20 17:45:37
|
||||||
* @FilePath: /fe-manage/src/api/index.js
|
* @FilePath: /fe-manage/src/api/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
|
||||||
*/
|
*/
|
||||||
@@ -69,3 +69,5 @@ export const getDiscussDetail=(obj)=>http.post('/discuss/getDiscussDetail',obj)
|
|||||||
|
|
||||||
//获取模版列表
|
//获取模版列表
|
||||||
export const getTemplate = (obj) => http.post('/admin/project/template/list', obj)
|
export const getTemplate = (obj) => http.post('/admin/project/template/list', obj)
|
||||||
|
//获取项目统计
|
||||||
|
export const getProjectCount = (projectId) => http.get('/admin/project/projectCount', { params: { projectId: projectId } })
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
* @Author: lixg lixg@dongwu-inc.com
|
* @Author: lixg lixg@dongwu-inc.com
|
||||||
* @Date: 2022-11-04 22:45:31
|
* @Date: 2022-11-04 22:45:31
|
||||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||||
* @LastEditTime: 2022-11-17 15:41:45
|
* @LastEditTime: 2022-11-20 15:39:38
|
||||||
* @FilePath: /fe-manage/src/api/index1.js
|
* @FilePath: /fe-manage/src/api/index1.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
|
||||||
*/
|
*/
|
||||||
@@ -53,13 +53,15 @@ export const createLearnPath = (obj) => http.post('/admin/router/edit', obj);
|
|||||||
export const getLearnPath = (obj) => http.post('/admin/router/list', obj);
|
export const getLearnPath = (obj) => http.post('/admin/router/list', obj);
|
||||||
//学习路径图的发布、停用、删除
|
//学习路径图的发布、停用、删除
|
||||||
export const handleLearnPath = (obj) => http.post('/admin/router/handle', obj);
|
export const handleLearnPath = (obj) => http.post('/admin/router/handle', obj);
|
||||||
|
//获取路径图统计数据
|
||||||
|
export const getLearnCount = (routerId) => http.get('/admin/router/getCount', { params: { routerId: routerId } })
|
||||||
//获取关卡
|
//获取关卡
|
||||||
export const getChapter = (obj) => http.post('/admin/router/detail', { params: obj });
|
export const getChapter = (obj) => http.post('/admin/router/detail', { params: obj });
|
||||||
|
|
||||||
//新建或编辑关卡
|
//新建或编辑关卡
|
||||||
export const editChapter = (obj) => http.post('/admin/router/editChapter', obj);
|
export const editChapter = (obj) => http.post('/admin/router/editChapter', obj);
|
||||||
|
// 编辑路径图设置
|
||||||
|
export const setConfig = (obj) => http.post('/admin/router/setConfig', obj);
|
||||||
//获取学员列表
|
//获取学员列表
|
||||||
export const getStudent = (obj) => http.post('/admin/router/studentList', obj);
|
export const getStudent = (obj) => http.post('/admin/router/studentList', obj);
|
||||||
//获取路径图详情-包含关卡及任务列表
|
//获取路径图详情-包含关卡及任务列表
|
||||||
@@ -83,6 +85,12 @@ export const scoreRank = (obj) => http.post('/admin/project/scoreRank', obj);
|
|||||||
export const billboard = (obj) => http.post('/admin/project/billboard', obj);
|
export const billboard = (obj) => http.post('/admin/project/billboard', obj);
|
||||||
//项目基础信息-----------------------------------
|
//项目基础信息-----------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
// 获取组织结构树
|
||||||
|
export const orgtree = () => http.get('/org/tree');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 测试方法
|
// 测试方法
|
||||||
// import * as api from '../../api/index'
|
// import * as api from '../../api/index'
|
||||||
// api.getLearnPath({}).then(res => {
|
// api.getLearnPath({}).then(res => {
|
||||||
@@ -90,3 +98,6 @@ export const billboard = (obj) => http.post('/admin/project/billboard', obj);
|
|||||||
// }).catch(err => {
|
// }).catch(err => {
|
||||||
// console.log(err)
|
// console.log(err)
|
||||||
// })
|
// })
|
||||||
|
|
||||||
|
|
||||||
|
// export const choiceEvaluation = (obj) => http.post('/evaluation/choiceEvaluation', obj);
|
||||||
@@ -168,205 +168,7 @@ const commonData={
|
|||||||
|
|
||||||
|
|
||||||
//组织树
|
//组织树
|
||||||
const organizationalTree= [
|
const organizationalTree = []
|
||||||
{
|
|
||||||
title: "京东方",
|
|
||||||
value: "京东方",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "产研部",
|
|
||||||
value: "产研部",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "产品部",
|
|
||||||
value: "产品部",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究部",
|
|
||||||
value: "研究部",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究部2",
|
|
||||||
value: "研究部2",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究3",
|
|
||||||
value: "研究3",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究4",
|
|
||||||
value: "研究4",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究部5",
|
|
||||||
value: "研究部5",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究部6",
|
|
||||||
value: "研究部6",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究部7",
|
|
||||||
value: "研究部7",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究部8",
|
|
||||||
value: "研究部8",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "研究部9",
|
|
||||||
value: "研究部9",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "二级标题",
|
|
||||||
value: "二级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "三级标题",
|
|
||||||
value: "三级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "四级标题",
|
|
||||||
value: "四级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "五级标题",
|
|
||||||
value: "五级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "六级标题",
|
|
||||||
value: "六级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "七级标题",
|
|
||||||
value: "七级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "八级标题",
|
|
||||||
value: "八级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "九级标题",
|
|
||||||
value: "九级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "十级标题",
|
|
||||||
value: "十级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "十一级标题",
|
|
||||||
value: "十一级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "十二级标题",
|
|
||||||
value: "十二级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title:
|
|
||||||
"十三级标题十三级标题十三级标题十三级标题",
|
|
||||||
value: "十三级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title:
|
|
||||||
"十四级标题",
|
|
||||||
value:
|
|
||||||
"十四级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title:
|
|
||||||
"十五级标题",
|
|
||||||
value:
|
|
||||||
"十五级标题",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title:
|
|
||||||
"十六级标题",
|
|
||||||
value:
|
|
||||||
"十六级标题",
|
|
||||||
children:
|
|
||||||
[
|
|
||||||
{
|
|
||||||
title:
|
|
||||||
"十七级标题",
|
|
||||||
value:
|
|
||||||
"十七级标题",
|
|
||||||
children:
|
|
||||||
[
|
|
||||||
{
|
|
||||||
title:
|
|
||||||
"十八级标题",
|
|
||||||
value:
|
|
||||||
"十八级标题",
|
|
||||||
children:
|
|
||||||
[
|
|
||||||
{
|
|
||||||
title:
|
|
||||||
"十九级标题",
|
|
||||||
value:
|
|
||||||
"十九级标题",
|
|
||||||
children:
|
|
||||||
[
|
|
||||||
{
|
|
||||||
title:
|
|
||||||
"二十级标题二十级标题",
|
|
||||||
value:
|
|
||||||
"二十级标题二十级标题",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "人力资源部",
|
|
||||||
value: "人力资源部",
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: "人事部",
|
|
||||||
value: "人事部",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "行政部",
|
|
||||||
value: "行政部",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
]
|
|
||||||
export {
|
export {
|
||||||
toDate,
|
toDate,
|
||||||
getWeek,
|
getWeek,
|
||||||
|
|||||||
BIN
src/assets/images/doc.png
Normal file
BIN
src/assets/images/doc.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 477 B |
@@ -447,9 +447,10 @@ export default {
|
|||||||
state.name = "";
|
state.name = "";
|
||||||
state.projectName = "";
|
state.projectName = "";
|
||||||
state.tabledata = [];
|
state.tabledata = [];
|
||||||
getManageList();
|
//getManageList();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
selectProjectName,
|
selectProjectName,
|
||||||
|
|||||||
@@ -490,8 +490,9 @@ export default {
|
|||||||
state.name = "";
|
state.name = "";
|
||||||
state.projectName = "";
|
state.projectName = "";
|
||||||
state.tabledata = [];
|
state.tabledata = [];
|
||||||
getManageList();
|
// getManageList();
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
selectProjectName,
|
selectProjectName,
|
||||||
|
|||||||
@@ -418,8 +418,9 @@ export default {
|
|||||||
state.name = "";
|
state.name = "";
|
||||||
state.projectName = "";
|
state.projectName = "";
|
||||||
state.tabledata = [];
|
state.tabledata = [];
|
||||||
getManageList();
|
//getManageList();
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
selectProjectName,
|
selectProjectName,
|
||||||
|
|||||||
225
src/components/drawers/UnlockMode.vue
Normal file
225
src/components/drawers/UnlockMode.vue
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
<template>
|
||||||
|
<a-drawer
|
||||||
|
:visible="unlockModeVisible"
|
||||||
|
class="drawerStyle unlockmode"
|
||||||
|
placement="right"
|
||||||
|
width="70%"
|
||||||
|
@after-visible-change="afterVisibleChange"
|
||||||
|
>
|
||||||
|
<div class="drawerMain">
|
||||||
|
<div class="header">
|
||||||
|
<div class="headerTitle">选择解锁模式</div>
|
||||||
|
<img
|
||||||
|
style="width: 29px; height: 29px; cursor: pointer"
|
||||||
|
src="../../assets/images/basicinfo/close.png"
|
||||||
|
@click="closeDrawer"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="main">
|
||||||
|
<div class="classify">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in classify"
|
||||||
|
:key="index"
|
||||||
|
class="classifyItem"
|
||||||
|
@click="selectClassify(item)"
|
||||||
|
:style="{
|
||||||
|
color: item.type === selectClassifyType ? '#FFFFFF' : '#999999',
|
||||||
|
'background-color':
|
||||||
|
item.type === selectClassifyType ? '#409EFF' : '#FFFFFF',
|
||||||
|
border:
|
||||||
|
item.type === selectClassifyType
|
||||||
|
? '1px solid #409EFF'
|
||||||
|
: '1px solid #999999',
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
{{ item.text }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="selectClassifyType === 1" class="type1">
|
||||||
|
<span style="font-weight: 500">描述:</span
|
||||||
|
><span>不设学习限制,学员可以在任何时间学习</span>
|
||||||
|
</div>
|
||||||
|
<div v-if="selectClassifyType === 2" class="type1 type2">
|
||||||
|
<div>
|
||||||
|
<span style="font-weight: 500">描述:</span
|
||||||
|
><span>辩论、活动、测评、调研、投票按照设置时间</span>
|
||||||
|
</div>
|
||||||
|
<div class="radio">
|
||||||
|
<span>解锁单元:</span>
|
||||||
|
<a-radio v-model:checked="checked">逐个任务解锁</a-radio>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="selectClassifyType === 3" class="type1 type3">
|
||||||
|
<div>
|
||||||
|
<span style="font-weight: 500">描述:</span
|
||||||
|
><span>前一个阶段达成目标后解锁下一个阶段</span>
|
||||||
|
</div>
|
||||||
|
<div class="radio" style="display: flex">
|
||||||
|
<div style="margin-top: 1px">解锁条件:</div>
|
||||||
|
<a-radio-group v-model:value="radioSelect">
|
||||||
|
<div>
|
||||||
|
<a-radio :value="1"
|
||||||
|
>逐个任务解锁,完成一个任务后解锁下一个</a-radio
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div style="margin-top: 24px">
|
||||||
|
<a-radio :value="2"
|
||||||
|
>完成当前阶段所有必修任务解锁下一阶段</a-radio
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</a-radio-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btnn">
|
||||||
|
<button class="btn1">取消</button>
|
||||||
|
<button class="btn2">确定</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-drawer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { reactive, toRefs } from "vue";
|
||||||
|
export default {
|
||||||
|
name: "UnlockMode",
|
||||||
|
props: {
|
||||||
|
unlockModeVisible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
setup(props, ctx) {
|
||||||
|
const state = reactive({
|
||||||
|
classify: [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
text: "自由学习模式",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 2,
|
||||||
|
text: "按学习时间解锁",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
text: "闯关模式",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
selectClassifyType: 1,
|
||||||
|
checked: true,
|
||||||
|
radioSelect: 1,
|
||||||
|
});
|
||||||
|
const closeDrawer = () => {
|
||||||
|
state.selectClassifyType = 1;
|
||||||
|
state.checked = true;
|
||||||
|
state.radioSelect = 1;
|
||||||
|
ctx.emit("update:unlockModeVisible", false);
|
||||||
|
};
|
||||||
|
|
||||||
|
const afterVisibleChange = (bool) => {
|
||||||
|
console.log("state", bool);
|
||||||
|
};
|
||||||
|
|
||||||
|
const selectClassify = (e) => {
|
||||||
|
state.selectClassifyType = e.type;
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
...toRefs(state),
|
||||||
|
afterVisibleChange,
|
||||||
|
closeDrawer,
|
||||||
|
// change,
|
||||||
|
selectClassify,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.unlockmode {
|
||||||
|
.drawerMain {
|
||||||
|
min-width: 600px;
|
||||||
|
margin: 0px 32px 0px 32px;
|
||||||
|
overflow-x: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.header {
|
||||||
|
height: 73px;
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
// background-color: red;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
.headerTitle {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 25px;
|
||||||
|
// margin-left: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.classify {
|
||||||
|
display: flex;
|
||||||
|
.classifyItem {
|
||||||
|
width: 160px;
|
||||||
|
height: 38px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #999999;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #999999;
|
||||||
|
line-height: 22px;
|
||||||
|
margin-right: 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.type1 {
|
||||||
|
margin-top: 50px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
.radio {
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.btnn {
|
||||||
|
height: 72px;
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||||
|
.btn1 {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
border: 1px solid #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: #4ea6ff;
|
||||||
|
background-color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.btn2 {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-left: 15px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -378,7 +378,7 @@ export default {
|
|||||||
state.name = "";
|
state.name = "";
|
||||||
state.projectName = "";
|
state.projectName = "";
|
||||||
state.tabledata = [];
|
state.tabledata = [];
|
||||||
getManageList();
|
// getManageList();
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* @Author: lixg lixg@dongwu-inc.com
|
||||||
|
* @Date: 2022-11-09 09:26:26
|
||||||
|
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||||
|
* @LastEditTime: 2022-11-20 16:06:52
|
||||||
|
* @FilePath: /fe-manage/src/store/index.js
|
||||||
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
|
*/
|
||||||
import { createStore } from "vuex";
|
import { createStore } from "vuex";
|
||||||
|
|
||||||
export default createStore({
|
export default createStore({
|
||||||
@@ -14,6 +22,8 @@ export default createStore({
|
|||||||
|
|
||||||
assessmentName: "",
|
assessmentName: "",
|
||||||
routerId: null,
|
routerId: null,
|
||||||
|
|
||||||
|
orgtreeList: [],
|
||||||
},
|
},
|
||||||
getters: {},
|
getters: {},
|
||||||
mutations: {
|
mutations: {
|
||||||
@@ -31,6 +41,9 @@ export default createStore({
|
|||||||
console.log("state.assessmentName");
|
console.log("state.assessmentName");
|
||||||
console.log(state.assessmentName);
|
console.log(state.assessmentName);
|
||||||
},
|
},
|
||||||
|
getOrgtreeList(state, orgtreeList) {
|
||||||
|
state.orgtreeList = orgtreeList;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
actions: {},
|
actions: {},
|
||||||
modules: {},
|
modules: {},
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
|
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
|
|
||||||
<!-- 创建路径弹窗 -->
|
<!-- 创建路径弹窗 v-model:visible="out" -->
|
||||||
<a-modal
|
<a-modal
|
||||||
:closable="sh"
|
:closable="sh"
|
||||||
centered="true"
|
centered="true"
|
||||||
@@ -194,18 +194,24 @@
|
|||||||
<img class="im" src="../../assets/px.jpg" /> -->
|
<img class="im" src="../../assets/px.jpg" /> -->
|
||||||
<div
|
<div
|
||||||
@click="chooseImg(item)"
|
@click="chooseImg(item)"
|
||||||
v-for="item in imgData"
|
v-for="(item, index) in imgData"
|
||||||
:key="item.key"
|
:key="item.key"
|
||||||
class="learnBgItem"
|
class="learnBgItem"
|
||||||
:style="{
|
:style="{
|
||||||
border:
|
border:
|
||||||
learnPathBg === item.id
|
learnPathBg === item.id
|
||||||
? '2px solid rgba(78, 166, 255, 1)'
|
? '2px solid rgba(78, 166, 255, 1)'
|
||||||
: '1px solid #ccc',
|
: '1px solid #C7CBD2',
|
||||||
'background-image': 'url(' + item.source + ')',
|
'background-image': 'url(' + item.source + ')',
|
||||||
|
display: index >= 5 ? 'none' : 'flex',
|
||||||
}"
|
}"
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
@click="showLearnBgMore"
|
||||||
|
v-if="imgData.length > 5"
|
||||||
|
class="learnBgItem learnBgMore"
|
||||||
>
|
>
|
||||||
<!-- <img class="im" :src="item.source" /> -->
|
查看更多 <img src="../../assets/images/projectadd/go.png" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -220,7 +226,7 @@
|
|||||||
<button class="samtn btn1" @click="handleOut">取消</button>
|
<button class="samtn btn1" @click="handleOut">取消</button>
|
||||||
<button class="samtn btn2" @click="createLearnPath">确定</button>
|
<button class="samtn btn2" @click="createLearnPath">确定</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div
|
<div
|
||||||
class="aeLoading"
|
class="aeLoading"
|
||||||
:style="{ display: lpLoading ? 'flex' : 'none' }"
|
:style="{ display: lpLoading ? 'flex' : 'none' }"
|
||||||
@@ -228,6 +234,7 @@
|
|||||||
<a-spin :spinning="lpLoading" tip="添加中..." />
|
<a-spin :spinning="lpLoading" tip="添加中..." />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
|
|
||||||
<!-- 编辑路径弹窗 -->
|
<!-- 编辑路径弹窗 -->
|
||||||
@@ -310,7 +317,7 @@
|
|||||||
<img class="im" src="../../assets/px.jpg" /> -->
|
<img class="im" src="../../assets/px.jpg" /> -->
|
||||||
<div
|
<div
|
||||||
@click="chooseImg2(item)"
|
@click="chooseImg2(item)"
|
||||||
v-for="item in imgData"
|
v-for="(item, index) in imgData"
|
||||||
:key="item.key"
|
:key="item.key"
|
||||||
class="learnBgItem"
|
class="learnBgItem"
|
||||||
:style="{
|
:style="{
|
||||||
@@ -319,16 +326,17 @@
|
|||||||
? '2px solid rgba(78, 166, 255, 1)'
|
? '2px solid rgba(78, 166, 255, 1)'
|
||||||
: '1px solid #ccc',
|
: '1px solid #ccc',
|
||||||
'background-image': 'url(' + item.source + ')',
|
'background-image': 'url(' + item.source + ')',
|
||||||
|
display: index >= 5 ? 'none' : 'flex',
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<!-- <img class="im" :src="item.source" /> -->
|
<!-- <img class="im" :src="item.source" /> -->
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@click="showImgMore"
|
@click="showLearnBgMore"
|
||||||
v-if="imgData.length >= 5"
|
v-if="imgData.length > 5"
|
||||||
class="learnBgItem"
|
class="learnBgItem learnBgMore"
|
||||||
>
|
>
|
||||||
<!-- <img class="im" :src="item.source" /> -->
|
查看更多 <img src="../../assets/images/projectadd/go.png" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -344,8 +352,8 @@
|
|||||||
<button class="samtn btn2" @click="editLearnPath">确定</button>
|
<button class="samtn btn2" @click="editLearnPath">确定</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div></a-modal
|
</div>
|
||||||
>
|
</a-modal>
|
||||||
<!-- 发布弹窗 -->
|
<!-- 发布弹窗 -->
|
||||||
<a-modal
|
<a-modal
|
||||||
v-model:visible="pub"
|
v-model:visible="pub"
|
||||||
@@ -392,7 +400,9 @@
|
|||||||
<div class="projectbox">
|
<div class="projectbox">
|
||||||
<div class="promessage">
|
<div class="promessage">
|
||||||
<div class="messageme">路径信息</div>
|
<div class="messageme">路径信息</div>
|
||||||
<div class="messagege">当前路径共0个关卡,0个任务</div>
|
<div class="messagege">
|
||||||
|
当前路径共{{ routeChapters }}个关卡,{{ routeTasks }}个任务
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stumessage">
|
<div class="stumessage">
|
||||||
<div class="messageme1">学员信息</div>
|
<div class="messageme1">学员信息</div>
|
||||||
@@ -582,6 +592,49 @@
|
|||||||
<power-list v-model:PLvisible="PLvisible" />
|
<power-list v-model:PLvisible="PLvisible" />
|
||||||
|
|
||||||
<!-- 创建路径loading -->
|
<!-- 创建路径loading -->
|
||||||
|
|
||||||
|
<!-- 更多背景图 v-model:visible="learnBgMore" -->
|
||||||
|
<a-modal
|
||||||
|
:closable="sh"
|
||||||
|
centered="true"
|
||||||
|
v-model:visible="learnBgMore"
|
||||||
|
:footer="null"
|
||||||
|
wrapClassName="learnBgMoreModal"
|
||||||
|
:z-index="9999"
|
||||||
|
>
|
||||||
|
<div class="main">
|
||||||
|
<div class="top">
|
||||||
|
<div class="topc">路径图背景</div>
|
||||||
|
<div @click="closeLearnBgMore">
|
||||||
|
<img
|
||||||
|
style="width: 20px; height: 20px"
|
||||||
|
src="../../assets/images/basicinfo/close.png"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="imagesBox">
|
||||||
|
<div
|
||||||
|
@click="chooseImg2(item)"
|
||||||
|
v-for="item in imgData"
|
||||||
|
:key="item.key"
|
||||||
|
class="learnBgItem"
|
||||||
|
:style="{
|
||||||
|
border:
|
||||||
|
learnPathBg2 === item.id
|
||||||
|
? '2px solid rgba(78, 166, 255, 1)'
|
||||||
|
: '1px solid #ccc',
|
||||||
|
'background-image': 'url(' + item.source + ')',
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<!-- <img class="im" :src="item.source" /> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn">
|
||||||
|
<button class="samtn btn1" @click="closeLearnBgMore">取消</button>
|
||||||
|
<button class="samtn btn2" @click="closeLearnBgMore">确定</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@@ -643,6 +696,74 @@ export default {
|
|||||||
id: 5,
|
id: 5,
|
||||||
source: require("../../assets/images/leveladd/3.png"),
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 6,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 7,
|
||||||
|
source: require("../../assets/images/leveladd/2.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 5,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 6,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 7,
|
||||||
|
source: require("../../assets/images/leveladd/2.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 5,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 6,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 7,
|
||||||
|
source: require("../../assets/images/leveladd/2.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 5,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 6,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 7,
|
||||||
|
source: require("../../assets/images/leveladd/2.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 5,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 6,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 7,
|
||||||
|
source: require("../../assets/images/leveladd/2.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 5,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 6,
|
||||||
|
source: require("../../assets/images/leveladd/3.png"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 7,
|
||||||
|
source: require("../../assets/images/leveladd/2.png"),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
learnPathBg: null, //创建路径选择的路径图背景
|
learnPathBg: null, //创建路径选择的路径图背景
|
||||||
learnPathBg2: null, //编辑路径选择的路径图背景
|
learnPathBg2: null, //编辑路径选择的路径图背景
|
||||||
@@ -728,14 +849,16 @@ export default {
|
|||||||
endTime: null, //结束时间
|
endTime: null, //结束时间
|
||||||
//发布---------------
|
//发布---------------
|
||||||
releasePathId: null, //发布路径id
|
releasePathId: null, //发布路径id
|
||||||
routeStudentsNum: 0,
|
routeStudentsNum: 0, //学员总数
|
||||||
|
routeChapters: 0, //关卡总数
|
||||||
|
routeTasks: 0, //任务总数
|
||||||
recallPathId: null, //撤回路径id
|
recallPathId: null, //撤回路径id
|
||||||
stopPathId: null, //停用路径id
|
stopPathId: null, //停用路径id
|
||||||
copyPathId: null, //复制路径iid
|
copyPathId: null, //复制路径iid
|
||||||
|
|
||||||
lpLoading: false,
|
lpLoading: false,
|
||||||
|
learnBgMore: false, //是否显示更多学习路径背景
|
||||||
});
|
});
|
||||||
|
|
||||||
const selectProjectName = (value, index) => {
|
const selectProjectName = (value, index) => {
|
||||||
console.log("value", value, index);
|
console.log("value", value, index);
|
||||||
};
|
};
|
||||||
@@ -773,32 +896,19 @@ export default {
|
|||||||
const showPub = (routerId) => {
|
const showPub = (routerId) => {
|
||||||
state.pub = true;
|
state.pub = true;
|
||||||
state.releasePathId = routerId;
|
state.releasePathId = routerId;
|
||||||
//获取学员总数
|
|
||||||
let obj = {
|
|
||||||
pageNo: 0,
|
|
||||||
pageSize: 0,
|
|
||||||
routerId: routerId,
|
|
||||||
};
|
|
||||||
api
|
api
|
||||||
.getStudent(obj)
|
.getLearnCount(routerId)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
// console.log("res", res.data.data);
|
// console.log("获取关卡、任务、学员统计数据", res.data);
|
||||||
state.routeStudentsNum = res.data.data.total;
|
state.routeStudentsNum = res.data.students;
|
||||||
|
state.routeChapters = res.data.chapters;
|
||||||
|
state.routeTasks = res.data.tasks;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.log("err", err);
|
console.log("err", err);
|
||||||
});
|
});
|
||||||
//获取学习路径详细信息
|
|
||||||
api
|
|
||||||
.getRouterDetail(routerId)
|
|
||||||
.then((res) => {
|
|
||||||
console.log("学习路径详情", res);
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.log("学习路径详情获取错误", err);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
//确定发布
|
//确定发布
|
||||||
const releaseLearnPath = () => {
|
const releaseLearnPath = () => {
|
||||||
@@ -1507,10 +1617,33 @@ export default {
|
|||||||
state.endTime = null;
|
state.endTime = null;
|
||||||
getLearnPath();
|
getLearnPath();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// const choiceEvaluation=()=>{
|
||||||
|
// let obj={
|
||||||
|
// keyword: "",
|
||||||
|
// user_id: 1
|
||||||
|
// }
|
||||||
|
// api.choiceEvaluation(obj).then(res=>{
|
||||||
|
// console.log('获取测评列表',res)
|
||||||
|
// }).catch(err=>{
|
||||||
|
// console.log('获取测评列表失败',err)
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// choiceEvaluation()
|
||||||
|
|
||||||
|
//显示更多路径背景弹窗
|
||||||
|
const showLearnBgMore = () => {
|
||||||
|
state.learnBgMore = true;
|
||||||
|
};
|
||||||
|
//关闭更多路径背景弹窗
|
||||||
|
const closeLearnBgMore = () => {
|
||||||
|
state.learnBgMore = false;
|
||||||
|
};
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// console.log("执行");
|
// console.log("执行");
|
||||||
getLearnPath();
|
getLearnPath();
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
selectProjectName,
|
selectProjectName,
|
||||||
@@ -1549,6 +1682,8 @@ export default {
|
|||||||
searchTimeChange,
|
searchTimeChange,
|
||||||
searchLearnPath,
|
searchLearnPath,
|
||||||
resetLearnPath,
|
resetLearnPath,
|
||||||
|
showLearnBgMore,
|
||||||
|
closeLearnBgMore,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -1683,6 +1818,7 @@ export default {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
min-height: 110px;
|
min-height: 110px;
|
||||||
|
height: 300px;
|
||||||
.learnBgItem {
|
.learnBgItem {
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
width: 136px;
|
width: 136px;
|
||||||
@@ -1692,6 +1828,17 @@ export default {
|
|||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
}
|
}
|
||||||
|
.learnBgMore {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border: 1px solid #c7cbd2;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #4ea6ff;
|
||||||
|
line-height: 36px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.info {
|
.info {
|
||||||
@@ -1757,6 +1904,84 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.learnBgMoreModal {
|
||||||
|
.ant-modal {
|
||||||
|
width: 680px !important;
|
||||||
|
height: 528px !important;
|
||||||
|
.ant-modal-content {
|
||||||
|
width: 680px !important;
|
||||||
|
height: 528px !important;
|
||||||
|
.ant-modal-body {
|
||||||
|
width: 680px !important;
|
||||||
|
height: 528px !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
.main {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.top {
|
||||||
|
padding-left: 51px;
|
||||||
|
padding-right: 51px;
|
||||||
|
padding-top: 28px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
cursor: pointer;
|
||||||
|
.topc {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000000;
|
||||||
|
line-height: 36px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.imagesBox {
|
||||||
|
display: flex;
|
||||||
|
// justify-content: space-between;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding-left: 51px;
|
||||||
|
padding-right: 39px;
|
||||||
|
margin-top: 20px;
|
||||||
|
height: 350px;
|
||||||
|
overflow-y: auto;
|
||||||
|
.learnBgItem {
|
||||||
|
border-radius: 8px;
|
||||||
|
width: 136px;
|
||||||
|
height: 106px;
|
||||||
|
background-size: 100%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 30px;
|
||||||
|
margin-top: 30px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
.samtn {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
font-size: 14px;
|
||||||
|
border: 1px solid #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.btn1 {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #4ea6ff;
|
||||||
|
}
|
||||||
|
.btn2 {
|
||||||
|
background-color: #4ea6ff;
|
||||||
|
color: #fff;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
.pub {
|
.pub {
|
||||||
.ant-modal {
|
.ant-modal {
|
||||||
.ant-modal-body {
|
.ant-modal-body {
|
||||||
|
|||||||
@@ -625,8 +625,9 @@
|
|||||||
:pageSize="pageSize"
|
:pageSize="pageSize"
|
||||||
:current="currentPage"
|
:current="currentPage"
|
||||||
:total="tableDataTotal"
|
:total="tableDataTotal"
|
||||||
|
@change="pageChange"
|
||||||
class="pagination"
|
class="pagination"
|
||||||
style="display: none"
|
style="display: block"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -762,19 +763,20 @@
|
|||||||
<div
|
<div
|
||||||
v-for="item in docList"
|
v-for="item in docList"
|
||||||
:key="item.src"
|
:key="item.src"
|
||||||
|
style="margin-top: 20px;"
|
||||||
class="docListStyle"
|
class="docListStyle"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
src="@/assets/images/basicinfo/download.png"
|
src="@/assets/images/doc.png"
|
||||||
style="
|
style="
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 40px;
|
width: 30px;
|
||||||
height: 40px;
|
height: 25px;
|
||||||
margin-right: 40px;
|
margin-right: 10px;
|
||||||
"
|
"
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
<span style="font: oblique 16px Sans-serif">{{
|
<span style="font: oblique bolder 16px 宋体">{{
|
||||||
item.name
|
item.name
|
||||||
}}</span>
|
}}</span>
|
||||||
<span style="color: #4ea6ff; float: right">删除</span>
|
<span style="color: #4ea6ff; float: right">删除</span>
|
||||||
@@ -1580,7 +1582,7 @@ export default {
|
|||||||
const getStudent = () => {
|
const getStudent = () => {
|
||||||
let obj = {
|
let obj = {
|
||||||
name: "",
|
name: "",
|
||||||
pageNo: 1,
|
pageNo: state.currentPage,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
routerId: 100,
|
routerId: 100,
|
||||||
};
|
};
|
||||||
@@ -1589,7 +1591,7 @@ export default {
|
|||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log("获取学员列表", res);
|
console.log("获取学员列表", res);
|
||||||
let data = res.data.data.rows || null;
|
let data = res.data.data.rows || null;
|
||||||
// state.tableData = [];
|
state.tableData = [];
|
||||||
if (data.length) {
|
if (data.length) {
|
||||||
for (let i in data) {
|
for (let i in data) {
|
||||||
let _time = new Date(data[i].beginStudyTime * 1000);
|
let _time = new Date(data[i].beginStudyTime * 1000);
|
||||||
@@ -1882,6 +1884,7 @@ export default {
|
|||||||
.delStudent({ routerId: 100, studentIds: [id] })
|
.delStudent({ routerId: 100, studentIds: [id] })
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
message.success("删除成功");
|
message.success("删除成功");
|
||||||
|
getStudent()
|
||||||
console.log(res);
|
console.log(res);
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
@@ -1914,12 +1917,39 @@ export default {
|
|||||||
}
|
}
|
||||||
api.delStudent(obj).then((res) => {
|
api.delStudent(obj).then((res) => {
|
||||||
console.log(res);
|
console.log(res);
|
||||||
|
getStudent();
|
||||||
message.success("批量删除成功")
|
message.success("批量删除成功")
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
message.error("批量删除失败"+err);
|
message.error("批量删除失败"+err);
|
||||||
console.log(err)
|
console.log(err)
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
const pageChange = (value) => {
|
||||||
|
state.currentPage = value;
|
||||||
|
getStudent();
|
||||||
|
}
|
||||||
|
const setconfig = () => {
|
||||||
|
let obj = {
|
||||||
|
"autoJoinFlag": 0,
|
||||||
|
"deptBoList": [
|
||||||
|
{
|
||||||
|
"deptId": 0,
|
||||||
|
"deptName": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preLearnFlag": 0,
|
||||||
|
"previewFlag": 0,
|
||||||
|
"routerId": 0,
|
||||||
|
"showFlag": 0
|
||||||
|
}
|
||||||
|
api.setConfig(obj).then((res) => {
|
||||||
|
message.success("编辑成功")
|
||||||
|
console.log(res);
|
||||||
|
}).catch(err => {
|
||||||
|
console.log(err);
|
||||||
|
message.error("编辑失败")
|
||||||
|
})
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
...toRefs(levelList),
|
...toRefs(levelList),
|
||||||
@@ -1967,6 +1997,8 @@ export default {
|
|||||||
showStop,
|
showStop,
|
||||||
reget,
|
reget,
|
||||||
stageChange,
|
stageChange,
|
||||||
|
pageChange,
|
||||||
|
setconfig,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="leveladddetail">
|
<div class="leveladddetail">
|
||||||
|
<div style="display: flex">
|
||||||
<div class="left clearfix">
|
<div class="left clearfix">
|
||||||
<div class="leftmain">
|
<div class="leftmain">
|
||||||
<div class="tit" style="margin-left: 18px">关卡</div>
|
<div class="tit" style="margin-left: 18px">关卡</div>
|
||||||
@@ -185,13 +186,20 @@
|
|||||||
<span>学习模式:</span>
|
<span>学习模式:</span>
|
||||||
<div class="inputbox">
|
<div class="inputbox">
|
||||||
<input type="text" placeholder="按学习时间解锁" />
|
<input type="text" placeholder="按学习时间解锁" />
|
||||||
<div class="bottonbox"><div class="btnText">切换模式</div></div>
|
<div class="bottonbox" @click="showModeVisible">
|
||||||
|
<div class="btnText">切换模式</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 切换模式抽屉 -->
|
||||||
|
<unlock-mode v-model:unlockModeVisible="unlockModeVisible" />
|
||||||
|
</div>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<router-link to="/leveladd">
|
<router-link to="/leveladd">
|
||||||
<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"
|
||||||
|
/>
|
||||||
<div class="return">返回</div>
|
<div class="return">返回</div>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</router-link>
|
||||||
@@ -481,7 +489,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btn btn2">
|
<div class="btn btn2">
|
||||||
<div class="imgIcon"></div>
|
<div class="imgIcon"></div>
|
||||||
<div class="btnText" @click="showDeleteALLModal">批量删除</div>
|
<div class="btnText" @click="showDeleteALLModal">
|
||||||
|
批量删除
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -534,7 +544,9 @@
|
|||||||
<div style="width: 120px; text-align: center">任务名称</div>
|
<div style="width: 120px; text-align: center">任务名称</div>
|
||||||
<div style="width: 120px; text-align: center">必修/选修</div>
|
<div style="width: 120px; text-align: center">必修/选修</div>
|
||||||
<div style="width: 87px; text-align: center">时长</div>
|
<div style="width: 87px; text-align: center">时长</div>
|
||||||
<div style="width: 120px; text-align: center; margin-right: 20px">
|
<div
|
||||||
|
style="width: 120px; text-align: center; margin-right: 20px"
|
||||||
|
>
|
||||||
操作
|
操作
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -624,7 +636,11 @@
|
|||||||
{{ element.cretime }}分钟
|
{{ element.cretime }}分钟
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
style="width: 120px; text-align: center; margin-right: 20px"
|
style="
|
||||||
|
width: 120px;
|
||||||
|
text-align: center;
|
||||||
|
margin-right: 20px;
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<div class="opa">
|
<div class="opa">
|
||||||
<div class="opacation">
|
<div class="opacation">
|
||||||
@@ -658,7 +674,10 @@
|
|||||||
</draggable>
|
</draggable>
|
||||||
</div>
|
</div>
|
||||||
<!-- 无数据样式 -->
|
<!-- 无数据样式 -->
|
||||||
<div class="notable" :style="{ display: stm_hs ? 'block' : 'none' }">
|
<div
|
||||||
|
class="notable"
|
||||||
|
:style="{ display: stm_hs ? 'block' : 'none' }"
|
||||||
|
>
|
||||||
<div class="notablebox">
|
<div class="notablebox">
|
||||||
<div class="boxbody">
|
<div class="boxbody">
|
||||||
<div class="boximg"></div>
|
<div class="boximg"></div>
|
||||||
@@ -676,19 +695,7 @@
|
|||||||
<!-- 无数据样式 -->
|
<!-- 无数据样式 -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="footbtn">
|
|
||||||
<div class="btnbox">
|
|
||||||
<div class="btn btn2">
|
|
||||||
<div class="btnText">暂存</div>
|
|
||||||
</div>
|
|
||||||
<div class="btn btn2">
|
|
||||||
<div class="btnText">确定</div>
|
|
||||||
</div>
|
|
||||||
<div class="btn btn1" @click="gqxy_hShow">
|
|
||||||
<div class="btnText">下一步</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="draw" style="position: relative">
|
<div class="draw" style="position: relative">
|
||||||
<a-drawer
|
<a-drawer
|
||||||
v-model:visible="addprojvisible"
|
v-model:visible="addprojvisible"
|
||||||
@@ -743,13 +750,20 @@
|
|||||||
<span>学习模式:</span>
|
<span>学习模式:</span>
|
||||||
<div class="inputbox">
|
<div class="inputbox">
|
||||||
<input type="text" placeholder="按学习时间解锁" />
|
<input type="text" placeholder="按学习时间解锁" />
|
||||||
<div class="bottonbox"><div class="btnText">切换模式</div></div>
|
<div class="bottonbox" @click="showModeVisible">
|
||||||
|
<div class="btnText">切换模式</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 切换模式抽屉 -->
|
||||||
|
<unlock-mode v-model:unlockModeVisible="unlockModeVisible" />
|
||||||
|
</div>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<router-link to="/leveladd">
|
<router-link to="/leveladd">
|
||||||
<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"
|
||||||
|
/>
|
||||||
<div class="return">返回</div>
|
<div class="return">返回</div>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</router-link>
|
||||||
@@ -821,7 +835,9 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="boxtitle2">
|
<div class="boxtitle2">
|
||||||
<span style="color: #878b92">请添加学员或导入学员</span>
|
<span style="color: #878b92"
|
||||||
|
>请添加学员或导入学员</span
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="smallleft"></div>
|
<div class="smallleft"></div>
|
||||||
@@ -846,6 +862,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footbtn">
|
||||||
|
<div class="btnbox">
|
||||||
|
<div class="btn btn2">
|
||||||
|
<div class="btnText">暂存</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn btn2">
|
||||||
|
<div class="btnText">确定</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn btn1">
|
||||||
|
<div class="btnText">取消</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<!-- 添加学员抽屉 -->
|
<!-- 添加学员抽屉 -->
|
||||||
<add-stu v-model:AddSvisible="AddSvisible" />
|
<add-stu v-model:AddSvisible="AddSvisible" />
|
||||||
<!-- 导入学员抽屉 -->
|
<!-- 导入学员抽屉 -->
|
||||||
@@ -961,8 +992,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div></a-modal
|
</div>
|
||||||
>
|
</a-modal>
|
||||||
|
|
||||||
<!-- 是否删除关卡弹窗 -->
|
<!-- 是否删除关卡弹窗 -->
|
||||||
<a-modal
|
<a-modal
|
||||||
@@ -1022,6 +1053,7 @@ import * as apiProj from "../../api/index.js";
|
|||||||
import { RouterEditTask } from "@/api/indexTask";
|
import { RouterEditTask } from "@/api/indexTask";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { toDate } from "../../api/method";
|
import { toDate } from "../../api/method";
|
||||||
|
import UnlockMode from "../../components/drawers/UnlockMode.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "LevelAddDetail",
|
name: "LevelAddDetail",
|
||||||
components: {
|
components: {
|
||||||
@@ -1039,6 +1071,7 @@ export default {
|
|||||||
AddLive,
|
AddLive,
|
||||||
AddRef,
|
AddRef,
|
||||||
draggable,
|
draggable,
|
||||||
|
UnlockMode,
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
@@ -1303,6 +1336,8 @@ export default {
|
|||||||
updateChapterID: null, //编辑关卡id
|
updateChapterID: null, //编辑关卡id
|
||||||
deleteChapterModal: false, //删除关卡弹窗
|
deleteChapterModal: false, //删除关卡弹窗
|
||||||
deleteChapterId: null, //删除关卡id
|
deleteChapterId: null, //删除关卡id
|
||||||
|
|
||||||
|
unlockModeVisible: false, //切换模式抽屉
|
||||||
});
|
});
|
||||||
|
|
||||||
const showModal = (element) => {
|
const showModal = (element) => {
|
||||||
@@ -1329,7 +1364,7 @@ export default {
|
|||||||
name: state.value1,
|
name: state.value1,
|
||||||
remark: state.value2,
|
remark: state.value2,
|
||||||
routerId: state.routerId,
|
routerId: state.routerId,
|
||||||
chapterId:state.updateChapterID
|
chapterId: state.updateChapterID,
|
||||||
};
|
};
|
||||||
api
|
api
|
||||||
.updateChapter(obj)
|
.updateChapter(obj)
|
||||||
@@ -1373,14 +1408,14 @@ export default {
|
|||||||
};
|
};
|
||||||
//打开删除关卡弹窗
|
//打开删除关卡弹窗
|
||||||
const showDeleteChapter = (id) => {
|
const showDeleteChapter = (id) => {
|
||||||
state.deleteChapterId=id
|
state.deleteChapterId = id;
|
||||||
state.deleteChapterModal=true
|
state.deleteChapterModal = true;
|
||||||
}
|
};
|
||||||
//关闭删除关卡弹窗
|
//关闭删除关卡弹窗
|
||||||
const closeDeleteChapter = () => {
|
const closeDeleteChapter = () => {
|
||||||
state.deleteChapterId=null
|
state.deleteChapterId = null;
|
||||||
state.deleteChapterModal=false
|
state.deleteChapterModal = false;
|
||||||
}
|
};
|
||||||
//删除关卡
|
//删除关卡
|
||||||
const deleteChapter = () => {
|
const deleteChapter = () => {
|
||||||
console.log("chapterId", state.deleteChapterId);
|
console.log("chapterId", state.deleteChapterId);
|
||||||
@@ -1391,8 +1426,8 @@ const closeDeleteChapter=()=>{
|
|||||||
.deleteChapter(obj)
|
.deleteChapter(obj)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log("删除关卡成功", res);
|
console.log("删除关卡成功", res);
|
||||||
message.success('删除关卡成功')
|
message.success("删除关卡成功");
|
||||||
closeDeleteChapter()
|
closeDeleteChapter();
|
||||||
getDetail();
|
getDetail();
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
@@ -1545,7 +1580,6 @@ const closeDeleteChapter=()=>{
|
|||||||
state.visible = false;
|
state.visible = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const afterVisibleChange = (bool) => {
|
const afterVisibleChange = (bool) => {
|
||||||
console.log("visible", bool);
|
console.log("visible", bool);
|
||||||
};
|
};
|
||||||
@@ -1999,14 +2033,14 @@ const closeDeleteChapter=()=>{
|
|||||||
const getAllProjText = () => {
|
const getAllProjText = () => {
|
||||||
apiProj
|
apiProj
|
||||||
.getProjectList({
|
.getProjectList({
|
||||||
"beginTime": 0,
|
beginTime: 0,
|
||||||
"createName": "",
|
createName: "",
|
||||||
"endTime": 0,
|
endTime: 0,
|
||||||
"manager": "",
|
manager: "",
|
||||||
"name": "",
|
name: "",
|
||||||
"pageNo": 0,
|
pageNo: 0,
|
||||||
"pageSize": 0,
|
pageSize: 0,
|
||||||
"status": 0
|
status: 0,
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
let arr = res.data.data.rows;
|
let arr = res.data.data.rows;
|
||||||
@@ -2017,7 +2051,7 @@ const closeDeleteChapter=()=>{
|
|||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.log("获取全部项目信息接口失败", err);
|
console.log("获取全部项目信息接口失败", err);
|
||||||
console.log('+++++++++++++++++++++++++++++++++++++++++++++++');
|
console.log("+++++++++++++++++++++++++++++++++++++++++++++++");
|
||||||
// state.createLoading = false;
|
// state.createLoading = false;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -2041,6 +2075,11 @@ const closeDeleteChapter=()=>{
|
|||||||
console.log(err, 1111);
|
console.log(err, 1111);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//显示切换模式抽屉
|
||||||
|
const showModeVisible = () => {
|
||||||
|
state.unlockModeVisible = true;
|
||||||
|
};
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// createCase();
|
// createCase();
|
||||||
getAllProjText();
|
getAllProjText();
|
||||||
@@ -2098,10 +2137,11 @@ const closeDeleteChapter=()=>{
|
|||||||
getAllProjText,
|
getAllProjText,
|
||||||
updateTask,
|
updateTask,
|
||||||
|
|
||||||
|
|
||||||
showDeleteChapter,
|
showDeleteChapter,
|
||||||
closeDeleteChapter,
|
closeDeleteChapter,
|
||||||
deleteChapter,
|
deleteChapter,
|
||||||
|
|
||||||
|
showModeVisible,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -2514,6 +2554,7 @@ const closeDeleteChapter=()=>{
|
|||||||
.leveladddetail {
|
.leveladddetail {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
min-width: 933px;
|
min-width: 933px;
|
||||||
background-color: rgba(245, 247, 250, 1);
|
background-color: rgba(245, 247, 250, 1);
|
||||||
.left {
|
.left {
|
||||||
@@ -3219,49 +3260,49 @@ const closeDeleteChapter=()=>{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.footbtn {
|
// .footbtn {
|
||||||
width: 100%;
|
// width: 100%;
|
||||||
flex: 1;
|
// flex: 1;
|
||||||
background-color: #fff;
|
// background-color: #fff;
|
||||||
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
|
// box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
|
||||||
display: flex;
|
// display: flex;
|
||||||
justify-content: end;
|
// justify-content: end;
|
||||||
.btnbox {
|
// .btnbox {
|
||||||
display: flex;
|
// display: flex;
|
||||||
margin-right: 36px;
|
// margin-right: 36px;
|
||||||
.btn {
|
// .btn {
|
||||||
padding: 0px 26px 0px 26px;
|
// padding: 0px 26px 0px 26px;
|
||||||
height: 38px;
|
// height: 38px;
|
||||||
border-radius: 8px;
|
// border-radius: 8px;
|
||||||
border: 1px solid rgba(64, 158, 255, 1);
|
// border: 1px solid rgba(64, 158, 255, 1);
|
||||||
display: flex;
|
// display: flex;
|
||||||
align-items: center;
|
// align-items: center;
|
||||||
justify-content: center;
|
// justify-content: center;
|
||||||
flex-shrink: 0;
|
// flex-shrink: 0;
|
||||||
margin: 21px 0px 19px 14px;
|
// margin: 21px 0px 19px 14px;
|
||||||
cursor: pointer;
|
// cursor: pointer;
|
||||||
white-space: nowrap;
|
// white-space: nowrap;
|
||||||
.btnText {
|
// .btnText {
|
||||||
font-size: 14px;
|
// font-size: 14px;
|
||||||
font-weight: 400;
|
// font-weight: 400;
|
||||||
line-height: 36px;
|
// line-height: 36px;
|
||||||
margin-left: 5px;
|
// margin-left: 5px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
.btn1 {
|
// .btn1 {
|
||||||
background-color: #409eff;
|
// background-color: #409eff;
|
||||||
.btnText {
|
// .btnText {
|
||||||
color: #ffffff;
|
// color: #ffffff;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
.btn2 {
|
// .btn2 {
|
||||||
background-color: #ffffff;
|
// background-color: #ffffff;
|
||||||
.btnText {
|
// .btnText {
|
||||||
color: #409eff;
|
// color: #409eff;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
.opat {
|
.opat {
|
||||||
.opacationt {
|
.opacationt {
|
||||||
@@ -3321,6 +3362,52 @@ const closeDeleteChapter=()=>{
|
|||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.footbtn {
|
||||||
|
width: 100%;
|
||||||
|
height: 80px;
|
||||||
|
margin-top: 16px;
|
||||||
|
// flex: 1;
|
||||||
|
background-color: #fff;
|
||||||
|
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
|
||||||
|
display: flex;
|
||||||
|
justify-content: end;
|
||||||
|
.btnbox {
|
||||||
|
display: flex;
|
||||||
|
margin-right: 36px;
|
||||||
|
height: 80px;
|
||||||
|
.btn {
|
||||||
|
padding: 0px 26px 0px 26px;
|
||||||
|
height: 38px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid rgba(64, 158, 255, 1);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin: 21px 0px 19px 14px;
|
||||||
|
cursor: pointer;
|
||||||
|
white-space: nowrap;
|
||||||
|
.btnText {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 36px;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.btn1 {
|
||||||
|
background-color: #409eff;
|
||||||
|
.btnText {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.btn2 {
|
||||||
|
background-color: #ffffff;
|
||||||
|
.btnText {
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.CopyModal {
|
.CopyModal {
|
||||||
.ant-modal {
|
.ant-modal {
|
||||||
|
|||||||
@@ -169,7 +169,34 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="in select">
|
<div class="in select">
|
||||||
<a-select
|
<a-tree-select
|
||||||
|
:getPopupContainer="
|
||||||
|
(triggerNode) => {
|
||||||
|
return triggerNode.parentNode || document.body;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
v-model:value="classifySelect2"
|
||||||
|
style="width: 100%"
|
||||||
|
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
||||||
|
placeholder="自动带出 可修改"
|
||||||
|
allow-clear
|
||||||
|
tree-default-expand-all
|
||||||
|
:tree-data="classifyList2"
|
||||||
|
:fieldNames="{
|
||||||
|
children: 'children',
|
||||||
|
label: 'name',
|
||||||
|
value: 'id',
|
||||||
|
}"
|
||||||
|
:disabled="viewDetail ? true : false"
|
||||||
|
@change="classificationChange2"
|
||||||
|
dropdownClassName="treeDropdown"
|
||||||
|
>
|
||||||
|
<!-- <template #title="{ value: val, title }">
|
||||||
|
<b v-if="val === 'parent 1-1'" style="color: #08c">sss</b>
|
||||||
|
<template v-else>{{ title }}</template>
|
||||||
|
</template> -->
|
||||||
|
</a-tree-select>
|
||||||
|
<!-- <a-select
|
||||||
:getPopupContainer="
|
:getPopupContainer="
|
||||||
(triggerNode) => {
|
(triggerNode) => {
|
||||||
return triggerNode.parentNode || document.body;
|
return triggerNode.parentNode || document.body;
|
||||||
@@ -179,8 +206,9 @@
|
|||||||
placeholder="自动带出 可修改"
|
placeholder="自动带出 可修改"
|
||||||
:options="classifyList2"
|
:options="classifyList2"
|
||||||
@change="classificationChange2"
|
@change="classificationChange2"
|
||||||
|
:field-names="{ label: 'name', value: 'id', options: 'children' }"
|
||||||
:disabled="viewDetail ? true : false"
|
:disabled="viewDetail ? true : false"
|
||||||
/>
|
/> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="name name2">
|
<div class="name name2">
|
||||||
@@ -359,22 +387,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { reactive, toRefs, ref, onUnmounted } from "vue";
|
import { reactive, toRefs, ref, onUnmounted, computed } from "vue";
|
||||||
import { message } from "ant-design-vue";
|
import { message } from "ant-design-vue";
|
||||||
import { useRouter, useRoute } from "vue-router";
|
import { useRouter, useRoute } from "vue-router";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import * as api from "../../api/index";
|
import * as api from "../../api/index";
|
||||||
|
// import * as api1 from "../../api/index1";
|
||||||
import { storage } from "../../api/storage";
|
import { storage } from "../../api/storage";
|
||||||
import { toDate } from "../../api/method";
|
import { toDate } from "../../api/method";
|
||||||
|
import { useStore } from "vuex";
|
||||||
export default {
|
export default {
|
||||||
name: "projectAdd",
|
name: "projectAdd",
|
||||||
setup() {
|
setup() {
|
||||||
|
const store = useStore();
|
||||||
// 编辑页面跳转过来时候,自动填充表格
|
// 编辑页面跳转过来时候,自动填充表格
|
||||||
const routers = useRoute();
|
const routers = useRoute();
|
||||||
const isEdit = ref(false);
|
const isEdit = ref(false);
|
||||||
let peojectID = "";
|
let peojectID = "";
|
||||||
|
console.log("store.state.orgtreeList", store.state.orgtreeList);
|
||||||
if (routers.query.projectId) {
|
if (routers.query.projectId) {
|
||||||
storage.set("projectAddId", routers.query.projectId);
|
storage.set("projectAddId", routers.query.projectId);
|
||||||
isEdit.value = true;
|
isEdit.value = true;
|
||||||
@@ -515,7 +545,7 @@ export default {
|
|||||||
valueE1: null,
|
valueE1: null,
|
||||||
valueE2: null,
|
valueE2: null,
|
||||||
classifySelect1: [],
|
classifySelect1: [],
|
||||||
classifySelect2: [],
|
classifySelect2: null,
|
||||||
classifySelect3: [],
|
classifySelect3: [],
|
||||||
classifySelect4: [],
|
classifySelect4: [],
|
||||||
rangevalue: [],
|
rangevalue: [],
|
||||||
@@ -690,11 +720,25 @@ export default {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 资源归属 sourceBelongId 后续给接口
|
// 资源归属 sourceBelongId 后续给接口
|
||||||
const classifyList2 = ref([
|
const classifyList2 = computed(() => {
|
||||||
{ value: 1, label: "项目一" },
|
return store.state.orgtreeList ? store.state.orgtreeList : ref(null);
|
||||||
{ value: 2, label: "项目二" },
|
});
|
||||||
{ value: 3, label: "项目三" },
|
|
||||||
]);
|
// //获取资源归属
|
||||||
|
// const orgTree = () => {
|
||||||
|
// api1
|
||||||
|
// .orgtree()
|
||||||
|
// .then((res) => {
|
||||||
|
// console.log("获取集团组织成功", res);
|
||||||
|
// if (res.status === 200) {
|
||||||
|
// classifyList2.value = res.data.data;
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// .catch((err) => {
|
||||||
|
// console.log("获取集团组织失败", err);
|
||||||
|
// });
|
||||||
|
// };
|
||||||
|
// orgTree();
|
||||||
|
|
||||||
let sourceBelongIdC = "";
|
let sourceBelongIdC = "";
|
||||||
const classificationChange2 = (key) => {
|
const classificationChange2 = (key) => {
|
||||||
@@ -1357,4 +1401,18 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.treeDropdown {
|
||||||
|
// width: 240px !important;
|
||||||
|
// border-radius: 5px;
|
||||||
|
// min-height: 600px !important;
|
||||||
|
.ant-select-tree-list-scrollbar {
|
||||||
|
width: 5px !important;
|
||||||
|
.ant-select-tree-list-scrollbar-thumb {
|
||||||
|
background-color: #4ea6ff !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ant-select-tree-indent-unit {
|
||||||
|
width: 7px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -968,7 +968,9 @@
|
|||||||
<div class="projectbox">
|
<div class="projectbox">
|
||||||
<div class="promessage">
|
<div class="promessage">
|
||||||
<div class="messageme">项目信息</div>
|
<div class="messageme">项目信息</div>
|
||||||
<div class="messagege">当前项目共0个阶段,0个任务</div>
|
<div class="messagege">
|
||||||
|
当前项目共{{ projectStages }}个阶段,{{ projectTasks }}个任务
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stumessage">
|
<div class="stumessage">
|
||||||
<div class="messageme1">学员信息</div>
|
<div class="messageme1">学员信息</div>
|
||||||
@@ -1041,7 +1043,9 @@
|
|||||||
<div class="close_exit" @click="closeReminderModal"></div>
|
<div class="close_exit" @click="closeReminderModal"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div style="margin-left:60px;margin-right:60px">请您根据自身需求选择对应项目类别,多层项目与单层项目操作不同,层级不同</div>
|
<div style="margin-left: 60px; margin-right: 60px">
|
||||||
|
请您根据自身需求选择对应项目类别,多层项目与单层项目操作不同,层级不同
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="del_btnbox">
|
<div class="del_btnbox">
|
||||||
<div class="del_btn btn2" @click="okReminderModal">
|
<div class="del_btn btn2" @click="okReminderModal">
|
||||||
@@ -1052,7 +1056,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
|
|
||||||
|
|
||||||
<!-- 归属权抽屉 -->
|
<!-- 归属权抽屉 -->
|
||||||
<proj-owner-ship v-model:ProjOwnervisible="ProjOwnervisible" />
|
<proj-owner-ship v-model:ProjOwnervisible="ProjOwnervisible" />
|
||||||
<!-- 授权名单抽屉 -->
|
<!-- 授权名单抽屉 -->
|
||||||
@@ -1061,9 +1064,6 @@
|
|||||||
<proj-check-ship v-model:ProjCheckvisible="ProjCheckvisible" />
|
<proj-check-ship v-model:ProjCheckvisible="ProjCheckvisible" />
|
||||||
<!-- 管理权抽屉 -->
|
<!-- 管理权抽屉 -->
|
||||||
<proj-manage-ship v-model:ProjManagevisible="ProjManagevisible" />
|
<proj-manage-ship v-model:ProjManagevisible="ProjManagevisible" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@@ -1118,7 +1118,9 @@ export default {
|
|||||||
tableDataTotal: -1, //学习路径列表总数
|
tableDataTotal: -1, //学习路径列表总数
|
||||||
pageSize: 10, //每页10条数据
|
pageSize: 10, //每页10条数据
|
||||||
|
|
||||||
projectStudentsNum: 0, //发布弹窗-学员人数
|
projectStudentsNum: 0, //发布弹窗-学员人
|
||||||
|
projectStages: 0,
|
||||||
|
projectTasks: 0,
|
||||||
releaseProjectId: null, //发布的项目id
|
releaseProjectId: null, //发布的项目id
|
||||||
releaseProjectName: null, //发布的项目名称
|
releaseProjectName: null, //发布的项目名称
|
||||||
releaseProjectTime: null, //发布的项目时间
|
releaseProjectTime: null, //发布的项目时间
|
||||||
@@ -1800,26 +1802,39 @@ export default {
|
|||||||
state.releaseProjectName = object.name;
|
state.releaseProjectName = object.name;
|
||||||
state.releaseProjectTime = object.time;
|
state.releaseProjectTime = object.time;
|
||||||
console.log("object", object);
|
console.log("object", object);
|
||||||
//获取学员总数
|
|
||||||
let obj = {
|
|
||||||
pageNo: 0,
|
|
||||||
pageSize: 0,
|
|
||||||
projectId: object.projectId,
|
|
||||||
};
|
|
||||||
api
|
api
|
||||||
.projectStudent(obj)
|
.getProjectCount(object.projectId)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
// console.log("res", res.data);
|
console.log("获取关卡、任务、学员统计数据", res.data);
|
||||||
state.projectStudentsNum = res.data.data.total
|
state.projectStudentsNum = res.data.students;
|
||||||
? res.data.data.total
|
state.projectStages = res.data.stages;
|
||||||
: 0;
|
state.projectTasks = res.data.tasks;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.log("获取学员人数失败", err);
|
console.log("err", err);
|
||||||
});
|
});
|
||||||
//获取阶段及任务总数
|
// //获取学员总数
|
||||||
|
// let obj = {
|
||||||
|
// pageNo: 0,
|
||||||
|
// pageSize: 0,
|
||||||
|
// projectId: object.projectId,
|
||||||
|
// };
|
||||||
|
// api
|
||||||
|
// .projectStudent(obj)
|
||||||
|
// .then((res) => {
|
||||||
|
// if (res.status === 200) {
|
||||||
|
// // console.log("res", res.data);
|
||||||
|
// state.projectStudentsNum = res.data.data.total
|
||||||
|
// ? res.data.data.total
|
||||||
|
// : 0;
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// .catch((err) => {
|
||||||
|
// console.log("获取学员人数失败", err);
|
||||||
|
// });
|
||||||
|
// //获取阶段及任务总数
|
||||||
};
|
};
|
||||||
//确认发布项目
|
//确认发布项目
|
||||||
const releaseProject = () => {
|
const releaseProject = () => {
|
||||||
@@ -3071,8 +3086,7 @@ export default {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const showModal1 = () => {
|
const showModal1 = () => {
|
||||||
|
state.reminderModal = true;
|
||||||
state.reminderModal=true
|
|
||||||
};
|
};
|
||||||
const closeModal1 = () => {
|
const closeModal1 = () => {
|
||||||
state.estabish = false;
|
state.estabish = false;
|
||||||
@@ -3102,13 +3116,12 @@ export default {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const closeReminderModal = () => {
|
const closeReminderModal = () => {
|
||||||
state.reminderModal=false
|
state.reminderModal = false;
|
||||||
|
};
|
||||||
}
|
|
||||||
const okReminderModal = () => {
|
const okReminderModal = () => {
|
||||||
state.reminderModal=false
|
state.reminderModal = false;
|
||||||
state.estabish = true;
|
state.estabish = true;
|
||||||
}
|
};
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
selectProjectName,
|
selectProjectName,
|
||||||
|
|||||||
@@ -137,9 +137,12 @@
|
|||||||
<span>学习模式:</span>
|
<span>学习模式:</span>
|
||||||
<div class="inputbox">
|
<div class="inputbox">
|
||||||
<input type="text" placeholder="按学习时间解锁" />
|
<input type="text" placeholder="按学习时间解锁" />
|
||||||
<div class="bottonbox">
|
<!-- v-model:unlockModeVisible="unlockModeVisible" -->
|
||||||
|
<div class="bottonbox" @click="showModeVisible">
|
||||||
<div class="btnText">切换模式</div>
|
<div class="btnText">切换模式</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 切换模式抽屉 -->
|
||||||
|
<unlock-mode v-model:unlockModeVisible="unlockModeVisible" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
@@ -989,7 +992,6 @@
|
|||||||
</div></a-modal
|
</div></a-modal
|
||||||
>
|
>
|
||||||
|
|
||||||
|
|
||||||
<!-- 是否删除阶段弹窗 -->
|
<!-- 是否删除阶段弹窗 -->
|
||||||
<a-modal
|
<a-modal
|
||||||
v-model:visible="deleteStageModal"
|
v-model:visible="deleteStageModal"
|
||||||
@@ -1044,7 +1046,7 @@ import * as apistage from "../../api/indexStage";
|
|||||||
import * as apimove from "../../api/indexMovetask";
|
import * as apimove from "../../api/indexMovetask";
|
||||||
import draggable from "vuedraggable";
|
import draggable from "vuedraggable";
|
||||||
import { storage } from "../../api/storage";
|
import { storage } from "../../api/storage";
|
||||||
|
import UnlockMode from "../../components/drawers/UnlockMode.vue";
|
||||||
const drawercolumns = [
|
const drawercolumns = [
|
||||||
{
|
{
|
||||||
title: "项目名称",
|
title: "项目名称",
|
||||||
@@ -1100,6 +1102,7 @@ export default {
|
|||||||
AddEval,
|
AddEval,
|
||||||
AddInvist,
|
AddInvist,
|
||||||
AddVote,
|
AddVote,
|
||||||
|
UnlockMode,
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
@@ -1291,6 +1294,8 @@ export default {
|
|||||||
updateStageID: null, //编辑阶段id
|
updateStageID: null, //编辑阶段id
|
||||||
deleteStageId: null, //删除阶段的id
|
deleteStageId: null, //删除阶段的id
|
||||||
deleteStageModal: false, //删除阶段弹窗
|
deleteStageModal: false, //删除阶段弹窗
|
||||||
|
|
||||||
|
unlockModeVisible: false, //切换模式抽屉
|
||||||
});
|
});
|
||||||
console.log("projectId", state.projectId);
|
console.log("projectId", state.projectId);
|
||||||
const selectProjectName = (value, index) => {
|
const selectProjectName = (value, index) => {
|
||||||
@@ -1719,7 +1724,7 @@ export default {
|
|||||||
console.log("修改阶段成功", res);
|
console.log("修改阶段成功", res);
|
||||||
state.valuesname = "";
|
state.valuesname = "";
|
||||||
state.valuesnotice = "";
|
state.valuesnotice = "";
|
||||||
closeModal()
|
closeModal();
|
||||||
state.updateStageID = null;
|
state.updateStageID = null;
|
||||||
message.destroy();
|
message.destroy();
|
||||||
message.success("修改阶段成功");
|
message.success("修改阶段成功");
|
||||||
@@ -1738,9 +1743,9 @@ export default {
|
|||||||
.editStage(obj)
|
.editStage(obj)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log("添加阶段成功", res);
|
console.log("添加阶段成功", res);
|
||||||
state.valuesname = ""
|
state.valuesname = "";
|
||||||
state.valuesnotice = ""
|
state.valuesnotice = "";
|
||||||
closeModal()
|
closeModal();
|
||||||
message.destroy();
|
message.destroy();
|
||||||
message.success("添加阶段成功");
|
message.success("添加阶段成功");
|
||||||
getTask();
|
getTask();
|
||||||
@@ -1751,18 +1756,16 @@ export default {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//打开删除阶段弹窗
|
//打开删除阶段弹窗
|
||||||
const showDeleteStage = (id) => {
|
const showDeleteStage = (id) => {
|
||||||
|
state.deleteStageId = id;
|
||||||
state.deleteStageId=id
|
state.deleteStageModal = true;
|
||||||
state.deleteStageModal=true
|
};
|
||||||
}
|
|
||||||
//关闭删除阶段弹窗
|
//关闭删除阶段弹窗
|
||||||
const closeDeleteStage = () => {
|
const closeDeleteStage = () => {
|
||||||
state.deleteStageId=null
|
state.deleteStageId = null;
|
||||||
state.deleteStageModal=false
|
state.deleteStageModal = false;
|
||||||
}
|
};
|
||||||
//删除阶段
|
//删除阶段
|
||||||
const deleteStage = () => {
|
const deleteStage = () => {
|
||||||
console.log("chapterId", state.deleteStageId);
|
console.log("chapterId", state.deleteStageId);
|
||||||
@@ -1773,8 +1776,8 @@ const closeDeleteStage=()=>{
|
|||||||
.deleteStage(obj)
|
.deleteStage(obj)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log("删除阶段成功", res);
|
console.log("删除阶段成功", res);
|
||||||
message.success('删除阶段成功')
|
message.success("删除阶段成功");
|
||||||
closeDeleteStage()
|
closeDeleteStage();
|
||||||
getTask();
|
getTask();
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
@@ -2021,6 +2024,11 @@ const closeDeleteStage=()=>{
|
|||||||
console.log("阶段改变", value, option);
|
console.log("阶段改变", value, option);
|
||||||
state.removeStageId = option.id;
|
state.removeStageId = option.id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//显示切换模式抽屉
|
||||||
|
const showModeVisible = () => {
|
||||||
|
state.unlockModeVisible = true;
|
||||||
|
};
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
selectProjectName,
|
selectProjectName,
|
||||||
@@ -2075,6 +2083,8 @@ const closeDeleteStage=()=>{
|
|||||||
showDeleteStage,
|
showDeleteStage,
|
||||||
closeDeleteStage,
|
closeDeleteStage,
|
||||||
deleteStage,
|
deleteStage,
|
||||||
|
|
||||||
|
showModeVisible,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -77,7 +77,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</draggable>
|
</draggable>
|
||||||
<div id="qrcode" style="display:flex;flex-direction: column;">
|
<div id="qrcode" style="display: flex; flex-direction: column">
|
||||||
<div>下载二维码</div>
|
<div>下载二维码</div>
|
||||||
<qrcode-vue
|
<qrcode-vue
|
||||||
:value="qrcodeUrl"
|
:value="qrcodeUrl"
|
||||||
@@ -91,10 +91,29 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div @click="changeCodevisible">显示二维码弹窗</div>
|
<div @click="changeCodevisible">显示二维码弹窗</div>
|
||||||
<two-dimensional-code v-model:codevisible="codevisible" :codeInfo="codeInfo" index="0" type="课程二维码"/>
|
<two-dimensional-code
|
||||||
|
v-model:codevisible="codevisible"
|
||||||
|
:codeInfo="codeInfo"
|
||||||
|
index="0"
|
||||||
|
type="课程二维码"
|
||||||
|
/>
|
||||||
|
|
||||||
<div @click="changeCodevisible2">显示二维码弹窗22</div>
|
<div @click="changeCodevisible2">显示二维码弹窗22</div>
|
||||||
<two-dimensional-code v-model:codevisible="codevisible2" :codeInfo="codeInfo2" index="1" type="签到二维码"/>
|
<two-dimensional-code
|
||||||
|
v-model:codevisible="codevisible2"
|
||||||
|
:codeInfo="codeInfo2"
|
||||||
|
index="1"
|
||||||
|
type="签到二维码"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<a-table
|
||||||
|
:columns="columns"
|
||||||
|
:data-source="data"
|
||||||
|
:row-selection="{
|
||||||
|
selectedRowKeys: selectedRowKeys,
|
||||||
|
onChange: onSelectChange,
|
||||||
|
}"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { reactive, toRefs } from "vue";
|
import { reactive, toRefs } from "vue";
|
||||||
@@ -112,7 +131,7 @@ import draggable from "vuedraggable";
|
|||||||
import QrcodeVue from "qrcode.vue";
|
import QrcodeVue from "qrcode.vue";
|
||||||
import html2canvas from "html2canvas";
|
import html2canvas from "html2canvas";
|
||||||
|
|
||||||
import TwoDimensionalCode from '../../components/TwoDimensionalCode.vue'
|
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "SystemManage",
|
name: "SystemManage",
|
||||||
components: {
|
components: {
|
||||||
@@ -121,8 +140,9 @@ export default {
|
|||||||
// PlusOutlined,
|
// PlusOutlined,
|
||||||
draggable,
|
draggable,
|
||||||
QrcodeVue,
|
QrcodeVue,
|
||||||
TwoDimensionalCode
|
TwoDimensionalCode,
|
||||||
},
|
},
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
visible: false,
|
visible: false,
|
||||||
@@ -164,7 +184,72 @@ export default {
|
|||||||
codevisible: false,
|
codevisible: false,
|
||||||
codeInfo: {},
|
codeInfo: {},
|
||||||
codevisible2: false,
|
codevisible2: false,
|
||||||
codeInfo2:{}
|
codeInfo2: {},
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: "Name",
|
||||||
|
dataIndex: "name",
|
||||||
|
key: "name",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Age",
|
||||||
|
dataIndex: "age",
|
||||||
|
key: "age",
|
||||||
|
width: "12%",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Address",
|
||||||
|
dataIndex: "address",
|
||||||
|
width: "30%",
|
||||||
|
key: "address",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
key: 1,
|
||||||
|
name: "John Brown sr.",
|
||||||
|
age: 60,
|
||||||
|
address: "New York No. 1 Lake Park",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 2,
|
||||||
|
name: "Joe Black",
|
||||||
|
age: 32,
|
||||||
|
address: "Sidney No. 1 Lake Park",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 3,
|
||||||
|
name: "Joe Black",
|
||||||
|
age: 32,
|
||||||
|
address: "Sidney No. 1 Lake Park",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 4,
|
||||||
|
name: "Joe Black",
|
||||||
|
age: 32,
|
||||||
|
address: "Sidney No. 1 Lake Park",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 5,
|
||||||
|
name: "Joe Black",
|
||||||
|
age: 32,
|
||||||
|
address: "Sidney No. 1 Lake Park",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 6,
|
||||||
|
name: "Joe Black",
|
||||||
|
age: 32,
|
||||||
|
address: "Sidney No. 1 Lake Park",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 7,
|
||||||
|
name: "Joe Black",
|
||||||
|
age: 32,
|
||||||
|
address: "Sidney No. 1 Lake Park",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
selectedRowKeys: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
const showDrawer = () => {
|
const showDrawer = () => {
|
||||||
@@ -248,12 +333,12 @@ export default {
|
|||||||
//下载二维码图片
|
//下载二维码图片
|
||||||
const downloadQr = (num) => {
|
const downloadQr = (num) => {
|
||||||
console.log("num", num);
|
console.log("num", num);
|
||||||
state.qrcodeSize=num
|
state.qrcodeSize = num;
|
||||||
let filename = `${new Date().getTime()}.png`;
|
let filename = `${new Date().getTime()}.png`;
|
||||||
let canvas=document.getElementsByTagName('canvas')[0]
|
let canvas = document.getElementsByTagName("canvas")[0];
|
||||||
let imageUrl = canvas.toDataURL("image/png")
|
let imageUrl = canvas.toDataURL("image/png");
|
||||||
|
|
||||||
let canvasBox = document.createElement('canvas');
|
let canvasBox = document.createElement("canvas");
|
||||||
let ctx = canvasBox.getContext("2d");
|
let ctx = canvasBox.getContext("2d");
|
||||||
var img = new Image();
|
var img = new Image();
|
||||||
// 需要添加文字的图片
|
// 需要添加文字的图片
|
||||||
@@ -261,25 +346,24 @@ let canvasBox = document.createElement('canvas');
|
|||||||
// 等待图片加载完成
|
// 等待图片加载完成
|
||||||
img.onload = function () {
|
img.onload = function () {
|
||||||
// 将图片添加到canvas
|
// 将图片添加到canvas
|
||||||
ctx.drawImage(img, 0, 0, 1240, 2208)
|
ctx.drawImage(img, 0, 0, 1240, 2208);
|
||||||
// 设置字体
|
// 设置字体
|
||||||
ctx.font = "73px 微软雅黑 bolder"
|
ctx.font = "73px 微软雅黑 bolder";
|
||||||
// 设置字体颜色
|
// 设置字体颜色
|
||||||
ctx.fillStyle = "#955f17"
|
ctx.fillStyle = "#955f17";
|
||||||
ctx.textAlign = "center"
|
ctx.textAlign = "center";
|
||||||
// 添加文字和位置
|
// 添加文字和位置
|
||||||
ctx.fillText("微信名", 621, 1050);
|
ctx.fillText("微信名", 621, 1050);
|
||||||
|
|
||||||
// 导出为图片
|
// 导出为图片
|
||||||
let url = canvasBox.toDataURL("image/png")
|
let url = canvasBox.toDataURL("image/png");
|
||||||
let a = document.createElement("a");
|
let a = document.createElement("a");
|
||||||
a.style.display = "none";
|
a.style.display = "none";
|
||||||
a.download = filename;
|
a.download = filename;
|
||||||
a.href = url;
|
a.href = url;
|
||||||
document.body.appendChild(a);
|
document.body.appendChild(a);
|
||||||
a.click();
|
a.click();
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
// let a = document.createElement("a");
|
// let a = document.createElement("a");
|
||||||
// a.style.display = "none";
|
// a.style.display = "none";
|
||||||
@@ -288,7 +372,6 @@ let canvasBox = document.createElement('canvas');
|
|||||||
// document.body.appendChild(a);
|
// document.body.appendChild(a);
|
||||||
// a.click();
|
// a.click();
|
||||||
|
|
||||||
|
|
||||||
html2canvas(document.querySelector("#qrcode"), {
|
html2canvas(document.querySelector("#qrcode"), {
|
||||||
useCORS: true, //支持图片跨域
|
useCORS: true, //支持图片跨域
|
||||||
}).then((canvas) => {
|
}).then((canvas) => {
|
||||||
@@ -300,7 +383,7 @@ let canvasBox = document.createElement('canvas');
|
|||||||
// let filename = `${new Date().getTime()}.png`;
|
// let filename = `${new Date().getTime()}.png`;
|
||||||
// var imageUrl = extra_canvas.toDataURL("image/png",1.0);
|
// var imageUrl = extra_canvas.toDataURL("image/png",1.0);
|
||||||
|
|
||||||
console.log('canvas',canvas, canvas.width,canvas.style.width)
|
console.log("canvas", canvas, canvas.width, canvas.style.width);
|
||||||
|
|
||||||
// // let ctx = canvas.getContext('2d');
|
// // let ctx = canvas.getContext('2d');
|
||||||
// // ctx.drawImage(canvas,0,0,canvas.width, canvas.height);
|
// // ctx.drawImage(canvas,0,0,canvas.width, canvas.height);
|
||||||
@@ -321,21 +404,30 @@ let canvasBox = document.createElement('canvas');
|
|||||||
|
|
||||||
//显示二维码弹窗
|
//显示二维码弹窗
|
||||||
const changeCodevisible = () => {
|
const changeCodevisible = () => {
|
||||||
state.codevisible=true
|
state.codevisible = true;
|
||||||
state.codeInfo = {
|
state.codeInfo = {
|
||||||
title: "签到二维码",
|
title: "签到二维码",
|
||||||
name:'管理者进阶面授课程',
|
name: "管理者进阶面授课程",
|
||||||
url: "https://www.baidu.com/",
|
url: "https://www.baidu.com/",
|
||||||
}
|
};
|
||||||
}
|
};
|
||||||
const changeCodevisible2 = () => {
|
const changeCodevisible2 = () => {
|
||||||
state.codevisible2=true
|
state.codevisible2 = true;
|
||||||
state.codeInfo2 = {
|
state.codeInfo2 = {
|
||||||
title: "签到二维码2222",
|
title: "签到二维码2222",
|
||||||
name:'管理者进阶面授课程2222',
|
name: "管理者进阶面授课程2222",
|
||||||
url: "https://blog.csdn.net/qq_44034384/article/details/93612152",
|
url: "https://blog.csdn.net/qq_44034384/article/details/93612152",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const onSelectChange = (selectedRowKeys) => {
|
||||||
|
console.log("selectedRowKeys changed: ", selectedRowKeys);
|
||||||
|
|
||||||
|
if (selectedRowKeys.length > 2) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
state.selectedRowKeys = selectedRowKeys;
|
||||||
|
};
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
showDrawer,
|
showDrawer,
|
||||||
@@ -346,6 +438,8 @@ let canvasBox = document.createElement('canvas');
|
|||||||
downloadQr,
|
downloadQr,
|
||||||
changeCodevisible,
|
changeCodevisible,
|
||||||
changeCodevisible2,
|
changeCodevisible2,
|
||||||
|
|
||||||
|
onSelectChange,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user