feat:增肌学习路径的增删改查

This commit is contained in:
李晓鸽
2022-10-28 18:23:26 +08:00
41 changed files with 2509 additions and 1300 deletions

View File

@@ -1,5 +1,5 @@
import http from "./config";
import qs from 'qs';
// import qs from 'qs';
/**
@@ -37,39 +37,27 @@ import qs from 'qs';
// 接口-请求
// 根据投票ID获取题干信息
export const getStemInfo = (stemId) => http.post('/vote/queryStemByStemId', qs.stringify({ stemId: stemId }));
// 测试方法
// import * as api from '../../api/index'
// api.getStemInfo(4).then(res => {
// console.log(res)
// }).catch(err => {
// console.log(err)
// })
// 获取字典列表
export const getList = (pageno, pagesize) => http.post('/dict/getList', {
"dictCode": "",
"pageNo": pageno,
"pageSize": pagesize
// 创建编辑单层项目
export const createProject = (obj) => http.post('/admin/project/edit', {
"attach": obj.attach,
"beginTime": obj.beginTime,
"boeFlag": obj.boeFlag,
"category": obj.category,
"courseSyncFlag": obj.courseSyncFlag,
"endTime": obj.endTime,
"level": obj.level,
"manager": obj.manager,
"managerId": obj.managerId,
"name": obj.name,
"notice": obj.notice,
"noticeFlag": obj.noticeFlag,
"parentId": obj.parentId,
"picUrl": obj.picUrl,
"projectId": obj.projectId,
"remark": obj.remark,
"sourceBelongId": obj.sourceBelongId,
"status": obj.status,
"systemId": obj.systemId,
"templateId": obj.templateId,
"type": obj.type
})
// 测试方法
// import * as api from '../../api/index'
// api.getList(0,0).then(res => {
// console.log(res)
// }).catch(err => {
// console.log(err)
// })
// 根据活动ID获取活动信息接口
export const getActivityList = (activityId) => http.get('/activity', { params: { "activityId": activityId } })
// 测试方法
// import * as api from '../../api/index'
// api.getActivityList(4).then(res => {
// console.log(res)
// }).catch(err => {
// console.log(err)
// })

View File

@@ -45,6 +45,12 @@ export const createLearnPath = (obj) => http.post('/admin/router/edit', obj, {
});
// 获取学习路径图列表
export const getLearnPath = (obj) => http.post('/admin/router/list', obj);
//删除学习路径图
export const deleteLearnPath = (obj) => http.post('/admin/router/handle', obj, {
headers: {
'token': '123'
}
});
//获取关卡
export const getChapter = (obj) => http.post('/admin/router/detail', { params: obj });

168
src/api/method.js Normal file
View File

@@ -0,0 +1,168 @@
function formatNumber(n) {
n = n.toString();
return n[1] ? n : "0" + n;
}
function toDate(number, format) {
var formateArr = ["Y", "M", "D", "h", "m", "s"];
var returnArr = [];
if (number === 0) {
return 0;
} else {
var date = new Date(number * 1000);
}
returnArr.push(date.getFullYear());
returnArr.push(formatNumber(date.getMonth() + 1));
returnArr.push(formatNumber(date.getDate()));
returnArr.push(formatNumber(date.getHours()));
returnArr.push(formatNumber(date.getMinutes()));
returnArr.push(formatNumber(date.getSeconds()));
for (var i in returnArr) {
format = format.replace(formateArr[i], returnArr[i]);
}
return format;
}
function getWeek(date) {
//date:'Y-M-D'
let time = new Date(date).getDay()
let week;
if (time == 0) week = "星期日"
if (time == 1) week = "星期一"
if (time == 2) week = "星期二"
if (time == 3) week = "星期三"
if (time == 4) week = "星期四"
if (time == 5) week = "星期五"
if (time == 6) week = "星期六"
return week;
}
/************************************将数字搞成带逗号的那种*********************************************/
function autoComma(number) {
// let number = parseInt(numb)
if (number) {
let newNum = ""; //中间变量
let arr = [];
let arr1 = [];
let num = ""; //最终结果
let isDecimal = false; //是不是小数
let decimal = 0; //小数点所在位置
let decimalNum = ""; //小数点和以后的数据
let negative = false; //是不是负数
// 判断百万级别或者上亿级别
let thousand = false;
let Billion = false;
if (
(number >= 10000 || number <= -10000) &&
number < 100000000 &&
number > -100000000
) {
thousand = true;
number = number / 10000;
}
if (number >= 100000000 || number <= -100000000) {
thousand = false;
Billion = true;
number = number / 100000000;
}
if (number < 0) {
number = Math.abs(number);
negative = true;
}
let numStr = JSON.stringify(number);
// 如果传入的是小数,逗号的添加位置和整数是有区别滴
for (let i = 0; i < numStr.length; i++) {
if (numStr[i] === ".") {
isDecimal = true;
decimal = i;
decimalNum = numStr.slice(decimal, numStr.length);
// 保留两位小数
if (decimalNum.length > 2) {
decimalNum = decimalNum.slice(0, 3);
}
numStr = numStr.slice(0, decimal);
}
}
for (let i = 0; i < numStr.length; i++) {
arr.push(numStr[numStr.length - i - 1]);
}
for (let i = 0; i < arr.length; i++) {
if ((i + 1) % 3 === 0 && i + 1 !== 0 && i + 1 < arr.length) {
newNum += arr[i];
newNum = newNum + ",";
} else {
newNum += arr[i];
}
}
for (let i = 0; i < newNum.length; i++) {
arr1.push(newNum[newNum.length - i - 1]);
}
for (let i = 0; i < arr1.length; i++) {
num += arr1[i];
}
if (isDecimal) {
if (negative) {
// num = '-' + num + decimalNum
// return num
if (thousand) {
num = "-" + num + decimalNum + "万";
return num;
} else if (Billion) {
num = "-" + num + decimalNum + "亿";
return num;
} else {
num = "-" + num + decimalNum;
return num;
}
} else {
// num = num + decimalNum
// return num
if (thousand) {
num = num + decimalNum + "万";
return num;
} else if (Billion) {
num = num + decimalNum + "亿";
return num;
} else {
num = num + decimalNum;
return num;
}
}
} else {
if (negative) {
// num = '-' + num
// return num
if (thousand) {
num = "-" + num + "万";
return num;
} else if (Billion) {
num = "-" + num + "亿";
return num;
} else {
num = "-" + num;
return num;
}
} else {
if (thousand) {
num = num + "万";
return num;
} else if (Billion) {
num = num + "亿";
return num;
} else {
return num;
}
}
}
} else {
return 0;
}
}
export {
toDate,
getWeek,
autoComma,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -8,7 +8,7 @@
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">活动考勤</div>
<div class="headerTitle">{{ title }}</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@@ -76,13 +76,13 @@
</div>
</div>
<div class="btnss" style="margin-top: 20px">
<div class="btn btn1" @click="showqdModal">
<div class="btn btn2" @click="showqdModal">
<div class="wz">批量签到</div>
</div>
<div class="btn btn2" @click="showqtModal">
<div class="wz">批量签退</div>
</div>
<div class="btn btn2">
<div class="btn btn1">
<div class="img2"></div>
<div class="wz">导出数据</div>
</div>
@@ -203,6 +203,96 @@
</div>
</div>
</a-modal>
<!-- 单独签到弹窗 -->
<a-modal
v-model:visible="singleqdModal"
:footer="null"
:closable="closeCopy"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closesingleqdModal"></div>
</div>
<div class="body">
<span>您确定要签到吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="delete_exit">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="delete_exit">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 单独签退弹窗 -->
<a-modal
v-model:visible="singleqtModal"
:footer="null"
:closable="closeCopy"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closesingleqtModal"></div>
</div>
<div class="body">
<span>您确定要签退吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="delete_exit">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="delete_exit">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 单独请假弹窗 -->
<a-modal
v-model:visible="singleqjModal"
:footer="null"
:closable="closeCopy"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closesingleqjModal"></div>
</div>
<div class="body">
<span>您确定要请假吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="delete_exit">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="delete_exit">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</template>
<script>
@@ -214,6 +304,10 @@ export default {
type: Boolean,
default: false,
},
title: {
type: String,
default: "",
},
},
setup(props, ctx) {
@@ -228,6 +322,9 @@ export default {
selectedRowKeys: [],
qtModal: false, //批量签退
qdModal: false, //批量签到
singleqjModal: false, //单独请假
singleqdModal: false, //单独签到
singleqtModal: false, //单独签退
closeCopy: false,
projectNameList: [
{
@@ -422,6 +519,7 @@ export default {
checked={value.signIn}
onChange={(e) => {
console.log("点击签到", e);
showsingleqdModal();
}}
>
签到
@@ -430,6 +528,7 @@ export default {
checked={value.signOut}
onChange={(e) => {
console.log("点击签退", e);
showsingleqtModal();
}}
>
签退
@@ -438,6 +537,7 @@ export default {
checked={value.leave}
onChange={(e) => {
console.log("点击请假", e);
showsingleqjModal();
}}
>
请假
@@ -549,6 +649,24 @@ export default {
const closeqtModal = () => {
state.qtModal = false;
};
const showsingleqdModal = () => {
state.singleqdModal = true;
};
const showsingleqtModal = () => {
state.singleqtModal = true;
};
const showsingleqjModal = () => {
state.singleqjModal = true;
};
const closesingleqdModal = () => {
state.singleqdModal = false;
};
const closesingleqtModal = () => {
state.singleqtModal = false;
};
const closesingleqjModal = () => {
state.singleqjModal = false;
};
return {
...toRefs(state),
selectProjectName,
@@ -561,6 +679,12 @@ export default {
showqtModal,
closeqtModal,
closeqdModal,
showsingleqdModal,
showsingleqtModal,
showsingleqjModal,
closesingleqdModal,
closesingleqtModal,
closesingleqjModal,
};
},
};
@@ -713,7 +837,7 @@ export default {
.img2 {
width: 17px;
height: 16px;
background-image: url(../../assets/images/coursewareManage/export.png);
background-image: url(../../assets/images/coursewareManage/export1.png);
background-size: 100% 100%;
margin-right: 7px;
}
@@ -814,12 +938,9 @@ export default {
> td {
background: #f6f9fd;
}
.opa {
// .opa {
// background-color: #bfa;
.ant-checkbox + span {
margin-top: 5px;
}
}
// }
}
// .tab {
// .ant-table-thead > tr > th {

View File

@@ -129,7 +129,7 @@
tableData1: [
{
key: "1",
title: "基于BOE显示PNL工厂的工序平1111111111111111111122222333335555",
title: "基于BOE显示PNL工厂的工序平1111112222222221111111111111122222333335555",
name: "李玉冰",
time: "2022-10-31 23:12:00",
},
@@ -216,6 +216,7 @@
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
@@ -322,7 +323,7 @@
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 60px !important;
padding-left:15px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);

View File

@@ -26,7 +26,7 @@
<div class="inname">小组名称:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="valuen"
placeholder="请输入小组名称"
style="border-radius: 8px; height: 40px"
/>
@@ -42,7 +42,7 @@
<div class="inname">小组长:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="valueg"
placeholder="请输入小组长"
style="border-radius: 8px; height: 40px"
/>
@@ -68,7 +68,10 @@ export default {
},
},
setup(props, ctx) {
const state = reactive({});
const state = reactive({
valuen: "",
valueg: "",
});
const closeDrawer = () => {
ctx.emit("update:Avisible", false);
};

View File

@@ -72,7 +72,7 @@
:data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
:scroll="{ x: 500, y: 560 }"
:scroll="{ x: 500 }"
@expand="expandTable"
:pagination="false"
:row-selection="{
@@ -156,7 +156,7 @@
:data-source="tabledata1"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
:scroll="{ x: 500, y: 560 }"
:scroll="{ x: 500 }"
@expand="expandTable"
:pagination="false"
:row-selection="{
@@ -246,7 +246,7 @@
:data-source="tabledata2"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
:scroll="{ x: 500, y: 560 }"
:scroll="{ x: 500 }"
@expand="expandTable"
:pagination="false"
:row-selection="{
@@ -1014,11 +1014,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
const getMousePosition = () => {

View File

@@ -3,7 +3,7 @@
:visible="Changevisible"
class="drawerStyle changegroup"
placement="right"
width="50%"
width="70%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
@@ -23,6 +23,8 @@
style="width: 264px; border-radius: 8px"
placeholder="好好学习"
:options="stugroupList"
allowClear
showSearch
/>
</div>
</div>
@@ -59,8 +61,8 @@ export default {
},
{
id: "3",
value: "好好学习",
label: "好好学习",
value: "最强小组",
label: "最强小组",
},
],
});
@@ -118,7 +120,8 @@ export default {
height: 40px;
}
.ant-select-selector {
height: 100%;
height: 40px;
padding: 4px 11px;
border-radius: 8px;
}
.ant-select-selection-search-input {

View File

@@ -15,7 +15,120 @@
@click="closeDrawer"
/>
</div>
<div class="main"></div>
<div class="main">
<div class="tab1">
<div class="nameinp">
<div class="namee">作业名称</div>
<a-input
v-model:value="name"
style="width: 408px; height: 40px; border-radius: 8px"
placeholder="请输入作业名称"
/>
</div>
<div class="btns">
<div class="btn1">
<div class="img1">
<img src="../../assets/images/courseManage/search0.png" />
</div>
<div class="wz">搜索</div>
</div>
<div class="btn2">
<div class="img2">
<img src="../../assets/images/courseManage/reset1.png" />
</div>
<div class="wz">重置</div>
</div>
</div>
</div>
<!-- 文件容器 -->
<div class="zipcontainer">
<!-- 单个文件 -->
<div class="item">
<div class="itemup">
<div class="lefttop"></div>
<div class="cent">
<div class="zip"></div>
<div class="ziprit">
<div class="textop">作业名称</div>
<div class="texdown">
<div class="timemanag" style="margin-top: 12px">
2022-08-08 10:30:30 管理员
</div>
<div class="timemanag">来源管理者进阶-腾飞班Z1</div>
</div>
</div>
</div>
</div>
<div class="itemdown">
<div class="download">下载</div>
<div class="outime">(5天后失效)</div>
</div>
</div>
<div class="item">
<div class="itemup">
<div class="lefttop"></div>
<div class="cent">
<div class="zip"></div>
<div class="ziprit">
<div class="textop">作业名称</div>
<div class="texdown">
<div class="timemanag" style="margin-top: 12px">
2022-08-08 10:30:30 管理员
</div>
<div class="timemanag">来源管理者进阶-腾飞班Z1</div>
</div>
</div>
</div>
</div>
<div class="itemdown">
<div class="download">下载</div>
<div class="outime">(5天后失效)</div>
</div>
</div>
<div class="item">
<div class="itemup">
<div class="lefttop"></div>
<div class="cent">
<div class="zip"></div>
<div class="ziprit">
<div class="textop">作业名称</div>
<div class="texdown">
<div class="timemanag" style="margin-top: 12px">
2022-08-08 10:30:30 管理员
</div>
<div class="timemanag">来源管理者进阶-腾飞班Z1</div>
</div>
</div>
</div>
</div>
<div class="itemdown">
<div class="download">下载</div>
<div class="outime">(5天后失效)</div>
</div>
</div>
<div class="item">
<div class="itemup">
<div class="lefttop"></div>
<div class="cent">
<div class="zip"></div>
<div class="ziprit">
<div class="textop">作业名称</div>
<div class="texdown">
<div class="timemanag" style="margin-top: 12px">
2022-08-08 10:30:30 管理员
</div>
<div class="timemanag">来源管理者进阶-腾飞班Z1</div>
</div>
</div>
</div>
</div>
<div class="itemdown">
<div class="download">下载</div>
<div class="outime">(5天后失效)</div>
</div>
</div>
</div>
</div>
</div>
</a-drawer>
</template>
@@ -33,7 +146,9 @@ export default {
setup(props, ctx) {
console.log("props", props.downloadVisible);
const state = reactive({});
const state = reactive({
name: "",
});
const closeDrawer = () => {
ctx.emit("update:downloadVisible", false);
@@ -56,15 +171,153 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
// margin-left: 24px;
}
}
.main {
overflow-y: auto;
padding-right: 10px;
.tab1 {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
margin-top: 10px;
.t1 {
display: flex;
align-items: center;
margin-bottom: 5px;
}
.nameinp {
display: flex;
align-items: center;
margin-top: 10px;
margin-right: 10px;
.namee {
color: rgba(0, 0, 0, 0.85);
font-size: 14px;
}
}
.btns {
display: flex;
margin-top: 10px;
.btn1 {
width: 100px;
height: 40px;
margin-right: 16px;
display: flex;
align-items: center;
justify-content: center;
color: #ffffff;
font-size: 14px;
background: #409eff;
border-radius: 8px;
border: 1px solid #409eff;
cursor: pointer;
.wz {
margin-left: 10px;
}
}
.btn2 {
width: 100px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
color: #409eff;
font-size: 14px;
background: #ffffff;
border-radius: 8px;
cursor: pointer;
border: 1px solid #409eff;
.wz {
margin-left: 10px;
}
}
}
}
.zipcontainer {
display: flex;
flex-wrap: wrap;
margin-top: 30px;
.item {
margin-right: 50px;
margin-bottom: 50px;
.itemup {
width: 412px;
height: 160px;
background: #ffffff;
border-radius: 2px 2px 0px 0px;
border: 1px solid #409eff;
position: relative;
.lefttop {
width: 8px;
height: 21px;
background: #4ea6ff;
border-radius: 0px 4px 4px 0px;
top: 18px;
position: absolute;
}
.cent {
display: flex;
margin-top: 40px;
margin-left: 40px;
.zip {
width: 62px;
height: 72px;
background-image: url(../../assets/images/leveladd/zip.png);
background-size: 100%;
}
.ziprit {
margin-left: 20px;
margin-top: -5px;
.textop {
font-size: 18px;
font-weight: 600;
color: #409eff;
}
.texdown {
.timemanag {
font-size: 14px;
font-weight: 400;
color: #878b92;
}
}
}
}
}
.itemdown {
width: 412px;
height: 48px;
background: linear-gradient(180deg, #ddeaff 0%, #f0f8fe 100%);
border-radius: 0px 0px 2px 2px;
border: 1px solid #409eff;
border-top: 0;
display: flex;
justify-content: center;
align-items: center;
.download {
font-size: 18px;
font-weight: 600;
color: #409eff;
cursor: pointer;
}
.outime {
font-size: 16px;
font-weight: 400;
color: #878b92;
margin-left: 10px;
}
}
}
}
.contentMain {
}
}
}

View File

@@ -52,7 +52,7 @@
</div>
</div>
<div class="btnss" style="margin-top: 20px">
<div class="btn btn1" style="margin-right: 20px">
<div class="btn btn1" style="margin-right: 20px" @click="showopen">
<div class="img1"></div>
<div class="wz">催促学习</div>
</div>
@@ -136,6 +136,10 @@
<button class="btn btn2" @click="check">确定</button>
</div>
</a-modal>
<div class="noticebox" v-show="open">
<div><img src="../../assets/images/taskpage/check.png" /></div>
<div class="notext">催促学员成功</div>
</div>
</div>
</a-drawer>
<!-- 录入成绩抽屉 -->
@@ -143,7 +147,7 @@
</template>
<script>
import { toRefs, reactive } from "vue";
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
import EntryScores from "./EntryScores.vue";
export default {
name: "FaceManage",
@@ -165,6 +169,7 @@ export default {
currentPage: 1,
tableDataTotal: 100,
showdonemodal: false,
open: false,
selectedRowKeys: [],
projectNameList: [
{
@@ -351,7 +356,18 @@ export default {
// }
// state.selectedRowKeys = selectedRowKeys;
};
const showopen = () => {
state.open = true;
};
let timer;
onMounted(() => {
timer = setInterval(() => {
state.open = false;
}, 3000);
});
onUnmounted(() => {
clearInterval(timer);
});
return {
...toRefs(state),
selectProjectName,
@@ -363,6 +379,7 @@ export default {
showEntryScore,
showdoneModal,
closedoneModal,
showopen,
};
},
};
@@ -381,6 +398,7 @@ export default {
// }
// }
//面授管理弹窗
.FacMa {
.ant-modal {
@@ -498,6 +516,23 @@ export default {
overflow-x: scroll;
display: flex;
flex-direction: column;
.noticebox {
width: 240px;
height: 64px;
background: rgba(255, 255, 255, 1);
border-radius: 4px;
position: absolute;
top: 161px;
display: flex;
align-items: center;
justify-content: center;
.notext {
color: rgba(51, 51, 51, 1);
font-size: 14px;
font-weight: 500;
margin-left: 20px;
}
}
.header {
height: 73px;
@@ -615,7 +650,7 @@ export default {
.img1 {
width: 15px;
height: 17px;
background-image: url(../../assets/images/courseManage/search0.png);
background-image: url(../../assets/images/basicinfo/call.png);
background-size: 100% 100%;
margin-right: 7px;
}

View File

@@ -3,7 +3,7 @@
:visible="Importvisible"
class="drawerStyle importstu"
placement="right"
width="50%"
width="800px"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
@@ -16,69 +16,89 @@
/>
</div>
<div class="main">
<div class="download">
<span class="placedown">请下载</span>
<span class="template">模板</span>
<span class="placedown">按要求填写数据并导入</span>
<div class="minatitl">
<div class="up1">请下载</div>
<div class="up2">模板</div>
<div class="up1">按要求填写数据并导入</div>
</div>
<div class="upload">
<span class="uptext">上传:</span>
<div>
<!-- 导入学员上传 -->
<div class="upbox" style="display: none">
<div class="uploadimg"><img src="../../assets/images/taskpage/upload.png"/></div>
<div class="draghere">点击或将文件拖拽到此处上传</div>
<div class="support">支持扩展名.xls/.xlsx</div>
<div class="text">上传</div>
<div class="right">
<div class="load">
<div class="cloud"></div>
<div class="tip">点击或将文件拖拽到此处上传</div>
<div class="tipz">支持扩展名.xls/.xlsx</div>
</div>
<!-- 导入学员上传 -->
<!-- 导入学员上传有状态-正在上传 -->
<div class="alreadybox">
<div class="alimg"><img src="../../assets/images/studentimg/xls.png"/></div>
<div class="upproject">京东方商业模型.xls</div>
<div class="uping">正在上传</div>
<div class="progress">
<a-progress :percent="55" strokeColor="rgba(56, 139, 225, 1)"/>
<div class="loadstate">
<div class="loadborder">
<div class="content">
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div class="stateloading">正在上传</div>
</div>
<div class="state">
<span class="stop">暂停</span>
<span class="stop">取消</span>
<div class="prog">
<div class="inprogloading"></div>
</div>
</div>
<!-- 导入学员上传有状态-正在上传 -->
<div class="uploadstate">上传失败</div>
<!-- 导入学员上传有状态-上传失败 -->
<div class="alreadybox">
<div class="alimg"><img src="../../assets/images/studentimg/xls.png"/></div>
<div class="upproject">京东方商业模型.xls</div>
<div class="uping" style="color: #FF7474">上传失败</div>
<div class="progress">
<a-progress :percent="55" strokeColor="rgba(255, 116, 116, 1)" />
</div>
<div class="fail">下载失败数据</div>
<div class="state">
<span class="stop">重传</span>
<span class="stop">取消</span>
<div class="curloading">
<div class="cur">55%</div>
<div class="cancel" style="margin-left: 20px">暂停</div>
<div class="cancel" style="margin-left: 15px">取消</div>
</div>
</div>
<!-- 导入学员上传有状态-上传失败 -->
<div class="uploadstate" style="margin-top: 74px">上传成功</div>
<!-- 导入学员上传有状态-上传成功 -->
<div class="alreadybox">
<div class="alimg"><img src="../../assets/images/studentimg/xls.png"/></div>
<div class="upproject">京东方商业模型.xls</div>
<div class="uping" style="color: #35AE69">上传成功</div>
<div class="progress">
<a-progress :percent="100" :show-info="false" strokeColor="rgba(87, 200, 135, 1)"/>
<span style="margin-left: 2px">100%</span>
</div>
<div class="state">
<span class="stop">删除</span>
<div class="loadborder">
<div class="content">
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div class="statedefeat">上传失败</div>
</div>
<div class="prog">
<div class="inprogdefeat"></div>
</div>
</div>
<div class="curloading">
<div class="cur">55%</div>
<div class="cancel" style="margin-left: 20px">重传</div>
<div class="cancel" style="margin-left: 15px">取消</div>
</div>
<div class="defeat">
<div class="detext">下载失败数据</div>
</div>
</div>
</div>
<div class="defeatbox">
<div class="lefimg"></div>
<div class="tacl">20条数据导入成功5条数据导入失败</div>
</div>
<div class="loadborder">
<div class="content">
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div class="statesucce">上传成功</div>
</div>
<div class="prog">
<div class="inprogsucce"></div>
</div>
</div>
<div class="curloading">
<div class="cur">100%</div>
<div class="cancel" style="margin-left: 20px">删除</div>
</div>
</div>
</div>
<div class="succebox">
<div class="lefimg"></div>
<div class="tacl">20条数据导入成功5条数据导入失败</div>
</div>
</div>
<!-- 导入学员上传有状态-上传成功 -->
</div>
</div>
</div>
<div class="btnn">
@@ -122,19 +142,9 @@ export default {
<style scoped lang="scss" >
.importstu {
.ant-drawer-content-wrapper {
// max-width: 1000px;
.ant-drawer-header {
display: none !important;
}
.ant-drawer-body {
padding: 0;
}
}
.drawerMain {
min-width: 600px;
min-width: 450px;
margin: 0px 32px 0px 32px;
overflow-x: scroll;
display: flex;
flex-direction: column;
.header {
@@ -143,9 +153,9 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
// background-color: red;
margin-bottom: 20px;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
@@ -155,119 +165,227 @@ export default {
}
}
.main {
.download {
overflow: scroll;
.minatitl {
display: flex;
.placedown {
color: rgba(51, 51, 51, 1);
.up1 {
font-size: 16px;
font-weight: 400;
color: #333333;
}
.template {
color: rgba(56, 139, 225, 1);
.up2 {
font-size: 16px;
cursor: pointer;
padding: 0 5px;
font-weight: 400;
color: #388be1;
margin-left: 4px;
}
}
.upload {
margin-top: 32px;
display: flex;
margin-top: 27px;
.uptext {
color: rgba(51, 51, 51, 1);
.text {
font-size: 14px;
font-weight: 400;
color: #333333;
white-space: nowrap;
}
.upbox {
position: relative;
.right {
margin-left: 6px;
.load {
cursor: pointer;
width: 500px;
height: 176px;
margin-left: 10px;
background: rgba(56, 139, 225, 0.1);
border: 1px dotted rgba(56, 139, 225, 0.2) ;
background: #f5f9fd;
border-radius: 4px;
cursor: pointer;
.uploadimg {
position: absolute;
// opacity: 0.3;
border: 1px dashed #caddfd;
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 20px;
.cloud {
margin-top: 52px;
width: 28px;
height: 28px;
top: 52px;
left: 236px;
background-image: url(../../assets/images/basicinfo/cloud.png);
}
.draghere {
position: absolute;
top: 100px;
left: 159px;
color: rgba(56, 139, 225, 1);
.tip {
font-size: 14px;
font-weight: 400;
color: #388be1;
margin-top: 15px;
cursor: pointer;
}
.support {
position: absolute;
left: 180px;
bottom: 24px;
color: rgba(153, 153, 153, 1);
.tipz {
font-size: 14px;
font-weight: 400;
color: #999999;
margin-top: 10px;
}
}
.alreadybox {
.loadstate {
width: 500px;
margin-bottom: 100px;
.loadborder {
width: 500px;
height: 173px;
position: relative;
margin-left: 10px;
border: 1px dotted rgba(153, 153, 153, 1);
border-radius: 4px;
.fail {
position: absolute;
top: 113px;
left: 68px;
color: #FF7474;
font-size: 14px;
cursor: pointer;
}
.alimg {
width: 32px;
height: 34px;
position: absolute;
top: 66px;
left: 24px;
//background: green;
}
.upproject {
position: absolute;
top: 60px;
left: 68px;
color: rgba(51, 51, 51, 1);
font-size: 14px;
}
.uping {
position: absolute;
top: 60px;
left: 274px;
color: rgba(56, 139, 225, 1);
font-size: 14px;
}
.progress {
position: absolute;
border: 1px dashed #eaeaea;
margin-bottom: 10px;
margin-top: 10px;
display: flex;
width: 293px;
top: 82px;
left: 68px;
}
.state {
align-items: center;
.content {
display: flex;
margin-left: 20px;
position: relative;
.defeat {
position: absolute;
top: 83px;
left: 399px;
.stop {
color: rgba(56, 125, 247, 1);
left: 46px;
top: 42px;
font-size: 14px;
margin-right: 8px;
font-weight: 500;
width: 120px;
height: 32px;
border-radius: 2px;
border: 1px solid #387df7;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
}
}
.uploadstate {
margin-top: 28px;
margin-left: 75px;
color: rgba(51, 51, 51, 1);
.detext {
font-size: 14px;
font-weight: 400;
color: #387df7;
}
}
.img {
width: 30px;
height: 34px;
background-image: url(../../assets/images/basicinfo/exl.png);
}
.timebox {
margin-left: 15px;
margin-top: -5px;
.timetop {
display: flex;
width: 262px;
justify-content: space-between;
margin-bottom: 8px;
.tit {
font-size: 14px;
font-weight: 400;
color: #333333;
}
.stateloading {
font-size: 14px;
font-weight: 400;
color: #388be1;
}
.statedefeat {
font-size: 14px;
font-weight: 400;
color: #ff7474;
}
.statesucce {
font-size: 14px;
font-weight: 400;
color: #35ae69;
}
}
.prog {
width: 262px;
height: 5px;
background: #eaf1fe;
border-radius: 4px;
.inprogloading {
width: 55%;
height: 5px;
border-radius: 4px;
background: #388be1;
}
//下载失败条
.inprogdefeat {
width: 55%;
height: 5px;
border-radius: 4px;
background: #ff7474;
}
//下载成功条
.inprogsucce {
width: 100%;
height: 5px;
border-radius: 4px;
background: #57c887;
}
}
}
.curloading {
margin-left: 15px;
margin-top: 15px;
display: flex;
.cur {
font-size: 14px;
font-weight: 400;
color: #333333;
}
.cancel {
cursor: pointer;
font-size: 14px;
font-weight: 400;
color: #387df7;
}
}
}
}
.defeatbox {
width: 500px;
height: 40px;
background: rgba(255, 116, 116, 0.1);
border: 1px solid #ff7474;
display: flex;
align-items: center;
.lefimg {
width: 14px;
height: 14px;
margin-left: 17px;
margin-right: 8px;
background-image: url(../../assets/images/leveladd/nodone.png);
background-size: 100%;
}
.tacl {
font-size: 14px;
font-weight: 400;
color: #ff7474;
}
}
.succebox {
width: 500px;
height: 40px;
background: rgba(53, 174, 105, 0.1);
border: 1px solid #35ae69;
display: flex;
align-items: center;
.lefimg {
width: 14px;
height: 14px;
margin-left: 17px;
margin-right: 8px;
background-image: url(../../assets/images/leveladd/done.png);
background-size: 100%;
}
.tacl {
font-size: 14px;
font-weight: 400;
color: rgba(0, 0, 0, 0.65);
}
}
}
}
}
}
@@ -275,6 +393,7 @@ export default {
height: 72px;
width: 100%;
position: absolute;
background-color: #fff;
bottom: 0;
left: 0;
display: flex;

View File

@@ -800,11 +800,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
return {

View File

@@ -120,9 +120,10 @@
<button class="btn btn2" @click="closeModal">确定</button>
</div>
</a-modal>
<stu-add v-model:Stuvisible="Stuvisible" />
</div>
</a-drawer>
<stu-add v-model:Stuvisible="Stuvisible" />
</template>
<script>
@@ -297,7 +298,7 @@ export default {
.drawerMain {
min-width: 600px;
margin: 0px 32px 0px 32px;
overflow-x: scroll;
//overflow-x: scroll;
display: flex;
flex-direction: column;

View File

@@ -754,11 +754,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
return {

View File

@@ -755,11 +755,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
return {

View File

@@ -8,7 +8,7 @@
>
<div class="drawerMain">
<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"
@@ -26,7 +26,7 @@
</div>
</div>
<div class="btnn">
<button class="btn2">关闭</button>
<button class="btn2" @click="closeDrawer">关闭</button>
</div>
</div>
</a-drawer>
@@ -75,7 +75,7 @@ export default {
}
}
.drawerMain {
min-width: 600px;
min-width: 434px;
margin: 0px 32px 0px 32px;
overflow-x: scroll;
display: flex;

View File

@@ -755,11 +755,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
return {

View File

@@ -755,11 +755,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
return {

View File

@@ -755,11 +755,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
return {

View File

@@ -140,7 +140,6 @@
</div>
<div v-else class="btns">
<div class="btn1" @click="edit=!edit">
<span class="btn1text">保存</span>
</div>
</div>
@@ -153,7 +152,7 @@
<div class="content content2">
<span>完成必修/选修获得 </span><span class="scoretext">{{score1}} </span><span>积分</span>
</div>
<div class="content content3">
<div class="content">
<span>优秀学员可获得 </span><span class="scoretext">{{score2}}</span><span>积分</span>
</div>
</div>
@@ -164,7 +163,7 @@
<div class="content content2">
<span>完成必修/选修获得 </span><span ><a-input v-model:value="score1" :bordered="false" @change="getScore"/> </span><span>积分</span>
</div>
<div class="content content3">
<div class="content ">
<span>优秀学员可获得 </span><span ><a-input v-model:value="score2" :bordered="false" /></span><span>积分</span>
</div>
</div>
@@ -346,9 +345,6 @@ export default {
score1:5,
score2:5,
edit:true,
});
const getTableData = () => {
let datas = state.tabledataStu;
@@ -390,6 +386,9 @@ export default {
.contentscore {
margin-top: 20px;
margin-bottom: 100px;
.ant-tabs-nav-wrap{
border-bottom:1px solid #ededed;
}
.ant-tabs-tab-btn {
font-size: 18px;
font-weight: 700;
@@ -491,8 +490,6 @@ export default {
cursor: pointer;
}
}
.ant-table-tbody{
.pa {
margin-top: 15px;
// height: 20px;
@@ -502,9 +499,6 @@ export default {
// bottom: 20px;
}
}
}
.scorelist {
padding-bottom: 100px;

View File

@@ -755,11 +755,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
return {

View File

@@ -8,7 +8,7 @@
>
<div class="drawerMain">
<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"
@@ -232,7 +232,7 @@
</div>
</div>
<div class="btnn">
<button class="btn2">关闭</button>
<button class="btn2" @click="closeDrawer">关闭</button>
</div>
</div>
</a-drawer>

View File

@@ -3,7 +3,7 @@
:visible="Stuvisible"
class="drawerStyle stuadd"
placement="right"
width="50%"
width="70%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
@@ -1013,11 +1013,11 @@ export default {
};
const onSelectChange1 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys1 = selectedRowKeys;
};
const onSelectChange2 = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRowKeys2 = selectedRowKeys;
};
const getMousePosition = () => {

View File

@@ -15,6 +15,7 @@
@click="closeDrawer"
/>
</div>
<div class="contentMain">
<div class="main">
<div class="tableBox" style="margin-top: 20px; margin-bottom: 100px">
@@ -40,11 +41,11 @@
</div>
</div>
</div>
</div>
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>
</a-drawer>
</template>
@@ -213,7 +214,6 @@
.drawerMain {
min-width: 600px;
margin: 0px 32px 0px 32px;
overflow-x: scroll;
display: flex;
flex-direction: column;
.header {
@@ -236,17 +236,11 @@
.main {
width: 100%;
height: 100%;
// background-color: #bfa;
// overflow-y: auto;
.endtime {
font-size: 16px;
font-weight: 500;
color: #333333;
}
.tableBox {
padding-bottom: 100px;
.ant-table-selection-column {

View File

@@ -3,7 +3,7 @@
:visible="Svisible"
class="drawerStyle subset"
placement="right"
width="70%"
width="50%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
@@ -20,7 +20,7 @@
<div>
<div class="groupin">
<a-input
v-model:value="value"
v-model:value="value1"
placeholder="好好学习小组"
style="border-radius: 8px; height: 40px"
/>
@@ -28,7 +28,7 @@
</div>
<div class="groupin">
<a-input
v-model:value="value"
v-model:value="value2"
placeholder="全能小组"
style="border-radius: 8px; height: 40px"
/>
@@ -36,7 +36,7 @@
</div>
<div class="groupin">
<a-input
v-model:value="value"
v-model:value="value3"
placeholder="宇宙第一最强小组"
style="border-radius: 8px; height: 40px"
/>
@@ -54,9 +54,10 @@
<button class="btn2">确定</button>
</div>
</div>
</a-drawer>
<!-- 创建小组抽屉 -->
<add-group v-model:Avisible="Avisible" />
</a-drawer>
</template>
<script>
@@ -74,6 +75,9 @@ export default {
setup(props, ctx) {
const state = reactive({
Avisible: false,
value1: "",
value2:"",
value3: "",
});
const closeDrawer = () => {
ctx.emit("update:Svisible", false);

View File

@@ -3,7 +3,7 @@
:visible="TaskFaceImpStuvisible"
class="drawerStyle TaskFaceImpStu"
placement="right"
width="40%"
width="700px"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
@@ -82,7 +82,7 @@
</div>
</div>
<div class="curloading">
<div class="cur">55%</div>
<div class="cur">100%</div>
<div class="cancel" style="margin-left: 20px">删除</div>
</div>
</div>
@@ -145,6 +145,7 @@ export default {
align-items: center;
// background-color: red;
margin-bottom: 20px;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
@@ -154,6 +155,7 @@ export default {
}
}
.main {
overflow-y: auto;
.minatitl {
display: flex;
.up1 {

View File

@@ -880,106 +880,6 @@
</div>
</a-modal>
<!-- 面授课程管理查看详情页面 -->
<!-- 操作授权页面 -->
<!-- <a-modal
v-model:visible="gpm_hs"
title="Title"
@ok="closeModal"
:footer="null"
:closable="false"
wrapClassName="modalStyle givpowerModal"
width="80%"
>
<div class="modalHeader">
<div class="headerLeft">
<img
style="width: 17px; height: 18px; margin-right: 8px"
src="@/assets/images/coursewareManage/givepower.png"
/>
<span class="headerLeftText">授权</span>
</div>
<div style="margin-right: 57px; cursor: pointer">
<img
@click="gpm_exit"
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="givepower" :style="{ display: gpm_hs ? 'block' : 'none' }">
<div class="gp_main">
<div class="gpm_inputbtn">
<a-input
v-model:value="value16"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
placeholder="请输入姓名"
/>
<div class="gpm_btn btn1">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="gpm_btn btn2">
<div class="reset"></div>
<div class="btnText">重置</div>
</div>
</div>
<div class="gpm_notice">
<div class="th_icon"></div>
<div class="textarea">
已选择 <span style="color: #4ea6ff">1</span>
</div>
<div class="textarea">
<span style="color: #999ba3">列表选项总计</span
><span>5</span>
</div>
</div>
<div class="gpm_table">
<a-table
:row-selection="{
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"
:columns="columns5"
:data-source="tableData5"
:loading="tableDataTotal === -1 ? true : false"
:pagination="{
showSizeChanger: true,
showQuickJumper: true,
hideOnSinglePage: true,
pageSizeOptions: [],
pageSize: pageSize,
current: currentPage,
total: tableDataTotal,
onChange: (page, pageSize) => {
currentPage = page;
// console.log('page', page)
// 加翻页查找代码
// this.setState({
// currentPage: page,
// }, () => {
// this.getMilitaryDeployment()
// })
},
}"
>
<template #bodyCell="{ column }">
<template v-if="column.key === 'opacation'">
<a>取消授权</a>
</template>
</template>
</a-table>
</div>
</div>
</div>
</div>
</a-modal> -->
<!--操作授权页面 -->
<!--开课页面 -->
<a-modal
v-model:visible="stm_hs"
@@ -1465,6 +1365,7 @@
:closable="closableQR"
wrapClassName="QRModal"
style="margin-top: 400px"
:zIndex="9999"
@cancel="qr_exit"
>
<div class="QR" :style="{ display: QR_hs ? 'block' : 'none' }">
@@ -1507,6 +1408,8 @@
:closable="closableQR"
wrapClassName="recgradeModal"
style="margin-top: 400px"
:zIndex="9999"
@cancel="rg_exit"
>
<div class="recordgrade" :style="{ display: rg_hs ? 'block' : 'none' }">
<div class="rg_header"></div>
@@ -1556,6 +1459,8 @@
:closable="closableQR"
wrapClassName="graModal"
style="margin-top: 400px"
:zIndex="9999"
@cancel="graduate_exit"
>
<div
class="graduate"
@@ -1615,78 +1520,46 @@
</div>
</a-modal>
<!--结业页面 -->
<!--请确定是否同意此学员学习此课程弹窗 -->
<!--请确定是否同意拒绝此学员学习此课程弹窗 -->
<a-modal
v-model:visible="agreestudy_hs"
v-model:visible="agreereject_hs"
:footer="null"
:closable="closableQR"
wrapClassName="agrstudyModal"
style="margin-top: 400px"
centered="true"
@cancel="agreereject_exit"
>
<div
class="agreestudy"
:style="{ display: agreestudy_hs ? 'block' : 'none' }"
:style="{ display: agreereject_hs ? 'block' : 'none' }"
>
<div class="agree_header"></div>
<div class="agree_main">
<div class="agreem_header">
<div class="agreem_icon"></div>
<span>提示</span>
<div class="close_exit" @click="agreestudy_exit"></div>
<div class="close_exit" @click="agreereject_exit"></div>
</div>
<div class="agreem_body">
<div class="body_box">
<div class="body_box" :style="{ display: agreestudy_hs ? 'block' : 'none' }">
<div>请确定是否同意此学员学习此课程</div>
</div>
</div>
<div class="qrm_btnbox">
<div class="qrm_btn btn1">
<div class="btnText" @click="agreestudy_exit">取消</div>
</div>
<div class="qrm_btn btn2">
<div class="btnText" @click="agreestudy_exit">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!--请确定是否同意此学员学习此课程弹窗 -->
<!--请确定是否拒绝此学员学习此课程弹窗 -->
<a-modal
v-model:visible="rejectstudy_hs"
:footer="null"
:closable="closableQR"
wrapClassName="agrstudyModal"
style="margin-top: 400px"
>
<div
class="agreestudy"
:style="{ display: rejectstudy_hs ? 'block' : 'none' }"
>
<div class="agree_header"></div>
<div class="agree_main">
<div class="agreem_header">
<div class="agreem_icon"></div>
<span>提示</span>
<div class="close_exit" @click="rejectstudy_exit"></div>
</div>
<div class="agreem_body">
<div class="body_box">
<div class="body_box" :style="{ display: rejectstudy_hs ? 'block' : 'none' }">
<div>请确定是否拒绝此学员学习此课程</div>
</div>
</div>
<div class="qrm_btnbox">
<div class="qrm_btn btn1">
<div class="btnText" @click="rejectstudy_exit">取消</div>
<div class="btnText" @click="agreereject_exit">取消</div>
</div>
<div class="qrm_btn btn2">
<div class="btnText" @click="rejectstudy_exit">确定</div>
<div class="btnText" @click="agreereject_exit">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!--请确定是否拒绝此学员学习此课程弹窗 -->
<!--请确定是否同意拒绝此学员学习此课程弹窗 -->
<!--删除 复制 停用弹窗 -->
<a-modal
v-model:visible="delete_hs"
@@ -1694,26 +1567,26 @@
:closable="closableQR"
wrapClassName="DelModal"
style="margin-top: 400px"
@cancel="delete_exit"
:zIndex="9999"
@cancel="delete_exit"
>
<div
class="delete"
:style="{
display: delete_hs || copy_hs || nouse_hs ? 'block' : 'none',
display: del_hs || copy_hs || nouse_hs ? 'block' : 'none',
}"
>
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div
class="del-icon"
class="del-icons"
:style="{ display: del_hs ? 'block' : 'none' }"
>
<img src="@/assets/images/coursewareManage/notice.png" alt="" />
</div>
<div
class="del-icon"
class="del-icons"
:style="{ display: copy_hs || nouse_hs ? 'block' : 'none' }"
>
<img src="@/assets/images/coursewareManage/QR.png" alt="" />
@@ -1743,7 +1616,7 @@
</div>
</div>
</a-modal>
<!--删除弹窗 -->
<!--删除 复制 停用弹窗 -->
<!-- 学员管理课程库-归属权抽屉 -->
<own-power v-model:ownpowervisible="ownpowervisible" />
<!-- 学员管理课程库-归属权抽屉 -->
@@ -1776,21 +1649,21 @@ const columns1 = [
},
{
title: "内容分类",
width: 100,
width: 130,
dataIndex: "content",
key: "1",
align: "center",
},
{
title: "课程形式",
width: 100,
width: 130,
dataIndex: "courseform",
key: "2",
align: "center",
},
{
title: " 所属项目",
width: 200,
width: 250,
dataIndex: "project",
key: "3",
align: "center",
@@ -1798,21 +1671,21 @@ const columns1 = [
},
{
title: "学习人数",
width: 110,
width: 130,
dataIndex: "stunum",
key: "4",
align: "center",
},
{
title: "评分",
width: 100,
width: 130,
dataIndex: "grade",
key: "5",
align: "center",
},
{
title: "状态",
width: 100,
width: 130,
dataIndex: "status",
key: "6",
align: "center",
@@ -1931,45 +1804,6 @@ const columns4 = [
align: "center",
},
];
//5授权弹窗 6是开课表格
// const columns5 = [
// {
// title: "姓名",
// dataIndex: "name",
// key: "name",
// width: "10%",
// align: "left",
// },
// {
// title: "归属组织",
// dataIndex: "organization",
// key: "organization",
// width: "19%",
// align: "center",
// },
// {
// title: "岗位",
// dataIndex: "position",
// key: "position",
// width: "19%",
// align: "center",
// },
// {
// title: "拥有权限",
// dataIndex: "authority",
// key: "authority",
// width: "19%",
// align: "center",
// },
// {
// title: "操作",
// dataIndex: "opacation",
// key: "opacation",
// width: "34%",
// align: "center",
// },
// ];
//开课表格
const columns6 = [
{
@@ -2248,46 +2082,6 @@ export default defineComponent({
status: "已通过",
},
],
// 5授权弹窗 6开课
// tableData5: [
// {
// key: 1,
// name: "李明",
// organization: "-",
// position: "产品经理",
// authority: "归属权",
// },
// {
// key: 2,
// name: "李洋",
// organization: "-",
// position: "产品经理",
// authority: "查看权",
// },
// {
// key: 3,
// name: "小李",
// organization: "-",
// position: "产品经理",
// authority: "管理权",
// },
// {
// key: 4,
// name: "雄安名",
// organization: "-",
// position: "产品经理",
// authority: "管理权",
// },
// {
// key: 5,
// name: "王哥",
// organization: "-",
// position: "产品经理",
// authority: "管理权",
// },
// ],
//开课
tableData6: [
{
@@ -2416,7 +2210,6 @@ export default defineComponent({
om_1: false,
ft_1: false,
om_ckxq: false,
// gpm_hs: false,
stm_hs: false,
cstm_hs: false,
sm_hs: false,
@@ -2424,6 +2217,7 @@ export default defineComponent({
closableQR: false,
rg_hs: false,
graduate_hs: false,
agreereject_hs:false,
agreestudy_hs: false,
rejectstudy_hs: false,
delete_hs: false,
@@ -2536,28 +2330,28 @@ export default defineComponent({
// options={state.projectNameList}
dropdownClassName="tabledropdown"
>
<a-select-option value="权限名单" label="权限名单">
<div
<a-select-option value="权限名单" label="权限名单"
style="padding-left:22px;"
onClick={() => {
state.corpowerlistvisible = true;
}}
>
}} >
<div>
权限名单
</div>
</a-select-option>
<a-select-option value="归属权" label="归属权">
<div
<a-select-option value="归属权" label="归属权"
style="padding-left:30px;"
onClick={() => {
state.ownpowervisible = true;
}}
>
}}>
<div>
归属权
</div>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<a-select-option value="查看权" label="查看权" style="padding-left:30px;">
<div>查看权</div>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<a-select-option value="管理权" label="管理权" style="padding-left:30px;">
<div>管理权</div>
</a-select-option>
</a-select>
@@ -2574,9 +2368,7 @@ export default defineComponent({
<a-select-option
value="二维码"
label="二维码"
style="padding-left:35px"
>
<div
style="padding-left:28px"
onClick={() => {
if (value.courseform === "线上") {
state.QR_hs = true;
@@ -2587,6 +2379,7 @@ export default defineComponent({
}
}}
>
<div>
二维码
</div>
</a-select-option>
@@ -2594,12 +2387,11 @@ export default defineComponent({
value="取消"
label="取消"
style="padding-left:35px"
>
<div
onClick={() => {
console.log("点击了");
}}
>
<div>
取消
</div>
</a-select-option>
@@ -2637,28 +2429,28 @@ export default defineComponent({
// options={state.projectNameList}
dropdownClassName="tabledropdown"
>
<a-select-option value="权限名单" label="权限名单">
<div
<a-select-option value="权限名单" label="权限名单"
style="padding-left:22px;"
onClick={() => {
state.corpowerlistvisible = true;
}}
>
}} >
<div>
权限名单
</div>
</a-select-option>
<a-select-option value="归属权" label="归属权">
<div
<a-select-option value="归属权" label="归属权"
style="padding-left:30px;"
onClick={() => {
state.ownpowervisible = true;
}}
>
}}>
<div>
归属权
</div>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<a-select-option value="查看权" label="查看权" style="padding-left:30px;">
<div>查看权</div>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<a-select-option value="管理权" label="管理权" style="padding-left:30px;">
<div>管理权</div>
</a-select-option>
</a-select>
@@ -2745,28 +2537,28 @@ export default defineComponent({
// options={state.projectNameList}
dropdownClassName="tabledropdown"
>
<a-select-option value="权限名单" label="权限名单">
<div
<a-select-option value="权限名单" label="权限名单"
style="padding-left:22px;"
onClick={() => {
state.corpowerlistvisible = true;
}}
>
}} >
<div>
权限名单
</div>
</a-select-option>
<a-select-option value="归属权" label="归属权">
<div
<a-select-option value="归属权" label="归属权"
style="padding-left:30px;"
onClick={() => {
state.ownpowervisible = true;
}}
>
}}>
<div>
归属权
</div>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<a-select-option value="查看权" label="查看权" style="padding-left:30px;">
<div>查看权</div>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<a-select-option value="管理权" label="管理权" style="padding-left:30px;">
<div>管理权</div>
</a-select-option>
</a-select>
@@ -2811,6 +2603,7 @@ export default defineComponent({
<div
class="jc"
onClick={() => {
state.agreereject_hs = true;
state.agreestudy_hs = true;
}}
>
@@ -2821,6 +2614,7 @@ export default defineComponent({
<div
class="jc"
onClick={() => {
state.agreereject_hs = true;
state.rejectstudy_hs = true;
}}
>
@@ -2923,12 +2717,12 @@ export default defineComponent({
value="复制"
label="复制"
style="padding-left:35px"
>
<div
onClick={() => {
state.delete_hs = true;
state.copy_hs = true;
}}
>
<div>
复制
</div>
</a-select-option>
@@ -2936,27 +2730,25 @@ export default defineComponent({
value="删除"
label="删除"
style="padding-left:35px"
>
<div
onClick={() => {
state.delete_hs = true;
state.del_hs = true;
}}
>
<div>
删除
</div>
</a-select-option>
<a-select-option
value="QR"
label="QR"
style="padding-left:35px"
>
<div
style="padding-left:28px;"
onClick={() => {
state.QR_hs = true;
state.vipftQR_hs = true;
}}
>
<div>
二维码
</div>
</a-select-option>
@@ -3140,7 +2932,7 @@ export default defineComponent({
}
};
const createft = () => {
if (state.bs_hs == false) {
if (state.bs_hs == false && state.valueE1 != "") {
state.of_hs = false;
state.ft_hs = true;
state.valueE1 = "";
@@ -3160,9 +2952,6 @@ export default defineComponent({
const ftsr_exit = () => {
state.om_ckxq = false;
};
// const gpm_exit = () => {
// state.gpm_hs = false;
// };
const stm_exit = () => {
state.stm_hs = false;
};
@@ -3182,9 +2971,11 @@ export default defineComponent({
state.sm_hs = false;
state.hideshow = true;
};
const clear_valueE1 = () => {
const clear_valueE1 = (value) => {
state.bs_hs = false;
if (value != "") {
state.valueE1 = "";
}
};
const clear_valueE2 = () => {
state.valueE2 = "";
@@ -3218,10 +3009,9 @@ export default defineComponent({
const graduate_exit = () => {
state.graduate_hs = false;
};
const agreestudy_exit = () => {
const agreereject_exit = () => {
state.agreereject_hs = false;
state.agreestudy_hs = false;
};
const rejectstudy_exit = () => {
state.rejectstudy_hs = false;
};
const delete_exit = () => {
@@ -3257,13 +3047,10 @@ export default defineComponent({
columns1,
columns2,
columns4,
// columns5,
columns6,
columns7,
options1,
options2,
// getTableDate,
// getTableDate2,
of_hShow,
of_exit,
hideShow,
@@ -3273,7 +3060,6 @@ export default defineComponent({
om_exit,
ckxq_hs,
ftsr_exit,
// gpm_exit,
stm_exit,
createkk,
cstm_exit,
@@ -3286,8 +3072,7 @@ export default defineComponent({
qr_exit,
rg_exit,
graduate_exit,
agreestudy_exit,
rejectstudy_exit,
agreereject_exit,
delete_exit,
onSelectChange,
faceManageChange,
@@ -3297,14 +3082,6 @@ export default defineComponent({
});
</script>
<style lang="scss">
// .dropdown-style{
// .ant-select-dropdown-menu{
// background: #6767bd;
// }
// .ant-select-dropdown-menu-item {
// color: #4EA6FF !important;
// }
// }
.courseManage {
width: 100%;
height: 100%;
@@ -3459,7 +3236,6 @@ export default defineComponent({
.selectonlineface {
z-index: 999;
width: 679px;
// height: 525px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
position: absolute;
@@ -4013,21 +3789,24 @@ export default defineComponent({
}
.agrstudyModal {
.ant-modal {
width:429px !important;
height:258px !important;
.ant-modal-content {
// width:679px !important;
width:429px !important;
height:258px !important;
.ant-modal-body {
width:429px !important;
height:258px !important;
padding:0px !important;
.agreestudy {
z-index: 9999;
width: 679px;
width: 429px;
height:258px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
position: absolute;
left: 50%;
top: 10%;
transform: translate(-50%, -50%);
.agree_header {
position: absolute;
width: calc(100%);
width: 100%;
height: 40px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
@@ -4061,13 +3840,11 @@ export default defineComponent({
}
}
.agreem_body {
.body_box {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
margin: 20px auto;
}
margin: 45px auto 62px auto;
}
.qrm_btnbox {
display: flex;
@@ -4128,7 +3905,6 @@ export default defineComponent({
}
.onlinemanage {
display: none;
z-index: 999;
min-width: 1000px;
background: #ffffff;
.om_main {
@@ -4566,7 +4342,6 @@ export default defineComponent({
}
}
.givepower {
z-index: 999;
min-width: 1000px;
background: #ffffff;
.gp_main {
@@ -4683,7 +4458,6 @@ export default defineComponent({
}
}
.schooltime {
z-index: 999;
min-width: 1000px;
background: #ffffff;
.st_main {
@@ -4784,7 +4558,6 @@ export default defineComponent({
justify-content: center;
text-align: center;
margin: 77px auto 109px auto;
cursor: pointer;
position: relative;
.smallleft {
position: absolute;
@@ -4905,7 +4678,6 @@ export default defineComponent({
}
}
.studentsmanage {
z-index: 1000;
min-width: 1000px;
background: #ffffff;
.stm_main {
@@ -5151,7 +4923,6 @@ export default defineComponent({
}
.modalMain {
.ftsturecord {
z-index: 999;
min-width: 1000px;
background: #ffffff;
.ftsr_main {
@@ -5193,7 +4964,6 @@ export default defineComponent({
width: 424px !important;
.ant-modal-body {
.delete {
z-index: 9999;
width: 424px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
@@ -5220,7 +4990,7 @@ export default defineComponent({
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.del-icon {
.del-icons {
width: 16px;
height: 16px;
position: relative;

View File

@@ -66,7 +66,7 @@
</div>
<!-- 搜索框及按钮 -->
<!-- 无数据 -->
<div class="datanull" v-if="tableData.length === 0">
<div class="datanull" v-if="tableDataTotal === 0">
<div class="nodata_box">
<div class="left">
<img src="../../assets/images/taskpage/left1.png" />
@@ -85,8 +85,8 @@
<!-- 表格 -->
<div
class="tableBox"
v-if="tableData.length !== 0"
style="padding-bottom: 160px; position: relative"
v-if="tableDataTotal !== 0"
style="padding-bottom: 0px; position: relative"
>
<a-table
style="border: 1px solid #f2f6fe"
@@ -98,15 +98,19 @@
@expand="expandTable"
:pagination="false"
/>
</div>
<div class="tableBox">
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
v-model:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div>
</div>
@@ -171,11 +175,11 @@
</div>
<!-- <div class="in">
<a-input
v-model:value="organization"
v-model:value="valuecom"
maxlength="20"
style="border-radius: 4px"
/>
<div class="showcount">{{ organization.length }}/20</div>
<div class="showcount">{{ valuecom.length }}/20</div>
</div> -->
</div>
<div class="bac">
@@ -225,8 +229,24 @@
<button class="samtn btn2" @click="createLearnPath">确定</button>
</div>
</div>
</div></a-modal
</div>
<!-- <div
style="
width: 300px;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
background:pink;
flex-shrink: 0;
position:absolute,
z-index: 100;
"
v-if="true"
>
<a-spin :spinning="true" />
</div> -->
</a-modal>
<!-- 编辑路径弹窗 -->
<a-modal
@@ -318,7 +338,7 @@
"
:style="{
border:
learnPathBg === item.id
learnPathBg2 === item.id
? '2px solid rgba(78, 166, 255, 1)'
: '2px solid rgba(78, 166, 255, 0)',
'background-image': 'url(' + item.source + ')',
@@ -336,8 +356,8 @@
</div>
</div>
<div class="btn">
<button class="samtn btn1" @click="handleOut">取消</button>
<button class="samtn btn2" @click="handleOut">确定</button>
<button class="samtn btn1" @click="handleOut1">取消</button>
<button class="samtn btn2" @click="editLearnPath">确定</button>
</div>
</div>
</div></a-modal
@@ -494,10 +514,10 @@
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="delete_exit">取消</div>
<div class="btnText" @click="closeDeleteModal">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="delete_exit">确定</div>
<div class="btnText" @click="deleteLearnPath">确定</div>
</div>
</div>
</div>
@@ -572,25 +592,26 @@
<manage-right v-model:Managevisible="Managevisible" />
<!-- 授权名单抽屉 -->
<power-list v-model:PLvisible="PLvisible" />
<!-- 创建路径loading -->
</div>
</template>
<script>
import { reactive, toRefs, onMounted } from "vue";
import { useRouter } from "vue-router";
import OwnerShip from "../../components/drawers/Ownership";
import PowerList from "../../components/drawers/PowerList";
import QueryRight from "../../components/drawers/QueryRight";
import ManageRight from "../../components/drawers/ManageRight";
import * as api from "../../api/index1";
import { message } from "ant-design-vue";
function getBase64(img, callback) {
const reader = new FileReader();
reader.addEventListener("load", () => callback(reader.result));
reader.readAsDataURL(img);
}
import { toDate } from "../../api/method";
export default {
name: "learningPath",
components: { OwnerShip, PowerList, QueryRight, ManageRight },
setup() {
const router = useRouter();
const state = reactive({
projectNameList: [
{
@@ -648,7 +669,8 @@ export default {
source: require("../../assets/images/leveladd/3.png"),
},
],
learnPathBg: null, //选择的路径图背景
learnPathBg: null, //创建路径选择的路径图背景
learnPathBg2: null, //编辑路径选择的路径图背景
pub: false, //发布弹窗
checked: false, //发布弹窗switch
checkedTeacher: false, //发布弹窗勾选
@@ -671,7 +693,6 @@ export default {
value1: "",
value2: "",
pathName: "", //创建/编辑路径图名称
organization: "", //创建/编辑路径图归属组织
organizationList: [
{
id: 1,
@@ -696,8 +717,11 @@ export default {
], //归属组织
organizationSelectName: null, //归属组织选择名称
organizationSelectId: null, //归属组织选择id
pathBg: "", //路径图选择背景
pathIntro: "", //路径说明
valueEE: "",
createLoading: false, //创建路径loading
deletePathId: null, //删除路径id
editPathId: null, //修改路径id
});
const selectProjectName = (value, index) => {
@@ -708,15 +732,31 @@ export default {
console.log("e", e, a);
};
const handleOut = () => {
// console.log("打开创建路径弹窗");
state.pathName = "";
state.pathBg = "";
state.organizationSelectName = null;
state.organizationSelectId = null;
state.pathIntro = "";
state.out = !state.out;
};
const handleOut1 = () => {
state.pathName = "";
state.pathBg = "";
state.organizationSelectName = null;
state.organizationSelectId = null;
state.pathIntro = "";
state.out1 = !state.out1;
state.editPathId = null;
};
const chooseImg = (item) => {
console.log(item);
state.learnPathBg = item.id;
};
const chooseImg2 = (id) => {
console.log(id);
state.learnPathBg2 = id;
};
const showPub = () => {
state.pub = true;
};
@@ -739,6 +779,7 @@ export default {
state.deleteModal = true;
};
const closeDeleteModal = () => {
state.deletePathId = null;
state.deleteModal = false;
};
const showStartModal = () => {
@@ -772,7 +813,7 @@ export default {
let obj = {
id: value.routerId,
number: (state.currentPage - 1) * state.pageSize + index + 1,
manager: value.name,
manager: value.name ? value.name : "-",
state:
value.status === 0
? "草稿"
@@ -781,9 +822,14 @@ export default {
: value.status === -1
? "已停用"
: "-",
creater: value.createName,
pubtime: value.publishTime,
cretime: value.createTime,
creater: value.createName ? value.createName : "-",
pubtime: value.publishTime
? toDate(value.publishTime, "Y-M-D h:m:s")
: "-",
cretime: value.createTime
? toDate(value.createTime, "Y-M-D h:m:s")
: "-",
remark: value.remark ? value.remark : "-",
};
array.push(obj);
});
@@ -850,6 +896,7 @@ export default {
key: "opacation",
width: 200,
align: "center",
fixed: "right",
scopedSlots: { customRender: "action" }, //引入的插槽
customRender: (text) => {
// console.log(text);
@@ -870,7 +917,14 @@ export default {
<div
class="jc"
onClick={() => {
console.log("text.record", text.record);
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;
}}
>
编辑
@@ -885,6 +939,12 @@ export default {
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;
}}
>
编辑
@@ -911,7 +971,7 @@ export default {
</div>
<div class="tableSelect">
<router-link to="/leveladd">
<div class="g1">关卡</div>
<div class="g1">管理</div>
</router-link>
<a-select
style="width: 50px;margin-top:2px;margin-left:25px"
@@ -998,6 +1058,8 @@ export default {
>
<div
onClick={() => {
state.deletePathId = text.record.id;
// console.log("text.record", text.record);
showDeleteModal();
}}
>
@@ -1077,6 +1139,7 @@ export default {
>
<div
onClick={() => {
state.deletePathId = text.record.id;
showDeleteModal();
}}
>
@@ -1103,26 +1166,31 @@ export default {
};
//创建学习路径图
const createLearnPath = () => {
getBase64("../../assets/images/leveladd/2.png", (base64Url) => {
console.log("base64Url", base64Url);
});
if (!state.pathName) return message.info("请输入路径图名称");
if (!state.organizationSelectName) return message.info("请选择归属组织");
if (!state.organizationSelectName) return message.info("请选择归属组织");
// let obj = {
// name: "新建路径图测试",
// picUrl: "",
// remark: "新建路径图测试说明",
// status: 0,
// };
// api
// .createLearnPath(obj)
// .then((res) => {
// console.log("创建成功", res);
// })
// .catch((err) => {
// console.log("创建失败", err);
// });
// if (!state.organizationSelectName) return message.info("请选择归属组织");
// state.createLoading = true;
let obj = {
name: state.pathName,
picUrl: "",
remark: state.pathIntro,
status: 0,
};
api
.createLearnPath(obj)
.then((res) => {
setTimeout(() => {
console.log("创建成功", res);
message.success("创建成功");
// state.createLoading = false;
state.currentPage = 1;
router.push("/leveladd");
// getLearnPath();
}, 1000);
})
.catch((err) => {
console.log("创建失败", err);
// state.createLoading = false;
});
};
//获取学习路径列表
const getLearnPath = () => {
@@ -1134,14 +1202,17 @@ export default {
.getLearnPath(obj)
.then((res) => {
if (res.status === 200) {
// console.log("获取路径列表数据", res.data.data);
console.log("获取路径列表数据", res.data.data);
let arr = res.data.data.rows;
// let array = [];
if (
arr.length === 0 &&
res.data.data.total > 0 &&
state.currentPage > 1
) {
state.currentPage = state.currentPage - 1;
getLearnPath();
}
getTableDate(arr);
// state.tableData = array;
// getTableDate();
// console.log("tableData", array);
state.tableDataTotal = Number(res.data.data.total);
}
})
@@ -1174,6 +1245,60 @@ export default {
// console.log("添加测试关卡数据失败", err);
// });
};
//翻页
const changePagination = (page) => {
state.currentPage = page;
getLearnPath();
// console.log("翻页", page, pageSize);
};
//删除学习路径图
const deleteLearnPath = () => {
let obj = {
routerId: state.deletePathId,
type: -2,
};
api
.deleteLearnPath(obj)
.then((res) => {
console.log("删除成功", res);
message.success("删除成功");
state.deleteModal = false;
getLearnPath();
})
.catch((err) => {
console.log("删除失败", err);
});
};
//编辑学习路径图
const editLearnPath = () => {
if (!state.pathName) return message.info("请输入路径图名称");
// if (!state.organizationSelectName) return message.info("请选择归属组织");
// state.createLoading = true;
let obj = {
routerId: state.editPathId,
name: state.pathName,
picUrl: "",
remark: state.pathIntro,
status: 0,
};
api
.createLearnPath(obj)
.then((res) => {
setTimeout(() => {
console.log("修改成功", res);
message.success("修改成功");
// state.createLoading = false;
// state.currentPage = 1;
state.out1 = false;
// router.push("/leveladd");
getLearnPath();
}, 1000);
})
.catch((err) => {
console.log("修改失败", err);
// state.createLoading = false;
});
};
onMounted(() => {
// console.log("执行");
getLearnPath();
@@ -1200,10 +1325,14 @@ export default {
showPower,
tableDataFunc,
chooseImg,
chooseImg2,
showQuery,
showManage,
createLearnPath,
selectorganization,
changePagination,
deleteLearnPath,
editLearnPath,
};
},
};
@@ -1699,8 +1828,8 @@ export default {
}
}
.filter {
margin-left: 38px;
margin-right: 38px;
margin-left: 35px;
margin-right: 35px;
margin-top: 30px;
display: flex;
justify-content: space-between;
@@ -1840,7 +1969,8 @@ export default {
}
}
.tableBox {
margin: 20px 38px 30px;
// margin: 20px 38px 30px;
margin: 10px 35px 0px 35px;
th.h {
background-color: #eff4fc !important;
@@ -1851,15 +1981,20 @@ export default {
> td {
background: #f6f9fd;
}
}
.tableBox {
.pa {
position: absolute;
bottom: 20px;
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
// margin-bottom: 10px;
// position: absolute;
// bottom: -40px;
}
}
.operation {

View File

@@ -399,7 +399,7 @@
<div
class="operation"
style="cursor: pointer"
@click="showAA"
@click="showAA(item.course, item.name)"
:style="{
display:
item.course === '直播' || item.course === '活动'
@@ -872,7 +872,10 @@
<!-- 面授学员抽屉 -->
<face-stu v-model:FSvisible="FSvisible" />
<!-- 活动考勤抽屉 -->
<active-attendance v-model:AAvisible="AAvisible" />
<active-attendance
v-model:AAvisible="AAvisible"
:title="showKaoqinText"
/>
<!-- 时间管理抽屉 -->
<time-manage v-model:Tvisible="visible" :title="showTimeText" />
<!-- 考试管理抽屉 -->
@@ -1120,6 +1123,8 @@ export default {
showTimeText: "",
//考试、测评页面传递参数
showTestText: "",
//直播、活动页面传递参数
showKaoqinText: "",
FSvisible: false, //面授学员
AAvisible: false, //活动/直播考勤
copyModal: false, //面授二维码弹窗
@@ -1396,15 +1401,17 @@ export default {
const showFS = () => {
state.FSvisible = true;
};
//活动考勤的抽屉
const showAA = () => {
//考勤的抽屉
const showAA = (course) => {
state.AAvisible = true;
state.showKaoqinText = "【" + course + "】" + "考勤";
console.log(state.showKaoqinText, 1111);
};
// 时间管理
const showTime = (course, name) => {
const showTime = (course) => {
console.log("点击管理");
state.visible = true;
state.showTimeText = "【" + course + "】" + name;
state.showTimeText = "【" + course + "】" + "管理";
// console.log("state.showTimeText", state.showTimeText);
};
//考试管理的抽屉

View File

@@ -8,12 +8,19 @@
<div class="btnText" @click="showModal">添加关卡</div>
</div>
<div class="maincon" style="background-color: #fff">
<div
<!-- <div
class="items"
:class="{ active: isActive == true }"
@click="changebgc"
v-for="item in level"
:key="item.id"
> -->
<div
class="items"
:class=" isactive == index && isActive == true ? 'active' : '' "
@click="changebgc(index)"
v-for="( item , index ) in level"
:key="item.id"
>
<div class="items1">
<div class="boxs_left">
@@ -391,7 +398,7 @@
<span class="yi"></span>
</div>
</div> -->
<div class="tableBox" style="margin-top: 20px">
<div class="tablebox1" style="margin-top: 20px">
<a-table
style="border: 1px solid #f2f6fe"
:columns="tableDataFunc2()"
@@ -796,8 +803,9 @@ export default {
value1: "",
value2: "",
selectedRowKeys: [],
isActive: false,
gqxy_hs: true,
isactive: -1,
isActive: false,
projectChecked: null, //项目单选框
});
const showDrawer = () => {
@@ -944,8 +952,8 @@ export default {
key: "name",
width: 60,
align: "left",
ellipsis: true,
className: "classify",
scopedSlots: { customRender: "action" }, //引入的插槽
customRender: (text) => {
return (
@@ -1125,7 +1133,8 @@ export default {
document.getElementsByTagName("main")[0].style.boxShadow =
"0px 1px 35px 0px rgba(118, 136, 166, 0.07)";
});
const changebgc = () => {
const changebgc = (index) => {
state.isactive = index;
state.isActive = !state.isActive;
};
const gqxy_hShow = () => {
@@ -1498,6 +1507,7 @@ export default {
}
.active {
opacity: 1;
transition:all .5s;
}
}
}
@@ -1862,6 +1872,19 @@ export default {
bottom: 0px;
}
}
.tablebox1 {
margin-bottom: 80px;
.pa {
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 0px;
}
}
}
}
.Gcon {

View File

@@ -322,22 +322,58 @@
</div>
<hr color="#E8E8E8" />
<div class="pjc_body">
<div class="pjcb_header">
<span>规则</span>
<div class="edit_btn">
<div class="edit"></div>
<div class="btnText">编辑</div>
<div class="groupright">
<div class="spandiv"><span class="spantext">规则</span></div>
<div v-if="edit" class="btns">
<div class="btn1" @click="edit = !edit">
<img src="../../assets/images/projectadd/edit1.png" />
<span class="btn1text">编辑</span>
</div>
</div>
<div class="pjcb_content">
<div v-else class="btns">
<div class="btn1" @click="edit = !edit">
<span class="btn1text">保存</span>
</div>
</div>
</div>
<div v-if="edit" class="pjcb_content">
<div class="content content1">
<span>当前设计下学员可以获得 10 积分</span>
<span>当前设计下学员可以获得 </span
><span class="scoretext">{{ scoresum }}</span
><span>积分</span>
</div>
<div class="content content2">
<span>完成必修/选修获得 5 积分</span>
<span>完成必修/选修获得 </span
><span class="scoretext">{{ score1 }} </span><span>积分</span>
</div>
<div class="content content3">
<span>优秀学员可获得 5 积分</span>
<span>优秀学员可获得 </span
><span class="scoretext">{{ score2 }}</span
><span>积分</span>
</div>
</div>
<div v-else class="pjcb_content">
<div class="content content1">
<span>当前设计下学员可以获得 </span
><span class="scoretext">{{ scoresum }}</span
><span>积分</span>
</div>
<div class="content content2">
<span>完成必修/选修获得 </span
><span
><a-input
v-model:value="score1"
:bordered="false"
@change="getScore"
/> </span
><span>积分</span>
</div>
<div class="content content3">
<span>优秀学员可获得 </span
><span
><a-input v-model:value="score2" :bordered="false" /></span
><span>积分</span>
</div>
</div>
</div>
@@ -603,6 +639,9 @@ export default defineComponent({
value3: false,
value4: false,
hideshow: false,
score1: 5,
score2: 5,
edit: true,
});
const value = ref("");
const value2 = ref("");
@@ -626,6 +665,12 @@ export default defineComponent({
changecheck3,
};
},
computed: {
// 计算属性的 getter
scoresum: function () {
return Number(this.score1) + Number(this.score2);
},
},
});
</script>
<style lang="scss">
@@ -1098,47 +1143,70 @@ export default defineComponent({
.pjc_body {
margin-left: 34px;
margin-right: 34px;
.pjcb_header {
.groupright {
display: flex;
justify-content: space-between;
align-items: center;
margin: 24px auto;
.edit_btn {
.btn1 {
width: 100px;
// padding: 0px 26px 0px 26px;
height: 38px;
background: rgb(64, 158, 255);
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
height: 40px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-right: 16px;
border: 1px solid #409eff;
border-radius: 8px;
background: #409eff;
cursor: pointer;
.edit {
width: 15px;
height: 15px;
background-image: url(@/assets/images/coursewareManage/export1.png);
background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: rgb(255, 255, 255);
line-height: 36px;
.btn1text {
color: #ffffff;
margin-left: 5px;
font-size: 14px;
}
}
.btn2 {
width: 100px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 32px;
border: 1px solid #409eff;
border-radius: 8px;
cursor: pointer;
background: #ffffff;
.btn2text {
color: #409eff;
margin-left: 5px;
font-size: 14px;
}
}
}
.pjcb_content {
border: 1px solid #388be1;
padding: 32px;
border: 1px solid #409eff;
padding: 20px;
margin-top: 10px;
.ant-input {
width: 46px;
font-size: 16px;
color: #409eff;
}
.scoretext {
color: #409eff;
font-size: 16px;
margin-left: 3px;
margin-right: 4px;
}
.pjcb_content :last-child {
margin-bottom: 0px;
}
.content {
margin-bottom: 24px;
align-items: center;
height: 50px;
display: flex;
}
margin-bottom: 130px;
}
}
}

View File

@@ -4,109 +4,87 @@
<div class="header">
<span class="title">创建/编辑单层项目</span>
<router-link to="/projectmanage" class="goback">
<span class="return"></span
><span class="returntext">返回</span></router-link
>
<span class="return"></span><span class="returntext">返回</span>
</router-link>
</div>
<div class="content">
<div class="main">
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">项目名称</div>
</div>
<div class="in">
<a-input v-model:value="valueE" placeholder="请输入项目名称" show-count
:maxlength="30"/>
<a-input v-model:value="projectName" placeholder="请输入项目名称" show-count :maxlength="30" />
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">分类</div>
</div>
<div class="in select">
<a-select
:value="classifySelect"
placeholder="四个养成"
style="width: 100%"
:options="classifyList"
allowClear
showSearch
></a-select>
<a-select :getPopupContainer="triggerNode => {
return triggerNode.parentNode || document.body
}" v-model:value="classifySelect" placeholder="四个养成" style="width: 100%" :options="classifyList"
@change="classificationChange" allowClear showSearch>
</a-select>
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">封面图</div>
</div>
<div
class="box"
style="
<div class="box" style="
width: 100px;
height: 100px;
border: 1px solid rgba(78, 166, 255, 1);
border-radius: 5px;
cursor: pointer;
"
>
overflow: hidden;
">
<a-upload v-model:file-list="fileList" name="file" list-type="picture-card" class="avatar-uploader"
:show-upload-list="false" action="/api/file/upload" :before-upload="beforeUpload" @change="handleChange">
<img style="width: 100px;height: 100px;margin-bottom: 4px;margin-right: 4px;" v-if="imageUrl"
:src="imageUrl" alt="avatar" />
<div v-else>
<!-- <loading-outlined v-if="loading"></loading-outlined> -->
<!-- <plus-outlined v-else></plus-outlined> -->
<div class="box1"></div>
<div class="box2"></div>
<!-- <div class="ant-upload-text"></div> -->
</div>
</a-upload>
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">项目时间</div>
</div>
<div class="in">
<a-range-picker
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
style="width: 100%; height: 40px; border-radius: 5px"
show-time
/>
<a-range-picker separator="至" :placeholder="[' 开始时间', ' 结束时间']"
style="width: 100%; height: 40px; border-radius: 5px" show-time @change="onRangeChange" />
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">项目经理</div>
</div>
<div class="in select">
<a-select
:value="classifySelect"
placeholder="请选择项目经理"
style="width: 100%"
:options="classifyList"
allowClear
showSearch
></a-select>
<a-select :getPopupContainer="triggerNode => {
return triggerNode.parentNode || document.body
}" :value="classifySelect1" placeholder="请选择项目经理" style="width: 100%" :options="classifyList1" allowClear
showSearch>
</a-select>
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">资源归属</div>
</div>
@@ -119,12 +97,7 @@
<div class="inname" style="margin-top: 13px">项目说明</div>
</div>
<div class="in">
<a-textarea
v-model:value="valuei"
style="height: 80px"
placeholder="请输入说明"
show-count :maxlength="200"
/>
<a-textarea v-model:value="remark" style="height: 80px" placeholder="请输入说明" show-count :maxlength="200" />
</div>
</div>
<div class="name name2">
@@ -132,84 +105,60 @@
<div class="inname">同步学习记录</div>
</div>
<div class="in">
<a-radio v-model:checked="checked"
><span
style="
<a-radio @click="changeChecked" v-model:checked="checked"><span style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-radio
>
">同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span></a-radio>
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">项目级别</div>
</div>
<div class="in">
<a-input
v-model:value="valueE"
placeholder="集团级/组织级/现地级/部门级"
/>
<a-input v-model:value="valueE" placeholder="集团级/组织级/现地级/部门级" />
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">培训体系</div>
</div>
<div class="in">
<a-input
v-model:value="valueE"
placeholder="集团级/组织级/现地级/部门级"
/>
<a-input v-model:value="valueE" placeholder="集团级/组织级/现地级/部门级" />
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">是否BOEU实施</div>
</div>
<div class="in">
<a-radio v-model:checked="checked"
><span
style="
<a-radio @click="changeChecked1" v-model:checked="checked1"><span style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
>BOEU实施</span
></a-radio
>
">BOEU实施</span></a-radio>
</div>
</div>
<div class="name name2">
<div class="namebox" style="margin-top: 8px">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
<div class="inname">附件</div>
</div>
<div class="filebox">
<div>
<img
class="fileimg"
src="../../assets/images/projectadd/enclosure.png"
/>
<span class="filetext">上传附件</span>
<img v-if="fileList1.length < 6" class="fileimg" src="../../assets/images/projectadd/enclosure.png" />
<a-upload :disabled="fileList1.length > 5" :before-upload="beforeUpload1" v-model:file-list="fileList1"
name="file" action="/api/file/upload" :headers="headers" @change="handleChange1">
<!-- <a-button> -->
<!-- <upload-outlined></upload-outlined> -->
<span v-if="fileList1.length > 5" class="filetext">上传数量已经达到最大值</span>
<span v-else class="filetext">上传附件</span>
<!-- </a-button> -->
</a-upload>
</div>
<div class="support">
支持.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.gif,.zip
@@ -221,74 +170,231 @@
<div class="name">
<div class="inname" style="width: 50px">模板</div>
<div class="in select" style="margin-left: 2px">
<a-select
v-model:value="value1"
placeholder="请选择模板"
:size="size"
style="width: 100%"
:options="options"
></a-select>
<a-select v-model:value="value1" placeholder="请选择模板" :size="size" style="width: 100%" :options="options">
</a-select>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="btn">
<a-button
type="primary"
style="width: 100px; height: 40px; border-radius: 8px"
>确认</a-button
>
<a-button
type="primary"
ghost
style="
width: 100px;
height: 40px;
margin-left: 14px;
border-radius: 8px;
"
>取消</a-button
>
<a-button v-on:click="createProject" type="primary" class="btn1">确定</a-button>
<a-button class="btn2">取消</a-button>
</div>
</div>
</div>
</template>
<script>
import { reactive, toRefs } from "vue";
import { reactive, toRefs, ref } from "vue";
import { message } from 'ant-design-vue';
import * as api from "../../api/index";
export default {
name: "projectAdd",
setup() {
const state = reactive({
classifyList: [
{
id: 1,
name: "分类一",
label: "分类一",
},
{
id: 2,
name: "分类二",
label: "分类二",
},
{
id: 3,
name: "分类三",
label: "分类三",
},
{
id: 4,
name: "分类四",
label: "分类四",
},
],
classifySelect: null,
classifySelectId: null,
checked: false,
checked1: false
});
const projectName = ref('');
const classifyList = ref([
{ value: 1, label: '管理者' },
{ value: 2, label: '领军者' },
{ value: 3, label: '产业人' },
]);
let projectType = "";
const classificationChange = (value) => {
console.log(`selected ${value}`);
projectType = value;
};
function getBase64(img, callback) {
const reader = new FileReader();
reader.addEventListener('load', () => callback(reader.result));
reader.readAsDataURL(img);
}
const fileList = ref([]);
const fileList1 = ref([]);
const loading = ref(false);
const imageUrl = ref('');
const handleChange = (info) => {
if (info.file.status === 'uploading') {
loading.value = true;
return;
}
if (info.file.status === 'done') {
console.log('上传图片返回的信息 %o', info)
// Get this url from response in real world.
getBase64(info.file.originFileObj, (base64Url) => {
imageUrl.value = base64Url;
loading.value = false;
});
}
if (info.file.status === 'error') {
loading.value = false;
message.error('upload error');
}
};
let uplodaFileCount = false;
const handleChange1 = (info) => {
if (info.file.status === 'uploading') {
loading.value = true;
return;
}
if (info.file.status === 'done') {
console.log('上传附件返回的信息 %o', info, info.fileList.length, uplodaFileCount)
if (info.fileList.length > 5) {
uplodaFileCount = true;
} else {
uplodaFileCount = false;
}
}
if (info.file.status === 'error') {
loading.value = false;
message.error('upload error');
}
};
const beforeUpload = (file) => {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
if (!isJpgOrPng) {
message.error('You can only upload JPG file!');
}
const isLt2M = file.size / 1024 / 1024 < 1;
if (!isLt2M) {
message.error('Image must smaller than 1MB!');
}
return isJpgOrPng && isLt2M;
};
const beforeUpload1 = () => {
return new Promise((resovle, reject) => {
if (uplodaFileCount) {
message.info("上传文件数量已达最大数量")
return reject(false);
}
return resovle(true);
})
};
const onRangeChange = (value, dateString) => {
console.log('Selected Time: ', value);
// 项目时间选择函数
console.log('Formatted Selected Time: ', dateString);
};
// 项目经理 后续接口调用
const classifyList1 = ref([
{ value: 1, label: '李俊国' },
{ value: 2, label: '将小米' },
{ value: 3, label: '刘孟君' },
]);
// 资源归属 sourceBelongId 后续给接口
// 项目说明
const remark = ref('');
const changeChecked = () => {
console.log(state.checked)
state.checked ? state.checked = false : state.checked = true;
}
const changeChecked1 = () => {
console.log(state.checked1)
state.checked1 ? state.checked1 = false : state.checked1 = true;
}
const errorMsgs = {
"name": "请输入项目名称",
"type": "请选择项目分类",
"picUrl": "请上传项目封面图",
"beginTime": "请选择项目开始时间",
"endTime": "请选择项目结束时间",
"manager": "请选择项目经理",
"managerId": "请选择项目经理",
"sourceBelongId": "请选择资源归属",
"level": "请填写项目级别",
"systemId": "请填写项目培训体系",
"boeFlag": "请选择是否BOE实施",
"attach": "请上传附件"
}
const createProject = () => {
let obj = {
"attach": "1",
"beginTime": 0,
"boeFlag": 0,
"category": 0,
"courseSyncFlag": 0,
"endTime": 0,
"level": 0,
"manager": "",
"managerId": "",
"name": projectName["value"],
"notice": "",
"noticeFlag": 0,
"parentId": 0,
"picUrl": "",
"projectId": 0,
"remark": remark["value"],
"sourceBelongId": 0,
"status": 0,
"systemId": 0,
"templateId": 0,
"type": projectType
}
console.log('提交的数据格式 %o', obj)
for (let i in obj) {
console.log(obj[i])
if (obj[i] === "") {
message.destroy()
message.warning(errorMsgs[i])
return
}
}
api.createProject(obj).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
};
return {
...toRefs(state),
projectName,
classifyList,
classificationChange,
fileList,
fileList1,
loading,
imageUrl,
handleChange,
handleChange1,
beforeUpload,
beforeUpload1,
onRangeChange,
classifyList1,
remark,
changeChecked,
changeChecked1,
uplodaFileCount,
createProject
};
},
}
};
</script>
<style lang="scss">
@@ -303,6 +409,7 @@ export default {
width: 100%;
display: flex;
justify-content: space-between;
.title {
color: #000000;
font-size: 18px;
@@ -311,10 +418,12 @@ export default {
padding-left: 37px;
//font-weight: 500;
}
.goback {
padding-right: 70px;
//padding-top: 37px;
position: relative;
.return {
display: inline-block;
width: 42px;
@@ -323,6 +432,7 @@ export default {
margin-right: 10px;
background-image: url("../../assets/images/projectadd/return.png");
}
.returntext {
display: inline-block;
position: absolute;
@@ -332,8 +442,10 @@ export default {
}
}
}
.content {
display: flex;
.main {
width: 50%;
display: flex;
@@ -342,12 +454,14 @@ export default {
//justify-content: center;
float: left;
border-right: 1px solid rgba(153, 155, 163, 0.3);
.name {
width: 78%;
// background-color: lightcoral;
display: flex;
margin-top: 20px;
align-items: center;
//height: 40px;
// border: 1px solid black;
.namebox {
@@ -356,19 +470,23 @@ export default {
align-items: center;
justify-content: flex-end;
flex-shrink: 0;
.nameimg {
width: 10px;
height: 10px;
}
}
.d {
margin-top: 8px;
font-size: 25px;
color: #ff4e4e;
}
.box {
position: relative;
margin-left: 14px;
.box1 {
position: absolute;
left: 50%;
@@ -378,6 +496,7 @@ export default {
margin-top: -5px;
border-top: 2px solid rgba(78, 166, 255, 1);
}
.box2 {
position: absolute;
left: 50%;
@@ -388,35 +507,42 @@ export default {
border-left: 2px solid rgba(78, 166, 255, 1);
}
}
.inname {
color: #6f6f6f;
font-size: 14px;
margin-left: 7px;
}
.in {
margin-left: 14px;
flex: 1;
// .ant-radio-wrapper {
// }
.ant-input-textarea-show-count {
position: relative;
height: 88px;
}
.ant-input-textarea-show-count::after {
position: absolute;
right: 10px;
bottom: 0px;
}
.ant-input {
border-radius: 8px;
// height: 120%;
width: 100%;
height: 40px;
}
.ant-input-affix-wrapper {
padding: 0 11px;
border-radius: 8px;
}
.ant-select-selector {
border-radius: 5px;
// height: 120%;
@@ -424,20 +550,24 @@ export default {
height: 40px;
}
}
.filebox {
margin-left: 14px;
flex: 1;
.fileimg {
width: 15px;
height: 15px;
margin-right: 6px;
}
.filetext {
font-size: 14px;
font-weight: 400;
color: #4ea6ff;
line-height: 36px;
}
.support {
font-size: 14px;
font-weight: 400;
@@ -448,9 +578,11 @@ export default {
}
}
}
.name2 {
display: flex;
align-items: flex-start;
.ant-input-textarea {
.ant-input {
height: 88px;
@@ -458,6 +590,7 @@ export default {
}
}
}
.template {
width: 50%;
display: flex;
@@ -465,6 +598,7 @@ export default {
align-items: center;
//justify-content: center;
float: right;
.name {
width: 78%;
// background-color: lightcoral;
@@ -472,27 +606,32 @@ export default {
margin-top: 20px;
align-items: center;
height: 40px;
// border: 1px solid black;
.d {
margin-top: 8px;
font-size: 25px;
color: #ff4e4e;
}
.inname {
color: #6f6f6f;
font-size: 14px;
margin-left: 7px;
width: 65px;
}
.in {
margin-left: 14px;
width: 81%;
.ant-input {
border-radius: 5px;
// height: 120%;
width: 100%;
height: 40px;
}
.ant-select-selector {
border-radius: 5px;
// height: 120%;
@@ -503,15 +642,42 @@ export default {
}
}
}
.footer {
width: 100%;
margin-top: 31px;
margin-bottom: 14px;
padding-bottom: 20px;
.btn {
display: flex;
justify-content: center;
.btn1 {
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 40px;
border-radius: 8px;
background: #409EFF;
color: #FFFFFF;
margin-right: 14px;
}
.btn2 {
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 40px;
border-radius: 8px;
border: 1px solid #409EFF;
background: #FFFFFF;
color: #409EFF;
}
}
.text {
color: rgba(153, 155, 163, 1);
font-size: 14px;

View File

@@ -45,9 +45,8 @@
style="width: 270px"
/>
</div>
</div>
<div class="btns">
<div class="btn btn1">
<div style="display: flex;margin-bottom: 20px">
<div class="btnn btn1">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
@@ -55,6 +54,10 @@
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
</div>
<div class="btns">
<div class="btn btn3" @click="showModal1">
<div class="search"></div>
<div class="btnText">创建项目</div>
@@ -339,7 +342,7 @@
<div class="inname">项目名称:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="value1"
show-count
:maxlength="30"
placeholder="请输入项目名称"
@@ -357,7 +360,7 @@
<div class="inname">分类:</div>
<div class="in">
<a-select
v-model:value="value"
v-model:value="value2"
placeholder="四个养成"
style="border-radius: 8px; height: 40px"
/>
@@ -373,7 +376,7 @@
<div class="inname">项目经理:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="value3"
placeholder="请选择项目经理"
style="border-radius: 8px; height: 40px"
/>
@@ -389,7 +392,7 @@
<div class="inname">资源归属:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="value4"
style="border-radius: 8px; height: 40px"
/>
</div>
@@ -453,7 +456,7 @@
<div class="inname">子项目名称:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="value5"
placeholder="请输入项目名称"
style="border-radius: 8px; height: 40px"
/>
@@ -469,7 +472,7 @@
<div class="inname">分类:</div>
<div class="in">
<a-select
v-model:value="value"
v-model:value="value6"
placeholder="四个养成"
style="border-radius: 8px; height: 40px"
/>
@@ -485,7 +488,7 @@
<div class="inname">子项目经理:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="value7"
placeholder="自动带出 可编辑"
style="border-radius: 8px; height: 40px"
/>
@@ -501,7 +504,7 @@
<div class="inname">资源归属:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="value8"
style="border-radius: 8px; height: 40px"
/>
</div>
@@ -743,6 +746,14 @@ export default {
components: { ProjOwnerShip, ProjPowerList, ProjCheckShip, ProjManageShip },
setup() {
const state = reactive({
value1: "",
value2: "",
value3: "",
value4: "",
value5: "",
value6: "",
value7: "",
value8: "",
projectNameList: [
{
id: 1,
@@ -2580,10 +2591,6 @@ export default {
margin-right: 20px;
margin-bottom: 20px;
}
}
.btns {
display: flex;
// flex-wrap: wrap;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
@@ -2595,6 +2602,7 @@ export default {
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
background-size: 100%;
}
@@ -2606,11 +2614,34 @@ export default {
margin-left: 5px;
}
}
.btnn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #409EFF;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search1.png");
background-image: url("../../assets/images/courseManage/search0.png");
}
}
.btn2 {
@@ -2620,16 +2651,8 @@ export default {
background-image: url("../../assets/images/courseManage/reset1.png");
}
}
.btn3 {
margin-right: 0px;
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add1.png");
}
}
.btn1:hover {
background: rgba(64, 158, 255, 1);
background: rgba(64, 158, 255, 0.76);
.search {
background-image: url("../../assets/images/courseManage/search0.png");
}
@@ -2637,23 +2660,55 @@ export default {
color: #ffffff;
}
}
.btn1:active {
background: #0982ff;
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
background: rgba(64, 158, 255, 0.1);
}
.btn2:active {
background: rgba(64, 158, 255, 0.2);
}
}
.btns {
display: flex;
// flex-wrap: wrap;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #409EFF;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
cursor: pointer;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
.search {
background-image: url("../../assets/images/courseManage/reset0.png");
background-size: 100%;
}
.btnText {
color: #ffffff;
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
line-height: 36px;
margin-left: 5px;
}
}
.btn3 {
margin-right: 0px;
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add0.png");
}
}
.btn3:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("../../assets/images/courseManage/add0.png");
}
.btnText {
color: #ffffff;
background: rgba(64, 158, 255, 0.76);
}
.btn3:active {
background: #0982ff;
}
}
}

View File

@@ -15,7 +15,7 @@
<div class="btnText">添加阶段</div>
</div>
<div class="maincon" style="background-color: #fff">
<div class="item" v-for="item in level" :key="item.id">
<div class="item" :class="isactive == index && isActive == true ? 'bgcactive' : '' " v-for="(item , index ) in level" @click="changebgc(index)" :key="item.id">
<div class="itemle">
<div class="tit">{{ item.tit }}</div>
<div class="name">{{ item.name }}</div>
@@ -340,11 +340,6 @@
display: flex;
align-items: center;
justify-content: space-between;
background: linear-gradient(
0deg,
rgba(78, 166, 255, 0) 0%,
rgba(78, 166, 255, 0.2) 100%
);
"
>
<div class="headerLeft" style="margin-left: 32px">
@@ -845,6 +840,8 @@ export default {
cC: false,
cancelModal: false, //确认取消阶段弹窗
deleteModal: false, //确认删除弹窗
isactive: -1,
isActive:false,
});
const selectProjectName = (value, index) => {
console.log("value", value, index);
@@ -1066,6 +1063,10 @@ export default {
const closeDelete = () => {
state.deleteModal = false;
};
const changebgc = (index) => {
state.isactive = index;
state.isActive = !state.isActive;
}
return {
...toRefs(state),
selectProjectName,
@@ -1095,6 +1096,7 @@ export default {
closeCancel,
showDelete,
closeDelete,
changebgc,
};
},
};
@@ -1222,6 +1224,13 @@ export default {
.ant-modal {
.ant-modal-body {
padding: 0 !important;
.modalHeader {
background: linear-gradient(
0deg,
rgba(78, 166, 255, 0) 0%,
rgba(78, 166, 255, 0.2) 100%
);
}
.modalMain {
.ant-input-textarea-show-count {
position: relative;
@@ -1518,6 +1527,10 @@ export default {
right: 16px;
}
}
.bgcactive{
opacity:1;
transition:all .5s;
}
}
}
}

View File

@@ -56,6 +56,7 @@
<div class="second">
<div
class="taskbox"
@click="totask"
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"
>
<div class="leftt">
@@ -74,6 +75,7 @@
</div>
<div
class="taskbox"
@click="tostudent"
style="background: linear-gradient(180deg, #ddeaff, #f0f8fe)"
>
<div class="leftt">
@@ -214,13 +216,13 @@
<div class="onerow">
<div class="taskmain">任务大纲</div>
<button class="btn" @click="showFaceIn">批量面授报名</button>
<router-link to="/taskadd" class="edit">
<button to="/taskadd" class="edit">
<img
class="editimg"
src="../../assets/images/projectadd/edit.png"
/>
<span class="editext">编辑</span>
</router-link>
</button>
</div>
<!-- <div class="taskSyllabus">
<a-collapse v-model:activeKey="taskSyllabusActive" accordion>
@@ -351,7 +353,7 @@
<div
class="operation"
style="cursor: pointer"
@click="showAA"
@click="showAA(item.course)"
:style="{
display:
item.course === '直播' || item.course === '活动'
@@ -375,6 +377,10 @@
@click="
item.course === '面授'
? showCopyModal(item.course)
: item.course === '直播'
? showzhibModal(item.course)
: item.course === '活动'
? showhuodModal(item.course)
: null
"
>
@@ -409,11 +415,12 @@
</a-collapse-panel>
</a-collapse>
<!-- 无数据创建任务 -->
<div
<router-link
to="/taskadd"
class="taskbox"
style="
background: linear-gradient(180deg, #ddeaff, #f0f8fe);
display: none;
display: block;
"
>
<div class="leftt">
@@ -429,7 +436,7 @@
创建任务
</div>
<div class="centermain">点击创建项目任务</div>
</div>
</router-link>
<!-- 无数据创建任务 -->
</div>
<div style="display: flex; height: 20px"></div>
@@ -451,7 +458,7 @@
"
>
<div class="groupname" style="width: 42px">姓名</div>
<a-input v-model:value="value" placeholder="请输入姓名" />
<a-input v-model:value="valuestun" placeholder="请输入姓名" />
</div>
<div
style="
@@ -463,7 +470,7 @@
>
<div class="groupname">小组名称</div>
<a-input
v-model:value="value"
v-model:value="valuestug"
placeholder="请输入小组名称"
/>
</div>
@@ -477,7 +484,7 @@
>
<div class="groupname" style="width: 42px">部门</div>
<a-select
v-model:value="value"
v-model:value="valuestub"
placeholder="请选择部门"
/>
</div>
@@ -490,7 +497,7 @@
>
<div class="groupname" style="width: 42px">学员</div>
<a-select
v-model:value="value"
v-model:value="valuegood"
placeholder="是否为优秀学员"
:options="goodstuList"
/>
@@ -551,6 +558,9 @@
onChange: onSelectChange,
}"
/>
<div class="nostu" style="display: block">
<div class="nostuimg"></div>
</div>
<div class="pa">
<a-pagination
showSizeChanger="true"
@@ -569,7 +579,7 @@
<div class="groupleft">
<div class="groupname">小组名称</div>
<a-input
v-model:value="value"
v-model:value="valuestugn"
placeholder="请输入小组名称"
/>
</div>
@@ -1024,7 +1034,7 @@
<!-- 面授学员抽屉 -->
<face-stu v-model:FSvisible="FSvisible" />
<!-- 活动考勤抽屉 -->
<active-attendance v-model:AAvisible="AAvisible" />
<active-attendance v-model:AAvisible="AAvisible" :title="showkaoqinText" />
<!-- 作业管理抽屉 -->
<work-manage v-model:Wvisible="Wvisible" />
<!-- 考试管理抽屉 -->
@@ -1152,7 +1162,7 @@
<div class="inname">小组名称:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="valueaddg"
placeholder="请输入小组名称"
style="border-radius: 8px; height: 40px"
/>
@@ -1168,7 +1178,7 @@
<div class="inname">小组长:</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="valueaddm"
placeholder="请输入小组长"
style="border-radius: 8px; height: 40px"
/>
@@ -1190,12 +1200,13 @@
:closable="close"
wrapClassName="canclestu"
centered="true"
@cancel="closeModal1"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<div class="icon1"></div>
<span>提示</span>
</div>
<div class="body">
@@ -1214,6 +1225,38 @@
</a-modal>
</div>
<!-- 取消学员弹窗 -->
<!-- 优秀学员弹窗 -->
<div>
<a-modal
v-model:visible="canclestu1"
:footer="null"
:closable="close"
wrapClassName="canclestu1"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon1"></div>
<span>提示</span>
</div>
<div class="body">
<span>您是否取消此学员优学员称号</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="closeModal3">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="closeModal3">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
<!-- 取消学员弹窗 -->
<!-- 编辑弹窗 -->
<div>
<a-modal
@@ -1448,6 +1491,7 @@
:closable="closableQR"
wrapClassName="DelModal"
style="margin-top: 400px"
@cancel="delete_exit"
>
<div class="delete" :style="{ display: delete_hs ? 'block' : 'none' }">
<div class="del_header"></div>
@@ -1501,6 +1545,62 @@
</div>
</div>
</a-modal>
<!-- 直播管理二维码 -->
<a-modal
v-model:visible="zhibModal"
:footer="null"
:closable="closeCopy"
wrapClassName="facemanageModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>直播管理</span>
<div class="close_exit" @click="closezhibModal"></div>
</div>
<div class="body">
<div><img src="../../assets/images/taskpage/erweima.png" /></div>
</div>
<div class="footerr">
<div class="onload">下载二维码</div>
<div class="onloadpx">200*200</div>
<div class="onloadpx">400*400</div>
<div class="onloadpx">800*800</div>
</div>
</div>
</div>
</a-modal>
<!-- 活动管理二维码 -->
<a-modal
v-model:visible="huodModal"
:footer="null"
:closable="closeCopy"
wrapClassName="facemanageModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>活动管理</span>
<div class="close_exit" @click="closehuodModal"></div>
</div>
<div class="body">
<div><img src="../../assets/images/taskpage/erweima.png" /></div>
</div>
<div class="footerr">
<div class="onload">下载二维码</div>
<div class="onloadpx">200*200</div>
<div class="onloadpx">400*400</div>
<div class="onloadpx">800*800</div>
</div>
</div>
</div>
</a-modal>
</div>
</template>
<script>
@@ -1639,9 +1739,14 @@ export default {
delete_hs: false, //删除弹窗
copyModal: false, //面授二维码弹窗
closeCopy: false, //面授二维码关闭图标
zhibModal: false, //直播二维码弹窗
huodModal: false, //活动二维码弹窗
pubproject: false,
stugroup: false,
canclestu: false,
canclestu1: false,
checked: false,
checked1: true,
checked2: false,
@@ -1649,12 +1754,18 @@ export default {
checkedd2: false, //设置按钮2
radioV1: "",
radioV2: "",
activeKey: "3",
activeKey1: "8",
activeKey: "1",//1:概览 2.任务...
activeKey1: "8",//8:学员管理 9小组管理
activeKey2: "3",
inputValue: 5,
inputValue2: 5,
inputValue3: 5,
valueaddm: "",//创建小组输入小组长
valueaddg:"",//创建小组输入名称
valuestun:"",//学员管理姓名
valuegood:"",
valuestub:"",//学员管理部门
valuestug:"",//学员管理小组名称
valueName: "", //排行榜输入姓名
valueDate: "", //排行榜输入日期
noticeChecked: true,
@@ -2109,6 +2220,8 @@ export default {
showTimeText: "",
//考试、测评页面传递参数
showTestText: "",
//直播、活动页面传递参数
showkaoqinText: "",
});
//学员学员管理渲染
@@ -2184,6 +2297,13 @@ export default {
};
getTableDate();
const totask = () => {
state.activeKey = "2";
};
const tostudent = () => {
state.activeKey = "3";
state.activeKey1 = "8";
};
const showModal = () => {
state.pubproject = true;
};
@@ -2196,6 +2316,12 @@ export default {
const closeModal1 = () => {
state.canclestu = false;
};
const showModal3 = () => {
state.canclestu1 = true;
};
const closeModal3 = () => {
state.canclestu1 = false;
};
const showModal2 = () => {
state.stugroup = true;
};
@@ -2212,10 +2338,10 @@ export default {
state.TaskFaceImpStuvisible = true;
};
//新增
const showTime = (course, name) => {
const showTime = (course) => {
console.log("点击管理");
state.visible = true;
state.showTimeText = "【" + course + "】" + name;
state.showTimeText = "【" + course + "】" + "管理";
// console.log("state.showTimeText", state.showTimeText);
};
//新增
@@ -2238,8 +2364,9 @@ export default {
state.Lvisible = true;
};
//活动考勤的抽屉
const showAA = () => {
const showAA = (course) => {
state.AAvisible = true;
state.showkaoqinText = "【" + course + "】" + "考勤";
};
//作业管理的抽屉
const showWork = () => {
@@ -2286,6 +2413,18 @@ export default {
state.radioV2 = "";
}
};
const showzhibModal = () => {
state.zhibModal = true;
};
const showhuodModal = () => {
state.huodModal = true;
};
const closezhibModal = () => {
state.zhibModal = false;
};
const closehuodModal = () => {
state.huodModal = false;
};
//学员管理列表操作
const studentData = () => {
@@ -2305,7 +2444,7 @@ export default {
if (value.excellent === false) {
state.canclestu = true;
} else if (value.excellent === true) {
state.canclestu = false;
state.canclestu1 = true;
}
}}
>
@@ -2469,12 +2608,16 @@ export default {
};
return {
...toRefs(state),
totask,
tostudent,
showModal,
closeModal,
showModal1,
closeModal1,
showModal2,
closeModal2,
showModal3,
closeModal3,
showCopyModal,
closeCopyModal,
showTime,
@@ -2498,6 +2641,10 @@ export default {
cloradio2,
studentColumns,
delete_exit,
showzhibModal,
showhuodModal,
closehuodModal,
closezhibModal,
};
},
};
@@ -2720,7 +2867,123 @@ export default {
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon {
.icon1 {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/QR.png);
background-size: 100% 100%;
}
.close_exit {
position: absolute;
right: 42px;
cursor: pointer;
width: 20px;
height: 20px;
background-image: url(@/assets/images/coursewareManage/close.png);
background-size: 100% 100%;
}
}
.body {
width: 100%;
margin: 34px auto 56px auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
// background-color: red;
position: relative;
.back {
position: absolute;
top: 30px;
font-size: 12px;
font-weight: 400;
color: #666666;
}
}
.del_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.del_btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn1 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
margin-right: 14px;
}
.btn2 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
}
.canclestu1 {
.ant-modal {
width: 424px !important;
height: 258px !important;
.ant-modal-content {
width: 424px !important;
height: 258px !important;
.ant-modal-close {
margin-right: 18px;
margin-top: 5px;
}
.ant-modal-body {
width: 424px !important;
height: 258px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 424px;
height: 258px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon1 {
width: 16px;
height: 16px;
margin-right: 10px;
@@ -2791,7 +3054,6 @@ export default {
}
}
}
.doublepro {
.ant-modal {
.ant-modal-body {
@@ -3194,6 +3456,7 @@ export default {
right: 38px;
top: 0;
color: #409eff;
background: #ffffff;
width: 100px;
height: 40px;
border: 1px solid #409eff;
@@ -3202,7 +3465,6 @@ export default {
width: 15px;
height: 15px;
margin-top: -2px;
margin-left: 25px;
margin-right: 5px;
}
.editext {
@@ -3744,6 +4006,16 @@ export default {
> td {
background: rgba(250, 250, 250, 1);
}
.nostu {
width: 100%;
.nostuimg {
margin: 75px auto;
width: 412px;
height: 212px;
background-image: url(@/assets/images/taskpage/nostu.png);
background-size: 100% 100%;
}
}
.pa {
// left: 0;
margin-top: 15px;

View File

@@ -148,7 +148,7 @@ export default defineComponent({
<router-link to="/libraryadd">
<div class="jc">
查看{" "}
<span style="color:#E9E9E9;margin-left:8px;">|</span>
<span style="color:#E9E9E9;margin-left:15px;">|</span>
</div>
</router-link>
</div>
@@ -164,14 +164,14 @@ export default defineComponent({
<div class="ops1">
<div class="jc">
发布
<span style="color:#E9E9E9;margin-left:8px;">|</span>
<span style="color:#E9E9E9;margin-left:15px;">|</span>
</div>
</div>
<div class="ops2">
<router-link to="/libraryadd">
<div class="jc">
查看
<span style="color:#E9E9E9;margin-left:8px;">|</span>
<span style="color:#E9E9E9;margin-left:15px;">|</span>
</div>
</router-link>
</div>
@@ -237,6 +237,7 @@ export default defineComponent({
align-items: center;
justify-content: center;
margin-left: 14px;
cursor: pointer;
flex-shrink: 0;
.search {
background-size: 100%;

View File

@@ -51,7 +51,7 @@
:data-source="dataSource"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
:scroll="{ x: 1500, y: 800 }"
:scroll="{ x: 1500}"
@expand="expandTable"
:pagination="false"
/>
@@ -108,31 +108,37 @@ export default {
columns: [
{
title: '姓名',
width: 50,
dataIndex: 'name',
key: 'name',
},
{
title: '部门',
width: 50,
dataIndex: 'department',
key: 'department',
},
{
width: 50,
title: '岗位',
dataIndex: 'post',
key: 'post',
},
{
title: '项目',
width: 50,
dataIndex: 'project',
key: 'project',
},
{
title: '学习路径',
width: 50,
dataIndex: 'learning',
key: 'learning',
},
{
title: '提交时间',
width: 50,
dataIndex: 'submit',
key: 'submit',
},

View File

@@ -105,7 +105,7 @@
<div class="inname">调研名称</div>
<div class="in">
<a-input
v-model:value="value"
v-model:value="valuen"
show-count
:maxlength="15"
style="border-radius: 8px"
@@ -262,6 +262,7 @@ export default {
tableDataTotal: 20,
pageSize: 10,
value1: " ",
valuen: "",
value2: ref(),
valueE: ref(" "),
valueEE: ref(" "),