Browse Source

客户管理

master
jiangyuying 5 years ago
parent
commit
1b29654d0f
  1. 4
      epmet-oper-web/.env.development
  2. 4
      epmet-oper-web/public/index.html
  3. 26
      epmet-oper-web/src/js/ajax.js
  4. 16
      epmet-oper-web/src/js/columns/code/commitCode.js
  5. 135
      epmet-oper-web/src/views/modules/code/CommitForm.vue
  6. 136
      epmet-oper-web/src/views/modules/code/CommitList.vue
  7. 60
      epmet-oper-web/src/views/modules/code/OperHistory.vue
  8. 708
      epmet-oper-web/src/views/modules/code/SubmitForm.vue
  9. 2
      epmet-oper-web/src/views/modules/customer-manage/customer-manage.vue

4
epmet-oper-web/.env.development

@ -1,5 +1,5 @@
NODE_ENV=development NODE_ENV=development
# VUE_APP_API_SERVER = http://192.168.1.130:8080/api VUE_APP_API_SERVER = http://192.168.1.130:8080/api
VUE_APP_API_SERVER = http://10.10.10.98:8080/api # VUE_APP_API_SERVER = http://10.10.10.98:8080/api
# VUE_APP_API_SERVER = https://epmet-dev.elinkservice.cn/api # VUE_APP_API_SERVER = https://epmet-dev.elinkservice.cn/api
VUE_APP_NODE_ENV=dev VUE_APP_NODE_ENV=dev

4
epmet-oper-web/public/index.html

@ -33,8 +33,8 @@
<!-- 开发环境 --> <!-- 开发环境 -->
<% if (process.env.VUE_APP_NODE_ENV === 'dev') { %> <% if (process.env.VUE_APP_NODE_ENV === 'dev') { %>
<script>window.SITE_CONFIG['apiURL'] = 'http://10.10.10.98:8080/api';</script> <!-- <script>window.SITE_CONFIG['apiURL'] = 'http://10.10.10.98:8080/api';</script> -->
<!-- <script>window.SITE_CONFIG['apiURL'] = 'http://192.168.1.130:8080/api';</script> --> <script>window.SITE_CONFIG['apiURL'] = 'http://192.168.1.130:8080/api';</script>
<!-- <script>window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/api';</script> --> <!-- <script>window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/api';</script> -->
<% } %> <% } %>
<!-- 集成测试环境 dev --> <!-- 集成测试环境 dev -->

26
epmet-oper-web/src/js/ajax.js

