Files
fe-manage/src/components/growthpath/GrowthDiscuss.vue
Pengxiansen 76a7070020 提交
2025-02-24 20:24:27 +08:00

322 lines
7.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div @click="openDrawer()">
<slot></slot>
</div>
<a-drawer
:visible="visible"
class="drawerStyle growth-discuss"
width="800"
placement="right"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">{{ formData.id ? "编辑" : "添加" }}讨论</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="contentMain">
<div class="main_left">
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">讨论名称</span>
</div>
<div class="btnbox">
<a-input
v-model:value="formData.info.discussName"
style="width: 424px; height: 32px"
placeholder="请输入讨论名称"
show-count
:maxlength="20"
/>
</div>
</div>
<div class="main_item2">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">讨论说明</span>
</div>
<div class="textarea">
<a-textarea
v-model:value="formData.info.discussExplain"
placeholder="请输入讨论说明"
allow-clear
:rows="6"
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 class="main_btns">
<button class="btn2" @click="closeDrawer">取消</button>
<button class="btn2" @click="confirm">确定</button>
</div>
</div>
</a-drawer>
</template>
<script setup>
import { defineEmits, defineProps, ref } from "vue";
import { Form, message } from "ant-design-vue";
import { useResetRef } from "@/utils/useCommon";
import { saveTask } from "@/api/growthpath";
const props = defineProps({
type: Number,
// 选秀2 必修1
activeKey: String,
growId: String,
});
const visible = ref(false);
const formData = useResetRef({
info: {
discussName: "",
discussExplain: "",
discussSettings: true,
},
});
const emit = defineEmits(["refresh"]);
const dateTime = ref([]);
const rulesRef = ref({
discussName: [
{
required: true,
message: "请输入讨论名称",
},
],
discussExplain: [
{
required: true,
message: "请输入讨论说明",
},
],
});
let validate = Form.useForm(formData.value.info, rulesRef).validate
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
formData.value.growthId = props.growId;
// 任务类型
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 {
message.success("添加成功");
}
emit("refresh");
} else {
message.error(res.msg);
}
closeDrawer();
});
}
function openDrawer(row) {
row && (formData.value = row);
row &&
(formData.value.info.discussSettings =
row.info.discussSettings === "false" || row.info.discussSettings === false
? false
: true);
row && (validate = Form.useForm(formData.value.info, rulesRef).validate);
visible.value = true;
}
const discussSettings = () => {
formData.value.discussSettings = !formData.value.discussSettings;
};
defineExpose({ openDrawer });
</script>
<style lang="scss">
.ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important;
}
.growth-discuss {
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
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;
}
}
.contentMain {
display: flex;
justify-content: space-between;
.main_left {
margin-top: 0px;
padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;
.main_item {
display: flex;
align-items: center;
margin-top: 32px;
margin-bottom: 32px;
.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 {
display: flex;
align-items: flex-start;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.textarea {
width: 423px;
.ant-input {
width: 100%;
}
.ant-input-textarea-show-count {
position: relative;
}
.ant-input-textarea-show-count::after {
position: absolute;
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>