Browse Source

我的建议

dev
jiangyy 5 years ago
parent
commit
6a5b21a090
  1. 4
      epmet-oper-web/src/js/columns/columns.js
  2. 59
      epmet-oper-web/src/js/columns/customer/feedback.js
  3. 20
      epmet-oper-web/src/views/components/CTable.vue
  4. 33
      epmet-oper-web/src/views/components/CTree.vue
  5. 83
      epmet-oper-web/src/views/components/CTreeDialogSingle.vue
  6. 336
      epmet-oper-web/src/views/modules/customer/feedback/CustomerInfo.vue
  7. 360
      epmet-oper-web/src/views/modules/customer/feedback/DetailForm.vue
  8. 353
      epmet-oper-web/src/views/modules/customer/feedback/FeedbackList.vue
  9. 108
      epmet-oper-web/src/views/modules/customer/feedback/customer-info.vue
  10. 566
      epmet-oper-web/src/views/modules/customer/feedback/customer-manage.vue
  11. 3
      epmet-oper-web/src/views/pages/loginWork.vue

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

@ -9,6 +9,8 @@ import OperHistory from './code/operHistory'
import Category from './code/category'
import Draft from './code/draft'
import Feedback from './customer/feedback'
// 产品配置
import CustomizedFunction from './miniPro/customizedFunction'
import FootBar from './productConfig/footBar'
@ -30,6 +32,8 @@ export default {
OperHistory: OperHistory, // 客户管理——代小程序管理——版本管理——操作历史
Category: Category, // 客户管理——代小程序管理——类目
FeedbackList:Feedback['list'],//客户管理-用户反馈-用户反馈列表
FootBarCustomize: FootBar['customize'], // 客户定制化——FootBar配置
CustomizedFunction: CustomizedFunction, // 产品配置——定制功能

59
epmet-oper-web/src/js/columns/customer/feedback.js

@ -0,0 +1,59 @@
export default {
list: [
{
key: 'customerName',
title: '客户名称',
display: ['formA', 'formU', 'table', 'model'],
type: 'input',
rule: [
{
required: true,
message: '请输入客户名称',
trigger: 'blur'
}
],
fixed: false,
block: true,
width: 80
},
{
key: 'gridName',
title: '网格名字',
display: ['table', 'model'],
fixed: false,
block: true,
width: 80
},
{
key: 'adviceType',
title: '建议分类',
display: ['table', 'model'],
fixed: false,
block: true,
width: 100
},
{
key: 'phone',
title: '联系电话',
display: ['table', 'model'],
block: true,
width: 80
},
{
key: 'adviceTime',
title: '建议时间',
display: ['table', 'model'],
block: true,
width: 80
},
{
key: 'adviceContent',
title: '建议内容',
display: ['table', 'model'],
type: 'input',
block: true,
width: 150
},
],
}

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

@ -2,6 +2,7 @@
<div class="table">
<el-table id="out-table"
ref="table"
class="tableLimit"
:height="table.height"
:header-cell-style="{color:'#000'}"
:data="tableData"
@ -76,7 +77,6 @@
:label="col.title"
:min-width="col.width"
:fixed="col.isFrozen"
show-overflow-tooltip
:align="columnAlign"
:header-align="headerAlign"
:formatter="col.formatter"></el-table-column>
@ -87,6 +87,7 @@
fixed="right"
:min-width="operationWidth"
header-align="center"
align="buttonAlign"
class="operate">
<template slot-scope="scope">
<!--传入的操作按钮属性 lyx 20190411 -->
@ -206,6 +207,11 @@ export default {
default () {
return []
}
},
//
buttonAlign: {
type: String,
default: ""
}
},
@ -259,7 +265,6 @@ export default {
})
Object.assign(this.table.params, this.params)
console.log(this.table.params)
//
window.app.ajax.post(
this.url,
@ -399,4 +404,15 @@ export default {
.operate {
text-align: center;
}
.tableLimit tr td .cell {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2; /*可以显示的行数,超出部分用...表示 */
-webkit-box-orient: vertical;
}
.el-table .cell {
white-space: pre-line; /*保留换行符*/
}
</style>

33
epmet-oper-web/src/views/components/CTree.vue

@ -64,7 +64,8 @@ export default {
defaultExpandKeys: ['0'],
loading: false, //
selNode: '' //
selNode: '',//
expandKeys: []
}
},
watch: {
@ -92,6 +93,10 @@ export default {
type: Boolean,
default: false
},
autoLoad: {
type: Boolean,
default: true
},
showCheckbox: {
type: Boolean,
default: false
@ -113,13 +118,7 @@ export default {
return []
}
},
expandKeys: {
//
type: Array,
default () {
return []
}
},
defaultNodeKey: {
// (id)
type: [Number, String]
@ -147,11 +146,17 @@ export default {
},
methods: {
setExpandKeys (expandKeys) {
this.expandKeys = expandKeys
},
filterNode (value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
loadData (callback, currentKey, checkedKeys) {
loadData (callback, currentKey, checkedKeys, expandKeys) {
this.expandKeys = expandKeys
var headers = {}
if (this.tenantCode !== '') {
headers = {
@ -163,7 +168,7 @@ export default {
this.checkedKeys = checkedKeys
this.resetFilterText()
window.app.ajax.get(
window.app.ajax.post(
this.url,
this.params,
(data, rspMsg) => {
@ -226,6 +231,7 @@ export default {
},
initCheckNodes () {
//
if (this.expandKeys.length > 0) {
this.expandKeys.forEach((oneKey, index) => { //
this.defaultExpandKeys.push(oneKey + '')
@ -409,8 +415,11 @@ export default {
},
mounted () {
if (!this.lazy) {
this.loading = true
this.loadData(null, this.currentNodeKey, this.checkedKeys)
if (this.autoLoad) {
this.loading = true
this.loadData(null, this.currentNodeKey, this.checkedKeys, this.expandKeys)
}
}
}
}

83
epmet-oper-web/src/views/components/CTreeDialogSingle.vue

@ -1,20 +1,21 @@
<!-- 输入框+选择点击选择弹出单选树 -->
<template>
<div>
<el-tooltip :content="inputValue"
placement="top">
<!-- <el-tooltip :content="inputValue"
placement="top"> -->
<el-input readonly
style="width:100%"
v-model="inputValue"
:placeholder="placeholder">
<el-input readonly
style="width:100%"
v-model="inputValue"
:placeholder="placeholder">
<el-button slot="append"
:type="type"
class="undisabled"
@click="handleSelect">选择</el-button>
</el-input>
</el-tooltip>
<el-button slot="append"
:type="type"
class="undisabled"
:disabled="selBtnDisabled"
@click="handleSelect">选择</el-button>
</el-input>
<!-- </el-tooltip> -->
<el-dialog :title="title"
lock-scroll
@ -31,11 +32,12 @@
:isDialogTree="true"
:showCheckbox="showCheckbox"
:defaultExpandAll="defaultExpandAll"
:defaultExpandKeys="[0]"
:expandKeys="expandKeys"
:defaultNodeKey="defaultNodeKey"
:defaultOnlyLeaf="defaultOnlyLeaf"
:defaultExpandOnClickNode="defaultExpandOnClickNode"
:nodeType="nodeType"
:autoLoad="autoLoad"
@nodeClick="handleNodeClick"></c-tree>
</div>
@ -63,7 +65,7 @@ export default {
selData: Object, //
selDataArray: [], //
inputValue: this.inputModel,
expandKeys: this.defaultExpandKeys//
expandKeys: []
}
},
props: {
@ -97,6 +99,10 @@ export default {
type: Boolean,
default: true
},
selBtnDisabled: {
type: Boolean,
default: false
},
modal: {
type: Boolean,
default: true
@ -122,13 +128,12 @@ export default {
return []
}
},
defaultExpandKeys: { // tree
//
type: Array,
default () {
return [0]
}
//
autoLoad: {
type: Boolean,
default: true
},
// 0
defaultNodeKey: { // tree
// (id)
@ -159,42 +164,34 @@ export default {
type: Boolean,
default: false
},
//
judgeParams: {
type: String,
default: '1'
}
},
methods: {
handleSelect () {
if (this.judgeParams === '2') {
if (this.params.bdzId === null || this.params === {} || this.params.bdzId === '') {
this.$message.error('所属变电站不能为空')
this.dialogVisible = false
return false
} else {
this.dialogVisible = true
}
} else {
this.dialogVisible = true
}
if (this.freshen) {
this.$nextTick(() => {
this.loadData()
})
}
this.dialogVisible = true
this.loadData()
},
setInputValue (inputValue) {
this.inputValue = inputValue
},
loadData (callback, currentKey, expandKeys) {
this.$nextTick(() => {
this.expandKeys = expandKeys
this.$refs['dialog_tree'].loadData(callback, currentKey)
if (expandKeys) {
this.expandKeys = expandKeys
}
this.$refs['dialog_tree'].loadData(callback, currentKey, [], this.expandKeys)
})
},
setExpandKeys (expandKeys) {
this.expandKeys = expandKeys
},
handleClear () { //
this.selData = ''
this.inputValue = ''

336
epmet-oper-web/src/views/modules/customer/feedback/CustomerInfo.vue

@ -0,0 +1,336 @@
<!-- 客户信息 -->
<template>
<div>
<!-- <el-button @click="backStep" type="primary" icon="el-icon-back">返回</el-button> -->
<el-card shadow="never"
class="aui-card--fill">
<el-row>
<el-tag type="info"
class="eltag"
size="medium"
style="width:100%;margin-top:10px">客户信息
</el-tag><br /><br />
<el-form :inline="false"
:model="dataForm.customerInfoDTO"
:rules="dataRule"
ref="dataForm"
:label-width="'120px'">
<el-form-item label="客户名称"
prop="customerName">
<el-input class="item_width_1"
v-model="dataForm.customerInfoDTO.customerName"
placeholder="客户名称"></el-input>
</el-form-item>
<el-form-item prop="logo"
label="Logo">
<el-upload class="item_width_1 avatar-uploader"
:action="uploadUlr"
:show-file-list="false"
:on-success="handleImgSuccess"
:before-upload="beforeImgUpload">
<img v-if="dataForm.customerInfoDTO.logo"
:src="dataForm.customerInfoDTO.logo"
style="width:70px;height:70px"
class="function-icon">
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-button size="mini"
class="btn_save"
type="primary"
@click="saveInfo()">保存客户信息</el-button>
</el-form>
</el-row>
<el-row>
<el-tag type="info"
class="eltag"
size="medium"
style="width:100%;margin-top:10px">根级组织信息
</el-tag><br /><br />
<el-form :inline="false"
:model="dataForm.rootAgencyDTO"
ref="dataForm"
:label-width="'120px'">
<el-form-item class="item_width_1"
label="组织名称">
<span class="item_width_1">{{dataForm.rootAgencyDTO.agencyName}}</span>
</el-form-item>
<el-form-item class="item_width_1"
label="组织级别">
<span class="item_width_1">{{dataForm.rootAgencyDTO.level|showInfo}}</span>
</el-form-item>
<el-form-item class="item_width_1"
label="地区编码">
<span class="item_width_1">{{dataForm.rootAgencyDTO.areaCode}}</span>
</el-form-item>
<el-form-item class="item_width_1"
label="所属地区">
<span class="item_width_1">{{dataForm.rootAgencyDTO.province+dataForm.rootAgencyDTO.city+dataForm.rootAgencyDTO.district}}</span>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-tag type="info"
class="eltag"
size="medium"
style="width:100%;margin-top:10px">超级管理员信息
</el-tag><br /><br />
<el-form :inline="false"
:model="dataForm.managers[0]"
ref="dataForm"
:label-width="'120px'">
<el-form-item class="item_width_1"
label="姓名">
<span>{{dataForm.managers[0].realName}}</span>
</el-form-item>
<el-form-item class="item_width_1"
label="性别">
<span>{{dataForm.managers[0].gender|showGender}}</span>
</el-form-item>
<el-form-item class="item_width_1"
label="电话">
<span>{{dataForm.managers[0].mobile}}</span>
</el-form-item>
</el-form>
</el-row>
<!-- <el-row>
<el-tag type="info"
class="eltag"
size="medium"
style="width:100%;margin-top:10px">配置信息
</el-tag><br /><br />
<el-row v-for="(val, index) in data.managers"
:key="index"
style="margin:10px;font-size:16px;height:30px;line-height:30px;border-bottom:1px solid grey;"
:gutter="20">
<el-col :span="6">{{val.realName}}</el-col>
<el-col :span="4">{{val.gender|genderName}}</el-col>
<el-col :span="14">{{val.mobile}}</el-col>
</el-row>
</el-row> -->
</el-card>
</div>
</template>
<script>
import { Loading } from 'element-ui' // Loading
let loading //
export default {
props: {
},
data () {
return {
customerId: '',
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/function/upload',
dataForm: {
rootAgencyDTO: {
agencyName: '成都市',
level: 'city',
areaCode: '123456',
province: '四川省',
city: '成都市',
district: 'SN4FHbIZtK',
},
customerInfoDTO: {
customerName: '成都市',
organizationLevel: 'city',
logo: ''
},
managers: [
{
realName: '王显章',
gender: '1',
mobile: '18560677960'
}
]
}
}
},
mounted () {
this.$nextTick(() => {
this.customerId = localStorage.getItem('customerId')
this.loadData()
})
},
methods: {
//
loadData () {
this.startLoading()
//
const url = '/oper/crm/customer/detail'
let params = {
customerId: this.customerId,
}
window.app.ajax.post(url, params,
(data, rspMsg) => {
this.endLoading()
this.dataForm = data
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
//
async loadConfigData () {
//
const url = '/oper/crm/customer/getcustomerparameter'
let params = {
customerId: this.customerId,
}
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)
})
},
saveInfo () {
//
// let url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/crm/customer/updatecustomer'
let url = '/oper/crm/customer/updatecustomer'
//
let params = {
customerId: this.customerId,
customerName: this.dataForm.customerInfoDTO.customerName,
logo: this.dataForm.customerInfoDTO.logo
}
window.app.ajax.post(url, params,
(data, rspMsg) => {
this.endLoading()
localStorage.setItem('customerName', this.dataForm.customerInfoDTO.customerName)
this.$emit('changeCustomerName', this.dataForm.customerInfoDTO.customerName)
this.$message.success('修改成功')
this.loadData()
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
//
handleImgSuccess (res, file) {
if (res.code === 0 && res.msg === 'success') {
this.dataForm.customerInfoDTO.logo = res.data.url
} else {
this.$message.error(res.msg)
}
},
beforeImgUpload (file) {
// const isPNG = file.type === 'image/png'
const isLt1M = file.size / 1024 / 1024 < 1
// if (!isPNG) {
// this.$message.error(' PNG !')
// }
if (!isLt1M) {
this.$message.error('上传图片大小不能超过 1MB!')
}
// return isPNG && isLt1M
return isLt1M
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
dataRule () {
return {
logo: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
customerName: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
filters: {
showInfo (key) {
if (key === 'province') {
return '省级'
} else if (key === 'city') {
return '市级'
} else if (key === 'district') {
return '区县级'
} else if (key === 'street') {
return '乡(镇、街道)级'
} else if (key === 'community') {
return '社区级'
} else if (key === '') {
return '————'
} else {
return key
}
},
showGender (key) {
if (key === '1') {
return '女'
} else if (key === '0') {
return '男'
} else {
return key
}
}
}
}
</script>
<style scoped>
.item_width_1 {
width: 300px;
}
.btn_save {
margin: 0 50px;
}
</style>

360
epmet-oper-web/src/views/modules/customer/feedback/DetailForm.vue

@ -0,0 +1,360 @@
<template>
<div>
<c-dialog :title="'建议详情'"
:visible="diaVisible"
:width="70"
:confirm="'回复'"
:showConfirm="showConfirm"
@ok="save"
@cancel="diaCancel">
<el-form :inline="true"
:model="adviceData"
:rules="dataRule"
ref="ref_form"
style="margin:0 auto;width:90%"
:label-width="'100px'">
<el-tag type="info"
class="eltag"
size="medium"
style="width:100%;margin-top:10px">建议详情</el-tag>
<div class="div_form">
<el-form-item prop="customerName"
label="客户名"
class="form_item_half">
<span>{{adviceData.customerName}}</span>
</el-form-item>
<el-form-item prop="agencyName"
label="组织名"
class="form_item_half">
<span>{{adviceData.agencyName}}</span>
</el-form-item>
<el-form-item prop="gridName"
label="网格名"
class="form_item_half ">
<span>{{adviceData.gridName}}</span>
</el-form-item>
<el-form-item prop="regPhone"
label="注册手机"
class="form_item_half ">
<span>{{adviceData.regPhone}}</span>
</el-form-item>
<el-form-item prop="adviceType"
label="问题分类"
class="form_item_half">
<span>{{adviceData.adviceType}}</span>
</el-form-item>
<el-form-item prop="adviceTime"
label="提出时间"
class="form_item_half">
<span>{{adviceData.adviceTime}}</span>
</el-form-item>
<el-form-item prop="userName"
label="提出者"
class="form_item_half ">
<span>{{adviceData.userName}}</span>
</el-form-item>
<el-form-item prop="phone"
label="联系方式"
class="form_item_half ">
<span>{{adviceData.phone}}</span>
</el-form-item>
<el-form-item prop="adviceContent"
label="建议内容"
class="form_item_total">
<span>{{adviceData.adviceContent}}</span>
</el-form-item>
<el-form-item v-if="adviceData.imgList.length>0"
prop="imgList"
label="建议图片">
<img v-for="(item,index) in adviceData.imgList"
:key="index"
:src="item"
style="width:70px;height:70px;margin-right:15px"
class="function-icon">
</el-form-item>
</div>
<el-tag type="info"
class="eltag"
size="medium"
style="width:100%;margin-top:10px">回复详情</el-tag>
<div class="div_form"
v-if="adviceData.replyContent===''">
<el-form-item prop="replyContent"
label="回复内容"
label-width="100px"
class="form_item_total ">
<el-input type="textarea"
:rows="4"
resize="none"
maxlength="500"
show-word-limit
style="width:600px"
placeholder='请输入回复内容'
v-model="adviceData.replyContent">
</el-input>
</el-form-item>
<el-form-item label="政府回复文本"
label-width="100px"
class="form_item_total ">
<el-input type="textarea"
:rows="4"
resize="none"
maxlength="500"
style="width:600px"
show-word-limit
placeholder='请输入回复内容'
v-model="adviceData.govContent">
</el-input>
</el-form-item>
<el-form-item prop="govImgList"
label="政府回复取证"
class="form_item_total ">
<el-upload class="avatar-uploader"
ref="uploadPic"
:action="uploadUlr"
list-type="picture-card"
:on-exceed="exceedPic"
:on-remove="removePic"
:on-success="handleSuccess"
:limit="3">
<span class="font-14">选择图片</span>
<div slot="tip"
class="el-upload__tip">最多上传3张图片图片支持jpgjpegbmpgit或png格式</div>
</el-upload>
</el-form-item>
</div>
<div class="div_form"
v-else>
<el-form-item prop="replyUserName"
label="回复者"
class="form_item_half ">
<span>{{adviceData.replyUserName}}</span>
</el-form-item>
<el-form-item prop="replyTime"
label="回复时间"
class="form_item_half ">
<span>{{adviceData.replyTime}}</span>
</el-form-item>
<el-form-item prop="replyContent"
label="回复内容"
class="form_item_total">
<span>{{adviceData.replyContent}}</span>
</el-form-item>
<el-form-item prop="govContent"
label="政府回复内容"
class="form_item_total">
<span>{{adviceData.govContent}}</span>
</el-form-item>
<el-form-item v-if="adviceData.govImgList.length>0"
prop="govImgList"
label="政府图片取证">
<img v-for="(item,index) in adviceData.govImgList"
:key="index"
:src="item"
style="width:70px;height:70px;margin-right:15px"
class="function-icon">
</el-form-item>
</div>
</el-form>
</c-dialog>
</div>
</template>
<script>
/* eslint-disable */
import CForm from '@c/CForm'
import CDialog from '@c/CDialog'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from "@/js/dai/request";
let loading //
export default {
data () {
return {
diaVisible: false,
adviceId: '',//id
adviceData: {
customerName: '',//
agencyName: '',//
gridName: '',//
userName: '',//
regPhone: '',//
adviceType: '',//
phone: '',//
adviceTime: '',//
adviceContent: '',//
imgList: [],//
replyContent: '',//
replyTime: '',//
replyUserName: '',//
govContent: '',//
govImgList: [],//
},
showConfirm: true,
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/function/upload',
// upload_url: '', // URL
upload_name: '', //
}
},
components: {
CForm, CDialog
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 50 - 400
},
...mapGetters(['clientHeight']),
dataRule () {
return {
replyContent: [
{ required: true, message: "回复不能为空", trigger: 'blur' }
]
}
}
},
methods: {
// eslint-disable-next-line
async initData (row) {
this.diaVisible = true
this.adviceId = row.id
await this.getData()
},
async getData () {
this.startLoading()
//const url = "https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/epmetuser/useradvice/advicedetail"
const url = "/epmetuser/useradvice/advicedetail"
const params = {
adviceId: this.adviceId
}
const { data, code, msg, internalMsg } = await requestPost(url, params)
if (code === 0) {
// this.endLoading()
if (data) {
this.adviceData = data
if (this.adviceData.replyContent !== '') {
this.showConfirm = false
}
}
} else {
this.$message.error(msg + ":" + internalMsg)
}
this.endLoading()
},
removePic (file, fileList) {
this.adviceData.govImgList.splice(this.adviceData.govImgList.findIndex(item => item.uid === file.uid), 1)
},
exceedPic () {
this.$message.warning("最多上传3张预览图片")
},
handleSuccess (response, file, fileList) {
this.adviceData.govImgList.push(file.url)
},
save () {
this.$refs['ref_form'].validate((valid) => {
if (valid) {
// if (!this.adviceData.replyContent || this.adviceData.replyContent === '') {
// this.$message.error('')
// return false
// }
this.startLoading()
let url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/epmetuser/useradvice/advicedetail'
// let url = '/epmetuser/useradvice/advicedetail'
//
let _data = {
adviceId: this.adviceData.adviceId,
replyContent: this.adviceData.replyContent,
govContent: this.adviceData.govContent,
govImgList: this.adviceData.govImgList
}
window.app.ajax.post(url, _data,
(data, rspMsg) => {
this.endLoading()
this.$message.success('回复成功')
this.diaCancel()
this.$emit('refresh')
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
}
})
},
diaCancel () {
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 scope>
.div_form {
margin: 10px 0 0 0;
}
.form_item_half {
width: 30%;
}
.form_item_total {
width: 90%;
}
.form_item_block {
display: block;
}
</style>

353
epmet-oper-web/src/views/modules/customer/feedback/FeedbackList.vue

@ -0,0 +1,353 @@
<template>
<div class="registerList">
<el-card shadow="never"
class="aui-card--fill">
<div class="mod-demo__demo}">
<el-form :inline="true"
:model="tableParams"
@keyup.enter.native="loadData()">
<div>
<el-form-item label="客户"
:label-width="labelWidth">
<el-select v-model="tableParams.customerId"
placeholder="客户"
clear
@change="customerChange()"
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 label="组织"
:label-width="labelWidth">
<c-tree-dialog-single style="width:200px;float:left"
ref="agencyCTreeDialog"
:params="treeParams"
:placeholder="'组织'"
:type="'primary'"
:title="'选择组织'"
:url="agencyUrl"
:defaultExpandKeys="agencyExpandKeys"
:defaultExpandAll="false"
:defaultNodeKey="agencyNodeKey"
:defaultOnlyLeaf="false"
:autoLoad="false"
:selBtnDisabled="selBtnDisabled"
@handleOk="handleAgencyOk"
@handleClear="handleAgencyClear">
</c-tree-dialog-single>
</el-form-item>
<el-form-item label="开始时间"
:label-width="labelWidth">
<el-date-picker v-model="tableParams.startTime"
style="width:200px;margin-left:10px"
type="datetime"
format="yyyy-MM-dd hh:mm:ss"
value-format="yyyy-MM-dd hh:mm:ss"
placeholder="开始时间"></el-date-picker>
</el-form-item>
<el-form-item label="结束时间"
:label-width="labelWidth">
<el-date-picker v-model="tableParams.endTime"
style="width:200px;margin-left:10px"
type="datetime"
format="yyyy-MM-dd hh:mm:ss"
value-format="yyyy-MM-dd hh:mm:ss"
placeholder="结束时间"></el-date-picker>
</el-form-item>
</div>
<div>
<el-form-item label="问题分类"
:label-width="labelWidth">
<el-select v-model="tableParams.adviceType"
placeholder="问题分类"
clearable>
<el-option v-for="item in form.data['adviceType']"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="回复状态"
:label-width="labelWidth">
<el-select v-model="tableParams.isReply"
placeholder="回复状态"
clearable>
<el-option v-for="item in form.data['isReply']"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item style="margin-left:10px">
<el-button @click="loadData()"
type="primary">查询</el-button>
</el-form-item>
</div>
</el-form>
<c-table column-type=""
ref="table"
:url="tableUrl"
:params="tableParams"
keyword="FeedbackList"
:operations="operations"
:tableHeight="tableHeight"
:operationWidth="60"
:buttonAlign="'center'"
@detail="detail">
</c-table>
</div>
</el-card>
<detail-form ref="ref_edit_form"
@refresh="loadData"></detail-form>
</div>
</template>
<script>
import CTable from '@c/CTable'
import CTreeDialogSingle from '@c/CTreeDialogSingle';
import DetailForm from './DetailForm'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from "@/js/dai/request";
let loading //
export default {
data () {
return {
//
labelWidth: '70px',
//
tableUrl: '/epmetuser/useradvice/advicelist',
// tableUrl: 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/epmetuser/useradvice/advicelist',
tableParams: {
customerId: '',//id
agencyId: '',//id
isReply: '',//,01,
adviceType: '',// gov,software ,
startTime: '',//
endTime: '',//
},
//
operations: [
{
lable: '详情', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'detail', //
isShow: (row) => {
return true
}
}
],
//
tableData: [],
//
agencyUrl: "/gov/org/customeragency/getagencyelementtreelist",//url
// agencyUrl: "https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/gov/org/customeragency/getagencyelementtreelist",//url
agencyExpandKeys: [0],//
agencyNodeKey: 0,//
selBtnDisabled: true,
treeParams: {
customerId: ''
},
//
form: {
dataUrl: [], // //url
data: { //
adviceType: [
{
value: 'gov',
label: '政府业务建议'
},
{
value: 'software',
label: '软件功能及体验问题'
}
],
isReply: [
{
value: '0',
label: '未回复'
},
{
value: '1',
label: '已回复'
}
]
}
}
}
},
components: {
CTable, DetailForm, CTreeDialogSingle
},
activated () {
this.$nextTick(() => {
this.$refs.table.doLayout() //
})
},
mounted () {
this.initData()
this.loadData()
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 100
},
...mapGetters(['clientHeight', 'env'])
},
methods: {
async initData () {
await this.getCustomerData()
await this.loadData()
},
//
async getCustomerData () {
this.startLoading()
const url = "https://epmet-cloud.elinkservice.cn/api/third/pacustomer/registerbyauth"
const params = {
source: this.env,
initState: 1
}
const { data, code, msg, internalMsg } = await requestPost(url, params)
if (code === 0) {
// 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()
}
} else {
this.$message.error(msg + ":" + internalMsg)
}
this.endLoading()
},
//
async customerChange (value) {
this.treeParams.customerId = this.tableParams.customerId
if (this.tableParams.customerId === '') {
this.selBtnDisabled = true
this.treeParams.customerId = ''
} else {
this.selBtnDisabled = false
this.startLoading()
// const url = "https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/gov/org/customeragency/getagencyelementtreekeys"
const url = "/gov/org/customeragency/getagencyelementtreekeys"
const params = {
customerId: this.tableParams.customerId,
}
const { data, code, msg, internalMsg } = await requestPost(url, params)
if (code === 0) {
if (data) {
this.agencyExpandKeys = data
this.$refs['agencyCTreeDialog'].setExpandKeys(this.agencyExpandKeys);
}
} else {
this.$message.error(msg + ":" + internalMsg)
}
this.endLoading()
}
},
handleAgencyOk (data) {//
this.tableParams.agencyId = data.id
console.log(this.tableParams.agencyId)
},
handleAgencyClear () {//
this.tableParams.agencyId = ""
this.$nextTick(() => {
this.agencyExpandKeys = [0];
this.$refs['agencyCTreeDialog'].loadData(null, 0, this.agencyExpandKeys);
})
},
//
async loadData () {
this.$refs.table.loadData()
},
//
detail (row) {
this.$refs['ref_edit_form'].initData(row)
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
}
}
</script>
<style lang="css">
.aaa {
height: 100px;
}
/* .register .el-table .el-table__header-wrapper {
position: absolute;
top: 0;
left: 0;
}*/
/*
.register .el-table .el-table__fixed-body-wrapper {
height: calc(100% - 44px);
margin-top: 44px;
overflow-y: auto !important;
} */
</style>

108
epmet-oper-web/src/views/modules/customer/feedback/customer-info.vue

@ -0,0 +1,108 @@
<template>
<div>
<!-- <el-button @click="backStep" type="primary" icon="el-icon-back">返回</el-button> -->
<el-card shadow="never"
class="aui-card--fill"
style="width:800px"
v-if="data.length!==0">
<el-row>
<h2>客户信息</h2>
<el-row v-for="(val, key) in data.customerInfoDTO"
:key="key"
style="margin:10px;font-size:16px;height:30px;line-height:30px;border-bottom:1px solid grey;"
:gutter="20">
<el-col :span="10">{{key|infoName}}</el-col>
<el-col :span="14">{{val|showInfo}}</el-col>
</el-row>
</el-row>
<el-row>
<h2 v-if="data.rootAgencyDTO!=null">根级组织信息</h2>
<el-row v-for="(val, key) in data.rootAgencyDTO"
:key="key"
style="margin:10px;font-size:16px;height:30px;line-height:30px;border-bottom:1px solid grey;"
:gutter="20">
<el-col :span="10">{{key|infoName}}</el-col>
<el-col :span="14">{{val|showInfo}}</el-col>
</el-row>
</el-row>
<el-row>
<h2 v-if="data.managers.length!==0">管理员信息</h2>
<el-row v-for="(val, index) in data.managers"
:key="index"
style="margin:10px;font-size:16px;height:30px;line-height:30px;border-bottom:1px solid grey;"
:gutter="20">
<el-col :span="6">{{val.realName}}</el-col>
<el-col :span="4">{{val.gender|genderName}}</el-col>
<el-col :span="14">{{val.mobile}}</el-col>
</el-row>
</el-row>
</el-card>
</div>
</template>
<script>
export default {
props: {
dataList: {
type: [Object, Array],
default: () => {
return {
customerInfoDTO: {},
rootAgencyDTO: {},
managers: []
}
}
}
},
data () {
return {
data: this.dataList
}
},
filters: {
infoName (key) {
return {
'customerName': '客户名称',
'organizationLevel': '组织级别',
'agencyName': '组织名称',
'level': '组织级别',
'areaCode': '地区编码',
'province': '省份',
'city': '城市',
'district': '区县',
'realName': '姓名',
'gender': '性别',
'mobile': '手机号'
}[key]
},
genderName (key) {
return [
'未知',
'男',
'女'
][key]
},
showInfo (key) {
if (key === 'province') {
return '省级'
} else if (key === 'city') {
return '市级'
} else if (key === 'district') {
return '区县级'
} else if (key === 'street') {
return '乡(镇、街道)级'
} else if (key === 'community') {
return '社区级'
} else if (key === '') {
return '————'
} else {
return key
}
}
},
watch: {
dataList (nVal) {
this.data = nVal
}
}
}
</script>

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

@ -0,0 +1,566 @@
<template>
<div>
<el-button type="primary"
plain
icon="el-icon-circle-plus-outline"
style="margin-bottom:10px;"
@click="toStep(2)">新增</el-button>
<el-card shadow="never"
class="aui-card--fill">
<el-table v-loading="dataListLoading"
:data="dataList"
border
style="width: 100%;"
@row-contextmenu="handleRowContext"
@cell-dblclick="handleRowContext">
<el-table-column prop="logo"
label="客户LOGO"
header-align="left"
align="left"
width="100">
<template slot-scope="scope">
<el-image v-if="scope.row.logo"
style="width: 40px; height: 40px;text-align: center;"
:src="scope.row.logo"
:preview-src-list="[scope.row.logo]">
</el-image>
<!-- <img v-if="scope.row.logo" :src="scope.row.logo" class="customer-logo" /> -->
</template>
</el-table-column>
<el-table-column prop="customerName"
label="客户名称"
header-align="left"
align="left"
width="300"></el-table-column>
<el-table-column label="操作"
fixed="right"
header-align="right"
align="right">
<template slot-scope="scope">
<el-button size="small"
v-if="!scope.row.hasRootAgency"
@click="toSetUpStep(scope.row.customerId, 3)">根级组织设置</el-button>
<el-button size="small"
v-if="!scope.row.hasManager"
@click="toSetUpStep(scope.row.customerId, 4)">管理员设置</el-button>
<el-button size="small"
@click="onOpenDetails(scope.row.customerId)">详情</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-dialog @close="toStep(0)"
width="850px"
:visible.sync="centerDialogVisible"
center
:close-on-click-modal="false"
:close-on-press-escape="false">
<div v-if="step == 1">
<componentInfo :dataList="details"></componentInfo>
</div>
<div class="add-c-box"
v-if="step == 2">
<h2>客户信息</h2>
<el-form label-position="left"
label-width="80px"
:model="dataForm2"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="submitStepHandle()"
status-icon>
<el-form-item prop="customerName"
label="客户名称">
<el-input v-model="dataForm2.customerName"
key="customerName">
<span slot="prefix"
class="el-input__icon">
<svg class="icon-svg"
aria-hidden="true">
<use xlink:href="#icon-user"></use>
</svg>
</span>
</el-input>
</el-form-item>
<el-form-item prop="organizationLevel"
label="组织级别">
<el-select v-model="dataForm2.organizationLevel"
key="organizationLevel">
<el-option v-for="(val, key) in organizationLevels"
:key="key"
:label="key"
:value="val"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="logo"
label="客户LOGO">
<el-upload class="avatar-uploader"
:action="uploadUlr"
:show-file-list="false"
:on-success="handleAvatarSuccess">
<img v-if="dataForm2.logo"
:src="dataForm2.logo"
class="avatar" />
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-button type="primary"
@click="submitStepHandle">下一步</el-button>
</el-form>
</div>
<div class="add-c-box"
v-else-if="step == 3">
<h2>根级组织信息</h2>
<el-form label-position="left"
label-width="80px"
:model="dataForm3"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="submitStepHandle()"
status-icon>
<el-form-item prop="agencyName"
label="组织名称">
<el-input v-model="dataForm3.agencyName"
key="agencyName">
<span slot="prefix"
class="el-input__icon">
<svg class="icon-svg"
aria-hidden="true">
<use xlink:href="#icon-user"></use>
</svg>
</span>
</el-input>
</el-form-item>
<el-form-item prop="level"
label="组织级别">
<el-select v-model="dataForm3.level"
key="level"
@change="onLevelChange">
<el-option v-for="(val, key) in organizationLevels"
:key="key"
:label="key"
:value="val"></el-option>
</el-select>
</el-form-item>
<el-form-item :prop="pcd"
label="选择地区"
:show-message="pcdError">
<v-distpicker :hideArea="isHideArea"
:province="dataForm3.province"
:city="dataForm3.city"
:area="dataForm3.district"
:onlyProvince="isOnlyProvince"
@province="onChangeProvince"
@city="onChangeCity"
@area="onChangeArea"></v-distpicker>
</el-form-item>
<el-form-item prop="areaCode"
label="地区编码">
<el-input v-model="dataForm3.areaCode"
key="areaCode"
disabled></el-input>
</el-form-item>
<el-button type="primary"
@click="submitStepHandle">下一步</el-button>
</el-form>
</div>
<div class="add-c-box"
v-else-if="step == 4">
<h2>管理员信息</h2>
<el-form label-position="left"
label-width="80px"
:model="dataForm4"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="submitStepHandle()"
status-icon>
<el-form-item prop="realName"
label="姓名">
<el-input v-model="dataForm4.realName"
key="realName">
<span slot="prefix"
class="el-input__icon">
<svg class="icon-svg"
aria-hidden="true">
<use xlink:href="#icon-user"></use>
</svg>
</span>
</el-input>
</el-form-item>
<el-form-item prop="gender"
label="性别">
<el-select v-model="dataForm4.gender"
key="gender">
<el-option v-for="(val, key) in genders"
:key="key"
:label="val"
:value="key"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="mobile"
label="手机号">
<el-input v-model.number="dataForm4.mobile"
key="mobile">
<span slot="prefix"
class="el-input__icon">
<svg class="icon-svg"
aria-hidden="true">
<use xlink:href="#icon-user"></use>
</svg>
</span>
</el-input>
</el-form-item>
<el-button type="primary"
@click="submitStepHandle">完成</el-button>
</el-form>
</div>
</el-dialog>
</div>
</template>
<style
lang="scss"
src="@/assets/scss/modules/c-manage/customer-manage.scss"
></style>
<script>
import mixinViewModule from '@/mixins/view-module'
import VDistpicker from 'v-distpicker'
import { Loading } from 'element-ui'
import componentInfo from './customer-info'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/oper/crm/customer/getvalidcustomerlist',
getDataListIsPage: false
},
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/customerlogo/upload',
pcd: 'district',
pcdError: true,
centerDialogVisible: false,
organizationLevels: {
社区级: 'community',
'乡(镇、街道)级': 'street',
区县级: 'district',
市级: 'city',
省级: 'province'
},
genders: ['未知', '男', '女'],
step: 1,
details: [],
customerId: '',
agencyId: '',
dataForm2: {
logo: '',
customerName: '',
organizationLevel: ''
},
dataForm3: {
customerId: '',
agencyName: '',
level: '',
areaCode: '',
province: '',
city: '',
district: ''
},
dataForm4: {
customerId: '',
realName: '',
gender: '',
mobile: '',
agencyId: ''
},
isHideArea: false,
isOnlyProvince: false,
checkMobile: (rule, value, callback) => {
// if (!Number.isInteger(value)) {
// return callback(new Error(''))
// }
var phoneReg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
if (!phoneReg.test(value.toString())) {
return callback(new Error('请输入正确格式的手机号'))
}
callback()
}
}
},
components: {
VDistpicker,
componentInfo
},
mounted () {
// console.log(app.ajax)
},
methods: {
toStep (s) {
this.step = s
if (s !== 0) {
this.centerDialogVisible = true
}
},
toSetUpStep (customerId, step) {
this.customerId = customerId
this.toStep(step)
},
getCustomerDetail (id) {
const url = '/oper/crm/customer/detail'
this.$http
.post(url, { customerId: id })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取详情成功')
this.details = res.data
console.log(res.data)
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
async onOpenDetails (customerId) {
let loadingInstance = Loading.service()
await this.getCustomerDetail(customerId)
this.toStep(1)
loadingInstance.close()
},
submitDataForm2 () {
console.log(this.dataForm2)
const url = '/oper/crm/customer/add'
const dataForm = this.dataForm2
return this.$http
.post(url, dataForm)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
this.customerId = res.data.customerId
console.log('提交信息成功' + this.step)
this.toStep(3)
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
submitDataForm3 () {
this.dataForm3.customerId = this.customerId
console.log(this.dataForm3)
const url = '/oper/crm/customer/addrootagency'
const dataForm = this.dataForm3
return this.$http
.post(url, dataForm)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
this.agencyId = res.data.agencyId
console.log('提交信息成功' + this.step)
this.toStep(4)
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
submitDataForm4 () {
let dataForm = this.dataForm4
dataForm.customerId = this.customerId
dataForm.agencyId = this.dataForm4.agencyId
dataForm.mobile = this.dataForm4.mobile.toString()
console.log(dataForm)
const url = '/oper/crm/customer/addmanager'
window.app.ajax.post(url, dataForm,
(data, rspMsg) => {
this.$message.success('提交信息成功' + this.step)
this.toStep(0)
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
// return this.$http
// .post(url, dataForm)
// .then(({ data: res }) => {
// if (res.code !== 0) {
// return this.$message.error(res.msg)
// } else {
// console.log('' + this.step)
// this.toStep(0)
// }
// })
// .catch(() => {
// return this.$message.error('')
// })
},
async toNextStep () {
let loadingInstance = Loading.service()
if (this.step === 2) {
await this.submitDataForm2()
} else if (this.step === 3) {
await this.submitDataForm3()
} else if (this.step === 4) {
await this.submitDataForm4()
}
loadingInstance.close()
},
submitStepHandle () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.toNextStep()
})
},
//
onLevelChange (e) {
this.dataForm3.province = ''
this.dataForm3.city = ''
this.dataForm3.district = ''
},
onChangeProvince (e) {
this.dataForm3.areaCode = e.code
this.dataForm3.province = e.value
this.dataForm3.city = ''
this.dataForm3.district = ''
if (this.pcd === 'province') {
this.pcdError = false
}
},
onChangeCity (e) {
this.dataForm3.areaCode = e.code
this.dataForm3.city = e.value
this.dataForm3.district = ''
if (this.pcd === 'city') {
this.pcdError = false
}
},
onChangeArea (e) {
this.dataForm3.areaCode = e.code
this.dataForm3.district = e.value
if (this.pcd === 'district') {
this.pcdError = false
}
},
handleAvatarSuccess (res, file) {
if (res.code === 0 && res.msg === 'success') {
this.dataForm2.logo = res.data.url
} else this.$message.error(res.msg)
},
beforeAvatarUpload (file) {
const isJPG = file.type === 'image/jpeg'
const isLt2M = file.size / 1024 / 1024 < 2
if (!isJPG) {
this.$message.error('上传头像图片只能是 JPG 格式!')
}
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!')
}
return isJPG && isLt2M
},
handleCellDbclick (row, column, cell, event) {
if (column.label === '客户LOGO') {
this.copy(row.logo)
}
},
handleRowContext (row, column, event) {
this.copy(row.logo)
},
copy (data) {
let url = data
let oInput = document.createElement('input')
oInput.value = url
document.body.appendChild(oInput)
oInput.select()
console.log(oInput.value)
document.execCommand('Copy')
this.$message({
message: 'LOGO链接复制成功',
type: 'success'
})
oInput.remove()
}
},
computed: {
dataRule () {
return {
customerName: [{ required: true, message: '请输入客户名称' }],
organizationLevel: [{ required: true, message: '请选择组织级别' }],
agencyName: [{ required: true, message: '请输入组织名称' }],
level: [{ required: true, message: '请选择组织级别' }],
areaCode: [{ required: true, message: '请输入地区编码' }],
province: [{ required: true, message: '请选择省份', trigger: 'blur' }],
city: [{ required: true, message: '请选择城市', trigger: 'blur' }],
district: [{ required: true, message: '请选择区县', trigger: 'blur' }],
realName: [{ required: true, message: '请输入姓名' }],
gender: [{ required: true, message: '请输入性别' }],
mobile: [
{ required: true, message: '请输入手机号' },
{ validator: this.checkMobile }
]
}
}
},
watch: {
step (nVal, oVal) {
if (nVal === 0) {
this.dataForm2 = {
customerName: '',
organizationLevel: ''
}
this.dataForm3 = {
agencyName: '',
level: '',
areaCode: '',
province: '',
city: '',
district: ''
}
this.dataForm4 = {
realName: '',
gender: '',
mobile: ''
}
this.centerDialogVisible = false
if (oVal === 3 || oVal === 4) {
this.query()
}
}
},
'dataForm3.level': (nVal) => {
this.pcdError = true
this.dataForm3.areaCode = ''
if (nVal === 'province') {
this.isOnlyProvince = true
this.pcd = 'province'
} else if (nVal === 'city') {
this.isHideArea = true
this.isOnlyProvince = false
this.pcd = 'city'
} else {
this.pcd = 'district'
this.isHideArea = false
this.isOnlyProvince = false
}
if (nVal !== '') {
this.$nextTick(() => {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
})
})
}
}
}
}
</script>

3
epmet-oper-web/src/views/pages/loginWork.vue

@ -205,7 +205,8 @@ export default {
const params = {
phone: this.dataForm.phone
}
window.app.ajax.post(url, params,
window.app.ajax.post(
url, params,
(data, rspMsg) => {
if (data.length === 0) {//

Loading…
Cancel
Save