Commit 9628660b by crushh

Merge branch 'feature/act-code' into dev

parents 66268158 6a9bfeea
...@@ -49,7 +49,7 @@ export const linkAdd = params => postJsonRequest('/haoban-manage3-web/hm/link/ad ...@@ -49,7 +49,7 @@ export const linkAdd = params => postJsonRequest('/haoban-manage3-web/hm/link/ad
export const linkUpdate = params => postJsonRequest('/haoban-manage3-web/hm/link/update', params); export const linkUpdate = params => postJsonRequest('/haoban-manage3-web/hm/link/update', params);
// 【活码链接】-- 详情 actCode // 【活码链接】-- 详情 actCode
export const linkDetail = params => postJsonRequest('/haoban-manage3-web/hm/link/detail', params); export const linkDetail = params => getRequest('/haoban-manage3-web/hm/link/detail', params);
// 【活码链接】 -- 统计-总计 // 【活码链接】 -- 统计-总计
export const statisticsTotal = params => postJsonRequest('/haoban-manage3-web/hm/link/statistics/total', params); export const statisticsTotal = params => postJsonRequest('/haoban-manage3-web/hm/link/statistics/total', params);
...@@ -59,3 +59,6 @@ export const statisticsChart = params => postJsonRequest('/haoban-manage3-web/hm ...@@ -59,3 +59,6 @@ export const statisticsChart = params => postJsonRequest('/haoban-manage3-web/hm
// 【活码链接】 -- 统计--查看明细 // 【活码链接】 -- 统计--查看明细
export const statisticsClerk = params => postJsonRequest('/haoban-manage3-web/hm/link/statistics/clerk', params); export const statisticsClerk = params => postJsonRequest('/haoban-manage3-web/hm/link/statistics/clerk', params);
// 【活码链接】-- 门店列表
export const storeListApi = params => getRequest('/haoban-manage3-web/hm/store-list', params);
...@@ -75,7 +75,7 @@ Vue.axios.interceptors.request.use( ...@@ -75,7 +75,7 @@ Vue.axios.interceptors.request.use(
Vue.axios.interceptors.response.use( Vue.axios.interceptors.response.use(
data => { data => {
removePending(data.config); //在一个ajax响应后再执行一下取消操作,把已经完成的请求从pending中移除 removePending(data.config); //在一个ajax响应后再执行一下取消操作,把已经完成的请求从pending中移除
// if (data.status && data.status == 200 && data.data.errorCode != 1) { // if (data.status && data.status == 200 && (data.data.errorCode != 1||data.data.code!=1)) {
// if (data.data.errorCode == 4) { // if (data.data.errorCode == 4) {
// if (window.location.href.indexOf('gic-error') != -1) { // if (window.location.href.indexOf('gic-error') != -1) {
// return false; // return false;
......
<template> <template>
<el-popover placement="bottom" style="min-width: 357px" v-model="departmentVisible"> <el-popover placement="bottom" style="min-width: 357px" v-model="departmentVisible">
<dm-simple-transfer v-model="checked" :props="props" :data="data" :item-size="56" :titles="['选择门店', '已选门店']" filterable filter-placeholder="请输入门店名称/code" @change="change"> <dm-simple-transfer v-model="selected" :props="props" :data="data" :item-size="66" :titles="['选择门店', '已选门店']" filterable filter-placeholder="请输入门店名称/code" @change="change">
<div slot-scope="{ option }"> <div slot-scope="{ option }">
<p>{{ option.label }}</p> <p>{{ option.storeName }}</p>
<p style="font-size: 12px;line-height: 18px">{{ option.code }}</p> <p style="font-size: 12px;line-height: 18px">{{ option.storeCode }}</p>
<p v-show="option.isOver == 1" class="isOver">所有导购今日添加已到上限</p>
</div> </div>
</dm-simple-transfer> </dm-simple-transfer>
<div class="show-select-num cursor-pointer w-250" slot="reference"> <div class="show-select-num cursor-pointer w-250" slot="reference">
已经选择{{ checked.length }}家门店 已经选择{{ selected.length }}家门店
<span class="el-input__suffix" <span class="el-input__suffix"
><span class="el-input__suffix-inner"><i :class="['el-select__caret el-input__icon el-icon-arrow-up', departmentVisible ? 'is-reverse' : '']"></i></span ><span class="el-input__suffix-inner"><i :class="['el-select__caret el-input__icon el-icon-arrow-up', departmentVisible ? 'is-reverse' : '']"></i></span
></span> ></span>
...@@ -17,36 +17,29 @@ ...@@ -17,36 +17,29 @@
</template> </template>
<script> <script>
import { getRequest } from '@/api/api';
export default { export default {
props: {
selected: {
type: Array,
default: () => []
},
data: {
type: Array,
default: () => []
}
},
data() { data() {
return { return {
departmentVisible: false, departmentVisible: false,
checked: [],
data: [],
props: { props: {
key: 'storeId', key: 'storeId',
label: 'storeName' label: 'storeName'
},
form: {
storeSearchParams: '',
pageSize: 20,
pageNum: 1
} }
}; };
}, },
mounted() {
this.getList();
},
methods: { methods: {
getList() {
getRequest('/haoban-manage3-web/hm/store-list', {}).then(res => {
console.log(res);
const { result } = res.data;
this.data = result || [];
});
},
change(val) { change(val) {
console.log(val);
this.$emit('change', val); this.$emit('change', val);
} }
} }
...@@ -80,4 +73,9 @@ export default { ...@@ -80,4 +73,9 @@ export default {
} }
} }
} }
.isOver {
font-size: 12px;
color: #fa8c16;
line-height: 18px;
}
</style> </style>
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
<el-input placeholder="请输入链接描述" type="textarea" class="w-340" :maxlength="100" :autosize="{ minRow: 3, maxRow: 5 }" show-word-limit v-model="form.remark"></el-input> <el-input placeholder="请输入链接描述" type="textarea" class="w-340" :maxlength="100" :autosize="{ minRow: 3, maxRow: 5 }" show-word-limit v-model="form.remark"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="链接标签" required prop="memberLabelId"> <el-form-item label="链接标签" required prop="memberLabelId">
<el-button plain v-if="!form.memberLabelName" @click="tagsDialogVisible = true"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加标签</el-button> <el-button plain v-if="!form.memberLabelId" @click="tagsDialogVisible = true"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加标签</el-button>
<el-tag v-else closable @close="handleTagCloseTag">{{ form.memberLabelName }}</el-tag> <el-tag v-else closable @close="handleTagCloseTag">{{ form.memberLabelName }}</el-tag>
<!-- <dm-memberTag-group :visiable.sync="tagsDialogVisible" projectName="haobao-3" @save="saveTagPop"></dm-memberTag-group> --> <dm-memberTag-group :visiable.sync="tagsDialogVisible" projectName="haobao-3" @save="saveTagPop"></dm-memberTag-group>
</el-form-item> </el-form-item>
</div> </div>
<dm-sub-title type="line">分配规则</dm-sub-title> <dm-sub-title type="line">分配规则</dm-sub-title>
...@@ -69,8 +69,8 @@ ...@@ -69,8 +69,8 @@
</div> </div>
<div class="level3-2" v-if="form.storeRuleJson.open"> <div class="level3-2" v-if="form.storeRuleJson.open">
<div class="level3-2-content" v-if="form.storeRuleJson.store_type == 1"> <div class="level3-2-content" v-if="form.storeRuleJson.store_type == 1">
<el-form-item label="选择门店" required label-width="92px"> <el-form-item label="选择门店" label-width="92px" prop="storeList">
<selectShop @change="handleTransferChange" /> <selectShop @change="handleTransferChange" :data="storeData" :selected="form.storeList" />
</el-form-item> </el-form-item>
<el-checkbox v-model="form.storeRuleJson.store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dz">店长</el-checkbox> <el-checkbox v-model="form.storeRuleJson.store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dz">店长</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dy">导购</el-checkbox> <el-checkbox v-model="form.storeRuleJson.store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dy">导购</el-checkbox>
...@@ -82,8 +82,8 @@ ...@@ -82,8 +82,8 @@
<el-checkbox v-model="form.storeRuleJson.store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dy">导购</el-checkbox> <el-checkbox v-model="form.storeRuleJson.store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dy">导购</el-checkbox>
</div> </div>
<p class="content-tips m-b-10">客户拒绝授权当前定位信息,可在下方指定的门店范围中(最多20家)自主选择要添加的门店好友</p> <p class="content-tips m-b-10">客户拒绝授权当前定位信息,可在下方指定的门店范围中(最多20家)自主选择要添加的门店好友</p>
<el-form-item label="选择门店" required label-width="92px"> <el-form-item label="选择门店" label-width="92px" prop="storeList">
<selectShop @change="handleTransferChange" /> <selectShop @change="handleTransferChange" :data="storeData" :selected="form.storeList" />
</el-form-item> </el-form-item>
<el-checkbox v-model="form.storeRuleJson.store.ndz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.ndz, form.storeRuleJson.store.ndy) && form.storeRuleJson.store.ndz">店长</el-checkbox> <el-checkbox v-model="form.storeRuleJson.store.ndz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.ndz, form.storeRuleJson.store.ndy) && form.storeRuleJson.store.ndz">店长</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.store.ndy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.ndz, form.storeRuleJson.store.ndy) && form.storeRuleJson.store.ndy">导购</el-checkbox> <el-checkbox v-model="form.storeRuleJson.store.ndy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.ndz, form.storeRuleJson.store.ndy) && form.storeRuleJson.store.ndy">导购</el-checkbox>
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
</div> </div>
<dm-sub-title type="line">欢迎语设置</dm-sub-title> <dm-sub-title type="line">欢迎语设置</dm-sub-title>
<div class="section"> <div class="section">
<welcomeItem @getWelcomeId="getWelcomeId" :welcomeIdP="form.welcomeId"></welcomeItem> <welcomeItem @getWelcomeId="getWelcomeId" :welcomeIdP="form.welcomeId" ref="welcomeItem"></welcomeItem>
</div> </div>
<dm-sub-title type="line">落地页配置</dm-sub-title> <dm-sub-title type="line">落地页配置</dm-sub-title>
<div class="section flex" style="margin-bottom: 40px;"> <div class="section flex" style="margin-bottom: 40px;">
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
<el-pagination class="paginationBox" background @current-change="getList" :current-page="landingPage.pageNum" layout="prev, pager,next " :page-size="landingPage.pageSize" :total="total"></el-pagination> <el-pagination class="paginationBox" background @current-change="getList" :current-page="landingPage.pageNum" layout="prev, pager,next " :page-size="landingPage.pageSize" :total="total"></el-pagination>
</div> </div>
</el-form-item> </el-form-item>
<div class="preview"> <div class="preview" v-if="landingForm && Object.keys(landingForm).length">
<p class="previewTitle">落地页预览</p> <p class="previewTitle">落地页预览</p>
<previewPage :data="landingForm" /> <previewPage :data="landingForm" />
<p class="previewBottom">此二维码只是样式预览效果,请勿直接使用</p> <p class="previewBottom">此二维码只是样式预览效果,请勿直接使用</p>
...@@ -138,7 +138,7 @@ ...@@ -138,7 +138,7 @@
</template> </template>
<script> <script>
import { guidePageList, linkAdd, linkUpdate, linkDetail } from '@/api/actCode'; import { guidePageList, linkAdd, linkUpdate, linkDetail, storeListApi } from '@/api/actCode';
import selectShop from '@/components/common/selectShop'; import selectShop from '@/components/common/selectShop';
import welcomeItem from '@/views/salesleads/components/welcomesItem.vue'; import welcomeItem from '@/views/salesleads/components/welcomesItem.vue';
import previewPage from '@/components/preview-page.vue'; import previewPage from '@/components/preview-page.vue';
...@@ -146,6 +146,15 @@ import { _debounce } from '@/common/js/public'; ...@@ -146,6 +146,15 @@ import { _debounce } from '@/common/js/public';
import { scrollToError } from '@/utils/validate'; import { scrollToError } from '@/utils/validate';
export default { export default {
data() { data() {
const validateStoreList = (rule, value, cb) => {
if (this.form.storeRuleJson.open == 1 && !this.form.storeList.length) {
return cb(new Error('请选择门店'));
}
if (this.form.storeRuleJson.open == 1 && !this.form.storeList.length) {
return cb(new Error('请选择门店'));
}
cb();
};
return { return {
scrollToError, scrollToError,
tagsDialogVisible: false, tagsDialogVisible: false,
...@@ -162,8 +171,10 @@ export default { ...@@ -162,8 +171,10 @@ export default {
isAdd: this.$route.meta.type == 'add', isAdd: this.$route.meta.type == 'add',
rules: { rules: {
name: { required: true, message: '请输入链接名称' }, name: { required: true, message: '请输入链接名称' },
memberLabelId: { required: true, message: '请选择链接标签' } memberLabelId: { required: true, message: '请选择链接标签' },
storeList: { validator: validateStoreList }
}, },
storeData: [],
form: { form: {
linkType: 1, linkType: 1,
memberLabelName: '测试121212-木瑾0630测试标签值50', memberLabelName: '测试121212-木瑾0630测试标签值50',
...@@ -216,6 +227,7 @@ export default { ...@@ -216,6 +227,7 @@ export default {
}, },
mounted() { mounted() {
this.getList(); this.getList();
document.addEventListener('visibilitychange', () => { document.addEventListener('visibilitychange', () => {
if (document.visibilityState == 'visible') { if (document.visibilityState == 'visible') {
this.getList(); this.getList();
...@@ -223,19 +235,38 @@ export default { ...@@ -223,19 +235,38 @@ export default {
}); });
if (this.isEdit) { if (this.isEdit) {
this.getDetail(); this.getDetail();
} else {
this.getStoreList();
} }
}, },
methods: { methods: {
toInput: _debounce(function(e, value) { toInput: _debounce(function(e, value) {
this.getList(); this.getList();
}, 500), }, 500),
getStoreList() {
console.log(storeListApi);
storeListApi({}).then(res => {
console.log(res);
const { result } = res.data.result;
this.storeData = result || [];
if (this.form.storeList && this.form.storeList.length) {
this.storeData.map(el => {
el.checked = this.form.storeList.some(item => item.storeId == el.storeId);
return el;
});
}
});
},
getDetail() { getDetail() {
linkDetail({ linkId: this.$route.params.id }).then(res => { linkDetail({ linkId: this.$route.params.id }).then(res => {
const { result } = res.data; const { result } = res.data;
if (result) { if (result) {
result.link.storeRuleJson = JSON.parse(result.link.storeRuleJson); const { link, page } = result;
result.link.customRuleJson = JSON.parse(result.link.customRuleJson); link.storeRuleJson = JSON.parse(link.storeRuleJson);
this.form = result.link; link.customRuleJson = JSON.parse(link.customRuleJson);
this.form = link;
this.landingForm = page;
this.getStoreList();
} }
console.log(result); console.log(result);
}); });
...@@ -251,6 +282,8 @@ export default { ...@@ -251,6 +282,8 @@ export default {
}, },
handleTransferChange(val) { handleTransferChange(val) {
console.log(val); console.log(val);
this.form.storeList = val;
this.$refs.form.validateField('storeList');
}, },
getWelcomeId(e) { getWelcomeId(e) {
this.form.welcomeId = e; this.form.welcomeId = e;
...@@ -263,8 +296,6 @@ export default { ...@@ -263,8 +296,6 @@ export default {
if (result) { if (result) {
this.total = totalCount; this.total = totalCount;
this.landingData = result; this.landingData = result;
this.landingForm = result ? result[0] : {};
this.form.pageId = result ? result[0].pageId : '';
} }
}) })
.finally(_ => { .finally(_ => {
...@@ -283,6 +314,13 @@ export default { ...@@ -283,6 +314,13 @@ export default {
return args.filter(i => i == 1).length <= 1; return args.filter(i => i == 1).length <= 1;
}, },
save() { save() {
if (!this.$refs.welcomeItem.submit()) {
return;
}
if (!this.form.pageId) {
this.$message.error('请选择落地页模板');
return;
}
const data = JSON.parse(JSON.stringify(this.form)); const data = JSON.parse(JSON.stringify(this.form));
data.customRuleJson = JSON.stringify(data.customRuleJson); data.customRuleJson = JSON.stringify(data.customRuleJson);
data.storeRuleJson = JSON.stringify(data.storeRuleJson); data.storeRuleJson = JSON.stringify(data.storeRuleJson);
...@@ -296,7 +334,7 @@ export default { ...@@ -296,7 +334,7 @@ export default {
if (this.isAdd) { if (this.isAdd) {
linkAdd(data) linkAdd(data)
.then(res => { .then(res => {
console.log(res); this.$router.go(-1);
}) })
.finally(_ => { .finally(_ => {
this.btnLoading = false; this.btnLoading = false;
...@@ -304,7 +342,7 @@ export default { ...@@ -304,7 +342,7 @@ export default {
} else { } else {
linkUpdate(data) linkUpdate(data)
.then(res => { .then(res => {
console.log(res); this.$router.go(-1);
}) })
.finally(_ => { .finally(_ => {
this.btnLoading = false; this.btnLoading = false;
......
...@@ -149,6 +149,15 @@ export default { ...@@ -149,6 +149,15 @@ export default {
this.welcomeId = ''; this.welcomeId = '';
this.$emit('getWelcomeId', this.welcomeId); this.$emit('getWelcomeId', this.welcomeId);
} }
},
submit() {
if (this.welcomesType == 2) return true;
if (!this.welcomeId) {
this.$message.error('请选择欢迎语');
return false;
} else {
return true;
}
} }
}, },
watch: { watch: {
...@@ -164,6 +173,8 @@ export default { ...@@ -164,6 +173,8 @@ export default {
this.getWelcomeTable(); this.getWelcomeTable();
} }
}); });
} else {
this.welcomesType = 2;
} }
}, },
immediate: true, immediate: true,
...@@ -221,6 +232,7 @@ export default { ...@@ -221,6 +232,7 @@ export default {
border: 1px solid #dcdfe6; border: 1px solid #dcdfe6;
padding: 12px; padding: 12px;
position: relative; position: relative;
box-sizing: border-box;
.wtabTop { .wtabTop {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
......
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