修改环境变量

This commit is contained in:
Pengxiansen
2025-01-23 16:45:50 +08:00
10 changed files with 620 additions and 582 deletions

View File

@@ -7,6 +7,8 @@ VUE_APP_PIC_FOLDERID=1148997110156759040
VUE_APP_COURSE_FOLDERID=1298970611096760320 VUE_APP_COURSE_FOLDERID=1298970611096760320
# 教师节上传zip文件夹id # 教师节上传zip文件夹id
VUE_APP_TOOL_FOLDERID=1148996610925531136 VUE_APP_TOOL_FOLDERID=1148996610925531136
# 专业力必修API前缀
VUE_APP_BASE_API_GROWTH=/growth
VUE_APP_PROXY_URL=//u.boe.com/ VUE_APP_PROXY_URL=//u.boe.com/

View File

@@ -1,5 +1,5 @@
<template> <template>
<div @click="openDrawer"> <div @click="openDrawer()">
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer
@@ -11,9 +11,7 @@
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle"> <div class="headerTitle">{{ formData.id ? "编辑" : "添加" }}活动</div>
{{ taskIndex >= 0 ? "编辑" : "添加" }}活动
</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@@ -34,7 +32,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="formData.activityName" v-model:value="formData.info.activityName"
style="width: 400px; height: 40px; border-radius: 8px" style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入活动名称" placeholder="请输入活动名称"
maxlength="20" maxlength="20"
@@ -77,7 +75,7 @@
:precision="0" :precision="0"
style="width: 400px; height: 40px; border-radius: 8px" style="width: 400px; height: 40px; border-radius: 8px"
:placeholder="durationText" :placeholder="durationText"
v-model:value="formData.activityDuration" v-model:value="formData.info.activityDuration"
/> />
<span style="color: #999999; margin-left: 8px">分钟</span> <span style="color: #999999; margin-left: 8px">分钟</span>
</div> </div>
@@ -94,7 +92,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="formData.activityAddress" v-model:value="formData.info.activityAddress"
style="width: 400px; height: 40px; border-radius: 8px" style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入活动地点" placeholder="请输入活动地点"
maxlength="100" maxlength="100"
@@ -113,7 +111,7 @@
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea
v-model:value="formData.activityNotice" v-model:value="formData.info.activityNotice"
placeholder="请输入活动公告" placeholder="请输入活动公告"
allow-clear allow-clear
:rows="6" :rows="6"
@@ -128,7 +126,7 @@
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea
v-model:value="formData.activityExplain" v-model:value="formData.info.activityExplain"
placeholder="请输入活动说明" placeholder="请输入活动说明"
allow-clear allow-clear
:rows="6" :rows="6"
@@ -160,7 +158,7 @@
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
" "
v-model:value="formData.beforeSignIn" v-model:value="formData.info.beforeSignIn"
/> />
<span style="color: #999999; margin-left: 8px" <span style="color: #999999; margin-left: 8px"
>分钟允许签到</span >分钟允许签到</span
@@ -178,7 +176,7 @@
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
" "
v-model:value="formData.afterSignIn" v-model:value="formData.info.afterSignIn"
/> />
<span style="color: #999999; margin-left: 8px" <span style="color: #999999; margin-left: 8px"
>分钟允许签到</span >分钟允许签到</span
@@ -207,25 +205,29 @@ import { computed, defineEmits, defineProps, ref } from "vue";
import { Form, message } from "ant-design-vue"; import { Form, message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useResetRef } from "@/utils/useCommon"; import { useResetRef } from "@/utils/useCommon";
import { saveTask } from "@/api/growthpath";
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
taskList: [], // 选秀2 必修1
activeKey: String,
growId: String,
}); });
const visible = ref(false); const visible = ref(false);
const formData = useResetRef({ const formData = useResetRef({
activityName: "", info: {
activityNotice: "", activityName: "",
activityStartTime: "", activityNotice: "",
activityEndTime: "", activityStartTime: "",
activityDuration: "", activityEndTime: "",
activityAddress: "", activityDuration: "",
activityExplain: "", activityAddress: "",
beforeSignIn: "", activityExplain: "",
afterSignIn: "", beforeSignIn: "",
afterSignIn: "",
},
}); });
const emit = defineEmits({}); const emit = defineEmits(["refresh"]);
const taskIndex = ref(-1);
const dateTime = ref([]); const dateTime = ref([]);
const rulesRef = ref({ const rulesRef = ref({
activityName: [ activityName: [
@@ -266,7 +268,7 @@ const rulesRef = ref({
], ],
}); });
const { validate } = Form.useForm(formData, rulesRef); const { validate } = Form.useForm(formData.info, rulesRef);
const durationText = computed(() => const durationText = computed(() =>
dateTime.value?.length dateTime.value?.length
? dayjs(dateTime.value[1]).diff(dayjs(dateTime.value[0]), "minute") ? dayjs(dateTime.value[1]).diff(dayjs(dateTime.value[0]), "minute")
@@ -275,14 +277,14 @@ const durationText = computed(() =>
const closeDrawer = () => { const closeDrawer = () => {
visible.value = false; visible.value = false;
taskIndex.value = -1;
dateTime.value = []; dateTime.value = [];
formData.reset(); formData.reset();
formData.value.info = {};
}; };
function timeChange(time, timeStr) { function timeChange(time, timeStr) {
formData.value.activityStartTime = timeStr[0]; formData.value.info.activityStartTime = timeStr[0];
formData.value.activityEndTime = timeStr[1]; formData.value.info.activityEndTime = timeStr[1];
// formData.value.activityDuration || (formData.value.activityDuration = dayjs(timeStr[1]).diff(dayjs(timeStr[0]),'minute')) // formData.value.activityDuration || (formData.value.activityDuration = dayjs(timeStr[1]).diff(dayjs(timeStr[0]),'minute'))
} }
@@ -296,38 +298,40 @@ async function confirm() {
message.warning(errorFields[0].errors.join()); message.warning(errorFields[0].errors.join());
throw Error("数据校验不通过"); throw Error("数据校验不通过");
}); });
if (taskIndex.value === -1) { // 专业力ID
const list = props.taskList; formData.value.growthId = props.growId;
list.push({ // 任务类型
name: formData.value.activityName, formData.value.taskType = props.type;
type: props.type, // 必修/选修
duration: dayjs(formData.value.activityEndTime).diff( formData.value.type = props.activeKey;
formData.value.activityStartTime, // 任务名称
"minutes" formData.value.taskName = formData.value.info.activityName;
), // 任务时长
info: { ...formData.value }, formData.value.duration = durationText.value;
}); formData.value.info.activityDuration = durationText.value;
} else { saveTask(formData.value).then((res) => {
const data = props.taskList[taskIndex.value]; if (res.data.code == 200) {
data.name = formData.value.activityName; if (formData.value.id) {
data.info = { ...formData.value }; message.success("编辑成功");
data.duration = dayjs(formData.value.activityEndTime).diff( } else {
formData.value.activityStartTime, message.success("添加成功");
"minutes" }
); emit("refresh");
} } else {
emit("update:taskList", [...props.taskList]); message.error(res.msg);
closeDrawer(); }
closeDrawer();
});
return;
} }
function openDrawer(i, row) { function openDrawer(row) {
row && (formData.value = { ...row.info }); row && (formData.value = row);
row && row &&
(dateTime.value = [ (dateTime.value = [
dayjs(row.info.activityStartTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.activityStartTime, "YYYY-MM-DD HH:mm"),
dayjs(row.info.activityEndTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.activityEndTime, "YYYY-MM-DD HH:mm"),
]); ]);
i >= 0 && (taskIndex.value = i);
visible.value = true; visible.value = true;
} }

