Commit 0e6883f5 by liuchenxi

Merge branch 'feature/3月会员标签' into feature/4月会员分组

parents cf7208e0 1bbad60b
......@@ -36,7 +36,9 @@ export default {
if (res.data.errorCode == 0) {
const uId = res.data.result && res.data.result.userId;
const isSuperAdmin = res.data.result && res.data.result.superAdmin;
const enableAccessControl = res.data.result && res.data.result.enableAccessControl;
this.$store.commit('changeSuperAdmin', isSuperAdmin);
this.$store.commit('changeEnableAccess', enableAccessControl);
if (this.uniqueId === '') {
this.$store.commit('changeUniqueId', uId);
}
......
......@@ -2,7 +2,8 @@
<div id="trash">
<el-popover placement="top-start" trigger="hover" content="一键清除废弃标签值">
<div slot="reference" class="trash" @click="dialogVisible = true">
<el-badge :value="trashList.length > 99 ? '99+' : trashList.length" class="badge">
<!-- $store.state.delTrashNum 该值在活动标签和手工标签列表删除里也有更新 -->
<el-badge :value="$store.state.delTrashNum > 99 ? '99+' : $store.state.delTrashNum" class="badge">
<i class="iconfont icon-delete trashIcon"></i>
</el-badge>
</div>
......@@ -12,13 +13,13 @@
<header>已选择待删除的标签/标签值</header>
<ul class="tagBox">
<li v-for="item in trashList" :key="item.tagItemId" class="tagItem">
{{ item.tagItemName }}
<i class="iconfont icon-guanbi1 delIcon" @click="delCheckTag(item.tagItemId)"></i>
{{ item.tagItemId == null ? item.tagName : item.tagItemName }}
<i class="iconfont icon-guanbi1 delIcon" @click="delCheckTag(item.tagItemId, item.tagId)"></i>
</li>
</ul>
<span slot="footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="doClean" :disabled="delTime > 0 || !trashList.length">{{ delTime > 0 ? getDelTime() : '删除' }}</el-button>
<el-button type="primary" @click="doClean" :disabled="!trashList.length">{{ delTime > 0 ? getDelTime() : '删除' }}</el-button>
</span>
</el-dialog>
</div>
......@@ -53,6 +54,7 @@ export default {
const { errorCode, message, result = [] } = res;
if (errorCode != 1) return this.$message.error(message);
this.trashList = result;
this.$store.commit('changeDelTrashNum', result.length);
this.progress = result.length;
});
},
......@@ -79,7 +81,7 @@ export default {
return `倒计时: ${h}h:${m}min:${s}s`;
},
doClean() {
if (this.delTime) return;
if (this.delTime > 0) return this.$message.error('当前有正在删除的标签/标签值,删除完成后才能再次操作删除任务');
cleanTrashList().then(res => {
const { errorCode, message } = res;
if (errorCode != 1) return this.$message.error(message);
......@@ -89,8 +91,9 @@ export default {
this.$emit('beginClean')
});
},
delCheckTag(tagItemId) {
delTrashList({ tagItemId }).then(res => {
delCheckTag(tagItemId, tagId) {
const type = tagItemId == null ? 1 : 0;
delTrashList({ tagItemId: type ? tagId : tagItemId, type }).then(res => {
const { errorCode, message } = res;
if (errorCode != 1) return this.$message.error(message);
this.getTrashList();
......@@ -143,7 +146,6 @@ export default {
}
header {
color: #303133;
font-weight: 700;
}
.tagBox {
display: flex;
......@@ -153,7 +155,6 @@ header {
margin-top: 16px;
margin-right: 8px;
padding: 3px 8px;
border: 1px solid #dcdfe6;
border-radius: 2px;
font-size: 13px;
color: #2f54eb;
......
......@@ -46,7 +46,7 @@
<!-- <el-button @click="refresh">刷新列表</el-button> -->
</div>
</div>
<div style="font-size:12px;color:#909399;line-height:30px;">* 仅能选择卡券模板投放期限有效的卡券</div>
<div style="font-size:12px;color:#909399;line-height:30px;background:#f7faff">* 仅能选择卡券模板投放期限有效的卡券</div>
<div class="pic-list-box">
<!-- @selection-change="handleSelectionChange" -->
<el-table
......
......@@ -225,7 +225,7 @@
<el-option class="options" v-for="item in parent.searchOptions" :key="item.key" :label="item.value" :value="item.key">
<div :class="parent.addSelectTags.some(el => el.clerkId == item.key) && 'active'">
<p>{{ item.value || '--' }}</p>
<p>{{ item.clerkCode || '--' }}{{ parent.addSelectTags }}</p>
<p>{{ item.clerkCode || '--' }}</p>
</div>
</el-option>
</el-select>
......@@ -256,7 +256,8 @@
<div v-if="parent.templateCode == 'tag011'">
<div :key="'tag11' + pindex">
<template v-if="loadSelector">
<dm-store-selector :options="parent.uuidOptions" :creatorId="creatorId" :uuid.sync="parent.uuid" ref="storeNew" :isAdd="!parent.uuid" />
<!--scenes服务门店查上线,其余门店查所有-->
<dm-store-selector :options="parent.uuidOptions" :creatorId="creatorId" :uuid.sync="parent.uuid" ref="storeNew" :isAdd="!parent.uuid" :scenes="tagId == 'd568b880d8464a9b9365b9861828f587' ? '': 'tagScenes'" :scenesVal="tagId == 'd568b880d8464a9b9365b9861828f587' ? '': 'tagScenes'" />
</template>
<!-- <vue-gic-store-new :options="parent.uuidOptions" :creatorId="creatorId" :uuid.sync="parent.uuid" ref="storeNew" :isAdd="!parent.uuid"> </vue-gic-store-new> -->
</div>
......@@ -929,7 +930,7 @@
<div :key="'tag7' + pindex">
<div>
<el-radio v-model="parent.radioType" :label="0">固定时段</el-radio>
<el-radio v-model="parent.radioType" :label="1">最近时段</el-radio>
<el-radio v-model="parent.radioType" :label="1">相对时段</el-radio>
</div>
<!-- 固定时段 -->
<div class="w-500 tag030 border-box" :style="{'paddingBottom': '5px', 'minHeight': parent.radioType ? '120px' : 'auto'}">
......@@ -944,8 +945,8 @@
end-placeholder="结束时间"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
:picker-options="openCardPickerOptions"
>
<!-- openCardPickerOptions -->
</el-date-picker>
<template v-if="parent.radioType">
<div class="tag030flex">
......@@ -2467,7 +2468,7 @@ export default {
&.all-select-options__city {
.el-checkbox-group {
max-height: 300px;
max-height: 200px;
overflow-y: auto;
}
}
......@@ -2560,7 +2561,7 @@ export default {
.flex-direction {
display: flex;
flex-direction: column;
padding-left: 110px;
padding-left: 118px;
box-shadow: border-box;
/deep/ .el-checkbox {
margin: 0;
......
......@@ -1488,6 +1488,8 @@ export default {
name: name,
requestProject: 'member-tag'
};
// 专属导购硬编码传type
if (that.tagId == "87d5e65945c84012a2a2534ef0b261b0") para.type = 2;
that.axios
.post(`${that.baseUrl}/api-plug/search-clerk`, qs.stringify(para))
.then(res => {
......
......@@ -375,4 +375,14 @@ export const changeTagSort = (params = {}) =>
}
})
// 是否展示系统标签
export const isShowSystemTag = (params = {}) =>
request({
url: '/tagLevel/isShowTag',
method: 'get',
params: {
requestProject: 'gic-member-tag-web',
...params
}
})
import Router from 'vue-router';
import _import from './_import.js';
// import delCache from '@/utils/router-utils.js';
const errorPage = r => {
import('view/errorPage/index.vue').then(module => {
r(module);
......@@ -19,7 +20,10 @@ export const constantRouterMap = [
name: '会员标签',
component: _import('platformTag', 'member-tag'),
meta: {
title: '会员标签'
title: '会员标签',
keepAlive: true,
componentName: 'member-tag',
fromPath: ['/manualTagValueEdit']
}
},
{
......@@ -126,7 +130,10 @@ export const constantRouterMap = [
component: _import('memberGroup', 'memberGroupList'),
name: '会员分组',
meta: {
title: '会员标签-会员分组'
title: '会员标签-会员分组',
keepAlive: true,
componentName: 'memberGroupList',
fromPath: ['/memberGroupEdit','/memberLevelDetail', '/memberGroupDetail']
}
},
{
......@@ -190,9 +197,14 @@ export const constantRouterMap = [
},
{ path: '*', redirect: '/404', hidden: true }
];
export default new Router({
const router = new Router({
routes: constantRouterMap,
base: '/member-tag/',
scrollBehavior: () => ({ y: 0 })
});
})
router.beforeEach((to, from, next) => {
const { fromPath = [] } = from.meta || {};
from.meta.keepAlive = fromPath.includes(to.path);
next();
})
export default router;
......@@ -11,7 +11,9 @@ export default new Vuex.Store({
show: false,
tagRealName: '',
uniqueId: '',
isSuperAdmin: 0
isSuperAdmin: 0,
delTrashNum: 0,
enableAccessControl: 0
},
mutations: {
[types.LOGIN]: (state, data) => {
......@@ -36,6 +38,12 @@ export default new Vuex.Store({
},
['changeSuperAdmin'](state, data) {
state.isSuperAdmin = data;
}
},
['changeDelTrashNum'](state, data) {
state.delTrashNum = data;
},
['changeEnableAccess'](state, data) {
state.enableAccessControl = data;
},
}
});
/**
* 需求分析
* A是列表页,B是详情页,C是另一个列表页
* A=>B=>A A的状态不变
* A=>C=>A A为初始状态
* A=>B=>C=>A A为初始状态
* A=>B=>A=>C=>A A为初始状态
* A=>B=>A=>C=>A=>B=>A A的状态不变(保持A最新的状态)
* A=>B=>A=>C=>A=>B=>C=>A A为初始状态
*/
/**
* 查找指定的组件实例
* @param {array} components 组件树
* @param {string} componentName 指定的组件name
* @returns 找到的组件实例
*/
function getComponent(components, componentName) {
let result = {};
components.some(el => {
if (el.$options.name == componentName) {
result = el;
} else if (Array.isArray(el.$children)) {
result = getComponent(el.$children, componentName);
}
return result.$el;
});
return result;
}
/**
* 清除指定组件的缓存
* @param {object} vm 组件实例
*/
function delCache(vm) {
let { componentOptions, parent = {}, key } = vm.$vnode || {};
let { cache, keys } = parent.componentInstance || {};
cache = cache || {};
keys = Array.isArray(keys) ? keys : [];
if (!componentOptions) return;
if (!key) {
const { Ctor, tag } = componentOptions;
key = Ctor.cid + (tag ? `::${tag}` : '');
}
if (cache[key]) {
if (Array.isArray(keys)) {
vm.$vnode.parent.componentInstance.keys = keys.filter(v => v != key);
}
delete vm.$vnode.parent.componentInstance.cache[key];
}
}
export default (components, componentName) => {
delCache(getComponent(components, componentName));
};
<template>
<dm-layout project-name="report">
<keep-alive>
<router-view :key="$route.fullPath"></router-view>
<router-view v-if="$route.meta.keepAlive" :key="$route.fullPath"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" />
</dm-layout>
</template>
<script>
export default {
name: 'layout'
name: 'layout',
}
</script>
......@@ -34,7 +34,7 @@ export default {
},
computed: {
desc() {
return this.data.length ? '该标签下的标签值正在被分组使用,删除后会员分组将查询不到对应的会员。' : '标签删除后,若有正在使用该标签的会员分组则会员分组覆盖人群将查询不到该标签下的人群。';
return this.list.length ? '该标签下的标签值正在被分组使用,删除后会员分组将查询不到对应的会员。' : '标签删除后,若有正在使用该标签的会员分组则会员分组覆盖人群将查询不到该标签下的人群。';
}
},
methods: {
......
......@@ -5,7 +5,7 @@
<div class="manualTagEdit-wrap__title">
<span>
<dm-sub-title :text="tagInfo.tagName" />
<p class="tip">导购标签排序应用于好办小程序,好办端展示按照排序从上到下展示</p>
<p class="tip" v-if="$route.query.type == 'manual'">导购标签排序应用于好办小程序,好办端展示按照排序从上到下展示</p>
</span>
<div class="operation-btn">
<el-button v-if="$route.query.type == 'manual'" type="primary" class="ghost-btn" @click="importMember">
......@@ -234,7 +234,8 @@ export default {
};
this.refreshTag.push({
tagItemIndex: index,
tagItemId: item.tagItemId
tagItemId: item.tagItemId,
type: 0
});
this.tagValTableData[index].showDelPopOver = false;
getRequest('/delTagItem/add', para).then(res => {
......@@ -443,7 +444,7 @@ export default {
// 已删除
if (this.tagValTableData[tagItemIndex].tagItemId === tagItemId) {
this.refreshTag = this.refreshTag.filter(item => item.tagItemId !== tagItemId)
this.getValueData();
// this.getValueData();
}
break;
case 5:
......
......@@ -3,8 +3,7 @@
<div class="manualTagEdit-wrap">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
<el-form-item label="标签名称:" prop="tagName">
<el-input class="w-full" placeholder="请输入内容" v-model="ruleForm.tagName" :maxlength="15"></el-input>
<label class="input-label">{{ ruleForm.tagName.length }}/15</label>
<el-input class="w-full" placeholder="请输入标签名称" v-model="ruleForm.tagName" :maxlength="15" show-word-limit></el-input>
</el-form-item>
<el-form-item label="所属分类:" prop="tagLevel">
<el-form-item prop="tagTwoLevelGroupId" class="fl">
......@@ -19,7 +18,13 @@
</el-form-item>
</el-form-item>
<el-form-item label="排序:" prop="tagSort" v-if="currentType == 'manual'">
<template #label> 排序<i class="iconfont icon-QuestionCircleOutlined icon" /></template>
<template #label>
排序
<el-tooltip placement="top" content="控制好办上标签展示顺序,按照数字降序排序" trigger="hover">
<i class="iconfont icon-QuestionCircleOutlined icon" />
</el-tooltip>
</template>
<el-input v-model="ruleForm.tagSort" placeholder="请输入1-100000之间的整数" class="w-full" @input="validateInputSort" @blur="blurSort" />
</el-form-item>
<el-form-item label="标签类型:" prop="tagType" v-if="currentType == 'manual'">
......@@ -39,7 +44,7 @@
</el-form>
<div class="manualTagEdit-btns">
<el-button @click="$emit('update:showPop', false)">取消</el-button>
<el-button type="primary" @click="confirmSave">保存</el-button>
<el-button type="primary" @click="confirmSave">确定</el-button>
</div>
</div>
</el-dialog>
......@@ -67,7 +72,7 @@ const validateTagValue = (rule, value, cb) => {
const validateTagSort = (rule, value, cb) => {
const res = /^[0-9]+$/;
if (!res.test(value) || value > 100000 || value < 1) {
cb(new Error('仅支持输入1-1-100000之间的整数'))
cb(new Error('仅支持输入1-100000之间的整数'))
}
cb();
}
......@@ -232,7 +237,8 @@ export default {
if (errorCode === 1) {
this.optionsTwo = result;
if (currentType == 'active' && !this.isEdit) {
this.ruleForm.tagTwoLevelGroupId = result.find(el => el.name === '渠道标签').id;
const find = result.find(el => el.name === '渠道标签');
this.ruleForm.tagTwoLevelGroupId = find ? find.id : find;
this.getOptionsThree(this.ruleForm.tagTwoLevelGroupId);
}
}
......@@ -356,7 +362,6 @@ export default {
.icon {
font-size: 14px;
color: #606266;
margin-left:1px;
position: relative;
top: 1px;
}
......
<template>
<div>
<!-- 添加标签、编辑标签 -->
<el-dialog :title="title" :visible.sync="showEditTagPop" top="10vh" width="600px" :before-close="handleClose" custom-class="edit-tag" :close-on-click-modal="false" append-to-body>
<el-dialog :title="title" :visible.sync="showEditTagPop" top="10vh" width="900px" :before-close="handleClose" custom-class="edit-tag" :close-on-click-modal="false" append-to-body>
<div class="dialog-box">
<div class="tag-info">
<p class="tag-name">
......@@ -11,9 +11,9 @@
<p class="tag-desc">{{ tagDataAssgin.tagDescribe }}</p>
</div>
<p v-if="tagId" class="m-t-20 m-b-20 tag-config">
<dm-sub-title text="标签值设置"/>
<span class="inline-block"><dm-sub-title text="标签值设置"/></span>
<el-tooltip v-if="tagDataAssgin.columnKey==='haobanWechatRelatedTime'||(Object.keys(tagDataAssgin).length&&tagDataAssgin.tagValue&&JSON.parse(tagDataAssgin.tagValue).val[0].data.key==='haobanWechatRelatedTime')" popper-class="edit-tag-tooltip" placement="top" open-delay="100" effect="light"
><div slot="content"><span style="font-weight:600">固定时段:</span>在所选时间段内与关联了好办导购账号的企微员工成为好友的;<br/><span style="font-weight:600">相对时段:</span>在“标签统计时间”(每天凌晨计算统计一次)的前X天/月/年与某员工成为好友的。例:选择相对时段为“最近2天”,那么系统在5号凌晨进行统计时,统计的是在3号、4号与某员工成为企微好友的用户;系统在6号凌晨统计时,统计的是在4号、5号与某员工成为企微好友的客户;</div><i class="iconfont icon-tishi"></i></el-tooltip></p>
><div slot="content"><span style="font-weight:600">固定时段:</span>在所选时间段内与关联了好办导购账号的企微员工成为好友的;<br/><span style="font-weight:600">相对时段:</span>在“标签统计时间”(每天凌晨计算统计一次)的前X天/月/年与某员工成为好友的。例:选择相对时段为“最近2天”,那么系统在5号凌晨进行统计时,统计的是在3号、4号与某员工成为企微好友的用户;系统在6号凌晨统计时,统计的是在4号、5号与某员工成为企微好友的客户;</div><i class="iconfont icon-QuestionCircleOutlined"></i></el-tooltip></p>
<!-- 所有标签的配置项 -->
<div class="tag-config-options">
<tag-config-options v-if="isAddFlag" :creatorId="creatorId" :tagId="tagDataAssgin.tagId" :columnKey="tagDataAssgin.columnKey" ref="tagConfig" :templateDataList="templateObj" @returnTagData="returnTagData"></tag-config-options>
......@@ -101,7 +101,7 @@ export default {
<style lang="less" scoped>
.dialog-box {
.tag-info {
background: #f2f3f5;
background: #f7f8fa;
padding: 16px;
.tag-name {
display: flex;
......@@ -146,7 +146,7 @@ export default {
}
.tag-config-options {
max-height: 50vh;
// overflow-y: auto;
overflow-y: auto;
}
.tag-value {
margin-top: 10px;
......
......@@ -2,9 +2,7 @@
<div id="index">
<transition name="fade" mode="out-in">
<!-- 缓存已经填好内容的页面 -->
<keep-alive include="memberGroupList">
<router-view></router-view>
</keep-alive >
<router-view></router-view>
</transition>
</div>
</template>
......
......@@ -4,7 +4,7 @@
<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-tab-pane label="金字塔客户分组" name="3" v-if="!($store.state.enableAccessControl && !$store.state.isSuperAdmin)"></el-tab-pane>
</el-tabs>
</div>
<div class="right-content">
......
......@@ -136,7 +136,8 @@
</template>
<!-- 开卡时间 -->
<template v-if="item.code == 'crateCardDateString'">
<div>{{ scope.row.crateCardDateString }}</div>
<div>{{ scope.row.crateCardDateString | formatTimeYMD }}</div>
<div>{{ scope.row.crateCardDateString | formatTimeHMS }}</div>
</template>
<!-- 新增时间 -->
<template v-if="item.code == 'createTime'">
......
......@@ -36,7 +36,7 @@
</div>
<div class="show-haoban">
<h2>展示在好办</h2>
<span class="tips">开启后,默认次日更新好办管理后台,如需立即更新,请至好办管理后台操作“同步”</span>
<span class="tips">开启后,立即更新至好办小程序</span>
<p>
<span v-for="item in haobanList" :key="item.memberTagGradeId" class="switch-item">
<span>{{ item.aliasName }}</span>
......
......@@ -4,9 +4,9 @@
<div class="member-box">
<div class="flex">
<el-tabs v-model="activeTag" @tab-click="handleClick">
<el-tab-pane label="系统标签" name="system"></el-tab-pane>
<el-tab-pane label="活动标签" name="active"></el-tab-pane>
<el-tab-pane label="系统标签" name="system" v-if="isShowSystem"></el-tab-pane>
<el-tab-pane label="手工标签" name="manual"></el-tab-pane>
<el-tab-pane label="活动标签" name="active"></el-tab-pane>
</el-tabs>
<a href="https://www.yuque.com/exnmlu/hpbb1c/cz27hs" target="_blank" class="help-doc">查看帮助文档</a>
</div>
......@@ -19,7 +19,7 @@
<div class="tag-all">
<p class="tag-name">
<span class="sub-title"><dm-sub-title :text="showSearchResult ? `【${tagName}】搜索结果` : tagName"/></span>
<span class="sub-title"></span>
<el-button
type="primary"
class="add-newtag"
......@@ -40,7 +40,7 @@
class="add-newtag"
placeholder="请输入标签名称"
prefix-icon="el-icon-search"
style="width: 260px"
style="width: 260px;float: left;margin-left: 0"
v-model="memberTag"
@keyup.native.enter="searchMemberList"
@clear="allTagList"
......@@ -65,7 +65,7 @@
@remote-sort="remoteSort"
/>
<tag-container-system v-show="activeTag == 'system'" :data="memberTagList" :refersh="refershList" @addTag="selectedTag" @change="searchMemberList" />
<tag-container-active v-show="activeTag == 'active'" :data="memberTagList" :refersh="refershList" @addTag="selectedTag" @change="searchMemberList" @ediActiveTag="editHandTag" />
<tag-container-active v-show="activeTag == 'active'" :data="memberTagList" :refersh="refershList" @addTag="selectedTag" @change="searchMemberList" @ediActiveTag="editHandTag" @deleteHandTag="deleteHandTag" />
<div class="page-box" v-if="total > 0">
<dm-pagination
......@@ -208,7 +208,7 @@ import TagContainer from './tag-container';
import TagContainerSystem from './tag-container-system';
import TagContainerActive from './tag-container-active';
import ManualTagEdit from '../manualTag/manualTagEdit';
import { getMemberTag, getMemberTagList, addNewGroup, memberGroupList, groupCount, getMemberTagGradeEnsure, isAutomaticSync } from '@/request/api';
import { getMemberTag, getMemberTagList, addNewGroup, memberGroupList, groupCount, getMemberTagGradeEnsure, isAutomaticSync, isShowSystemTag } from '@/request/api';
import EditTag from '../memberGroup/edit-tag';
import Trash from '@/components/Trash.vue';
import { parseTime } from '@/utils';
......@@ -363,7 +363,8 @@ export default {
weimId: ['3d11ac15963b4c0790762e6147ea9315', '5bdac971673b4f40a9af981e3c9215bf'],
isSync: false, // 是否开启自动同步开关
activeTag: 'system',
manualOrderBy: -1
manualOrderBy: -1,
isShowSystem: true
};
},
computed: {
......@@ -401,7 +402,6 @@ export default {
return arr;
} else {
return this.tagList.filter(el => {
if (el.levelName == '常用标签' && el.count <= 0) return false;
return el['handTag'] === 0;
});
}
......@@ -565,6 +565,7 @@ export default {
},
// 新增第三级手工标签
editHandTag(list) {
console.log(list);
/**
* 第一级标签切换时,重置manualTagPop.tagTwoLevelGroupId和manualTagPop.tagLevelGroupId为空
* 第二级标签切换时,修改manualTagPop.tagTwoLevelGroupId为当前第二级标签的tagLevelGroupId,重置manualTagPop.tagLevelGroupId为空
......@@ -757,6 +758,7 @@ export default {
},
// 点击活动标签、手工标签
handleClick() {
this.params.pageNum = 1;
this.memberTag = '';
const { activeTag, tagList, allTagList, handleFristTag } = this;
if (activeTag === 'system') {
......@@ -776,10 +778,16 @@ export default {
remoteSort(prop, order) {
this.manualOrderBy = order == 'descending' ? 0 : 1;
this.loadMemberTagList(this.params);
},
getShowSystem() {
return isShowSystemTag().then(res => {
this.isShowSystem = res.result;
if(!res.result) this.activeTag='manual';
})
}
},
beforeMount() {
async beforeMount() {
this._groupCount();
// 一二三级都需要一个变量来保存自己的信息 在切换页码和数量的时候也要传参数过去
this.middleWareVariable = {};
......@@ -824,6 +832,7 @@ export default {
this.loadMemberTagList(this.params);
this.$store.commit('modiftTagName', '我的用户');
}
this.getShowSystem()
},
mounted() {
this.$on('refersh-member-list', () => {
......@@ -939,6 +948,7 @@ export default {
padding-bottom: 40px;
overflow-y: auto;
.tag-name {
overflow: hidden;
line-height: 34px;
padding: 20px;
font-size: 16px;
......@@ -951,7 +961,6 @@ export default {
}
.add-newtag {
float: right;
margin-bottom: 10px;
margin-left: 15px;
}
}
......@@ -964,7 +973,7 @@ export default {
}
.my-pop-tagbox {
position: fixed;
z-index: 2;
z-index: 10;
right: 29px;
bottom: 230px;
height: 120px;
......
......@@ -14,7 +14,7 @@
</el-tooltip>
</span>
<i class="arrow-line iconfont icon-next-" v-if="!isOtherTag"></i>
<template v-if="tagName === '手工标签' && tagList.id !== '3d11ac15963b4c0790762e6147ea9315'">
<template v-if="(['手工标签', '活动标签'].includes(tagName))&& tagList.id !== '3d11ac15963b4c0790762e6147ea9315'">
<el-popover placement="bottom" width="30" trigger="click" v-if="getCode('add') || getCode('edit')">
<li class="more" @click="addNewType" :limit-code="getCode('add')" v-if="getCodeAuth('add')">新增子分类</li>
<li class="more" @click="handleEditType" :limit-code="getCode('edit')" v-if="getCodeAuth('edit')">编辑子分类</li>
......@@ -30,18 +30,18 @@
<!-- 编辑子分类 -->
<el-dialog :title="newName" :visible.sync="editVisiable" :close-on-click-modal="false" width="600px">
<el-table :data="editData" height="400">
<el-table-column label="子分类名称" prop="levelName">
<el-table-column label="子分类名称" prop="levelName" min-width="90">
<template slot-scope="scope">
<el-input v-model="scope.row.levelName" v-if="scope.row.editName"></el-input>
<span v-else>{{ scope.row.levelName }}</span>
</template>
</el-table-column>
<el-table-column label="标签数量" prop="count">
<el-table-column label="标签数量" prop="count" min-width="50">
<template slot-scope="scope">
<span>{{ scope.row.count == null ? '--' : scope.row.count }}</span>
</template>
</el-table-column>
<el-table-column label="操作">
<el-table-column label="操作" min-width="50">
<template slot-scope="scope">
<div class="btn-group">
<el-button :disabled="scope.row.levelName.indexOf('未分类') > -1" @click="handleEdit(scope.row, scope.$index)" type="text">{{ scope.row.editText }}</el-button>
......@@ -59,11 +59,11 @@
<el-dialog :title="newName" :visible.sync="dialogVisible" width="600px" top="20%" :close-on-click-modal="false" custom-class="add-tag-dialog">
<div class="newtype">
<p class="name"><span class="required">*</span>子分类 </p>
<el-input style="width: 100%" placeholder="请输入分类名称" maxlength="10" v-model="typeName" show-word-limit> </el-input>
<el-input style="width: 100%" placeholder="请输入分类名称" maxlength="10" v-model="typeName" show-word-limit> </el-input>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="newTag">添 加</el-button>
<el-button type="primary" @click="newTag">确 定</el-button>
</span>
</el-dialog>
</div>
......@@ -174,7 +174,8 @@ export default {
...el,
editName: false,
editText: '编辑',
deleteText: '删除'
deleteText: '删除',
originLevelName: el.levelName
}));
this.editData[i].editName = true;
this.editData[i].editText = '确认';
......@@ -227,6 +228,7 @@ export default {
this.editData[i].editName = false;
this.editData[i].editText = '编辑';
this.editData[i].deleteText = '删除';
this.editData[i].levelName = list.originLevelName;
return;
}
const param = {
......@@ -361,6 +363,7 @@ export default {
.light-active {
background: #EBEFFE;
color: #2f54eb;
font-weight: 500;
}
.icon-next- {
font-size: 30px;
......@@ -409,17 +412,19 @@ export default {
}
}
.more {
line-height: 26px;
line-height: 34px;
text-align: center;
cursor: pointer;
&:hover {
color: #2f54eb;
background-color: #f7f8fa;
}
}
.add-tag-dialog {
.newtype {
.name {
margin-bottom: 10px;
color: #303133;
}
}
.required {
......@@ -450,6 +455,8 @@ export default {
}
.btn-group {
font-size: 0;
display: flex;
align-items: center;
}
.menu-icon {
width: 16px; height: 16px;
......
......@@ -2,7 +2,7 @@
<!-- 具体标签 -->
<div class="tag-some-list">
<el-table :data="tableData" style="width: 100%">
<el-table-column label="标签名称" prop="tagName" min-width="100" fixed="left">
<el-table-column label="标签名称" prop="tagName" min-width="230" fixed="left">
<template slot-scope="scope">
<span class="tag-name">{{ scope.row.tagName }}</span>
<el-tooltip class="item" effect="dark" content="添加标签" placement="bottom">
......@@ -10,12 +10,12 @@
</el-tooltip>
</template>
</el-table-column>
<el-table-column label="上级分类名称" min-width="90" prop="tagLevelGroupName">
<el-table-column label="上级分类名称" min-width="110" prop="tagLevelGroupName">
<template slot-scope="{ row }">
<span>{{ row.tagLevelGroupName || '--' }}</span>
</template>
</el-table-column>
<el-table-column label="覆盖人数" prop="memberCount" min-width="80" show-overflow-tooltip>
<el-table-column label="覆盖人数" prop="memberCount" min-width="100" show-overflow-tooltip>
<template slot="header">
覆盖人数
<el-popover width="260" trigger="hover" placement="top">
......@@ -35,7 +35,7 @@
<div>{{ scope.row.tagDescribe ? scope.row.tagDescribe : '--' }}</div>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" min-width="90">
<el-table-column label="创建时间" prop="createTime" min-width="100">
<template slot-scope="{ row }">
<template v-if="row.createTime">
<p>{{ dateformat(new Date(row.createTime), 'yyyy-MM-dd') }}</p>
......@@ -44,11 +44,13 @@
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right">
<template slot-scope="{ row }">
<el-button type="text" @click="editActiveTag(row)">编辑</el-button>
<el-button type="text" @click="editActiveTagValue(row)">详情</el-button>
<el-button type="text" @click="deleteActiveTag(row)">删除</el-button>
<el-table-column label="操作" fixed="right" min-width="200">
<template slot-scope="scope">
<div class="font-0">
<el-button class="m-r-12" type="text" @click="editActiveTag(scope.row)">编辑</el-button>
<el-button class="m-r-12" type="text" @click="editActiveTagValue(scope.row)">详情</el-button>
<el-button class="m-r-12" type="text" @click="deleteActiveTag(scope.row, scope.$index, e)">删除</el-button>
</div>
</template>
</el-table-column>
</el-table>
......@@ -62,6 +64,8 @@ import tagDetails from '@/components/tagDetail/mixin/index';
import { dateformat } from '@/utils/formatTime';
import { delThirdHandTag } from '@/request/api';
import DeleteTagDialog from '../manualTag/delete-tag-dialog.vue';
import errMsg from '@/common/js/error';
import { getRequest } from '@/api/api';
export default {
name: 'tag-container',
......@@ -114,11 +118,24 @@ export default {
query: { tagId: list.tagId, type: 'active' }
});
},
deleteActiveTag(list) {
deleteActiveTag(list, index, e) {
this.deleteTagDialog.visible = true;
this.deleteTagDialog.deleteData = list;
this.deleteTagDialog.deleteData = {
...list,
currentIndex: index,
e
};
},
doDelete(list) {
const { currentIndex: index, e, memberCount } = list;
// memberCount为0时不加入垃圾桶,直接删除
if (memberCount == 0) {
this.directDelTag(list);
} else {
this.intoTrash(list, index, e);
}
},
directDelTag(list) {
const param = {
tagId: list.tagId,
requestProject: 'gic-member-tag-web'
......@@ -131,10 +148,33 @@ export default {
type: 'success',
duration: 1000
});
this.$emit('deleteActiveTag', this.groupId);
this.$emit('deleteHandTag', this.groupId);
}
})
},
// 加入到垃圾桶
intoTrash(item, index, e) {
const para = {
itemId: item.tagId,
type: 1
};
getRequest('/delTagItem/add', para).then(res => {
const { errorCode } = res.data;
if (errorCode === 1) {
item.delStatus = 0;
this.$store.commit('changeDelTrashNum', this.$store.state.delTrashNum + 1);
this.$message.success('添加成功,请点击右侧「垃圾桶」图标进行删除');
// this.startAnimation(e)
return;
}
errMsg.errorMsg(res.data);
}).catch(error => {
this.$message.error({
duration: 1000,
message: error.message
});
});
},
},
watch: {
data: {
......@@ -179,14 +219,12 @@ export default {
cursor: pointer;
color: #303133;
transition: all .3s;
color: #2f54eb;
&:hover {
transform: scale(1.25);
}
}
.refresh {
color: #909399;
&:hover {
color: #2f54eb;
}
color: #606266;
}
</style>
......@@ -2,7 +2,7 @@
<!-- 具体标签 -->
<div class="tag-some-list">
<el-table :data="tableData" style="width: 100%">
<el-table-column label="标签名称" prop="tagName" min-width="130">
<el-table-column label="标签名称" prop="tagName" min-width="230" fixed>
<template slot-scope="scope">
<span class="tag-name">{{ scope.row.tagName }}</span>
<el-tooltip class="item" effect="dark" content="添加标签" placement="top">
......@@ -10,12 +10,12 @@
</el-tooltip>
</template>
</el-table-column>
<el-table-column label="是否实时" prop="isActive" min-width="60">
<el-table-column label="是否实时" prop="isActive" min-width="70">
<template slot-scope="scope">
<span :class="['base', scope.row.isActive == 1 ? 'keep-active' : 'no-active']"> {{ scope.row.isActive == 1 ? '实时' : '非实时' }} </span>
</template>
</el-table-column>
<el-table-column label="上级分类名称" min-width="90">
<el-table-column label="上级分类名称" min-width="100">
<template slot-scope="{ row }">
<span>{{ row.tagLevelGroupName || '--' }}</span>
</template>
......@@ -76,7 +76,7 @@ export default {
changeMoreUse(row) {
const params = { tagId: row.tagId, isMoreUse: row.isMoreUse ? 0 : 1 };
updateMoreUse(params).then(() => {
this.$message.success('设置成功');
this.$message.success(params.isMoreUse ? '已设为"常用标签"' : '已取消"设为常用标签"');
row.isMoreUse = row.isMoreUse ? 0 : 1;
})
}
......@@ -124,6 +124,7 @@ export default {
cursor: pointer;
color: #303133;
transition: all 0.3s;
color: #2f54eb;
&:hover {
transform: scale(1.25);
}
......@@ -135,20 +136,6 @@ export default {
}
}
.base {
height: 22px;
border-radius: 2px;
padding: 0 8px;
display: inline-block;
text-align: center;
line-height: 22px;
font-size: 12px;
&.keep-active {
background: #dee3fc;
color: #2f54eb;
}
&.no-active {
background: #feecda;
color: #fa8c16;
}
font-size: 14px;
}
</style>
......@@ -2,7 +2,7 @@
<!-- 具体标签 -->
<div class="tag-some-list">
<el-table :data="tableData" style="width: 100%" @sort-change="sortChange">
<el-table-column label="标签名称" prop="tagName" min-width="140">
<el-table-column label="标签名称" prop="tagName" min-width="230" fixed>
<template slot-scope="scope">
<span class="tag-name">{{ scope.row.tagName }}</span>
<el-tooltip class="item" effect="dark" content="添加标签" placement="bottom">
......@@ -30,7 +30,7 @@
{{ scope.row.memberCount ? (scope.row.memberCount | formatNum) + '人' : '--' }}
</template>
</el-table-column>
<el-table-column label="标签类型" prop="isMultiple" min-width="150">
<el-table-column label="标签类型" prop="isMultiple" min-width="100">
<template slot-scope="{ row }">
<div>{{ row.isMultiple ? '多选': '单选' }}</div>
</template>
......@@ -45,7 +45,7 @@
排序
<el-popover width="260" trigger="hover" placement="top">
<div style="color: #303133;">
控制好办上标签展示顺序,按照数字序排序
控制好办上标签展示顺序,按照数字序排序
</div>
<i slot="reference" class="iconfont icon-QuestionCircleOutlined refresh"></i>
</el-popover>
......@@ -64,11 +64,13 @@
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column label="操作" v-if="(getCodeAuth('edit') || getCodeAuth('setValue') || getCodeAuth('delete'))" min-width="200">
<el-table-column label="操作" v-if="(getCodeAuth('edit') || getCodeAuth('setValue') || getCodeAuth('delete'))" min-width="200" fixed="right">
<template slot-scope="scope">
<el-button type="text" v-if="!isWeim && getCodeAuth('edit')" :limit-code="getCode('edit')" @click="editHandTag(scope.row)">编辑</el-button>
<el-button type="text" v-if="getCodeAuth('setValue')" :limit-code="getCode('setValue')" @click="editHandTagValue(scope.row)">详情</el-button>
<el-button type="text" v-if="!isWeim && getCodeAuth('delete')" :limit-code="getCode('delete')" @click="deleteHandTag(scope.row)">删除</el-button>
<div class="font-0">
<el-button class="m-r-12" type="text" v-if="!isWeim && getCodeAuth('edit')" :limit-code="getCode('edit')" @click="editHandTag(scope.row)">编辑</el-button>
<el-button class="m-r-12" type="text" v-if="getCodeAuth('setValue')" :limit-code="getCode('setValue')" @click="editHandTagValue(scope.row)">详情</el-button>
<el-button class="m-r-12" type="text" v-if="!isWeim && getCodeAuth('delete')" :limit-code="getCode('delete')" @click="deleteHandTag(scope.row, scope.$index, $event)">删除</el-button>
</div>
</template>
</el-table-column>
</el-table>
......@@ -82,8 +84,8 @@ import tagDetails from '@/components/tagDetail/mixin/index';
import DeleteTagDialog from '../manualTag/delete-tag-dialog.vue';
import { delThirdHandTag, changeTagSort } from '@/request/api';
import { dateformat } from '@/utils/formatTime';
import errMsg from '@/common/js/error';
import { getRequest } from '@/api/api';
export default {
name: 'tag-container',
......@@ -128,11 +130,24 @@ export default {
query: { tagId: list.tagId, type: 'manual' }
});
},
deleteHandTag(list) {
deleteHandTag(list, index, e) {
this.deleteTagDialog.visible = true;
this.deleteTagDialog.deleteData = list;
this.deleteTagDialog.deleteData = {
...list,
currentIndex: index,
e
};
},
doDelete(list) {
const { currentIndex: index, e, memberCount } = list;
// memberCount为0时不加入垃圾桶,直接删除
if (memberCount == 0) {
this.directDelTag(list);
} else {
this.intoTrash(list, index, e);
}
},
directDelTag(list) {
const param = {
tagId: list.tagId,
requestProject: 'gic-member-tag-web'
......@@ -149,6 +164,31 @@ export default {
}
})
},
// 加入到垃圾桶
intoTrash(item, index, e) {
console.log(item);
const para = {
itemId: item.tagId,
type: 1
};
getRequest('/delTagItem/add', para).then(res => {
const { errorCode } = res.data;
if (errorCode === 1) {
item.delStatus = 0;
console.log(this.$store.state.delTrashNum + 1);
this.$store.commit('changeDelTrashNum', this.$store.state.delTrashNum + 1);
this.$message.success('添加成功,请点击右侧「垃圾桶」图标进行删除');
// this.startAnimation(e)
return;
}
errMsg.errorMsg(res.data);
}).catch(error => {
this.$message.error({
duration: 1000,
message: error.message
});
});
},
handleTrackParam(type, data) {
let fn = {
addTag: () => {
......@@ -236,17 +276,15 @@ export default {
font-size: 16px;
cursor: pointer;
transition: all .3s;
color: #2f54eb;
&:hover {
transform: scale(1.25);
}
}
.refresh {
color: #909399;
color: #606266;
position: relative;
top: 1px;
&:hover {
color: #2f54eb;
}
}
.sort {
// /deep/ .el-input__inner {
......
......@@ -349,6 +349,9 @@ input:focus {
.m-r-10 {
margin-right: 10px;
}
.m-r-12 {
margin-right: 12px;
}
.m-r-20 {
margin-right: 20px;
}
......@@ -540,6 +543,9 @@ i {
font-style: normal;
font-weight: normal;
}
.font-0 {
font-size: 0;
}
.font-10 {
font-size: 10px;
}
......
......@@ -11263,7 +11263,7 @@
.el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-button:active {
......@@ -11385,8 +11385,8 @@
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff;
background: #EBEFFE;
border-color: #2f54eb;
}
.el-button--primary.is-plain:hover,
......@@ -11408,7 +11408,7 @@
.el-button--primary.is-plain.is-disabled:focus,
.el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff;
}
......@@ -12526,7 +12526,7 @@
.el-dropdown-menu__item:not(.is-disabled):hover,
.el-dropdown-menu__item:focus {
background-color: #e8f4ff;
background-color: #EBEFFE;
color: #597EF7;
}
......@@ -13663,7 +13663,7 @@
.el-menu-item:hover,
.el-menu-item:focus {
outline: none;
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-menu-item.is-disabled {
......@@ -13721,7 +13721,7 @@
.el-submenu__title:hover,
.el-submenu__title:focus {
outline: none;
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-submenu__title.is-disabled {
......@@ -13731,7 +13731,7 @@
}
.el-submenu__title:hover {
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-submenu .el-menu {
......@@ -25700,7 +25700,7 @@
.el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-button:active {
......@@ -25822,8 +25822,8 @@
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff;
background: #EBEFFE;
border-color: #2f54eb;
}
.el-button--primary.is-plain:hover,
......@@ -25845,7 +25845,7 @@
.el-button--primary.is-plain.is-disabled:focus,
.el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff;
}
......@@ -29645,18 +29645,18 @@
}
.el-table--striped .el-table__body tr.el-table__row--striped.current-row td {
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-table__body tr.hover-row>td,
.el-table__body tr.hover-row.current-row>td,
.el-table__body tr.hover-row.el-table__row--striped>td,
.el-table__body tr.hover-row.el-table__row--striped.current-row>td {
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-table__body tr.current-row>td {
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-table__column-resize-proxy {
......@@ -31929,7 +31929,7 @@
}
.el-table-filter__list-item:hover {
background-color: #e8f4ff;
background-color: #EBEFFE;
color: #597EF7;
}
......@@ -49297,7 +49297,7 @@
.el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff;
background-color: #EBEFFE;
}
.el-button:active {
......@@ -49419,8 +49419,8 @@
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff;
background: #EBEFFE;
border-color: #2f54eb;
}
.el-button--primary.is-plain:hover,
......@@ -49442,7 +49442,7 @@
.el-button--primary.is-plain.is-disabled:focus,
.el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff;
}
......@@ -77876,8 +77876,8 @@
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff;
background: #EBEFFE;
border-color: #2f54eb;
}
.el-button--primary.is-plain:hover,
......@@ -77897,7 +77897,7 @@
/* .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; } */
.el-button--success {
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