Browse Source

添加版本管理、最低版本库设置等功能

preview
jiangyy 5 years ago
parent
commit
cd2068187d
  1. 7
      epmet-oper-web/src/js/columns/columns.js
  2. 75
      epmet-oper-web/src/js/columns/customer/miniProManage.js
  3. 20
      epmet-oper-web/src/js/columns/customer/version.js
  4. 76
      epmet-oper-web/src/js/service.js
  5. 4
      epmet-oper-web/src/views/components/CTable.vue
  6. 229
      epmet-oper-web/src/views/modules/code/CommitList.vue
  7. 126
      epmet-oper-web/src/views/modules/code/OperHistory.vue
  8. 6
      epmet-oper-web/src/views/modules/code/SubmitFailReason.vue
  9. 643
      epmet-oper-web/src/views/modules/code/SubmitForm copy.vue
  10. 404
      epmet-oper-web/src/views/modules/code/SubmitForm.vue
  11. 121
      epmet-oper-web/src/views/modules/code/SubmitItem.vue
  12. 551
      epmet-oper-web/src/views/modules/code/VersionItem.vue
  13. 236
      epmet-oper-web/src/views/modules/code/VersionManage.vue
  14. 448
      epmet-oper-web/src/views/modules/customer-manage/MiniProManage/BasicInfo.vue
  15. 346
      epmet-oper-web/src/views/modules/customer-manage/MiniProManage/Category.vue
  16. 266
      epmet-oper-web/src/views/modules/customer-manage/MiniProManage/MiniProManage.vue
  17. 186
      epmet-oper-web/src/views/modules/customer-manage/MiniProManage/Version.vue

7
epmet-oper-web/src/js/columns/columns.js

@ -3,6 +3,8 @@ import CommitCode from './code/commitCode'
import OperHistory from './code/operHistory'
import Category from './code/category'
import RegisterInfo from './customer/customer'
import MiniProManage from './customer/miniProManage'
import Version from './customer/version'
export default {
Temp: Temp, // 代码上传——模板list
@ -11,6 +13,7 @@ export default {
OperHistory: OperHistory, // 代码上传——操作历史
Category: Category, // 代码上传——审核项——类目
RegisterInfo: RegisterInfo // 客户管理——客户注册信息
RegisterInfo: RegisterInfo, // 客户管理——客户注册信息
MiniProManage: MiniProManage, // 客户管理——客户小程序管理
Version: Version // 客户管理——基础库
}

75
epmet-oper-web/src/js/columns/customer/miniProManage.js

@ -0,0 +1,75 @@
export default [
{
key: 'customerName',
title: '客户名称',
type: 'select',
rule: [
{
required: true,
message: '请选择客户',
trigger: 'blur'
}
],
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: false,
width: 120
},
{
key: 'clientType',
title: '类型',
type: 'radio',
rule: [
{
required: true,
message: '请选择类型',
trigger: 'blur'
}
],
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: false,
width: 80,
format: (cellValue, index) => {
if (cellValue === 'resi') {
return '居民端'
} else if (cellValue === 'work') {
return '工作端'
} else {
return '未知'
}
}
},
{
key: 'appId',
title: 'appId',
type: 'radio',
rule: [
{
required: true,
message: '请输入appId',
trigger: 'blur'
}
],
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: true,
width: 120
},
{
key: 'version',
title: '版本号',
type: 'input',
rule: [
{
required: true,
message: '请输入版本号',
trigger: 'blur'
}
],
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: true,
width: 80
}
]

20
epmet-oper-web/src/js/columns/customer/version.js

@ -0,0 +1,20 @@
export default [
{
key: 'percentage',
title: '百分比',
type: 'select',
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: false,
width: 120
},
{
key: 'version',
title: '版本',
type: 'radio',
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: false,
width: 80
}
]

76
epmet-oper-web/src/js/service.js

@ -2,21 +2,21 @@
import column from '@js/columns/columns'
export default {
/**
* 获取列
*
* @param keyword
* @param type
* @returns {Array}
*/
getColumns (keyword, type) {
/**
* 获取列
*
* @param keyword
* @param type
* @returns {Array}
*/
getColumns(keyword, type) {
if (!keyword) {
return []
}
let columns = column[keyword]
let colFrozen = [] // 左固定列
let colNormal = [] // 非固定列
columns.forEach(column => {
columns.forEach((column) => {
let _col = this.formatCol(column, type)
if (_col) {
if (_col.isFrozen) {
@ -32,14 +32,14 @@ export default {
return [colFrozen, colNormal]
},
/**
* 格式化列
*
* @param col
* @param type
* @returns {*}
*/
formatCol (column, type) {
/**
* 格式化列
*
* @param col
* @param type
* @returns {*}
*/
formatCol(column, type) {
// 防止污染column.js基础配置
let col = {}
Object.assign(col, column)
@ -58,7 +58,7 @@ export default {
if (!column.width) {
col.width = 120
}
col.formatter = rowData => {
col.formatter = (rowData) => {
// 没有数值
if (!rowData[column.key] && rowData[column.key] != '0') return '--'
if (column.format) {
@ -77,10 +77,12 @@ export default {
}
}
if (column.renderType) {
col.render = function (data, row) {
col.render = function(data, row) {
switch (column.renderType) {
case 'image':
return '<img style="width:30pxheight: 30px" src="' + data + '"/>'
return (
'<img style="width:30pxheight: 30px" src="' + data + '"/>'
)
break
case 'icon':
return '<i class="el-icon-" + col.icon></i>'
@ -128,18 +130,18 @@ export default {
}
},
/**
* 获取验证规则
*
* @param keyword
*/
getRules (keyword) {
/**
* 获取验证规则
*
* @param keyword
*/
getRules(keyword) {
let rules = {}
let _columns = column[keyword]
if (_columns) {
_columns.forEach(_column => {
_columns.forEach((_column) => {
if (_column.rule) {
_column.rule.forEach(_col => {
_column.rule.forEach((_col) => {
if (!_col.message) {
Object.assign(_col, { message: _col.title + '不合法' })
}
@ -151,16 +153,16 @@ export default {
return rules
},
/**
* 获取model
*
* @param keyword
*/
getModel (keyword) {
/**
* 获取model
*
* @param keyword
*/
getModel(keyword) {
let _model = {}
let _columns = column[keyword]
if (_columns) {
_columns.forEach(_column => {
_columns.forEach((_column) => {
if (_column.display && _column.display.includes('model')) {
_model[_column.key] = this.initValue(_column)
}
@ -174,7 +176,7 @@ export default {
* @param col
* @returns {string|number|Array}
*/
initValue (col) {
initValue(col) {
let value
switch (col.type) {
case 'input':
@ -212,7 +214,7 @@ export default {
return value
}
}
function getTagColor (title) {
function getTagColor(title) {
let color
switch (title) {
case '启用':

4
epmet-oper-web/src/views/components/CTable.vue

@ -70,7 +70,7 @@
<template slot-scope="scope">
<!--传入的操作按钮属性 lyx 20190411 -->
<el-button v-for="item in operations"
v-show="item.isShow==='show'||item.isShow(scope.row)"
v-show="item.isShow(scope.row)"
:key="item.lable"
:style=item.style
:type=item.type
@ -182,7 +182,7 @@ export default {
},
computed: {
//
operationWidth: function () {
operationWidth: () => {
return 120
// if (this.operations.includes('add')) {
// return (this.operations.length - 1) * 80 // add

229
epmet-oper-web/src/views/modules/code/CommitList.vue

@ -1,6 +1,7 @@
<template>
<div>
<el-card shadow="never"
<el-card v-show="!showSubmit"
shadow="never"
class="aui-card--fill">
<div class="mod-demo__demo}">
@ -69,19 +70,22 @@
</el-form-item>
</el-form>
<c-table column-type="index"
<c-table column-type=""
ref="table"
:url="tableUrl"
:params="tableParams"
keyword="CommitCodeList"
:operations="operations"
:tableHeight="tableHeight"
@submitCodeDiaShow="submitCodeDiaShow"
@submitCode="submitCode"
@showQRCode="showQRCode"
@submitRecall="submitRecall"
@issueCode="issueCode"
@submitFailReason="submitFailReason"
@operHistory="operHistory">
@operHistory="operHistory"
@revertcoderelease="revertcoderelease"
@grayrelease="grayrelease"
@revertgrayrelease="revertgrayrelease">
</c-table>
</div>
@ -91,8 +95,10 @@
:optionData="form.data"
@refresh="refresh"></commit-form>
<submit-form ref="ref_submit_form"
@refresh="refresh"></submit-form>
<submit-form v-show="showSubmit"
ref="ref_submit_form"
@refresh="refresh"
@cancleSubmit="cancleSubmit"></submit-form>
<oper-history ref="ref_oper_history"></oper-history>
@ -109,6 +115,23 @@
<div class="el-upload__tip">请用微信扫描二维码</div>
</div>
</c-dialog>
<c-dialog :title="'分阶段发布'"
:width="40"
:dialogHeight="0.5"
:visible="grayreleaseDia.visible"
@cancel="grayreleaseDiaCancel"
@ok="grayreleaseOk">
<div style="text-align:center;margin-top:40px">灰度%
<el-input-number v-model="grayPercentage"
:min="0"
:max="100"
label="灰度百分比"></el-input-number>
<div class="el-upload__tip"
style="margin-top:20px">灰度的百分比 1 ~ 100 的整数控制发布的节奏避免一上线就影响到所有的用户</div>
</div>
</c-dialog>
</div>
</template>
@ -127,7 +150,7 @@ let loading// 加载动画
export default {
data () {
return {
selCodeId: '',
//
tableParams: {
customerId: '', //
@ -140,6 +163,15 @@ export default {
//
tableUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/uploadlist',
//
// :unaudited 退
// :auditing 退
// :audit_success 退
// :audit_failed 退
// :withdrawn 退
// :delay 退
// :release_success 退
// :release_failed 退
// : 退
operations: [
{
lable: '提交审核', //
@ -148,7 +180,7 @@ export default {
type: 'text',
slot: '',
plain: false,
methodName: 'submitCodeDiaShow', //
methodName: 'submitCode', //
isShow: (row) => {
if (row.status === 'unaudited' || row.status === 'audit_failed' || row.status === 'withdrawn') {
return true
@ -167,11 +199,6 @@ export default {
methodName: 'showQRCode', //
isShow: (row) => {
return true
// if (row.status === 'unaudited') {
// return true
// } else {
// return false
// }
}
},
{
@ -183,7 +210,7 @@ export default {
plain: false,
methodName: 'submitRecall', //
isShow: (row) => {
if (row.status === 'auditing') {
if (row.status === 'auditing' || row.status === 'delay') {
return true
} else {
return false
@ -229,10 +256,55 @@ export default {
type: 'text',
slot: '',
plain: false,
methodName: 'operHistory',
isShow: 'show'
methodName: 'operHistory', //
isShow: (row) => {
return true
}
},
{
lable: '版本回退', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'revertcoderelease', //
isShow: (row) => {
return true
}
},
{
lable: '分阶段发布', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'grayrelease', //
isShow: (row) => {
return true
// if (row.status === 'auditSuccess' || row.status === 'releaseFailed') {
// return true
// } else {
// return false
// }
}
},
{
lable: '取消分阶段发布', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'revertgrayrelease', //
isShow: (row) => {
return true
}
}
],
//
showSubmit: false,
//
operDia: {
visible: false
@ -241,6 +313,11 @@ export default {
qrCodeDia: {
visible: false
},
//
grayreleaseDia: {
visible: false
},
grayPercentage: 50, // 1 ~ 100
src: '',
//
form: {
@ -343,17 +420,23 @@ export default {
},
//
submitCodeDiaShow (row) {
submitCode (row) {
let feedbackShow = false
if (row.status === 'audit_failed') {
feedbackShow = true
}
this.showSubmit = true
this.$refs['ref_submit_form'].initData(row.id, feedbackShow)
},
//
cancleSubmit () {
this.showSubmit = false
},
//
submitRecall (row) {
this.$confirm('确认撤回审核?', '提示', {
this.$confirm('单个帐号每天审核撤回次数最多不超过 1 次,一个月不超过 10 次,确认撤回审核?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@ -364,7 +447,7 @@ export default {
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success('撤回成功' + rspMsg)
this.$message.success('审核撤回成功' + rspMsg)
this.refresh()
},
(rspMsg, data) => {
@ -406,17 +489,24 @@ export default {
},
//
issueCode (row) {
const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/release'
const param = {
codeId: row.id
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success(rspMsg)
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
this.$confirm('确认撤回审核?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/release'
const param = {
codeId: row.id
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success('发布成功' + rspMsg)
this.refresh()
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
}).catch(() => { })
},
//
submitFailReason (row) {
@ -426,6 +516,37 @@ export default {
operHistory (row) {
this.$refs['ref_oper_history'].initData(row.id)
},
//
grayrelease (row) {
this.selCodeId = row.id
this.grayreleaseDia.visible = true
},
grayreleaseOk () {
// eslint-disable-next-line
// debugger
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/grayrelease'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/grayrelease'
const param = {
codeId: this.selCodeId,
grayPercentage: this.grayPercentage
}
this.startLoading()
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.grayreleaseDia.visible = false
this.endLoading()
this.refresh()
if (data) {
// console.log(data.qrcode)
this.src = data.qrcode
}
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
}, { headers: { 'Content-Type': 'image/jpeg' } })
},
operDiaCancel () {
this.operDia.visible = false
@ -433,6 +554,9 @@ export default {
qrCodeDiaCancel () {
this.qrCodeDia.visible = false
},
grayreleaseDiaCancel () {
this.grayreleaseDia.visible = false
},
async renderSelData () { // //
const customerUrl = ' https://epmet-cloud.elinkservice.cn/api/third/pacustomer/registerbyauth'
const param = {
@ -465,6 +589,51 @@ export default {
this.$message.error(rspMsg)
})
},
// 退
revertcoderelease (row) {
this.$confirm('确认回退到上一版本?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/revertcoderelease'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/revertcoderelease'
const param = {
codeId: row.id
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success('版本回退成功' + rspMsg)
this.refresh()
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
}).catch(() => { })
},
//
revertgrayrelease (row) {
this.$confirm('确认取消分阶段发布?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/revertgrayrelease'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/revertgrayrelease'
const param = {
codeId: row.id
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success('取消分阶段发布成功' + rspMsg)
this.refresh()
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
}).catch(() => { })
},
//
startLoading () {
loading = Loading.service({

126
epmet-oper-web/src/views/modules/code/OperHistory.vue

@ -3,20 +3,64 @@
<c-dialog :showFooter="false"
:title="'操作历史'"
:visible="diaVisible"
:dialogHeight="1.1"
@cancel="diaCancel">
<div class="mod-demo__demo}">
<el-tabs v-model="activeName"
@tab-click="tabClick"
class="el-tabs">
<el-tab-pane label="操作历史"
name="oper">
<c-table column-type="index"
:pageVisible="true"
ref="table"
:url="tableUrl"
:params="tableParams"
keyword="OperHistory"
:operations="operations"
:tableHeight="tableHeight">
</c-table>
<c-table column-type="index"
:pageVisible="true"
ref="table"
:url="tableUrl"
:params="tableParams"
keyword="OperHistory"
:operations="operations"
:tableHeight="tableHeight">
</c-table>
</div>
</el-tab-pane>
<el-tab-pane label="审核失败历史"
name="submitFail">
<el-table id="out-table"
ref="table_submitfail"
:header-cell-style="{color:'#000'}"
:data="submitFailTable"
:style="{width: '100%'}"
border>
<el-table-column prop="auditTime"
label="审核时间"
width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="reason"
label="原因"
width="300"
header-align="center"
align="center"></el-table-column>
<!--操作列-->
<el-table-column label="图片"
header-align="center"
class="operate">
<template slot-scope="scope">
<el-image class="img"
v-for="(oneImg,index) in scope.row.screenshotUrl"
:key="index"
style="width: 100px; height: 100px"
:preview-src-list="getSrcList(scope.$index,index)"
:src="oneImg"></el-image>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</c-dialog>
@ -33,6 +77,9 @@ export default {
return {
loading: false,
diaVisible: false,
// tab
activeName: 'oper',
params: {},
codeId: '',
//
tableUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/history',
@ -43,7 +90,21 @@ export default {
}
},
//
operations: []
operations: [],
//
submitFailTable: [
// {
// time: '2020-09-09 09:00',
// reason: '',
// screenshotUrl: ['https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg', 'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg']
// },
// {
// time: '2020-09-09 10:00',
// reason: '',
// screenshotUrl: ['https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg', 'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg', 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg']
// }
]
}
},
@ -53,7 +114,16 @@ export default {
mounted () {
},
methods: {
initData (codeId) {
tabClick (tab) {
if (tab.name === 'item') {
this.$refs['ref_submit_item'].initData(this.codeId)
}
if (tab.name === 'submitFail') {
this.loadSubmitFailHistory()
}
},
initData (params, codeId) {
this.params = params
this.codeId = codeId
this.tableParams.codeId = codeId
@ -63,9 +133,28 @@ export default {
this.$refs.table.loadData() //
})
},
//
loadSubmitFailHistory () {
const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/reason'
const param = {
codeId: this.codeId
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.submitFailTable = data
// this.$message.success(rspMsg)
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
},
diaCancel () {
this.diaVisible = false
},
getSrcList (tableIndex, picIndex) {
return this.submitFailTable[tableIndex].screenshotUrl.slice(picIndex).concat(this.submitFailTable[tableIndex].screenshotUrl.slice(0, picIndex))
// return this.submitFailTable[].screenshotUrl.slice(index).concat(this.dataForm.screenshotUrl.slice(0, index))
}
},
computed: {
@ -73,7 +162,16 @@ export default {
// return this.clientHeight - 60 - 80 - 80 - 50 - 400
return this.clientHeight * 0.6 - 40
},
tabsHeight () {
// return this.clientHeight - 60 - 80 - 80 - 50 - 400
return this.clientHeight * 0.6 - 100
},
...mapGetters(['clientHeight'])
}
}
</script>
<style scoped >
.el-tabs {
margin: 0 20px;
}
</style>

6
epmet-oper-web/src/views/modules/code/SubmitFailReason.vue

@ -1,7 +1,7 @@
<template>
<div>
<c-dialog :showFooter="false"
:title="'操作失败原因'"
:title="'审核失败原因'"
:visible="diaVisible"
@cancel="diaCancel">
@ -73,8 +73,8 @@ export default {
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.dataForm.reason = data.reason
this.dataForm.screenshotUrl = data.screenshotUrl
this.dataForm.reason = data[0].reason
this.dataForm.screenshotUrl = data[0].screenshotUrl
// this.$message.success(rspMsg)
},
(rspMsg, data) => {

643
epmet-oper-web/src/views/modules/code/SubmitForm copy.vue

@ -0,0 +1,643 @@
<template>
<div>
<c-dialog :title="'提交审核'"
:visible="diaVisible"
:dialogHeight="1.1"
@cancel="diaCancel"
@ok="submitCode">
<el-tabs v-model="activeName"
@tab-click="tabClick"
class="el-tabs">
<el-tab-pane v-if="feedbackShow"
label="反馈信息"
name="feedback">
<el-form :inline="true"
:model="dataForm"
class="form">
<el-form-item label="反馈内容"
prop="feedbackInfo"
label-width="150px"
style="display:block">
<el-input type="textarea"
:autosize="{ minRows: 5, maxRows: 8}"
:rows="5"
resize="none"
style="width:600px"
placeholder='请输入反馈内容'
v-model="dataForm.feedbackInfo">
</el-input>
<div slot="tip"
class="el-upload__tip">反馈内容至多200字只有上个版本被驳回才可填写</div>
</el-form-item>
<el-form-item label="反馈图片"
label-width="150px"
style="display:block">
<el-upload class="avatar-uploader"
ref="uploadFeedbackPic"
:action="upload_url"
list-type="picture-card"
:name="upload_name"
:on-exceed="exceedFeedbackPic"
:on-remove="removeFeedbackPic"
:file-list="feedbackPicList"
:limit="5"
:http-request="uploadFeedbackPic">
<span class="font-14">选择图片</span>
<div slot="tip"
class="el-upload__tip">反馈图片最多5张大小2M以内</div>
</el-upload>
</el-form-item>
</el-form>
</el-tab-pane>
<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: 5, maxRows: 8}"
:rows="5"
resize="none"
style="width:500px"
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张图片图片支持jpgjpegbmpgit或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.使用平台建议的内容安全API2.使用其他的内容审核产品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>
</c-dialog>
</div>
</template>
<script>
import CDialog from '@c/CDialog'
import CommitForm from './CommitForm'
import SubmitItem from './SubmitItem'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading //
export default {
data () {
return {
loading: false,
feedbackShow: false, //
codeId: '', // id
diaVisible: false,
// tab
activeName: 'desc',
sceneDisabled: true, //
sceneOtherDisabled: true, //
dataForm: {
versionDesc: '', //
feedbackInfo: '', //
feedbackStuff: '', //
ugcDeclare: { // UGC
scene: [1, 2, 4], // UGC 0,, 1.,2.,3.,4.,5, ,scene0
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: [], //
feedbackPicList: [], //
//
dialog: {
title: '',
visible: false
}
}
},
components: {
CDialog, CommitForm, SubmitItem
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight * 0.56 - 100
},
...mapGetters(['clientHeight'])
},
methods: {
initData (codeId, feedbackShow) {
this.codeId = codeId
this.feedbackShow = feedbackShow
this.diaVisible = true
},
reseatDataForm () {
this.dataForm = {
isSpeed: false, //
versionDesc: '', //
feedbackInfo: '', //
feedbackStuff: '', //
ugcDeclare: { // UGC
scene: [1, 2, 4], // UGC 0,, 1.,2.,3.,4.,5, ,scene0
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)
},
removeFeedbackPic (file) {
this.feedbackPicList.splice(this.feedbackPicList.findIndex(item => item.uid === file.uid), 1)
// console.log(this.feedbackPicList)
},
exceedPic: () => {
this.$message({
message: '最多上传5张预览图片',
type: 'warning'
})
},
exceedVedio: () => {
this.$message({
message: '最多上传2个预览视频',
type: 'warning'
})
},
exceedFeedbackPic: () => {
this.$message({
message: '最多上传5张反馈图片',
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' } })
},
//
uploadFeedbackPic: (params) => {
let file = params.file
let fileType = file.type
let isImage = fileType.indexOf('image') !== -1
let fileUrl = this.$refs.uploadFeedbackPic.uploadFiles[this.feedbackPicList.length].url
file.url = fileUrl
this.feedbackPicList.push(file)
let isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) {
this.$message({
message: '上传图片大小不能超过 2MB!',
type: 'warning'
})
this.feedbackPicList.pop()
return
}
if (!isImage) {
this.$message({
message: '请选择图片!',
type: 'warning'
})
this.feedbackPicList.pop()
return
}
this.upload_name = 'file_img[]'
let formData = new FormData()
formData.append('type', fileType)
formData.append('media', file)
formData.append('codeId', this.codeId)
this.startLoading()
window.app.ajax.post2(this.dialogImageUrl, formData,
(data, rspMsg) => {
this.endLoading()
if (data.code === 0) {
this.feedbackPicList[this.feedbackPicList.length - 1].mediaid = data.data
} else {
this.feedbackPicList.pop()
this.$message.error(rspMsg)
}
},
(rspMsg, data) => {
this.feedbackPicList.pop()
this.endLoading()
this.$message.error(rspMsg)
}, { headers: { 'Content-Type': 'multipart/form-data' } })
},
// UGC0
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 = '严重色情内容、轻微色情内容、涉政负面内容、严重辱骂、涉政暴恐(恶搞领导人、特殊标识、特殊着装、枪支、利器、血腥场景)'
},
// UGC0
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)
}
//
if (this.dataForm.versionDesc !== '') {
params.versionDesc = this.dataForm.versionDesc
}
//
const itemList = this.$refs['ref_submit_item'].getItemList()
if (itemList.length > 0) {
params.itemList = itemList
}
//
if (this.dataForm.feedbackInfo !== '') {
params.feedbackInfo = this.dataForm.feedbackInfo
}
this.dataForm.feedbackStuff = ''
this.feedbackPicList.forEach(element => {
this.dataForm.feedbackStuff = this.dataForm.feedbackStuff + element.mediaid + '|'
})
if (this.dataForm.feedbackStuff !== '') {
this.dataForm.feedbackStuff = this.dataForm.feedbackStuff.slice(0, this.dataForm.feedbackStuff.length - 1)
params.feedbackStuff = this.dataForm.feedbackStuff
}
console.log(params)
// console.log('')
// console.log(params.feedbackStuff)
const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/audit'
this.startLoading()
window.app.ajax.post(url, params,
(data, rspMsg) => {
this.endLoading()
this.$message.success('提交审核成功,请等待审核结果')
this.diaCancel()
this.$emit('refresh')
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
//
diaCancel () {
this.resetData()
this.activeName = 'desc'
this.diaVisible = false
},
resetData () {
this.reseatDataForm()
//
this.picList = []
this.videoList = []
//
this.$refs['ref_submit_item'].reseatData()
//
this.feedbackPicList = []
//
},
//
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-left: 50px;
margin-right: 50px;
}
.el-upload__tip {
color: rgb(155, 155, 155);
}
.form {
margin-top: 30px;
}
</style>

404
epmet-oper-web/src/views/modules/code/SubmitForm.vue

@ -1,204 +1,214 @@
<template>
<div>
<c-dialog :title="'提交审核'"
:visible="diaVisible"
:dialogHeight="1.1"
@cancel="diaCancel"
@ok="submitCode">
<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"
<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 v-if="feedbackShow"
label="反馈信息"
name="feedback">
<el-form :inline="true"
:model="dataForm"
class="form">
<el-form-item label="反馈内容"
prop="feedbackInfo"
label-width="150px"
style="display:block">
<el-input type="textarea"
:autosize="{ minRows: 5, maxRows: 8}"
:rows="5"
resize="none"
style="width:600px"
placeholder='请输入反馈内容'
v-model="dataForm.feedbackInfo">
</el-input>
<div slot="tip"
class="el-upload__tip">反馈内容至多200字只有上个版本被驳回才可填写</div>
</el-form-item>
<el-form-item label="反馈图片"
label-width="150px"
style="display:block">
<el-upload class="avatar-uploader"
ref="uploadFeedbackPic"
:action="upload_url"
list-type="picture-card"
:name="upload_name"
:on-exceed="exceedFeedbackPic"
:on-remove="removeFeedbackPic"
:file-list="feedbackPicList"
:limit="5"
:http-request="uploadFeedbackPic">
<span class="font-14">选择图片</span>
<div slot="tip"
class="el-upload__tip">反馈图片最多5张大小2M以内</div>
</el-upload>
</el-form-item>
</el-form>
</el-tab-pane>
<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张图片图片支持jpgjpegbmpgit或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"
:autosize="{ minRows: 5, maxRows: 8}"
:rows="5"
:disabled="sceneOtherDisabled"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
resize="none"
style="width:500px"
placeholder='请输入版本功能说明'
v-model="dataForm.versionDesc">
placeholder='请输入其他场景'
v-model="dataForm.ugcDeclare.otherSceneDesc">
</el-input>
<div class="el-upload__tip">小程序版本说明和功能解释</div>
<div class="el-upload__tip">当scene选其他时的说明,不超时256字</div>
</el-form-item>
<el-form-item label="预览图片"
<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="5"
:http-request="uploadPic">
<span class="font-14">选择图片</span>
<div slot="tip"
class="el-upload__tip">小程序页面截图最多5张每张大小2M以内</div>
</el-upload>
<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.使用平台建议的内容安全API2.使用其他的内容审核产品3.通过人工审核把关4.未做内容审核把关</div> -->
</el-form-item>
<el-form-item label="预览视频"
<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="2"
:http-request="uploadVedio">
<el-button size="small"
type="primary">选择视频</el-button>
<div slot="tip"
class="el-upload__tip">小程序操作录屏大小2M以内MP4格式</div>
</el-upload>
<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>
</el-tab-pane>
<el-tab-pane label="审核项"
name="item">
<submit-item ref="ref_submit_item"></submit-item>
</el-tab-pane>
<el-tab-pane v-if="feedbackShow"
label="反馈信息"
name="feedback">
<el-form :inline="true"
:model="dataForm"
class="form">
<el-form-item label="反馈内容"
prop="feedbackInfo"
<el-form-item label="审核机制"
label-width="150px"
style="display:block">
<el-input type="textarea"
:autosize="{ minRows: 5, maxRows: 8}"
:rows="5"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
resize="none"
style="width:600px"
placeholder='请输入反馈内容'
v-model="dataForm.feedbackInfo">
style="width:500px"
placeholder='请输入审核机制'
v-model="dataForm.ugcDeclare.auditDesc">
</el-input>
<div slot="tip"
class="el-upload__tip">反馈内容至多200字只有上个版本被驳回才可填写</div>
</el-form-item>
<el-form-item label="反馈图片"
label-width="150px"
style="display:block">
<el-upload class="avatar-uploader"
ref="uploadFeedbackPic"
:action="upload_url"
list-type="picture-card"
:name="upload_name"
:on-exceed="exceedFeedbackPic"
:on-remove="removeFeedbackPic"
:file-list="feedbackPicList"
:limit="5"
:http-request="uploadFeedbackPic">
<span class="font-14">选择图片</span>
<div slot="tip"
class="el-upload__tip">反馈图片最多5张大小2M以内</div>
</el-upload>
<div class="el-upload__tip">说明当前对UGC内容的审核机制,不超过256字</div>
</el-form-item>
</div>
</el-form>
</el-form>
</el-tab-pane>
</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.使用平台建议的内容安全API2.使用其他的内容审核产品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>
</c-dialog>
</el-tabs>
</div>
</template>
@ -217,7 +227,6 @@ export default {
loading: false,
feedbackShow: false, //
codeId: '', // id
diaVisible: false,
// tab
activeName: 'desc',
@ -225,6 +234,7 @@ export default {
sceneDisabled: true, //
sceneOtherDisabled: true, //
dataForm: {
isSpeed: false, //
versionDesc: '', //
feedbackInfo: '', //
feedbackStuff: '', //
@ -267,10 +277,13 @@ export default {
initData (codeId, feedbackShow) {
this.codeId = codeId
this.feedbackShow = feedbackShow
this.diaVisible = true
if (this.feedbackShow) {
this.activeName = 'feedback'
}
},
reseatDataForm () {
this.dataForm = {
isSpeed: false, //
versionDesc: '', //
feedbackInfo: '', //
feedbackStuff: '', //
@ -330,10 +343,10 @@ export default {
file.url = fileUrl
this.videoList.push(file)
let isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) {
let isLt20M = file.size / 1024 / 1024 < 20
if (!isLt20M) {
this.$message({
message: '上传视频大小不能超过 2MB!',
message: '上传视频大小不能超过 20MB!',
type: 'warning'
})
this.videoList.pop()
@ -380,10 +393,10 @@ export default {
file.url = fileUrl
this.picList.push(file)
let isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) {
let isLt5M = file.size / 1024 / 1024 < 5
if (!isLt5M) {
this.$message({
message: '上传图片大小不能超过 2MB!',
message: '上传图片大小不能超过 5MB!',
type: 'warning'
})
this.picList.pop()
@ -537,6 +550,8 @@ export default {
// console.log('')
// console.log(params.previewInfo.videoIdList)
}
//
params.isSpeed = this.dataForm.isSpeed
//
if (this.dataForm.versionDesc !== '') {
@ -574,7 +589,8 @@ export default {
(data, rspMsg) => {
this.endLoading()
this.$message.success('提交审核成功,请等待审核结果')
this.diaCancel()
this.resetData()
this.activeName = 'desc'
this.$emit('refresh')
},
(rspMsg, data) => {
@ -586,7 +602,7 @@ export default {
diaCancel () {
this.resetData()
this.activeName = 'desc'
this.diaVisible = false
this.$emit('cancleSubmit')
},
resetData () {
this.reseatDataForm()
@ -622,13 +638,19 @@ export default {
</script>
<style scoped >
.el-tabs {
margin-left: 50px;
margin-right: 50px;
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>

121
epmet-oper-web/src/views/modules/code/SubmitItem.vue

@ -4,13 +4,14 @@
<div>
<el-form :inline="true"
:model="dataForm">
:model="dataForm"
style="width:1300px">
<el-form-item label="页面列表"
prop="versionDesc"
label-width="150px">
label-width="100px">
<el-select v-model="dataForm.address"
placeholder="页面列表"
style="width:600px"
style="width:300px"
filterable>
<el-option v-for="item in addressList"
:key="item.value"
@ -22,9 +23,12 @@
</el-form-item>
<el-form-item label="标签"
prop="tag"
label-width="150px">
label-width="80px">
<el-input placeholder='请输入标签'
style="width:300px"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
maxlength="20"
show-word-limit
v-model="dataForm.tag">
@ -34,67 +38,74 @@
<el-form-item label="标题"
prop="title"
label-width="150px">
label-width="80px">
<el-input placeholder='请输入标题'
style="width:600px"
style="width:300px"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
maxlength="32"
show-word-limit
v-model="dataForm.title">
</el-input>
<div class="el-upload__tip">小程序页面的标题标题长度至多32</div>
</el-form-item>
<el-form-item label="可选类目"
prop="title"
label-width="100px">
<el-table id="out-table"
ref="table_category"
:header-cell-style="{color:'#000'}"
:data="categoryList"
style="width: 1000px"
border>
<el-table-column label=""
width="35"
center>
<template slot-scope="scope">
<el-radio :label="scope.row.id"
v-model="templateRadio"
@change.native="getRadioRow(scope.$index,scope.row)">&nbsp;</el-radio>
</template>
</el-table-column>
</el-form>
<el-table id="out-table"
ref="table_category"
:header-cell-style="{color:'#000'}"
:data="categoryList"
:style="{width: '100%'}"
border>
<el-table-column label=""
width="35"
center>
<template slot-scope="scope">
<el-radio :label="scope.row.id"
v-model="templateRadio"
@change.native="getRadioRow(scope.$index,scope.row)">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column prop="firstClass"
label="一级名称"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="firstId"
label="一级ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="secondClass"
label="二级名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="secondId"
label="二级ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="thirdClass"
label="三级名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="thirdId"
label="三级ID"
header-align="center"
min-width="100"
align="center"></el-table-column>
</el-table>
</el-form-item>
<el-table-column prop="firstClass"
label="一级名称"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="firstId"
label="一级ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="secondClass"
label="二级名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="secondId"
label="二级ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="thirdClass"
label="三级名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="thirdId"
label="三级ID"
header-align="center"
min-width="100"
align="center"></el-table-column>
</el-table>
</el-form>
<div style="margin-top:10px">
<el-button type="primary"
style="margin-bottom:10px"
style="margin:0 10px 10px 10px"
@click="addItem()">增加</el-button>
</div>
<el-table id="out-table"
@ -276,7 +287,7 @@ export default {
//
const that = this
let result = this.itemTableData.some(function (value) {
let result = this.itemTableData.some((value) => {
return value.address === that.dataForm.address
})

551
epmet-oper-web/src/views/modules/code/VersionItem.vue

@ -0,0 +1,551 @@
<template>
<div>
<div v-show="!showSubmit">
<div>
<el-button type="default"
@click="versionCancel">返回</el-button>
<el-button type="primary"
@click="operHistoryShow">操作历史</el-button>
</div>
<el-row class="row"
:gutter="20">
<el-col :span="8">
<el-card>
<div slot="header"
class="clearfix">
<span>线上版本</span>
<el-button class="btn_card"
type="text"
@click="commitCodeShow">版本回退</el-button>
</div>
<div>
<el-form :style="{height:rowHeight}"
label-position="left"
block
class="form">
<el-form-item :label-width="labelWidth"
label="版本号">
<span>{{ release.version }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="发布时间">
<span>{{ release.releaseTime }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="发布模式">
<span>{{ release.releaseTypeShow }}</span>
</el-form-item>
<el-form-item v-if="release.releaseType==='step'"
:label-width="labelWidth"
label="灰度值">
<span>{{ release.grayPercentage }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="提审时间">
<span>{{ release.auditTime }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="上传时间">
<span>{{ release.commitTime }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="版本说明">
<span>{{ release.codeInfo }}</span>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
<el-col :span="8">
<el-card>
<div slot="header"
class="clearfix">
<span>审核版本</span>
<el-button v-if="audit.status==='auditing'||audit.status==='delay'"
class="btn_card"
type="text"
@click="submitRecall">审核撤回</el-button>
<el-button v-if="audit.status==='auditing'||audit.status==='delay'"
class="btn_card"
type="text"
@click="speedupaudit">加急申请</el-button>
<el-button v-if="audit.status==='audit_success'"
class="btn_card"
type="text"
@click="issueCode">发布</el-button>
<el-button v-if="audit.status==='audit_failed'"
style="float: right; padding: 3px 0"
type="text"
@click="submitFailReasonShow">审核失败原因</el-button>
<el-button v-if="audit.status==='audit_failed'||audit.status==='withdrawn'"
style="float: right; padding: 3px 0"
type="text"
@click="submitFailCodeShow">重新提审</el-button>
</div>
<div>
<el-form :style="{height:rowHeight}"
label-position="left"
block
class="form">
<el-form-item :label-width="labelWidth"
label="版本号">
<span>{{ audit.version }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="提审时间">
<span>{{ audit.auditTime }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="上传时间">
<span>{{ audit.commitTime }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="审核状态">
<span>{{ audit.statusShow }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="版本说明">
<span>{{ audit.codeInfo }}</span>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
<el-col :span="8">
<el-card>
<div slot="header"
class="clearfix">
<span>开发版本</span>
<el-button class="btn_card"
type="text"
@click="commitCodeShow">上传代码</el-button>
<el-button class="btn_card"
type="text"
@click="QRCodeShow">二维码</el-button>
<el-button class="btn_card"
type="text"
@click="submitCodeShow">提交审核</el-button>
</div>
<div>
<el-form :style="{height:rowHeight}"
label-position="left"
block
class="form">
<el-form-item :label-width="labelWidth"
label="版本号">
<span>{{ audit.version }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="上传时间">
<span>{{ audit.commitTime }}</span>
</el-form-item>
<el-form-item :label-width="labelWidth"
label="版本说明">
<span>{{ audit.codeInfo }}</span>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
</el-row>
</div>
<commit-form ref="ref_commit_form"
:optionData="optionData"
@refresh="refresh"></commit-form>
<submit-form v-show="showSubmit"
ref="ref_submit_form"
@refresh="refresh"
@cancleSubmit="cancleSubmit"></submit-form>
<oper-history ref="ref_oper_history"></oper-history>
<submit-fail-reason ref="ref_submit_fail_reason"></submit-fail-reason>
<c-dialog :showFooter="false"
:title="'二维码'"
:width="40"
:visible="qrCodeDia.visible"
@cancel="qrCodeDiaCancel">
<div style="text-align:center">
<el-image style="width: 300px; height: 300px"
:src="src"></el-image>
<div class="el-upload__tip">请用微信扫描二维码</div>
</div>
</c-dialog>
<c-dialog :title="'分阶段发布'"
:width="40"
:dialogHeight="0.5"
:visible="grayreleaseDia.visible"
@cancel="grayreleaseDiaCancel"
@ok="grayreleaseOk">
<div style="text-align:center;margin-top:40px">灰度%
<el-input-number v-model="grayPercentage"
:min="0"
:max="100"
label="灰度百分比"></el-input-number>
<div class="el-upload__tip"
style="margin-top:20px">灰度的百分比 1 ~ 100 的整数控制发布的节奏避免一上线就影响到所有的用户</div>
</div>
</c-dialog>
</div>
</template>
<script>
import CDialog from '@c/CDialog'
import SubmitForm from './SubmitForm'
import CommitForm from './CommitForm'
import OperHistory from './OperHistory'
import SubmitFailReason from './SubmitFailReason'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading //
export default {
data () {
return {
loading: false,
labelWidth: '100px',
// customerId: '', // id
// clientType: '', //
params: {
customerId: '',
clientType: ''
},
optionData: {},
release: {
codeId: '',
version: '1.0.3',
codeInfo: '版本1111111已经上线的版本版本1111111已经上线的版本版本1111111已经上线的版本版本1111111已经上线的版本版本1111111已经上线的版本版本1111111已经上线的版本',
commitTime: '2020-08-07 10:00:00',
auditTime: '2020-08-07 10:00:00',
releaseTime: '2020-08-07 10:00:00',
releaseType: 'step',
releaseTypeShow: '全量',
grayPercentage: 10
},
audit: {
codeId: '',
version: '1.0.2',
codeInfo: '版本1111111已经上线的版本',
commitTime: '2020-08-07 10:00:00',
auditTime: '2020-08-07 10:00:00',
status: 'auditing',
statusShow: '审核中'
},
commit: {
codeId: '',
version: '1.0.2',
codeInfo: '版本1111111已经上线的版本',
commitTime: '2020-08-07 10:00:00'
},
//
showSubmit: false,
//
operDia: {
visible: false
},
//
qrCodeDia: {
visible: false
},
src: '',
//
grayreleaseDia: {
visible: false
},
grayPercentage: 50 // 1 ~ 100
}
},
components: {
CDialog, SubmitForm, CommitForm, OperHistory, SubmitFailReason
},
mounted () {
},
computed: {
rowHeight () {
return (this.clientHeight - 270) + 'px'
},
...mapGetters(['clientHeight'])
},
methods: {
initData (customerId, clientType, optionData) {
this.params = { customerId, clientType }
this.optionData = optionData
// this.customerId = customerId
// this.clientType = clientType
this.loadData()
},
//
refresh () {
this.loadData()
},
//
loadData () {
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/version'
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/version'
this.startLoading()
window.app.ajax.post(url, this.params,
(data, rspMsg) => {
// // eslint-disable-next-line
// debugger
this.release = data.release
if (this.release.releaseType === 'step') {
this.release.releaseTypeShow = '分阶段'
} else {
this.release.releaseTypeShow = '全量'
}
this.audit = data.audit
this.audit.status = 'audit_failed'
// :auditing;;audit_success;;audit_failed;:withdrawn;:delay
if (this.audit.status === 'auditing') {
this.audit.statusShow = '分阶段'
} else if (this.audit.status === 'audit_success') {
this.audit.statusShow = '审核成功'
} else if (this.audit.status === 'audit_failed') {
this.audit.statusShow = '审核被拒绝'
} else if (this.audit.status === 'withdrawn') {
this.audit.statusShow = '已撤回'
} else {
this.audit.statusShow = '审核延后'
}
this.commit = data.commit
this.endLoading()
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
//
versionCancel () {
this.$emit('cancelVersion')
},
//
operHistoryShow () {
this.$refs['ref_oper_history'].initData(this.params, this.audit.codeId)
},
//
commitCodeShow (customerId) {
this.$nextTick(() => {
let dataForm = {
clientType: 'resi',
customerId: customerId
}
this.$refs['ref_commit_form'].initData(dataForm, this.optionData)
})
},
//
QRCodeShow () {
this.qrCodeDia.visible = true
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/qrcode'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/qrcode'
const param = {
codeId: this.commit.codeId
}
this.startLoading()
window.app.ajax.post(url, param,
(data, rspMsg) => {
// // eslint-disable-next-line
// debugger
this.endLoading()
if (data) {
// console.log(data.qrcode)
this.src = data.qrcode
}
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
}, { headers: { 'Content-Type': 'image/jpeg' } })
},
//
submitCodeShow () {
let feedbackShow = false
this.showSubmit = true
this.$refs['ref_submit_form'].initData(this.audit.codeId, feedbackShow)
},
//
submitFailCodeShow () {
let feedbackShow = true
this.showSubmit = true
this.$refs['ref_submit_form'].initData(this.audit.codeId, feedbackShow)
},
//
cancleSubmit () {
this.showSubmit = false
},
//
submitRecall () {
this.$confirm('单个帐号每天审核撤回次数最多不超过 1 次,一个月不超过 10 次,确认撤回审核?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/undo'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/undo'
const param = {
codeId: this.auditTime.codeId
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success('审核撤回成功' + rspMsg)
this.refresh()
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
}).catch(() => {
})
},
//
issueCode () {
this.$confirm('确认撤回审核?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/release'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/release'
const param = {
codeId: this.audit.codeId
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success('发布成功' + rspMsg)
this.refresh()
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
}).catch(() => { })
},
//
submitFailReasonShow () {
this.$refs['ref_submit_fail_reason'].initData(this.audit.codeId)
},
//
grayrelease () {
this.selCodeId = this.release.codeId
this.grayreleaseDia.visible = true
},
grayreleaseOk () {
// eslint-disable-next-line
// debugger
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/grayrelease'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/grayrelease'
const param = {
codeId: this.selCodeId,
grayPercentage: this.grayPercentage
}
this.startLoading()
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.grayreleaseDia.visible = false
this.endLoading()
this.refresh()
if (data) {
// console.log(data.qrcode)
this.src = data.qrcode
}
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
}, { headers: { 'Content-Type': 'image/jpeg' } })
},
//
speedupaudit () {
},
operDiaCancel () {
this.operDia.visible = false
},
qrCodeDiaCancel () {
this.qrCodeDia.visible = false
},
grayreleaseDiaCancel () {
this.grayreleaseDia.visible = false
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
props: {
}
}
</script>
<style scoped >
.btn_card {
float: right;
padding: 3px 0 3px 5px;
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both;
}
.el-row {
/* margin-bottom: 20px; */
display: flex;
flex-wrap: wrap;
margin-top: 10px;
margin-right: 50px;
}
.form {
overflow-y: auto;
}
</style>

236
epmet-oper-web/src/views/modules/code/VersionManage.vue

@ -0,0 +1,236 @@
<!-- 客户小程序管理 -->
<template>
<div>
<div v-show="!showVersion"
class="mod-demo__demo}">
<el-form :inline="true"
:model="tableParams">
<el-form-item>
<el-select v-model="tableParams.customerId"
placeholder="客户"
clearable>
<el-option v-for="item in form.data['customerId']"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="tableParams.clientType"
placeholder="类型"
clearable>
<el-option v-for="item in form.data['clientType']"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="loadTableData()">查询</el-button>
</el-form-item>
<!-- <el-form-item>
<el-button type="primary"
@click="commitCodeDiaShow('')">上传代码</el-button>
</el-form-item> -->
</el-form>
<c-table column-type="index"
ref="table"
:url="tableUrl"
:params="tableParams"
keyword="MiniProManage"
:operations="operations"
:tableHeight="tableHeight"
@versionManage="versionManage">
</c-table>
</div>
<version-item v-show="showVersion"
ref="ref_version_item"
@okVersion="okVersion"
@cancelVersion="cancelVersion"></version-item>
</div>
</template>
<script>
import CDialog from '@c/CDialog'
import CTable from '@c/CTable'
import VersionItem from './VersionItem'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading//
export default {
data () {
return {
//
tableParams: {
customerId: '', //
clientType: '', //
source: this.env
},
//
tableUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/uploadlist',
//
operations: [
{
lable: '版本管理', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'versionManage', //
isShow: (row) => {
return true
}
}
],
//
showVersion: false,
src: '',
//
form: {
dataUrl: [], // //url
data: { //
clientType: [
{
value: 'resi',
label: '居民端'
},
{
value: 'work',
label: '工作端'
}
]
}
}
}
},
components: {
CDialog, CTable, VersionItem
},
activated () {
let params = this.$route.params
//
if (params.showCommit) {
this.form.data.customerId = params.customerList
this.commitCodeDiaShow(params.customerId)
}
this.$nextTick(() => {
this.$refs.table.doLayout() //
})
},
mounted () {
this.renderSelData()
this.loadTableData()
},
computed: {
tableHeight () {
return this.clientHeight - 80 - 80 - 85
},
...mapGetters(['clientHeight', 'env'])
},
methods: {
//
refresh () {
this.loadTableData()
},
//
loadTableData () {
this.tableParams.source = this.env
this.$nextTick(() => {
this.$refs.table.loadData() //
})
},
//
versionManage (row) {
this.showVersion = true
this.$refs['ref_version_item'].initData(row.customerId, row.clientType, this.form.data)
},
//
okVersion () {
this.showVersion = false
this.refresh()
},
//
cancelVersion () {
this.showVersion = false
},
async renderSelData () { // //
const customerUrl = ' https://epmet-cloud.elinkservice.cn/api/third/pacustomer/registerbyauth'
const param = {
// workAuth: 1,
// resiAuth: 1,
source: this.env,
initState: 1
}
this.startLoading()
await window.app.ajax.post(customerUrl, param,
(data, rspMsg) => {
this.endLoading()
if (data) {
let customerList = []
data.forEach(element => {
let oneObj = {
value: element.customerId,
label: element.customerName
}
customerList.push(oneObj)
})
this.form.data.customerId = customerList
this.$forceUpdate()
}
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
props: {
optionData: {
type: Object,
default () {
return {}
}
}
}
}
</script>
<style>
.el-upload__tip {
color: rgb(155, 155, 155);
}
</style>

448
epmet-oper-web/src/views/modules/customer-manage/MiniProManage/BasicInfo.vue

@ -0,0 +1,448 @@
<template>
<div>
<c-dialog :showFooter='false'
:title="'基础信息'"
:visible="diaVisible"
:dialogHeight="1.1"
@cancel="diaCancel"
@ok="submitCode">
<el-tabs v-model="activeName"
@tab-click="tabClick"
class="el-tabs">
<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.使用平台建议的内容安全API2.使用其他的内容审核产品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>
</c-dialog>
</div>
</template>
<script>
import CDialog from '@c/CDialog'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading //
export default {
data () {
return {
loading: false,
feedbackShow: false, //
codeId: '', // id
diaVisible: false,
// tab
activeName: 'desc',
sceneDisabled: true, //
sceneOtherDisabled: true, //
dataForm: {
versionDesc: '', //
ugcDeclare: { // UGC
scene: [1, 2, 4], // UGC 0,, 1.,2.,3.,4.,5, ,scene0
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: [], //
feedbackPicList: [], //
//
dialog: {
title: '',
visible: false
}
}
},
components: {
CDialog
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight * 0.56 - 100
},
...mapGetters(['clientHeight'])
},
methods: {
initData (codeId, feedbackShow) {
this.codeId = codeId
this.feedbackShow = feedbackShow
this.diaVisible = true
},
reseatDataForm () {
this.dataForm = {
isSpeed: false, //
versionDesc: '', //
ugcDeclare: { // UGC
scene: [1, 2, 4], // UGC 0,, 1.,2.,3.,4.,5, ,scene0
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)
},
removeFeedbackPic (file) {
this.feedbackPicList.splice(this.feedbackPicList.findIndex(item => item.uid === file.uid), 1)
// console.log(this.feedbackPicList)
},
exceedPic: () => {
this.$message({
message: '最多上传5张预览图片',
type: 'warning'
})
},
exceedVedio: () => {
this.$message({
message: '最多上传2个预览视频',
type: 'warning'
})
},
exceedFeedbackPic: () => {
this.$message({
message: '最多上传5张反馈图片',
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' } })
},
//
uploadFeedbackPic: (params) => {
let file = params.file
let fileType = file.type
let isImage = fileType.indexOf('image') !== -1
let fileUrl = this.$refs.uploadFeedbackPic.uploadFiles[this.feedbackPicList.length].url
file.url = fileUrl
this.feedbackPicList.push(file)
let isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) {
this.$message({
message: '上传图片大小不能超过 2MB!',
type: 'warning'
})
this.feedbackPicList.pop()
return
}
if (!isImage) {
this.$message({
message: '请选择图片!',
type: 'warning'
})
this.feedbackPicList.pop()
return
}
this.upload_name = 'file_img[]'
let formData = new FormData()
formData.append('type', fileType)
formData.append('media', file)
formData.append('codeId', this.codeId)
this.startLoading()
window.app.ajax.post2(this.dialogImageUrl, formData,
(data, rspMsg) => {
this.endLoading()
if (data.code === 0) {
this.feedbackPicList[this.feedbackPicList.length - 1].mediaid = data.data
} else {
this.feedbackPicList.pop()
this.$message.error(rspMsg)
}
},
(rspMsg, data) => {
this.feedbackPicList.pop()
this.endLoading()
this.$message.error(rspMsg)
}, { headers: { 'Content-Type': 'multipart/form-data' } })
},
// UGC0
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 = '严重色情内容、轻微色情内容、涉政负面内容、严重辱骂、涉政暴恐(恶搞领导人、特殊标识、特殊着装、枪支、利器、血腥场景)'
},
// UGC0
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 () {
},
//
diaCancel () {
this.resetData()
this.activeName = 'desc'
this.diaVisible = false
},
resetData () {
this.reseatDataForm()
//
this.picList = []
this.videoList = []
//
this.$refs['ref_submit_item'].reseatData()
//
this.feedbackPicList = []
//
},
//
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-left: 50px;
margin-right: 50px;
}
.el-upload__tip {
color: rgb(155, 155, 155);
}
.form {
margin-top: 30px;
}
</style>

346
epmet-oper-web/src/views/modules/customer-manage/MiniProManage/Category.vue

@ -0,0 +1,346 @@
<!--审核项-->
<template>
<div>
<el-form :inline="true"
:model="dataForm"
style="width:1300px">
<el-form-item label="页面列表"
prop="versionDesc"
label-width="100px">
<el-select v-model="dataForm.address"
placeholder="页面列表"
style="width:300px"
filterable>
<el-option v-for="item in addressList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<div class="el-upload__tip">小程序版本说明和功能解释</div>
</el-form-item>
<el-form-item label="标签"
prop="tag"
label-width="80px">
<el-input placeholder='请输入标签'
style="width:300px"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
maxlength="20"
show-word-limit
v-model="dataForm.tag">
</el-input>
<div class="el-upload__tip">小程序的标签用空格分隔标签至多10个标签长度至多20</div>
</el-form-item>
<el-form-item label="标题"
prop="title"
label-width="80px">
<el-input placeholder='请输入标题'
style="width:300px"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
maxlength="32"
show-word-limit
v-model="dataForm.title">
</el-input>
<div class="el-upload__tip">小程序页面的标题标题长度至多32</div>
</el-form-item>
<el-form-item label="可选类目"
prop="title"
label-width="100px">
<el-table id="out-table"
ref="table_category"
:header-cell-style="{color:'#000'}"
:data="categoryList"
style="width: 1000px"
border>
<el-table-column label=""
width="35"
center>
<template slot-scope="scope">
<el-radio :label="scope.row.id"
v-model="templateRadio"
@change.native="getRadioRow(scope.$index,scope.row)">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column prop="firstClass"
label="一级名称"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="firstId"
label="一级ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="secondClass"
label="二级名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="secondId"
label="二级ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="thirdClass"
label="三级名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="thirdId"
label="三级ID"
header-align="center"
min-width="100"
align="center"></el-table-column>
</el-table>
</el-form-item>
</el-form>
<div style="margin-top:10px">
<el-button type="primary"
style="margin:0 10px 10px 10px"
@click="addItem()">增加</el-button>
</div>
<el-table id="out-table"
ref="table"
:header-cell-style="{color:'#000'}"
:data="itemTableData"
:style="{width: '100%'}"
border>
<el-table-column prop="address"
label="页面"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="tag"
label="标签"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="title"
label="标题"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="firstClass"
label="一级名称"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="firstId"
label="一级ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="secondClass"
label="二级名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="secondId"
label="二级ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="thirdClass"
label="三级名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="thirdId"
label="三级ID"
header-align="center"
min-width="100"
align="center"></el-table-column>
<!--操作列-->
<el-table-column label="操作"
fixed="right"
:min-width="80"
header-align="center"
class="operate">
<template slot-scope="scope">
<el-button size="mini"
type="text"
@click.stop="deleteItem(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import CTable from '@c/CTableNoPage'
import CForm from '@c/CForm'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading //
export default {
data () {
return {
codeId: '',
addressUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/getpage',
categoryUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/getcategory',
addressList: [], //
categoryList: [], //
templateRadio: '',
selCategory: {},
dataForm: {
address: '',
tag: '',
title: ''
},
//
tableParams: {},
operations: [],
//
itemTableData: []
}
},
components: {
CTable, CForm
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 50 - 400
},
...mapGetters(['clientHeight'])
},
props: {
optionData: {
type: Object,
default () {
return {}
}
}
},
methods: {
initData (codeId) {
this.reseatData()
this.codeId = codeId
const params = {
codeId: this.codeId
}
window.app.ajax.post(this.addressUrl, params,
(data, rspMsg) => {
data.forEach(item => {
let obj = {}
obj.label = item
obj.value = item
this.addressList.push(obj)
})
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
window.app.ajax.post(this.categoryUrl, params,
(data, rspMsg) => {
// data = [
// {
// 'first_class': '',
// 'second_class': '/',
// 'first_id': 684,
// 'second_id': 794
// },
// {
// 'first_class': '1',
// 'second_class': '/1',
// 'first_id': 685,
// 'second_id': 796
// }
// ]
data.forEach((item, index) => {
item.id = index
})
this.categoryList = data
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
},
getRadioRow (index, row) {
this.selCategory = row
},
//
addItem () {
if (this.itemTableData.length === 5) {
this.$message.warning('最多填写5项审核项')
return false
}
// eslint-disable-next-line
// debugger
//
const that = this
let result = this.itemTableData.some((value) => {
return value.address === that.dataForm.address
})
if (result) {
this.$message.warning('当前页面已添加,请更换页面后重新添加')
return false
}
let oneObj = {}
oneObj.address = this.dataForm.address
oneObj.title = this.dataForm.title
oneObj.tag = this.dataForm.tag
oneObj.firstClass = this.selCategory.firstClass
oneObj.firstId = this.selCategory.firstId
oneObj.secondClass = this.selCategory.secondClass
oneObj.secondId = this.selCategory.secondId
oneObj.thirdClass = this.selCategory.thirdClass
oneObj.thirdId = this.selCategory.thirdId
this.itemTableData.push(oneObj)
},
deleteItem (index) {
this.itemTableData.splice(index, 1)
},
getItemList () {
return this.itemTableData
},
reseatData () {
this.dataForm = {
address: '',
tag: '',
title: ''
}
this.templateRadio = ''
this.addressList = []
this.categoryList = []
this.itemTableData = []
this.selCategory = {}
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
}
}
</script>

266
epmet-oper-web/src/views/modules/customer-manage/MiniProManage/MiniProManage.vue

@ -0,0 +1,266 @@
<!-- 客户小程序管理 -->
<template>
<div>
<el-card shadow="never"
class="aui-card--fill">
<div class="mod-demo__demo}">
<el-form :inline="true"
:model="tableParams">
<el-form-item>
<el-select v-model="tableParams.customerId"
placeholder="客户"
clearable>
<el-option v-for="item in form.data['customerId']"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="tableParams.clientType"
placeholder="类型"
clearable>
<el-option v-for="item in form.data['clientType']"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="loadTableData()">查询</el-button>
</el-form-item>
<!-- <el-form-item>
<el-button type="primary"
@click="commitCodeDiaShow('')">上传代码</el-button>
</el-form-item> -->
</el-form>
<c-table column-type="index"
ref="table"
:url="tableUrl"
:params="tableParams"
keyword="MiniProManage"
:operations="operations"
:tableHeight="tableHeight"
@setweappsupportversion="setweappsupportversion"
@getaccountbasicinfo="getaccountbasicinfo"
@getcategory="getcategory">
</c-table>
</div>
</el-card>
<version ref="ref_version_form"></version>
<basic-info ref="ref_basic_info"></basic-info>
<category ref="ref_catefoty"></category>
</div>
</template>
<script>
import CDialog from '@c/CDialog'
import CTable from '@c/CTable'
import Version from './Version'
import BasicInfo from './BasicInfo'
import Category from './Category'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading//
export default {
data () {
return {
//
tableParams: {
customerId: '', //
clientType: '', //
state: '', //
commitDate: '', //
submitDate: '', //
source: this.env
},
//
tableUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/uploadlist',
//
operations: [
{
lable: '基本信息', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'getaccountbasicinfo', //
isShow: (row) => {
return true
}
},
{
lable: '设置基础库版本', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'setweappsupportversion', //
isShow: (row) => {
return true
}
},
{
lable: '类目', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'getcategory', //
isShow: (row) => {
return true
}
}
],
//
operDia: {
visible: false
},
//
qrCodeDia: {
visible: false
},
src: '',
//
form: {
dataUrl: [], // //url
data: { //
clientType: [
{
value: 'resi',
label: '居民端'
},
{
value: 'work',
label: '工作端'
}
]
}
}
}
},
components: {
CDialog, Version, BasicInfo, Category, CTable
},
activated () {
let params = this.$route.params
//
if (params.showCommit) {
this.form.data.customerId = params.customerList
this.commitCodeDiaShow(params.customerId)
}
this.$nextTick(() => {
this.$refs.table.doLayout() //
})
},
mounted () {
this.renderSelData()
this.loadTableData()
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 90
},
...mapGetters(['clientHeight', 'env'])
},
methods: {
//
refresh () {
this.loadTableData()
},
//
loadTableData () {
this.tableParams.source = this.env
this.$nextTick(() => {
this.$refs.table.loadData() //
})
},
//
setweappsupportversion (row) {
this.$refs['ref_version_form'].initData(row.customerId, row.clientType)
},
//
getaccountbasicinfo (row) {
this.$refs['ref_basic_info'].initData(row.customerId, row.clientType)
},
//
getcategory (row) {
this.$refs['ref_catefoty'].initData(row.customerId, row.clientType)
},
async renderSelData () { // //
const customerUrl = ' https://epmet-cloud.elinkservice.cn/api/third/pacustomer/registerbyauth'
const param = {
// workAuth: 1,
// resiAuth: 1,
source: this.env,
initState: 1
}
this.startLoading()
await window.app.ajax.post(customerUrl, param,
(data, rspMsg) => {
this.endLoading()
if (data) {
let customerList = []
data.forEach(element => {
let oneObj = {
value: element.customerId,
label: element.customerName
}
customerList.push(oneObj)
})
this.form.data.customerId = customerList
this.$forceUpdate()
}
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
}
}
</script>
<style>
.el-upload__tip {
color: rgb(155, 155, 155);
}
</style>

186
epmet-oper-web/src/views/modules/customer-manage/MiniProManage/Version.vue

@ -0,0 +1,186 @@
<!-- 设置基础库 -->
<template>
<div>
<c-dialog :title="'设置基础库'"
:visible="diaVisible"
@ok="supportVersion"
@cancel="diaCancel">
<el-card shadow="never"
class="aui-card--fill">
<div class="d_now">当前版本{{nowVersion}}</div>
<div class="mod-demo__demo}">
<el-table id="out-table"
ref="table_category"
:header-cell-style="{color:'#000'}"
:data="tableData"
style="width: 1000px"
border>
<el-table-column label=""
width="35"
center>
<template slot-scope="scope">
<el-radio :label="scope.row.version"
v-model="templateRadio"
@change.native="getRadioRow(scope.$index,scope.row)">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column prop="version"
label="版本号"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="percentage"
label="占比"
min-width="100"
header-align="center"
align="center"></el-table-column>
</el-table>
</div>
</el-card>
</c-dialog>
</div>
</template>
<script>
/* eslint-disable */
import CTable from '@c/CTableNoPage'
import CDialog from '@c/CDialog'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading //
export default {
data () {
return {
customerId: '',
clientType: '',
tableData: [],
templateRadio: '',
nowVersion: '',//
selVersion: '',//
// tableUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/getweappsupportversion',
tableUrl: 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/pacustomer/getweappsupportversion',
tableParams: {
type: Object, // table
default () {
return {}
}
},
//
operations: [
],
//
diaVisible: false
}
},
components: {
CTable, CDialog
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 50 - 400
},
...mapGetters(['clientHeight'])
},
props: {},
methods: {
// eslint-disable-next-line
initData (customerId, clientType) {
this.diaVisible = true
this.customerId = customerId
this.clientType = clientType
this.$nextTick(() => {
this.loadData()
})
},
//
loadData () {
this.startLoading()
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/pacustomer/getweappsupportversion'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/pacustomer/getweappsupportversion'
const param = {
customerId: this.customerId,
clientType: this.clientType
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.endLoading()
this.nowVersion = data.newVersion
this.tableData = data.uvInfo
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
getRadioRow (row) {
this.selVersion = row.version
},
resetData () {
this.selVersion = ''
},
supportVersion () {
if (this.selVersion === '') {
this.$message.warning('请选择版本')
return
}
// const url = 'https://epmet-cloud.elinkservice.cn/api/third/pacustomer/setweappsupportversion'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/pacustomer/setweappsupportversion'
this.startLoading()
let params = {
customerId: this.customerId,
clientType: this.clientType,
version: this.selVersion
}
window.app.ajax.post(url, params,
(data, rspMsg) => {
this.endLoading()
this.$message.success('设置成功')
this.diaCancel()
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
diaCancel () {
this.resetData()
this.diaVisible = false
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
}
}
</script>
<style scoped>
.d_now {
margin: 0 0 20px 5px;
}
</style>
Loading…
Cancel
Save