View File

@@ -1,297 +1,321 @@
<template> <template>
<div @click="openDrawer"> <div @click="openDrawer()">
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer
:visible="visible" :visible="visible"
class="drawerStyle growth-discuss" class="drawerStyle growth-discuss"
width="800" width="800"
placement="right" placement="right"
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">{{ taskIndex >= 0 ? "编辑" : "添加" }}讨论</div> <div class="headerTitle">{{ formData.id ? "编辑" : "添加" }}讨论</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@click="closeDrawer" @click="closeDrawer"
/> />
</div> </div>
<div class="contentMain"> <div class="contentMain">
<div class="main_left"> <div class="main_left">
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/>
</div>
<span style="margin-right: 3px">讨论名称</span>
</div>
<div class="btnbox">
<a-input
v-model:value="formData.discussName"
style="width: 424px; height: 32px"
placeholder="请输入讨论名称"
show-count
:maxlength="20"
/> />
</div> </div>
<span style="margin-right: 3px">讨论名称</span>
</div> </div>
<div class="main_item2"> <div class="btnbox">
<div class="signbox"> <a-input
<div class="sign"> v-model:value="formData.info.discussName"
<img style="width: 424px; height: 32px"
src="@/assets/images/coursewareManage/asterisk.png" placeholder="请输入讨论名称"
alt="" show-count
/> :maxlength="20"
</div> />
<span style="margin-right: 3px">讨论说明</span> </div>
</div> </div>
<div class="textarea"> <div class="main_item2">
<a-textarea <div class="signbox">
v-model:value="formData.discussExplain" <div class="sign">
placeholder="请输入讨论说明" <img
allow-clear src="@/assets/images/coursewareManage/asterisk.png"
:rows="6" alt=""
show-count
:maxlength="200"
/> />
</div> </div>
<span style="margin-right: 3px">讨论说明</span>
</div> </div>
<div class="main_item"> <div class="textarea">
<div class="signbox"> <a-textarea
<span style="margin-right: 3px">讨论设置</span> v-model:value="formData.info.discussExplain"
</div> placeholder="请输入讨论说明"
<div class="btnbox"> allow-clear
<a-checkbox v-model:checked="formData.discussSettings" @click="discussSettings">允许评论</a-checkbox> :rows="6"
</div> show-count
:maxlength="200"
/>
</div>
</div>
<div class="main_item">
<div class="signbox">
<span style="margin-right: 3px">讨论设置</span>
</div>
<div class="btnbox">
<a-checkbox
v-model:checked="formData.info.discussSettings"
@click="discussSettings"
>允许评论</a-checkbox
>
</div> </div>
</div> </div>
</div> </div>
<div class="main_btns">
<button class="btn2" @click="closeDrawer">取消</button>
<button class="btn2" @click="confirm">确定</button>
</div>
</div> </div>
</a-drawer> <div class="main_btns">
</template> <button class="btn2" @click="closeDrawer">取消</button>
<script setup> <button class="btn2" @click="confirm">确定</button>
import {defineEmits, defineProps, ref} from "vue"; </div>
import {Form, message} from "ant-design-vue"; </div>
import {useResetRef} from "@/utils/useCommon"; </a-drawer>
</template>
const props = defineProps({ <script setup>
type: Number, import { defineEmits, defineProps, ref } from "vue";
taskList: [] import { Form, message } from "ant-design-vue";
}) import { useResetRef } from "@/utils/useCommon";
const visible = ref(false) import { saveTask } from "@/api/growthpath";
const formData = useResetRef({discussName: '', discussExplain: '', discussSettings: true})
const emit = defineEmits({}) const props = defineProps({
const taskIndex = ref(-1); type: Number,
const dateTime = ref([]); // 选秀2 必修1
const rulesRef = ref({ activeKey: String,
discussName: [ growId: String,
{ });
required: true, const visible = ref(false);
message: '请输入讨论名称', const formData = useResetRef({
}, info: {
], discussName: "",
discussExplain: [ discussExplain: "",
{ discussSettings: true,
required: true, },
message: '请输入讨论说明', });
}, const emit = defineEmits(['refresh']);
], const dateTime = ref([]);
const rulesRef = ref({
discussName: [
{
required: true,
message: "请输入讨论名称",
},
],
discussExplain: [
{
required: true,
message: "请输入讨论说明",
},
],
});
const { validate } = Form.useForm(formData.info, rulesRef);
const closeDrawer = () => {
visible.value = false;
dateTime.value = [];
formData.reset();
formData.value.info = {};
};
async function confirm() {
await validate().catch(({ errorFields }) => {
message.warning(errorFields[0].errors.join());
throw Error("数据校验不通过");
}); });
// 专业力ID
const {validate} = Form.useForm(formData, rulesRef); formData.value.growthId = props.growId;
// 任务类型
const closeDrawer = () => { formData.value.taskType = props.type;
visible.value = false // 必修/选修
taskIndex.value = -1 formData.value.type = props.activeKey;
dateTime.value = [] // 任务名称
formData.reset() formData.value.taskName = formData.value.info.discussName;
}; saveTask(formData.value).then((res) => {
if (res.data.code == 200) {
async function confirm() { if (formData.value.id) {
await validate().catch(({errorFields}) => { message.success("编辑成功");
message.warning(errorFields[0].errors.join()); } else {
throw Error("数据校验不通过") message.success("添加成功");
}); }
if (taskIndex.value === -1) { emit("refresh");
const list = props.taskList
list.push({name: formData.value.discussName, type: props.type, info: {...formData.value}})
} else { } else {
const data = props.taskList[taskIndex.value] message.error(res.msg);
data.name = formData.value.discussName
data.info = {...formData.value}
} }
emit('update:taskList', [...props.taskList]) closeDrawer();
closeDrawer() });
} }
function openDrawer(i, row) { function openDrawer(row) {
console.log(i,row) row && (formData.value = row);
row && (formData.value = {...row.info}); row &&
(i >= 0) && (taskIndex.value = i); (formData.value.info.discussSettings =
row && (formData.value.discussSettings = row.info.discussSettings === "false" || row.info.discussSettings === false ? false : true); row.info.discussSettings === "false" || row.info.discussSettings === false
visible.value = true ? false
} : true);
visible.value = true;
const discussSettings = () => { }
formData.value.discussSettings = !formData.value.discussSettings;
} const discussSettings = () => {
formData.value.discussSettings = !formData.value.discussSettings;
defineExpose({openDrawer}) };
</script>
<style lang="scss"> defineExpose({ openDrawer });
.ant-table-striped :deep(.table-striped) td { </script>
background-color: #fafafa !important; <style lang="scss">
} .ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important;
.growth-discuss { }
.drawerMain {
.header { .growth-discuss {
height: 73px; .drawerMain {
border-bottom: 1px solid #e8e8e8; .header {
display: flex; height: 73px;
justify-content: space-between; border-bottom: 1px solid #e8e8e8;
align-items: center; display: flex;
flex-shrink: 0; justify-content: space-between;
align-items: center;
.headerTitle { flex-shrink: 0;
font-size: 18px;
font-weight: 600; .headerTitle {
color: #333333; font-size: 18px;
line-height: 25px; font-weight: 600;
margin-left: 24px; color: #333333;
} line-height: 25px;
margin-left: 24px;
} }
}
.contentMain {
display: flex; .contentMain {
justify-content: space-between; display: flex;
justify-content: space-between;
.main_left {
margin-top: 0px; .main_left {
padding-right: 30px; margin-top: 0px;
flex: 1; padding-right: 30px;
border-right: 1px solid #e8e8e8; flex: 1;
border-right: 1px solid #e8e8e8;
.main_item {
.main_item {
display: flex;
align-items: center;
margin-top: 32px;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex; display: flex;
justify-content: end;
align-items: center; align-items: center;
margin-top: 32px;
margin-bottom: 32px; .sign {
margin-right: 5px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.btnbox {
display: flex;
flex: 1;
align-items: center;
.ant-input {
height: 100%;
}
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
}
} }
} }
.main_item2 { .btnbox {
display: flex; display: flex;
align-items: flex-start; flex: 1;
margin-bottom: 32px; align-items: center;
.signbox { .ant-input {
width: 120px; height: 100%;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
} }
.textarea { .xkbtn {
width: 423px; cursor: pointer;
width: 130px;
.ant-input { height: 40px;
width: 100%; background: #4ea6ff;
} border-radius: 8px;
border: 0;
.ant-input-textarea-show-count { margin-right: 8px;
position: relative; color: #fff;
}
.ant-input-textarea-show-count::after {
position: absolute;
right: 10px;
bottom: 0px;
}
.ant-input {
border-radius: 8px;
}
} }
} }
} }
}
.main_item2 {
.main_btns { display: flex;
height: 72px; align-items: flex-start;
width: 100%; margin-bottom: 32px;
bottom: 0;
left: 0; .signbox {
display: flex; width: 120px;
align-items: center; display: flex;
justify-content: center; justify-content: end;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16); align-items: center;
.btn1 { .sign {
width: 100px; margin-right: 5px;
height: 40px; }
border: 1px solid #4ea6ff; }
border-radius: 8px;
color: #4ea6ff; .textarea {
background-color: #fff; width: 423px;
cursor: pointer;
} .ant-input {
width: 100%;
.btn2 { }
cursor: pointer;
width: 100px; .ant-input-textarea-show-count {
height: 40px; position: relative;
background: #4ea6ff; }
border-radius: 8px;
border: 0; .ant-input-textarea-show-count::after {
margin-left: 15px; position: absolute;
color: #fff; right: 10px;
bottom: 0px;
}
.ant-input {
border-radius: 8px;
}
}
} }
} }
} }
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
} }
</style> }
</style>

