Commit d885cff3 by crushh

Merge branch 'feature/act-code' of http://git.gicdev.com/office/haoban-3 into feature/act-code

parents bda22443 2b4079bd
...@@ -21,6 +21,7 @@ Vue.axios.defaults.timeout = 500000; ...@@ -21,6 +21,7 @@ Vue.axios.defaults.timeout = 500000;
let local = window.location.origin; let local = window.location.origin;
const userInfos = JSON.parse(sessionStorage.getItem('userInfos') || '{}'); const userInfos = JSON.parse(sessionStorage.getItem('userInfos') || '{}');
let gicHost = typeof userInfos.gicHost == 'string' ? userInfos.gicHost.replace(/\/$/, '') : ''; let gicHost = typeof userInfos.gicHost == 'string' ? userInfos.gicHost.replace(/\/$/, '') : '';
console.log(gicHost);
if (local.indexOf('localhost') >= 0) { if (local.indexOf('localhost') >= 0) {
gicHost = local; gicHost = local;
} }
......
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1657604571745" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4621" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path d="M0 0h1022.464v1024H0V0z" fill="#F1F4F9" p-id="4622"></path><path d="M840.192 962.048c-1.024-154.624-147.456-260.096-328.192-260.096-178.176 0-323.584 102.4-328.192 253.44v26.112c0 23.04 13.824 41.984 31.232 41.984h594.432c16.896 0 31.232-18.944 31.232-41.984l-0.512-19.456c0 0.512 0 0 0 0z" fill="#DBE1EB" p-id="4623"></path><path d="M512 701.952c-37.376 0-75.264 4.096-111.616 12.8 26.112 25.6 58.88 44.544 94.208 54.784 58.88 17.92 122.368 0 163.328-45.568-47.104-14.848-96.256-22.016-145.92-22.016z" fill="#B9C4D6" p-id="4624"></path><path d="M512 245.76h245.76v245.76c0 135.68-110.08 245.76-245.76 245.76s-245.76-110.08-245.76-245.76 110.08-245.76 245.76-245.76z" fill="#DBE1EB" p-id="4625"></path><path d="M336.384 491.52c0 96.768 78.336 175.616 175.616 175.616S687.616 588.8 687.616 491.52c0-96.768-78.336-175.616-175.616-175.616C415.232 315.904 336.384 394.24 336.384 491.52z" fill="#FFFFFF" opacity=".8" p-id="4626"></path><path d="M415.232 421.376c0 9.728 7.68 17.408 17.408 17.408s17.408-7.68 17.408-17.408-7.68-17.408-17.408-17.408c-9.216-0.512-17.408 7.68-17.408 17.408zM573.44 421.376c0 9.728 7.68 17.408 17.408 17.408s17.408-7.68 17.408-17.408-7.68-17.408-17.408-17.408c-9.728-0.512-17.408 7.68-17.408 17.408z" fill="#4A4D53" opacity=".8" p-id="4627"></path><path d="M411.136 474.112h44.032c8.704 0 13.312 4.608 13.312 13.312 0 8.704-4.608 13.312-13.312 13.312h-44.032c-8.704 0-13.312-4.608-13.312-13.312 0-9.216 4.608-13.312 13.312-13.312zM568.832 474.112h44.032c8.704 0 13.312 4.608 13.312 13.312 0 8.704-4.608 13.312-13.312 13.312h-44.032c-8.704 0-13.312-4.608-13.312-13.312 0.512-9.216 4.608-13.312 13.312-13.312z" fill="#F9BCBC" opacity=".8" p-id="4628"></path><path d="M513.536 442.368c0 7.68-5.632 13.824-13.312 13.824s-13.312-6.656-13.312-13.824c0-1.024 0-2.56 0.512-3.584 1.536 6.144 6.656 10.24 12.8 10.752 6.144 0 11.776-4.608 13.312-10.752 1.536 6.144 6.656 10.24 13.312 10.752 6.144 0 11.264-4.608 12.8-10.752 0.512 1.024 0.512 2.56 0.512 3.584 0 7.68-5.632 13.824-13.312 13.824s-13.312-6.144-13.312-13.824z" fill="#4A4D53" opacity=".94" p-id="4629"></path></svg>
\ No newline at end of file
...@@ -36,7 +36,7 @@ export default { ...@@ -36,7 +36,7 @@ export default {
// 是否多选 // 是否多选
multiple: { multiple: {
type: Boolean, type: Boolean,
default: true default: false
}, },
// 多选时最多可以选几条数据,默认100条 // 多选时最多可以选几条数据,默认100条
max: { max: {
......
...@@ -10,21 +10,23 @@ ...@@ -10,21 +10,23 @@
<el-input placeholder="请输入导购名称/手机号/code" prefix-icon="el-icon-search" clearable style="margin-left: 10px; width: 250px"></el-input> <el-input placeholder="请输入导购名称/手机号/code" prefix-icon="el-icon-search" clearable style="margin-left: 10px; width: 250px"></el-input>
</div> </div>
<!-- 导购列表的表头 --> <!-- 导购列表的表头 -->
<el-table :class="['clerk-list-header', { 'hide-empty': storeList.length > 0 }]"> <el-table :class="['clerk-list-header', { 'hide-empty': storeClerkList.length > 0 }]">
<el-table-column min-width="67px"> <el-table-column min-width="67px">
<el-checkbox v-if="multiple" :disabled="canSelectAll()" slot="header"></el-checkbox> <template #header>
<el-checkbox v-if="multiple" v-model="selectAll" @change="onSelectAll" :indeterminate="indeterminate" :disabled="storeClerkList.every(el => el.disabled)"></el-checkbox>
</template>
</el-table-column> </el-table-column>
<el-table-column label="导购" min-width="230px"></el-table-column> <el-table-column label="导购" min-width="230px"></el-table-column>
<el-table-column label="手机号码" min-width="160px"></el-table-column> <el-table-column label="手机号码" min-width="160px"></el-table-column>
<el-table-column label="备注" min-width="168px"></el-table-column> <el-table-column label="备注" min-width="168px"></el-table-column>
</el-table> </el-table>
<!-- 导购列表 --> <!-- 导购列表 -->
<div v-if="storeList.length > 0" class="clerk-list-body"> <div v-if="storeClerkList.length > 0" class="clerk-list-body">
<div v-for="el in storeList" :key="el.storeId" class="clerk-list-cell"> <div v-for="el in storeClerkList" :key="el.storeId" class="clerk-list-cell">
<!-- 门店信息 --> <!-- 门店信息 -->
<el-table :data="[{}]" class="clerk-store-info" :show-header="false"> <el-table :data="[{}]" class="clerk-store-info" :show-header="false">
<el-table-column min-width="67px"> <el-table-column min-width="67px">
<el-checkbox v-if="multiple" :disabled="canSelectStore(el)"></el-checkbox> <el-checkbox v-if="multiple" v-model="el.selected" @change="onSelectStore(el)" :indeterminate="el.indeterminate" :disabled="el.disabled"></el-checkbox>
</el-table-column> </el-table-column>
<el-table-column min-width="558px"> <el-table-column min-width="558px">
<div class="clerk-store-name">{{ el.storeName }}</div> <div class="clerk-store-name">{{ el.storeName }}</div>
...@@ -35,8 +37,8 @@ ...@@ -35,8 +37,8 @@
<el-table :data="el.clerkList" class="clerk-list-table" :show-header="false"> <el-table :data="el.clerkList" class="clerk-list-table" :show-header="false">
<el-table-column min-width="67px"> <el-table-column min-width="67px">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-checkbox v-if="multiple" @change="onSelectClerk(row)" :checked="selected.some(item => item.clerkId == row.clerkId)" :disabled="row.hmStatus == 1 || row.hmStatus == 2"></el-checkbox> <el-checkbox v-if="multiple" v-model="row.selected" @change="onSelectClerk(row, el)" :disabled="row.disabled"></el-checkbox>
<el-radio v-else :disabled="row.hmStatus == 1 || row.hmStatus == 2 || row.hmStatus == 3"></el-radio> <el-radio v-else v-model="row.selected" @change="onSelectClerk(row, el)" :disabled="row.disabled"></el-radio>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="导购" min-width="230px"> <el-table-column label="导购" min-width="230px">
...@@ -81,6 +83,7 @@ ...@@ -81,6 +83,7 @@
</template> </template>
<script> <script>
import { getRequest } from '@/api/api.js';
export default { export default {
name: 'SelectClerk', name: 'SelectClerk',
props: { props: {
...@@ -99,67 +102,56 @@ export default { ...@@ -99,67 +102,56 @@ export default {
} }
}, },
watch: { watch: {
data() { visible(flag) {
if (flag) {
this.selected = JSON.parse(JSON.stringify(this.data)); this.selected = JSON.parse(JSON.stringify(this.data));
this.getStoreClerkList();
}
} }
}, },
data() { data() {
return { return {
storeList: [ // 门店-导购列表
{ storeClerkList: [],
storeId: 'store id', // 全选的选中状态
storeName: '门店名称', selectAll: false,
storeCode: 'store code', // 全选的半选状态
clerkList: [ indeterminate: false,
{ // 选中的导购
clerkId: 'clerk id',
clerkName: '导购名称',
clerkCode: 'clerk code',
phoneNumber: '18912341234',
hmStatus: 3 // 1未关联企微 2关联的企微号未配置客户联系功能 3已有单人活码(单人活码不能创建 多人活码可以) 4无单人活码(可以创建)
},
{
clerkId: 'clerk id1',
clerkName: '导购名称',
clerkCode: 'clerk code1',
phoneNumber: '18912341234',
hmStatus: 1 // 1未关联企微 2关联的企微号未配置客户联系功能 3已有单人活码(单人活码不能创建 多人活码可以) 4无单人活码(可以创建)
}
]
},
{
storeId: 'store id1',
storeName: '门店名称',
storeCode: 'store code',
clerkList: [
{
clerkId: 'clerk id11',
clerkName: '导购名称',
clerkCode: 'clerk code',
phoneNumber: '18912341234',
hmStatus: 2 // 1未关联企微 2关联的企微号未配置客户联系功能 3已有单人活码(单人活码不能创建 多人活码可以) 4无单人活码(可以创建)
},
{
clerkId: 'clerk id12',
clerkName: '导购名称',
clerkCode: 'clerk code1',
phoneNumber: '18912341234',
hmStatus: 1 // 1未关联企微 2关联的企微号未配置客户联系功能 3已有单人活码(单人活码不能创建 多人活码可以) 4无单人活码(可以创建)
}
]
}
],
selected: [] selected: []
}; };
}, },
methods: { methods: {
// 能否全选所有门店下的导购 getStoreClerkList() {
canSelectAll() { getRequest('/haoban-manage3-web/hm/store-clerk-list', { pageNum: 1, pageSize: 20 }).then(res => {
return this.storeList.map(el => this.canSelectStore(el)).every(el => el == true); const { code, message, result } = res.data || {};
}, if (code != 0) {
// 能否全选门店下的导购 return this.$message.error(message);
canSelectStore(store) { }
return store.clerkList.filter(item => item.hmStatus != 1 && item.hmStatus != 2).length == 0; result.result = Array.isArray(result.result) ? result.result : [];
this.storeClerkList = result.result.map(el => {
el.clerkList = Array.isArray(el.clerkList) ? el.clerkList : [];
el.clerkList = el.clerkList.map(item => {
// this.$set(item, 'disabled', this.multiple ? item.hmStatus == 1 || item.hmStatus == 2 : item.hmStatus == 1 || item.hmStatus == 2 || item.hmStatus == 3);
item.disabled = this.multiple ? item.hmStatus == 1 || item.hmStatus == 2 : item.hmStatus == 1 || item.hmStatus == 2 || item.hmStatus == 3;
item.disabled = false;
// this.$set(
// item,
// 'selected',
// this.data.some(clerk => clerk.clerkId == item.clerkId)
// );
item.selected = this.data.some(clerk => clerk.clerkId == item.clerkId);
return item;
});
this.$set(el, 'disabled', el.clerkList == 0 || el.clerkList.every(el => el.disabled));
// el.disabled = el.clerkList == 0 || el.clerkList.every(el => el.disabled);
this.$set(el, 'selected', el.clerkList.length > 0 && el.clerkList.every(el => el.selected));
// el.selected = el.clerkList.length > 0 && el.clerkList.every(el => el.selected);
this.$set(el, 'indeterminate', !el.selected && el.clerkList.some(el => el.selected));
// el.indeterminate = !el.selected && el.clerkList.some(el => el.selected);
return el;
});
});
}, },
// 解析备注 // 解析备注
formatRemark(status) { formatRemark(status) {
...@@ -181,18 +173,82 @@ export default { ...@@ -181,18 +173,82 @@ export default {
} }
return result; return result;
}, },
// 全选所有导购
onSelectAll() {
// 只能全选本页,或者取消本页的全选
this.storeClerkList.forEach(el => {
if (!el.disabled && this.selected.length < this.max) {
el.selected = this.selectAll;
this.onSelectStore(el, true);
}
});
// 计算全选的选中状态,计算半选的选中状态
this.selectAll = this.storeClerkList.filter(el => !el.disabled).every(el => el.selected);
this.indeterminate = !this.selectAll && this.storeClerkList.filter(el => !el.disabled).some(el => el.selected || el.indeterminate);
},
// 全选门店下的导购
onSelectStore(store, isAll) {
store.clerkList.forEach(el => {
if (!el.disabled && this.selected.length < this.max) {
el.selected = store.selected;
this.onSelectClerk(el, store, true);
}
});
// 计算门店的选中状态,计算门店的半选状态
store.selected = store.clerkList.filter(el => !el.disabled).every(el => el.selected);
store.indeterminate = !store.selected && store.clerkList.some(el => el.selected);
if (!isAll) {
// 计算全选的选中状态,计算半选的选中状态
this.selectAll = this.storeClerkList.filter(el => !el.disabled).every(el => el.selected);
this.indeterminate = !this.selectAll && this.storeClerkList.filter(el => !el.disabled).some(el => el.selected || el.indeterminate);
}
},
// 选择单个导购 // 选择单个导购
onSelectClerk(clerk) { onSelectClerk(clerk, store, isAll) {
// 单选时只能选一个导购,不存在全选门店和全选所有的选择框
if (!this.multiple) {
if (this.selected.length > 0) {
this.selected[0].selected = false;
this.selected = [];
}
this.selected.push(clerk);
return;
}
// 选择单个导购时
if (clerk.selected) {
// 计算有没有超过上限
if (this.selected.length < this.max) {
this.selected.push(clerk);
} else {
this.$message.warning(`最多只能选择 ${this.max} 个导购`);
}
} else {
const index = this.selected.findIndex(el => el.clerkId == clerk.clerkId); const index = this.selected.findIndex(el => el.clerkId == clerk.clerkId);
index == -1 ? this.selected.push(clerk) : this.selected.splice(index, 1); this.selected.splice(index, 1);
}
if (!isAll) {
// 计算门店的选中状态,计算门店的半选状态
store.selected = store.clerkList.filter(el => !el.disabled).every(el => el.selected);
store.indeterminate = !store.selected && store.clerkList.some(el => el.selected);
// 计算全选的选中状态,计算半选的选中状态
this.selectAll = this.storeClerkList.filter(el => !el.disabled).every(el => el.selected);
this.indeterminate = !this.selectAll && this.storeClerkList.some(el => el.selected || el.indeterminate);
}
}, },
onDelAll() { onDelAll() {
this.selected.splice(0); this.selectAll = false;
this.onSelectAll();
}, },
onDel(index) { onDel(index) {
this.selected.splice(index, 1); const clerk = this.selected[index];
clerk.selected = false;
this.onSelectClerk(
clerk,
this.storeClerkList.find(el => el.clerkList.some(item => item.clerkId == clerk.clerkId))
);
}, },
onCancel() { onCancel() {
this.selected = [];
this.$emit('update:visible', false); this.$emit('update:visible', false);
}, },
onSave() { onSave() {
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<el-table-column prop="" label="基本信息" show-overflow-tooltip min-width="210px" fixed> <el-table-column prop="" label="基本信息" show-overflow-tooltip min-width="210px" fixed>
<template> <template>
<div class="flex"> <div class="flex">
<img class="image-40" src="../../../../assets/data/time.png" /> <img class="image-40" src="@/assets/user-default.svg" />
<div class="p-l-10 line-20" style="width: calc(100% - 50px);"> <div class="p-l-10 line-20" style="width: calc(100% - 50px);">
<div class="flex text-ellipsis"> <div class="flex text-ellipsis">
<span class="text-ellipsis">飞扬飞扬飞扬飞扬飞扬飞扬飞扬</span> <span class="text-ellipsis">飞扬飞扬飞扬飞扬飞扬飞扬飞扬</span>
...@@ -185,15 +185,11 @@ export default { ...@@ -185,15 +185,11 @@ export default {
}, },
mounted() { mounted() {
let that = this; let that = this;
// that.$emit('showTab', '1');
that.getTableList(); that.getTableList();
} }
}; };
</script> </script>
<style type="text/scss" lang="scss" scoped> <style type="text/scss" lang="scss" scoped>
.w-123 {
width: 123px;
}
.p-20 { .p-20 {
padding: 20px; padding: 20px;
box-sizing: border-box; box-sizing: border-box;
......
...@@ -3,17 +3,16 @@ ...@@ -3,17 +3,16 @@
<div class="border-box"> <div class="border-box">
<div class="list-body flex"> <div class="list-body flex">
<div class="list-left border-box"> <div class="list-left border-box">
<group-list ref="groupListRef"></group-list> <group-list ref="groupListRef" @updateList="getCurrentGroupID"></group-list>
</div> </div>
<div class="list-right p-20 border-box"> <div class="list-right p-20 border-box">
<dm-sub-title text="配置标签" class="m-b-10"> <dm-sub-title text="配置标签" class="m-b-10">
<div class="title"> <div class="title">
<span>员工活码</span> <span>员工活码</span>
<span class="info-content cur-po"><i class="el-icon-info info-icon"></i>指标说明</span> <span class="info-content cur-po"><i class="iconfont-hb3 iconzhibiaoshuoming info-icon"></i>指标说明</span>
</div> </div>
</dm-sub-title> </dm-sub-title>
<select-clerk @change="onChange"></select-clerk> <act-code-table :currentGroupId="currentGroupId"></act-code-table>
<act-code-table></act-code-table>
</div> </div>
</div> </div>
</div> </div>
...@@ -22,20 +21,31 @@ ...@@ -22,20 +21,31 @@
<script> <script>
import GroupList from './views/group-list.vue'; import GroupList from './views/group-list.vue';
import ActCodeTable from './views/act-code-table.vue'; import ActCodeTable from './views/act-code-table.vue';
import SelectClerk from '../components/select-clerk/index.vue';
export default { export default {
name: 'staffActCode', name: 'staffActCode',
components: { components: {
GroupList, GroupList,
ActCodeTable, ActCodeTable
SelectClerk
}, },
data() { data() {
return {}; return {
currentGroupId: null
};
}, },
methods: { methods: {
onChange(data) { getCurrentGroupID(CurGroupId) {
console.log(data); this.currentGroupId = CurGroupId;
}
},
watch: {
currentGroupId: {
handler: function(val) {
console.log(val, 111);
if (val != null) {
this.currentGroupId = val;
}
},
immediate: true
} }
} }
}; };
......
...@@ -7,13 +7,13 @@ ...@@ -7,13 +7,13 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="searchForm.storeSearch" style="width: 130px"> <el-select v-model="searchForm.storeSearch" placeholder="请选择" style="width: 128px" @change="searchList">
<el-option label="成员所属门店" :value="1"></el-option> <el-option label="成员所属门店" :value="1"></el-option>
<el-option label="使用成员" :value="2"></el-option> <el-option label="使用成员" :value="2"></el-option>
</el-select> </el-select>
<!-- <el-select v-model="searchForm.searchInfo" filterable remote :placeholder="`${storeSearch == 1 ? '门店名称' : '成员姓名'} / code`" :remote-method="remoteMethod" :loading="selectLoading" style="margin-left: -4px" @change="searchList"> <el-select v-model="searchForm.searchInfo" filterable remote :placeholder="`请输入${searchForm.storeSearch == 1 ? '门店名称' : '成员姓名'} / code`" :remote-method="remoteMethods" :loading="selectLoading" @change="searchList" style="margin-left: -4px; width:196px;">
<el-option v-for="item in memberOrShopList" :key="item.value" :label="item.label" :value="item.value"> </el-option> <el-option v-for="item in memberOrShopList" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select> --> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="searchForm.statusFlag" placeholder="全部状态" clearable class="w160" @change="searchList"> <el-select v-model="searchForm.statusFlag" placeholder="全部状态" clearable class="w160" @change="searchList">
...@@ -30,15 +30,15 @@ ...@@ -30,15 +30,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-date-picker v-model="searchForm.dateTime" @change="searchList" :picker-options="pickerOptions" :editable="false" :value-format="'yyyy-MM-dd HH:mm:ss'" type="datetimerange" align="right" unlink-panels range-separator="至" start-placeholder="创建开始日期" end-placeholder="创建结束日期"> </el-date-picker> <el-date-picker v-model="dateTime" @change="searchList" :picker-options="pickerOptions" :editable="false" :value-format="'yyyy-MM-dd HH:mm:ss'" type="datetimerange" align="right" unlink-panels range-separator="至" start-placeholder="创建开始日期" end-placeholder="创建结束日期"> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item class="fr"> <el-form-item class="frmbt20">
<el-button>批量分组</el-button> <el-button @click="batchGoupEvent">批量分组</el-button>
<el-button class="ghost-btn " @click="$router.push('/actCodeBatch')">批量创建活码</el-button> <el-button class="ghost-btn " @click="$router.push('/actCodeBatch')">批量创建活码</el-button>
<el-button type="primary" @click="$router.push('/actCodeAdd')">新增活码</el-button> <el-button type="primary" @click="$router.push('/actCodeAdd')">新增活码</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table ref="actCodeTableRef" v-loading="loadingStatus" :data="actCodeList" tooltip-effect="dark" class="act-code-table" @sort-change="sortChange" :max-height="tableMaxHeight"> <el-table ref="actCodeTableRef" v-loading="loadingStatus" :data="actCodeList" tooltip-effect="dark" class="act-code-table" @sort-change="sortChange" :max-height="tableMaxHeight" @select="selectTable">
<el-table-column type="selection" width="60" fixed> </el-table-column> <el-table-column type="selection" width="60" fixed> </el-table-column>
<el-table-column width="60" class-name="table-select-cell" fixed> <el-table-column width="60" class-name="table-select-cell" fixed>
<template #header> <template #header>
...@@ -113,12 +113,12 @@ ...@@ -113,12 +113,12 @@
</el-table-column> </el-table-column>
<el-table-column label="创建人" width="100"> <el-table-column label="创建人" width="100">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<p>{{ row.hmId }}</p> <p>{{ row.creatorName }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" sortable="custom" width="120"> <el-table-column label="创建时间" sortable="custom" width="120">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<p>{{ row.hmId }}</p> <p>{{ row.createTime }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="300" fixed="right"> <el-table-column label="操作" width="300" fixed="right">
...@@ -130,15 +130,47 @@ ...@@ -130,15 +130,47 @@
<div class="block common-wrap__page text-right m-t-24" v-if="actCodeList.length != 0"> <div class="block common-wrap__page text-right m-t-24" v-if="actCodeList.length != 0">
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageParam.pageNum" :page-sizes="[20, 40, 60, 80]" :page-size="pageParam.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalCount"> </dm-pagination> <dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageParam.pageNum" :page-sizes="[20, 40, 60, 80]" :page-size="pageParam.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalCount"> </dm-pagination>
</div> </div>
<el-dialog title="选择分组" :visible.sync="dialogGroupFormVisible" width="25%">
<el-form :model="formGroup">
<el-form-item label="活动区域" :rules="[{ required: true, message: '请选择分组', trigger: 'blur' }]">
<el-select v-model="formGroup.groupList" placeholder="选择分组" v-loadmore="onLoadmore" remote multiple filterable :remote-method="remoteMethod" @visible-change="visibleChange">
<el-option v-for="item in groupList" :key="item.groupId" :label="item.groupName" :value="item.groupId"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogGroupFormVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogGroupFormVisible = false">确 定</el-button>
</div>
</el-dialog>
</section> </section>
</template> </template>
<script> <script>
import { actCodeListApi } from '@/api/actCode.js'; import { actCodeListApi } from '@/api/actCode.js';
// import errMsg from '@/common/js/error'; // import errMsg from '@/common/js/error';
import { deleteRequest } from '@/api/api'; import { deleteRequest, getRequest } from '@/api/api';
export default { export default {
name: 'actCodeTable', name: 'actCodeTable',
directives: {
loadmore: {
inserted(el, binding) {
const SELECTDOWN_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
SELECTDOWN_DOM.addEventListener('scroll', function() {
const CONDITION = this.scrollHeight + this.scrollTop >= this.clientHeight;
if (CONDITION) {
binding.value();
}
});
}
}
},
props: {
currentGroupId: {
type: [Number, String],
default: null
}
},
data() { data() {
let tableMaxHeight = document.body.clientHeight - 312 + 'px'; let tableMaxHeight = document.body.clientHeight - 312 + 'px';
return { return {
...@@ -149,10 +181,11 @@ export default { ...@@ -149,10 +181,11 @@ export default {
statusFlag: '', statusFlag: '',
storeSearch: 1, storeSearch: 1,
hmType: '', hmType: '',
dateTime: '',
createTimeStart: '', createTimeStart: '',
createTimeEnd: '' createTimeEnd: ''
}, },
dateTime: [],
tableData: [], tableData: [],
total: 1, total: 1,
totalCount: 100, totalCount: 100,
...@@ -279,7 +312,7 @@ export default { ...@@ -279,7 +312,7 @@ export default {
text: '数据', text: '数据',
visible: true, visible: true,
handler: row => { handler: row => {
console.log(row); this.$router.push(`/actCodeDetail?hmId=${row.hmId}`);
} }
}, },
{ {
...@@ -308,8 +341,13 @@ export default { ...@@ -308,8 +341,13 @@ export default {
text: '作废', text: '作废',
visible: true, visible: true,
handler: row => { handler: row => {
const aa = deleteRequest('/hm/qrcode/del', { hmId: row.hmId }); this.$confirm('确认要作废该活码?此操作将永久废弃该活码,请确保不影响其他投放使用!', '作废提示', {
return console.log(aa, 'aa'); confirmButtonText: '删除',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteRequest('/hm/qrcode/del', { hmId: row.hmId }).then(res => {});
});
} }
} }
], ],
...@@ -331,13 +369,75 @@ export default { ...@@ -331,13 +369,75 @@ export default {
}, },
sortColumn: '', sortColumn: '',
sortType: '', sortType: '',
multipleSelection: [] multipleSelection: [],
selectHmIds: [],
dialogGroupFormVisible: false,
formGroup: {
groupList: []
},
groupList: [],
pageParamGroup: {
search: '',
pageNum: 1,
pageSize: 20,
total: 1
}
}; };
}, },
created() { created() {
this.getTableList(); this.getTableList();
this.searchGroup();
}, },
methods: { methods: {
onLoadmore() {
if (this.pageParamGroup.pageNum >= this.pageParamGroup.total) return;
this.pageParamGroup.pageNum++;
this.searchGroup();
},
async searchGroup() {
if (this.pageParamGroup.pageNum == 1) {
this.groupList = [];
}
await getRequest('/haoban-manage3-web/hm/group/list', this.pageParamGroup).then(res => {
if (res.data.code == 0) {
const { result, pages } = res.data.result || {};
this.pageParamGroup.total = pages;
// console.log(this.groupList, 'list');
if (Array.isArray(result)) {
this.groupList = this.groupList.concat(result);
}
}
});
},
// 远程搜索
remoteMethod(query) {
if (query !== '') {
this.pageParamGroup.search = query;
this.pageParamGroup.pageNum = 1;
this.groupList = [];
this.searchGroup();
} else {
this.groupList = [];
}
},
visibleChange(e) {
if (!e) {
this.remoteMethod();
}
},
// 表格选中事件
selectTable(selection, row) {
console.log(selection);
this.selectHmIds = selection.map(item => {
return item.hmId;
});
console.log(this.selectHmIds, 'iss');
},
// 批量分组
batchGoupEvent() {
console.log('批量分组');
this.dialogGroupFormVisible = true;
},
onCommand() { onCommand() {
console.log('hello'); console.log('hello');
}, },
...@@ -347,16 +447,15 @@ export default { ...@@ -347,16 +447,15 @@ export default {
// 当前页变化 // 当前页变化
handleCurrentChange(val) { handleCurrentChange(val) {
this.pageParam.pageNum = val; this.pageParam.pageNum = val;
sessionStorage.setItem('pageNum', val); this.getTableList();
// this.getAjaxMembers();
}, },
// 页码 // 页码
handleSizeChange(val) { handleSizeChange(val) {
this.pageParam.pageNum = 1;
this.pageParam.pageSize = val; this.pageParam.pageSize = val;
this.getTableList(); this.getTableList();
// this.getAjaxMembers();
}, },
remoteMethod(query) { remoteMethods(query) {
console.log(query); console.log(query);
}, },
// 排序 // 排序
...@@ -379,15 +478,22 @@ export default { ...@@ -379,15 +478,22 @@ export default {
}, },
getTableList() { getTableList() {
this.loadingStatus = true; this.loadingStatus = true;
if (this.dateTime && this.dateTime.length) {
this.searchForm.createTimeStart = this.dateTime ? Date.parse(new Date(this.dateTime[0]).toString()) : '';
this.searchForm.createTimeEnd = this.dateTime ? Date.parse(new Date(this.dateTime[1]).toString()) : '';
}
this.searchForm = {
...this.searchForm
};
if (this.currentGroupId != null) {
this.searchForm = { this.searchForm = {
...this.searchForm, ...this.searchForm,
createTimeStart: this.dateTime ? Date.parse(new Date(this.searchForm.dateTime[0]).toString()) : '', hmGroupId: this.currentGroupId
createTimeEnd: this.dateTime ? Date.parse(new Date(this.searchForm.dateTime[1]).toString()) : ''
}; };
delete this.searchForm.dateTime; }
// delete this.searchForm.dateTime;
actCodeListApi(Object.assign({}, this.searchForm, this.pageParam)) actCodeListApi(Object.assign({}, this.searchForm, this.pageParam))
.then(res => { .then(res => {
console.log(res, 'res11');
// this.totalCount = res.data.result.totalCount || 0; // this.totalCount = res.data.result.totalCount || 0;
// if (res.data.result.result.length && Array.isArray(res.data.result.result)) { // if (res.data.result.result.length && Array.isArray(res.data.result.result)) {
// this.tableData = [].concat(res.data.result.result); // this.tableData = [].concat(res.data.result.result);
...@@ -421,11 +527,32 @@ export default { ...@@ -421,11 +527,32 @@ export default {
// }); // });
// }); // });
// } // }
},
watch: {
currentGroupId: {
handler: function(val) {
if (val != null) {
this.currentGroupId = val;
this.pageParam.pageNum = 1;
this.getTableList();
}
},
immediate: true
}
} }
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.frmbt20 {
margin-bottom: 20px !important;
margin-right: 0 !important;
float: right;
padding-right: 0 !important;
}
.ml10 {
margin-left: 10px;
}
.w160 { .w160 {
width: 160px; width: 160px;
} }
......
...@@ -9,13 +9,14 @@ ...@@ -9,13 +9,14 @@
</el-form-item> </el-form-item>
</template> </template>
<template #member> <template #member>
<el-form-item label="使用成员" prop="memberType"> <el-form-item label="使用成员" :rules="[{ required: true, message: '请选择使用成员', trigger: 'blur' }]">
<el-radio-group v-model="form.memberType"> <el-radio-group v-model="form.memberType">
<el-radio :label="1">全部成员</el-radio> <el-radio :label="1">全部成员</el-radio>
<el-radio :label="2">部分成员</el-radio> <el-radio :label="2">部分成员</el-radio>
</el-radio-group> </el-radio-group>
<br /> <br />
<el-button plain class="ylbtn" v-if="form.memberType == 2"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加成员</el-button> <!-- <el-button plain class="ylbtn" v-if="form.memberType == 2"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加成员</el-button> -->
<select-clerk v-if="form.memberType == 2" @change="onChange"></select-clerk>
</el-form-item> </el-form-item>
</template> </template>
</setActCode> </setActCode>
...@@ -23,18 +24,24 @@ ...@@ -23,18 +24,24 @@
</template> </template>
<script> <script>
import setActCode from '../../../components/actCodeSet.vue'; import setActCode from '@/views/salesleads/components/actCodeSet.vue';
import SelectClerk from '../../components/select-clerk/index.vue';
export default { export default {
components: { setActCode }, components: { setActCode, SelectClerk },
data() { data() {
return { return {
form: { form: {
hmType: 1, hmType: 1,
clerkIdList: 1,
memberType: 1 memberType: 1
} }
}; };
}, },
methods: {} methods: {
onChange(data) {
console.log(data);
}
}
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
......
<template> <template>
<section> <section>
<div class="mb-10 mt-20 pl-16 pr-15"> <div class="mb-10 mt-20 pl-16 pr-15">
<el-input placeholder="请输入分组名称" maxlength="50" v-model="searchGroupInput" @keyup.native="value => searchGroup(value)"> <!-- @keyup.native="value => searchGroup(value)" -->
<el-input placeholder="请输入分组名称" maxlength="50" v-model="searchGroupInput" @change="searchGroup">
<i slot="prefix" class="el-input__icon el-icon-search"></i> <i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input> </el-input>
</div> </div>
...@@ -12,15 +13,21 @@ ...@@ -12,15 +13,21 @@
<span :title="listItem.groupName" class="listItemName overflow-ellipsis">{{ listItem.groupName }}</span> <span :title="listItem.groupName" class="listItemName overflow-ellipsis">{{ listItem.groupName }}</span>
<span>{{ `(${listItem.referNum})` }}</span> <span>{{ `(${listItem.referNum})` }}</span>
</div> </div>
<el-popover placement="bottom" trigger="hover" v-if="isShowGroupListItemMore(listItem)"> <el-popover placement="bottom" trigger="click" v-if="isShowGroupListItemMore(listItem)">
<p class="more" @click="editGroupListItem(listItem)">编辑</p> <p class="more" @click="editGroupListItem(listItem)">编辑</p>
<p class="more" @click="delGroupListItem(listItem)" v-if="!listItem.referNum">删除</p> <p class="more" @click="delGroupListItem(listItem)" v-if="!listItem.referNum">删除</p>
<i slot="reference" class="iconfont-hb3 icongengduo icon"></i> <i slot="reference" class="iconfont-hb3 icongengduo icon iconhover" v-if="listItem.groupName != '全部分组' && listItem.groupName != '默认分组'"></i>
</el-popover> </el-popover>
</li> </li>
<li>
<div class="el-loading-spinner" style="width: 86%;" v-if="groupLoading">
<i class="el-icon-loading"></i>
</div>
</li>
</ul> </ul>
<p v-if="searchTip" class="searchTip">没有找到和“{{ searchGroupInput }}”相关的内容</p>
</div> </div>
<div class="add-category"> <div class="add-category" v-if="searchGroupInput == ''">
<el-button type="primary" class="ghost-btn add-group" @click="addGroup">新增分组</el-button> <el-button type="primary" class="ghost-btn add-group" @click="addGroup">新增分组</el-button>
</div> </div>
<!-- 新增/编辑分组 --> <!-- 新增/编辑分组 -->
...@@ -45,22 +52,18 @@ import { getRequest } from '@/api/api'; ...@@ -45,22 +52,18 @@ import { getRequest } from '@/api/api';
export default { export default {
name: 'staffActCodeGroupList', name: 'staffActCodeGroupList',
data() { data() {
const groupList = [
{
groupName: '全部分组',
referNum: 11,
groupId: 1
}
// {
// groupName: '默认分组',
// referNum: 10,
// groupId: 2
// }
];
return { return {
searchTip: false,
groupLoading: false,
currentListItemUuid: 1, currentListItemUuid: 1,
searchGroupInput: '', searchGroupInput: '',
groupList: groupList, groupList: [
{
groupName: '全部分组',
referNum: '',
groupId: null
}
],
scrollLoad: false, scrollLoad: false,
title: '新增分组', title: '新增分组',
addOrEditGroupDialog: false, addOrEditGroupDialog: false,
...@@ -75,7 +78,12 @@ export default { ...@@ -75,7 +78,12 @@ export default {
// 分页相关 // 分页相关
pageNum: 1, pageNum: 1,
allPageNum: 1, allPageNum: 1,
pageSize: 20,
pageP: {
groupName: '',
pageNum: 1,
pageSize: 20 pageSize: 20
}
}; };
}, },
created() { created() {
...@@ -83,19 +91,8 @@ export default { ...@@ -83,19 +91,8 @@ export default {
}, },
methods: { methods: {
load() { load() {
// const length = this.groupList.length; if (this.allPageNum > this.pageP.pageNum) {
// if (length > 50) { this.pageP.pageNum++;
// return (this.scrollLoad = true);
// }
// for (let index = 0; index < 6; index++) {
// this.groupList.push({
// groupName: '单人分组',
// number: length + index,
// groupId: length + index
// });
// }
if (this.allPageNum > this.pageNum) {
this.pageNum++;
this.searchGroup(); this.searchGroup();
} else { } else {
this.scrollLoad = true; this.scrollLoad = true;
...@@ -103,6 +100,7 @@ export default { ...@@ -103,6 +100,7 @@ export default {
}, },
clickGroupListItem(listItem) { clickGroupListItem(listItem) {
this.currentListItemUuid = listItem.groupId; this.currentListItemUuid = listItem.groupId;
this.$emit('updateList', this.currentListItemUuid);
}, },
isShowGroupListItemMore(listItem) { isShowGroupListItemMore(listItem) {
const hiddenListItemMore = [1, 2]; const hiddenListItemMore = [1, 2];
...@@ -173,7 +171,6 @@ export default { ...@@ -173,7 +171,6 @@ export default {
}; };
res = await addActCodeGroupApi(params); res = await addActCodeGroupApi(params);
} }
// return console.log(res, 'res');
if (res.data.code == 0) { if (res.data.code == 0) {
this.$message({ this.$message({
type: 'success', type: 'success',
...@@ -184,7 +181,7 @@ export default { ...@@ -184,7 +181,7 @@ export default {
const groupListItem = this.groupList.find(({ groupId }) => groupId == this.groupListForm.groupId); const groupListItem = this.groupList.find(({ groupId }) => groupId == this.groupListForm.groupId);
groupListItem.groupName = this.groupListForm.groupName; groupListItem.groupName = this.groupListForm.groupName;
} else { } else {
this.pageNum = 1; this.pageP.pageNum = 1;
this.searchGroup(); this.searchGroup();
} }
this.addOrEditGroupDialog = false; this.addOrEditGroupDialog = false;
...@@ -198,34 +195,31 @@ export default { ...@@ -198,34 +195,31 @@ export default {
}); });
}, },
async searchGroup(val) { async searchGroup(val) {
this.groupLoading = true;
const countNum = await getRequest('/haoban-manage3-web/hm/group/refer/count', {}); const countNum = await getRequest('/haoban-manage3-web/hm/group/refer/count', {});
// this.groupList[0].referNum = countNum.data.result; if (this.pageP.pageNum == 1) {
if (this.pageNum == 1) { this.groupList[0].referNum = countNum.data.result;
this.groupList = [];
} }
this.pageNum < this.allPageNum && this.pageNum++; // this.pageP.pageNum < this.allPageNum && this.pageP.pageNum++;
const params = {
pageNum: this.pageNum,
pageSize: this.pageSize
};
if (String(this.searchGroupInput)) { if (String(this.searchGroupInput)) {
params.groupName = this.searchGroupInput; this.pageP.pageNum = 1;
this.pageP.groupName = this.searchGroupInput;
this.groupList = [];
} }
await getRequest('/haoban-manage3-web/hm/group/list', params).then(res => { await getRequest('/haoban-manage3-web/hm/group/list', this.pageP).then(res => {
if (res.data.code == 0) { if (res.data.code == 0) {
const { list, pageInfo } = res.data.result || {}; const { result, pages } = res.data.result || {};
// if (Array.isArray(list)) { this.groupList = this.groupList.concat(result);
// list.reduce((pre, cur) => pre.push(cur), this.groupList); if (this.searchGroupInput == '') {
// } this.searchTip = false;
this.groupList = list; } else if (this.searchGroupInput != '') {
this.groupList.unshift({ this.groupList.splice(0, 1);
groupName: '全部分组', if (this.groupList.length <= 0) {
referNum: 11, this.searchTip = true;
groupId: null }
}); }
this.groupList[0].referNum = countNum.data.result; this.allPageNum = pages || 1;
console.log(this.groupList, '444'); this.groupLoading = false;
this.allPageNum = pageInfo.pages || 1;
} }
}); });
} }
...@@ -259,10 +253,17 @@ export default { ...@@ -259,10 +253,17 @@ export default {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
padding: 0 5px 0 10px; padding: 0 5px 0 10px;
&:hover, &:hover {
color: #303133;
background: #f2f3f5;
}
&.active-li { &.active-li {
color: #2f54eb; color: #2f54eb;
background: #ebeffe; background: #ebeffe;
.iconhover:hover,
.iconhover:active {
background: #d8defc;
}
} }
} }
.more { .more {
...@@ -294,4 +295,11 @@ export default { ...@@ -294,4 +295,11 @@ export default {
font-size: 12px; font-size: 12px;
color: #909399; color: #909399;
} }
.searchTip {
width: 100%;
text-align: center;
margin-top: 80%;
color: #909399;
font-size: 14px;
}
</style> </style>
<template> <template>
<div> <div>
<setActCode> <setActCode @submit="submit">
<template #typeCode> <template #typeCode>
<el-form-item label="活码类型" prop="hmType"> <el-form-item label="活码类型" prop="hmType">
<el-radio-group v-model="form.hmType"> <el-radio-group v-model="form.hmType" @change="changeEvent">
<el-radio :label="1">单人活码</el-radio> <el-radio :label="1">单人活码</el-radio>
<el-radio :label="2">多人活码</el-radio> <el-radio :label="2">多人活码</el-radio>
</el-radio-group> </el-radio-group>
...@@ -15,10 +15,11 @@ ...@@ -15,10 +15,11 @@
</el-form-item> </el-form-item>
</template> </template>
<template #member> <template #member>
<el-form-item label="使用成员" prop="memberList"> <el-form-item label="使用成员" prop="clerkIdList">
<p class="tabs" v-if="form.hmType == 1">单人活码仅可选择一名成员</p> <p class="tabs" v-if="form.hmType == 1">单人活码仅可选择一名成员</p>
<p class="tabs" v-if="form.hmType == 2">若选择多名成员,则随机分配企微员工</p> <p class="tabs" v-if="form.hmType == 2">若选择多名成员,则随机分配企微员工</p>
<el-button plain class="ylbtn"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加成员</el-button> <!-- <el-button plain class="ylbtn"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加成员</el-button> -->
<select-clerk :multiple="multiple" :data="data" @change="onChange"></select-clerk>
</el-form-item> </el-form-item>
</template> </template>
</setActCode> </setActCode>
...@@ -26,56 +27,69 @@ ...@@ -26,56 +27,69 @@
</template> </template>
<script> <script>
import setActCode from '../../../components/actCodeSet.vue'; import setActCode from '@/views/salesleads/components/actCodeSet.vue';
// import { getRequest } from '@/api/api'; import SelectClerk from '../../components/select-clerk/index.vue';
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error'; import errMsg from '@/common/js/error';
export default { export default {
components: { setActCode }, components: { setActCode, SelectClerk },
created() {
console.log(this.$route.query, 7878);
},
data() { data() {
return { return {
loading: false, loading: false,
form: { form: {
hmType: 1, hmType: 1,
name: '', name: '',
memberList: [] clerkIdList: []
} },
multiple: false
}; };
}, },
created() {
if (this.$route.query.hmId) {
this.getActCodeInfo();
}
},
methods: { methods: {
onChange(data) {
console.log(data);
this.data = data.map(item => {
return item.clerkName;
});
if (this.form.name == '') {
this.form.name = this.data.toString();
}
console.log(this.data, 909);
},
async getActCodeInfo() { async getActCodeInfo() {
const that = this; const that = this;
that.actCode = '999'; if (this.$route.query.hmId) return;
if (that.actCode.length <= 0) return;
that.loading = true; that.loading = true;
// getRequest('/hm/qrcode/detail', { hmId: that.actCode }) await getRequest('/hm/qrcode/detail', { hmId: this.$route.query.hmId }).then(res => {
// .then(res => { console.log(res, 'detail');
let res = { // let res = {
data: { // data: {
errorCode: 1, // errorCode: 1,
result: { // result: {
name: '测试活码好的可以', // name: '测试活码好的可以',
hmId: '727363646474849483332', // hmId: '727363646474849483332',
statusFlag: 1, // statusFlag: 1,
overFlag: 1, // overFlag: 1,
hmType: 2, // hmType: 2,
creatorName: '少见多怪', // creatorName: '少见多怪',
createTime: 182736347383, // createTime: 182736347383,
passFlag: 0, // passFlag: 0,
welcomeId: 'b680a2cf18b742cc9f4560f6195c9ec6', // welcomeId: 'b680a2cf18b742cc9f4560f6195c9ec6',
enterpriseId: '5bd929fd3b2c49deaa1184bcb0d669b3' // enterpriseId: '5bd929fd3b2c49deaa1184bcb0d669b3'
} // }
} // }
}; // };
let resData = res.data; let resData = res.data;
that.loading = false; that.loading = false;
if (resData.errorCode == 1) { // if (resData.errorCode == 1) {
that.statusIndex = resData.result.statusFlag == 1 && resData.result.overFlag == 1 ? 4 : resData.result.statusFlag; // that.statusIndex = resData.result.statusFlag == 1 && resData.result.overFlag == 1 ? 4 : resData.result.statusFlag;
that.codeInfo = resData.result; // that.codeInfo = resData.result;
return; // return;
} // }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
// }) // })
// .catch(function(error) { // .catch(function(error) {
...@@ -83,7 +97,17 @@ export default { ...@@ -83,7 +97,17 @@ export default {
// duration: 1000, // duration: 1000,
// message: error.message // message: error.message
// }); // });
// }); });
},
submit(a) {
console.log(a);
},
changeEvent(e) {
if (e == 2) {
this.multiple = true;
} else if (e == 1) {
this.multiple = false;
}
} }
} }
}; };
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
<el-form class="mt20" ref="form" :model="form" :rules="rules" label-width="110px"> <el-form class="mt20" ref="form" :model="form" :rules="rules" label-width="110px">
<slot name="typeCode"></slot> <slot name="typeCode"></slot>
<slot name="codeName"></slot> <slot name="codeName"></slot>
<el-form-item label="活码分组" prop="actGroup"> <el-form-item label="活码分组" prop="hmGroupId">
<el-select class="w340" filterable v-model="form.actGroup"> <el-select class="w340" v-model="form.hmGroupId" v-loadmore="onLoadmore" clearable remote multiple filterable :remote-method="remoteMethod">
<el-options v-for="(item, index) in groupList" :key="index"></el-options> <el-option v-for="item in groupList" :key="item.groupId" :label="item.groupName" :value="item.groupId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<slot name="member"></slot> <slot name="member"></slot>
...@@ -17,27 +17,27 @@ ...@@ -17,27 +17,27 @@
</el-form-item> </el-form-item>
<el-form-item label="活码标签"> <el-form-item label="活码标签">
<el-button plain class="ylbtn" @click="tagsDialogVisible = true"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加标签</el-button> <el-button plain class="ylbtn" @click="tagsDialogVisible = true"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加标签</el-button>
<dm-memberTag-group :visiable.sync="tagsDialogVisible" :projectName="haobao - 3"></dm-memberTag-group> <!-- <dm-memberTag-group :visiable.sync="tagsDialogVisible" @save="saveTagPop"></dm-memberTag-group> -->
</el-form-item> </el-form-item>
<dm-sub-title text="欢迎语设置" type="line" class="mt40b20" /> <dm-sub-title text="欢迎语设置" type="line" class="mt40b20" />
<el-row> <el-row>
<el-col :span="17"> <el-col :span="17">
<el-form-item label="活码类型" prop="welcomes"> <el-form-item label="活码类型">
<el-radio-group v-model="form.welcomes"> <el-radio-group v-model="welcomesType">
<el-radio :label="1">活码欢迎语</el-radio> <el-radio :label="1">活码欢迎语</el-radio>
<el-radio :label="2">不发送欢迎语</el-radio> <el-radio :label="2">不发送欢迎语</el-radio>
</el-radio-group> </el-radio-group>
<ul class="tabs" v-if="form.welcomes == 1"> <ul class="tabs" v-if="welcomesType == 1">
<li>1.下方的欢迎语取自【设置-欢迎语设置】中的“特殊欢迎语”;</li> <li>1.下方的欢迎语取自【设置-欢迎语设置】中的“特殊欢迎语”;</li>
<li>2.配置“活码欢迎语”后,通过此活码添加好友后,系统自动推送此处所配置的欢迎语</li> <li>2.配置“活码欢迎语”后,通过此活码添加好友后,系统自动推送此处所配置的欢迎语</li>
<li>(根据企业微信规则,若所添加的该成员在企业微信后台已经配置了欢迎语,那么会推送企微后台所配置的欢迎语,不会推送此处的欢迎语)</li> <li>(根据企业微信规则,若所添加的该成员在企业微信后台已经配置了欢迎语,那么会推送企微后台所配置的欢迎语,不会推送此处的欢迎语)</li>
</ul> </ul>
<ul class="tabs" v-if="form.welcomes == 2"> <ul class="tabs" v-if="welcomesType == 2">
<li>通过此活码添加好友后,系统不推送欢迎语,及时在【设置-欢迎语设置】中为该成员配置了欢迎语。</li> <li>通过此活码添加好友后,系统不推送欢迎语,及时在【设置-欢迎语设置】中为该成员配置了欢迎语。</li>
<li>(根据企业微信规则,若所添加的该成员在企业微信后台已经配置了欢迎语,那么企微后台的欢迎语会照常推送)</li> <li>(根据企业微信规则,若所添加的该成员在企业微信后台已经配置了欢迎语,那么企微后台的欢迎语会照常推送)</li>
</ul> </ul>
</el-form-item> </el-form-item>
<el-form-item label="选择欢迎语" v-if="form.welcomes == 1"> <el-form-item label="选择欢迎语" v-if="welcomesType == 1">
<div class="welcomeTable"> <div class="welcomeTable">
<div class="wtabTop"> <div class="wtabTop">
<el-input class="w260" placeholder="请输入标题" v-model="pageParam.search"></el-input> <el-input class="w260" placeholder="请输入标题" v-model="pageParam.search"></el-input>
...@@ -64,11 +64,11 @@ ...@@ -64,11 +64,11 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<dm-pagination class="paginationBox" background @current-change="handleCurrentChange" :current-page="pageParam.currentPage" layout=" prev, pager, next " :page-size="4" :total="100"> </dm-pagination> <dm-pagination class="paginationBox" background @current-change="handleCurrentChange" :current-page="welcomePage.currentPage" layout=" prev, pager, next " :page-size="4" :total="100"> </dm-pagination>
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="7" v-if="form.welcomes == 1 && welcomeContent != ''"> <el-col :span="7" v-if="welcomesType == 1 && welcomeContent != ''">
<p class="welcomeTitle">欢迎语预览</p> <p class="welcomeTitle">欢迎语预览</p>
<previewWelcome :welcomeContent="welcomeContent"></previewWelcome> <previewWelcome :welcomeContent="welcomeContent"></previewWelcome>
</el-col> </el-col>
...@@ -84,8 +84,22 @@ ...@@ -84,8 +84,22 @@
<script> <script>
import previewWelcome from '../../../components/preview-welcome.vue'; import previewWelcome from '../../../components/preview-welcome.vue';
// import { findActCodeGroupListApi } from '@/api/actCode.js'; // import { findActCodeGroupListApi } from '@/api/actCode.js';
import { getRequest } from '@/api/api';
export default { export default {
name: 'setActCode', name: 'setActCode',
directives: {
loadmore: {
inserted(el, binding) {
const SELECTDOWN_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
SELECTDOWN_DOM.addEventListener('scroll', function() {
const CONDITION = this.scrollHeight + this.scrollTop >= this.clientHeight;
if (CONDITION) {
binding.value();
}
});
}
}
},
components: { previewWelcome }, components: { previewWelcome },
props: { props: {
actCodeData: { actCodeData: {
...@@ -96,56 +110,94 @@ export default { ...@@ -96,56 +110,94 @@ export default {
data() { data() {
return { return {
form: { form: {
hmType: 1, hmType: 1, //1单人 2多人
name: '', name: '', // 名称
actGroup: null, hmGroupId: null, //活码分组id
memberList: [], passFlag: 1, // 1自动通过 0否
passFlag: true, memberLabelId: '', //会员活动标签id
actLabel: null, welcomeId: null, // 欢迎语id
welcomes: 1, clerkIdList: '', // 选择导购id
chooseWelcomes: null storeId: '', //门店id
hmUserNum: null //多人活码人数
}, },
welcomesType: 1,
rules: { rules: {
hmType: [{ required: true, message: ' ', trigger: 'blur' }], hmType: [{ required: true, message: '请选择活码类型', trigger: 'blur' }],
name: [{ required: true, message: ' ', trigger: 'blur' }], name: [{ required: true, message: '请输入活码名称', trigger: 'blur' }],
actGroup: [{ required: true, message: ' ', trigger: 'blur' }], hmGroupId: [{ required: true, message: '请选择活码分组', trigger: 'blur' }],
memberList: [{ required: true, message: ' ', trigger: 'blur' }] clerkIdList: [{ required: true, message: '请选择使用成员', trigger: 'blur' }]
}, },
welcomeTableData: [], welcomeTableData: [],
tagsDialogVisible: false, tagsDialogVisible: false,
data: '',
welcome: '', welcome: '',
templateSelection: {}, templateSelection: {},
welcomeContent: '', welcomeContent: '',
pageParam: { welcomePage: {
search: '', search: '',
currentPage: 1 currentPage: 1
}, },
groupList: [] pageParam: {
search: '',
pageNum: 1,
pageSize: 20,
total: 1
},
groupList: [],
data: ''
}; };
}, },
created() { created() {
this.getWelcomeTable(); this.getWelcomeTable();
// this.searchGroup(); this.searchGroup();
}, },
methods: { methods: {
searchGroup(val) { saveTagPop(data) {
// const params = { console.log(data);
// pageNum: 1, this.data = data;
// pageSize: 4 },
// }; onLoadmore() {
// if (String(this.searchGroupInput)) { if (this.pageParam.pageNum >= this.pageParam.total) return;
// params.groupName = this.searchGroupInput; this.pageParam.pageNum++;
// } this.searchGroup();
// findActCodeGroupListApi(params).then(res => { },
// console.log(res); async searchGroup() {
// }); if (this.pageParam.pageNum == 1) {
this.groupList = [];
}
await getRequest('/haoban-manage3-web/hm/group/list', this.pageParam).then(res => {
if (res.data.code == 0) {
const { result, pages } = res.data.result || {};
this.pageParam.total = pages || 1;
// console.log(this.groupList, 'list');
if (this.pageParam.search != '') {
this.groupList = result;
} else if (Array.isArray(result)) {
this.groupList = this.groupList.concat(result);
}
// console.log(this.groupList, 909090);
}
});
},
// 远程搜索
remoteMethod(query) {
if (query !== '') {
this.pageParam.search = query;
this.pageParam.pageNum = 1;
this.groupList = [];
this.searchGroup();
} else {
this.groupList = [];
}
},
visibleChange(e) {
if (!e) {
this.remoteMethod();
}
}, },
// 当前页变化 // 当前页变化
handleCurrentChange(val) { handleCurrentChange(val) {
console.log(val); this.welcomePage.currentPage = val;
this.pageParam.currentPage = val; this.getWelcomeTable();
// this.getAjaxMembers();
}, },
// 选择欢迎语列表数据 // 选择欢迎语列表数据
getWelcomeTable() { getWelcomeTable() {
...@@ -195,15 +247,13 @@ export default { ...@@ -195,15 +247,13 @@ export default {
getCurrentRow(row) { getCurrentRow(row) {
// 获取选中数据 row表示选中这一行的数据,可以从里面提取所需要的值 // 获取选中数据 row表示选中这一行的数据,可以从里面提取所需要的值
this.templateSelection = row; this.templateSelection = row;
this.welcomeContent = this.templateSelection.welcomeContent; this.welcomeContent = row.welcomeContent;
}, this.form.welcomeId = row.welcomeId;
saveTagPop(data) {
console.log(data);
this.data = data;
}, },
// 保存按钮 // 保存按钮
sumbit() { sumbit() {
console.log('保存'); console.log(this.form, 'form保存');
this.$emit('sumbit', this.form);
} }
} }
}; };
......
...@@ -28,14 +28,14 @@ ...@@ -28,14 +28,14 @@
</el-table-column> </el-table-column>
<el-table-column label="企微号"> <el-table-column label="企微号">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<p class="overflow-ellipsis" :title="row.qw">{{ row.qw }}</p> <p class="overflow-ellipsis" :title="row.staffName">{{ row.staffName }}</p>
<p>{{ row.qwCode }}</p> <!-- <p>{{ row.staffCode }}</p> -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="新增总人数" prop="addFriendNumTd" sortable></el-table-column> <el-table-column label="新增总人数" prop="addNumT" sortable></el-table-column>
<el-table-column label="今日新增总人数" prop="addFriendNumD" sortable></el-table-column> <el-table-column label="今日新增总人数" prop="addNum" sortable></el-table-column>
<el-table-column label="今日流失人数" prop="toadyLess" sortable></el-table-column> <!-- <el-table-column label="今日流失人数" prop="toadyLess" sortable></el-table-column>
<el-table-column label="流失总人数" prop="lessTotal" sortable></el-table-column> <el-table-column label="流失总人数" prop="lessTotal" sortable></el-table-column> -->
<el-table-column label="今日已达上限" prop="overFlag"> <el-table-column label="今日已达上限" prop="overFlag">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<p>{{ row.overFlag == 1 ? '是' : '否' }}</p> <p>{{ row.overFlag == 1 ? '是' : '否' }}</p>
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-button type="text" @click="lookRecords(row.hmId)">查看记录</el-button> <el-button type="text" @click="lookRecords(row)">查看记录</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -59,6 +59,10 @@ export default { ...@@ -59,6 +59,10 @@ export default {
id: { id: {
type: String, type: String,
default: '' default: ''
},
typeT: {
type: String,
default: 'code'
} }
}, },
data() { data() {
...@@ -72,6 +76,10 @@ export default { ...@@ -72,6 +76,10 @@ export default {
], ],
tableData: [], tableData: [],
pageParam: { pageParam: {
hmId: '',
linkId: '',
startTime: '',
endTime: '',
storeSearch: '', storeSearch: '',
clerkSearch: '', clerkSearch: '',
pageNum: 1, pageNum: 1,
...@@ -86,12 +94,8 @@ export default { ...@@ -86,12 +94,8 @@ export default {
return { return {
onPick(obj) { onPick(obj) {
pickerMinDate = obj.minDate; pickerMinDate = obj.minDate;
// console.log(pickerMinDate);
}, },
disabledDate(time) { disabledDate(time) {
// const date = new Date();
// const year = date.getFullYear();
// return time.getTime() > Date.now() || time.getTime() < date.setFullYear(year - 2);
let start = new Date(); let start = new Date();
start = new Date(`${start.getFullYear()}-${start.getMonth() + 1}-${start.getDate()}`); start = new Date(`${start.getFullYear()}-${start.getMonth() + 1}-${start.getDate()}`);
let start2 = new Date(pickerMinDate); let start2 = new Date(pickerMinDate);
...@@ -100,9 +104,9 @@ export default { ...@@ -100,9 +104,9 @@ export default {
let end2 = new Date(pickerMinDate); let end2 = new Date(pickerMinDate);
if (pickerMinDate) { if (pickerMinDate) {
start = start.setFullYear(start.getFullYear() - 2); start = start.setFullYear(start.getFullYear() - 2);
start2 = start2.setDate(start2.getDate() - 60); start2 = start2.setMonth(start2.getMonth() - 6);
start = start > start2 ? start : start2; start = start > start2 ? start : start2;
end2 = end2.setDate(end2.getDate() + 60); end2 = end2.setMonth(end2.getMonth() + 6);
end = end.getTime() > end2 ? end2 : end.getTime(); end = end.getTime() > end2 ? end2 : end.getTime();
// console.log('end2', end2, end); // console.log('end2', end2, end);
} else { } else {
...@@ -161,12 +165,14 @@ export default { ...@@ -161,12 +165,14 @@ export default {
// 近三个月 // 近三个月
setDate = endDate => { setDate = endDate => {
endDate.setMonth(endDate.getMonth() - 3); endDate.setMonth(endDate.getMonth() - 3);
endDate.setDate(endDate.getDate() + 1);
return new Date(endDate); return new Date(endDate);
}; };
} else if (index == 3) { } else if (index == 3) {
// 近半年 // 近半年
setDate = endDate => { setDate = endDate => {
endDate.setMonth(endDate.getMonth() - 6); endDate.setMonth(endDate.getMonth() - 6);
endDate.setDate(endDate.getDate() + 1);
return new Date(endDate); return new Date(endDate);
}; };
} }
...@@ -197,45 +203,28 @@ export default { ...@@ -197,45 +203,28 @@ export default {
}, },
// 列表数据 // 列表数据
async getTableList() { async getTableList() {
// this.tableData = [ this.pageParam.startTime = this.dateDefault ? Date.parse(new Date(this.dateDefault[0]).toString()) : '';
// { this.pageParam.endTime = this.dateDefault ? Date.parse(new Date(this.dateDefault[1]).toString()) : '';
// clerkName: '导购信息1索尼大法根据历史的快乐风格问题', if (this.$route.query.id && this.typeT == 'code') {
// clerkCode: '2364756qre', this.pageParam.hmId = this.$route.query.id;
// storeName: '门店名称1哈金斯的看法和大家说法可接受的垡健康是的发送到', delete this.pageParam.linkId;
// storeCode: '4564564', } else if (this.$route.query.id && this.typeT == 'link') {
// qw: '趣味', this.pageParam.linkId = this.$route.query.id;
// qwCode: '23674726', delete this.pageParam.hmId;
// addFriendNumTd: 1, }
// addFriendNumD: 2, await detailClerkList(this.pageParam).then(res => {
// toadyLess: 89, if (res.code == 0) {
// lessTotal: 23, this.tableData = res.result.result || [];
// staus: 1 this.totalCount = res.result.totalCount;
// }, }
// { });
// clerkName: '导购信息1索尼大法根据历史的快乐风格问题',
// clerkCode: '2364756qre',
// storeName: '门店名称1哈金斯的看法和大家说法可接受的垡健康是的发送到',
// storeCode: '4564564',
// qw: '趣味',
// qwCode: '23674726',
// addFriendNumTd: 9,
// addFriendNumD: 5,
// toadyLess: 77,
// lessTotal: 66,
// staus: 0
// }
// ];
const obj = {
...this.pageParam,
startTime: this.dateDefault ? Date.parse(new Date(this.dateDefault[0]).toString()) : '',
endTime: this.dateDefault ? Date.parse(new Date(this.dateDefault[1]).toString()) : ''
};
const a = await detailClerkList(obj);
console.log(a, 'a');
}, },
lookRecords(hmId) { lookRecords(row) {
const that = this; if (row.hmId) {
that.$router.push(`/actCodeRecord?hmId=${hmId}`); this.$router.push(`/actCodeRecord?hmId=${row.hmId}`);
} else if (row.linkId) {
this.$router.push(`/actCodeRecord?linkId=${row.linkId}`);
}
} }
} }
}; };
......
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