feat:合并

This commit is contained in:
lixg
2023-02-01 17:33:42 +08:00
22 changed files with 752 additions and 1306 deletions

View File

@@ -49,7 +49,8 @@
"eslintConfig": {
"root": true,
"env": {
"node": true
"node": true,
"vue/setup-compiler-macros": true
},
"extends": [
"plugin:vue/vue3-essential",

View File

@@ -1,258 +1,192 @@
<template>
<div id="container" v-if="!isLogin">
<nav-top />
<div style="display: flex">
<nav-left />
<div style="flex: 1; display: flex; flex-direction: column; width: 0">
<open-pages />
<bread-crumb />
<main>
<a-config-provider :locale="zhCN">
<router-view />
</a-config-provider>
</main>
</div>
</div>
</div>
<div id="container" v-if="isLogin">
<router-view />
</div>
<div id="container" v-if="!isLogin">
<nav-top/>
<div style="display: flex">
<nav-left/>
<div style="flex: 1; display: flex; flex-direction: column; width: 0">
<open-pages/>
<bread-crumb/>
<main>
<a-config-provider :locale="zhCN">
<router-view/>
</a-config-provider>
</main>
</div>
</div>
</div>
<div id="container" v-if="isLogin">
<router-view/>
</div>
</template>
<script>
import { computed, defineComponent, ref, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import { useStore, createStore } from "vuex";
<script setup>
import {ref, onMounted} from "vue";
import {useStore, createStore} from "vuex";
import NavLeft from "@/components/NavLeft";
import NavTop from "@/components/NavTop";
import OpenPages from "@/components/OpenPages";
import BreadCrumb from "@/components/BreadCrumb";
import zhCN from "ant-design-vue/es/locale/zh_CN";
import * as api from "./api/index1";
import * as api1 from "@/api/index1";
import * as api2 from "@/api/index";
export default defineComponent({
components: {
NavLeft,
NavTop,
OpenPages,
BreadCrumb,
},
setup() {
const router = useRouter();
const route = useRoute();
const store = useStore();
const isLogin = ref(false);
// console.log("router", router.getRoutes(), route);
console.log("版本2.1.6------------");
const routes = computed(() => {
return router.getRoutes().filter((e) => e.meta?.isLink);
});
// watch(
// () => route.path,
// () => {
// route.path === "/login" && (isLogin.value = true);
// }
// );
const currentRouteName = computed(() => route.name);
const store = useStore();
const isLogin = ref(false);
console.log("版本2.1.6------------");
function init() {
console.log(store);
getUserInfo();
initDict("faceclassPic");
initDict("faceclassClass");
initDict("faceclassScene");
initDict("projectLevel");
initDict("projectSys");
initDict("pathmapPic");
initDict("projectClass");
initDict("projectPic");
initDict("sysType");
getMemberInfo();
getOrgTree();
}
// 监听关闭浏览器
let time1 = ref(0);
let time2 = ref(0);
// 监听关闭浏览器
let time1 = ref(0);
let time2 = ref(0);
onMounted(() => {
init()
window.addEventListener('beforeunload', e => beforeunloadHandler(e));
window.addEventListener('unload', e => unloadHandler(e));
})
//添加监听事件
function beforeunloadHandler() {
time1.value = new Date().getTime();
// e.returnValue = '关闭提示';
}
//添加监听事件
function beforeunloadHandler() {
time1.value = new Date().getTime();
}
function unloadHandler() {
time2.value = new Date().getTime() - time1.value;
if(time2.value<=5){
store.replaceState(createStore({state: {openpages:null}}).state);
localStorage.removeItem("openpages");
}
}
function init() {
getUserInfo();
initDict("faceclassPic");
initDict("faceclassClass");
initDict("faceclassScene");
initDict("projectLevel");
initDict("projectSys");
initDict("pathmapPic");
initDict("projectClass");
initDict("projectPic");
initDict("sysType");
getMemberInfo();
}
onMounted(()=>{
window.addEventListener('beforeunload', e => beforeunloadHandler(e));
window.addEventListener('unload', e => unloadHandler(e));
})
function unloadHandler() {
time2.value = new Date().getTime() - time1.value;
if (time2.value <= 5) {
store.replaceState(createStore({state: {openpages: null}}).state);
localStorage.removeItem("openpages");
}
}
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 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.data.data);
}
async function getUserInfo() {
const userInfo = await api2.userInfo();
store.commit("SET_USER", userInfo.data.data);
}
async function initDict(key, localStory = false) {
let list;
if (localStory) {
list = localStorage.getItem(key);
if (list) {
store.commit("SET_DICT", {key, data: JSON.parse(list)});
return;
}
}
list = await getDictList(key);
localStory && localStorage.setItem(key, JSON.stringify(list));
store.commit("SET_DICT", {key, data: list});
}
async function initDict(key, localStory = false) {
let list;
if (localStory) {
list = localStorage.getItem(key);
if (list) {
store.commit("SET_DICT", { key, data: JSON.parse(list) });
return;
}
}
list = await getDictList(key);
localStory && localStorage.setItem(key, JSON.stringify(list));
store.commit("SET_DICT", { key, data: list });
}
const getDictList = (param) => api1.getDictTree({setCode: param,}).then((res) => res.data.data);
//获取组织树
const getOrgTree = () => {
api.getOrgTreeInfo().then((res) => {
store.commit("getOrgtreeList", res.data.data);
});
};
init();
return {
isLogin,
routes,
name: currentRouteName,
zhCN,
};
}
});
const getDictList = (param) => api1.getDictTree({setCode: param,}).then((res) => res.data.data);
</script>
<style lang="scss">
//.ant-modal {
//
// .ant-modal-content {
// background-image: linear-gradient(
// 180deg, rgba(103, 64, 255, .2), rgba(166, 168, 255, 0), rgba(166, 168, 255, 0)) !important;
// border-radius: 4px;
//
// .ant-modal-body {
// .ant-btn {
// border-radius: 8px;
// width: 100px;
// height: 40px;
// }
//
// .ant-btn-primary {
// background: #4ea6ff;
// color: #fff;
// }
// }
// }
//}
#app {
// font-family: MicrosoftYaHei, Microsoft YaHei, Avenir, Helvetica, Arial,
// sans-serif;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB,
Microsoft YaHei, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
height: 100%;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB,
Microsoft YaHei, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
height: 100%;
}
#container {
margin: 0;
display: flex;
flex-direction: column;
width: 100%;
min-width: 1000px;
min-height: 100%;
background-color: rgba(245, 247, 250, 1);
margin: 0;
display: flex;
flex-direction: column;
width: 100%;
min-width: 1000px;
min-height: 100%;
background-color: rgba(245, 247, 250, 1);
main {
height: 0;
flex: 1 1 auto;
// flex-shrink: 0;
display: flex;
overflow-y: auto;
// display: flex;
// flex: 1 1 auto;
width: calc(100% - 40px);
// margin-bottom: 20px;
margin: 0px 20px 20px 20px;
box-sizing: border-box;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
}
main {
height: 0;
flex: 1 1 auto;
// flex-shrink: 0;
display: flex;
overflow-y: auto;
// display: flex;
// flex: 1 1 auto;
width: calc(100% - 40px);
// margin-bottom: 20px;
margin: 0px 20px 20px 20px;
box-sizing: border-box;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
}
.cus-btn {
width: 100%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
background: #4ea6ff;
cursor: pointer;
color: #fff;
}
.cus-btn {
width: 100%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
background: #4ea6ff;
cursor: pointer;
color: #fff;
}
.white {
background: #fff;
color: #4ea6ff;
}
.white {
background: #fff;
color: #4ea6ff;
}
.cus-input {
height: 40px;
border-radius: 8px;
}
.cus-input {
height: 40px;
border-radius: 8px;
}
.cus-select {
height: 40px;
border-radius: 8px;
}
.cus-select {
height: 40px;
border-radius: 8px;
}
// @media screen and (max-width: 1366px) {
// .cmMain {
// width: 750px;
// }
// }
// @media screen and (min-width: 1367px) and (max-width: 1680px) {
// .cmMain {
// width: 1010px;
// }
// }
// @media screen and (min-width: 1681px) and (max-width: 1920px) {
// .cmMain {
// width: 1270px;
// }
// }
// @media screen and (min-width: 1921px) {
// .cmMain {
// width: 1270px;
// }
// }
// @media screen and (max-width: 1366px) {
// .cmMain {
// width: 750px;
// }
// }
// @media screen and (min-width: 1367px) and (max-width: 1680px) {
// .cmMain {
// width: 1010px;
// }
// }
// @media screen and (min-width: 1681px) and (max-width: 1920px) {
// .cmMain {
// width: 1270px;
// }
// }
// @media screen and (min-width: 1921px) {
// .cmMain {
// width: 1270px;
// }
// }
}
</style>