View File

@@ -1,5 +1,5 @@
<template> <template>
<div @click="openDrawer"> <div @click="openDrawer()">
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer
@@ -35,7 +35,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="formData.evaluationName" v-model:value="formData.info.evaluationName"
style="width: 400px; height: 40px; border-radius: 8px" style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入测评名称" placeholder="请输入测评名称"
show-count show-count
@@ -55,16 +55,16 @@
</div> </div>
<div class="btnbox" @click="selectEval"> <div class="btnbox" @click="selectEval">
<button class="checkEval"> <button class="checkEval">
{{ formData.evaluationTypeName ? "修改" : "选择" }}测评 {{ formData.info.evaluationTypeName ? "修改" : "选择" }}测评
</button> </button>
<div <div
v-if="formData.evaluationTypeName" v-if="formData.info.evaluationTypeName"
style="margin-left: 20px" style="margin-left: 20px"
> >
<a-tag closable @close="delTag" color="processing"> <a-tag closable @close="delTag" color="processing">
<span style="font-size: 14px; line-height: 33px">{{ <span style="font-size: 14px; line-height: 33px">{{
formData.evaluationTypeName formData.info.evaluationTypeName
}}</span> }}</span>
</a-tag> </a-tag>
</div> </div>
@@ -94,7 +94,7 @@
<a-textarea <a-textarea
show-count show-count
:maxlength="200" :maxlength="200"
v-model:value="formData.evaluationExplain" v-model:value="formData.info.evaluationExplain"
placeholder="请输入测评说明" placeholder="请输入测评说明"
style="width: 400px" style="width: 400px"
allowClear allowClear
@@ -112,7 +112,7 @@
<div v-show="step == 2"> <div v-show="step == 2">
<EvList <EvList
:selectId="formData.evaluationTypeId" :selectId="formData.info.evaluationTypeId"
ref="EvListRef" ref="EvListRef"
@confirm="selectEvalConfirm" @confirm="selectEvalConfirm"
> >
@@ -127,17 +127,20 @@ import EvList from "./EvList.vue";
import { Form, message } from "ant-design-vue"; import { Form, message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useResetRef } from "@/utils/useCommon"; import { useResetRef } from "@/utils/useCommon";
import { saveTask } from "@/api/growthpath";
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
taskList: [], // 选秀2 必修1
activeKey: String,
growId: String,
}); });
// 步骤数 // 步骤数
const step = ref(1); const step = ref(1);
// 弹框标题 // 弹框标题
const title = computed(() => { const title = computed(() => {
if (step.value == 1) { if (step.value == 1) {
return taskIndex >= 0 ? "编辑测评" : "添加测评"; return formData.value.id ? "编辑测评" : "添加测评";
} else if (step.value == 2) { } else if (step.value == 2) {
return "选择测评"; return "选择测评";
} }
@@ -149,21 +152,22 @@ const selectEval = () => {
// 选择测评完毕 // 选择测评完毕
const selectEvalConfirm = (data) => { const selectEvalConfirm = (data) => {
step.value = step.value - 1; step.value = step.value - 1;
formData.value.evaluationTypeId = data.id; formData.value.info.evaluationTypeId = data.id;
formData.value.evaluationTypeName = data.title; formData.value.info.evaluationTypeName = data.title;
}; };
const visible = ref(false); const visible = ref(false);
const formData = useResetRef({ const formData = useResetRef({
evaluationName: "", info: {
evaluationTypeId: "", evaluationName: "",
evaluationTypeName: "", evaluationTypeId: "",
evaluationExplain: "", evaluationTypeName: "",
evaluationStartTime: "", evaluationExplain: "",
evaluationEndTime: "", evaluationStartTime: "",
evaluationEndTime: "",
},
}); });
const emit = defineEmits({}); const emit = defineEmits(["refresh"]);
const taskIndex = ref(-1);
const dateTime = ref([]); const dateTime = ref([]);
const rulesRef = ref({ const rulesRef = ref({
evaluationName: [ evaluationName: [
@@ -186,16 +190,16 @@ const rulesRef = ref({
], ],
}); });
const { validate } = Form.useForm(formData, rulesRef); const { validate } = Form.useForm(formData.info, rulesRef);
const closeDrawer = () => { const closeDrawer = () => {
if (step.value > 1) { if (step.value > 1) {
step.value = step.value - 1; step.value = step.value - 1;
} else { } else {
visible.value = false; visible.value = false;
taskIndex.value = -1;
dateTime.value = []; dateTime.value = [];
formData.reset(); formData.reset();
formData.value.info = {};
} }
}; };
@@ -208,8 +212,8 @@ const range = (start, end) => {
}; };
function timeChange(time, timeStr) { function timeChange(time, timeStr) {
formData.value.evaluationStartTime = timeStr[0]; formData.value.info.evaluationStartTime = timeStr[0];
formData.value.evaluationEndTime = timeStr[1]; formData.value.info.evaluationEndTime = timeStr[1];
} }
const disabledDate = (current) => { const disabledDate = (current) => {
@@ -223,8 +227,8 @@ const disabledRangeTime = () => ({
}); });
function delTag() { function delTag() {
formData.value.evaluationTypeId = ""; formData.value.info.evaluationTypeId = "";
formData.value.evaluationTypeName = ""; formData.value.info.evaluationTypeName = "";
} }
async function confirm() { async function confirm() {
@@ -232,38 +236,37 @@ async function confirm() {
message.warning(errorFields[0].errors.join()); message.warning(errorFields[0].errors.join());
throw Error("数据校验不通过"); throw Error("数据校验不通过");
}); });
if (taskIndex.value === -1) {
const list = props.taskList; // 专业力ID
list.push({ formData.value.growthId = props.growId;
name: formData.value.evaluationName, // 任务类型
duration: dayjs(formData.value.evaluationEndTime).diff( formData.value.taskType = props.type;
formData.value.evaluationStartTime, // 必修/选修
"minutes" formData.value.type = props.activeKey;
), // 任务名称
type: props.type, formData.value.taskName = formData.value.info.evaluationName;
info: { ...formData.value }, saveTask(formData.value).then((res) => {
}); if (res.data.code == 200) {
} else { if (formData.value.id) {
const data = props.taskList[taskIndex.value]; message.success("编辑成功");
data.name = formData.value.evaluationName; } else {
data.info = { ...formData.value }; message.success("添加成功");
data.duration = dayjs(formData.value.evaluationEndTime).diff( }
formData.value.evaluationStartTime, emit("refresh");
"minutes" } else {
); message.error(res.msg);
} }
emit("update:taskList", [...props.taskList]); closeDrawer();
closeDrawer(); });
} }
function openDrawer(i, row) { function openDrawer(row) {
row && (formData.value = { ...row.info }); row && (formData.value = row);
row && row &&
(dateTime.value = [ (dateTime.value = [
dayjs(row.info.evaluationStartTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.evaluationStartTime, "YYYY-MM-DD HH:mm"),
dayjs(row.info.evaluationEndTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.evaluationEndTime, "YYYY-MM-DD HH:mm"),
]); ]);
i >= 0 && (taskIndex.value = i);
visible.value = true; visible.value = true;
} }

View File

@@ -564,8 +564,9 @@ async function confirm() {
} else { } else {
message.error(res.msg); message.error(res.msg);
} }
closeDrawer();
}); });
closeDrawer();
} }
function openDrawer(row) { function openDrawer(row) {

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="growth-invist-root"> <div class="growth-invist-root">
<div class="contentMain drawerMain"> <div class="contentMain">
<div class="main_item"> <div class="main_item">
<div class="fi_input"> <div class="fi_input">
<a-input <a-input
@@ -66,7 +66,7 @@ import { saveTask } from "@/api/growthpath";
// import { useRouter } from "vue-router"; // import { useRouter } from "vue-router";
import { useRowsPage } from "@/api/request"; import { useRowsPage } from "@/api/request";
import { ASSESSMENT_PAGE } from "@/api/apis"; import { ASSESSMENT_PAGE } from "@/api/apis";
const emit = defineEmits(["confirm"]); const emit = defineEmits(["confirm",'update:id','update:name']);
const props = defineProps({ const props = defineProps({
id: String, id: String,
name: String, name: String,
@@ -168,6 +168,8 @@ const columns = ref([
]); ]);
async function confirm(record) { async function confirm(record) {
emit('update:id',record.id)
emit('update:name',record.assessmentName)
emit("confirm", record); emit("confirm", record);
} }
</script> </script>
@@ -180,121 +182,103 @@ async function confirm(record) {
width: 1300px !important; width: 1300px !important;
} }
.growth-invist-root { .growth-invist-root {
.drawerMain { .contentMain {
margin: 16px 0; margin: 16px 0;
.header { .main_item {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex; display: flex;
justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 20px;
.headerTitle { margin-top: 20px;
font-size: 18px; .fi_input {
font-weight: 600; margin-right: 20px;
color: #333333;
line-height: 25px;
margin-left: 24px;
} }
}
.contentMain { .btns {
.main_item { margin-right: 20px;
padding: 0px 26px 0px 26px;
height: 38px;
background: #4ea6ff;
border-radius: 8px;
//border: 1px solid rgba(64, 158, 255, 1);
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 20px; justify-content: center;
margin-top: 20px; margin-right: 14px;
.fi_input { flex-shrink: 0;
margin-right: 20px; cursor: pointer;
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
background-size: 100% 100%;
} }
.btns { .btnText {
margin-right: 20px; font-size: 14px;
padding: 0px 26px 0px 26px; font-weight: 400;
height: 38px; color: #ffffff;
background: #4ea6ff; line-height: 36px;
border-radius: 8px; margin-left: 5px;
//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 { .btnsn {
width: 15px; padding: 0px 26px 0px 26px;
height: 17px; height: 38px;
background-image: url("../../assets/images/courseManage/search0.png"); background: #ffffff;
background-size: 100% 100%; 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;
.btnText { .search {
font-size: 14px; width: 16px;
font-weight: 400; height: 18px;
color: #ffffff; background-image: url("../../assets/images/courseManage/reset1.png");
line-height: 36px; background-size: 100% 100%;
margin-left: 5px;
}
} }
.btnsn { .btnText {
padding: 0px 26px 0px 26px; font-size: 14px;
height: 38px; font-weight: 400;
background: #ffffff; color: #4ea6ff;
border-radius: 8px; line-height: 36px;
border: 1px solid rgba(64, 158, 255, 1); margin-left: 5px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png");
background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #4ea6ff;
line-height: 36px;
margin-left: 5px;
}
} }
} }
} }
.main_table { }
position: relative; .main_table {
padding-bottom: 80px; position: relative;
padding-bottom: 80px;
.ant-checkbox-wrapper { .ant-checkbox-wrapper {
align-items: center; align-items: center;
margin-top: -2px; margin-top: -2px;
} }
.ant-table-selection-column { .ant-table-selection-column {
padding: 0px !important; padding: 0px !important;
padding-left: 5px !important; padding-left: 5px !important;
} }
.ant-table-thead > tr > th { .ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1); background-color: rgba(239, 244, 252, 1);
} }
th.h { th.h {
background-color: #eff4fc !important; background-color: #eff4fc !important;
} }
.ant-table-tbody .ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td { > td {
background: #f6f9fd; background: #f6f9fd;
}
} }
} }
} }

