Files
fe-manage/src/components/drawers/CreVote.vue

492 lines
13 KiB
Vue

<template>
<a-drawer
:visible="crevoteVisible"
class="drawerStyle crevoteDrawer"
width="80%"
title="创建投票"
placement="right"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">创建投票</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="contentMain">
<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="inputV1"
style="width: 424px; height: 32px"
placeholder="请输入投票名称"
/>
</div>
</div>
<div class="box" @click="showDrawerCreVote">
<button class="cjtpbtn" @click="addQue()">创建题干</button>
</div>
<div class="queBox" v-for="(q, index) in questions" :key="index">
<div class="delBtn" v-if="questions.length > 1">
<img src="@/assets/images/projectadd/delete.png" alt="" />
<div class="btnText">删除题干</div>
</div>
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px"
>{{ q.stemTit }}{{ index + 1 }}</span
>
</div>
<div class="btnbox">
<a-input
v-model:value="q.inputV"
style="width: 424px; height: 32px"
placeholder="请输入题干"
/>
</div>
</div>
<div class="option" v-for="(o, index) in q.options" :key="index">
<div class="mainoptions">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">{{ o.title }}{{index+1}}</span>
</div>
<div class="optionbox">
<div class="btnbox">
<a-input
v-model:value="o.opvalue"
style="width: 424px; height: 32px"
/>
<button v-if="q.options.length > 2" class="delbtn" :key="index" @click="delOpt(q.options)">
删除
</button>
</div>
<a-button v-if="o.opvalue == ''" type="link">+ 上传图片</a-button>
<!-- <input class="file-upload" type="file" accept="image/*" name="picture"/> -->
</div>
</div>
</div>
<div class="main_item">
<div class="signbox"></div>
<div class="btnbox">
<div class="tjxxbtn" @click="addOpt(q.options)">
<div class="btntext">添加选项</div>
</div>
</div>
</div>
</div>
</div>
<div class="main_btns">
<button class="btn1">取消</button>
<button class="btn2" @click="createQueTit">确定</button>
</div>
</div>
</a-drawer>
</template>
<script>
import { reactive, toRefs } from "vue";
import * as api from "../../api/indexVote";
import { message } from "ant-design-vue";
export default {
name: "CreVote",
// components: {
// },
props: {
crevoteVisible: {
type: Boolean,
default: false,
},
},
setup(props, ctx) {
const state = reactive({
inputV1: "",
creVote: true,
questions: [
{
stemTit: "题干",
inputV: "",
options: [
{
title: "选项",
opvalue: "",
},
{
title: "选项",
opvalue: "",
},
],
},
],
});
const addQue = () => {
state.questions.push({
stemTit: "题干",
inputV: "",
options: [
{
title: "选项",
opvalue: "",
},
{
title: "选项",
opvalue: "",
},
],
});
};
const addOpt = (value) => {
console.log(value);
value.push({
// title: "选项" + (value.length + 1 * 1),
title: "选项",
opvalue: "",
});
};
const delOpt = (value) => {
console.log('gys', value);
// delete value[0]
value.pop()
}
const closeDrawer = () => {
ctx.emit("update:crevoteVisible", false);
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
};
//创建题干接口
const createQueTit = () => {
if (state.inputV1 == "") {
message.destroy();
return message.info("请输入投票名称");
}
// if (!state.questions.inputV) {
// message.destroy();
// return message.info("请输入题干");
// }
// if (!state.questions.optins.opvalue) {
// message.destroy();
// return message.info("请输入选项");
// }
console.log("111111", state.questions);
// console.log('22222',state.questions.inputV);
// console.log('333333',state.questions.options);
let obj = [
{
ascriptionId: 0,
createUser: 0,
optionDetailList: [
{
createUser: 0,
optionId: 0,
optionName: state.questions[0].options[0].opvalue,
optionOrderNum: "",
optionPictureAddress: "",
stem: "",
updateTime: "",
updateUser: 0,
voteStemId: 0,
},
],
orderNumber: "",
updateTime: "",
updateUser: 0,
voteStemFlag: "",
voteStemId: 0,
voteStemName: state.questions[0].inputV,
},
];
api
.createOptionMessage(obj)
.then((res) => {
console.log("创建成功", res);
// console.log('res.data.data[0].ascriptionId',res.data.data[0].ascriptionId);
// console.log('res.data.data[0].voteStemId',res.data.data[0].voteStemId);
// console.log('state.questions[0].inputV',state.questions[0].inputV);
message.success("创建成功");
//获取题干信息
let objstem = {
stemId: res.data.data[0].ascriptionId,
ascriptionId: res.data.data[0].voteStemId,
};
api
.queryStemByStemId(objstem)
.then((res) => {
console.log("获取成功", res);
message.success("获取成功");
})
.catch((err) => {
console.log(err);
});
let stemData = {
creVote: state.creVote,
ascriptionId: res.data.data[0].ascriptionId,
voteStemId: res.data.data[0].voteStemId,
voteStemName: state.questions[0].inputV,
};
ctx.emit("getData", stemData);
closeDrawer();
})
.catch((err) => {
console.log(err);
});
};
return {
...toRefs(state),
afterVisibleChange,
closeDrawer,
addQue,
addOpt,
delOpt,
createQueTit,
};
},
};
</script>
<style lang="scss">
.ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important;
}
.crevoteDrawer {
.drawerMain {
.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 {
.box {
display: flex;
flex: 1;
align-items: center;
margin-bottom: 30px;
.cjtpbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
}
}
.main_item {
display: flex;
align-items: center;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
margin-right: 5px;
.sign {
margin-right: 5px;
}
}
.btnbox {
display: flex;
flex: 1;
align-items: center;
}
}
.mainoptions {
display: flex;
align-items: flex-start;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
padding-top: 5px;
margin-right: 5px;
.sign {
margin-right: 5px;
}
}
.optionbox {
.btnbox {
display: flex;
align-items: center;
}
.delbtn {
border: none;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
}
}
.queBox {
border: 1px solid #e8e8e8;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
padding-top: 30px;
margin-bottom: 30px;
.delBtn {
width: 130px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
margin-left: 20px;
margin-bottom: 20px;
img {
margin-right: 10px;
}
}
.main_item {
display: flex;
align-items: center;
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;
.tjxxbtn {
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 8px;
.btntext {
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;
}
}
.kqszbox {
.qdqtbox {
margin-left: 56px;
}
.setbox {
display: flex;
flex-wrap: wrap;
margin-top: 10px;
margin-bottom: 24px;
.timerbox {
margin-top: 6px;
margin-right: 32px;
display: flex;
align-items: center;
flex-wrap: nowrap;
}
}
}
.btnbox2 {
display: flex;
flex-direction: column;
justify-content: flex-start;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 16px 8px 32px 0;
color: #fff;
margin-top: 16px;
margin-bottom: 60px;
}
}
}
}
}
.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>