Commit 72e84cce by liuchenxi

update: 会员分组

parent c21a933a
......@@ -24,3 +24,4 @@ export const aliasNames = [
{ name: '普通会员', title: '会员历史累计消费,消费次数等于1' },
{ name: '未消费会员', title: '会员历史累计消费,消费次数等于0' }
];
......@@ -55,7 +55,7 @@ export default {
methods: {
tagItemImport() {
if(!this.filesData) return this.$message.warning('请上传文件');
this.$emit('update:visiable', false);
// this.$emit('update:visiable', false);
this.$emit('submit', this.filesData, this.$refs.upload);
},
// 关闭导入会员的弹窗
......
......@@ -318,10 +318,14 @@ export default {
this.importPop.excelData = [];
this.importPop.excelHeader = [];
this.importPop.optType = false;
this.importPop.isShow = false;
},
// 导入数据到服务端
tagItemImport(fileData, uploadVm) {
// 该标识用来防止多次被点击
if (this.flag) return;
this.flag = true;
uploadVm.value = '';
this.refreshTag.push({
tagItemIndex: this.importPop.tagItemIndex,
......@@ -338,6 +342,7 @@ export default {
if (errorCode === 1) {
this.closeImportPop();
this.$toTaskCenter(res.data.result);
this.flag = false;
} else {
errMsg.errorMsg(res.data);
}
......@@ -356,9 +361,12 @@ export default {
this.importBatchPop.excelData = [];
this.importBatchPop.excelHeader = [];
this.importBatchPop.optType = false;
this.importBatchPop.isShow = false;
},
// 导入数据到服务端
tagItemBatchImport(fileData, uploadVm) {
if (this.flag) return;
this.flag = true;
uploadVm.value = '';
let { optType } = this.importBatchPop;
const param = new FormData();
......@@ -372,6 +380,7 @@ export default {
// 关闭上传的弹窗
this.closeImportBatchPop();
this.$toTaskCenter(res.data.result);
this.flag = false;
} else {
errMsg.errorMsg(res.data);
}
......
<template>
<div class="card-item">
<div class="left">
<p class="title">{{ title }}</p>
<span class="count" @click="$emit('toDetail', data, index)">
{{ formatCount }}
<span></span>
</span>
</div>
<div class="right">
<i class="iconfont icon-jinzitakehu icon"></i>
</div>
</div>
</template>
<script>
export default {
props: {
title: String,
count: Number,
data: Object,
index: Number
},
computed: {
formatCount() {
return Number(this.count).toLocaleString();
}
}
};
</script>
<style scoped lang="scss">
.card-item {
padding: 12px;
width: 250px;
height: 80px;
box-sizing: border-box;
background: rgba(47, 84, 235, 0.04);
border-radius: 4px;
border: 1px solid rgba(47, 84, 235, 0.16);
display: flex;
justify-content: space-between;
align-items: center;
min-width: 0;
.count {
font-weight: bold;
color: #2f54eb;
font-size: 22px;
white-space: nowrap;
cursor: pointer;
span {
font-size: 14px;
color: #303133;
}
}
.title {
color: #303133;
font-size: 14px;
margin-bottom: 10px;
}
.icon {
font-size: 40px;
color: #2f54eb;
opacity: .14;
}
}
</style>
<template>
<div class="group-list">
<div class="member-group" :class="{'light-group': currentIndex === -1}" @click="handleExpend">
<!-- <div class="member-group" :class="{'light-group': currentIndex === -1}" @click="handleExpend">
<i class="icon-list el-icon-caret-right icon-transform" :class="expendClass"></i>
我的会员分组
<i class="el-icon-plus icon-right icon-list" @click="addGroupDialog = true" :limit-code="$buttonCode.memberTagAddCateGory" v-if="$getButtonLimit($buttonCode.memberTagAddCateGory)"></i>
</div>
</div> -->
<el-collapseTransition>
<ul class="lists" v-show="expendTxt == '展开'">
<!-- <el-collapseTransition> -->
<!--我的会员分组-->
<ul class="lists" v-show="activeType == '1'">
<li v-for="(list, i) in lists" :key="i" :class="['member-list', { 'active-li': i == currentIndex }]" @click="handleChangeIndex(i, list)">
<span class="name-txt" :title="list.classifyName" v-show="!list.edit">{{ list.classifyName }}</span>
<el-input style="width: 100px;" size="mini" v-show="list.edit" v-model="list.classifyName" maxLength="10" @keyup.native.enter="modifyName(list)" />
<div class="oper-area" v-if="list.classifyName !== '未分类'">
<i class="iconfont icon-list-oper" :limit-code="$buttonCode.memberTagEditCateGory" v-if="$getButtonLimit($buttonCode.memberTagEditCateGory)" :class="[list.edit ? 'icon-dagou' : 'icon-bianji1']" @click.stop="editGroupName(list)"></i>
<i class="iconfont icon-list-oper" :limit-code="$buttonCode.memberTagDelCateGory" v-if="$getButtonLimit($buttonCode.memberTagDelCateGory)" :class="[list.edit ? 'icon-guanbi1' : 'icon-guanbi']" @click="deleteGroupName(list)"></i>
<div>
<i class="iconfont icon-kehufenzu icon"></i>
<span span class="name-txt" :title="list.classifyName" v-show="!list.edit">{{ list.classifyName }}</span>
<el-input style="width: 100px;" size="mini" v-show="list.edit" v-model="list.classifyName" maxLength="10" @keyup.native.enter="modifyName(list)" />
</div>
<el-popover placement="bottom" trigger="click">
<p class="more" :limit-code="$buttonCode.memberTagEditCateGory" v-if="$getButtonLimit($buttonCode.memberTagEditCateGory)" @click="editGroupName(list)">编辑分类</p>
<p class="more" :limit-code="$buttonCode.memberTagDelCateGory" v-if="$getButtonLimit($buttonCode.memberTagDelCateGory)" @click="deleteGroupName(list)">删除分类</p>
<i slot="reference" class="iconfont icon-gengduo icon"></i>
</el-popover>
</li>
<li @click="addGroupDialog = true" :limit-code="$buttonCode.memberTagAddCateGory" v-if="$getButtonLimit($buttonCode.memberTagAddCateGory)" style="margin-top:10px">
<el-button type="primary" class="ghost-btn add-group">新增分类</el-button>
</li>
</ul>
</el-collapseTransition>
<!-- </el-collapseTransition> -->
<div :class="['member-group', { 'active-item': currentLevelIndex == -1 }]" v-show="hasLevel" @click="handleExpendTag">
<!-- <div :class="['member-group', { 'active-item': currentLevelIndex == -1 }]" v-show="hasLevel" @click="handleExpendTag">
<i class="icon-list el-icon-caret-right icon-transform" :class="expendTagClass"></i>
金字塔会员分层
</div>
</div> -->
<el-collapseTransition>
<ul class="lists" v-show="expendTxtTag == '展开'">
<!-- <el-collapseTransition> -->
<!--金字塔分层-->
<ul class="lists" v-show="activeType == '3'">
<li v-for="(list, i) in groupLists" :key="i" :class="['member-list', { 'active-li': i == currentLevelIndex }]" @click="handleChangeLevel(i, list)">
<el-tooltip class="item" effect="dark" :content="list.aliasName | aliasTips" placement="top-start" :open-delay="300">
<span>{{ list.aliasName }}</span>
</el-tooltip>
<div>
<i class="iconfont icon-kehufenzu icon"></i>
<el-tooltip class="item" effect="dark" :content="list.aliasName | aliasTips" placement="top-start" :open-delay="300">
<span>{{ list.aliasName }}</span>
</el-tooltip>
</div>
</li>
</ul>
</el-collapseTransition>
<!-- </el-collapseTransition> -->
<div class="member-group" :class="{'light-group': currentFixedIndex === -1}" @click="handleExpendFixed">
<!-- <div class="member-group" :class="{'light-group': currentFixedIndex === -1}" @click="handleExpendFixed">
<i class="icon-list el-icon-caret-right icon-transform" :class="expendFixedClass"></i>
固化人群
</div>
</div> -->
<el-collapseTransition>
<ul class="lists" v-show="expendTxtFixed == '展开'">
<!-- <el-collapseTransition> -->
<!--固化人群-->
<ul class="lists" v-show="activeType == '2'">
<li v-for="(list, i) in fixedLists" :key="i" :class="['member-list', { 'active-li': i == currentFixedIndex }]" @click="handleChangeFixed(i, list)">
<span class="name-txt" :title="list.classifyName" v-show="!list.edit">{{ list.classifyName }}</span>
<div>
<i class="iconfont icon-kehufenzu icon"></i>
<span class="name-txt" :title="list.classifyName" v-show="!list.edit">{{ list.classifyName }}</span>
</div>
</li>
</ul>
</el-collapseTransition>
<!-- </el-collapseTransition> -->
<el-dialog :title="title" :visible.sync="addGroupDialog" width="320px" top="30vh" :close-on-click-modal="false">
<div>
......@@ -70,7 +86,9 @@ Vue.component(CollapseTransition.name, CollapseTransition);
export default {
name: 'group-list',
props: {
activeType: String
},
data() {
return {
lists: [],
......@@ -90,7 +108,7 @@ export default {
hasLevel: false,
currentLevelIndex: -2,
groupLists: [],
fixedLists: []
fixedLists: [],
};
},
......@@ -199,12 +217,7 @@ export default {
// 删除操作
this.excludeName(list);
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
.catch(() => {});
},
excludeName(list) {
const param = {
......@@ -341,7 +354,6 @@ export default {
this.expendTxtFixed = this.expendTxtFixed === '展开' ? '收起' : '展开';
this.$emit('second-list', 'showFixedList');
},
//
_hasLevelFeature() {
hasLevelFeature().then(res => {
if (res.errorCode === 1) {
......@@ -364,13 +376,29 @@ export default {
}
return '';
},
},
watch: {
activeType(newVal) {
switch(newVal) {
case '1':
this.handleExpend();
break;
case '2':
this.handleExpendFixed();
break;
case '3':
this.handleExpendTag();
break;
default:
break;
}
}
}
};
</script>
<style lang="scss" scoped>
.group-list {
padding-top: 20px;
.recommend-list {
margin-top: 10px;
padding-left: 37px;
......@@ -420,12 +448,18 @@ export default {
color: #2F54EB;
}
.member-list {
height: 32px;
line-height: 32px;
padding-left: 37px;
height: 40px;
margin: 0 15px;
font-size: 14px;
color: #606266;
cursor: pointer;
border-radius: 4px;
display: flex;
justify-content: space-between;
align-items: center;
.icon {
margin: 0 4px;
}
&:hover {
color: #2F54EB;
.oper-area {
......@@ -438,10 +472,9 @@ export default {
text-overflow: ellipsis;
white-space: nowrap;
width: 100px;
height: 32px;
}
.oper-area {
display: none;
// display: none;
float: right;
margin-right: 10px;
}
......@@ -450,10 +483,10 @@ export default {
color: #606266;
.active-li {
color: #2F54EB;
background-color: #F3F6F9;
background-color: #EBEFFE;
}
li:hover {
background-color: #F3F6F9;
background-color: #EBEFFE;
}
}
......@@ -470,4 +503,15 @@ export default {
transform: rotate(0deg);
}
}
.more {
line-height: 26px;
text-align: center;
cursor: pointer;
&:hover {
color: #2f54eb;
}
}
.add-group {
width: 100%;
}
</style>
<template>
<div>
<div class="flex">
<el-tabs v-model="activeType" class="tabs">
<el-tab-pane label="我的客户分组" name="1"></el-tab-pane>
<el-tab-pane label="固化人群" name="2"></el-tab-pane>
<el-tab-pane label="金字塔客户分组" name="3"></el-tab-pane>
</el-tabs>
</div>
<div class="right-content">
<!-- 左边的会员分组 -->
<div class="left-box">
<group-list @getRecommend="getRecommend" @second-list="getsecondList"></group-list>
<group-list :activeType="activeType" @getRecommend="getRecommend" @second-list="getsecondList"></group-list>
</div>
<!-- 右边的表格 -->
<template v-if="showFixedList">
......@@ -343,19 +350,16 @@
</div>
<div class="right-box" v-show="isTagRecommend">
<div class="common-wrap__opt">
<div class="title">
<i class="el-icon-warning dialog-icon"></i>
<span>
覆盖人数于每日上午8点半进行更新
</span>
</div>
<div class="common-wrap__opt flex-between">
<div class="desc">覆盖人数于每日上午8点半进行更新</div>
<div class="batch-option">
<!-- <el-button type="primary" @click="toAddGroup" class="fr">分层配置</el-button> -->
<el-button type="primary" class="fr ghost-btn" @click="isNew = !isNew">{{ `查看${isNew ? '旧' : '新'}版金字塔会员分层` }}</el-button>
</div>
</div>
<div class="common-wrap__table m-t-20">
<pyramid-group-table v-show="isNew" />
<el-table
v-show="!isNew"
v-loading="loading"
ref="multipleTable"
:data="groupTableData"
......@@ -369,7 +373,7 @@
</el-tooltip>
</template>
</el-table-column>
<el-table-column label="更新时间" prop="latestUpdateTime" min-width="100">
<el-table-column label="最近更新时间" prop="latestUpdateTime" min-width="100">
<template slot-scope="scope">
<p class="h-18">{{ scope.row.latestUpdateTime | formatTimeYMD }}</p>
<p class="h-18">{{ scope.row.latestUpdateTime | formatTimeHMS }}</p>
......@@ -405,7 +409,7 @@
<el-switch :active-value="1" :inactive-value="0" v-model="scope.row.appStatus" active-color="#2F54EB" @change="switchAppStatus(scope.row.appStatus, scope.row)"> </el-switch>
</template>
</el-table-column>
<el-table-column label="操作" width="100" fixed="right" v-if='$getButtonLimit($buttonCode.memberTagGroupLevelDetail)'>
<!-- <el-table-column label="操作" width="100" fixed="right" v-if='$getButtonLimit($buttonCode.memberTagGroupLevelDetail)'>
<template slot-scope="scope">
<router-link
:to="`/memberLevelDetail?memberTagGroupId=${scope.row.memberTagGroupId}&aliasName=${scope.row.groupName}`"
......@@ -415,10 +419,10 @@
详情
</router-link>
</template>
</el-table-column>
</el-table-column> -->
</el-table>
</div>
<div class="block common-wrap__page text-right" v-if="groupTableData.length != 0">
<div class="block common-wrap__page text-right" v-if="groupTableData.length != 0 && !isNew">
<dm-pagination
background
@size-change="handleSizeChange"
......@@ -535,13 +539,15 @@ import {
import GroupList from './group-list';
import RecommendTable from './recommend-table';
import { aliasNames } from '@/config'
import PyramidGroupTable from './pyramid-group-table.vue';
export default {
name: 'memberGroupList',
components: {
GroupList,
RecommendTable,
BatchList
BatchList,
PyramidGroupTable
},
data() {
return {
......@@ -625,6 +631,8 @@ export default {
custom: [1, 1],
isHaoban: ''
},
activeType: '1', // 切换一级tab
isNew: true // 是否新版金字塔分层
};
},
......@@ -831,7 +839,7 @@ export default {
},
// 会员分组二级
getsecondList(list) {
console.log(list);
console.log(12312, list);
this.showFixedList = false
if(list === 'showFixedList') {
this.params.memberTagGroupClassifyId = '';
......@@ -1439,23 +1447,19 @@ export default {
</script>
<style lang="scss">
.common-wrap__opt {
&.flex-between {
display: flex;
align-items: center;
justify-content: space-between;
}
font-size: 0;
.m-r-8 {
margin-right: 8px;
}
.title {
font-size: 14px;
.desc {
font-size: 12px;
width: 270px;
color: #606266;
padding: 5px 10px;
border-radius: 4px;
background-color: #e6f7ff;
border: 1px solid #91d5ff;
.dialog-icon {
font-size: 12px;
color: #2F54EB;
padding-right: 4px;
}
}
}
.btn-foled-all{
......@@ -1606,4 +1610,19 @@ export default {
height: 0 !important;
overflow: hidden;
}
.tabs .el-tabs__nav-wrap::after {
display: none;
}
.tabs .el-tabs__header {
margin-bottom: 0;
}
</style>
<style lang="scss" scoped>
.flex {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
border-bottom: 1px solid #e4e7ed;
}
</style>
......@@ -4,7 +4,7 @@
<div class="right-box">
<div class="memberGroupDetail-wrap__info m-b-20">
<span class="group-name">{{ aliasName }}</span>
<span>( {{ tips }} )</span>
<span v-show="$route.query.type">( {{ setDesc($route.query.type, $route.query.time) }} )</span>
<span class="group-total m-l-20 p-l-20">
覆盖人数
<span>{{ separator(total) }}</span>
......@@ -431,7 +431,6 @@ export default {
* 排序
*/
sortChange({ column, prop, order }) {
console.log(prop, order);
this.sortFiled = prop;
this.order = order == 'descending' ? 'desc' : 'asc';
this.getGroupDetail();
......@@ -447,7 +446,6 @@ export default {
};
getRequest('/member-tag-group/findOneDetial.json', params)
.then(res => {
console.log(res, 'tagValueDtoList');
that.groupName = res.data.result.tagGroupDto.groupName;
that.groupIsRealTime = res.data.result.tagGroupDto.isRealTime;
let list = res.data.result.tagValueDtoList;
......@@ -480,7 +478,6 @@ export default {
* 确认选择-弹层隐藏
*/
confirmUserDefined(data) {
console.log(data);
if (data.length < 1) {
this.$message.error({
duration: 1000,
......@@ -515,7 +512,6 @@ export default {
* 分页---页码变化
*/
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
this.pageSize = val;
this.getGroupDetail();
},
......@@ -524,7 +520,6 @@ export default {
* 分页---当前页变化
*/
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.currentPage = val;
this.getGroupDetail();
},
......@@ -591,7 +586,6 @@ export default {
* 获取头像处显示信息
*/
showSingleInfo(memberId) {
console.log(memberId);
const that = this;
const para = {
memberId: memberId
......@@ -645,7 +639,6 @@ export default {
errMsg.errorMsg(resData);
})
.catch(function(error) {
console.log(error);
that.$message.error({
duration: 1000,
message: error.message
......@@ -668,6 +661,16 @@ export default {
this.downMemberListPop.show = true;
exportParams.exportFields = data.toString();
},
setDesc(type, time) {
switch(type) {
case '核心':
return `年平均消费次数 ≥ 3 且 年平均消费金额 ≥ 3倍企业去年客单且休眠天数为${time}`;
case '潜力':
return `除核心会员、潜力会员、未消费会员之外的会员且休眠天数为${time}`;
case '普通':
return `消费次数 = 1 次且休眠天数为${time}`;
}
}
},
beforeMount() {
var that = this;
......
<template>
<!--金字塔分组表格-->
<div class="pyramid-group">
<el-table :data="tableList" :header-cell-style="rowClass">
<el-table-column label="价值" width="140">
<template #header>
<div class="header">
<span>消费休眠天数</span>
<span>价值</span>
<p class="line"></p>
</div>
</template>
<template #default="{ row }">
{{ row.gradeName || '--' }}
</template>
</el-table-column>
<el-table-column v-for="(v, i) in tableHeader" :key="i" :prop="v.prop" :min-width="v.minWidth" :label="v.label" :formatter="v.formatter" :fixed="v.fixed">
<template slot-scope="scope">
<span v-if="v.formatter" v-html="v.formatter(scope.row)" @click="toDetail(scope.row, i)"></span>
<span v-else>{{ scope.row[v.prop] || '--' }}</span>
</template>
</el-table-column>
</el-table>
<div class="unconsume-member">
<span>{{ consumeList.gradeName }}</span>
<card-item style="margin-right: 16px" v-for="(v, i) in consumeList.itemList" :key="i" :title="v.groupName" :count="v.memberCount" :data="consumeList" @toDetail="toDetail" :index="i" />
</div>
<div class="show-haoban">
<h2>展示在好办</h2>
<span class="tips">开启后,默认次日更新好办管理后台,如需立即更新,请至好办管理后台操作“同步”</span>
<p>
<span v-for="item in haobanList" :key="item.memberTagGradeId" class="switch-item">
<span>{{ item.aliasName }}</span>
<el-switch class="switch" v-model="item.hanbanShow" active-color="#2f54eb" @change="onChangeSwitch(item)" />
</span>
</p>
</div>
</div>
</template>
<script>
import { getRequest } from '@/api/api';
import cardItem from './card-item';
export default {
components: {
cardItem
},
data() {
return {
haobanList: [],
tableList: [],
tableHeader: [],
consumeList: [] // 未消费会员
};
},
created() {
this.getTableHeader();
this.getHaoBanData();
this.getTableList();
},
methods: {
getTableHeader() {
this.tableHeader = [
{ label: '指标说明', prop: 'gradeDesc', minWidth: 160 },
{ label: '0-30(高活跃)', minWidth: 130, formatter(row) { return `<span style="color:#2f54eb;cursor:pointer">${row.itemList[0].memberCount }人</span>` }},
{ label: '31-90(活跃)', minWidth: 130, formatter(row) { return `<span style="color: #2f54eb;cursor:pointer">${row.itemList[1].memberCount }人</span>` } },
{ label: '91-180(边缘)', minWidth: 130, formatter(row) { return `<span style="color: #2f54eb;cursor:pointer">${row.itemList[2].memberCount }人</span>` } },
{ label: '181-1年(沉睡)', minWidth: 130, formatter(row) { return `<span style="color: #2f54eb;cursor:pointer">${row.itemList[3].memberCount }人</span>` } },
{ label: '1年-2年(流失)', minWidth: 130, formatter(row) { return `<span style="color: #2f54eb;cursor:pointer">${row.itemList[4].memberCount }人</span>` } },
{ label: '2年以上(Lost+)', minWidth: 140, formatter(row) { return `<span style="color: #2f54eb;cursor:pointer">${row.itemList[5].memberCount }人</span>` } },
]
},
async getHaoBanData() {
const res = await getRequest('/memberTagGrade/gradeListNew', {});
const { result } = res.data;
this.haobanList = result;
},
async getTableList() {
const res = await getRequest('/memberTagGrade/gradeGroupListNew', {});
const { result } = res.data;
this.tableList = result.result.filter(el => el.gradeName != '未消费');
this.consumeList = result.result.find(el => el.gradeName == '未消费');
},
async onChangeSwitch(item) {
const { hanbanShow, memberTagGradeId } = item;
const params = { appStatus: Number(hanbanShow), memberTagGradeId };
const { data } = await getRequest('/memberTagGrade/updateHanbanShow', params);
if (data.errorCode != 1) return this.$message.error(data.message);
},
toDetail(row, index) {
if (row.gradeName.includes('未消费')) {
const item = row.itemList[index];
this.$router.push(`/memberLevelDetail?memberTagGroupId=${item.memberTagGroupId}&aliasName=${item.groupName}`)
} else {
const item = row.itemList[--index];
const { gradeName } = row;
let { groupName } = item;
const groupNameArr = groupName.replace(/[(|)]/g, ' ').split(' ');
const time = !groupNameArr[0].includes('年') ? groupNameArr[0] + '天' : groupNameArr[0];
const aliasName = gradeName + groupNameArr[1];
this.$router.push(`/memberLevelDetail?memberTagGroupId=${item.memberTagGroupId}&aliasName=${aliasName}&time=${time}&type=${gradeName}`)
}
}
}
};
</script>
<style lang="scss">
.pyramid-group {
.header {
display: flex;
flex-direction: column;
padding: 0;
font-size: 13px;
position: relative;
span:first-child {
text-align: right;
margin-right: 6px;
}
span:last-of-type {
margin-left: 16px;
}
.line {
position: absolute;
width: 170px;
background: #dcdfe6;
top: 0;
left: -5px;
height: 1px;
transform-origin: left top;
transform: rotate(29deg);
}
}
th.el-table__cell {
padding: 0 !important;
&:nth-of-type(2) {
.cell {
padding: 0 20px !important;
}
}
&:first-child {
.cell {
padding: 0 !important;
}
}
}
.el-table__cell {
&:nth-of-type(2), &:first-child {
border-right: 1px solid #dcdfe6;
}
}
.unconsume-member {
display: flex;
align-items: center;
margin-top: 16px;
& > span {
margin-left: 16px;
margin-right: 56px;
font-size: 14px;
}
}
.show-haoban {
margin-top: 30px;
h2 {
color: #303133;
font-weight: bold;
font-size: 16px;
margin-bottom: 7px;
line-height: 22px;
}
.switch-item {
display: inline-block;
margin-right: 30px;
margin-bottom: 20px;
.switch {
margin-left: 14px;
}
}
}
.tips {
display: inline-block;
font-size: 12px;
color: #909399;
margin-bottom: 20px;
}
}
</style>
......@@ -348,7 +348,7 @@ export default {
line-height: 22px;
height: 22px;
margin-right: 8px;
margin-bottom: 12px;
margin-bottom: 8px;
font-size: 12px;
padding: 0 8px;
background: #F2F3F5;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment