Browse Source

定制功能

master
jiangyy 5 years ago
parent
commit
49cc3fa628
  1. 75
      epmet-oper-web/src/assets/scss/common.scss
  2. 26
      epmet-oper-web/src/js/columns/columns.js
  3. 32
      epmet-oper-web/src/js/columns/customer/init/customer.js
  4. 174
      epmet-oper-web/src/js/columns/customer/manage/customer.js
  5. 16
      epmet-oper-web/src/js/columns/customer/miniProManage.js
  6. 20
      epmet-oper-web/src/js/columns/customer/version.js
  7. 4
      epmet-oper-web/src/js/columns/miniPro/customizedFunction.js
  8. 7
      epmet-oper-web/src/js/service.js
  9. 8
      epmet-oper-web/src/views/components/CForm.vue
  10. 151
      epmet-oper-web/src/views/modules/customer/customize/ConfigEdit.vue
  11. 130
      epmet-oper-web/src/views/modules/customer/customize/ConfigItem.vue
  12. 135
      epmet-oper-web/src/views/modules/customer/manage/ConfigForm.vue
  13. 158
      epmet-oper-web/src/views/modules/customer/manage/CustomerList.vue
  14. 173
      epmet-oper-web/src/views/modules/customer/manage/EditForm.vue
  15. 525
      epmet-oper-web/src/views/modules/customer/miniProAgent/BasicInfo.vue
  16. 44
      epmet-oper-web/src/views/modules/customer/miniProAgent/LowVersion.vue
  17. 34
      epmet-oper-web/src/views/modules/customer/miniProAgent/MiniProList.vue
  18. 16
      epmet-oper-web/src/views/modules/productConfig/customizeFunction/CustomFun.vue
  19. 110
      epmet-oper-web/src/views/modules/productConfig/customizeFunction/Edit.vue
  20. 123
      epmet-oper-web/src/views/modules/productConfig/homeComponent/functionconfiguration.vue

75
epmet-oper-web/src/assets/scss/common.scss

