You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
4.4 KiB

<template>
<el-dialog :visible.sync="visible" width="70%" title="编辑供需">
<el-form :model="form" label-width="80px">
<el-form-item label="供需类型">
<el-radio-group v-model="form.type">
<el-radio :label="1">供应</el-radio>
<el-radio :label="2">需求</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="标题">
<el-input v-model="form.title" maxlength="50" show-word-limit></el-input>
</el-form-item>
<el-form-item label="详细描述">
<el-input type="textarea" v-model="form.content" :rows="4" maxlength="200" show-word-limit></el-input>
</el-form-item>
<el-form-item label="行业标签">
<el-input
v-model="tagInput"
placeholder="输入后回车键确认"
@keyup.enter.native="addTag"
@blur="addTag"
style="margin-bottom: 8px;"
/>
<div>
<el-tag
v-for="(tag, idx) in tagList"
:key="tag + idx"
closable
@close="removeTag(idx)"
style="margin-right: 8px;"
>{{ tag }}</el-tag>
</div>
<div style="color: #999; font-size: 12px; margin-top: 4px;">
建议添加相关行业标签方便其他校友找到你
</div>
</el-form-item>
<el-form-item label="联系方式" required>
<div class="contact-type-group">
<el-button
:type="form.contactType === 'wechat' ? 'primary' : 'default'"
@click="form.contactType = 'wechat'"
icon="el-icon-chat-dot-round"
>微信</el-button>
<el-button
:type="form.contactType === 'mobile' ? 'primary' : 'default'"
@click="form.contactType = 'mobile'"
icon="el-icon-phone"
>电话</el-button>
<el-button
:type="form.contactType === 'email' ? 'primary' : 'default'"
@click="form.contactType = 'email'"
icon="el-icon-message"
>邮箱</el-button>
</div>
<div style="margin-top: 12px;">
<el-input
v-if="form.contactType === 'wechat'"
v-model="form.wechat"
placeholder="请输入微信号"
/>
<el-input
v-if="form.contactType === 'mobile'"
v-model="form.mobile"
placeholder="请输入手机号"
/>
<el-input
v-if="form.contactType === 'email'"
v-model="form.email"
placeholder="请输入邮箱"
/>
</div>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="$emit('update:visible', false)">取消</el-button>
<el-button type="primary" @click="handleSave"></el-button>
</span>
</el-dialog>
</template>
<script>
export default {
props: {
visible: Boolean,
detail: Object
},
data() {
return {
form: {
contactType: 'mobile',
mobile: '',
wechat: '',
email: ''
},
tagInput: '',
tagList: []
}
},
watch: {
detail: {
immediate: true,
handler(val) {
this.form = {
...val,
contactType: val.wechat ? 'wechat' : val.email ? 'email' : 'mobile'
}
this.tagList = Array.isArray(val.tag)
? val.tag
: (val.tag ? val.tag.split(',').filter(Boolean) : [])
}
}
},
methods: {
addTag() {
const val = this.tagInput && this.tagInput.trim()
if (val && !this.tagList.includes(val)) {
this.tagList.push(val)
}
this.tagInput = ''
},
removeTag(idx) {
this.tagList.splice(idx, 1)
},
handleSave() {
const data = {
id: this.form.id,
title: this.form.title,
content: this.form.content,
tag: this.tagList.join(','),
wechat: this.form.wechat,
mobile: this.form.mobile,
email: this.form.email,
type: this.form.type
}
if (this.form.contactType !== 'wechat') data.wechat = ''
if (this.form.contactType !== 'mobile') data.mobile = ''
if (this.form.contactType !== 'email') data.email = ''
this.$emit('save', data)
this.$emit('update:visible', false)
}
}
}
</script>
<style scoped>
.contact-type-group {
display: flex;
gap: 12px;
margin-bottom: 8px;
}
</style>