View File

@@ -334,6 +334,7 @@ import { Form, message } from "ant-design-vue";
import { fileUp } from "../../api/indexEval"; import { fileUp } from "../../api/indexEval";
import { useResetRef } from "@/utils/useCommon"; import { useResetRef } from "@/utils/useCommon";
import { getCookieForName } from "@/api/method"; import { getCookieForName } from "@/api/method";
import { saveTask } from "@/api/growthpath";
const step = ref(1); const step = ref(1);
@@ -349,7 +350,9 @@ const getchanges = (mess) => {
}; };
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
taskList: [], // 选秀2 必修1
activeKey: String,
growId: String,
}); });
const visible = ref(false); const visible = ref(false);
const headers = { token: getCookieForName("token") }; const headers = { token: getCookieForName("token") };
@@ -373,7 +376,7 @@ const formData = useResetRef({
liveExplain: "", liveExplain: "",
}, },
}); });
const emit = defineEmits({}); const emit = defineEmits(['refresh']);
const dateTime = ref([]); const dateTime = ref([]);
const rulesRef = ref({ const rulesRef = ref({
@@ -442,12 +445,16 @@ const durationText = computed(() =>
); );
const closeDrawer = () => { const closeDrawer = () => {
imageUrl.value = ""; if (step.value > 1) {
visible.value = false; step.value = 1;
dateTime.value = []; } else {
formData.reset(); imageUrl.value = "";
formData.value.info = {}; visible.value = false;
resetFields(); dateTime.value = [];
formData.reset();
formData.value.info = {};
resetFields();
}
}; };
function timeChange(time, timeStr) { function timeChange(time, timeStr) {
formData.value.info.liveStartTime = timeStr[0]; formData.value.info.liveStartTime = timeStr[0];
@@ -464,35 +471,34 @@ async function confirm() {
message.warning(errorFields[0].errors.join()); message.warning(errorFields[0].errors.join());
throw Error("数据校验不通过"); throw Error("数据校验不通过");
}); });
console.log(formData.value);
return; // 专业力ID
if (taskIndex.value === -1) { formData.value.growthId = props.growId;
let list = props.taskList; // 任务类型
list.push({ formData.value.taskType = props.type;
name: formData.value.liveName, // 必修/选修
type: props.type, formData.value.type = props.activeKey;
info: { ...formData.value }, // 任务名称
duration: dayjs(formData.value.liveEndTime).diff( formData.value.taskName = formData.value.info.liveName;
formData.value.liveStartTime, // 任务时长
"minutes" formData.value.duration = durationText.value;
), formData.value.info.liveDuration = durationText.value;
}); saveTask(formData.value).then((res) => {
} else { if (res.data.code == 200) {
const data = props.taskList[taskIndex.value]; if (formData.value.id) {
data.name = formData.value.liveName; message.success("编辑成功");
data.info = { ...formData.value }; } else {
data.duration = dayjs(formData.value.liveEndTime).diff( message.success("添加成功");
formData.value.liveStartTime, }
"minutes" emit("refresh");
); } else {
console.log(data); message.error(res.msg);
} }
emit("update:taskList", [...props.taskList]); closeDrawer()
closeDrawer(); });
} }
function openDrawer(row) { function openDrawer(row) {
console.log(row);
row && (formData.value = row); row && (formData.value = row);
row && (dateTime.value = [row.info.liveStartTime, row.info.liveEndTime]); row && (dateTime.value = [row.info.liveStartTime, row.info.liveEndTime]);
row && (imageUrl.value = row.info.liveCover); row && (imageUrl.value = row.info.liveCover);
@@ -606,7 +612,7 @@ const beforeUpload = (file) => {
background: #4ea6ff; background: #4ea6ff;
border-radius: 8px; border-radius: 8px;
border: 0; border: 0;
margin-right: 8px; margin: 0 8px 0 0;
color: #fff; color: #fff;
} }
} }