@ -4,7 +4,8 @@
box-sizing: border-box;
}
body {
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB',
'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
font-size: $--font-size-base;
line-height: $base--line-height;
color: $--color-text-primary;
@ -34,7 +35,7 @@ img {
}
.clearfix:before,
.clearfix:after {
content: " ";
content: ' ';
display: table;
}
.clearfix:after {
@ -80,7 +81,6 @@ img {
line-height: $base--line-height !important;
}
/* Reset element-ui
------------------------------ */
.aui-wrapper {
@ -110,7 +110,6 @@ img {
}
}
/* Common
------------------------------ */
// 图标
@ -145,8 +144,8 @@ img {
background-color: transparent;
}
&-add {
> span > *[class*="el-icon-"],
> span > *[class*="icon"] {
> span > *[class*='el-icon-'],
> span > *[class*='icon'] {
vertical-align: middle;
font-size: 18px;
margin-right: 5px;
@ -161,7 +160,7 @@ img {
bottom: 0;
z-index: 1010;
width: 210px;
transition: right .3s;
transition: right 0.3s;
&--open {
right: 0;
}
@ -197,7 +196,6 @@ img {
}
}
/* Layout
------------------------------ */
.aui-wrapper {
@ -205,7 +203,6 @@ img {
padding-top: $navbar--height;
}
/* Sidebar fold
------------------------------ */
.aui-sidebar--fold {
@ -252,7 +249,6 @@ img {
}
}
/* Navbar
------------------------------ */
.aui-navbar {
@ -265,7 +261,7 @@ img {
align-items: stretch;
height: $navbar--height;
background-color: $--color-primary;
box-shadow: 0 1px 0 0 rgba(0, 0, 0, .05);
box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.05);
&--colorful {
.aui-navbar__body {
background-color: transparent;
@ -316,7 +312,7 @@ img {
position: relative;
width: $sidebar--width;
height: $navbar--height;
transition: width .3s;
transition: width 0.3s;
}
&__brand {
display: flex;
@ -331,7 +327,7 @@ img {
white-space: nowrap;
color: #fff;
overflow: hidden;
transition: width .3s;
transition: width 0.3s;
&-lg,
&-mini {
max-width: 100%;
@ -402,7 +398,7 @@ img {
width: auto;
font-size: 12px;
margin: 0 0 0 5px;
transition: transform .3s;
transition: transform 0.3s;
}
}
}
@ -415,14 +411,14 @@ img {
}
}
&__search {
> *[class*="el-icon-"],
> *[class*="icon"] {
> *[class*='el-icon-'],
> *[class*='icon'] {
display: inline-block;
vertical-align: middle;
}
&-txt {
width: 0;
transition: width .3s, margin-left .3s;
transition: width 0.3s, margin-left 0.3s;
&.is-show {
width: 210px;
margin-left: 8px;
@ -453,7 +449,6 @@ img {
}
}
/* Sidebar
------------------------------ */
.aui-sidebar {
@ -464,9 +459,9 @@ img {
z-index: 1020;
width: $sidebar--width;
background-color: #fff;
box-shadow: 1px 0 2px 0 rgba(0, 0, 0, .05);
box-shadow: 1px 0 2px 0 rgba(0, 0, 0, 0.05);
overflow: hidden;
transition: width .3s;
transition: width 0.3s;
&--dark {
background-color: $sidebar--background-color-dark;
.aui-sidebar__menu,
@ -499,12 +494,12 @@ img {
padding-bottom: 15px;
overflow-x: hidden;
overflow-y: scroll;
transition: width .3s;
transition: width 0.3s;
}
&__menu {
width: $sidebar--width;
border-right: 0;
transition: width .3s;
transition: width 0.3s;
.el-menu-item,
.el-submenu__title {
height: $sidebar--menu-item-height;
@ -519,11 +514,10 @@ img {
text-align: center;
font-size: 16px;
color: inherit !important;
transition: font-size .3s;
transition: font-size 0.3s;
}
}
/* Content
------------------------------ */
.aui-content {
@ -535,13 +529,15 @@ img {
margin-left: $sidebar--width;
min-height: calc(100vh - #{$navbar--height});
background-color: $content--background-color;
transition: margin-left .3s;
transition: margin-left 0.3s;
}
> .aui-card--fill > .el-card__body {
min-height: calc(#{$content--fill-height} - 2px);
}
> .aui-card--fill > .el-card__header + .el-card__body {
min-height: calc(#{$content--fill-height} - #{$content--card-header-height} - 2px);
min-height: calc(
#{$content--fill-height} - #{$content--card-header-height} - 2px
);
}
&--tabs {
padding: $content--tabs-header-height 0 0;
@ -574,9 +570,9 @@ img {
z-index: 930;
padding: 0 55px 0 15px;
margin: 0;
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
background-color: #fff;
transition: left .3s;
transition: left 0.3s;
> .el-tabs__nav-wrap {
margin-bottom: 0;
&:after {
@ -646,10 +642,15 @@ img {
min-height: calc(#{$content--fill-height-tabs} - 2px);
}
> .aui-card--fill > .el-card__header + .el-card__body {
min-height: calc(#{$content--fill-height-tabs} - #{$content--card-header-height} - 2px);
min-height: calc(
#{$content--fill-height-tabs} - #{$content--card-header-height} -
2px
);
}
&.is-iframe {
height: calc(#{$content--fill-height-tabs} + #{$content--padding * 2});
height: calc(
#{$content--fill-height-tabs} + #{$content--padding * 2}
);
margin: -$content--padding;
min-height: auto;
> .aui-card--fill {
@ -668,7 +669,10 @@ img {
background-color: #fff;
}
> .aui-card--fill > .el-card__header + .el-card__body {
height: calc(#{$content--fill-height-tabs} - #{$content--card-header-height} - 2px);
height: calc(
#{$content--fill-height-tabs} - #{$content--card-header-height} -
2px
);
}
}
}
@ -692,10 +696,13 @@ img {
}
}
.el-loading-mask {
z-index: 5001 !important;
}
/* Page
------------------------------ */
*[class*="aui-page__"] {
*[class*='aui-page__'] {
padding-top: 0;
.aui-content {
min-height: auto;
@ -707,7 +714,9 @@ img {
min-height: calc(100vh - #{$content--padding * 2} - 2px);
}
> .aui-card--fill > .el-card__header + .el-card__body {
min-height: calc(100vh - #{$content--padding * 2} - #{$content--card-header-height} - 2px);
min-height: calc(
100vh - #{$content--padding * 2} - #{$content--card-header-height} - 2px
);
}
}
}

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

@ -1,23 +1,27 @@
// 客户管理
import CustomerList from './customer/manage/customer'
import RegisterInfo from './customer/init/customer'
import miniProManage from './customer/miniProManage'
import Temp from './code/temp'
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'
// 产品配置
import CustomizedFunction from './miniPro/customizedFunction'
export default {
Temp: Temp, // 代码上传——模板list
CommitCodeList: CommitCode['list'], // 代码上传——已上传的代码列表
CommitCodeForm: CommitCode['form'], // 代码上传——代码form
OperHistory: OperHistory, // 代码上传——操作历史
Category: Category, // 代码上传——审核项——类目
CustomerList: CustomerList['list'], // 客户管理——客户管理——客户列表
ConfigForm: CustomerList['configForm'], // 客户管理——客户管理——配置
RegisterInfo: RegisterInfo, // 客户管理——客户注册信息
MiniProManage: MiniProManage, // 客户管理——客户小程序管理
Version: Version, // 客户管理——基础库
MiniProList: miniProManage, // 客户管理——代小程序管理——客户小程序列表
Temp: Temp, // 客户管理——代小程序管理——版本管理——模板list
CommitCodeList: CommitCode['list'], // 客户管理——代小程序管理——版本管理——代码上传——已上传的代码列表
CommitCodeForm: CommitCode['form'], // 客户管理——代小程序管理——版本管理——代码上传——代码form
OperHistory: OperHistory, // 客户管理——代小程序管理——版本管理——操作历史
Category: Category, // 客户管理——代小程序管理——类目
// 小程序管理
CustomizedFunction: CustomizedFunction // 定制功能

32
epmet-oper-web/src/js/columns/customer/customer.js → epmet-oper-web/src/js/columns/customer/init/customer.js

@ -17,27 +17,15 @@ export default [
},
{
key: 'province',
title: '省',
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: true,
width: 120
},
{
key: 'city',
title: '市',
display: ['formA', 'formU', 'table', 'model'],
title: '组织地区',
display: ['table', 'model'],
fixed: false,
block: true,
width: 120
},
{
key: 'district',
title: '区',
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: true,
width: 120
provinceKey: 'province',
cityKey: 'city',
countyKey: 'district',
format: 'address',
width: 150
},
// {
// key: 'location',
@ -68,7 +56,7 @@ export default [
title: '居民端',
display: ['formA', 'formU', 'table', 'model'],
block: true,
format: function (cellValue, index) {
format: (cellValue, index) => {
if (cellValue === 1) {
return '已授权'
} else if (cellValue === 0) {
@ -84,7 +72,7 @@ export default [
title: '工作端',
display: ['formA', 'formU', 'table', 'model'],
block: true,
format: function (cellValue, index) {
format: (cellValue, index) => {
if (cellValue === 1) {
return '已授权'
} else if (cellValue === 0) {
@ -100,7 +88,7 @@ export default [
title: '初始化',
display: ['formA', 'formU', 'table', 'model'],
block: true,
format: function (cellValue, index) {
format: (cellValue, index) => {
if (cellValue === 1) {
return '已初始化'
} else if (cellValue === 0) {

174
epmet-oper-web/src/js/columns/customer/manage/customer.js

@ -0,0 +1,174 @@
export default {
list: [
{
key: 'logo',
title: 'Logo',
display: ['table', 'model'],
fixed: false,
block: true,
width: 80,
tableType: 'image'
},
{
key: 'customerName',
title: '客户名称',
display: ['formA', 'formU', 'table', 'model'],
type: 'input',
rule: [
{
required: true,
message: '请输入客户名称',
trigger: 'blur'
}
],
fixed: false,
block: true,
width: 100
},
{
key: 'organizationLevels',
title: '组织级别',
display: ['table', 'model'],
fixed: false,
block: true,
width: 50,
format: (cellValue, index) => {
// 客户组织级别:0.省级,1市级,2.区县级,3.乡镇街道级 字典表key:organizationlevel
if (cellValue === '0') {
return '省级'
} else if (cellValue === '1') {
return '市级'
} else if (cellValue === '2') {
return '区县级'
} else if (cellValue === '3') {
return '乡镇街道级'
} else {
return '未知'
}
}
},
{
key: 'province',
title: '组织地区',
display: ['table', 'model'],
fixed: false,
block: true,
provinceKey: 'province',
cityKey: 'city',
countyKey: 'county',
format: 'address',
width: 150
},
{
key: 'gridNumber',
title: '网格数',
display: ['table', 'model'],
block: true,
width: 60
},
{
key: 'validityTime',
title: '有效期',
display: ['table', 'model'],
block: true,
width: 60
},
{
key: 'rootManageName',
title: '管理员',
display: ['formA', 'formU', 'table', 'model'],
type: 'input',
rule: [
{
required: true,
message: '请输入管理员姓名',
trigger: 'blur'
}
],
block: true,
width: 60
},
{
key: 'rootManagePhone',
title: '联系方式',
display: ['formA', 'formU', 'table', 'model'],
type: 'input',
rule: [
{
required: true,
message: '请输入管理员联系方式',
trigger: 'blur'
}
],
block: true,
width: 60
}
],
configForm: [
{
key: 'customerName',
title: '客户名称',
display: ['formA', 'formU', 'table', 'model'],
type: 'input',
rule: [
{
required: true,
message: '请输入客户名称',
trigger: 'blur'
}
],
fixed: false,
block: true,
width: 100
},
{
key: 'validityTime',
title: '有效期',
display: ['formA', 'formU', 'table', 'model'],
type: 'date',
rule: [
{
required: true,
message: '请选择有效期',
trigger: 'blur'
}
],
fixed: false,
block: true,
width: 100
},
{
key: 'createGridNumber',
title: '已创建网格数',
display: ['formA', 'formU', 'table', 'model'],
type: 'span',
rule: [
{
required: true,
message: '请输入有效期',
trigger: 'blur'
}
],
fixed: false,
block: true,
width: 100
},
{
key: 'gridNumber',
title: '最大网格数',
display: ['formA', 'formU', 'table', 'model'],
type: 'counter',
rule: [
{
required: true,
message: '请输入最大网格数',
trigger: 'blur'
}
],
fixed: false,
block: true,
width: 100
}
]
}

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

@ -40,6 +40,22 @@ export default [
}
}
},
{
key: 'miniName',
title: '小程序名称',
type: 'radio',
rule: [
{
required: true,
message: '请输入小程序名称',
trigger: 'blur'
}
],
display: ['formA', 'formU', 'table', 'model'],
fixed: false,
block: true,
width: 120
},
{
key: 'appId',
title: 'appId',

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

@ -1,20 +0,0 @@
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
}
]

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

@ -14,9 +14,9 @@ export default [
fixed: false,
block: true,
format: (cellValue, index) => {
if (cellValue === 0) {
if (cellValue === '0') {
return '下架'
} else if (cellValue === 1) {
} else if (cellValue === '1') {
return '上架'
} else {
return '未知'

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

@ -69,6 +69,13 @@ export default {
case 'decimal': // 数字格式化
return Number(rowData[column.key].toFixed(column.num))
break
case 'address': // 地址组合
let address =
rowData[column.provinceKey] +
rowData[column.cityKey] +
rowData[column.countyKey]
return address
break
default:
return column.format(rowData[column.key])
}

8
epmet-oper-web/src/views/components/CForm.vue

@ -107,10 +107,10 @@
<el-input-number v-else-if="column.type === 'counter'"
v-show="column.showFlag==='1' ? column.show : true"
v-model="model[column.key]"
:step="column.option.step?column.option.step:0"
:min="column.option.min?column.option.min:0"
:max="column.option.max?column.option.max:100"
:precision="column.option.precision?column.option.precision:0"
:step="column.option&&column.option.step?column.option.step:1"
:min="column.option&&column.option.min?column.option.min:0"
:max="column.option&&column.option.max?column.option.max:100"
:precision="column.option&&column.option.precision?column.option.precision:0"
:disabled="column.disabled?column.disabled:false"
:readonly="column.readonly?column.readonly:false"
:style="{width:column.itemWidth?column.itemWidth:itemWidth}" />

151
epmet-oper-web/src/views/modules/customer/customize/ConfigEdit.vue

@ -9,44 +9,82 @@
:rules="dataRule"
ref="dataForm"
:label-width="'120px'">
<el-form-item label="功能名称"
prop="functionName">
<el-input class="item_width_1"
v-model="dataForm.functionName"
placeholder="功能名称"></el-input>
</el-form-item>
<el-form-item prop="iconLargeImg"
label="大图标">
<el-upload class="item_width_1 avatar-uploader"
:action="uploadUlr"
:show-file-list="false"
:on-success="function (res, file) { return handleImgSuccess(res, file, 'large')}"
:before-upload="beforeImgUpload">
<img v-if="dataForm.iconLargeImg"
:src="dataForm.iconLargeImg"
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-form-item prop="iconSmallImg"
label="小图标">
<el-upload class="item_width_1 avatar-uploader"
:action="uploadUlr"
:show-file-list="false"
:on-success="function (res, file) { return handleImgSuccess(res, file, 'small')}"
:before-upload="beforeImgUpload">
<img v-if="dataForm.iconSmallImg"
:src="dataForm.iconSmallImg"
style="width:70px;height:70px"
class="function-icon">
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<div style="margin-top:20px">
<el-form-item label="默认功能名称"
prop="customizedName">
<div class="item_width_1">
<span>{{dataForm.customizedName}}</span></div>
</el-form-item>
<el-form-item label="功能名称"
prop="functionName">
<el-input class="item_width_1"
v-model="dataForm.functionName"
placeholder="功能名称"></el-input>
</el-form-item>
</div>
<div style="margin-top:20px">
<el-form-item prop="defaultLargeImg"
label="默认大图标">
<div class="item_width_1">
<img :src="dataForm.defaultLargeImg"
style="width:70px;height:70px"
class="function-icon">
</div>
</el-form-item>
<el-form-item prop="iconLargeImg"
label="大图标">
<el-upload class="item_width_1 avatar-uploader"
:action="uploadUlr"
:show-file-list="false"
:on-success="function (res, file) { return handleImgSuccess(res, file, 'large')}"
:before-upload="beforeImgUpload">
<img v-if="dataForm.iconLargeImg"
:src="dataForm.iconLargeImg"
style="width:70px;height:70px"
class="function-icon">
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
<el-button class="btn_reset"
type="primary"
size="mini"
@click="resetLargeImg">恢复默认</el-button>
</el-upload>
</el-form-item>
</div>
<div style="margin-top:10px">
<el-form-item prop="defaultSmallImg"
label="默认小图标">
<div class="item_width_1">
<img :src="dataForm.defaultSmallImg"
style="width:70px;height:70px"
class="function-icon">
</div>
</el-form-item>
<el-form-item prop="iconSmallImg"
label="小图标">
<el-upload class="item_width_1 avatar-uploader"
:action="uploadUlr"
:show-file-list="false"
:on-success="function (res, file) { return handleImgSuccess(res, file, 'small')}"
:before-upload="beforeImgUpload">
<img v-if="dataForm.iconSmallImg"
:src="dataForm.iconSmallImg"
style="width:70px;height:70px"
class="function-icon">
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
<el-button class="btn_reset"
type="primary"
size="mini"
@click="resetSmallImg">恢复默认</el-button>
</el-upload>
</el-form-item>
</div>
</el-form>
<template slot="footer">
@ -67,9 +105,12 @@ export default {
dataForm: {
customerId: '',
functionId: '',
functionName: '',
iconLargeImg: '',
iconSmallImg: ''
customizedName: '', //
functionName: '', //
defaultLargeImg: '', //
iconLargeImg: '', //
defaultSmallImg: '', //
iconSmallImg: ''//
},
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/function/upload'
@ -105,6 +146,15 @@ export default {
})
},
//
resetLargeImg () {
this.dataForm.iconLargeImg = this.dataForm.defaultLargeImg
},
//
resetSmallImg () {
this.dataForm.iconSmallImg = this.dataForm.defaultSmallImg
},
//
handleImgSuccess (res, file, type) {
if (res.code === 0 && res.msg === 'success') {
@ -137,9 +187,16 @@ export default {
if (!valid) {
this.$message.error('表单验证失败!')
} else {
console.log(this.dataForm)
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/updatecustomerfunction'
// const url = '/oper/customize/customerfunctiondetail/updatecustomerfunction'
if (this.dataForm.functionName.length > 5) {
this.$message.warning('功能名称长度不能大于5个字!')
return false
} else if (this.dataForm.functionName.length < 2) {
this.$message.warning('功能名称长度不能小于2个字!')
return false
}
// console.log(this.dataForm)
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/updatecustomerfunction'
const url = '/oper/customize/customerfunctiondetail/updatecustomerfunction'
window.app.ajax.post(url, this.dataForm,
(data, rspMsg) => {
this.$message({
@ -169,7 +226,7 @@ export default {
width: 28px;
}
.item_width_1 {
width: 300px;
width: 200px;
}
.item_width_2 {
width: 700px;
@ -177,4 +234,8 @@ export default {
.block {
display: block;
}
.btn_reset {
vertical-align: bottom;
margin-left: 10px;
}
</style>

130
epmet-oper-web/src/views/modules/customer/customize/ConfigItem.vue

@ -3,7 +3,11 @@
<div style=" position: relative;">
<div class="div_btn">
<el-button type="default"
size="mini"
@click="diaCancel">取消返回</el-button>
<el-button type="primary"
size="mini"
@click="setDomainName">设置业务域名</el-button>
<span style="margin-left:20px">{{customerName}}</span>
@ -40,13 +44,13 @@
header-align="center"
align="center"
width="150"
prop="customizedName">
prop="functionName">
</el-table-column>
<el-table-column label="功能说明"
header-align="center"
align="center"
prop="customizedName">
prop="functionExplain">
</el-table-column>
@ -54,7 +58,7 @@
header-align="center"
align="center"
width="150"
prop="customizedName">
prop="iconLargeImg">
<template slot-scope="scope">
<el-image v-if="scope.row.iconLargeImg"
style="width: 50px; height: 50px;text-align: center;"
@ -74,7 +78,7 @@
header-align="center"
align="center"
width="110"
prop="customizedName">
prop="iconSmallImg">
<template slot-scope="scope">
<el-image v-if="scope.row.iconSmallImg"
style="width: 50px; height: 50px;text-align: center;"
@ -102,7 +106,7 @@
header-align="center"
align="center"
class="operate"
width="150">
width="50">
<template slot-scope="scope">
<el-button type="text"
@ -120,19 +124,19 @@
width="200">
<template slot-scope="scope">
<el-button v-if="scope.row.shoppingStatus==='0'"
<el-button v-if="scope.row.shoppingStatus==0"
size="mini"
class="btn_putaway"
type="primary"
@click.stop="upOrDown(scope.row.functionId, '1')">上架</el-button>
<el-button v-if="scope.row.shoppingStatus==='1'"
<el-button v-if="scope.row.shoppingStatus===1"
size="mini"
class="btn_putaway"
type="primary"
@click.stop="upOrDown(scope.row.functionId, '0')">下架</el-button>
<el-button size="mini"
type="primary"
@click.stop="editShow( scope.row)">修改</el-button>
@click.stop="editShow( scope.$index)">修改</el-button>
<!-- <el-button size="mini"
type="primary"
@click.stop="moveUp( scope.$index)">上移</el-button> -->
@ -147,7 +151,6 @@
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.8)"
:row-style="{height:'30px'}"
:cell-style="{padding:'5px'}"
style="width: 100%;margin-top:10px"
:height="tableHeight2"
ref="ref_customer_table">
@ -182,7 +185,7 @@
<el-button size="mini"
class="btn_putaway"
type="primary"
@click.stop="addFunction(scope.row.functionId)">采集</el-button>
@click.stop="addFunction(scope.row)">采集</el-button>
</template>
</el-table-column>
@ -196,22 +199,18 @@
@ok="upOrDownDiaOk">
<div style="text-align:center;margin-top:40px">
<el-input type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
:rows="3"
:autosize="{ minRows: 4, maxRows: 7}"
:rows="5"
resize="none"
style="width:500px"
placeholder='请输入理由'
v-model="upOrDownDia.reason">
v-model="upOrDownForm.reason">
</el-input>
<div class="el-upload__tip"
style="margin-top:20px">灰度的百分比 1 ~ 100 的整数控制发布的节奏避免一上线就影响到所有的用户</div>
</div>
</c-dialog>
<config-edit ref="ref_config_edit"
@ok="editDiaOK"
@cancel="editDiaCancel">
@editDiaOK="editDiaOK">
</config-edit>
@ -253,7 +252,8 @@ export default {
functionId: '',
shoppingStatus: '',
reason: ''
}
},
optionType: '' // 1 / 2
}
},
@ -265,10 +265,10 @@ export default {
},
computed: {
tableHeight1 () {
return (this.clientHeight - 220) / 2
return (this.clientHeight - 220) / 2 + 50
},
tableHeight2 () {
return (this.clientHeight - 220) / 2
return (this.clientHeight - 220) / 2 - 50
},
...mapGetters(['clientHeight']),
dataRule () {
@ -297,6 +297,24 @@ export default {
this.customerName = customerName
this.loadTableData()
},
//
setDomainName () {
this.startLoading()
let params = {
customerId: this.customerId
}
const url = '/oper/customize/functioncustomized/customerdomainname'
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/functioncustomized/customerdomainname'
window.app.ajax.post(url, params,
(data, rspMsg) => {
this.endLoading()
this.$message.success('设置成功')
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
//
loadTableData () {
@ -304,8 +322,8 @@ export default {
let params = {
customerId: this.customerId
}
// const url = '/oper/customize/customerfunctiondetail/customerfunctionlist'
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/customerfunctionlist'
const url = '/oper/customize/customerfunctiondetail/customerfunctionlist'
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/customerfunctionlist'
window.app.ajax.post(url, params,
(data, rspMsg) => {
this.$nextTick(() => {
@ -313,7 +331,7 @@ export default {
this.functionList = data.functionList
this.customizedList.forEach(element => {
element.shoppingStatusShow = element.shoppingStatus === '0' ? element.shoppingStatusShow = '下架' : '上架'
element.shoppingStatusShow = element.shoppingStatus === 0 ? element.shoppingStatusShow = '下架' : '上架'
})
})
},
@ -324,9 +342,10 @@ export default {
this.loading = false
},
//
// /
upOrDown (functionId, shoppingStatus) {
this.upOrDownDia.title = shoppingStatus === '0' ? '下架原因' : '上架原因'
this.optionType = '1'
this.upOrDownDia.title = shoppingStatus === 0 ? '下架原因' : '上架原因'
this.upOrDownForm = {
customerId: this.customerId,
functionId: functionId,
@ -340,14 +359,22 @@ export default {
this.upOrDownDia.visible = false
},
upOrDownDiaOk () {
this.startLoading()
this.upOrDownForm.reason = this.upOrDownForm.reason
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/updateshoppingstatus'
let url = ''
// const url = '/oper/customize/customerfunctiondetail/updateshoppingstatus'
if (this.optionType === '1') {
// url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/updateshoppingstatus'
url = '/oper/customize/customerfunctiondetail/updateshoppingstatus'
} else {
// url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/customerfunctioncollect'
url = '/oper/customize/customerfunctiondetail/customerfunctioncollect'
}
this.startLoading()
window.app.ajax.post(url, this.upOrDownForm,
(data, rspMsg) => {
this.$message.success('操作成功')
this.upOrDownDia.visible = false
this.loadTableData()
},
(rspMsg, data) => {
this.$message.error(rspMsg)
@ -355,19 +382,23 @@ export default {
this.endLoading()
},
//
editShow (row) {
this.$refs['ref_config_edit'].init(row)
editShow (index) {
this.$refs['ref_config_edit'].init(this.customizedList[index])
},
editDiaOK () {
this.loadTableData()
},
editDiaCancel () {
},
//
addFunction (functionId) {
addFunction (row) {
this.optionType = '2'
this.upOrDownDia.title = '采集原因'
this.upOrDownForm = {
customerId: row.customerId,
functionId: row.functionId,
reason: ''
}
this.upOrDownDia.visible = true
},
//
@ -401,8 +432,8 @@ export default {
//
moveUp (index) {
console.log(index)
if (index > 0) {
console.log(this.customizedList)
this.startLoading()
let resultList = []
let one = {}
@ -426,19 +457,20 @@ export default {
obj.displayOrder = i
resultList.push(obj)
}
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/updatedisplayorder'
// const url = '/oper/customize/customerfunctiondetail/updatedisplayorder'
window.app.ajax.post(url, resultList,
(data, rspMsg) => {
// this.$message.success('')
},
(rspMsg, data) => {
this.$message.error(rspMsg)
})
this.endLoading()
}
console.log(resultList)
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/customerfunctiondetail/updatedisplayorder'
// const url = '/oper/customize/customerfunctiondetail/updatedisplayorder'
// window.app.ajax.post(url, resultList,
// (data, rspMsg) => {
// // this.$message.success('')
// this.loadTableData()
// },
// (rspMsg, data) => {
// this.$message.error(rspMsg)
// })
this.endLoading()
} else {
this.$message.warning('无法上移')

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

@ -0,0 +1,135 @@
<template>
<div>
<c-dialog :title="'修改配置信息'"
:visible="diaVisible"
@ok="save"
@cancel="diaCancel">
<el-card shadow="never"
class="aui-card--fill">
<c-form ref="ref_form"
keyword="ConfigForm"
:labelWidth="150"
:itemWidth="'300px'"
:method="'U'"
:option-data="optionData"></c-form>
</el-card>
</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
let loading //
export default {
data () {
return {
diaVisible: false,
customerId: '',//
formData: {},
optionData: {
}
}
},
components: {
CForm, CDialog
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 50 - 400
},
...mapGetters(['clientHeight']),
dataRule () {
return {
logo: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
methods: {
// eslint-disable-next-line
initData (row) {
this.diaVisible = true
this.customerId = row.customerId
this.$nextTick(() => {
this.loadData()
})
},
loadData () {
this.startLoading()
let url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/crm/customer/getcustomerparameter'
// let url='/oper/crm/customer/getcustomerparameter'
//
let _data = this.$refs['ref_form'].model
window.app.ajax.post(url, _data,
(data, rspMsg) => {
this.endLoading()
this.formData = data
this.$refs['ref_form'].assign(data)
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
},
save () {
this.$refs['ref_form'].validate((valid) => {
if (valid) {
this.startLoading()
let url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/crm/customer/updatecustomerparameter'
// let url='/oper/crm/customer/updatecustomerparameter'
//
let _data = this.$refs['ref_form'].model
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>

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

@ -0,0 +1,158 @@
<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()">
<el-form-item>
<el-input v-model="tableParams.customerName"
placeholder="组织名称">
</el-input>
</el-form-item>
<el-form-item>
<el-button @click="loadData()">查询</el-button>
</el-form-item>
</el-form>
<c-table column-type=""
ref="table"
:url="tableUrl"
:params="tableParams"
keyword="CustomerList"
:operations="operations"
:tableHeight="tableHeight"
:operationWidth="80"
@config="config"
@edit="edit">
</c-table>
</div>
</el-card>
<edit-form ref="ref_edit_form"
@refresh="loadData"></edit-form>
<config-form ref="ref_config_form"
@refresh="loadData"></config-form>
</div>
</template>
<script>
import CTable from '@c/CTable'
import EditForm from './EditForm'
import ConfigForm from './ConfigForm'
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading //
export default {
data () {
return {
//
tableUrl: '/oper/crm/customer/customerlist',
// tableUrl: 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/crm/customer/customerlist',
tableParams: {
customerName: ''
},
//
operations: [
{
lable: '修改', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'edit', //
isShow: (row) => {
return true
}
},
{
lable: '配置', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'config', //
isShow: (row) => {
return true
}
}
],
//
tableData: [
]
}
},
components: {
CTable, EditForm, ConfigForm
},
activated () {
this.$nextTick(() => {
this.$refs.table.doLayout() //
})
},
mounted () {
// eslint-disable-next-line
this.loadData()
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 70
},
...mapGetters(['clientHeight', 'env'])
},
methods: {
//
loadData () {
this.$refs.table.loadData()
},
//
edit (row) {
this.$refs['ref_edit_form'].initData(row)
},
//
config (row) {
this.$refs['ref_config_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>

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

@ -0,0 +1,173 @@
<template>
<div>
<c-dialog :title="'修改客户信息'"
:visible="diaVisible"
:width="40"
@ok="save"
@cancel="diaCancel">
<el-card shadow="never"
class="aui-card--fill">
<c-form ref="ref_form"
keyword="CustomerList"
:itemWidth="'300px'"
:method="'U'"
:option-data="optionData"></c-form>
<el-form :inline="true"
:model="formData2"
:rules="dataRule"
ref="ref_form_2"
style="margin:0 auto;width:860px"
:label-width="'100px'">
<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="formData2.logo"
:src="formData2.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-form>
</el-card>
</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
let loading //
export default {
data () {
return {
diaVisible: false,
formData: {},//
formData2: {
logo: ''
},
optionData: {
},
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/function/upload',
}
},
components: {
CForm, CDialog
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 50 - 400
},
...mapGetters(['clientHeight']),
dataRule () {
return {
logo: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
methods: {
// eslint-disable-next-line
initData (row) {
this.diaVisible = true
this.$nextTick(() => {
this.formData = row
this.formData2.logo = row.logo
this.$refs['ref_form'].assign(row)
})
},
// logo
handleImgSuccess (res, file) {
if (res.code === 0 && res.msg === 'success') {
this.formData2.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
},
save () {
this.$refs['ref_form'].validate((valid) => {
if (valid) {
if (!this.formData2.logo || this.formData2.logo === '') {
this.$message.error('请上传Logo!')
return false
}
this.startLoading()
// let url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/crm/customer/updatecustomer'
let url = '/oper/crm/customer/updatecustomer'
//
let _data = this.$refs['ref_form'].model
_data.logo = this.formData2.logo
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>

525
epmet-oper-web/src/views/modules/customer/miniProAgent/BasicInfo.vue

@ -1,94 +1,124 @@
<template>
<div>
<c-dialog :showFooter='false'
:title="'基础信息'"
<c-dialog :title="'基础信息'"
:isNest="false"
:visible="diaVisible"
:dialogHeight="1.1"
:width="70"
@cancel="diaCancel"
@ok="submitCode">
@ok="setDomains">
<el-form :inline="true"
:model="formData"
class="form"
label-width="170px">
<el-form-item label="request 合法域名">
<div v-for="(item, index) in formData.requestDomain"
:key="index">
<el-input style="width:300px;display:block;margin-bottom:10px; float:left"
placeholder='请输入request 合法域名'
v-model="formData.requestDomain[index]"> </el-input>
<el-button v-if="index===0"
size="mini"
class="btn_serve"
type="primary"
icon="el-icon-plus"
@click="addRequest('requestDomain')"
circle></el-button>
<el-button v-else
size="mini"
class="btn_serve"
type="danger"
icon="el-icon-minus"
@click="delRequest(index,'requestDomain')"
circle></el-button>
</div>
</el-form-item>
<el-form-item label="socket 合法域名">
<div v-for="(item, index) in formData.wsRequestDomain"
:key="index">
<el-input style="width:300px;display:block;margin-bottom:10px; float:left"
placeholder='请输入socket 合法域名'
v-model="formData.wsRequestDomain[index]"> </el-input>
<el-button v-if="index===0"
size="mini"
class="btn_serve"
type="primary"
icon="el-icon-plus"
@click="addRequest('wsRequestDomain')"
circle></el-button>
<el-button v-else
size="mini"
type="danger"
class="btn_serve"
icon="el-icon-minus"
@click="delRequest(index,'wsRequestDomain')"
circle></el-button>
</div>
</el-form-item>
<el-form-item label="uploadFile 合法域名">
<div v-for="(item, index) in formData.uploadDomain"
:key="index">
<el-input style="width:300px;display:block;margin-bottom:10px; float:left"
placeholder='请输入uploadFile 合法域名'
v-model="formData.uploadDomain[index]"> </el-input>
<el-tabs v-model="activeName"
@tab-click="tabClick"
class="el-tabs">
<el-button v-if="index===0"
size="mini"
class="btn_serve"
type="primary"
icon="el-icon-plus"
@click="addRequest('uploadDomain')"
circle></el-button>
<el-button v-else
size="mini"
type="danger"
class="btn_serve"
icon="el-icon-minus"
@click="delRequest(index,'uploadDomain')"
circle></el-button>
<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>
</div>
</el-tab-pane>
</el-form-item>
<el-form-item label="downloadFile 合法域名">
<div v-for="(item, index) in formData.downloadDomain"
:key="index">
<el-input style="width:300px;display:block;margin-bottom:10px; float:left"
placeholder='请输入downloadFile 合法域名'
v-model="formData.downloadDomain[index]"> </el-input>
<el-button v-if="index===0"
size="mini"
class="btn_serve"
type="primary"
icon="el-icon-plus"
@click="addRequest('downloadDomain')"
circle></el-button>
<el-button v-else
size="mini"
type="danger"
class="btn_serve"
icon="el-icon-minus"
@click="delRequest(index,'downloadDomain')"
circle></el-button>
</div>
</el-form-item>
</el-form>
</el-tabs>
</c-dialog>
</div>
@ -104,39 +134,14 @@ export default {
data () {
return {
loading: false,
feedbackShow: false, //
codeId: '', // id
customerId: '', // id
clientType: '', //
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
formData: {
requestDomain: [], // request
wsRequestDomain: [], // socket
uploadDomain: [], // uploadFile
downloadDomain: [] // downloadFile
}
}
},
@ -152,272 +157,94 @@ export default {
...mapGetters(['clientHeight'])
},
methods: {
initData (codeId, feedbackShow) {
this.codeId = codeId
this.feedbackShow = feedbackShow
initData (customerId, clientType) {
this.clientType = clientType
this.customerId = customerId
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'
})
this.getDomain()
},
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
}
// Domain
getDomain () {
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,
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/code/getdomain'
const url = 'https://epmet-cloud.elinkservice.cn/api/third/code/getdomain'
const param = {
customerId: this.customerId,
clientType: this.clientType
}
window.app.ajax.post(url, param,
(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)
this.formData = data
if (this.formData.requestDomain.length === 0) {
this.formData.requestDomain.push('')
}
if (this.formData.wsRequestDomain.length === 0) {
this.formData.wsRequestDomain.push('')
}
if (this.formData.uploadDomain.length === 0) {
this.formData.uploadDomain.push('')
}
if (this.formData.downloadDomain.length === 0) {
this.formData.downloadDomain.push('')
}
this.endLoading()
},
(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)
addRequest (domainType) {
this.formData[domainType].push('')
},
delRequest (index, domainType) {
this.formData[domainType].splice(index, 1)
},
this.upload_name = 'file_img[]'
let formData = new FormData()
setDomains () {
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)
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/setting/modifydomain'
const url = 'https://epmet-cloud.elinkservice.cn/api/third/setting/modifydomain'
let requestDomain = this.formData.requestDomain.filter(item => item !== '')
let wsRequestDomain = this.formData.wsRequestDomain.filter(item => item !== '')
let uploadDomain = this.formData.uploadDomain.filter(item => item !== '')
let downloadDomain = this.formData.downloadDomain.filter(item => item !== '')
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
}
const param = {
customerId: this.customerId,
clientType: this.clientType,
requestDomain: requestDomain,
wsRequestDomain: wsRequestDomain,
uploadDomain: uploadDomain,
downloadDomain: downloadDomain
this.upload_name = 'file_img[]'
let formData = new FormData()
}
console.log(param)
formData.append('type', fileType)
formData.append('media', file)
formData.append('codeId', this.codeId)
this.startLoading()
window.app.ajax.post2(this.dialogImageUrl, formData,
window.app.ajax.post(url, param,
(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)
}
this.$message.success('保存成功')
this.diaVisible = false
},
(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, //
index: 100,
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
@ -445,4 +272,10 @@ export default {
.form {
margin-top: 30px;
}
.btn_serve {
float: left;
margin-top: 4px;
margin-left: 10px;
vertical-align: bottom;
}
</style>

44
epmet-oper-web/src/views/modules/customer/miniProAgent/LowVersion.vue

@ -11,11 +11,20 @@
<div class="mod-demo__demo}">
<el-input v-model="versionSearch"
@input="versionSearchInput"
style="width: 300px"
placeholder="请输入要查询的版本号"></el-input>
<el-table id="out-table"
:height="tableHeight"
v-loading="loading"
element-loading-text="正在加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.8)"
ref="table_category"
:header-cell-style="{color:'#000'}"
:data="tableData"
style="width: 1000px"
style="width: 1000px;margin-top:10px"
border>
<el-table-column label=""
width="35"
@ -23,7 +32,7 @@
<template slot-scope="scope">
<el-radio :label="scope.row.version"
v-model="templateRadio"
@change.native="getRadioRow(scope.$index,scope.row)">&nbsp;</el-radio>
@change.native="getRadioRow(scope.row)">&nbsp;</el-radio>
</template>
</el-table-column>
@ -56,12 +65,15 @@ let loading // 加载动画
export default {
data () {
return {
loading: false,
customerId: '',
clientType: '',
tableData: [],
tableDataAll: [],
templateRadio: '',
nowVersion: '',//
selVersion: '',//
versionSearch: '',//
//
diaVisible: false
@ -73,10 +85,12 @@ export default {
},
mounted () {
},
computed: {
tableHeight () {
return this.clientHeight - 60 - 80 - 80 - 50 - 400
return this.clientHeight * 0.6 - 130
},
...mapGetters(['clientHeight'])
},
props: {},
@ -94,7 +108,7 @@ export default {
//
loadData () {
this.startLoading()
this.loading = true
const url = 'https://epmet-cloud.elinkservice.cn/api/third/pacustomer/getweappsupportversion'
// const url = '/third/pacustomer/getweappsupportversion'
const param = {
@ -103,15 +117,29 @@ export default {
}
window.app.ajax.post(url, param,
(data, rspMsg) => {
this.endLoading()
this.nowVersion = data.newVersion
this.nowVersion = data.newVersion === '' ? '无' : data.newVersion
this.tableData = data.uvInfo
this.tableDataAll = data.uvInfo
},
(rspMsg, data) => {
this.endLoading()
this.$message.error(rspMsg)
})
this.loading = false
},
versionSearchInput (value) {
console.log(value)
if (value !== '') {
let aaa = this.tableData.filter(item => item.version.indexOf(value) != -1)
this.tableData = aaa
} else {
this.tableData = this.tableDataAll
}
},
getRadioRow (row) {
@ -134,6 +162,8 @@ export default {
version: this.selVersion
}
console.log(params)
window.app.ajax.post(url, params,
(data, rspMsg) => {
this.endLoading()

34
epmet-oper-web/src/views/modules/customer/miniProAgent/MiniProList.vue

@ -1,4 +1,4 @@
<!-- 客户小程序管理 -->
<!-- 小程序管理 -->
<template>
<div>
@ -43,12 +43,12 @@
ref="table"
:url="tableUrl"
:params="tableParams"
keyword="MiniProManage"
keyword="MiniProList"
:operations="operations"
:tableHeight="tableHeight"
@versionManage="versionManage"
@setweappsupportversion="setweappsupportversion"
@getaccountbasicinfo="getaccountbasicinfo"
@basicinfo="basicinfo"
@getcategory="getcategory">
</c-table>
@ -107,20 +107,20 @@ export default {
return true
}
},
// {
// lable: '', //
// size: 'mini',
// style: 'margin: 0 6px;',
// type: 'text',
// slot: '',
// plain: false,
// methodName: 'getaccountbasicinfo', //
// isShow: (row) => {
// return true
// }
// },
{
lable: '设置基础库版本', //
lable: '基本信息', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
slot: '',
plain: false,
methodName: 'basicinfo', //
isShow: (row) => {
return true
}
},
{
lable: '基础库版本', //
size: 'mini',
style: 'margin: 0 6px;',
type: 'text',
@ -225,7 +225,7 @@ export default {
},
//
getaccountbasicinfo (row) {
basicinfo (row) {
this.$refs['ref_basic_info'].initData(row.customerId, row.clientType)
},

16
epmet-oper-web/src/views/modules/productConfig/customizeFunction/CustomFun.vue

@ -52,8 +52,7 @@
</el-card>
<edit ref="ref_edit"
@ok="editDiaOK"
@cancel="editDiaCancel">
@editDiaOK="editDiaOK">
</edit>
@ -80,8 +79,8 @@ export default {
fromApp: '' //
},
//
tableUrl: 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/functioncustomized/functioncustomizedlist',
// tableUrl: '/oper/customize/f unctioncustomized/functioncustomizedlist',
// tableUrl: 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/functioncustomized/functioncustomizedlist',
tableUrl: '/oper/customize/functioncustomized/functioncustomizedlist',
operations: [
{
@ -161,7 +160,6 @@ export default {
},
//
loadTableData () {
this.tableParams.source = this.env
this.$nextTick(() => {
this.$refs.table.loadData() //
})
@ -179,11 +177,11 @@ export default {
domainName: '',
fromApp: 'resi'
}
this.$refs['ref_edit'].init(row)
this.$refs['ref_edit'].init(row, 'A')
},
//
editShow (row) {
this.$refs['ref_edit'].init(row)
this.$refs['ref_edit'].init(row, 'U')
},
//
@ -193,8 +191,8 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/functioncustomized/deletefunctioncustomized'
// const url = '/oper/customize/functioncustomized/deletefunctioncustomized'
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/functioncustomized/deletefunctioncustomized'
const url = '/oper/customize/functioncustomized/deletefunctioncustomized'
const param = {
functionId: row.functionId
}

110
epmet-oper-web/src/views/modules/productConfig/customizeFunction/Edit.vue

@ -10,9 +10,9 @@
ref="dataForm"
:label-width="'120px'">
<el-form-item label="功能名称"
prop="customizedName">
prop="functionName">
<el-input class="item_width_1"
v-model="dataForm.customizedName"
v-model="dataForm.functionName"
placeholder="功能名称"></el-input>
</el-form-item>
<el-form-item label="来源"
@ -81,6 +81,33 @@
</el-form-item>
<el-form-item class="block"
label="业务域名">
<div v-for="(item, index) in dataForm.domainNameList"
:key="index">
<el-input style="width:300px;display:block;margin-bottom:10px; float:left"
placeholder='请输入uploadFile 合法域名'
v-model="dataForm.domainNameList[index]"> </el-input>
<el-button v-if="index===0"
size="mini"
class="btn_serve"
type="primary"
icon="el-icon-plus"
@click="addRequest()"
circle></el-button>
<el-button v-else
size="mini"
type="danger"
class="btn_serve"
icon="el-icon-minus"
@click="delRequest(index)"
circle></el-button>
</div>
</el-form-item>
<!-- <el-form-item class="block"
label="业务域名"
prop="domainName">
<el-input class="item_width_2"
@ -89,7 +116,7 @@
type="textarea"></el-input>
</el-form-item>
<div slot="tip"
class="el-upload__tip">可写多个;分隔</div>
class="el-upload__tip">可写多个;分隔</div> -->
<el-form-item class="block"
label="功能说明"
prop="functionExplain">
@ -109,14 +136,17 @@
</template>
<script>
import { Loading } from 'element-ui' // Loading
let loading//
export default {
data () {
return {
visible: false,
type: '', // A/U
dataForm: {
functionId: '',
functionName: '',
customizedName: '',
iconLargeImg: '',
iconSmallImg: '',
@ -124,6 +154,7 @@ export default {
functionExplain: '',
targetLink: '',
domainName: '',
domainNameList: [],
fromApp: 'resi'
},
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/function/upload',
@ -153,7 +184,7 @@ export default {
computed: {
dataRule () {
return {
customizedName: [
functionName: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
iconLargeImg: [
@ -178,15 +209,27 @@ export default {
}
},
methods: {
init (dataForm) {
console.log(dataForm)
init (dataForm, type) {
this.type = type
this.visible = true
// this.dataForm=dataForm
this.$nextTick(() => {
dataForm.functionName = dataForm.customizedName
if (dataForm.domainName === '') {
dataForm.domainNameList.push('')
} else {
dataForm.domainNameList = dataForm.domainName.split(';')
}
Object.assign(this.dataForm, dataForm)
})
},
addRequest () {
this.dataForm.domainNameList.push('')
},
delRequest (index) {
this.dataForm.domainNameList.splice(index, 1)
},
//
handleImgSuccess (res, file, type) {
@ -220,17 +263,40 @@ export default {
if (!valid) {
this.$message.error('表单验证失败!')
} else {
console.log(this.dataForm)
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/oper/customize/functioncustomized/updatecustomized'
// const url = '/oper/customize/functioncustomized/updatecustomized'
if (this.dataForm.functionName.length > 5) {
this.$message.warning('功能名称长度不能大于5个字!')
return false
} else if (this.dataForm.functionName.length < 2) {
this.$message.warning('功能名称长度不能小于2个字!')
return false
}
// eslint-disable-next-line
// debugger
let domainName = ''
for (let i = 0; i < this.dataForm.domainNameList.length; i++) {
if (this.dataForm.domainNameList[i] !== '') {
domainName = domainName + this.dataForm.domainNameList[i] + ';'
}
}
domainName = domainName.substring(0, domainName.length - 1)
this.dataForm.domainName = domainName
let url = ''
if (this.type === 'U') {
url = '/oper/customize/functioncustomized/updatecustomized'
} else {
url = '/oper/customize/functioncustomized/savefunctioncustomized'
this.dataForm.functionId = ''
}
this.dataForm.functionGroup = '1'
window.app.ajax.post(url, this.dataForm,
(data, rspMsg) => {
this.$message({
type: 'success',
message: '保存成功'
})
this.visible = false
this.$emit('editDiaOK')
this.visible = false
},
(rspMsg, data) => {
this.endLoading()
@ -241,6 +307,22 @@ export default {
},
handleClose () {
this.visible = false
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
}
@ -260,4 +342,10 @@ export default {
.block {
display: block;
}
.btn_serve {
float: left;
margin-top: 4px;
margin-left: 10px;
vertical-align: bottom;
}
</style>

123
epmet-oper-web/src/views/modules/productConfig/homeComponent/functionconfiguration.vue

@ -1,54 +1,97 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<el-card shadow="never"
class="aui-card--fill">
<div class="mod-/oper/customize__homecomponent}">
<el-form :inline="true">
<el-form-item>
<el-input v-model="ruleForm.name" placeholder="请输入客户名称" clearable="true"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm(ruleForm)">查询</el-button>
</el-form-item>
<el-form-item>
<el-input v-model="ruleForm.name"
placeholder="请输入客户名称"
clearable="true"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary"
@click="submitForm(ruleForm)">查询</el-button>
</el-form-item>
</el-form>
<el-table :data="customerList" border style="width: 100%;">
<el-table-column label="客户名称" header-align="center" align="center" prop="customerName"></el-table-column>
<el-table-column label="logo" header-align="center" align="center" prop="logo">
<template slot-scope="scope">
<el-image style="width: 50px; height: 50px" :src="scope.row.logo" @click="addSrcList(scope.row.logo)" :preview-src-list="srcList"></el-image>
</template>
<el-table :data="customerList"
border
style="width: 100%;">
<el-table-column label="客户名称"
header-align="center"
align="center"
prop="customerName"></el-table-column>
<el-table-column label="logo"
header-align="center"
align="center"
prop="logo">
<template slot-scope="scope">
<el-image style="width: 50px; height: 50px"
:src="scope.row.logo"
@click="addSrcList(scope.row.logo)"
:preview-src-list="srcList"></el-image>
</template>
</el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<el-table-column :label="$t('handle')"
fixed="right"
header-align="center"
align="center"
width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="centerDialogVisible = true,customerize(scope.row.customerId)">功能配置</el-button>
<el-button type="text"
size="small"
@click="centerDialogVisible = true,customerize(scope.row.customerId)">功能配置</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="pageNo"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<el-pagination :current-page="pageNo"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
</div>
<el-dialog :title="diaName" size="small" :visible.sync="centerDialogVisible">
<p>默认功能</p>
<el-table :data="defaultFunctionList" border style="width: 100%;" ref="defaultFunction" @selection-change="handleSelectionChangeDefault">
<el-table-column type="selection" header-align="center" align="center" checked="true" width="50"></el-table-column>
<el-table-column label="功能名称" header-align="center" align="center" prop="functionName"></el-table-column>
</el-table>
<p>客户定制化</p>
<el-table :data="customizedFunctionList" border style="width: 100%;" ref="customizeFunction" @selection-change="handleSelectionChangeCustomize">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column header-align="center" align="center" prop="functionName"></el-table-column>
</el-table>
<div style="text-align: center">
<el-button @click="centerDialogVisible = false">关闭</el-button>
<el-button type="primary" @click="saveConfig">保存</el-button>
</div>
</el-dialog>
<el-dialog :title="diaName"
size="small"
:visible.sync="centerDialogVisible">
<p>默认功能</p>
<el-table :data="defaultFunctionList"
border
style="width: 100%;"
ref="defaultFunction"
@selection-change="handleSelectionChangeDefault">
<el-table-column type="selection"
header-align="center"
align="center"
checked="true"
width="50"></el-table-column>
<el-table-column label="功能名称"
header-align="center"
align="center"
prop="functionName"></el-table-column>
</el-table>
<p>客户定制化</p>
<el-table :data="customizedFunctionList"
border
style="width: 100%;"
ref="customizeFunction"
@selection-change="handleSelectionChangeCustomize">
<el-table-column type="selection"
header-align="center"
align="center"
width="50"></el-table-column>
<el-table-column header-align="center"
align="center"
prop="functionName"></el-table-column>
</el-table>
<div style="text-align: center">
<el-button @click="centerDialogVisible = false">关闭</el-button>
<el-button type="primary"
@click="saveConfig">保存</el-button>
</div>
</el-dialog>
</el-card>
</template>

Loading…
Cancel
Save