Merge remote-tracking branch 'origin/0605' into feature_0521

# Conflicts:
#	src/pages/recruit/BulletinIndex.vue
feature_0521
郑皇 6 years ago
commit 4620bb8ef0

@ -0,0 +1,118 @@
;(function(win, lib) {
var doc = win.document;
var docEl = doc.documentElement;
var metaEl = doc.querySelector('meta[name="viewport"]');
var flexibleEl = doc.querySelector('meta[name="flexible"]');
var dpr = 0;
var scale = 0;
var tid;
var flexible = lib.flexible || (lib.flexible = {});
if (metaEl) {
console.warn('将根据已有的meta标签来设置缩放比例');
var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/);
if (match) {
scale = parseFloat(match[1]);
dpr = parseInt(1 / scale);
}
} else if (flexibleEl) {
var content = flexibleEl.getAttribute('content');
if (content) {
var initialDpr = content.match(/initial\-dpr=([\d\.]+)/);
var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);
if (initialDpr) {
dpr = parseFloat(initialDpr[1]);
scale = parseFloat((1 / dpr).toFixed(2));
}
if (maximumDpr) {
dpr = parseFloat(maximumDpr[1]);
scale = parseFloat((1 / dpr).toFixed(2));
}
}
}
if (!dpr && !scale) {
var isAndroid = win.navigator.appVersion.match(/android/gi);
var isIPhone = win.navigator.appVersion.match(/iphone/gi);
var devicePixelRatio = win.devicePixelRatio;
if (isIPhone) {
// iOS下对于2和3的屏用2倍的方案其余的用1倍方案
if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
dpr = 3;
} else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){
dpr = 2;
} else {
dpr = 1;
}
} else {
// 其他设备下仍旧使用1倍的方案
dpr = 1;
}
scale = 1 / dpr;
}
docEl.setAttribute('data-dpr', dpr);
if (!metaEl) {
metaEl = doc.createElement('meta');
metaEl.setAttribute('name', 'viewport');
metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
if (docEl.firstElementChild) {
docEl.firstElementChild.appendChild(metaEl);
} else {
var wrap = doc.createElement('div');
wrap.appendChild(metaEl);
doc.write(wrap.innerHTML);
}
}
function refreshRem(){
var width = docEl.getBoundingClientRect().width;
if (width / dpr > 540) {
width = width * dpr;
}
var rem = width / 10;
docEl.style.fontSize = rem + 'px';
flexible.rem = win.rem = rem;
}
win.addEventListener('resize', function() {
clearTimeout(tid);
tid = setTimeout(refreshRem, 300);
}, false);
win.addEventListener('pageshow', function(e) {
if (e.persisted) {
clearTimeout(tid);
tid = setTimeout(refreshRem, 300);
}
}, false);
if (doc.readyState === 'complete') {
doc.body.style.fontSize = 12 * dpr + 'px';
} else {
doc.addEventListener('DOMContentLoaded', function(e) {
doc.body.style.fontSize = 12 * dpr + 'px';
}, false);
}
refreshRem();
flexible.dpr = win.dpr = dpr;
flexible.refreshRem = refreshRem;
flexible.rem2px = function(d) {
var val = parseFloat(d) * this.rem;
if (typeof d === 'string' && d.match(/rem$/)) {
val += 'px';
}
return val;
}
flexible.px2rem = function(d) {
var val = parseFloat(d) / this.rem;
if (typeof d === 'string' && d.match(/px$/)) {
val += 'rem';
}
return val;
}
})(window, window['lib'] || (window['lib'] = {}));

@ -7,14 +7,13 @@ import axios from "axios";
import QS from "qs"; import QS from "qs";
import "./iview"; import "./iview";
import "./vcharts"; import "./vcharts";
import "lib-flexible/flexible"; import "./flexible";
import _ from "lodash"; import _ from "lodash";
Vue.prototype.$axios = axios; Vue.prototype.$axios = axios;
Vue.prototype.$qs = QS; Vue.prototype.$qs = QS;
Vue.prototype.$moment = moment; Vue.prototype.$moment = moment;
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.prototype.$moment = moment;
Vue.prototype._ = _; Vue.prototype._ = _;
import echarts from "echarts"; import echarts from "echarts";