View File

@@ -558,7 +558,9 @@ export default {
// 创建a标签并为其添加属性 // 创建a标签并为其添加属性
const link = document.createElement("a"); const link = document.createElement("a");
link.href = url; link.href = url;
link.download = "专业力必修-录入学员模版.xlsx"; link.download = `${
state.TASK_TYPE[props.datasource.taskType].name
}${props.datasource.taskName}.xlsx`;
// 触发点击事件执行下载 // 触发点击事件执行下载
document.body.appendChild(link); document.body.appendChild(link);
link.click(); link.click();

View File

@@ -1,5 +1,5 @@
<template> <template>
<div @click="openDrawer"> <div @click="openDrawer()">
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer
@@ -10,9 +10,7 @@
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle"> <div class="headerTitle">{{ formData.id ? "编辑" : "添加" }}外链</div>
{{ taskIndex >= 0 ? "编辑" : "添加" }}外链
</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@@ -33,7 +31,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="formData.linkName" v-model:value="formData.info.linkName"
style="width: 400px; height: 40px; border-radius: 8px" style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入外链名称" placeholder="请输入外链名称"
show-count show-count
@@ -53,7 +51,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="formData.linkAddress" v-model:value="formData.info.linkAddress"
style="width: 400px; height: 40px; border-radius: 8px" style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入链接" placeholder="请输入链接"
show-count show-count
@@ -67,7 +65,7 @@
</div> </div>
<div class="textarea" style="width: 400px"> <div class="textarea" style="width: 400px">
<a-textarea <a-textarea
v-model:value="formData.linkDescription" v-model:value="formData.info.linkDescription"
placeholder="请输入外链说明" placeholder="请输入外链说明"
allow-clear allow-clear
:rows="6" :rows="6"
@@ -89,19 +87,23 @@
import { defineEmits, defineProps, ref } from "vue"; import { defineEmits, defineProps, ref } from "vue";
import { Form, message } from "ant-design-vue"; import { Form, message } from "ant-design-vue";
import { useResetRef } from "@/utils/useCommon"; import { useResetRef } from "@/utils/useCommon";
import { saveTask } from "@/api/growthpath";
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
taskList: [], // 选秀2 必修1
activeKey: String,
growId: String,
}); });
const visible = ref(false); const visible = ref(false);
const formData = useResetRef({ const formData = useResetRef({
linkName: "", info: {
linkAddress: "", linkName: "",
linkDescription: "", linkAddress: "",
linkDescription: "",
},
}); });
const emit = defineEmits({}); const emit = defineEmits(['refresh']);
const taskIndex = ref(-1);
const dateTime = ref([]); const dateTime = ref([]);
const rulesRef = ref({ const rulesRef = ref({
linkName: [ linkName: [
@@ -119,13 +121,13 @@ const rulesRef = ref({
], ],
}); });
const { validate } = Form.useForm(formData, rulesRef); const { validate } = Form.useForm(formData.info, rulesRef);
const closeDrawer = () => { const closeDrawer = () => {
visible.value = false; visible.value = false;
taskIndex.value = -1;
dateTime.value = []; dateTime.value = [];
formData.reset(); formData.reset();
formData.info = {};
}; };
async function confirm() { async function confirm() {
@@ -133,25 +135,31 @@ async function confirm() {
message.warning(errorFields[0].errors.join()); message.warning(errorFields[0].errors.join());
throw Error("数据校验不通过"); throw Error("数据校验不通过");
}); });
if (taskIndex.value === -1) { // 专业力ID
const list = props.taskList; formData.value.growthId = props.growId;
list.push({ // 任务类型
name: formData.value.linkName, formData.value.taskType = props.type;
type: props.type, // 必修/选修
info: { ...formData.value }, formData.value.type = props.activeKey;
}); // 任务名称
} else { formData.value.taskName = formData.value.info.linkName;
const data = props.taskList[taskIndex.value]; saveTask(formData.value).then((res) => {
data.name = formData.value.linkName; if (res.data.code == 200) {
data.info = { ...formData.value }; if (formData.value.id) {
} message.success("编辑成功");
emit("update:taskList", [...props.taskList]); } else {
closeDrawer(); message.success("添加成功");
}
emit("refresh");
} else {
message.error(res.msg);
}
closeDrawer();
});
} }
function openDrawer(i, row) { function openDrawer(row) {
row && (formData.value = { ...row.info }); row && (formData.value = row);
i >= 0 && (taskIndex.value = i);
visible.value = true; visible.value = true;
} }