@ -251,11 +251,11 @@ export default {
if (data.code == 0) { if (data.code == 0) {
//业务成功 //业务成功
if (typeof cb_su === 'function') { if (typeof cb_su === 'function') {
cb_su(data.data, data.msg) cb_su(data.data, data.msg + ":" + data.internalMsg)
} }
} else { } else {
//业务失败 //业务失败
if (typeof cb_err === 'function') cb_err(data.msg, data.data) if (typeof cb_err === 'function') cb_err(data.msg + ":" + data.internalMsg, data.data)
} }
} else { } else {
if (typeof cb_err === 'function') cb_err(res) if (typeof cb_err === 'function') cb_err(res)
@ -270,7 +270,13 @@ export default {
} }
}) })
}, },
post2 (url, data, cb_su, cb_err) { post2 (url, data, cb_su, cb_err, headers) {
var h = {}
if (headers && JSON.stringify(headers) != '{}') {
h = {
headers,
}
}
//var data = qs.stringify(paramas); //var data = qs.stringify(paramas);
axios axios
.post(processUrl(url), data) .post(processUrl(url), data)
@ -278,20 +284,12 @@ export default {
if (res) { if (res) {
if (res.status === 200) { if (res.status === 200) {
var data = res.data var data = res.data
if (data.sysresultcode === 'success') { cb_su(data, data.msg + ":" + data.internalMsg)
//业务成功
if (typeof cb_su === 'function') {
cb_su(data.data, data.rspMsg)
}
} else if (data.sysresultcode === 'fail') {
//业务失败
if (typeof cb_err === 'function') cb_err(data.rspMsg, data.data)
}
} else { } else {
if (typeof cb_err === 'function') cb_err(res) if (typeof cb_err === 'function') cb_err(data.msg + ":" + data.internalMsg, data)
} }
} else { } else {
if (typeof cb_err === 'function') cb_err(res) if (typeof cb_err === 'function') cb_err(data.msg + ":" + data.internalMsg, data)
} }
}) })
.catch((err) => { .catch((err) => {

16
epmet-oper-web/src/js/columns/code/commitCode.js

@ -140,12 +140,12 @@ export default {
], ],
form: [ form: [
{ {
key: 'customerId', key: 'clientType',
title: '客户', title: '类型',
type: 'select', type: 'radio',
rule: [{ rule: [{
required: true, required: true,
message: '请选择客户', message: '请选择类型',
trigger: 'blur' trigger: 'blur'
}], }],
display: ['formA', 'formU', 'table', 'model'], display: ['formA', 'formU', 'table', 'model'],
@ -154,12 +154,12 @@ export default {
width: 100 width: 100
}, },
{ {
key: 'clientType', key: 'customerId',
title: '类型', title: '客户',
type: 'radio', type: 'select',
rule: [{ rule: [{
required: true, required: true,
message: '请选择类型', message: '请选择客户',
trigger: 'blur' trigger: 'blur'
}], }],
display: ['formA', 'formU', 'table', 'model'], display: ['formA', 'formU', 'table', 'model'],

135
epmet-oper-web/src/views/modules/code/CommitForm.vue

@ -1,59 +1,68 @@
<template> <template>
<div> <div>
<el-card shadow="never" <c-dialog :title="'上传代码'"
class="aui-card--fill"> :visible="diaVisible"
<c-form ref="ref_form_temp" @ok="commitCode"
keyword="CommitCodeForm" @cancel="diaCancel">
:formWidth="'100%'" <el-card shadow="never"
:itemWidth="'400px'" class="aui-card--fill">
:method="tempForm.method" <c-form ref="ref_form_temp"
:option-data="optionData"></c-form> keyword="CommitCodeForm"
:formWidth="'100%'"
:itemWidth="'300px'"
:method="tempForm.method"
:option-data="optionData"></c-form>
<el-form :inline="true" <el-form :inline="true"
:model="extJson" :model="extJson"
:style="{margin:'0 auto',width:'100%',textAlign:'left'}"> :style="{margin:'0 auto',width:'100%',textAlign:'left'}">
<el-form-item label="小程序配置" <el-form-item label="小程序配置"
prop="json" prop="json"
label-width="100px" label-width="100px"
style="display:block"> style="display:block">
<el-input type="textarea" <el-input type="textarea"
:autosize="{ minRows:5, maxRows: 8}" :autosize="{ minRows:3, maxRows: 6}"
:rows="6" :rows="3"
resize="none" resize="none"
style="width:300px" style="width:700px"
placeholder='请输入小程序配置' placeholder='请获取小程序配置'
v-model="extJson.json"> v-model="extJson.json">
</el-input> </el-input>
<el-button type="primary" <el-button type="primary"
style="margin-left:10px" style="margin-left:10px"
size="small" size="small"
@click="getExtJson">获取配置</el-button> @click="getExtJson">获取配置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="mod-demo__demo}"> <div class="mod-demo__demo}">
<c-table column-type="radio" <c-table column-type="radio"
:pageVisible="true" :pageVisible="true"
ref="table" ref="table"
:url="tableUrl" :url="tableUrl"
:params="tableParams" :params="tableParams"
keyword="Temp" keyword="Temp"
:operations="operations" :operations="operations"
@selectRadioRow="selectRadioRow"> @selectRadioRow="selectRadioRow">
</c-table> </c-table>
</div> </div>
</el-card> </el-card>
</c-dialog>
</div> </div>
</template> </template>
<script> <script>
/* eslint-disable */ /* eslint-disable */
import CTable from '@c/CTableNoPage' import CTable from '@c/CTableNoPage'
import CDialog from '@c/CDialog'
import CForm from '@c/CForm' import CForm from '@c/CForm'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { Loading } from 'element-ui'//Loading
let loading//
export default { export default {
data () { data () {
return { return {
@ -92,14 +101,12 @@ export default {
operations: [ operations: [
], ],
// //
dialog: { diaVisible: false
title: '',
visible: false
}
} }
}, },
components: { components: {
CTable, CForm CTable, CForm, CDialog
}, },
mounted () { mounted () {
}, },
@ -120,7 +127,7 @@ export default {
methods: { methods: {
// eslint-disable-next-line // eslint-disable-next-line
initData (dataForm) { initData (dataForm) {
console.log(this.optionData); this.diaVisible = true
if (!dataForm) { if (!dataForm) {
dataForm = { dataForm = {
customerId: '', customerId: '',
@ -131,11 +138,11 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['ref_form_temp'].assign(dataForm) this.$refs['ref_form_temp'].assign(dataForm)
this.loadData() this.loadTableData()
}) })
}, },
// //
loadData () { loadTableData () {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.table.loadData() // this.$refs.table.loadData() //
}) })
@ -147,6 +154,7 @@ export default {
this.$message.warning('请选择客户') this.$message.warning('请选择客户')
return false return false
} }
this.startLoading()
const url = '/third/code/getextjson' const url = '/third/code/getextjson'
const param = { const param = {
customerId: _data.customerId, customerId: _data.customerId,
@ -154,11 +162,13 @@ export default {
} }
window.app.ajax.post(url, param, window.app.ajax.post(url, param,
(data, rspMsg) => { (data, rspMsg) => {
this.endLoading()
this.extJson.json = data this.extJson.json = data
// this.$message.success('') // this.$message.success('')
// eslint-disable-next-line // eslint-disable-next-line
}, },
(rspMsg, data) => { (rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg) this.$message.error(rspMsg)
}) })
}, },
@ -181,22 +191,45 @@ export default {
this.$message.warning('请选择模板') this.$message.warning('请选择模板')
return return
} }
this.startLoading()
// //
let _data = this.$refs['ref_form_temp'].model let _data = this.$refs['ref_form_temp'].model
_data.extJson = this.extJson.json _data.extJson = this.extJson.json
_data.templateId = this.selTempId _data.templateId = this.selTempId
console.log(_data) console.log(_data)
window.app.ajax.post(this.tempForm.commitUrl, _data, window.app.ajax.post2(this.tempForm.commitUrl, _data,
(data, rspMsg) => { (data, rspMsg) => {
this.endLoading()
this.$message.success('上传成功') this.$message.success('上传成功')
this.$emit('commitConfirm') this.diaCancel()
this.$emit('refresh')
}, },
(rspMsg, data) => { (rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg) 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()
}
} }
} }
} }

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

@ -6,7 +6,7 @@
<el-form :inline="true" <el-form :inline="true"
:model="tableParams" :model="tableParams"
@keyup.enter.native="loadData()"> @keyup.enter.native="loadTableData()">
<el-form-item> <el-form-item>
<el-select v-model="tableParams.customerId" <el-select v-model="tableParams.customerId"
placeholder="客户"> placeholder="客户">
@ -59,7 +59,7 @@
</el-date-picker> </el-date-picker>
</el-form-item> --> </el-form-item> -->
<el-form-item> <el-form-item>
<el-button @click="loadData()">查询</el-button> <el-button @click="loadTableData()">查询</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" <el-button type="primary"
@ -74,40 +74,25 @@
keyword="CommitCodeList" keyword="CommitCodeList"
:operations="operations" :operations="operations"
:tableHeight="tableHeight" :tableHeight="tableHeight"
@submitCode="submitCode" @submitCodeDiaShow="submitCodeDiaShow"
@showQRCode="showQRCode" @showQRCode="showQRCode"
@submitRecall="submitRecall" @submitRecall="submitRecall"
@issueCode="issueCode" @issueCode="issueCode"
@submitFailReason="submitFailReason" @submitFailReason="submitFailReason"
@operHistory="operHistory"> @operHistory="operHistory">
</c-table> </c-table>
-
</div> </div>
</el-card> </el-card>
<c-dialog :title="'上传代码'"
:visible="commitDia.visible"
@ok="commitCode"
@cancel="commitDiaCancel">
<commit-form ref="ref_commit_form"
:optionData="optionData"
@commitConfirm="commitConfirm"></commit-form>
</c-dialog>
<c-dialog :title="'提交审核'" <commit-form ref="ref_commit_form"
:visible="submitDia.visible" :optionData="form.data"
:dialogHeight="1.1" @refresh="refresh"></commit-form>
@cancel="submitDiaCancel">
<submit-form ref="ref_submit_form"
:codeId="selCodeId"
:feedbackShow="feedbackShow"></submit-form>
</c-dialog>
<c-dialog :showFooter="false" <submit-form ref="ref_submit_form"
:title="'操作历史'" @refresh="refresh"></submit-form>
:visible="operDia.visible"
@cancel="operDiaCancel"> <oper-history ref="ref_oper_history"></oper-history>
<oper-history ref="ref_oper_history"></oper-history>
</c-dialog>
<c-dialog :showFooter="false" <c-dialog :showFooter="false"
:title="'二维码'" :title="'二维码'"
@ -134,7 +119,7 @@ export default {
data () { data () {
return { return {
loading: false, loading: false,
selCodeId: '', // id
// //
tableParams: { tableParams: {
customerId: '', // customerId: '', //
@ -155,7 +140,7 @@ export default {
type: 'text', type: 'text',
slot: '', slot: '',
plain: false, plain: false,
methodName: 'submitCode', // methodName: 'submitCodeDiaShow', //
isShow: function (row) { isShow: function (row) {
return true return true
// if (row.status === 'unaudited' || row.status === 'audit_failed' || row.status === 'withdrawn') { // if (row.status === 'unaudited' || row.status === 'audit_failed' || row.status === 'withdrawn') {
@ -244,16 +229,6 @@ export default {
isShow: 'show' isShow: 'show'
} }
], ],
//
commitDia: {
visible: false
},
optionData: Object,
//
feedbackShow: false,
submitDia: {
visible: false
},
// //
operDia: { operDia: {
visible: false visible: false
@ -331,7 +306,7 @@ export default {
}, },
mounted () { mounted () {
this.renderSelData() this.renderSelData()
this.loadData() this.loadTableData()
}, },
computed: { computed: {
tableHeight () { tableHeight () {
@ -340,17 +315,18 @@ export default {
...mapGetters(['clientHeight']) ...mapGetters(['clientHeight'])
}, },
methods: { methods: {
//
refresh () {
this.loadTableData()
},
// //
loadData () { loadTableData () {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.table.loadData() // this.$refs.table.loadData() //
}) })
}, },
// //
commitCodeDiaShow (customerId) { commitCodeDiaShow (customerId) {
// this.form.data['customerId'] = this.form.data['client']
this.optionData = this.form.data
this.commitDia.visible = true
this.$nextTick(() => { this.$nextTick(() => {
let dataForm = { let dataForm = {
clientType: 'resi', clientType: 'resi',
@ -359,25 +335,29 @@ export default {
this.$refs['ref_commit_form'].initData(dataForm) this.$refs['ref_commit_form'].initData(dataForm)
}) })
}, },
//
async commitCode () {
//
await this.$refs['ref_commit_form'].commitCode()
},
// //
submitCode (row) { submitCodeDiaShow (row) {
this.selCodeId = row.id let feedbackShow = false
// if (row.status === 'audit_failed') { // if (row.status === 'audit_failed') {
this.feedbackShow = true feedbackShow = true
// } // }
this.submitDia.visible = true this.$refs['ref_submit_form'].initData(row.id, feedbackShow)
},
submitDiaCancel () {
this.submitDia.visible = false
}, },
//
submitRecall (id) {
//
submitRecall (row) {
const url = '/third/code/undo'
const param = {
codeId: row.id
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success(rspMsg)
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
}, },
// //
showQRCode (row) { showQRCode (row) {
@ -399,26 +379,38 @@ export default {
}, { headers: { 'Content-Type': 'image/jpeg' } }) }, { headers: { 'Content-Type': 'image/jpeg' } })
}, },
// //
issueCode (id) { issueCode (row) {
const url = '/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)
})
}, },
// //
submitFailReason (id) { submitFailReason (row) {
const url = '/third/code/reason'
const param = {
codeId: row.id
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.$message.success(rspMsg)
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
}, },
// //
operHistory (id) { operHistory (row) {
this.operDia.visible = true this.$refs['ref_oper_history'].initData(row.id)
},
//
commitConfirm () {
this.commitDia.visible = false
this.loadData()
},
commitDiaCancel () {
this.$refs['ref_commit_form'].resetData()
this.commitDia.visible = false
}, },
operDiaCancel () { operDiaCancel () {
this.operDia.visible = false this.operDia.visible = false
}, },

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

@ -1,20 +1,25 @@
<template> <template>
<div> <div>
<el-card shadow="never" <c-dialog :showFooter="false"
class="aui-card--fill"> :title="'操作历史'"
<div class="mod-demo__demo}"> :visible="diaVisible"
@cancel="diaCancel">
<el-card shadow="never"
class="aui-card--fill">
<div class="mod-demo__demo}">
<c-table column-type="index" <c-table column-type="index"
:pageVisible="true" :pageVisible="true"
ref="table" ref="table"
:url="tableUrl" :url="tableUrl"
:params="tableParams" :params="tableParams"
keyword="OperHistory" keyword="OperHistory"
:operations="operations" :operations="operations"
:tableHeight="tableHeight"> :tableHeight="tableHeight">
</c-table> </c-table>
</div> </div>
</el-card> </el-card>
</c-dialog>
</div> </div>
</template> </template>
@ -22,14 +27,17 @@
<script> <script>
import CTable from '@c/CTableNoPage' import CTable from '@c/CTableNoPage'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import CDialog from '@c/CDialog'
export default { export default {
data () { data () {
return { return {
loading: false, loading: false,
diaVisible: false,
codeId: '',
// //
// tableUrl: '/third/code/history', tableUrl: '/third/code/history',
tableUrl: 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/history', // tableUrl: 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/history',
tableParams: { tableParams: {
type: Object, // table type: Object, // table
default () { default () {
@ -42,16 +50,24 @@ export default {
} }
}, },
components: { components: {
CTable CTable, CDialog
}, },
mounted () { mounted () {
this.$refs.table.loadData() //
}, },
methods: { methods: {
// initData (codeId) {
submitCode (id) { this.codeId = codeId
this.submitDia.title = '提交审核' this.tableParams.codeId = codeId
this.submitDia.visible = true
this.diaVisible = true
this.$nextTick(() => {
this.$refs.table.loadData() //
})
},
diaCancel () {
this.diaVisible = false
} }
}, },
computed: { computed: {

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

@ -1,180 +1,267 @@
<template> <template>
<div> <div>
<el-card shadow="never" <c-dialog :title="'提交审核'"
class="aui-card--fill"> :visible="diaVisible"
<div class="mod-demo__demo}"> :dialogHeight="1.1"
<el-form :inline="true" @cancel="diaCancel"
:model="dataForm" @ok="submitCode">
@keyup.enter.native="getDataList()">
<el-form-item label="版本功能说明" <el-tabs v-model="activeName"
prop="versionDesc" class="el-tabs">
label-width="150px" <el-tab-pane label="功能说明"
style="display:block"> name="desc">
<el-input type="textarea" <el-form :inline="true"
:autosize="{ minRows: 2, maxRows: 4}" :model="dataForm"
:rows="3" class="form">
resize="none" <el-form-item label="版本功能说明"
style="width:300px" prop="versionDesc"
placeholder='请输入版本功能说明' label-width="150px"
v-model="dataForm.versionDesc"> style="display:block">
</el-input> <el-input type="textarea"
<div class="el-upload__tip">小程序版本说明和功能解释</div> :autosize="{ minRows: 5, maxRows: 8}"
</el-form-item> :rows="5"
resize="none"
<el-form-item label="预览图片" style="width:500px"
label-width="150px" placeholder='请输入版本功能说明'
style="display:block"> v-model="dataForm.versionDesc">
<el-upload class="avatar-uploader" </el-input>
ref="upload" <div class="el-upload__tip">小程序版本说明和功能解释</div>
:action="upload_url" </el-form-item>
list-type="picture-card"
:name="upload_name" <el-form-item label="预览图片"
:on-remove="handleRemove" label-width="150px"
:on-exceed="handleExceed" style="display:block">
:file-list="ad_url_list" <el-upload class="avatar-uploader"
:limit="3" ref="uploadPic"
:http-request="uploadPic"> :action="upload_url"
<span class="font-14">选择图片</span> list-type="picture-card"
<div slot="tip" :name="upload_name"
class="el-upload__tip">小程序页面截图最多3张每张大小2M以内</div> :on-remove="handleRemovePic"
</el-upload> :on-exceed="handleExceed"
</el-form-item> :file-list="picList"
:limit="3"
<el-form-item label="预览视频" :http-request="uploadPic">
label-width="150px" <span class="font-14">选择图片</span>
style="display:block"> <div slot="tip"
<el-upload class="avatar-uploader" class="el-upload__tip">小程序页面截图最多3张每张大小2M以内</div>
ref="upload" </el-upload>
:action="upload_url" </el-form-item>
:name="upload_name"
:on-remove="handleRemove" <el-form-item label="预览视频"
:on-exceed="handleExceed" label-width="150px"
:file-list="ad_url_list" style="display:block">
:limit="1" <el-upload class="avatar-uploader"
:http-request="uploadVedio"> ref="uploadVedio"
<el-button size="small" :action="upload_url"
type="primary">选择视频</el-button> :name="upload_name"
<div slot="tip" :on-remove="handleRemoveVedio"
class="el-upload__tip">小程序操作录屏大小2M以内MP4格式</div> :on-exceed="handleExceed"
</el-upload> :file-list="vedioList"
</el-form-item> :limit="1"
:http-request="uploadVedio">
<el-form-item v-if="feedbackShow" <el-button size="small"
label="反馈内容" type="primary">选择视频</el-button>
prop="feedbackInfo" <div slot="tip"
label-width="150px" class="el-upload__tip">小程序操作录屏大小2M以内MP4格式</div>
style="display:block"> </el-upload>
<el-input type="textarea" </el-form-item>
:autosize="{ minRows: 2, maxRows: 4}" </el-form>
:rows="3"
resize="none" </el-tab-pane>
style="width:300px"
placeholder='请输入反馈内容' <el-tab-pane label="审核项"
v-model="dataForm.feedbackInfo"> name="item">
</el-input> <div style="margin-top:10px">
<div slot="tip" <el-button type="primary"
class="el-upload__tip">反馈内容至多200字只有上个版本被驳回才可填写</div> style="margin-bottom:10px"
</el-form-item> @click="commitCode()">增加审核项</el-button>
<el-form-item v-if="feedbackShow" </div>
label="反馈图片" <el-table id="out-table"
label-width="150px" ref="table"
style="display:block"> :header-cell-style="{color:'#000'}"
<el-upload class="avatar-uploader" :data="tableData"
ref="upload" :style="{width: '100%'}"
:action="upload_url" border
list-type="picture-card" v-loading="loading"
:name="upload_name" element-loading-text="正在加载中"
:on-remove="handleRemove" element-loading-spinner="el-icon-loading"
:on-exceed="handleExceed" element-loading-background="rgba(255, 255, 255, 0.8)">
:file-list="ad_url_list"
:limit="3" <el-table-column prop="address"
:http-request="uploadPic"> label="页面"
<span class="font-14">选择图片</span> 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="first_id"
label="一级类目ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="second_class"
label="二级类目名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="second_id"
label="二级类目ID"
min-width="100"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="third_class"
label="三级类目名称"
min-width="70"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="third_id"
label="三级类目ID"
header-align="center"
min-width="100"
align="center"></el-table-column>
</el-table>
</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"
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" <div slot="tip"
class="el-upload__tip">大小2M以内</div> class="el-upload__tip">反馈内容至多200字只有上个版本被驳回才可填写</div>
</el-upload> </el-form-item>
</el-form-item> <el-form-item label="反馈图片"
label-width="150px"
</el-form> style="display:block">
<div> <el-upload class="avatar-uploader"
<el-button type="primary" ref="uploadFeedbackPic"
style="margin-bottom:10px" :action="upload_url"
@click="commitCode()">增加审核项</el-button> list-type="picture-card"
</div> :name="upload_name"
<el-table id="out-table" :on-remove="handleRemoveFeedback"
ref="table" :on-error="handleError"
:header-cell-style="{color:'#000'}" :on-exceed="handleExceed"
:data="tableData" :file-list="feedbackPicList"
:style="{width: '100%'}" :limit="3"
border :http-request="uploadPic">
v-loading="loading" <span class="font-14">选择图片</span>
element-loading-text="正在加载中" <div slot="tip"
element-loading-spinner="el-icon-loading" class="el-upload__tip">大小2M以内</div>
element-loading-background="rgba(255, 255, 255, 0.8)"> </el-upload>
</el-form-item>
<el-table-column prop="address"
label="页面" </el-form>
min-width="100"
header-align="center" </el-tab-pane>
align="center"></el-table-column>
<el-table-column prop="tag" <el-tab-pane label="UGC信息安全声明"
label="标签" name="ugc">
min-width="100" <div class="el-upload__tip">当小程序第一次提交审核且类目包含社交-社区/论坛社交-笔记社交-问答其中之一时需填写UGC场景信息</div>
header-align="center" <el-form :inline="true"
align="center"></el-table-column> :model="dataForm.ugcDeclare"
<el-table-column prop="title" class="form">
label="标题" <el-form-item label="UGC场景"
min-width="100" label-width="150px"
header-align="center" style="display:block">
align="center"></el-table-column> <el-checkbox-group v-model="dataForm.ugcDeclare.scene">
<el-checkbox @change="scene0"
<el-table-column prop="firstClass" :label="0">不涉及用户生成内容</el-checkbox>
label="一级类目名称" <el-checkbox :label="1"
min-width="100" :disabled="sceneDisabled">用户资料</el-checkbox>
header-align="center" <el-checkbox :label="2"
align="center"></el-table-column> :disabled="sceneDisabled">图片</el-checkbox>
<el-table-column prop="first_id" <el-checkbox :label="3"
label="一级类目ID" :disabled="sceneDisabled">视频</el-checkbox>
min-width="100" <el-checkbox :label="4"
header-align="center" :disabled="sceneDisabled">文本</el-checkbox>
align="center"></el-table-column> <el-checkbox :label="5"
<el-table-column prop="second_class" :disabled="sceneDisabled"
label="二级类目名称" @change="sceneOther">其他</el-checkbox>
min-width="70" </el-checkbox-group>
header-align="center" </el-form-item>
align="center"></el-table-column> <div v-if="!sceneDisabled">
<el-table-column prop="second_id" <el-form-item label="其他场景"
label="二级类目ID" label-width="150px"
min-width="100" style="display:block">
header-align="center" <el-input type="textarea"
align="center"></el-table-column> :disabled="sceneOtherDisabled"
<el-table-column prop="third_class" :autosize="{ minRows: 2, maxRows: 4}"
label="三级类目名称" :rows="3"
min-width="70" resize="none"
header-align="center" style="width:500px"
align="center"></el-table-column> placeholder='请输入其他场景'
<el-table-column prop="third_id" v-model="dataForm.ugcDeclare.otherSceneDesc">
label="三级类目ID" </el-input>
header-align="center" <div class="el-upload__tip">当scene选其他时的说明,不超时256字</div>
min-width="100" </el-form-item>
align="center"></el-table-column> <el-form-item label="内容安全机制"
label-width="150px"
<el-table-column label="操作" style="display:block">
fixed="right" <el-checkbox-group v-model="dataForm.ugcDeclare.method">
header-align="center" <el-checkbox :label="1">使用平台建议的内容安全API</el-checkbox>
align="center" <el-checkbox :label="2">使用其他的内容审核产品</el-checkbox>
width="80"> <el-checkbox :label="3">通过人工审核把关</el-checkbox>
<template slot-scope="scope"> <el-checkbox :label="4">未做内容审核把关</el-checkbox>
<!-- <el-button type="text" </el-checkbox-group>
size="small" <!-- <div class="el-upload__tip">1.使用平台建议的内容安全API2.使用其他的内容审核产品3.通过人工审核把关4.未做内容审核把关</div> -->
@click="submitCode(scope.row.id)">移除</el-button> --> </el-form-item>
<el-form-item label="是否有审核团队"
</template> label-width="150px"
</el-table-column> style="display:block">
</el-table> <el-radio-group v-model="dataForm.ugcDeclare.hasAuditTeam">
<el-radio :label="0"> </el-radio>
</div> <el-radio :label="1"> </el-radio>
</el-card> </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>
<c-dialog :title="dialog.title" <c-dialog :title="dialog.title"
:visible="dialog.visible" :visible="dialog.visible"
:showConfirm="false" :showConfirm="false"
@ -188,11 +275,22 @@
import CDialog from '@c/CDialog' import CDialog from '@c/CDialog'
import CommitForm from './CommitForm' import CommitForm from './CommitForm'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading //
export default { export default {
data () { data () {
return { return {
loading: false, loading: false,
// codeId: '', // codeId feedbackShow: false, //
codeId: '', // id
diaVisible: false,
// tab
activeName: 'desc',
sceneDisabled: true, //
sceneOtherDisabled: true, //
dataForm: { dataForm: {
versionDesc: '', // versionDesc: '', //
previewInfo: { // previewInfo: { //
@ -201,18 +299,24 @@ export default {
}, },
feedbackInfo: '', // feedbackInfo: '', //
feedbackStuff: '', // feedbackStuff: '', //
ugcDeclare: [] // UGC ugcDeclare: { // UGC
scene: [0], // UGC 0,, 1.,2.,3.,4.,5, ,scene0
otherSceneDesc: '', // scene,256
method: [1], // 1.使API,2.使,3.,4.
hasAuditTeam: 0, // , 0.,1.,0
auditDesc: '' // UGC,256
}
}, },
previewPicArray: [], previewPicArray: [],
previewVedioArray: [], previewVedioArray: [],
// //
dialogImageUrl: '', dialogImageUrl: '/third/code/mediaupload',
dialogVisible: false,
disabled: false,
upload_url: '', // URL upload_url: '', // URL
upload_name: '', // upload_name: '', //
ad_url: '', // URL picList: [], //
ad_url_list: [], // vedioList: [], //
feedbackPicList: [], //
// //
dialog: { dialog: {
@ -260,23 +364,48 @@ export default {
...mapGetters(['clientHeight']) ...mapGetters(['clientHeight'])
}, },
methods: { methods: {
initData (codeId, feedbackShow) {
this.codeId = codeId
this.feedbackShow = feedbackShow
this.diaVisible = true
},
handleExceed: function () { handleExceed: function () {
this.$message({ this.$message({
message: '请先删除选择的图片或视频,再上传', message: '请先删除选择的图片或视频,再上传',
type: 'warning' type: 'warning'
}) })
}, },
handleRemove: function (res, file) { handleRemovePic: function (res, file) {
let self = this this.previewPicArray.filter(item => item.uid !== file.uid)
self.ad_url = '' console.log(this.previewPicArray)
},
handleRemoveVedio: function (res, file) {
// this.previewPicArray.forEach(element => {
// if()
// });
// eslint-disable-next-line
debugger
},
handleRemoveFeedback: function (res, file) {
// this.previewPicArray.forEach(element => {
// if()
// });
// eslint-disable-next-line
debugger
},
handleError (err, file, fileList) {
// eslint-disable-next-line
debugger
console.log(err)
}, },
// //
uploadVedio: function (params) { uploadVedio: function (params) {
let self = this
let file = params.file let file = params.file
let fileType = file.type let fileType = file.type
let isVideo = fileType.indexOf('video') !== -1 let isVideo = fileType.indexOf('video') !== -1
// let fileUrl = self.$refs.upload.uploadFiles[0].url // let fileUrl = this.$refs.upload.uploadFiles[0].url
let isLt2M = file.size / 1024 / 1024 < 2 let isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) { if (!isLt2M) {
@ -284,7 +413,7 @@ export default {
message: '上传视频大小不能超过 2MB!', message: '上传视频大小不能超过 2MB!',
type: 'error' type: 'error'
}) })
self.$refs.upload.uploadFiles = [] this.$refs.upload.uploadFiles = []
return return
} }
if (!isVideo) { if (!isVideo) {
@ -292,7 +421,7 @@ export default {
message: '请选择视频!', message: '请选择视频!',
type: 'error' type: 'error'
}) })
self.$refs.upload.uploadFiles = [] this.$refs.upload.uploadFiles = []
return return
} }
@ -302,95 +431,206 @@ export default {
message: '上传视频只支持 mp4 格式!', message: '上传视频只支持 mp4 格式!',
type: 'error' type: 'error'
}) })
self.$refs.upload.uploadFiles = [] this.$refs.upload.uploadFiles = []
return return
} }
self.upload_name = 'file_video[]' this.upload_name = 'file_video[]'
self.uploadFile(file, fileType) let formData = new FormData()
// let videoDiv = document.createElement('video') // // eslint-disable-next-line
// videoDiv.src = fileUrl // debugger
formData.append('type', fileType)
// videoDiv.onloadeddata = function (event) { formData.append('media', file)
// // formData.append('codeId', this.codeId)
// self.upload_name = 'file_video[]' window.app.ajax.post(this.dialogImageUrl, formData,
// self.uploadFile(file, fileType, isVideo, videoDiv) (data, rspMsg) => {
// } this.previewInfo.videoIdList.push(data)
this.$message.success(rspMsg)
},
(rspMsg, data) => {
this.$message.error(rspMsg)
}, { headers: { 'Content-Type': 'multipart/form-data' } })
}, },
// //
uploadPic: function (params) { uploadPic: function (params) {
console.log(this.codeId)
let self = this
let file = params.file let file = params.file
let fileType = file.type let fileType = file.type
let isImage = fileType.indexOf('image') !== -1 let isImage = fileType.indexOf('image') !== -1
let fileUrl = this.$refs.uploadPic.uploadFiles[this.picList.length].url
file.url = fileUrl
this.picList.push(file)
let isLt2M = file.size / 1024 / 1024 < 2 // let isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) { // if (!isLt2M) {
this.$message({ // this.$message({
message: '上传图片大小不能超过 2MB!', // message: ' 2MB!',
type: 'error' // type: 'error'
}) // })
self.$refs.upload.uploadFiles = [] // this.$refs.upload.uploadFiles = []
return // // return
} // }
if (!isImage) { if (!isImage) {
this.$message({ this.$message({
message: '请选择图片!', message: '请选择图片!',
type: 'error' type: 'error'
}) })
self.$refs.upload.uploadFiles = [] this.$refs.uploadPic.uploadFiles = []
return return
} }
self.upload_name = 'file_img[]' // console.log(this.picList)
self.uploadFile(file, fileType)
}, this.upload_name = 'file_img[]'
uploadFile: function (file, fileType) {
// const uploadUrl = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/mediaupload'
const uploadUrl = '/third/code/mediaupload'
let formData = new FormData() let formData = new FormData()
// // eslint-disable-next-line
// debugger
formData.append('type', fileType) formData.append('type', fileType)
formData.append('media', file) formData.append('media', file)
formData.append('codeId', this.codeId) formData.append('codeId', this.codeId)
window.app.ajax.post(uploadUrl, formData, window.app.ajax.post2(this.dialogImageUrl, formData,
(data, rspMsg) => { (data, rspMsg) => {
this.$message.success(rspMsg) // eslint-disable-next-line
this.beforeClose() debugger
if (data.code === 0) {
console.log('成功')
let obj = {
mediaid: data,
uid: file.uid
}
this.previewPicArray.push(obj)
this.$message.success(rspMsg)
} else {
console.log('失败')
this.picList.pop()
this.$message.error(rspMsg)
}
}, },
(rspMsg, data) => { (rspMsg, data) => {
this.picList.pop()
this.$message.error(rspMsg) this.$message.error(rspMsg)
}, { headers: { 'Content-Type': 'multipart/form-data' } }) }, { headers: { 'Content-Type': 'multipart/form-data' } })
}, },
// UGC0
scene0 (value) {
if (value) { //
this.sceneDisabled = true
this.resetUGC()
} 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 = [0]
this.dataForm.ugcDeclare.otherSceneDesc = ''
this.dataForm.ugcDeclare.method = [1]
this.dataForm.ugcDeclare.hasAuditTeam = 0
this.dataForm.ugcDeclare.auditDesc = ''
},
submitCode () {
// eslint-disable-next-line
// debugger
//
this.dataForm.previewInfo.picIdList = []
this.dataForm.previewInfo.videoIdList = []
this.previewPicArray.forEach(element => {
this.dataForm.previewInfo.picIdList.push(element.mediaid)
})
this.previewVedioArray.forEach(element => {
this.dataForm.previewInfo.videoIdList.push(element.mediaid)
})
const url = '/third/code/audit'
let params = {
codeId: this.codeId,
ugcDeclare: this.dataForm.ugcDeclare
}
//
if (this.dataForm.previewInfo.picIdList.length > 0 || this.dataForm.previewInfo.videoIdList.length > 0) {
params.previewInfo = Object
if (this.dataForm.previewInfo.picIdList.length > 0) {
params.previewInfo.picIdList = this.dataForm.previewInfo.picIdList
}
if (this.dataForm.previewInfo.videoIdList.length > 0) {
params.previewInfo.videoIdList = this.dataForm.previewInfo.videoIdList
}
}
//
if (this.dataForm.versionDesc !== '') {
params.versionDesc = this.dataForm.versionDesc
}
console.log(params)
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.diaVisible = false
},
resetData () {
},
// //
commitCode (id) { commitCode (id) {
this.dialog.title = '上传代码' this.dialog.title = '上传代码'
this.dialog.visible = true this.dialog.visible = true
}, },
//
submitCode (id) {
},
handleCancel () { handleCancel () {
this.dialog.title = '' this.dialog.title = ''
this.dialog.visible = false this.dialog.visible = false
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
} }
}, },
props: { props: {
feedbackShow: {
type: Boolean,
default: false
},
codeId: {
type: String,
required: true
}
} }
} }
</script> </script>
<style scoped > <style scoped >
.el-tabs {
margin-left: 50px;
margin-right: 50px;
}
.el-upload__tip { .el-upload__tip {
color: rgb(155, 155, 155); color: rgb(155, 155, 155);
} }
.form {
margin-top: 30px;
}
</style> </style>

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

@ -372,7 +372,7 @@ export default {
}, },
submitDataForm4 () { submitDataForm4 () {
let dataForm = this.dataForm4 let dataForm = this.dataForm4
dataForm.customerId = this.dataForm4.customerId dataForm.customerId = this.customerId
dataForm.agencyId = this.dataForm4.agencyId dataForm.agencyId = this.dataForm4.agencyId
dataForm.mobile = this.dataForm4.mobile.toString() dataForm.mobile = this.dataForm4.mobile.toString()
console.log(dataForm) console.log(dataForm)

Loading…
Cancel
Save