@ -1,52 +1,33 @@
<template> <template>
<div class="layout"> <div class="layout">
<Layout :style="{minHeight: '100vh'}"> <Layout :style="{minHeight: '100vh'}">
<Sider collapsible <Sider collapsible :collapsed-width="78" v-model="isCollapsed" :hide-trigger="true" >
:collapsed-width="78"
v-model="isCollapsed"
:hide-trigger="true">
<div style="margin: 40px 0 20px 10px;font-weight: bold;font-size: 30px;color: #ffffff;"> <div style="margin: 40px 0 20px 10px;font-weight: bold;font-size: 30px;color: #ffffff;">
<Poptip placement="bottom-start" <Poptip placement="bottom-start" width="200" :offset="-8">
width="200" <img src="../../static/img/avatar.png" style="width: 32px;vertical-align: middle;cursor: pointer"/>
:offset="-8">
<img src="../../static/img/avatar.png"
style="width: 32px;vertical-align: middle;cursor: pointer" />
<div slot="content"> <div slot="content">
<div style="cursor: pointer;" <div style="cursor: pointer;" @click="logoutClick">
@click="logoutClick">
<span class="logout-span">退出登录</span> <span class="logout-span">退出登录</span>
<img class="logout-img" <img class="logout-img" src="../../static/img/logout.png"/>
src="../../static/img/logout.png" />
</div> </div>
</div> </div>
</Poptip> </Poptip>
<span class="project-title">优客后台管理</span> <span class="project-title">优客后台管理</span>
</div> </div>
<Menu ref="menu" <Menu ref="menu" :active-name="selectedItemName" :open-names="openName" theme="dark" width="auto"
:active-name="selectedItemName" @on-select="onSelectLister" :accordion="true">
:open-names="openName" <MenuItem v-if="roleCode === 'GLY-ADMIN' || roleCode === 'DG-YUNYING' || roleCode === 'GL-YUNYING'" :name="0" to="/customer/view">
theme="dark" <Icon type="ios-paper"/>
width="auto"
@on-select="onSelectLister"
:accordion="true">
<MenuItem v-if="roleCode === 'GLY-ADMIN' || roleCode === 'DG-YUNYING' || roleCode === 'GL-YUNYING'"
:name="0"
to="/customer/view">
<Icon type="ios-paper" />
<span style="margin-left: 7px">首页</span> <span style="margin-left: 7px">首页</span>
</MenuItem> </MenuItem>
<Submenu :name="item.id" <Submenu :name="item.id" v-for="item in onePermissionList" :key="item.id">
v-for="item in onePermissionList"
:key="item.id">
<template slot="title"> <template slot="title">
<Icon type="ios-paper" /> <Icon type="ios-paper"/>
{{item.name}} {{item.name}}
</template> </template>
<MenuItem :name="cItem.id" <MenuItem :name="cItem.id" :to="cItem.resource" v-for="cItem in item.subMenuList"
:to="cItem.resource"
v-for="cItem in item.subMenuList"
:key="cItem.id"> :key="cItem.id">
{{cItem.name}} {{cItem.name}}
</MenuItem> </MenuItem>
@ -57,13 +38,12 @@
<!-- <Header :style="{background: '#fff', boxShadow: '0 2px 3px 2px rgba(0,0,0,.1)'}"></Header>--> <!-- <Header :style="{background: '#fff', boxShadow: '0 2px 3px 2px rgba(0,0,0,.1)'}"></Header>-->
<Content :style="{padding: '0 16px 16px'}"> <Content :style="{padding: '0 16px 16px'}">
<Breadcrumb :style="{margin: '16px 0'}"> <Breadcrumb :style="{margin: '16px 0'}">
<BreadcrumbItem><span style="cursor: pointer" <BreadcrumbItem><span style="cursor: pointer" @click="breadcrumbClick">{{selectedMenu}}</span></BreadcrumbItem>
@click="breadcrumbClick">{{selectedMenu}}</span></BreadcrumbItem>
<BreadcrumbItem>{{selectedSubMenu}}</BreadcrumbItem> <BreadcrumbItem>{{selectedSubMenu}}</BreadcrumbItem>
</Breadcrumb> </Breadcrumb>
<Card> <Card>
<div :style="{'min-height':mHeight + 'px'}"> <div :style="{'min-height':mHeight + 'px'}">
<router-view /> <router-view/>
</div> </div>
</Card> </Card>
</Content> </Content>
@ -72,16 +52,16 @@
</div> </div>
</template> </template>
<script> <script>
import homeRequest from "../services/home/homeRequest"; import homeRequest from "../services/home/homeRequest";
export default { export default {
provide () { provide() {
return { return {
checkParamBlank: this.checkParamBlank, checkParamBlank: this.checkParamBlank,
setMenuName: this.setMenuName, setMenuName: this.setMenuName,
}; };
}, },
data () { data() {
return { return {
roleCode: JSON.parse(sessionStorage.getItem("loginInfo")).roleCode, roleCode: JSON.parse(sessionStorage.getItem("loginInfo")).roleCode,
mainUrl: "/customer/view", mainUrl: "/customer/view",
@ -105,7 +85,7 @@ export default {
breadcrumbUrl: "", breadcrumbUrl: "",
} }
}, },
mounted () { mounted() {
let that = this; let that = this;
this.bus.$on('callBack', function (item) { this.bus.$on('callBack', function (item) {
that.callBack(item); that.callBack(item);
@ -114,7 +94,7 @@ export default {
// that.setHeader(data); // that.setHeader(data);
// }) // })
}, },
created () { created() {
// this.mHeight = window.screen.availHeight - 22; // this.mHeight = window.screen.availHeight - 22;
// //
@ -135,20 +115,20 @@ export default {
}, },
methods: { methods: {
onSelectLister (val) { onSelectLister(val) {
let i; let i;
this.onePermissionList.forEach(function (data) { this.onePermissionList.forEach(function (data) {
data.subMenuList.forEach(function (dta) { data.subMenuList.forEach(function (dta) {
if (dta.id === val) { if(dta.id === val){
i = dta; i = dta;
} }
}) })
}); });
if (i) { if(i){
sessionStorage.setItem("threeLevel", JSON.stringify(i.subMenuList)); sessionStorage.setItem("threeLevel",JSON.stringify(i.subMenuList));
} }
// //
if (val === 0) { if(val === 0){
this.selectedMenu = "首页"; this.selectedMenu = "首页";
this.selectedSubMenu = ""; this.selectedSubMenu = "";
this.breadcrumbUrl = this.mainUrl; this.breadcrumbUrl = this.mainUrl;
@ -182,7 +162,7 @@ export default {
} }
}, },
// //
listOnePermission (level) { listOnePermission(level) {
let that = this; let that = this;
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId; let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let request = { let request = {
@ -208,7 +188,7 @@ export default {
}) })
}, },
// //
listTwoPermission (level) { listTwoPermission(level) {
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId; let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let that = this; let that = this;
that.twoPermissionList = []; that.twoPermissionList = [];
@ -235,7 +215,7 @@ export default {
}) })
}, },
// //
listThreePermission (level) { listThreePermission(level) {
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId; let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let that = this; let that = this;
that.threePermissionList = []; that.threePermissionList = [];
@ -278,36 +258,53 @@ export default {
// //
menuInit: function () { menuInit: function () {
let that = this; let that = this;
if (this.roleCode === 'GLY-ADMIN' || this.roleCode === 'DG-YUNYING' || this.roleCode === 'GL-YUNYING') { if(this.roleCode === 'GLY-ADMIN' || this.roleCode === 'DG-YUNYING' || this.roleCode === 'GL-YUNYING'){
// //
that.selectedItemName = 0; that.selectedItemName = 0;
this.$router.push({ path: that.mainUrl }); this.$router.push({path: that.mainUrl});
this.selectedMenu = "首页"; this.selectedMenu = "首页";
this.breadcrumbUrl = this.mainUrl; this.breadcrumbUrl = this.mainUrl;
} else { }else{
that.selectedItemName = that.onePermissionList[0].subMenuList[0].id; that.selectedItemName = that.onePermissionList[0].subMenuList[0].id;
that.openName = [that.onePermissionList[0].id]; that.openName = [that.onePermissionList[0].id];
this.selectedMenu = this.onePermissionList[0].name; this.selectedMenu = this.onePermissionList[0].name;
this.selectedSubMenu = this.onePermissionList[0].subMenuList[0].name; this.selectedSubMenu = this.onePermissionList[0].subMenuList[0].name;
sessionStorage.setItem("threeLevel", JSON.stringify(this.onePermissionList[0].subMenuList[0].subMenuList)); sessionStorage.setItem("threeLevel",JSON.stringify(this.onePermissionList[0].subMenuList[0].subMenuList));
// this.$nextTick(() => { // this.$nextTick(() => {
// this.$refs.menu.updateOpened(); // this.$refs.menu.updateOpened();
// this.$refs.menu.updateActiveName(); // this.$refs.menu.updateActiveName();
// }); // });
this.$router.push({ path: that.onePermissionList[0].subMenuList[0].resource }); this.$router.push({path: that.onePermissionList[0].subMenuList[0].resource});
} }
}, },
// //
callBack (item) { callBack(val) {
let that = this; this.selectedMenu = val.selectedMenu;
this.selectedMenu = "设置管理"; this.selectedSubMenu = val.selectedSubMenu;
this.selectedSubMenu = "账户管理";
this.selectedItemName = this.onePermissionList[2].subMenuList[0].id; let url = "";
this.$router.push({ path: '/account/manager', query: item }); for (let i = 0; i < this.onePermissionList.length; i++) {
let item = this.onePermissionList[i];
for (let k = 0; k < item.subMenuList.length; k++) {
let cItem = item.subMenuList[k];
if(cItem.name === val.selectedSubMenu){
this.selectedItemName = cItem.id;
url = cItem.resource;
}
}
}
if(val.type === 1){
this.$router.push({path: url,query:val.data});
}else{
this.$router.push(url);
}
}, },
setHeader (data) { setHeader(data){
let that = this; let that = this;
this.selectedSubMenu = data.header; this.selectedSubMenu = data.header;
this.$nextTick(() => { this.$nextTick(() => {
@ -316,19 +313,12 @@ export default {
}, },
// //
setMenuName: function (menu1, menu2) { setMenuName: function (menu1, menu2) {
console.log("setMenu", arguments)
this.selectedMenu = menu1; this.selectedMenu = menu1;
this.selectedSubMenu = menu2; this.selectedSubMenu = menu2;
let parentId;
let subId;
this.onePermissionList.forEach(item => {
if (item.name == menu1) parentId = item.id
})
this.$forceUpdate()
}, },
// //
breadcrumbClick: function () { breadcrumbClick: function () {
if (this.selectedMenu === "首页") { if(this.selectedMenu === "首页"){
this.selectedSubMenu = ""; this.selectedSubMenu = "";
} }
this.$router.push(this.breadcrumbUrl); this.$router.push(this.breadcrumbUrl);
@ -342,26 +332,27 @@ export default {
this.$Message.info("登出成功"); this.$Message.info("登出成功");
} }
}, },
} }
</script> </script>
<style scoped> <style scoped>
.layout-con {
.layout-con {
height: 100%; height: 100%;
width: 100%; width: 100%;
} }
/*项目标题*/ /*项目标题*/
.project-title { .project-title{
font-size: 22px; font-size: 22px;
margin-left: 15px; margin-left: 15px;
} }
/*退出登入*/ /*退出登入*/
.logout-span { .logout-span{
font-size: 15px; font-size: 15px;
vertical-align: middle; vertical-align: middle;
color: #535353; color: #535353;
} }
.logout-img { .logout-img{
vertical-align: middle; vertical-align: middle;
margin-left: 80px; margin-left: 80px;
} }
</style> </style>

@ -1,33 +1,70 @@
<template> <template>
<div class="activity_code"> <div class="activity_code">
<Table :loading="loading" border :columns="columns" :data="data"> <Row class="search-row">
<template slot-scope="{row}" slot="qrCodeAction"> <i-col span="24"
<img :src="require('../../../static/img/qrCode-init.png')" @click="show(row)" class="search-col">
class="table-img-qr-code"/> <Button type="primary"
@click="downloadCode(2)"
style="margin-left: 20px;">批量下载门店码</Button>
<Button type="primary"
@click="downloadCode(1)"
style="margin-left: 20px;">批量下载导购码</Button>
</i-col>
</Row>
<Table :loading="loading"
border
:columns="columns"
:data="data">
<template slot-scope="{row}"
slot="qrCodeAction">
<img :src="require('../../../static/img/qrCode-init.png')"
@click="showQrcode(row)"
class="table-img-qr-code" />
</template> </template>
<router-link slot-scope="{row}" slot="action" <router-link slot-scope="{row}"
:to="{path:'/shop/increase/manager/staff',query:{storeId:row.id}}"> slot="action"
<Button ghost class="router-btn"> 门店导购管理</Button> :to="{path:'/shop/increase/manager/staff',query:{storeId:row.store.id}}">
<Button class="router-btn"> 门店导购管理</Button>
</router-link> </router-link>
</Table> </Table>
<Page <Page :total="totalSize"
:total="totalSize"
:current="pageNum" :current="pageNum"
:page-size="pageSize" :page-size="pageSize"
show-elevator show-elevator
show-total show-total
placement="top" placement="top"
@on-change="handlePage" @on-change="handlePage"
class-name="ks-page" class-name="ks-page"></Page>
></Page>
<!-- 预览二维码 -->
<Modal v-model="isShow"
:title="showStoreName"
:footer-hide="true"
width="230"
class-name="vertical-center-modal"
@on-ok="ok">
<div slot="header">
<p></p>
</div>
<p>{{this.showStoreName}}</p>
<img :src="qrCodeImage"
style="width:200px;height:200px;" />
<div style="text-align: center;">
<Button ghost
type="primary"
@click="download(rowData)">下载</Button>
</div>
</Modal>
</div> </div>
</template> </template>
<script> <script>
import { activityCodeList } from "../../services/ActivityManager/ActivityManager"; import { activityCodeList } from "../../services/ActivityManager/ActivityManager";
import http from '../../services/store/IncreaseStoreManager';
import doHttp from '../../services/CommonHttp'
export default { export default {
name: "ActivityCode", name: "ActivityCode",
data() { data () {
let _this = this; let _this = this;
return { return {
loading: false, loading: false,
@ -36,6 +73,10 @@ export default {
pageSize: 10, pageSize: 10,
data: [], data: [],
instanceId: 0, instanceId: 0,
isShow: false,
showStoreName: "",
qrCodeImage: "",
rowData: {},
columns: [ columns: [
{ {
width: 80, width: 80,
@ -52,28 +93,28 @@ export default {
{ {
title: "所属零售公司", title: "所属零售公司",
key: "organizational.name", key: "organizational.name",
render(h, params) { render (h, params) {
return h("span", params.row["organizational"]["name"]); return h("span", params.row["organizational"]["name"]);
}, },
}, },
{ {
title: "零售公司编号", title: "零售公司编号",
key: "organizational.code", key: "organizational.code",
render(h, params) { render (h, params) {
return h("span", params.row["organizational"]["code"]); return h("span", params.row["organizational"]["code"]);
}, },
}, },
{ {
title: "店铺名称", title: "店铺名称",
key: "store.name", key: "store.name",
render(h, params) { render (h, params) {
return h("span", params.row["store"]["name"]); return h("span", params.row["store"]["name"]);
}, },
}, },
{ {
title: "店铺编号", title: "店铺编号",
key: "store.code", key: "store.code",
render(h, params) { render (h, params) {
return h("span", params.row["store"]["code"]); return h("span", params.row["store"]["code"]);
}, },
}, },
@ -135,19 +176,37 @@ export default {
], ],
}; };
}, },
created() { created () {
this.instanceId = this.$route.query.instanceId; this.instanceId = this.$route.query.instanceId;
this.load(); this.load();
}, },
methods: { methods: {
handlePage(value) { ok: function () {
this.isShow = false;
},
cancel: function () {
this.isShow = false;
},
handlePage (value) {
this.pageNum = value; this.pageNum = value;
this.load(); this.load();
}, },
showQrcode(row) { showQrcode (row) {
console.log(row); console.log(row);
this.isShow = true;
this.showStoreName = row.store.name;
this.qrCodeImage = row.qrCode;
this.rowData = row;
},
download: function (row) {
let fileName = row.store.name + "-活动码";
http.downloadImg({
url: row.qrCode
}, fileName, function (/*data*/) {
})
}, },
load(params = {}) { load (params = {}) {
let _this = this; let _this = this;
this.loading = true; this.loading = true;
params.pageSize = this.pageSize; params.pageSize = this.pageSize;
@ -159,12 +218,27 @@ export default {
_this.loading = false; _this.loading = false;
}); });
}, },
downloadCode (type) {
this.loading = true;
let that = this;
doHttp
.downloadZip("/activity/instance/download?type=" + type + "&instanceId=" + this.instanceId, type == 2 ? '门店码' : "门店导购码", { type: type, instanceId: this.instanceId })
.then(res => {
that.loading = false;
})
}
}, },
}; };
</script> </script>
<style> <style>
.table-width-80 { .table-width-80 {
width: 80px !important; width: 80px !important;
} }
.table-img-qr-code {
margin-left: 5px;
margin-top: 5px;
width: 30px;
height: 30px;
}
</style> </style>

@ -1,128 +1,128 @@
<template> <template>
<div> <div>
<Spin v-if="saving" fix>加载中...</Spin> <Spin v-if="saving"
<Form ref="formValidate" :model="formValidate" :label-width="80"> fix>加载中...</Spin>
<Form ref="formValidate"
:model="formValidate"
:label-width="80">
<Row :gutter="10"> <Row :gutter="10">
<i-col span="6"> <i-col span="6">
<FormItem label="选择日期" prop> <FormItem label="选择日期"
<Date-picker prop>
style="width: 100%" <Date-picker style="width: 100%"
v-model="formValidate.date" v-model="formValidate.date"
type="daterange" type="daterange"
placement="bottom-end" placement="bottom-end"
placeholder="选择日期区间" placeholder="选择日期区间"></Date-picker>
></Date-picker>
</FormItem> </FormItem>
</i-col> </i-col>
<i-col span="6"> <i-col span="6">
<FormItem label="零售公司" prop> <FormItem label="零售公司"
<Select prop>
v-model="formValidate.organizationId" <Select v-model="formValidate.organizationId"
filterable filterable
@on-change="selectCompany" @on-change="selectCompany"
placeholder="全部" placeholder="全部"
clearable clearable>
> <Option v-for="(item, index) in companyList"
<Option
v-for="(item, index) in companyList"
:key="index" :key="index"
:value="item.value" :value="item.value">{{ item.label }}</Option>
>{{ item.label }}</Option>
</Select> </Select>
</FormItem> </FormItem>
</i-col> </i-col>
<i-col span="6"> <i-col span="6">
<FormItem label="店铺" prop> <FormItem label="店铺"
<Select v-model="formValidate.storeId" filterable placeholder="全部" clearable> prop>
<Option <Select v-model="formValidate.storeId"
v-for="(item, index) in shopList" filterable
placeholder="全部"
clearable>
<Option v-for="(item, index) in shopList"
:key="index" :key="index"
:value="item.value" :value="item.value">{{ item.label }}</Option>
>{{ item.label }}</Option>
</Select> </Select>
</FormItem> </FormItem>
</i-col> </i-col>
<i-col span="3"> <i-col span="3">
<FormItem label="活动状态" prop> <FormItem label="活动状态"
prop>
<Select v-model="formValidate.status"> <Select v-model="formValidate.status">
<Option <Option v-for="(item, index) in activityStatusList"
v-for="(item, index) in activityStatusList"
:key="index" :key="index"
:value="item.value" :value="item.value">{{ item.label }}</Option>
>{{ item.label }}</Option>
</Select> </Select>
</FormItem> </FormItem>
</i-col> </i-col>
<i-col span="3"> <i-col span="3">
<Button type="primary" @click="() => {pageNum = 1;searchTable()}">查询</Button> <Button type="primary"
@click="() => {pageNum = 1;searchTable()}">查询</Button>
</i-col> </i-col>
</Row> </Row>
<Row style="margin-top:50px"> <Row style="margin-top:50px">
<Table <Table :loading="loading"
:loading="loading"
border border
@on-row-dblclick="showDetail" @on-row-dblclick="showDetail"
:columns="columns1" :columns="columns1"
:data="data" :data="data">
> <template slot-scope="{row}"
<template slot-scope="{row}" slot="qrCodeAction"> slot="qrCodeAction">
<img <img :src="require('../../../static/img/qrCode-init.png')"
:src="require('../../../static/img/qrCode-init.png')"
@click="navigateCode(row)" @click="navigateCode(row)"
class="table-img-qr-code" class="table-img-qr-code" />
/>
</template> </template>
<template slot="action" slot-scope="{row}"> <template slot="action"
slot-scope="{row}">
<i-col span="12"> <i-col span="12">
<Button <Button ghost
ghost
:class="row.status > 2 ? 'router-btn disable' : 'router-btn'" :class="row.status > 2 ? 'router-btn disable' : 'router-btn'"
@click="() => {stop(row)}" @click="() => {stop(row)}">终止</Button>
>终止</Button>
</i-col> </i-col>
<i-col span="12"> <i-col span="12">
<Button ghost class="router-btn" @click="() => {modify(row)}">修改</Button> <Button ghost
class="router-btn"
@click="() => {modify(row)}">修改</Button>
</i-col> </i-col>
</template> </template>
</Table> </Table>
<Page <Page :total="totalSize"
:total="totalSize"
:current="pageNum" :current="pageNum"
:page-size="pageSize" :page-size="pageSize"
show-elevator show-elevator
show-total show-total
placement="top" placement="top"
@on-change="handlePage" @on-change="handlePage"
class-name="ks-page" class-name="ks-page"></Page>
></Page>
</Row> </Row>
</Form> </Form>
<useTable <useTable ref="useTable"
ref="useTable"
@doShow="doShow" @doShow="doShow"
:show="showUse" :show="showUse"
:isModify="true" :isModify="true"
:schedule="activityInstance.scheduleVO" :schedule="activityInstance.scheduleVO"></useTable>
></useTable> <Modal v-model="isShowDetail"
<Modal v-model="isShowDetail" title="活动计划详情" width="70%" :footer-hide="true"> title="活动计划详情"
<planDetail v-if="isShowDetail" :detail="detail"></planDetail> width="70%"
:footer-hide="true">
<planDetail v-if="isShowDetail"
:detail="detail"></planDetail>
</Modal> </Modal>
<!-- 预览二维码 --> <!-- 预览二维码 -->
<Modal <Modal v-model="isShow"
v-model="isShow"
:title="showStoreName" :title="showStoreName"
:footer-hide="true" :footer-hide="true"
width="230" width="230"
class-name="vertical-center-modal" class-name="vertical-center-modal"
@on-ok="ok" @on-ok="ok">
>
<div slot="header"> <div slot="header">
<p></p> <p></p>
</div> </div>
<p>{{this.showStoreName}}</p> <p>{{this.showStoreName}}</p>
<img :src="qrCodeImage" style="width:200px;height:200px;" /> <img :src="qrCodeImage"
style="width:200px;height:200px;" />
<div style="text-align: center;"> <div style="text-align: center;">
<Button ghost type="primary" @click="download(rowData)"></Button> <Button ghost
type="primary"
@click="download(rowData)">下载</Button>
</div> </div>
</Modal> </Modal>
</div> </div>
@ -142,7 +142,7 @@ export default {
useTable, useTable,
planDetail planDetail
}, },
data() { data () {
const _this = this; const _this = this;
return { return {
showStoreName: "", showStoreName: "",
@ -203,7 +203,7 @@ export default {
width: 60, width: 60,
align: "center", align: "center",
title: "序号", title: "序号",
render(h, params) { render (h, params) {
let num = parseInt(params.index) + 1; let num = parseInt(params.index) + 1;
console.log(_this.pageSize); console.log(_this.pageSize);
if (_this.pageSize > 1) { if (_this.pageSize > 1) {
@ -219,7 +219,7 @@ export default {
{ {
title: "活动类型", title: "活动类型",
key: "scheduleVO.name", key: "scheduleVO.name",
render(h, params) { render (h, params) {
return h("span", params.row["params"][0]["name"]); return h("span", params.row["params"][0]["name"]);
} }
}, },
@ -227,14 +227,14 @@ export default {
title: "活动时间", title: "活动时间",
key: "beginTime", key: "beginTime",
width: 230, width: 230,
render(h, params) { render (h, params) {
return h("span", params.row.beginTime + " - " + params.row.endTime); return h("span", params.row.beginTime + " - " + params.row.endTime);
} }
}, },
{ {
title: "零售公司", title: "零售公司",
key: "shop", key: "shop",
render(h, params) { render (h, params) {
return h( return h(
"span", "span",
params.row.companyName + params.row.companyName +
@ -247,7 +247,7 @@ export default {
{ {
title: "店铺", title: "店铺",
key: "shop", key: "shop",
render(h, params) { render (h, params) {
return h( return h(
"span", "span",
params.row.storeName + params.row.storeName +
@ -260,17 +260,17 @@ export default {
{ {
title: "添加好友数", title: "添加好友数",
key: "addFriendNum", key: "addFriendNum",
render(h, params) { render (h, params) {
return h("span", (params.row.friends || 0) + "人"); return h("span", (params.row.friendCount || 0) + "人");
}
},
{
title: "参与活动客户数",
key: "joinActivityClientNum",
render(h, params) {
return h("span", (params.row.friends || 0) + "人");
} }
}, },
// {
// title: "",
// key: "joinActivityClientNum",
// render (h, params) {
// return h("span", (params.row.customerCount || 0) + "");
// }
// },
{ {
title: "活动码", title: "活动码",
slot: "qrCodeAction", slot: "qrCodeAction",
@ -289,7 +289,7 @@ export default {
{ {
title: "活动状态", title: "活动状态",
key: "status", key: "status",
render(h, p) { render (h, p) {
const status = p.row.status; const status = p.row.status;
if (status === 1) return h("span", "未开始"); if (status === 1) return h("span", "未开始");
if (status === 2) return h("span", "进行中"); if (status === 2) return h("span", "进行中");
@ -332,30 +332,30 @@ export default {
] ]
}; };
}, },
mounted() { mounted () {
this.setMenuName("活动管理", "活动计划"); this.setMenuName("活动管理", "活动计划");
this.getCompanyInfo(); this.getCompanyInfo();
this.getShopInfo(); this.getShopInfo();
this.searchTable(); this.searchTable();
}, },
methods: { methods: {
doShow(show) { doShow (show) {
this.showUse = show; this.showUse = show;
this.searchTable(); this.searchTable();
}, },
showDetail(detail) { showDetail (detail) {
let _this = this; let _this = this;
this.getDetail(detail.id).then(res => { this.getDetail(detail.id).then(res => {
_this.detail = res; _this.detail = res;
_this.isShowDetail = true; _this.isShowDetail = true;
}); });
}, },
getCompanyInfo() { getCompanyInfo () {
let that = this; let that = this;
let data = { let data = {
userId: JSON.parse(sessionStorage.getItem("loginInfo")).userId userId: JSON.parse(sessionStorage.getItem("loginInfo")).userId
}; };
ActivityManager.getCompany(data, function(data) { ActivityManager.getCompany(data, function (data) {
that.companyList = []; that.companyList = [];
data.data.results.forEach(element => { data.data.results.forEach(element => {
that.companyList.push({ that.companyList.push({
@ -365,18 +365,18 @@ export default {
}); });
}); });
}, },
selectCompany(value) { selectCompany (value) {
this.customerId = value; this.customerId = value;
this.getShopInfo(); this.getShopInfo();
}, },
getShopInfo() { getShopInfo () {
let that = this; let that = this;
let data = { let data = {
userId: JSON.parse(sessionStorage.getItem("loginInfo")).userId, userId: JSON.parse(sessionStorage.getItem("loginInfo")).userId,
customerIds: this.customerId, customerIds: this.customerId,
scheduleId: null scheduleId: null
}; };
ActivityManager.getShop(data, function(data) { ActivityManager.getShop(data, function (data) {
that.shopList = []; that.shopList = [];
data.data.results.forEach(element => { data.data.results.forEach(element => {
that.shopList.push({ that.shopList.push({
@ -386,11 +386,11 @@ export default {
}); });
}); });
}, },
handlePage: function(value) { handlePage: function (value) {
this.pageNum = value; this.pageNum = value;
this.searchTable(); this.searchTable();
}, },
stop(instance) { stop (instance) {
if (instance.status > 2) { if (instance.status > 2) {
return; return;
} }
@ -412,10 +412,10 @@ export default {
} }
); );
}, },
onCancel: () => {} onCancel: () => { }
}); });
}, },
getDetail(instanceId) { getDetail (instanceId) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
ActivityManager.instanceDetail( ActivityManager.instanceDetail(
{ {
@ -427,7 +427,7 @@ export default {
); );
}); });
}, },
modify(instance) { modify (instance) {
let _this = this; let _this = this;
this.getDetail(instance.id).then(res => { this.getDetail(instance.id).then(res => {
store.commit("SET_useData", res); store.commit("SET_useData", res);
@ -435,14 +435,13 @@ export default {
_this.showUse = true; _this.showUse = true;
}); });
}, },
navigateCode(instance) { navigateCode (instance) {
return;
this.$router.push({ this.$router.push({
path: "/activity/plan/code", path: "/activity/plan/code",
query: { instanceId: instance.id } query: { instanceId: instance.id }
}); });
}, },
searchTable(params = {}) { searchTable (params = {}) {
this.loading = true; this.loading = true;
if ( if (
this.formValidate.date !== null && this.formValidate.date !== null &&
@ -475,7 +474,7 @@ export default {
this.loading = false; this.loading = false;
}); });
}, },
startDateChange: function(e) { startDateChange: function (e) {
// //
this.endDateOptions = { this.endDateOptions = {
disabledDate: date => { disabledDate: date => {
@ -486,7 +485,7 @@ export default {
} }
}; };
}, },
endDateChange: function(e) { endDateChange: function (e) {
// //
let endTime = this.formValidate.endDate let endTime = this.formValidate.endDate
? new Date(this.formValidate.endDate).valueOf() - ? new Date(this.formValidate.endDate).valueOf() -
@ -498,17 +497,17 @@ export default {
} }
}; };
}, },
show: function(index) { show: function (index) {
this.isShow = true; this.isShow = true;
this.showStoreName = index.name; this.showStoreName = index.name;
this.qrCodeImage = index.qrCodeAction; this.qrCodeImage = index.qrCodeAction;
this.rowData = index; this.rowData = index;
}, },
hide: function() { hide: function () {
this.isShow = false; this.isShow = false;
}, },
// //
download: function(index) { download: function (index) {
debugger; debugger;
let fileName = index.name + "-门店码"; let fileName = index.name + "-门店码";
http.downloadImg( http.downloadImg(
@ -516,10 +515,10 @@ export default {
url: index.qrCodeAction url: index.qrCodeAction
}, },
fileName, fileName,
function(/*data*/) {} function (/*data*/) { }
); );
}, },
ok: function() { ok: function () {
this.isShow = false; this.isShow = false;
} }
} }

@ -1,22 +1,25 @@
<template> <template>
<Modal <Modal v-model="dispalyModal"
v-model="dispalyModal"
width="1000" width="1000"
:loading="true" :loading="true"
:mask-closable="false" :mask-closable="false"
@on-visible-change="visibleChange" @on-visible-change="visibleChange"
@on-cancel="cancel" @on-cancel="cancel">
> <p slot="header"
<p slot="header" style="color:#f60;text-align:left"> style="color:#f60;text-align:left">
<span>配置活动</span> <span>配置活动</span>
</p> </p>
<div>基本配置</div> <div>基本配置</div>
<Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80"> <Form ref="formValidate"
:model="formValidate"
:rules="ruleValidate"
:label-width="80">
<Row> <Row>
<i-col style="text-align: left;" span="8"> <i-col style="text-align: left;"
<FormItem label prop="logo"> span="8">
<Upload <FormItem label
ref="upload" prop="logo">
<Upload ref="upload"
:show-upload-list="false" :show-upload-list="false"
:on-success="uploadImgSuccess" :on-success="uploadImgSuccess"
:format="['jpg', 'jpeg', 'png']" :format="['jpg', 'jpeg', 'png']"
@ -25,72 +28,97 @@
multiple multiple
type="drag" type="drag"
action action
style="display: inline-block;" style="display: inline-block;">
>
<div style="width: 200px;height:200px;line-height: 200px;"> <div style="width: 200px;height:200px;line-height: 200px;">
<span v-if="!formValidate.logo"></span> <span v-if="!formValidate.logo"></span>
<img <img v-if="formValidate.logo"
v-if="formValidate.logo"
:src="`/kiisoo-ic` + formValidate.logo" :src="`/kiisoo-ic` + formValidate.logo"
alt alt
style="width: 100%; height: auto" style="width: 100%; height: auto" />
/>
</div> </div>
</Upload> </Upload>
</FormItem> </FormItem>
</i-col> </i-col>
<i-col span="15" offset="1"> <i-col span="15"
<FormItem label="活动名称" prop="name"> offset="1">
<i-input type="text" v-model="formValidate.name" placeholder="请输入活动名称"></i-input> <FormItem label="活动名称"
prop="name">
<i-input type="text"
v-model="formValidate.name"
placeholder="请输入活动名称"></i-input>
</FormItem> </FormItem>
<Form-item label="活动描述" prop="description"> <Form-item label="活动描述"
<i-input prop="description">
v-model="formValidate.description" <i-input v-model="formValidate.description"
type="textarea" type="textarea"
:autosize="{ minRows: 3 }" :autosize="{ minRows: 3 }"
placeholder="请输入活动描述" placeholder="请输入活动描述"></i-input>
></i-input>
</Form-item> </Form-item>
<Form-item label="欢迎语" prop="description"> <Form-item label="欢迎语"
<i-input prop="description">
v-model="formValidate.welcome" <i-input v-model="formValidate.welcome"
type="textarea" type="textarea"
:autosize="{ minRows: 3 }" :autosize="{ minRows: 3 }"
placeholder="请输入欢迎语" placeholder="请输入欢迎语"></i-input>
></i-input>
</Form-item> </Form-item>
<FormItem label="APPID" prop="appId"> <FormItem label="标题"
<i-input type="text" v-model="formValidate.appId" placeholder="请输入appid"></i-input> prop="title">
<i-input type="text"
v-model="formValidate.title"
placeholder="请输入标题"></i-input>
</FormItem> </FormItem>
<FormItem label="URI" prop="uri"> <FormItem label="APPID"
<i-input type="text" v-model="formValidate.uri" placeholder="请输入URI"></i-input> prop="appId">
<i-input type="text"
v-model="formValidate.appId"
placeholder="请输入appid"></i-input>
</FormItem>
<FormItem label="URI"
prop="uri">
<i-input type="text"
v-model="formValidate.uri"
placeholder="请输入URI"></i-input>
</FormItem> </FormItem>
</i-col> </i-col>
</Row> </Row>
</Form> </Form>
<div class="topic">活动类型</div> <div class="topic">活动类型</div>
<Row :gutter="10" class="inputItem" v-for="(item, index) in formValidate.params" :key="index"> <Row :gutter="10"
class="inputItem"
v-for="(item, index) in formValidate.params"
:key="index">
<i-col :span="2">类型{{ index + 1 }}</i-col> <i-col :span="2">类型{{ index + 1 }}</i-col>
<i-col :span="9"> <i-col :span="9">
<i-input class="inputClass" type="text" v-model="item.name" placeholder="请输入活动类型名称"></i-input> <i-input class="inputClass"
type="text"
v-model="item.name"
placeholder="请输入活动类型名称"></i-input>
</i-col> </i-col>
<i-col :span="9"> <i-col :span="9">
<i-input <i-input class="inputClass"
class="inputClass"
type="text" type="text"
style="margin-left: 20px" style="margin-left: 20px"
v-model="item.defaultVal" v-model="item.defaultVal"
placeholder="请输入参数" placeholder="请输入参数"></i-input>
></i-input>
</i-col> </i-col>
<i-col :span="4"> <i-col :span="4">
<Button style="margin-left: 20px" type="error" @click="delActivityInput(index)"></Button> <Button style="margin-left: 20px"
type="error"
@click="delActivityInput(index)">删除</Button>
</i-col> </i-col>
</Row> </Row>
<Button style="margin-top: 10px" type="primary" @click="addActivityInput">+</Button> <Button style="margin-top: 10px"
type="primary"
@click="addActivityInput">+添加活动类型</Button>
<div slot="footer"> <div slot="footer">
<Button type="primary" shape="circle" :loading="modal_loading" @click="cancel"></Button> <Button type="primary"
<Button type="primary" shape="circle" :loading="modal_loading" @click="save"></Button> shape="circle"
:loading="modal_loading"
@click="cancel">取消</Button>
<Button type="primary"
shape="circle"
:loading="modal_loading"
@click="save">确定</Button>
</div> </div>
</Modal> </Modal>
</template> </template>
@ -99,7 +127,7 @@ import ActivityManager from "../../services/ActivityManager/ActivityManager";
import axios from "axios"; import axios from "axios";
export default { export default {
name: "addActivity", name: "addActivity",
data() { data () {
return { return {
dispalyModal: false, dispalyModal: false,
currentStep: 0, currentStep: 0,
@ -114,6 +142,7 @@ export default {
description: [ description: [
{ required: true, message: "活动描述不能为空", trigger: "blur" } { required: true, message: "活动描述不能为空", trigger: "blur" }
], ],
title: [{ required: true, message: "请输入标题", trigger: "blur" }],
appId: [{ required: true, message: "appId不能为空", trigger: "blur" }], appId: [{ required: true, message: "appId不能为空", trigger: "blur" }],
uri: [{ required: true, message: "URI不能为空", trigger: "blur" }], uri: [{ required: true, message: "URI不能为空", trigger: "blur" }],
welcome: [{ required: true, message: "请输入欢迎语", trigger: "blur" }] welcome: [{ required: true, message: "请输入欢迎语", trigger: "blur" }]
@ -128,7 +157,7 @@ export default {
id: String id: String
}, },
watch: { watch: {
addActivityModal(val) { addActivityModal (val) {
this.dispalyModal = val; this.dispalyModal = val;
if (val === true && this.id) { if (val === true && this.id) {
this.getActivityData(); this.getActivityData();
@ -157,9 +186,9 @@ export default {
this.$forceUpdate(); this.$forceUpdate();
} }
}, },
mounted() {}, mounted () { },
methods: { methods: {
addActivityInput() { addActivityInput () {
let params = [...this.formValidate.params]; let params = [...this.formValidate.params];
params.push({ params.push({
defaultVal: "", defaultVal: "",
@ -175,7 +204,7 @@ export default {
this.$set(this.formValidate, "params", params); this.$set(this.formValidate, "params", params);
this.$forceUpdate(); this.$forceUpdate();
}, },
delActivityInput(index) { delActivityInput (index) {
if (this.formValidate.params.length <= 1) { if (this.formValidate.params.length <= 1) {
this.$Message.error("至少需要填写一个活动类型!"); this.$Message.error("至少需要填写一个活动类型!");
return; return;
@ -183,30 +212,31 @@ export default {
this.formValidate.params.splice(index, 1); this.formValidate.params.splice(index, 1);
this.$forceUpdate(); this.$forceUpdate();
}, },
visibleChange(show) { visibleChange (show) {
if (!show) { if (!show) {
this.$emit("dispalyAddActivityModal", false, false); this.$emit("dispalyAddActivityModal", false, false);
} }
}, },
cancel() { cancel () {
this.$emit("dispalyAddActivityModal", false, false); this.$emit("dispalyAddActivityModal", false, false);
}, },
getActivityData() { getActivityData () {
let that = this; let that = this;
let data = { let data = {
id: that.id id: that.id
}; };
ActivityManager.getActivityInfo(data, function(data) { ActivityManager.getActivityInfo(data, function (data) {
that.formValidate = data.data.results; that.formValidate = data.data.results;
}); });
}, },
uploadImgSuccess(res, file) { uploadImgSuccess (res, file) {
this.imageName = file.name; this.imageName = file.name;
}, },
handleBeforeUpload(res) { handleBeforeUpload (res) {
const me = this; const me = this;
let data = new FormData(); let data = new FormData();
data.append("file", res); data.append("file", res);
data.append("needMediaId", true)
axios({ axios({
method: "post", method: "post",
url: "/upload", url: "/upload",
@ -214,16 +244,17 @@ export default {
headers: { headers: {
"Content-Type": "multipart/form-data" "Content-Type": "multipart/form-data"
} }
}).then(function(res) { }).then(function (res) {
if (res.data.success) { if (res.data.success) {
// me.formValidate.logo = res.data.results; // me.formValidate.logo = res.data.results;
me.$set(me.formValidate, "logo", res.data.results.localPath); me.$set(me.formValidate, "logo", res.data.results.localPath);
me.$set(me.formValidate, "mediaId", res.data.results.mediaId);
console.log(me.formValidate.logo); console.log(me.formValidate.logo);
} }
}); });
return false; return false;
}, },
save() { save () {
let that = this; let that = this;
that.modal_loading = true; that.modal_loading = true;
let i = 0; let i = 0;
@ -263,7 +294,7 @@ export default {
let data = { ...that.formValidate, isGetActivityInfo: true }; let data = { ...that.formValidate, isGetActivityInfo: true };
data.categoryId = 0; data.categoryId = 0;
data.categoryCode = "promotion"; data.categoryCode = "promotion";
ActivityManager.addOreditActivity(data, function(data) { ActivityManager.addOreditActivity(data, function (data) {
that.addActivityModal = false; that.addActivityModal = false;
that.formValidate = {}; that.formValidate = {};
that.modal_loading = false; that.modal_loading = false;

@ -175,7 +175,8 @@ export default {
.text { .text {
position: relative; position: relative;
left: 100px; left: 50px;
line-height: 44px;
} }
.inputClass { .inputClass {

@ -1,50 +1,46 @@
<template> <template>
<div class="use_box"> <div class="use_box">
<Modal :scrollable="false" <Modal
:scrollable="false"
v-model="showUse" v-model="showUse"
title="使用活动" title="使用活动"
@on-cancel="cancel" @on-cancel="cancel"
:loading="true" :loading="true"
width="70%" width="70%"
@on-visible-change="visibleChange"> @on-visible-change="visibleChange"
<Steps style="padding: 40px;" >
:current="currentStep"> <Steps style="padding: 40px;" :current="currentStep">
<Step title="基本信息"></Step> <Step title="基本信息"></Step>
<Step :title="isModify ? '修改零售公司' : '选择零售公司'" <Step :title="isModify ? '修改零售公司' : '选择零售公司'" content></Step>
content></Step> <Step :title="isModify ? '修改店铺' : '选择店铺'" content></Step>
<Step :title="isModify ? '修改店铺' : '选择店铺'" <Step title="确认信息" content></Step>
content></Step>
<Step title="确认信息"
content></Step>
</Steps> </Steps>
<useActivityStepOne :schedule="schedule" <useActivityStepOne :schedule="schedule" :isModify="isModify" v-if="currentStep == 0 && show"></useActivityStepOne>
:isModify="isModify" <useActivityStepTwo :schedule="schedule" :isModify="isModify" v-if="currentStep == 1"></useActivityStepTwo>
v-if="currentStep == 0 && show"></useActivityStepOne> <useActivityStepThree :schedule="schedule" :isModify="isModify" v-if="currentStep == 2"></useActivityStepThree>
<useActivityStepTwo :schedule="schedule" <useActivityStepFoure :schedule="schedule" :isModify="isModify" v-if="currentStep == 3"></useActivityStepFoure>
:isModify="isModify"
v-if="currentStep == 1"></useActivityStepTwo>
<useActivityStepThree :schedule="schedule"
:isModify="isModify"
v-if="currentStep == 2"></useActivityStepThree>
<useActivityStepFoure :schedule="schedule"
:isModify="isModify"
v-if="currentStep == 3"></useActivityStepFoure>
<div slot="footer"> <div slot="footer">
<Button v-if="currentStep !== 0" <Button
v-if="currentStep !== 0"
type="primary" type="primary"
shape="circle" shape="circle"
:loading="modal_loading" :loading="modal_loading"
@click="back">上一步</Button> @click="back"
<Button v-if="currentStep !== 3" >上一步</Button>
<Button
v-if="currentStep !== 3"
type="primary" type="primary"
shape="circle" shape="circle"
:loading="modal_loading" :loading="modal_loading"
@click="next">下一步</Button> @click="next"
<Button v-if="currentStep == 3" >下一步</Button>
<Button
v-if="currentStep == 3"
type="primary" type="primary"
shape="circle" shape="circle"
:loading="modal_loading" :loading="modal_loading"
@click="finish">完成</Button> @click="finish"
>完成</Button>
</div> </div>
</Modal> </Modal>
</div> </div>
@ -66,7 +62,7 @@ export default {
useActivityStepFoure useActivityStepFoure
}, },
inject: ["setMenuName"], inject: ["setMenuName"],
data () { data() {
return { return {
currentStep: 0, currentStep: 0,
modal_loading: false, modal_loading: false,
@ -87,26 +83,27 @@ export default {
} }
}, },
watch: { watch: {
show () { show() {
this.showUse = this.show; this.showUse = this.show;
}, },
schedule () { schedule() {
store.getters.useData.scheduleId = this.schedule.id; store.getters.useData.scheduleId = this.schedule.id;
} }
}, },
created () { created() {
this.setMenuName("活动管理", "活动计划");
}, },
mounted () { }, mounted() {},
methods: { methods: {
visibleChange (show) { }, visibleChange(show) {},
cancel () { cancel() {
store.commit("RSET_useData"); store.commit("RSET_useData");
this.$emit("doShow", false); this.$emit("doShow", false);
this.modal_loading = false; this.modal_loading = false;
this.showUse = false; this.showUse = false;
this.currentStep = 0; this.currentStep = 0;
}, },
next () { next() {
let data = store.getters.useData; let data = store.getters.useData;
data.name = this.schedule.name; data.name = this.schedule.name;
if (this.currentStep === 0) { if (this.currentStep === 0) {
@ -149,22 +146,29 @@ export default {
store.commit("SET_useData", data); store.commit("SET_useData", data);
this.currentStep = this.currentStep + 1; this.currentStep = this.currentStep + 1;
}, },
back () { back() {
this.currentStep = this.currentStep - 1; this.currentStep = this.currentStep - 1;
}, },
finish () { finish() {
let that = this; let that = this;
let data = store.getters.useData; let data = store.getters.useData;
data.isGetActivityInfo = true; data.isGetActivityInfo = true;
this.modal_loading = true; this.modal_loading = true;
ActivityManager.saveActivityData(store.getters.useData, function (data) { ActivityManager.saveActivityData(store.getters.useData, function(data) {
store.commit("RSET_useData"); store.commit("RSET_useData");
that.$emit("doShow", false); that.$emit("doShow", false);
that.setMenuName("活动管理", "活动计划"); // that.$router.push("/activity/plan");
that.$router.push("/activity/plan");
that.currentStep = 0; that.currentStep = 0;
that.modal_loading = false; that.modal_loading = false;
that.showUse = false; that.showUse = false;
let request = {
selectedMenu: "活动管理",
selectedSubMenu: "活动计划",
data: {},
type: 2
};
that.bus.$emit("callBack",request);
}); });
} }
} }

@ -77,6 +77,18 @@
title: '店铺编号', title: '店铺编号',
key: 'storeCode' key: 'storeCode'
}, },
{
title: '工号',
key: 'staffCode'
},
{
title: '别名',
key: 'alias'
},
{
title: '手机号',
key: 'phone'
},
{ {
title: '所属零售公司', title: '所属零售公司',
key: 'companyName' key: 'companyName'

@ -3,15 +3,20 @@
<template> <template>
<Row class="search-row"> <Row class="search-row">
<i-col span="8"> <i-col span="8">
<p class="" style="font-size: 16px;line-height: 22px;margin-top: 10px;margin-left: 20px;margin-right: 20px;">招募令</p> <p class=""
<p class="" style="font-size: 13px;line-height: 32px;margin-left: 20px;margin-right: 20px;">便于门店进行推广员招募</p> style="font-size: 16px;line-height: 22px;margin-top: 10px;margin-left: 20px;margin-right: 20px;">招募令</p>
<p class=""
style="font-size: 13px;line-height: 32px;margin-left: 20px;margin-right: 20px;">便于门店进行推广员招募</p>
</i-col> </i-col>
<i-col span="8"> <i-col span="8">
<span class="">使用范围26家零售公司785家店铺</span> <span class="">使用范围{{welcome.company.length || 0}}家零售公司{{welcome.stores.length || 0}}家店铺</span>
<span class="" style="border: 0px; color: rgb(52, 150, 235); margin-left: 15px; cursor: pointer;" @click="showStores"></span> <span class=""
style="border: 0px; color: rgb(52, 150, 235); margin-left: 15px; cursor: pointer;"
@click="showStores">修改</span>
</i-col> </i-col>
<i-col span="8"> <i-col span="8">
<i-switch size="large" @on-change="witchChange"> <i-switch size="large"
@on-change="witchChange">
<span slot="open">开启</span> <span slot="open">开启</span>
<span slot="close">关闭</span> <span slot="close">关闭</span>
</i-switch> </i-switch>
@ -20,11 +25,14 @@
<div> <div>
<p style="margin:10px 0 10px -480px;text-align:center">招募海报</p> <p style="margin:10px 0 10px -480px;text-align:center">招募海报</p>
<div style="text-align: center;"> <div style="text-align: center;">
<img style="width:500px;height:500px" :src="imgUrl" alt=""> <img style="width:500px;height:500px"
:src="imgUrl"
alt="">
</div> </div>
<!-- <div style="margin-top:20px;text-align: center;"><Button ghost type="primary">上传</Button></div> --> <!-- <div style="margin-top:20px;text-align: center;"><Button ghost type="primary">上传</Button></div> -->
<Upload v-show="showUpload" ref="upload" <Upload v-show="showUpload"
ref="upload"
:show-upload-list="false" :show-upload-list="false"
:on-success="uploadImgSuccess" :on-success="uploadImgSuccess"
:format="['jpg', 'jpeg', 'png']" :format="['jpg', 'jpeg', 'png']"
@ -33,11 +41,18 @@
multiple multiple
action="" action=""
style="padding-top:10px;text-align: center;"> style="padding-top:10px;text-align: center;">
<Button ghost type="primary">上传</Button> <Button ghost
type="primary">上传</Button>
</Upload> </Upload>
<div style="margin-top:20px;text-align: center;"> <div style="margin-top:20px;text-align: center;">
<Button type="primary" size="large" @click="onEdit" style="margin-right:10px">{{btnStr}}</Button> <Button type="primary"
<Button v-show="showUpload" type="text" size="large" @click="onCancel"></Button> size="large"
@click="onEdit"
style="margin-right:10px">{{btnStr}}</Button>
<Button v-show="showUpload"
type="text"
size="large"
@click="onCancel">取消</Button>
</div> </div>
</div> </div>
</template> </template>
@ -54,11 +69,10 @@ import bulletinService from '../../services/recruit/Bulletin'
import http from '../../services/CommonHttp'; import http from '../../services/CommonHttp';
import axios from "axios"; import axios from "axios";
export default { export default {
inject:['reload'],
components: { components: {
selectStoreStep, selectStoreStep,
}, },
data() { data () {
return { return {
showStoreCheck: false, showStoreCheck: false,
welcome: { welcome: {
@ -67,33 +81,36 @@ export default {
company: [], company: [],
stores: [], stores: [],
}, },
inidData:{}, inidData: {},
showUpload:false, showUpload: false,
btnStr:'编辑', btnStr: '编辑',
imgUrl:'', imgUrl: '',
onWitch:false, onWitch: false,
uploadUrl:"" uploadUrl: "",
oldImg: ""
}; };
}, },
mounted: function() { mounted: function () {
}, },
created() { created () {
this.initData(); this.initData();
}, },
inject: ['reload'],
methods: { methods: {
witchChange(status) { witchChange (status) {
this.onWitch = status; this.onWitch = status;
}, },
initData(){ initData () {
let that = this; let that = this;
bulletinService.getDetail({}, function (data) { bulletinService.getDetail({}, function (data) {
console.log(data); console.log(data);
if(data.data.results.scheduleVO.params.length>0){ if (data.data.results.scheduleVO.params.length > 0) {
that.imgUrl = http.getBaseUrl() + data.data.results.scheduleVO.params[0].defaultVal; that.imgUrl = http.getBaseUrl() + data.data.results.scheduleVO.params[0].defaultVal;
that.oldImg = http.getBaseUrl() + data.data.results.scheduleVO.params[0].defaultVal;
} }
that.initData = data.data.results; that.initData = data.data.results;
that.welcome = { ...that.initData, company: [...that.initData.organizations] };
}, function (err) { }, function (err) {
that.$Message.error("网络异常,请重试"); that.$Message.error("网络异常,请重试");
that.setNoLoading(); that.setNoLoading();
@ -102,56 +119,59 @@ export default {
doShow () { doShow () {
this.showStoreCheck = false this.showStoreCheck = false
this.welcome = store.getters.useData this.welcome = store.getters.useData
console.log(this.welcome); console.log('@', this.welcome);
}, },
showStores () { showStores () {
console.log({ ...store.getters.useData, ...this.welcome }) console.log(this.welcome, { ...store.getters.useData, ...this.welcome, ...this.initData })
store.commit('SET_useData', { ...store.getters.useData, ...this.welcome }) store.commit('SET_useData', { ...store.getters.useData, ...this.welcome, ...this.initData })
this.showStoreCheck = true this.showStoreCheck = true
}, },
onEdit(){ onEdit () {
if(this.btnStr == '编辑'){ if (this.btnStr == '编辑') {
this.showUpload = true; this.showUpload = true;
this.btnStr = '保存' this.btnStr = '保存'
}else{ } else {
this.initData.isGetActivityInfo = true; let _this = this;
try{
if(this.welcome.stores.length>0){
this.initData.stores = this.welcome.stores; this.initData.stores = this.welcome.stores;
this.initData.company = this.welcome.company;
let param = this.initData
if (param.stores.length <= 0) {
_this.$Message.error("请至少选择一个店铺");
_this.loading = false;
return false;
} }
}catch(e){ param.isGetActivityInfo = true;
console.log(e); if (this.onWitch) {
} param.status = 1;
if(this.onWitch){ param.stores.forEach(item => {
this.initData.status = 1;
this.initData.stores.forEach(item => {
item.status = 1; item.status = 1;
}) })
}else{ } else {
this.initData.status = 3; param.status = 3;
this.initData.stores.forEach(item => { param.stores.forEach(item => {
item.status = 2; item.status = 2;
}) })
} }
if(this.uploadUrl != ""){ if (this.uploadUrl != "") {
this.initData.scheduleVO.params.forEach(item => { param.scheduleVO.params.forEach(item => {
item.defaultVal = item.description = this.uploadUrl; item.defaultVal = item.description = this.uploadUrl;
}) })
} }
let that = this; bulletinService.dosave(param, function (data) {
bulletinService.dosave(this.initData, function (data) {
console.log(data); console.log(data);
that.$Message.info("保存成功"); _this.$Message.info("保存成功");
that.reload(); _this.btnStr = '编辑'
_this.showUpload = false;
}, function (err) { }, function (err) {
that.$Message.error("网络异常,请重试"); _this.$Message.error("网络异常,请重试");
that.setNoLoading(); _this.setNoLoading();
}); });
} }
}, },
onCancel(){ onCancel () {
this.showUpload = false; this.showUpload = false;
this.imgUrl = this.oldImg;
this.btnStr = '编辑' this.btnStr = '编辑'
}, },
uploadImgSuccess (res, file) { uploadImgSuccess (res, file) {

@ -564,4 +564,7 @@
.search-btn{ .search-btn{
margin-left: 40px; margin-left: 40px;
} }
.ivu-tabs{
overflow :inherit;
}
</style> </style>

@ -3,7 +3,7 @@
<Row class="search-row"> <Row class="search-row">
<i-col span="24" class="search-col"> <i-col span="24" class="search-col">
<Row class="row-style"> <Row class="row-style">
<i-input placeholder="店铺名称或编码" class="search-select" :on-enter="searchCustomerDataBtnClick" v-model="searchShop"/> <i-input placeholder="店铺名称或编码" class="search-select" @on-enter="searchCustomerDataBtnClick" v-model="searchShop"/>
<span class="search-span">大区</span> <span class="search-span">大区</span>
<Select v-model="regionId" filterable class="search-select" @on-change="regionSelect"> <Select v-model="regionId" filterable class="search-select" @on-change="regionSelect">
<Option v-for="(item,index) in regionList" :value="item.id" :key=" index + item.id">{{ item.name }}</Option> <Option v-for="(item,index) in regionList" :value="item.id" :key=" index + item.id">{{ item.name }}</Option>

@ -256,6 +256,7 @@ export default {
params: [], params: [],
company: [], company: [],
stores: [], stores: [],
scheduleId: null,
categoryCode: "welcome", categoryCode: "welcome",
id: null id: null
}, },
@ -304,6 +305,10 @@ export default {
console.log(this.$route); console.log(this.$route);
if (this.id) { if (this.id) {
this.getDetail(this.id); this.getDetail(this.id);
} else {
store.commit("SET_useData", {
...this.welcome
});
} }
}, },
components: { components: {

@ -204,6 +204,6 @@ export default {
height: 30px; height: 30px;
} }
button:hover { button:hover {
background: inherit !important; /*background: inherit !important;*/
} }
</style> </style>

@ -3,7 +3,7 @@
<template> <template>
<Row class="search-row"> <Row class="search-row">
<!-- <span class="search-span">账户名</span>--> <!-- <span class="search-span">账户名</span>-->
<i-input placeholder="搜索用户名/账户" class="left-15 search-select" :on-enter="listAccountInfoFunction" v-model="searchContent"/> <i-input placeholder="搜索用户名/账户" class="left-15 search-select" @on-enter="listAccountInfoFunction" v-model="searchContent"/>
<span class="search-span">角色</span> <span class="search-span">角色</span>
<Select filterable placeholder="请选择角色" v-model="selectedRoleId" class="left-15 search-select" <Select filterable placeholder="请选择角色" v-model="selectedRoleId" class="left-15 search-select"
@on-change="onRoleChangeLister"> @on-change="onRoleChangeLister">

@ -367,7 +367,13 @@
goToAccManagerPage: function (item) { goToAccManagerPage: function (item) {
// this.$router.push({path: '/account/manager',query:item}); // this.$router.push({path: '/account/manager',query:item});
// //
this.bus.$emit("callBack",item); let request = {
selectedMenu: "设置管理",
selectedSubMenu: "账户管理",
data: item,
type: 1
};
this.bus.$emit("callBack",request);
}, },
// //
selectRole: function (id) { selectRole: function (id) {

@ -7,9 +7,7 @@ import commonUtils from '../utils/Common'
// http://mf.kiisoo.com:58080/ // http://mf.kiisoo.com:58080/
// axios.defaults.baseURL = 'https://wxtk.bsdits.com/kiisoo-ic/'; // axios.defaults.baseURL = 'https://wxtk.bsdits.com/kiisoo-ic/';
axios.defaults.baseURL = axios.defaults.baseURL =
process.env.NODE_ENV === 'production' process.env.NODE_ENV === 'production' ? '/kiisoo-ic/' : '/kiisoo-ic'
? 'http://111.231.218.44:8080/kiisoo-ic'
: '/kiisoo-ic'
//响应时间 //响应时间
axios.defaults.timeout = 120000 axios.defaults.timeout = 120000
@ -227,19 +225,19 @@ export function fetchDelete(url, params) {
}) })
} }
export function downloadZip(url,filename, options = {}) { export function downloadZip(url, filename, options = {}) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios.defaults.headers['content-type'] = 'application/json;charset=UTF-8' axios.defaults.headers['content-type'] = 'application/json;charset=UTF-8'
axios({ axios({
method: 'post', method: 'post',
url: url, // 请求地址 url: url, // 请求地址
data: {}, // 参数 data: options, // 参数
responseType: 'blob' // 表明返回服务器返回的数据类型 responseType: 'blob', // 表明返回服务器返回的数据类型
}).then( }).then(
response => { (response) => {
resolve(response.data) resolve(response.data)
let blob = new Blob([response.data], { let blob = new Blob([response.data], {
type: 'application/zip' type: 'application/zip',
}) })
console.log(blob) console.log(blob)
let fileName = filename + '.zip' let fileName = filename + '.zip'
@ -255,10 +253,8 @@ export function downloadZip(url,filename, options = {}) {
//释放内存 //释放内存
window.URL.revokeObjectURL(link.href) window.URL.revokeObjectURL(link.href)
} }
options.page.loading = false
}, },
err => { (err) => {
options.page.loading = false
reject(err) reject(err)
} }
) )

@ -6,11 +6,11 @@ module.exports = {
// publicPath: process.env.NODE_ENV === 'production' ? '/public/' : './', // publicPath: process.env.NODE_ENV === 'production' ? '/public/' : './',
/* history模式 */ /* history模式 */
publicPath: process.env.NODE_ENV === 'production' ? '/dist/' : '/', publicPath: process.env.NODE_ENV === 'production' ? '/' : '/',
/* 输出文件目录在npm run build时生成文件的目录名称 */ /* 输出文件目录在npm run build时生成文件的目录名称 */
outputDir: 'dist', outputDir: 'dist',
/* 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 */ /* 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 */
assetsDir: "assets", assetsDir: 'assets',
/* 是否在构建生产包时生成 sourceMap 文件false将提高构建速度 */ /* 是否在构建生产包时生成 sourceMap 文件false将提高构建速度 */
productionSourceMap: false, productionSourceMap: false,
/* 默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变) */ /* 默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变) */
@ -30,7 +30,7 @@ module.exports = {
/* 使用代理 后台接口路径 */ /* 使用代理 后台接口路径 */
// proxy: 'http://192.168.1.123:8312/' // proxy: 'http://192.168.1.123:8312/'
// proxy: 'http://192.168.31.177:8312/' // proxy: 'http://192.168.31.177:8312/'
proxy: 'http://localhost:8312/' proxy: 'http://localhost:8080/',
// proxy: 'http://jdxdev.vipgz4.idcfengye.com/' // proxy: 'http://jdxdev.vipgz4.idcfengye.com/'
} },
} }

Loading…
Cancel
Save