View File

@@ -1,5 +1,5 @@
<template> <template>
<div @click="openDrawer"> <div @click="openDrawer()">
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer
@@ -34,7 +34,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="formData.voteName" v-model:value="formData.info.voteName"
style="width: 424px; height: 40px; border-radius: 8px" style="width: 424px; height: 40px; border-radius: 8px"
placeholder="请输入投票任务名称" placeholder="请输入投票任务名称"
maxlength="20" maxlength="20"
@@ -75,11 +75,11 @@
<div class="btnbox"> <div class="btnbox">
<button class="xkbtn" @click="step = 2"> <button class="xkbtn" @click="step = 2">
{{ {{
formData.voteStemDtoList.length ? "编辑" : "创建" formData.info.voteStemDtoList.length ? "编辑" : "创建"
}}投票题干 }}投票题干
</button> </button>
<div v-if="formData.voteStemDtoList.length"> <div v-if="formData.info.voteStemDtoList.length">
<a-tag closable color="processing" @close="handleDel"> <a-tag closable color="processing" @close="handleDel">
<span style="font-size: 14px; line-height: 33px" <span style="font-size: 14px; line-height: 33px"
>删除投票题干</span >删除投票题干</span
@@ -94,7 +94,7 @@
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea
v-model:value="formData.voteExplain" v-model:value="formData.info.voteExplain"
placeholder="请输入投票说明" placeholder="请输入投票说明"
allow-clear allow-clear
:rows="6" :rows="6"
@@ -111,7 +111,7 @@
</template> </template>
<template v-if="step == 2"> <template v-if="step == 2">
<CreateVote <CreateVote
v-model:options="formData.voteStemDtoList" v-model:options="formData.info.voteStemDtoList"
@close="step = 1" @close="step = 1"
@confirm="step = 1" @confirm="step = 1"
> >
@@ -126,15 +126,17 @@ import CreateVote from "./CreateVote.vue";
import { Form, message } from "ant-design-vue"; import { Form, message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useResetRef } from "@/utils/useCommon"; import { useResetRef } from "@/utils/useCommon";
import { saveTask } from "@/api/growthpath";
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
taskList: [], // 选秀2 必修1
activeKey: String,
growId: String,
}); });
// 弹框标题 // 弹框标题
const title = computed(() => { const title = computed(() => {
if (step.value == 1) { if (step.value == 1) {
return taskIndex >= 0 ? "编辑投票任务" : "添加投票"; return formData.value.info ? "编辑投票任务" : "添加投票";
} else if (step.value == 2) { } else if (step.value == 2) {
return "创建投票题干"; return "创建投票题干";
} }
@@ -143,14 +145,15 @@ const title = computed(() => {
const step = ref(1); const step = ref(1);
const visible = ref(false); const visible = ref(false);
const formData = useResetRef({ const formData = useResetRef({
voteName: "", info: {
voteStartTime: "", voteName: "",
voteEndTime: "", voteStartTime: "",
voteStemDtoList: [], voteEndTime: "",
voteExplain: "", voteStemDtoList: [],
voteExplain: "",
},
}); });
const emit = defineEmits({}); const emit = defineEmits(["refresh"]);
const taskIndex = ref(-1);
const dateTime = ref([]); const dateTime = ref([]);
const rulesRef = ref({ const rulesRef = ref({
voteName: [ voteName: [
@@ -179,22 +182,24 @@ const rulesRef = ref({
], ],
}); });
const { validate } = Form.useForm(formData, rulesRef); const { validate } = Form.useForm(formData.info, rulesRef);
// 关闭弹窗 // 关闭弹窗
const closeDrawer = () => { const closeDrawer = () => {
if (step.value > 1) { if (step.value > 1) {
step.value = step.value - 1; step.value = step.value - 1;
} else { } else {
visible.value = false; visible.value = false;
taskIndex.value = -1;
dateTime.value = []; dateTime.value = [];
formData.reset(); formData.reset();
formData.value.info = {
voteStemDtoList:[]
};
} }
}; };
function timeChange(time, timeStr) { function timeChange(time, timeStr) {
formData.value.voteStartTime = timeStr[0]; formData.value.info.voteStartTime = timeStr[0];
formData.value.voteEndTime = timeStr[1]; formData.value.info.voteEndTime = timeStr[1];
} }
const disabledDate = (current) => { const disabledDate = (current) => {
@@ -206,43 +211,42 @@ async function confirm() {
message.warning(errorFields[0].errors.join()); message.warning(errorFields[0].errors.join());
throw Error("数据校验不通过"); throw Error("数据校验不通过");
}); });
if (taskIndex.value === -1) {
const list = props.taskList; // 专业力ID
list.push({ formData.value.growthId = props.growId;
name: formData.value.voteName, // 任务类型
type: props.type, formData.value.taskType = props.type;
duration: dayjs(formData.value.voteEndTime).diff( // 必修/选修
formData.value.voteStartTime, formData.value.type = props.activeKey;
"minutes" // 任务名称
), formData.value.taskName = formData.value.info.voteName;
info: { ...formData.value }, saveTask(formData.value).then((res) => {
}); if (res.data.code == 200) {
} else { if (formData.value.id) {
const data = props.taskList[taskIndex.value]; message.success("编辑成功");
data.name = formData.value.voteName; } else {
data.info = { ...formData.value }; message.success("添加成功");
data.duration = dayjs(formData.value.voteEndTime).diff( }
formData.value.voteStartTime, emit("refresh");
"minutes" } else {
); message.error(res.msg);
} }
emit("update:taskList", [...props.taskList]); closeDrawer();
closeDrawer(); });
} }
function openDrawer(i, row) { function openDrawer(row) {
row && (formData.value = { ...row.info }); row && (formData.value = row);
row && row &&
(dateTime.value = [ (dateTime.value = [
dayjs(row.info.voteStartTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.voteStartTime, "YYYY-MM-DD HH:mm"),
dayjs(row.info.voteEndTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.voteEndTime, "YYYY-MM-DD HH:mm"),
]); ]);
i >= 0 && (taskIndex.value = i);
visible.value = true; visible.value = true;
} }
function handleDel() { function handleDel() {
formData.value.voteStemDtoList = []; formData.value.info.voteStemDtoList = [];
} }
defineExpose({ openDrawer }); defineExpose({ openDrawer });