View File

@@ -43,3 +43,6 @@ export const AttendanceLeave = (obj) => http.post('/stu/task/attendance/leave',
// 直播考勤签到
export const AttendanceSign = (obj) => http.post('/stu/task/attendance/sign', obj)
// 查询项目管理的信息
export const QueryProjectManageDetail = (obj) => http.post('/project/management/queryProjectManageDetail', obj)

View File

@@ -121,11 +121,17 @@ export function usePage(_url, params, init = true) {
})
if (isRef(params)) {
watch(params, () => {
watch(params.value, () => {
fetch()
})
}
if (isRef(_url)) {
watchEffect(fetch)
} else {
init && fetch()
}
function reset(){
state.data = []
state.loading = false
@@ -142,12 +148,6 @@ export function usePage(_url, params, init = true) {
})
}
if (isRef(_url)) {
watchEffect(fetch)
} else {
init && fetch()
}
return {
...toRefs(state),
fetch,

View File

@@ -0,0 +1,20 @@
<template>
<div className="tableSelect" style="margin-left: 0">
<a-select :value="value" dropdownClassName="tabledropdown">
<template :key="index" v-for="(item, index) in $slots.default()">
<a-select-option v-if="item.children!=='v-if'" :value="index">
<component :is="item"></component>
</a-select-option>
</template>
</a-select>
</div>
</template>
<script setup>
import {defineProps} from "vue";
defineProps({
value: {
type: String,
default: ''
}
})
</script>

View File

@@ -3,7 +3,7 @@
<!-- <div class="split"></div> -->
<div class="noticeTitle">
<!-- <div class="notitle"><span class="titlespan">公告</span></div> -->
<div class="switch">
<div v-button-per="permissions" class="switch">
<a-switch
v-model:checked="noticeChecked"
@click="noticeFlag"
@@ -25,7 +25,7 @@
style="margin-top: -10px; height: 220px;border:1px solid #fff; resize: none;background-color: #fff;color:#666;"
/>
<!-- <pre>{{noticeContent1}}</pre> -->
<div class="btn-content">
<div class="btn-content" v-button-per="permissions">
<a-button type="primary" @click="handleEdit">编辑</a-button>
</div>
</template>
@@ -49,7 +49,7 @@
placeholder="公告信息最多输入150个字"
style="margin-top: -10px; height: 160px;"
/>
<div class="btn-content">
<div class="btn-content" v-button-per="permissions">
<a-button class="cancel" @click="handleCancel">取消</a-button>
<a-button type="primary" @click="pubNotice" class="sure">
发布
@@ -69,6 +69,10 @@ import emitter from "../../utils/bus";
export default {
name: "NoticePub",
props: {
permissions:{
type:String,
default:''
},
projectId: {
type: Number,
default: null,

View File

@@ -144,7 +144,7 @@
<div class="groupright">
<div class="spandiv"><span class="spantext">规则</span></div>
<div v-if="edit" class="btns">
<div class="btn1" @click="edit = false">
<div v-button-per="permissions" class="btn1" @click="edit = false">
<img src="../../assets/images/projectadd/edit1.png" />
<span class="btn1text">编辑</span>
</div>
@@ -302,6 +302,10 @@ export default {
StuScoreDetail,
},
props: {
permissions:{
type:String,
default: ''
},
projectId: {
type: Number,
default: null,

View File

@@ -112,24 +112,25 @@
</div>-->
</div>
</a-drawer>
<CVote
v-model:CVvisible="CVvisible"
:voteID="voteID"
:courseID="courseID"
/>
<!-- 学员查看抽屉 -->
<check-stu
v-model:CheckStuvisible="CheckStuvisible"
v-model:routerId="routerId"
v-model:studentId="studentId"
/>
</template>
<script>
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
import { message } from "ant-design-vue";
// import * as api from "../../../api/index";
import * as api from "../../../api/indexTaskManage";
import CVote from "../CheckVote.vue"
import CheckStu from "../CheckStu";
export default {
name: "RouterProjectManage",
components:{
CVote,
CheckStu,
},
props: {
PjModelVisible: {
@@ -185,25 +186,25 @@
id: 3,
value: "3",
label: "已完成",
},
{
id: 4,
value: "4",
label: "未完成",
},
}
],
tabledata: [],
tableDataTotalLoading: true, // 表格loading加载配置
CVvisible:false, //查看投票抽屉
voteID: "",
courseID: ""
courseID: "",
routerId: '',
studentId: '',
CheckStuvisible: false,
});
const tableDataFunc = () => {
const columns = [
{
title: "工号",
dataIndex: "studentUserNo",
key: "studentUserNo",
dataIndex: "studentCode",
key: "studentCode",
width: "20%",
align: "center",
ellipsis: true,
@@ -211,7 +212,7 @@
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentUserNo?text.record.studentUserNo:"-"}</span>
<span> {text.record.studentCode?text.record.studentCode:"-"}</span>
</div>
);
},
@@ -267,24 +268,72 @@
},
{
title: "学员关卡",
dataIndex: "chapterName",
key: "chapterName",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.chapterName?text.record.chapterName:"-"}</span>
</div>
);
},
},
{
title: "当前阶段",
dataIndex: "currentStageName",
key: "currentStageName",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: () => {
customRender: (text) => {
return (
<div class="racona">
<span> {props.levelName}</span>
<span> {text.record.currentStageName?text.record.currentStageName:"-"}</span>
</div>
);
},
},
{
title: "当前任务",
dataIndex: "currentTaskName",
key: "currentTaskName",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.currentTaskName?text.record.currentTaskName:"-"}</span>
</div>
);
},
},
{
title: "进度",
dataIndex: "process",
key: "process",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.process?text.record.process:"-"}</span>
</div>
);
},
},
{
title: "完成时间",
dataIndex: "lastStudyTime",
key: "lastStudyTime",
dataIndex: "finishEdTime",
key: "finishEdTime",
width: "15%",
align: "center",
ellipsis: true,
@@ -292,7 +341,7 @@
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.lastStudyTime?text.record.lastStudyTime:"-"}</span>
<span> {text.record.finishEdTime?text.record.finishEdTime:"-"}</span>
</div>
);
},
@@ -327,20 +376,13 @@
style="color:#387df7;cursor:pointer"
onClick={
() => {
if(value.record.finishStatus !== 3){
message.destroy()
message.error("当前任务未完成")
return
}
{/* 当前投票提交的ID 用来查看投票详情 */}
console.log(value.record.voteSubmitId);
state.voteID = value.record.voteSubmitId;
state.CVvisible = true;
{/* 当前学员 用来查看学员详情 */}
state.routerId = value.record.routerId;
state.studentId = value.record.studentId;
state.CheckStuvisible = true;
console.log(value);
}}>
{value.record.finishStatus == 3 ?
<span style='color:#387df7;'> 查看 </span>
:
<span style='color:#999;'> 查看 </span>}
</div>
);
},
@@ -359,8 +401,9 @@
const afterVisibleChange = (bol) => {
if (bol == true) {
console.log("当前是什么类型", props.datasource.type);
console.log("当前是什么类型", props.datasource);
state.tableDataTotalLoading = true;
{/* getData(); */}
getData();
}
};
const selectProjectName = (value) => {
@@ -377,51 +420,34 @@
// 获取数据
function getData() {
if(props.datasource.type == 12){
if(props.datasource.type == 13){
console.log("我是传递的查询参数", {
"pageNo": state.currentPage,
"pageSize": state.pageSize,
"chapterId": props.datasource.stageId=="0"?"":props.datasource.stageId,
"status": state.projectName,
"studentName": state.name,
"targetId":props.datasource.projectId,
"taskId": props.datasource.courseId,
"type": 1
});
api.QueryVoteManagementDetail({
"courseId": props.datasource.courseId,
"pageNo": state.currentPage,
"pageSize": state.pageSize,
"chapterId": props.datasource.chapterId,
"status": state.projectName,
"studentName": state.name,
"targetId":props.datasource.routerId,
"taskId": props.datasource.courseId,
"type": 1
"studentName": state.name
});
api.QueryProjectManageDetail({
"courseId": props.datasource.courseId,
"pageNo": state.currentPage,
"pageSize": state.pageSize,
"chapterId": props.datasource.chapterId,
"status": state.projectName,
"studentName": state.name
}).then(res=>{
console.log('投票数据获取', res)
if(res.data.code==200){
state.tableDataTotalLoading = false;
let newData = []
for(let i=0;i<res.data.data.rows.length;i++){
// 处理在线课字段和表格中字段保持一致
let obj = {
studentUserNo: res.data.data.rows[i].studentCode,
studentName: res.data.data.rows[i].studentName,
studentDepartName: res.data.data.rows[i].studentDepartName,
studentJobName: res.data.data.rows[i].studentJobName,
lastStudyTime: res.data.data.rows[i].submitTime,
finishStatus: res.data.data.rows[i].status?res.data.data.rows[i].status:0,
voteSubmitId: res.data.data.rows[i].voteSubmitId
}
newData.push(obj)
}
state.tabledata = newData;
state.tabledata = res.data.data.rows;
state.courseID = props.datasource.courseId;
state.tableDataTotal = res.data.data.total;
}
}).catch(err=>{
console.log(err)
state.tableDataTotalLoading = false;
state.tabledata = [];
})
}else{
state.tableDataTotalLoading = false;
@@ -453,8 +479,8 @@
// 导出数据
function exportTaskStu() {
console.log(`${process.env.VUE_APP_BASE_API}/admin/vote/manage/export/vote?type=${1}&voteId=${props.datasource.routerTaskId}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/vote/manage/export/vote?type=${1}&voteId=${props.datasource.routerTaskId}`)
console.log(`${process.env.VUE_APP_BASE_API}/project/management/exportProjectManage?courseId=${props.datasource.courseId}`)
window.open(`${process.env.VUE_APP_BASE_API}/project/management/exportProjectManage?courseId=${props.datasource.courseId}`)
}
return {
@@ -477,8 +503,13 @@
</script>
<style lang="scss">
.ant-drawer-content-wrapper {
max-width: 80% !important;
}
.RouterProjectManage {
// overflow-x: auto;
max-width: auto;
.drawerMain {
min-width: 550px;
margin: 0px 32px 0px 32px;

View File

@@ -11,7 +11,7 @@
<div class="drawerMain" id="ProjCheckship" style="">
<div class="header">
<div class="headerTitle">
{{ {1: "添加学员", 2: "添加学员", 3: "添加学员",4: "查看权",5: "管理权"}[type] || title }}
{{ {1: "添加学员", 2: "添加学员", 3: "添加学员"}[type] || title }}
</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
@@ -288,32 +288,8 @@
</div>
</div>
</a-drawer>
<div @click="openDrawer">
<slot></slot>
</div>
<a-button @click="openDrawer" type="link"><slot></slot></a-button>
</div>
<!--
<a-modal
v-model:visible="stageVisible"
width="1000px"
title="选择阶段"
@ok="handleStageOk"
>
<div>
{{ type === 1 ? "选择阶段" : "" }}
<a-select
style="width: 150px"
:placeholder="type === 1 ? '选择阶段' : '选择关卡'"
v-model:value="selectsData.stageId"
className="cus-select"
>
<a-select-option v-for="(item, i) in stageIds" :key="i" :value="item.id"
>{{ item.name || "默认" }}
</a-select-option>
</a-select>
</div>
</a-modal>
-->
<a-modal
:style="{padding: 0,position: relative,right: '-20%'}"
:closable="true"

View File

@@ -29,7 +29,7 @@ import { defineProps, ref } from "vue";
import TableModelStudent from "@/components/student/TableModelStudent";
import CommonStudent from "@/components/student/CommonStudent";
const props = defineProps({
defineProps({
id: String,
type: Number,
types: {
@@ -37,7 +37,6 @@ const props = defineProps({
default: () => [],
},
});
console.log("props", props.types);
const tableModelRef = ref();
function submitCall(flag) {

View File

@@ -1,61 +1,51 @@
<template>
<div class="CommonStudent">
<a-drawer
:visible="visiable"
class="drawerStyle ProjCheckship"
placement="right"
width="40%"
:visible="visiable"
class="drawerStyle ProjCheckship"
placement="right"
width="40%"
>
<div class="drawerMain" id="ProjCheckship" style="">
<div class="header">
<div class="headerTitle">权限名单</div>
<div class="headerTitle">
权限名单
</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="TableStudent">
<a-row
type="flex"
gutter="12"
style="padding-left: 20px; margin-right: 0px"
type="flex"
gutter="12"
style="padding-left: 20px; margin-right: 0px"
>
<a-col>
<a-form-item title="姓名:">
<a-input
class="cus-input"
v-model:value="searchParams.studentName"
placeholder="请输入姓名"
class="cus-input"
v-model:value="searchName"
placeholder="请输入姓名"
/>
</a-form-item>
</a-col>
<a-col>
<a-button
class="cus-btn"
style="background: #4ea6ff; color: #fff; width: 100px"
@click="searchStu"
class="cus-btn"
style="background: #4ea6ff; color: #fff; width: 100px"
@click="search"
>
<template #icon
><img
style="margin-right: 10px"
src="../../assets/images/courseManage/search0.png"
/>
<template #icon><img style="margin-right: 10px" src="../../assets/images/courseManage/search0.png"/>
</template>
搜索
</a-button>
</a-col>
<a-col :span="2">
<a-button
class="cus-btn white"
style="width: 100px"
@click="reset"
>
<template #icon
><img
style="margin-right: 10px"
src="../../assets/images/leveladd/reset.png"
/>
<a-button class="cus-btn white" style="width: 100px" @click="reset">
<template #icon><img style="margin-right: 10px" src="../../assets/images/leveladd/reset.png"/>
</template>
重置
</a-button>
@@ -63,18 +53,16 @@
</a-row>
<div style="margin-top: 20px">
<a-table
:columns="columns"
:data-source="studentList"
:pagination="stuPagination"
:loading="loading"
row-key="id"
:columns="columns"
:data-source="studentList"
:pagination="stuPagination"
:loading="loading"
row-key="id"
>
<template #action="{ record }">
<a-space :size="2">
<slot name="extension" v-bind:data="{ record }"></slot>
<a-button @click="del(record.id)" type="link" danger
>删除</a-button
>
<a-button v-if="record.type!==6 && record.type!==9 && record.type!==12" @click="del(record.id)" type="link" danger>删除</a-button>
</a-space>
</template>
</a-table>
@@ -86,25 +74,16 @@
</div>
</div>
</a-drawer>
<div @click="openDrawer">
<slot></slot>
</div>
<a-button @click="openDrawer" type="link"><slot></slot></a-button>
</div>
</template>
<script setup>
import {
computed,
createVNode,
defineProps,
defineExpose,
ref,
watch,
} from "vue";
import { usePage } from "@/api/request";
import { STUDENT_LIST } from "@/api/apis";
import { delStudentList } from "@/api/index1";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import { Modal } from "ant-design-vue";
import {computed, createVNode, defineProps, defineExpose, ref, watch} from "vue";
import {usePage} from "@/api/request";
import {STUDENT_LIST} from "@/api/apis";
import {delStudentList} from "@/api/index1";
import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
import {Modal} from "ant-design-vue";
const props = defineProps({
type: Number,
@@ -123,14 +102,15 @@ const visiable = ref(false);
const initParams = {
studentName: "",
page: 1,
pageNo: 1,
pageSize: 10,
type: props.type || "",
type: props.type || '',
types: props.types,
pid: props.id || "",
};
pid: props.id || '',
}
const searchParams = ref(initParams);
const searchParams = ref(initParams)
const searchName = ref('')
const columns = ref([
{
@@ -163,8 +143,7 @@ const columns = ref([
key: "type",
width: 30,
align: "center",
customRender: ({ record: { type } }) =>
({ 4: "查看权", 5: "管理权", 6: "归属权" }[type]),
customRender: ({record: {type}}) => ({4: "查看权", 5: "管理权", 6: "归属权",7: "查看权", 8: "管理权", 9: "归属权",10: "查看权", 11: "管理权", 12: "归属权"}[type])
},
{
title: "操作",
@@ -172,43 +151,42 @@ const columns = ref([
key: "operation",
width: 50,
align: "center",
slots: { customRender: "action" },
slots: {customRender: "action"},
},
]);
])
const {
data: studentList,
fetch: searchStu,
total,
loading,
} = usePage(STUDENT_LIST, searchParams.value);
const {data: studentList, fetch: searchStu, total, loading} = usePage(STUDENT_LIST, searchParams)
const stuPagination = computed(() => ({
total: total,
total:total.value,
showSizeChanger: false,
current: searchParams.value.page,
current: searchParams.value.pageNo,
pageSize: searchParams.value.pageSize,
onChange: changePagination,
onChange: changePagination
}));
const openDrawer = () => {
visiable.value = true;
};
const changePagination = (page) => {
searchParams.value.page = page;
searchStu();
searchParams.value.pageNo = page;
};
function search(){
searchParams.value.studentName = searchName.value
searchParams.value.pageNo = 1
}
function del(id) {
Modal.confirm({
title: () => "确定删除?",
title: () => '确定删除?',
icon: () => createVNode(ExclamationCircleOutlined),
content: () => "数据删除后不可恢复!",
okText: () => "确定",
okType: "danger",
cancelText: () => "取消",
content: () => '数据删除后不可恢复!',
okText: () => '确定',
okType: 'danger',
cancelText: () => '取消',
onOk() {
id && delStudentList({ ids: [id] }).then(() => searchStu());
id && delStudentList({ids: [id]}).then(() => searchStu())
},
});
}
@@ -217,20 +195,20 @@ const closeDrawer = () => {
visiable.value = false;
};
function reset() {
searchParams.value = initParams;
searchStu();
function reset(){
searchParams.value = initParams
searchName.value=''
}
watch(visiable, () => {
visiable.value && searchStu();
searchParams.value = initParams;
visiable.value && searchStu()
searchParams.value = initParams
});
defineExpose({
searchStu,
loading,
});
loading
})
</script>
<style lang="scss">
.cus-btn {

View File

@@ -79,6 +79,7 @@
type="flex"
gutter="12"
style="padding-left: 20px; margin-right: 0px"
v-button-per="permissions"
>
<a-col :span="1.5">
<CommonStudent
@@ -217,18 +218,20 @@
<slot name="extension" v-bind:data="{ record }"></slot>
<a-button
v-button-per="permissions"
v-if="type === 3 && record.status !== 0"
@click="updateStatus(0, record.id)"
type="link"
>通过</a-button
>
<a-button
v-button-per="permissions"
v-if="type === 3 && record.status !== 0"
@click="updateStatus(2, record.id)"
type="link"
>拒绝</a-button
>
<a-button @click="del(record.id)" type="link" danger>删除</a-button>
<a-button v-button-per="permissions" @click="del(record.id)" type="link" danger>删除</a-button>
</a-space>
</template>
</a-table>
@@ -354,6 +357,10 @@ import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
const props = defineProps({
type: Number,
permissions:{
type: String,
default: ''
},
id: String,
columns: {
type: Array,

View File

@@ -16,6 +16,7 @@ import 'element-plus/dist/index.css'
import "@/assets/scss/common.scss"
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';
import {vButPer} from "@/utils/directive";
// import axios from 'axios'
// axios.defaults.withCredentials = true;
// import zhCN from 'ant-design-vue/es/locale/zh_CN';
@@ -28,4 +29,5 @@ app.config.warnHandler = () => null;
app.use(Antd);
app.use(router);
app.use(store);
app.directive('buttonPer', vButPer)
app.mount('#app');

13
src/utils/directive.js Normal file
View File

@@ -0,0 +1,13 @@
export const vButPer = {
mounted: (el, binding) => {
checkPer(binding.value) || el.parentNode.removeChild(el)
}
}
const admin = [5, 6, 8, 9, 11, 12]
function checkPer(per) {
if (!per) {
return true
}
return (per + "").split(',').some(t => admin.some(s => s == t))
}

View File

@@ -315,8 +315,9 @@
>
<template #bodyCell="{ record, column }">
<template v-if="column.key === 'operation'">
<a-space :size="0">
<a-space>
<a-button
v-button-per="record.permissions"
v-if="
record.status === 0 || record.status === -1 || !record.kkty
"
@@ -325,6 +326,7 @@
>编辑</a-button
>
<a-button
v-button-per="record.permissions"
block
v-if="record.status === 2"
@click="() => handleStart(record, String(record.courseform))"
@@ -332,6 +334,7 @@
>开课</a-button
>
<a-button
v-button-per="record.permissions"
v-if="record.status === 2"
@click="() => handleLook(record, String(record.courseform))"
type="link"
@@ -343,86 +346,57 @@
type="link"
>管理</a-button
>
<div className="tableSelect" style="margin-left: 0">
<a-select value="授权" dropdownClassName="tabledropdown">
<a-select-option value="权限名单" label="权限名单">
<TableModelStudent
:types="[10, 11, 12]"
:id="record.offcourseId"
>权限名单</TableModelStudent
>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<CommonStudent :type="10" :id="record.offcourseId"
>查看权</CommonStudent
>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<CommonStudent :type="11" :id="record.offcourseId"
>管理权</CommonStudent
>
</a-select-option>
</a-select>
</div>
<div className="tableSelect">
<a-select value="更多" dropdownClassName="tabledropdown">
<a-select-option value="复制" label="复制">
<a-button
@click="
() => handleCopy(record, String(record.courseform))
"
type="link"
>复制</a-button
>
</a-select-option>
<a-select-option
v-if="record.status === 1"
value="撤回"
label="撤回"
>
<a-button
@click="
() =>
handleRejectExit(record, String(record.courseform))
"
type="link"
>撤回</a-button
>
</a-select-option>
<a-select-option
v-if="record.status === 2"
value="停用"
label="停用"
>
<a-button
v-if="record.status === 2 && record.kkty"
@click="
() => handleStop(record, String(record.courseform))
"
type="link"
>停用</a-button
>
<a-button
v-if="record.status === 2 && !record.kkty"
@click="
() => handleOpen(record, String(record.courseform))
"
type="link"
>启用</a-button
>
</a-select-option>
<a-select-option value="删除" label="删除">
<a-button
@click="
() => handleDelete(record, String(record.courseform))
"
type="link"
danger
>删除</a-button
>
</a-select-option>
</a-select>
</div>
<DropDown v-button-per="record.permissions" value="授权">
<OwnerTableModelStudent
:types="[10, 11, 12]"
:id="record.offcourseId"
>权限名单</OwnerTableModelStudent
>
<CommonStudent
:type="10"
:id="record.offcourseId"
title="查看权"
>查看权</CommonStudent
>
<CommonStudent
:type="11"
:id="record.offcourseId"
title="管理权"
>管理权</CommonStudent
>
</DropDown>
<DropDown v-button-per="record.permissions" value="更多">
<a-button
@click="() => handleCopy(record, String(record.courseform))"
type="link"
>复制</a-button
>
<a-button
@click="
() => handleRejectExit(record, String(record.courseform))
"
type="link"
>撤回</a-button
>
<a-button
v-if="record.status === 2 && record.kkty"
@click="() => handleStop(record, String(record.courseform))"
type="link"
>停用</a-button
>
<a-button
v-if="record.status === 2 && !record.kkty"
@click="() => handleOpen(record, String(record.courseform))"
type="link"
>启用</a-button
>
<a-button
@click="() => handleDelete(record, String(record.courseform))"
type="link"
danger
>删除</a-button
>
</DropDown>
</a-space>
</template>
</template>
@@ -1234,161 +1208,6 @@
</template>
</TableStudent>
</div>
<div class="tableBox" style="margin-top: 20px">
<!-- <a-table-->
<!-- :columns="columns7"-->
<!-- :data-source="tableData7"-->
<!-- :loading="tableDataTotal3 === -1 ? true : false"-->
<!-- :scroll="{ x: 800 }"-->
<!-- expandRowByClick="true"-->
<!-- @expand="expandTable"-->
<!-- :pagination="false"-->
<!-- :row-selection="{-->
<!-- selectedRowKeys: selectedRowKeys7,-->
<!-- onChange: onSelectChange7,-->
<!-- }"-->
<!-- >-->
<!-- <template #bodyCell="{ record, column }">-->
<!-- &lt;!&ndash; 操作1 &ndash;&gt;-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '0' ||-->
<!-- record.status === '待审核') &&-->
<!-- column.key === 'overstatus'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-</span>-->
<!-- </template>-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '-1' ||-->
<!-- record.status === '已拒绝') &&-->
<!-- column.key === 'overstatus'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-</span>-->
<!-- </template>-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '1' ||-->
<!-- record.status === '已通过') &&-->
<!-- column.key === 'overstatus'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handlJoinStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 成绩录入-->
<!-- </a>-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleOverStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 结业-->
<!-- </a>-->
<!-- </span>-->
<!-- </template>-->
<!-- &lt;!&ndash; 操作2 &ndash;&gt;-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '0' ||-->
<!-- record.status === '待审核') &&-->
<!-- column.key === 'operation'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleSucessStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 通过-->
<!-- </a>-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleRejectStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 拒绝-->
<!-- </a>-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleDeleteStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 删除-->
<!-- </a>-->
<!-- </span>-->
<!-- </template>-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '1' ||-->
<!-- record.status === '已通过') &&-->
<!-- column.key === 'operation'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleDeleteStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 删除-->
<!-- </a>-->
<!-- </span>-->
<!-- </template>-->
<!-- <template-->
<!-- v-if="-->
<!-- (String(record.applyStatus) === '-1' ||-->
<!-- record.status === '已拒绝') &&-->
<!-- column.key === 'operation'-->
<!-- "-->
<!-- >-->
<!-- <span class="table-operation">-->
<!-- <a-->
<!-- @click="-->
<!-- () => {-->
<!-- handleDeleteStu(record);-->
<!-- }-->
<!-- "-->
<!-- >-->
<!-- 删除-->
<!-- </a>-->
<!-- </span>-->
<!-- </template>-->
<!-- </template>-->
<!-- </a-table>-->
<!-- <div class="tableBox" style="margin-top: 50px">-->
<!-- <div class="pa">-->
<!-- <a-pagination-->
<!-- :showSizeChanger="false"-->
<!-- showQuickJumper="true"-->
<!-- hideOnSinglePage="true"-->
<!-- :pageSize="pageSize3"-->
<!-- :current="currentPage3"-->
<!-- :total="tableDataTotal3"-->
<!-- class="pagination"-->
<!-- @change="handelChangePage3"-->
<!-- />-->
<!-- </div>-->
<!-- </div>-->
</div>
</div>
</div>
</div>
@@ -1766,7 +1585,7 @@ import * as apis from "../../api/indexTaskManage";
import { message } from "ant-design-vue";
import { useRouter, useRoute } from "vue-router";
import CommonStudent from "@/components/student/CommonStudent";
import TableModelStudent from "@/components/student/TableModelStudent";
import OwnerTableModelStudent from "@/components/student/OwnerTableModelStudent";
// import StuAdd from "../../components/drawers/StuAdd";
// import OwnPower from "../../components/drawers/OwnPower.vue";
// import Corpowerlist from "../../components/drawers/CorPowerlist.vue";
@@ -1822,6 +1641,7 @@ import TableStudent from "@/components/student/TableStudent";
import FJUpload from "@/components/common/FJUpload";
import { updateStudent } from "@/api/indexProjStu";
import { useStore } from "vuex";
import DropDown from "@/components/common/DropDown";
//列表表格
const columns1 = [
@@ -2379,7 +2199,8 @@ export default defineComponent({
// OwnPower,
// Corpowerlist,
CommonStudent,
TableModelStudent,
DropDown,
OwnerTableModelStudent,
SeeModal,
CourseModal,
FJUpload,
@@ -4747,6 +4568,16 @@ export default defineComponent({
// 管理开课
const handleGuan22 = (item) => {
if (String(item.courseform) === "1") {
return;
}
if (String(item.courseform) === ("1" || "线上")) {
state.om_1 = true;
state.ft_1 = false;
} else if (String(item.courseform) === ("2" || "面授")) {
state.om_1 = true;
state.ft_1 = true;
}
state.manageStuLoading = true;
console.log(787666, item);
state.faceClassification = item.contentTxt;

View File

@@ -96,12 +96,81 @@
style="border: 1px solid #f2f6fe"
:columns="tableDataFunc()"
:data-source="tableData"
:loading="tableDataTotal === -1 ? true : false"
:loading="tableLoading"
expandRowByClick="true"
:scroll="{ x: 1550 }"
@expand="expandTable"
:pagination="false"
/>
>
<template #bodyCell="{ record, column }">
<template v-if="column.key === 'operation'">
<a-space>
<a-button
v-button-per="record.permissions"
v-if="record.state === '草稿'"
@click="showPub(record)"
type="link"
>发布</a-button
>
<a-button
v-button-per="record.permissions"
v-if="record.state === '草稿'"
@click="getLearnPathInfo(record.id)"
type="link"
>编辑</a-button
>
<a-button
v-button-per="record.permissions"
v-if="record.state === '已发布'"
@click="getLearnPathInfo(record.id)"
type="link"
>编辑</a-button
>
<a-button @click="manage(record.id)" type="link">管理</a-button>
<DropDown v-button-per="record.permissions" value="授权">
<OwnerTableModelStudent
:types="[7, 8, 9]"
:id="record.id"
:type="9"
>权限名单</OwnerTableModelStudent
>
<CommonStudent :type="7" :id="record.id" title="查看权"
>查看权</CommonStudent
>
<CommonStudent :type="8" :id="record.id" title="管理权"
>管理权</CommonStudent
>
</DropDown>
<DropDown v-button-per="record.permissions" value="更多">
<a-button @click="showCopyModal(record.id)" type="link"
>复制</a-button
>
<a-button @click="showDeleteModal(record.id)" type="link" danger
>删除</a-button
>
<a-button
v-if="record.state === '已发布'"
@click="showBackModal(record.id)"
type="link"
>撤回</a-button
>
<a-button
v-if="record.state === '已发布'"
@click="showStopModal(record.id)"
type="link"
>结束</a-button
>
<a-button
v-if="record.state === '已结束'"
@click="showStartModal(record.id)"
type="link"
>启用</a-button
>
</DropDown>
</a-space>
</template>
</template>
</a-table>
</div>
<div class="tableBox">
<div class="pa">
@@ -704,25 +773,26 @@ import { useStore } from "vuex";
import OrgClass from "@/components/project/OrgClass";
import NameInput from "@/components/project/NameInput";
import { validateName } from "@/api/index1";
import DropDown from "@/components/common/DropDown";
export default {
name: "learningPath",
components: {
// OwnerShip,
// PowerList,
// QueryRight,
// ManageRight,
ProjOwnerShip,
OrgClass,
NameInput,
ProjPowerList,
ProjCheckShip,
CommonStudent,
OwnerTableModelStudent,
DropDown,
},
setup() {
const store = useStore();
const router = useRouter();
const state = reactive({
tableLoading: false,
out: false,
out1: false,
number: null,
@@ -947,7 +1017,8 @@ export default {
state.routeStudentsNum = null;
};
//显示复制窗口
const showCopyModal = () => {
const showCopyModal = (id) => {
state.copyPathId = id;
state.copyModal = true;
};
//关闭复制窗口
@@ -980,7 +1051,8 @@ export default {
};
//显示结束窗口
const showStopModal = () => {
const showStopModal = (id) => {
state.stopPathId = id;
state.stopModal = true;
};
//关闭结束窗口
@@ -1012,7 +1084,8 @@ export default {
});
};
const showDeleteModal = () => {
const showDeleteModal = (id) => {
state.deletePathId = id;
state.deleteModal = true;
};
const closeDeleteModal = () => {
@@ -1159,275 +1232,12 @@ export default {
},
{
title: "操作",
className: "h",
dataIndex: "opacation",
key: "opacation",
dataIndex: "operation",
key: "operation",
width: "20%",
align: "center",
align: "right",
fixed: "right",
scopedSlots: { customRender: "action" }, //引入的插槽
customRender: (text) => {
// console.log(text);
return (
<div class="operation">
<div class="nSelect">
{text.record.state === "草稿" ? (
<div class="fb">
<div
style="cursor:pointer"
class="jc"
onClick={() => {
// console.log("text.record.", text.record);
showPub(text.record);
}}
>
发布
</div>
<div
class="jc"
onClick={() => {
// console.log("text.record", text.record);
getLearnPathInfo(text.record.id);
}}
>
编辑
</div>
</div>
) : (
<div></div>
)}
{text.record.state === "已发布" ? (
<div class="fb">
<div
class="jc"
onClick={() => {
// state.out1 = true;
// state.pathName = text.record.manager;
// // state.pathBg = "";
// // state.organizationSelectName = null;
// // state.organizationSelectId = null;
// state.pathIntro = text.record.remark;
// state.editPathId = text.record.id;
}}
></div>
</div>
) : (
<div></div>
)}
{
// text.record.state === "未发布" ? (
// <div class="fb">
// <div
// style="cursor:pointer"
// class="jc"
// onClick={() => {
// showCopyModal();
// }}
// >
// 复制
// </div>
// </div>
// ) : (
// <div></div>
// )
}
</div>
<div class="tableSelect">
<div
class="g1"
onClick={() => {
router.push({
path: "/leveladd",
});
storage.set("routerId", text.record.id);
}}
>
管理
</div>
{
<a-select
style="width: 50px;margin-top:2px;margin-left:25px"
value="授权"
dropdownClassName="tabledropdown"
>
<a-select-option value="权限名单" label="权限名单">
<OwnerTableModelStudent
types={[7, 8, 9]}
id={text.record.id}
type={9}
>
权限名单
</OwnerTableModelStudent>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<CommonStudent type={7} id={text.record.id}>
查看权
</CommonStudent>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<CommonStudent type={8} id={text.record.id}>
管理权
</CommonStudent>
</a-select-option>
</a-select>
}
</div>
<div class="tableSelect">
{text.record.state === "草稿" ? (
<a-select
style="width: 50px;margin-top:2px;margin-right:20px;"
value="更多"
dropdownClassName="tabledropdown"
>
<a-select-option
value="复制"
label="复制"
style="padding-left:35px"
>
<div
onClick={() => {
state.copyPathId = text.record.id;
showCopyModal();
}}
>
复制
</div>
</a-select-option>
<a-select-option
value="删除"
label="删除"
style="padding-left:35px"
>
<div
onClick={() => {
state.deletePathId = text.record.id;
// console.log("text.record", text.record);
showDeleteModal();
}}
>
删除
</div>
</a-select-option>
</a-select>
) : (
<div></div>
)}
{text.record.state === "已发布" ? (
<div>
<a-select
style="width: 50px;margin-top:2px;margin-right:20px;"
value="更多"
dropdownClassName="tabledropdown"
>
<a-select-option
value="复制"
label="复制"
style="padding-left:35px"
>
<div
onClick={() => {
state.copyPathId = text.record.id;
showCopyModal();
}}
>
复制
</div>
</a-select-option>
<a-select-option
value="撤回"
label="撤回"
style="padding-left:35px"
>
<div
onClick={() => {
showBackModal(text.record.id);
}}
>
撤回
</div>
</a-select-option>
<a-select-option
value="结束"
label="结束"
style="padding-left:35px"
>
<div
onClick={() => {
state.stopPathId = text.record.id;
showStopModal();
}}
>
结束
</div>
</a-select-option>
</a-select>
</div>
) : (
<div></div>
)}
{text.record.state === "已结束" ? (
<div>
<a-select
style="width: 50px;margin-top:2px;margin-right:20px;"
value="更多"
dropdownClassName="tabledropdown"
>
<a-select-option
value="复制"
label="复制"
style="padding-left:35px"
>
<div
onClick={() => {
state.copyPathId = text.record.id;
showCopyModal();
}}
>
复制
</div>
</a-select-option>
{/**
<a-select-option
value="启用"
label="启用"
style="padding-left:35px"
>
<div
onClick={() => {
showStartModal();
}}
>
启用
</div>
</a-select-option>
*/}
<a-select-option
value="删除"
label="删除"
style="padding-left:35px"
>
<div
onClick={() => {
state.deletePathId = text.record.id;
showDeleteModal();
}}
>
删除
</div>
</a-select-option>
</a-select>
</div>
) : (
<div></div>
)}
</div>
</div>
);
},
scopedSlots: { customRender: "action" },
},
];
return columns;
@@ -1515,6 +1325,7 @@ export default {
//获取学习路径列表
const getLearnPath = () => {
state.tableLoading = true;
let obj = {
pageNo: state.currentPage,
pageSize: state.pageSize,
@@ -1541,6 +1352,7 @@ export default {
}
getTableDate(arr);
state.tableDataTotal = Number(res.data.data.total);
state.tableLoading = false;
}
})
.catch((err) => {
@@ -1578,44 +1390,6 @@ export default {
});
};
//获取路径图详细信息
const getLearnPathInfo = (id) => {
// console.log("编辑学习路径图id", id);
//获取学习路径详情
api
.getRouterDetail(id)
.then((res) => {
if (res.data.code === 200) {
console.log("获取学习路径详情成功", res.data.data);
let detail = res.data.data.routerInfo;
state.pathName = detail.name;
state.pathBg = detail.picUrl;
state.pathBgId = "";
state.organizationSelectName = detail.organizationName;
state.organizationSelectId = detail.organizationId;
state.pathIntro = detail.remark;
state.editPathId = id;
let arr = imgData.value;
arr.forEach((item) => {
if (item.dictValue === state.pathBg) {
state.pathBgId = item.dictCode;
}
});
//for (let i = 0; i < arr.length; i++) {
// console.log("arr[i].dictValue", arr[i].dictValue, state.pathBg);
// if (arr[i].dictValue === state.pathBg) {
// state.pathBgId = arr[i].dictCode;
// }
// }
}
})
.catch((err) => {
console.log("获取详情失败", err);
});
state.out1 = true;
};
//编辑学习路径图
const editLearnPath = async () => {
if (!state.pathName) {
@@ -1817,10 +1591,17 @@ export default {
});
}
);
function manage(id) {
router.push({
path: "/leveladd",
});
storage.set("routerId", id);
}
return {
...toRefs(state),
imgData,
manage,
selectProjectName,
expandTable,
handleOut,
@@ -2763,6 +2544,10 @@ export default {
// position: absolute;
// bottom: -40px;
}
th {
background-color: #eff4fc !important;
text-align: center !important;
}
}
.operation {

View File

@@ -53,7 +53,7 @@
<div class="onerow">
<div class="taskmain">快速创建路径图详情</div>
</div>
<div class="second">
<div class="second" v-button-per="permissions">
<div @click="totask">
<div
class="taskbox"
@@ -326,7 +326,11 @@
<div class="onerow">
<div class="taskmain">任务大纲</div>
<router-link to="/leveladddetail" class="editright">
<router-link
to="/leveladddetail"
class="editright"
v-button-per="permissions"
>
<img
class="editimg"
src="../../assets/images/leveladd/edit.png"
@@ -554,6 +558,7 @@
</a-tab-pane>
<a-tab-pane key="3" tab="学员管理" force-render>
<TableStudent
:permissions="permissions"
v-if="isreload"
:type="2"
:id="routerId"
@@ -562,7 +567,12 @@
>
<template #extension="{ data: { record } }">
<a-button type="link" @click="showStudent(record)">查看</a-button>
<a-button type="link" @click="setLevels(record)">调整</a-button>
<a-button
type="link"
@click="setLevels(record)"
v-button-per="permissions"
>调整</a-button
>
</template>
</TableStudent>
<TableStudent
@@ -574,11 +584,15 @@
>
<template #extension="{ data: { record } }">
<a-button type="link" @click="showStudent(record)">查看</a-button>
<a-button type="link" @click="setLevels(record)">调整</a-button>
<a-button
type="link"
@click="setLevels(record)"
v-button-per="permissions"
>调整</a-button
>
</template>
</TableStudent>
</a-tab-pane>
<!-- 1211注释 待开放 -->
<a-tab-pane key="4" tab="设置">
<div class="split"></div>
@@ -592,7 +606,12 @@
<div class="headone">
<div class="box"></div>
<div class="onetitle">关卡内容可见可学设置</div>
<div class="oneedi" @click="showbtn" v-show="twobtn">
<div
class="oneedi"
@click="showbtn"
v-show="twobtn"
v-button-per="permissions"
>
编辑
</div>
<div v-show="twobtnn" class="twobtn">
@@ -1388,6 +1407,7 @@ export default {
const router = useRouter();
// const store = useStore();
const state = reactive({
permissions: "",
hasTask: false,
stage: [],
statess: [],
@@ -1553,7 +1573,7 @@ export default {
previewEndNum: 0,
studyStartNum: 0,
studyEndNum: 0,
pjModelVisible: false,
faceTeachModelVisible: false,
examinationModelVisible: false,
evaluationModelVisible: false,
@@ -1561,7 +1581,6 @@ export default {
commonModelVisible: false,
voteModelVisible: false,
projectModelVisible: false,
PjModelVisible: false,
faceTeachModelVisibleTitle: "",
examinationModelVisibleTitle: "",
evaluationModelVisibleTitle: "",
@@ -2241,6 +2260,7 @@ export default {
.then((res) => {
console.log("router-list", res);
state.fileList = JSON.parse(res.data.data.routerInfo.attach);
state.permissions = res.data.data.routerInfo.permissions;
console.log("asdasdasd-------->", state.fileList);
state.docChecked =
res.data.data.routerInfo.attachSwitch == 1 ? true : false;

View File

@@ -192,7 +192,7 @@
</div>
<div class="rightt">
<!-- 2022-11-30注释 后面放开 -->
<!-- <div class="select">
<div class="select" style="margin-right:90px;">
<span>学习模式</span>
<div class="inputbox">
<input type="text" placeholder="按学习时间解锁" />
@@ -201,7 +201,7 @@
</div>
</div>
<unlock-mode v-model:unlockModeVisible="unlockModeVisible" />
</div> -->
</div>
<div class="line"></div>
<router-link to="/leveladd">
<div style="display: flex">
@@ -781,7 +781,7 @@
</div>
<div class="rightt">
<!-- 2022-11-30注释 后面放开 -->
<!-- <div class="select">
<div class="select">
<span>学习模式</span>
<div class="inputbox">
<input type="text" placeholder="按学习时间解锁" />
@@ -790,7 +790,7 @@
</div>
</div>
<unlock-mode v-model:unlockModeVisible="unlockModeVisible" />
</div> -->
</div>
<div class="line"></div>
<router-link to="/leveladd">
<div style="display: flex">
@@ -898,7 +898,7 @@
</div>
</div>
<!-- <div class="footbtn">
<div class="footbtn">
<div class="btnbox">
<div class="btn btn2" @click="temporaryStorage">
<div class="btnText">暂存</div>
@@ -910,7 +910,7 @@
<div class="btnText">取消</div>
</div>
</div>
</div> -->
</div>
<!-- 添加学员抽屉 -->
<add-stu v-model:AddSvisible="AddSvisible" />
<!-- 导入学员抽屉 -->
@@ -1087,7 +1087,7 @@ import { editTask } from "../../api/indexTaskadd";
// import { RouterEditTask } from "@/api/indexTask";
import { useRouter } from "vue-router";
// import UnlockMode from "../../components/drawers/UnlockMode.vue";
import UnlockMode from "../../components/drawers/UnlockMode.vue";
export default {
name: "LevelAddDetail",
components: {
@@ -1105,7 +1105,7 @@ export default {
AddLive,
AddRef,
draggable,
// UnlockMode,
UnlockMode,
AddFaceteach,
AddProject,
},

View File

@@ -91,7 +91,34 @@
:scroll="{ x: 700 }"
@expand="expandTable"
:pagination="false"
:header-cell-style="{'text-align':'center'}"
>
<template #bodyCell="{ record, column }">
<template v-if="column.key === 'operation'">
<a-space align="start">
<a-button v-button-per="record.permissions" v-if="record.status===0 || record.status===2 || record.status===-5" @click="handleEdit(record)" type="link">编辑</a-button>
<a-button v-button-per="record.permissions" v-if="record.type===1" @click="createSub(record)" type="link">创建子项目</a-button>
<a-button v-button-per="record.permissions" v-if="record.type===2" @click="createClass(record)" type="link">创建班级</a-button>
<a-button v-button-per="record.permissions" v-if="record.status===0 && record.type===3" @click="showReviewModal(record.projectId)" type="link">提交审核</a-button>
<a-button v-button-per="record.permissions" v-if="record.status===1 && record.type===3" @click="showRecallReviewModal(record.projectId)" type="link">撤回审核</a-button>
<a-button v-button-per="record.permissions" v-if="record.status===2 && record.type===3" @click="push(record)" type="link">发布</a-button>
<a-button v-button-per="record.permissions" v-if="record.status===3 && record.type===3" @click="showBackModal(record.projectId)" type="link">撤回发布</a-button>
<a-button v-if="record.status!==3 && record.type===3" @click="baseInfo(record)" type="link">管理</a-button>
<DropDown v-button-per="record.permissions" value="授权">
<OwnerTableModelStudent :types="[4,5,6]" :id="record.projectId" :type="6">权限名单</OwnerTableModelStudent>
<CommonStudent :type="4" :id="record.projectId" title="查看权">查看权</CommonStudent>
<CommonStudent :type="5" :id="record.projectId" title="管理权">管理权</CommonStudent>
</DropDown>
<DropDown v-button-per="record.permissions" value="更多">
<a-button @click="showCopyModal(record.projectId)" type="link">复制</a-button>
<a-button v-if="record.status!==3" @click="showDeleteModal(record.projectId)" type="link" danger>删除</a-button>
<a-button v-if="record.status===3" @click="showStartModal(record.projectId)" type="link">存为模版</a-button>
<a-button v-if="record.status===3 && record.type===3" @click="showStopModal(record.projectId)" type="link">结束</a-button>
<a-button v-if="record.status===-1 && record.type===3" @click="showBackFinashModal(record.projectId)" type="link">撤回</a-button>
</DropDown>
</a-space>
</template>
</template>
</a-table>
<div class="tableBox">
<div class="pa">
@@ -837,7 +864,8 @@ import * as moment from "moment";
import NameInput from "@/components/project/NameInput";
import { validateName } from "@/api/index1";
import CommonStudent from "@/components/student/CommonStudent";
import TableModelStudent from "@/components/student/TableModelStudent";
import OwnerTableModelStudent from "@/components/student/OwnerTableModelStudent";
import DropDown from "@/components/common/DropDown";
export default {
name: "projectManage",
@@ -847,10 +875,11 @@ export default {
ProjCheckShip,
NameInput,
ProjectManager,
// ProjectClass,
OrgClass,
TrainClass,
// ProjManageShip
CommonStudent,
OwnerTableModelStudent,
DropDown,
},
setup() {
const state = reactive({
@@ -991,8 +1020,7 @@ export default {
message.destroy();
return message.warning("项目名称重复,请重新填写");
}
api.createProject(state.projectInfo).then((res) => {
console.log("res", res);
api.createProject(state.projectInfo).then(() => {
state.doublepro = false;
message.destroy();
message.success("创建成功");
@@ -1398,278 +1426,9 @@ export default {
dataIndex: "operation",
key: "operation",
width: 300,
align: "center",
align: "right",
fixed: "right",
customRender: (value) => {
// console.log("value", value.record.type, value.record.status);
return (
<div className="operation">
{value.record.status === 0 ||
value.record.status === 2 ||
value.record.status === -5 ? (
<span
onClick={() => {
if (value.record.type === 1 || value.record.type === 2) {
state.doublepro = true;
state.projectInfo = value.record;
} else {
console.log(value.record);
router.push({
path: "/projectadd",
query: {
projectId: value.record.projectId,
parentId: value.record.parentId,
parentName: value.record.parentName,
},
});
}
}}
style="cursor:pointer;"
className="operation1"
>
编辑
</span>
) : (
""
)}
{value.record.status === 0 && value.record.type === 3 ? (
<span
onClick={() => {
showReviewModal(value.record.projectId);
}}
style="cursor:pointer"
class="operation3"
>
提交审核
</span>
) : (
""
)}
{value.record.status === 1 && value.record.type === 3 ? (
<span
onClick={() => {
showRecallReviewModal(value.record.projectId);
}}
style="cursor:pointer"
class="operation3"
>
撤回审核
</span>
) : (
""
)}
{value.record.status === 2 && value.record.type === 3 ? (
<span
onClick={() => {
let time =
value.record.beginTime + "-" + value.record.endTime;
let obj = {
projectId: value.record.projectId,
name: value.record.name,
time: time,
};
showProjectPub(obj);
}}
style="cursor:pointer"
class="operation3"
>
发布
</span>
) : (
""
)}
{value.record.status === 3 && value.record.type === 3 ? (
<div
onClick={() => {
router.push({
path: "/taskpage",
query: { projectId: value.record.projectId },
});
storage.set("projectId", value.record.projectId);
}}
>
管理
</div>
) : (
""
)}
{value.record.status === 3 && value.record.type === 3 ? (
<span
onClick={() => {
showBackModal(value.record.projectId);
}}
style="cursor:pointer; margin-left: 21px; width:70px;"
class="operation3"
>
撤回发布
</span>
) : (
""
)}
{
<div className="tableSelect">
<a-select
style="width: 50px;"
value="授权"
dropdownClassName="tabledropdown"
>
<a-select-option value="权限名单" label="权限名单">
<TableModelStudent
types={[4, 5, 6]}
id={value.record.projectId}
>
权限名单
</TableModelStudent>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<CommonStudent type={4} id={value.record.projectId}>
查看权
</CommonStudent>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<CommonStudent type={5} id={value.record.projectId}>
管理权
</CommonStudent>
</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,
name: "",
sourceBelongId: value.record.sourceBelongId,
sourceBelongName: value.record.sourceBelongName,
manager: value.record.manager,
managerId: value.record.managerId,
systemId: value.record.systemId,
type: 2,
};
state.estabish = 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.parentName + "——" + value.record.name,
ptojectType: 3,
},
});
}}
>
创建班级
</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>
{value.record.status !== 3 ? (
<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.status === 3 && value.record.type === 3 ? (
<a-select-option value="结束" label="结束">
<div
onClick={() => {
showStopModal(value.record.projectId);
}}
>
结束
</div>
</a-select-option>
) : (
""
)}
{value.record.status === -1 && value.record.type === 3 ? (
<a-select-option value="撤回" label="撤回">
<div
onClick={() => {
showBackFinashModal(value.record.projectId);
}}
>
撤回
</div>
</a-select-option>
) : (
""
)}
{value.record.status !== 3 && value.record.type === 3 ? (
<a-select-option value="基础信息" label="基础信息">
<div
onClick={() => {
router.push({
path: "/taskpage",
query: { projectId: value.record.projectId },
});
storage.set("projectId", value.record.projectId);
}}
>
基础信息
</div>
</a-select-option>
) : (
""
)}
</a-select>
</div>
</div>
);
},
scopedSlots: {customRender: "action"}
},
]);
const getTableDate = () => {
@@ -1713,6 +1472,21 @@ export default {
});
}
}
function handleEdit(record){
if (record.type === 1 || record.type === 2) {
state.doublepro = true;
state.projectInfo = record;
} else {
router.push({
path: "/projectadd",
query: {
projectId: record.projectId,
parentId: record.parentId,
parentName: record.parentName,
},
});
}
}
getTableDate();
// 翻页
@@ -1803,10 +1577,65 @@ export default {
state.projectInfo.sourceBelongName = t;
state.projectInfo.sourceBelongFullName = orgName;
}
function push(record){
showProjectPub({
projectId: record.projectId,
name: record.name,
time: record.beginTime + "-" + record.endTime,
});
}
function manage(record){
router.push({
path: "/taskpage",
query: { projectId: record.projectId },
});
storage.set("projectId", record.projectId);
}
function createSub(record){
state.projectInfo = {
parentName: record.name,
parentId: record.projectId,
name: "",
sourceBelongId: record.sourceBelongId,
sourceBelongName: record.sourceBelongName,
manager: record.manager,
managerId: record.managerId,
systemId: record.systemId,
type: 2,
};
state.estabish = true;
}
function createClass(record){
router.push({
path: "/projectadd",
query: {
parentId: record.projectId,
parentName: record.parentName + "——" + record.name,
ptojectType: 3,
}
})
}
function baseInfo(record){
router.push({
path: "/taskpage",
query: { projectId: record.projectId },
});
storage.set("projectId", record.projectId);
}
return {
...toRefs(state),
dayjs,
handleEdit,
baseInfo,
createClass,
createSub,
manage,
push,
moment,
managerChange,
reFinashedProject,
@@ -2060,6 +1889,10 @@ export default {
.ant-table-thead > tr > th {
background-color: #eff4fc;
}
th {
background-color: #eff4fc !important;
text-align: center !important;
}
}
.tableBox {

View File

@@ -105,16 +105,16 @@
</div>
<div class="rightt">
<!-- 2022-11-30注释 后面放开 -->
<!-- <div class="select">
<span>学习模式</span>
<div class="inputbox">
<input type="text" placeholder="按学习时间解锁" />
<div class="bottonbox" @click="showModeVisible">
<div class="btnText">切换模式</div>
</div>
<unlock-mode v-model:unlockModeVisible="unlockModeVisible" />
</div>
</div> -->
<div class="select" style="margin-right:90px;">
<span>学习模式</span>
<div class="inputbox">
<input type="text" placeholder="按学习时间解锁" style="padding-left:12px;" />
<div class="bottonbox" @click="showModeVisible">
<div class="btnText">切换模式</div>
</div>
<unlock-mode v-model:unlockModeVisible="unlockModeVisible" />
</div>
</div>
<div class="line"></div>
<!-- <img class="img2" src="../../assets/images/projectadd/keep.png" />
<div class="pub">保存</div>
@@ -570,19 +570,19 @@
</div>
</div>
<!-- <div class="footbtn">
<div class="btnbox">
<div class="btn btn2" @click="temporaryStorage">
<div class="btnText">暂存</div>
</div>
<div class="btn btn2" @click="submitStorage">
<div class="btnText">确定</div>
</div>
<div class="btn btn1" @click="cancelStorage">
<div class="btnText">取消</div>
</div>
</div>
</div> -->
<div class="footbtn">
<div class="btnbox">
<div class="btn btn2" @click="temporaryStorage">
<div class="btnText">暂存</div>
</div>
<div class="btn btn2" @click="submitStorage">
<div class="btnText">确定</div>
</div>
<div class="btn btn1" @click="cancelStorage">
<div class="btnText">取消</div>
</div>
</div>
</div>
<!-- 添加阶段弹窗 -->
<div>
@@ -841,6 +841,7 @@ import * as api from "../../api/indexTaskadd";
import * as apistage from "../../api/indexStage";
import * as apimove from "../../api/indexMovetask";
import draggable from "vuedraggable";
import UnlockMode from "../../components/drawers/UnlockMode.vue";
import { useRoute, useRouter } from "vue-router";
@@ -860,7 +861,7 @@ export default {
AddEval,
AddInvist,
AddVote,
// UnlockMode,
UnlockMode,
},
setup() {
const router = useRouter();

View File

@@ -195,7 +195,7 @@
<div class="onerow">
<div class="taskmain">快速创建项目详情</div>
</div>
<div class="second">
<div v-button-per="permissions" class="second">
<!-- @click="totask" -->
<div
class="taskbox"
@@ -423,6 +423,7 @@
批量面授报名
</button> -->
<router-link
v-button-per="permissions"
:to="{ path: `/taskadd`, query: { projectId: projectId } }"
>
<button class="edit">
@@ -570,7 +571,7 @@
>
</div>
</div>
<div class="operations">
<div v-button-per="permissions" class="operations">
<div
class="operation"
style="cursor: pointer"
@@ -672,7 +673,7 @@
</router-link>
<!-- 无数据创建任务 -->
</div>
<div v-else>
<div v-button-per="permissions" v-else>
<div
class="taskbox"
@click="
@@ -710,6 +711,7 @@
<a-tabs v-model:activeKey="activeKey1">
<a-tab-pane key="8" tab="学员管理">
<TableStudent
:permissions="permissions"
:type="1"
:id="projectId"
:columns="stuColumns"
@@ -750,7 +752,7 @@
</div>
</div>
</div>
<div class="second2">
<div class="second2" v-button-per="permissions">
<div class="btn1" @click="showModal2(1, null)">
<img src="../../assets/images/courseManage/add0.png" />
<span class="btn1text">创建小组</span>
@@ -781,7 +783,7 @@
style="color: rgba(0, 0, 0, 0.45); cursor: pointer"
>. . .</span
>
<div class="moreItems">
<div class="moreItems" v-button-per="permissions">
<div class="sammo" @click="showModal2(2, item)">
编辑
</div>
@@ -838,7 +840,7 @@
<div class="split"></div>
<a-tabs v-model:activeKey="activeKeyNotice">
<a-tab-pane key="11" tab="公告">
<NoticePub v-model:projectId="projectId"></NoticePub>
<NoticePub :permissions="permissions" v-model:projectId="projectId"></NoticePub>
</a-tab-pane>
<a-tab-pane key="12" tab="历史公告" force-render>
<NoticeHis
@@ -849,7 +851,7 @@
</a-tabs>
</a-tab-pane>
<a-tab-pane key="5" tab="项目积分">
<ProjectScore :projectId="projectId"></ProjectScore>
<ProjectScore :permissions="permissions" :projectId="projectId"></ProjectScore>
</a-tab-pane>
<a-tab-pane key="6" tab="排行榜">
<div class="split"></div>
@@ -1096,7 +1098,7 @@
<div class="img"></div>
<div class="ed">编辑</div>
</div> -->
<div class="edit" v-if="status != 3" @click="toEdit">
<div v-button-per="permissions" class="edit" v-if="status != 3" @click="toEdit">
<div class="img"></div>
<div class="ed">编辑</div>
</div>
@@ -2143,6 +2145,7 @@ export default {
const store = useStore();
const route = useRoute();
const state = reactive({
permissions:'',
screenHeight: document.body.clientHeight,
screenWidth: document.body.clientWidth,
editRecord: {},
@@ -3853,6 +3856,7 @@ export default {
name: e.name,
}));
let info = res.data.data.projectInfo;
state.permissions = info.permissions;
// let start = toDate(info.beginTime / 1000, "Y-M-D h:m");
let start = info.beginTime;
// let end = toDate(info.endTime / 1000, "Y-M-D h:m");

View File

@@ -134,16 +134,16 @@
</div>
<div class="rightt">
<!-- 2022-11-30注释 后面放开 -->
<!-- <div class="select">
<div class="select" style="margin-right:90px;">
<span>学习模式</span>
<div class="inputbox">
<input type="text" placeholder="按学习时间解锁" />
<input type="text" placeholder="按学习时间解锁" style="padding-left:12px;"/>
<div class="bottonbox" @click="showModeVisible">
<div class="btnText">切换模式</div>
</div>
<unlock-mode v-model:unlockModeVisible="unlockModeVisible" />
</div>
</div> -->
</div>
<div class="line"></div>
<!-- <img class="img2" src="../../assets/images/projectadd/keep.png" />
<div class="pub">保存</div>
@@ -735,7 +735,7 @@
</div>
</div>
<!-- <div class="footbtn">
<div class="footbtn">
<div class="btnbox">
<div class="btn btn2" @click="temporaryStorage">
<div class="btnText">暂存</div>
@@ -747,7 +747,7 @@
<div class="btnText">取消</div>
</div>
</div>
</div> -->
</div>
<!-- 添加阶段弹窗 -->
<div>
@@ -1091,7 +1091,7 @@ import { message } from "ant-design-vue";
import * as api from "../../api/indexTemplate";
import draggable from "vuedraggable";
import { storage } from "../../api/storage";
// import UnlockMode from "../../components/drawers/UnlockMode.vue";
import UnlockMode from "../../components/drawers/UnlockMode.vue";
// import * as api1 from "../../api/index1";
import { useRouter, useRoute } from "vue-router";
const drawercolumns = [
@@ -1149,7 +1149,7 @@ export default {
AddEval,
AddInvist,
AddVote,
// UnlockMode,
UnlockMode,
},
setup() {
const route = useRoute();