|
@@ -0,0 +1,340 @@
|
|
|
+<template>
|
|
|
+ <div class="createPost-container">
|
|
|
+ <el-form ref="postForm" :label-position="labelPosition" :model="postForm" :rules="rules" class="form-container" label-width="120px">
|
|
|
+ <div class="createPost-main-container">
|
|
|
+ <el-form-item prop="name" label="直播间名称">
|
|
|
+ <el-input v-model="postForm.name" style="width: 300px;" placeholder="直播间名称" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="cover_img_url" label="封面图">
|
|
|
+ <Upload v-model="postForm.cover_img_url" :wx-upload="postForm.cover_img" @wxMedia="wxMedia" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="time_area" label="时间范围">
|
|
|
+ <el-tooltip placement="top" style="font-size: 18px;margin-left: -50px;">
|
|
|
+ <div slot="content">开播时间段仅供参考,不是实际直播间可以开播的时间。
|
|
|
+ <br>直播间在开始时间前也可以开播,并且到结束时间后不会强制结束。
|
|
|
+ <br>若到结束时间仍未开播,则直播间无法再开播。
|
|
|
+ </div>
|
|
|
+ <i class="el-icon-question" />
|
|
|
+ </el-tooltip>
|
|
|
+ <template>
|
|
|
+ <el-date-picker
|
|
|
+ v-model="postForm.time_area"
|
|
|
+ type="datetimerange"
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ style="margin-left: 31px"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="anchor_name" label="主播名称">
|
|
|
+ <el-input v-model="postForm.anchor_name" placeholder="" style="width: 300px;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="anchor_wechat" label="主播微信">
|
|
|
+ <el-input v-model="postForm.anchor_wechat" placeholder="" style="width: 600px;" />
|
|
|
+ <el-link type="primary" style="margin-left: 20px" target="_blank" href="https://res.wx.qq.com/op_res/9rSix1dhHfK4rR049JL0PHJ7TpOvkuZ3mE0z7Ou_Etvjf-w1J_jVX0rZqeStLfwh">去认证</el-link>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="sub_anchor_wechat" label="主播副微信号">
|
|
|
+ <el-input v-model="postForm.sub_anchor_wechat" placeholder="" style="width: 300px;" />
|
|
|
+ <el-link type="primary" style="margin-left: 20px" target="_blank" href="https://res.wx.qq.com/op_res/9rSix1dhHfK4rR049JL0PHJ7TpOvkuZ3mE0z7Ou_Etvjf-w1J_jVX0rZqeStLfwh">去认证</el-link>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="creater_wechat" label="创建者微信号">
|
|
|
+ <el-input v-model="postForm.creater_wechat" placeholder="" style="width: 300px;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="share_img_url" label="分享图">
|
|
|
+ <Upload v-model="postForm.share_img_url" :wx-upload="postForm.share_img" @wxMedia="wxMedia" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="feeds_img_url" label="购物封面图">
|
|
|
+ <Upload v-model="postForm.feeds_img_url" :wx-upload="postForm.feeds_img" @wxMedia="wxMedia" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="is_feeds_public" label="官方收录">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.is_feeds_public">
|
|
|
+ <el-radio :label="1">开启</el-radio>
|
|
|
+ <el-radio :label="0">关闭</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="type" label="直播间类型">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.type">
|
|
|
+ <el-radio :label="1">推流</el-radio>
|
|
|
+ <el-radio :label="0">手机直播</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="screen_type" label="横屏、竖屏">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.screen_type">
|
|
|
+ <el-radio :label="1">横屏</el-radio>
|
|
|
+ <el-radio :label="0">竖屏</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="close_like" label="点赞">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.close_like">
|
|
|
+ <el-radio :label="0">开启</el-radio>
|
|
|
+ <el-radio :label="1">关闭</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="close_goods" label="货架">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.close_goods">
|
|
|
+ <el-radio :label="0">开启</el-radio>
|
|
|
+ <el-radio :label="1">关闭</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="close_comment" label="评论">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.close_comment">
|
|
|
+ <el-radio :label="0">开启</el-radio>
|
|
|
+ <el-radio :label="1">关闭</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="close_replay" label="回放">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.close_replay">
|
|
|
+ <el-radio :label="0">开启</el-radio>
|
|
|
+ <el-radio :label="1">关闭</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="close_share" label="分享">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.close_share">
|
|
|
+ <el-radio :label="0">开启</el-radio>
|
|
|
+ <el-radio :label="1">关闭</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="close_kf" label="客服">
|
|
|
+ <template>
|
|
|
+ <el-radio-group v-model="postForm.close_kf">
|
|
|
+ <el-radio :label="0">开启</el-radio>
|
|
|
+ <el-radio :label="1">关闭</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </template>
|
|
|
+ </el-form-item>
|
|
|
+ <el-row>
|
|
|
+ <el-button v-if="!isEdit" v-loading="loading" type="success" @click="submitForm">
|
|
|
+ 提交
|
|
|
+ </el-button>
|
|
|
+ <el-button v-if="isEdit" v-loading="loading" type="success" @click="updateArticle">
|
|
|
+ 返回
|
|
|
+ </el-button>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import Upload from '@/components/Upload/SingleImage3'
|
|
|
+// import Sticky from '@/components/Sticky' // 粘性header组件
|
|
|
+// import { validURL } from '@/utils/validate'
|
|
|
+import { fetchLive, createLive } from '@/api/live'
|
|
|
+// import Warning from './Warning'
|
|
|
+// import { CommentDropdown, PlatformDropdown, SourceUrlDropdown } from './Dropdown'
|
|
|
+
|
|
|
+const defaultForm = {
|
|
|
+ // status: 'draft',
|
|
|
+ is_feeds_public: 0, // 文章题目
|
|
|
+ screen_type: 0, // 文章内容
|
|
|
+ close_like: 0, // 文章内容
|
|
|
+ close_goods: 1, // 文章内容
|
|
|
+ close_comment: 0, // 文章内容
|
|
|
+ close_replay: 0, // 文章内容
|
|
|
+ close_share: 0, // 文章内容
|
|
|
+ close_kf: 1, // 文章内容
|
|
|
+ type: 1, // 文章外链
|
|
|
+ name: '', // 前台展示时间
|
|
|
+ cover_img: 'cover_img', // 文章图片
|
|
|
+ sub_anchor_wechat: '',
|
|
|
+ creater_wechat: '',
|
|
|
+ cover_img_url: '',
|
|
|
+ share_img_url: '',
|
|
|
+ share_img: 'share_img',
|
|
|
+ feeds_img: 'feeds_img',
|
|
|
+ feeds_img_url: '',
|
|
|
+ time_area: ''
|
|
|
+}
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'ArticleDetail',
|
|
|
+ components: { Upload },
|
|
|
+ props: {
|
|
|
+ isEdit: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ const validateRequire = (rule, value, callback) => {
|
|
|
+ if (value === '') {
|
|
|
+ // this.$message({
|
|
|
+ // message: rule.field + '不为空',
|
|
|
+ // type: 'error'
|
|
|
+ // })直播标题必须为3-17个字(一个字等于两个英文字符或特殊字符)
|
|
|
+ callback(new Error(rule.field + '不为空'))
|
|
|
+ } else {
|
|
|
+ if (rule.field === 'anchor_name' && value && value.length > 15) {
|
|
|
+ callback(new Error('最大15个字!'))
|
|
|
+ }
|
|
|
+ if (rule.field === 'name' && value && value.length < 4) {
|
|
|
+ callback(new Error('直播标题必须为3-17个字(一个字等于两个英文字符或特殊字符)'))
|
|
|
+ }
|
|
|
+
|
|
|
+ if (rule.field === 'time_area') {
|
|
|
+ if (value === '' || value === null) {
|
|
|
+ callback(new Error('开播时间不能为空'))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const startTime = value[0]
|
|
|
+ const endTime = value[1]
|
|
|
+ const startTimeDate = new Date(startTime)
|
|
|
+ const endTimeDate = new Date(endTime)
|
|
|
+ const nowDate = new Date()
|
|
|
+ console.log((startTimeDate.getTime() - nowDate.getTime()) / 1000)
|
|
|
+ if ((startTimeDate.getTime() - nowDate.getTime()) < 600 * 1000) {
|
|
|
+ callback(new Error('开播时间至少在10分钟后'))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (endTimeDate.getTime() - startTimeDate.getTime() > 3 * 24 * 3600 * 1000) {
|
|
|
+ callback(new Error('时间跨度不能超过三天'))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ postForm: Object.assign({}, defaultForm),
|
|
|
+ loading: false,
|
|
|
+ userListOptions: [],
|
|
|
+ rules: {
|
|
|
+ name: [{ message: '直播标题必须为3-17个字(一个字等于两个英文字符或特殊字符)', required: true, validator: validateRequire, trigger: 'blur' }],
|
|
|
+ cover_img_url: [{ message: '封面图不为空', required: true, validator: validateRequire, trigger: 'blur' }],
|
|
|
+ time_area: [{ required: true, validator: validateRequire }],
|
|
|
+ anchor_name: [{ message: '主播名称不为空且最多15个字', required: true, validator: validateRequire, trigger: 'blur' }],
|
|
|
+ anchor_wechat: [{ message: '主播微信不为空且必须是认证的', required: true, validator: validateRequire, trigger: 'blur' }],
|
|
|
+ share_img_url: [{ message: '分享图片不为空', required: true, validator: validateRequire }],
|
|
|
+ type: [{ message: '直播类型不为空', required: true, validator: validateRequire }],
|
|
|
+ screen_type: [{ message: '横屏、竖屏不为空', required: true, validator: validateRequire }],
|
|
|
+ close_like: [{ message: '点赞不为空', required: true, validator: validateRequire }],
|
|
|
+ close_goods: [{ message: '货架不为空', required: true, validator: validateRequire }],
|
|
|
+ close_comment: [{ message: '评论不为空', required: true, validator: validateRequire }]
|
|
|
+ },
|
|
|
+ tempRoute: {},
|
|
|
+ labelPosition: 'left'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ if (this.isEdit) {
|
|
|
+ const id = this.$route.params && this.$route.params.id
|
|
|
+ this.fetchData(id)
|
|
|
+ }
|
|
|
+ // Why need to make a copy of this.$route here?
|
|
|
+ // Because if you enter this page and quickly switch tag, may be in the execution of the setTagsViewTitle function, this.$route is no longer pointing to the current page
|
|
|
+ // https://github.com/PanJiaChen/vue-element-admin/issues/1221
|
|
|
+ this.tempRoute = Object.assign({}, this.$route)
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ fetchData(id) {
|
|
|
+ fetchLive(id).then(response => {
|
|
|
+ this.postForm = response.data.info
|
|
|
+ // set tags view title
|
|
|
+ // this.setTagsViewTitle()
|
|
|
+ // set page title
|
|
|
+ // this.setPageTitle()
|
|
|
+ }).catch(err => {
|
|
|
+ console.log(err)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ async submitForm() {
|
|
|
+ this.$refs.postForm.validate(async valid => {
|
|
|
+ if (valid) {
|
|
|
+ this.loading = true
|
|
|
+ await createLive(this.postForm)
|
|
|
+ this.$notify({
|
|
|
+ title: '成功',
|
|
|
+ message: '创建直播间成功',
|
|
|
+ type: 'success',
|
|
|
+ duration: 2000
|
|
|
+ })
|
|
|
+ this.loading = false
|
|
|
+ this.listLoading = false
|
|
|
+ this.$router.push(`/live/list`)
|
|
|
+ } else {
|
|
|
+ console.log('error submit!!')
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ updateArticle() {
|
|
|
+ console.log(this.postForm)
|
|
|
+ this.$router.push(`/join/list`)
|
|
|
+ // updateJoin(this.postForm).then(response => {
|
|
|
+ // this.$notify({
|
|
|
+ // title: '修改',
|
|
|
+ // message: '修改成功',
|
|
|
+ // type: 'success',
|
|
|
+ // duration: 2000
|
|
|
+ // })
|
|
|
+ // this.postForm.status = 'published'
|
|
|
+ // this.loading = false
|
|
|
+ // this.listLoading = false
|
|
|
+ // this.$router.push(`/banner/list`)
|
|
|
+ // })
|
|
|
+ },
|
|
|
+ wxMedia(value) {
|
|
|
+ const arr = value.split('%llz%')
|
|
|
+ this.postForm[arr[0]] = arr[1]
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+@import "~@/styles/mixin.scss";
|
|
|
+
|
|
|
+.createPost-container {
|
|
|
+ position: relative;
|
|
|
+
|
|
|
+ .createPost-main-container {
|
|
|
+ padding: 40px 45px 20px 50px;
|
|
|
+
|
|
|
+ .postInfo-container {
|
|
|
+ position: relative;
|
|
|
+ @include clearfix;
|
|
|
+ margin-bottom: 10px;
|
|
|
+
|
|
|
+ .postInfo-container-item {
|
|
|
+ float: left;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .word-counter {
|
|
|
+ width: 40px;
|
|
|
+ position: absolute;
|
|
|
+ right: 10px;
|
|
|
+ top: 0px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.article-textarea ::v-deep {
|
|
|
+ textarea {
|
|
|
+ padding-right: 40px;
|
|
|
+ resize: none;
|
|
|
+ border: none;
|
|
|
+ border-radius: 0px;
|
|
|
+ border-bottom: 1px solid #bfcbd9;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|