城阳运营端pc前端代码
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.
 
 
 
 

528 lines
19 KiB

<template>
<div style=" position: relative;">
<div class="div_btn">
<el-button size="mini"
type="default"
@click="diaCancel">取消返回</el-button>
<el-button size="mini"
type="primary"
@click="submitCode">提交</el-button>
</div>
<el-tabs v-model="activeName"
@tab-click="tabClick"
class="el-tabs">
<el-tab-pane label="功能说明"
name="desc">
<el-form :inline="true"
:model="dataForm"
class="form">
<el-form-item label="版本功能说明"
prop="versionDesc"
label-width="150px"
style="display:block">
<el-input type="textarea"
:autosize="{ minRows: 3, maxRows: 6}"
:rows="4"
resize="none"
style="width:600px"
placeholder='请输入版本功能说明'
v-model="dataForm.versionDesc">
</el-input>
<div class="el-upload__tip">小程序版本说明和功能解释</div>
</el-form-item>
<el-form-item label="图片预览"
label-width="150px"
style="display:block">
<el-upload class="avatar-uploader"
ref="uploadPic"
:action="upload_url"
list-type="picture-card"
:name="upload_name"
:on-exceed="exceedPic"
:on-remove="removePic"
:file-list="picList"
:limit="10"
:http-request="uploadPic">
<span class="font-14">选择图片</span>
<div slot="tip"
class="el-upload__tip">可上传小程序截图,最多上传10张图片,图片支持jpg、jpeg、bmp、git或png格式,图片大小不超过5M</div>
</el-upload>
</el-form-item>
<el-form-item label="视频预览"
label-width="150px"
style="display:block">
<el-upload class="avatar-uploader"
ref="uploadVedio"
:action="upload_url"
:name="upload_name"
:on-exceed="exceedVedio"
:on-remove="removeVedio"
:file-list="videoList"
:limit="1"
:http-request="uploadVedio">
<el-button size="small"
type="primary">选择视频</el-button>
<div slot="tip"
class="el-upload__tip">可上传小程序使用录屏,最多上传1个视频。视频支持mp4格式,视频大小不超过20M</div>
</el-upload>
</el-form-item>
<!-- <el-form-item label="审核加急"
label-width="150px"
style="display:block">
<el-radio-group v-model="dataForm.isSpeed">
<el-radio :label="false">不加急 </el-radio>
<el-radio :label="true">加急 </el-radio>
</el-radio-group>
<div class="el-upload__tip">一年3次,不加急:预计在1-7天内完成,加急:预计再2-12小时内完成</div>
</el-form-item> -->
</el-form>
</el-tab-pane>
<el-tab-pane label="审核项"
name="item">
<submit-item ref="ref_submit_item"></submit-item>
</el-tab-pane>
<el-tab-pane label="UGC信息安全声明"
name="ugc">
<div class="el-upload__tip">当小程序第一次提交审核且类目包含社交-社区/论坛、社交-笔记、社交-问答其中之一时需填写UGC场景信息</div>
<el-form :inline="true"
:model="dataForm.ugcDeclare"
class="form">
<el-form-item label="UGC场景"
label-width="150px"
style="display:block">
<el-checkbox-group v-model="dataForm.ugcDeclare.scene">
<el-checkbox @change="scene0"
:label="0">不涉及用户生成内容</el-checkbox>
<el-checkbox :label="1"
:disabled="sceneDisabled">用户资料</el-checkbox>
<el-checkbox :label="2"
:disabled="sceneDisabled">图片</el-checkbox>
<el-checkbox :label="3"
:disabled="sceneDisabled">视频</el-checkbox>
<el-checkbox :label="4"
:disabled="sceneDisabled">文本</el-checkbox>
<el-checkbox :label="5"
:disabled="sceneDisabled"
@change="sceneOther">其他</el-checkbox>
</el-checkbox-group>
</el-form-item>
<div v-if="!sceneDisabled">
<el-form-item label="其他场景"
label-width="150px"
style="display:block">
<el-input type="textarea"
:disabled="sceneOtherDisabled"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
resize="none"
style="width:500px"
placeholder='请输入其他场景'
v-model="dataForm.ugcDeclare.otherSceneDesc">
</el-input>
<div class="el-upload__tip">当scene选其他时的说明,不超时256字</div>
</el-form-item>
<el-form-item label="内容安全机制"
label-width="150px"
style="display:block">
<el-checkbox-group v-model="dataForm.ugcDeclare.method">
<el-checkbox :label="1">使用平台建议的内容安全API</el-checkbox>
<el-checkbox :label="2">使用其他的内容审核产品</el-checkbox>
<el-checkbox :label="3">通过人工审核把关</el-checkbox>
<el-checkbox :label="4">未做内容审核把关</el-checkbox>
</el-checkbox-group>
<!-- <div class="el-upload__tip">1.使用平台建议的内容安全API,2.使用其他的内容审核产品,3.通过人工审核把关,4.未做内容审核把关</div> -->
</el-form-item>
<el-form-item label="是否有审核团队"
label-width="150px"
style="display:block">
<el-radio-group v-model="dataForm.ugcDeclare.hasAuditTeam">
<el-radio :label="0">无 </el-radio>
<el-radio :label="1"> </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="审核机制"
label-width="150px"
style="display:block">
<el-input type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
resize="none"
style="width:500px"
placeholder='请输入审核机制'
v-model="dataForm.ugcDeclare.auditDesc">
</el-input>
<div class="el-upload__tip">说明当前对UGC内容的审核机制,不超过256字</div>
</el-form-item>
</div>
</el-form>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import CDialog from '@c/CDialog'
import SubmitItem from './SubmitItem'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // 引入Loading服务
let loading // 加载动画
export default {
data () {
return {
loading: false,
codeId: '', // 上传代码id,父组件传
// tab页相关
activeName: 'desc',
sceneDisabled: true, // 场景是否禁用
sceneOtherDisabled: true, // 其他场景是否禁用
dataForm: {
isSpeed: false, // 是否加急
isRepeat: false, // 上一次提审是否是加急,初次提审都是false
versionDesc: '', // 小程序版本说明和功能解释
ugcDeclare: { // 用户生成内容场景(UGC)信息安全声明
scene: [1, 2, 4], // UGC场景 0,不涉及用户生成内容, 1.用户资料,2.图片,3.视频,4.文本,5其他, 可多选,当scene填0时无需填写下列字段
otherSceneDesc: '', // 当scene选其他时的说明,不超时256字
method: [2], // 内容安全机制 1.使用平台建议的内容安全API,2.使用其他的内容审核产品,3.通过人工审核把关,4.未做内容审核把关
hasAuditTeam: 1, // 是否有审核团队, 0.无,1.有,默认0
auditDesc: '严重色情内容、轻微色情内容、涉政负面内容、严重辱骂、涉政暴恐(恶搞领导人、特殊标识、特殊着装、枪支、利器、血腥场景)' // 说明当前对UGC内容的审核机制,不超过256字
}
},
// 上传素材
dialogImageUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/mediaupload',
upload_url: '', // 上传URL
upload_name: '', // 图片或视频名称
picList: [], // 预览列表
videoList: [], // 预览列表
// 弹出框相关
dialog: {
title: '',
visible: false
}
}
},
components: {
CDialog, SubmitItem
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight * 0.56 - 100
},
...mapGetters(['clientHeight'])
},
methods: {
initData (codeId) {
this.codeId = codeId
},
reseatDataForm () {
this.dataForm = {
isSpeed: false, // 是否加急
isRepeat: false, // 上一次提审是否是加急,初次提审都是false
versionDesc: '', // 小程序版本说明和功能解释
ugcDeclare: { // 用户生成内容场景(UGC)信息安全声明
scene: [1, 2, 4], // UGC场景 0,不涉及用户生成内容, 1.用户资料,2.图片,3.视频,4.文本,5其他, 可多选,当scene填0时无需填写下列字段
otherSceneDesc: '', // 当scene选其他时的说明,不超时256字
method: [2], // 内容安全机制 1.使用平台建议的内容安全API,2.使用其他的内容审核产品,3.通过人工审核把关,4.未做内容审核把关
hasAuditTeam: 1, // 是否有审核团队, 0.无,1.有,默认0
auditDesc: '严重色情内容、轻微色情内容、涉政负面内容、严重辱骂、涉政暴恐(恶搞领导人、特殊标识、特殊着装、枪支、利器、血腥场景)' // 说明当前对UGC内容的审核机制,不超过256字
}
}
},
tabClick (tab) {
if (tab.name === 'item') {
this.$refs['ref_submit_item'].initData(this.codeId)
}
if (tab.name === 'ugc') {
this.scene0(false)
}
},
removeVedio (file) {
this.videoList.splice(this.videoList.findIndex(item => item.uid === file.uid), 1)
// console.log(this.videoList)
},
removePic (file) {
this.picList.splice(this.picList.findIndex(item => item.uid === file.uid), 1)
// console.log(this.picList)
},
exceedPic: () => {
this.$message({
message: '最多上传5张预览图片',
type: 'warning'
})
},
exceedVedio: () => {
this.$message({
message: '最多上传2个预览视频',
type: 'warning'
})
},
// 上传视频
uploadVedio: (params) => {
let file = params.file
let fileType = file.type
let isVideo = fileType.indexOf('video') !== -1
let fileUrl = this.$refs.uploadVedio.uploadFiles[this.videoList.length].url
file.url = fileUrl
this.videoList.push(file)
let isLt20M = file.size / 1024 / 1024 < 20
if (!isLt20M) {
this.$message({
message: '上传视频大小不能超过 20MB!',
type: 'warning'
})
this.videoList.pop()
return
}
let isMP4 = file.type === 'video/mp4'
if (!isVideo || !isMP4) {
this.$message({
message: '请选择mp4格式的视频!',
type: 'warning'
})
this.videoList.pop()
return
}
this.startLoading()
this.upload_name = 'file_video[]'
let formData = new FormData()
formData.append('type', fileType)
formData.append('media', file)
formData.append('codeId', this.codeId)
window.app.ajax.post2(this.dialogImageUrl, formData,
(data, rspMsg) => {
this.endLoading()
if (data.code === 0) {
this.videoList[this.videoList.length - 1].mediaid = data.data
} else {
this.videoList.pop()
this.$message.error(rspMsg)
}
},
(rspMsg, data) => {
this.videoList.pop()
this.endLoading()
this.$message.error(rspMsg)
})
},
// 上传图片
uploadPic: (params) => {
let file = params.file
let fileType = file.type
let isImage = fileType.indexOf('image') !== -1
let fileUrl = this.$refs.uploadPic.uploadFiles[this.picList.length].url
file.url = fileUrl
this.picList.push(file)
let isLt5M = file.size / 1024 / 1024 < 5
if (!isLt5M) {
this.$message({
message: '上传图片大小不能超过 5MB!',
type: 'warning'
})
this.picList.pop()
return
}
if (!isImage) {
this.$message({
message: '请选择图片!',
type: 'warning'
})
this.picList.pop()
return
}
// console.log(this.picList)
this.upload_name = 'file_img[]'
let formData = new FormData()
this.startLoading()
formData.append('type', fileType)
formData.append('media', file)
formData.append('codeId', this.codeId)
window.app.ajax.post2(this.dialogImageUrl, formData,
(data, rspMsg) => {
this.endLoading()
if (data.code === 0) {
this.picList[this.picList.length - 1].mediaid = data.data
} else {
this.picList.pop()
this.$message.error(rspMsg)
}
},
(rspMsg, data) => {
this.picList.pop()
this.endLoading()
this.$message.error(rspMsg)
}, { headers: { 'Content-Type': 'multipart/form-data' } })
},
// UGC场景选中0以后的事件
scene0 (value) {
if (value) { // 选中
this.sceneDisabled = true
this.UGCSence0()
} else {
this.sceneDisabled = false
}
},
// UGC场景选中其他以后的事件
sceneOther (value) {
if (value) { // 选中
this.sceneOtherDisabled = false
} else {
this.sceneOtherDisabled = true
this.dataForm.ugcDeclare.otherSceneDesc = ''
}
},
// 重置UGC场景数据
resetUGC () {
this.dataForm.ugcDeclare.scene = [1, 2, 4]
this.dataForm.ugcDeclare.otherSceneDesc = ''
this.dataForm.ugcDeclare.method = [2]
this.dataForm.ugcDeclare.hasAuditTeam = 1
this.dataForm.ugcDeclare.auditDesc = '严重色情内容、轻微色情内容、涉政负面内容、严重辱骂、涉政暴恐(恶搞领导人、特殊标识、特殊着装、枪支、利器、血腥场景)'
},
// UGC场景选择0的初始化
UGCSence0 () {
this.dataForm.ugcDeclare.scene = [0]
this.dataForm.ugcDeclare.otherSceneDesc = ''
this.dataForm.ugcDeclare.method = [1]
this.dataForm.ugcDeclare.hasAuditTeam = 0
this.dataForm.ugcDeclare.auditDesc = ''
},
submitCode () {
let params = {
codeId: this.codeId,
ugcDeclare: this.dataForm.ugcDeclare // 信息安全
}
// 功能说明
// 解析预览信息
let picIdList = []
let videoIdList = []
this.picList.forEach(element => {
picIdList.push(element.mediaid)
})
// // eslint-disable-next-line
// debugger
this.videoList.forEach(element => {
videoIdList.push(element.mediaid)
})
// 预览信息排除空数组
if (picIdList.length > 0 || videoIdList.length > 0) {
params.previewInfo = {}
if (picIdList.length > 0) {
params.previewInfo.picIdList = picIdList
}
if (videoIdList.length > 0) {
params.previewInfo.videoIdList = videoIdList
}
// console.log('预览图片:')
// console.log(params.previewInfo.picIdList)
// console.log('预览视频:')
// console.log(params.previewInfo.videoIdList)
}
// 加急
// params.isSpeed = this.dataForm.isSpeed
params.isSpeed = false
params.isRepeat = false// 上一次提审是否是加急,初次提审都是false
// 小程序描述排除空内容
if (this.dataForm.versionDesc !== '') {
params.versionDesc = this.dataForm.versionDesc
}
// 审核项
const itemList = this.$refs['ref_submit_item'].getItemList()
if (itemList.length > 0) {
params.itemList = itemList
}
console.log(params)
const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/audit'
// const url = '/third/code/audit'
this.startLoading()
window.app.ajax.post(url, params,
(data, rspMsg) => {
this.endLoading()
this.$message.success('提交审核成功,请等待审核结果')
this.resetData()
this.activeName = 'desc'
this.$emit('okSubmit')
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
// 取消
diaCancel () {
this.resetData()
this.activeName = 'desc'
this.$emit('cancleSubmit')
},
resetData () {
this.reseatDataForm()
// 功能说明
this.picList = []
this.videoList = []
// 审核项
this.$refs['ref_submit_item'].reseatData()
// 信息安全
},
// 开启加载动画
startLoading () {
loading = Loading.service({
lock: true, // 是否锁定
text: '正在加载……', // 加载中需要显示的文字
background: 'rgba(0,0,0,.7)' // 背景颜色
})
},
// 结束加载动画
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
props: {
}
}
</script>
<style scoped >
.el-tabs {
margin: 0 20px;
}
.el-upload__tip {
color: rgb(155, 155, 155);
margin: 0;
}
.form {
margin-top: 30px;
}
.div_btn {
z-index: 10;
position: absolute;
top: 5px;
right: 30px;
}
</style>