227 lines
4.9 KiB
Vue
227 lines
4.9 KiB
Vue
<template>
|
||
<div class="lum-dialog-mask animated fadeIn">
|
||
<el-container class="lum-dialog-box">
|
||
<el-header class="header no-select" height="60px">
|
||
<p>发起投票</p>
|
||
<p class="tools">
|
||
<i class="el-icon-close" @click="$emit('close')" />
|
||
</p>
|
||
</el-header>
|
||
<el-main class="main no-padding vote-from">
|
||
<div class="vote-title">投票方式</div>
|
||
<div>
|
||
<el-radio-group v-model="mode">
|
||
<el-radio :label="0">单选</el-radio>
|
||
<el-radio :label="1">多选</el-radio>
|
||
</el-radio-group>
|
||
</div>
|
||
<div class="vote-title">投票主题</div>
|
||
<div>
|
||
<el-input
|
||
size="medium"
|
||
clear="vote-input"
|
||
v-model.trim="title"
|
||
placeholder="请输入投票主题,最多50字"
|
||
:maxlength="50"
|
||
/>
|
||
</div>
|
||
|
||
<div class="vote-title">投票选项</div>
|
||
<div>
|
||
<div class="vote-options" v-for="(option, index) in options">
|
||
<div class="lbox">
|
||
<el-input
|
||
size="medium"
|
||
clear="vote-input"
|
||
v-model.trim="option.value"
|
||
placeholder="请输入选项内容"
|
||
:maxlength="120"
|
||
>
|
||
<span
|
||
slot="prefix"
|
||
style="margin-left:7px;"
|
||
v-text="String.fromCharCode(65 + index)"
|
||
/>
|
||
</el-input>
|
||
</div>
|
||
<div class="rbox">
|
||
<i class="el-icon-close" @click="removeOption(index)"></i>
|
||
</div>
|
||
</div>
|
||
|
||
<h6 class="pointer add-option" @click="addOption">
|
||
<i class="el-icon-plus"></i> 添加选项
|
||
</h6>
|
||
</div>
|
||
</el-main>
|
||
<el-footer class="footer">
|
||
<el-button plain size="small">取消</el-button>
|
||
<el-button
|
||
type="primary"
|
||
size="small"
|
||
:disabled="isCheck"
|
||
:loading="loading"
|
||
@click="submit"
|
||
>发起投票</el-button
|
||
>
|
||
</el-footer>
|
||
</el-container>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
import { ServeSendVote } from '@/api/chat'
|
||
|
||
export default {
|
||
name: 'MeEditorVote',
|
||
props: {
|
||
group_id: {
|
||
type: [String, Number],
|
||
default: 0,
|
||
},
|
||
},
|
||
data() {
|
||
return {
|
||
loading: false,
|
||
mode: 0,
|
||
title: '',
|
||
options: [
|
||
{
|
||
value: '',
|
||
},
|
||
{
|
||
value: '',
|
||
},
|
||
{
|
||
value: '',
|
||
},
|
||
],
|
||
}
|
||
},
|
||
computed: {
|
||
isCheck() {
|
||
if (this.title == '') return true
|
||
|
||
return this.options.some(option => option.value == '')
|
||
},
|
||
},
|
||
methods: {
|
||
submit() {
|
||
let items = []
|
||
const { receiver_id } = this.$store.state.dialogue
|
||
this.options.forEach(option => {
|
||
items.push(option.value)
|
||
})
|
||
|
||
this.loading = true
|
||
|
||
ServeSendVote({
|
||
receiver_id,
|
||
mode: this.mode,
|
||
title: this.title,
|
||
options: items,
|
||
})
|
||
.then(res => {
|
||
if (res.code == 200) {
|
||
this.$emit('close')
|
||
this.$notify({
|
||
title: '友情提示',
|
||
message: '发起投票成功!',
|
||
type: 'success',
|
||
})
|
||
} else {
|
||
this.$notify({
|
||
title: '友情提示',
|
||
message: res.message,
|
||
type: 'warning',
|
||
})
|
||
}
|
||
})
|
||
.catch(() => {
|
||
this.loading = false
|
||
})
|
||
},
|
||
addOption() {
|
||
if (this.options.length >= 6) {
|
||
return false
|
||
}
|
||
|
||
this.options.push({
|
||
value: '',
|
||
})
|
||
},
|
||
removeOption(index) {
|
||
if (this.options.length <= 2) {
|
||
return false
|
||
}
|
||
|
||
this.$delete(this.options, index)
|
||
},
|
||
},
|
||
}
|
||
</script>
|
||
<style lang="less" scoped>
|
||
.lum-dialog-box {
|
||
height: 600px;
|
||
max-width: 450px;
|
||
|
||
.vote-from {
|
||
box-sizing: border-box;
|
||
padding: 15px 25px;
|
||
overflow: hidden;
|
||
|
||
.vote-title {
|
||
margin: 20px 0 10px;
|
||
&:first-child {
|
||
margin-top: 0;
|
||
}
|
||
}
|
||
|
||
.vote-options {
|
||
display: flex;
|
||
min-height: 30px;
|
||
margin: 10px 0;
|
||
|
||
.lbox {
|
||
width: 100%;
|
||
|
||
/deep/.el-input__prefix {
|
||
height: 36px;
|
||
line-height: 36px;
|
||
}
|
||
}
|
||
|
||
.rbox {
|
||
flex-basis: 50px;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
i {
|
||
font-size: 18px;
|
||
cursor: pointer;
|
||
&:hover {
|
||
color: red;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.add-option {
|
||
margin-top: 5px;
|
||
font-weight: 400;
|
||
color: #3370ff;
|
||
}
|
||
}
|
||
|
||
.footer {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: flex-end;
|
||
padding-right: 32px;
|
||
}
|
||
}
|
||
|
||
/deep/.el-radio__input.is-checked + .el-radio__label {
|
||
color: #606266;
|
||
}
|
||
</style>
|