修改环境变量

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,13 +205,17 @@ 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({
info: {
activityName: "", activityName: "",
activityNotice: "", activityNotice: "",
activityStartTime: "", activityStartTime: "",
@@ -223,9 +225,9 @@ const formData = useResetRef({
activityExplain: "", activityExplain: "",
beforeSignIn: "", beforeSignIn: "",
afterSignIn: "", 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;
saveTask(formData.value).then((res) => {
if (res.data.code == 200) {
if (formData.value.id) {
message.success("编辑成功");
} else { } else {
const data = props.taskList[taskIndex.value]; message.success("添加成功");
data.name = formData.value.activityName; }
data.info = { ...formData.value }; emit("refresh");
data.duration = dayjs(formData.value.activityEndTime).diff( } else {
formData.value.activityStartTime, message.error(res.msg);
"minutes"
);
} }
emit("update:taskList", [...props.taskList]);
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,5 +1,5 @@
<template> <template>
<div @click="openDrawer"> <div @click="openDrawer()">
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer
@@ -10,7 +10,7 @@
> >
<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"
@@ -31,7 +31,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="formData.discussName" v-model:value="formData.info.discussName"
style="width: 424px; height: 32px" style="width: 424px; height: 32px"
placeholder="请输入讨论名称" placeholder="请输入讨论名称"
show-count show-count
@@ -51,7 +51,7 @@
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea
v-model:value="formData.discussExplain" v-model:value="formData.info.discussExplain"
placeholder="请输入讨论说明" placeholder="请输入讨论说明"
allow-clear allow-clear
:rows="6" :rows="6"
@@ -65,7 +65,11 @@
<span style="margin-right: 3px">讨论设置</span> <span style="margin-right: 3px">讨论设置</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-checkbox v-model:checked="formData.discussSettings" @click="discussSettings">允许评论</a-checkbox> <a-checkbox
v-model:checked="formData.info.discussSettings"
@click="discussSettings"
>允许评论</a-checkbox
>
</div> </div>
</div> </div>
</div> </div>
@@ -76,82 +80,103 @@
</div> </div>
</div> </div>
</a-drawer> </a-drawer>
</template> </template>
<script setup> <script setup>
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,
const visible = ref(false) growId: String,
const formData = useResetRef({discussName: '', discussExplain: '', discussSettings: true}) });
const emit = defineEmits({}) const visible = ref(false);
const taskIndex = ref(-1); const formData = useResetRef({
const dateTime = ref([]); info: {
const rulesRef = ref({ discussName: "",
discussExplain: "",
discussSettings: true,
},
});
const emit = defineEmits(['refresh']);
const dateTime = ref([]);
const rulesRef = ref({
discussName: [ discussName: [
{ {
required: true, required: true,
message: '请输入讨论名称', message: "请输入讨论名称",
}, },
], ],
discussExplain: [ discussExplain: [
{ {
required: true, required: true,
message: '请输入讨论说明', message: "请输入讨论说明",
}, },
], ],
}); });
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.value.info = {};
}; };
async function confirm() { async function confirm() {
await validate().catch(({errorFields}) => { await validate().catch(({ errorFields }) => {
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.discussName, type: props.type, info: {...formData.value}}) // 任务类型
formData.value.taskType = props.type;
// 必修/选修
formData.value.type = props.activeKey;
// 任务名称
formData.value.taskName = formData.value.info.discussName;
saveTask(formData.value).then((res) => {
if (res.data.code == 200) {
if (formData.value.id) {
message.success("编辑成功");
} else { } else {
const data = props.taskList[taskIndex.value] message.success("添加成功");
data.name = formData.value.discussName
data.info = {...formData.value}
} }
emit('update:taskList', [...props.taskList]) emit("refresh");
closeDrawer() } else {
message.error(res.msg);
} }
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 = () => { const discussSettings = () => {
formData.value.discussSettings = !formData.value.discussSettings; formData.value.discussSettings = !formData.value.discussSettings;
} };
defineExpose({openDrawer}) defineExpose({ openDrawer });
</script> </script>
<style lang="scss"> <style lang="scss">
.ant-table-striped :deep(.table-striped) td { .ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important; background-color: #fafafa !important;
} }
.growth-discuss { .growth-discuss {
.drawerMain { .drawerMain {
.header { .header {
height: 73px; height: 73px;
@@ -292,6 +317,5 @@
} }
} }
} }
} }
</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({
info: {
evaluationName: "", evaluationName: "",
evaluationTypeId: "", evaluationTypeId: "",
evaluationTypeName: "", evaluationTypeName: "",
evaluationExplain: "", evaluationExplain: "",
evaluationStartTime: "", evaluationStartTime: "",
evaluationEndTime: "", 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) {
if (formData.value.id) {
message.success("编辑成功");
} else { } else {
const data = props.taskList[taskIndex.value]; message.success("添加成功");
data.name = formData.value.evaluationName; }
data.info = { ...formData.value }; emit("refresh");
data.duration = dayjs(formData.value.evaluationEndTime).diff( } else {
formData.value.evaluationStartTime, message.error(res.msg);
"minutes"
);
} }
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,25 +182,8 @@ async function confirm(record) {
width: 1300px !important; width: 1300px !important;
} }
.growth-invist-root { .growth-invist-root {
.drawerMain {
margin: 16px 0;
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
}
}
.contentMain { .contentMain {
margin: 16px 0;
.main_item { .main_item {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -296,6 +281,5 @@ async function confirm(record) {
background: #f6f9fd; background: #f6f9fd;
} }
} }
}
} }
</style> </style>

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 = () => {
if (step.value > 1) {
step.value = 1;
} else {
imageUrl.value = ""; imageUrl.value = "";
visible.value = false; visible.value = false;
dateTime.value = []; dateTime.value = [];
formData.reset(); formData.reset();
formData.value.info = {}; formData.value.info = {};
resetFields(); 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) => {
if (res.data.code == 200) {
if (formData.value.id) {
message.success("编辑成功");
} else { } else {
const data = props.taskList[taskIndex.value]; message.success("添加成功");
data.name = formData.value.liveName;
data.info = { ...formData.value };
data.duration = dayjs(formData.value.liveEndTime).diff(
formData.value.liveStartTime,
"minutes"
);
console.log(data);
} }
emit("update:taskList", [...props.taskList]); emit("refresh");
closeDrawer(); } else {
message.error(res.msg);
}
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({
info: {
linkName: "", linkName: "",
linkAddress: "", linkAddress: "",
linkDescription: "", 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;
}); // 任务名称
formData.value.taskName = formData.value.info.linkName;
saveTask(formData.value).then((res) => {
if (res.data.code == 200) {
if (formData.value.id) {
message.success("编辑成功");
} else { } else {
const data = props.taskList[taskIndex.value]; message.success("添加成功");
data.name = formData.value.linkName; }
data.info = { ...formData.value }; emit("refresh");
} 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);
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({
info: {
voteName: "", voteName: "",
voteStartTime: "", voteStartTime: "",
voteEndTime: "", voteEndTime: "",
voteStemDtoList: [], voteStemDtoList: [],
voteExplain: "", 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) {
if (formData.value.id) {
message.success("编辑成功");
} else { } else {
const data = props.taskList[taskIndex.value]; message.success("添加成功");
data.name = formData.value.voteName; }
data.info = { ...formData.value }; emit("refresh");
data.duration = dayjs(formData.value.voteEndTime).diff( } else {
formData.value.voteStartTime, message.error(res.msg);
"minutes"
);
} }
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 });