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 "./iview";
import "./vcharts";
import "lib-flexible/flexible";
import "./flexible";
import _ from "lodash";
Vue.prototype.$axios = axios;
Vue.prototype.$qs = QS;
Vue.prototype.$moment = moment;
Vue.config.productionTip = false;
Vue.prototype.$moment = moment;
Vue.prototype._ = _;
import echarts from "echarts";

@ -1,367 +1,358 @@
<template>
<div class="layout">
<Layout :style="{minHeight: '100vh'}">
<Sider collapsible
:collapsed-width="78"
v-model="isCollapsed"
:hide-trigger="true">
<div class="layout">
<Layout :style="{minHeight: '100vh'}">
<Sider collapsible :collapsed-width="78" v-model="isCollapsed" :hide-trigger="true" >
<div style="margin: 40px 0 20px 10px;font-weight: bold;font-size: 30px;color: #ffffff;">
<Poptip placement="bottom-start"
width="200"
:offset="-8">
<img src="../../static/img/avatar.png"
style="width: 32px;vertical-align: middle;cursor: pointer" />
<div slot="content">
<div style="cursor: pointer;"
@click="logoutClick">
<span class="logout-span">退出登录</span>
<img class="logout-img"
src="../../static/img/logout.png" />
</div>
</div>
</Poptip>
<span class="project-title">优客后台管理</span>
</div>
<div style="margin: 40px 0 20px 10px;font-weight: bold;font-size: 30px;color: #ffffff;">
<Poptip placement="bottom-start" width="200" :offset="-8">
<img src="../../static/img/avatar.png" style="width: 32px;vertical-align: middle;cursor: pointer"/>
<div slot="content">
<div style="cursor: pointer;" @click="logoutClick">
<span class="logout-span">退出登录</span>
<img class="logout-img" src="../../static/img/logout.png"/>
</div>
</div>
</Poptip>
<span class="project-title">优客后台管理</span>
</div>
<Menu ref="menu"
:active-name="selectedItemName"
:open-names="openName"
theme="dark"
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>
</MenuItem>
<Submenu :name="item.id"
v-for="item in onePermissionList"
:key="item.id">
<template slot="title">
<Icon type="ios-paper" />
{{item.name}}
</template>
<MenuItem :name="cItem.id"
:to="cItem.resource"
v-for="cItem in item.subMenuList"
:key="cItem.id">
{{cItem.name}}
</MenuItem>
</Submenu>
</Menu>
</Sider>
<Layout>
<!-- <Header :style="{background: '#fff', boxShadow: '0 2px 3px 2px rgba(0,0,0,.1)'}"></Header>-->
<Content :style="{padding: '0 16px 16px'}">
<Breadcrumb :style="{margin: '16px 0'}">
<BreadcrumbItem><span style="cursor: pointer"
@click="breadcrumbClick">{{selectedMenu}}</span></BreadcrumbItem>
<BreadcrumbItem>{{selectedSubMenu}}</BreadcrumbItem>
</Breadcrumb>
<Card>
<div :style="{'min-height':mHeight + 'px'}">
<router-view />
</div>
</Card>
</Content>
</Layout>
</Layout>
</div>
<Menu ref="menu" :active-name="selectedItemName" :open-names="openName" theme="dark" 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>
</MenuItem>
<Submenu :name="item.id" v-for="item in onePermissionList" :key="item.id">
<template slot="title">
<Icon type="ios-paper"/>
{{item.name}}
</template>
<MenuItem :name="cItem.id" :to="cItem.resource" v-for="cItem in item.subMenuList"
:key="cItem.id">
{{cItem.name}}
</MenuItem>
</Submenu>
</Menu>
</Sider>
<Layout>
<!-- <Header :style="{background: '#fff', boxShadow: '0 2px 3px 2px rgba(0,0,0,.1)'}"></Header>-->
<Content :style="{padding: '0 16px 16px'}">
<Breadcrumb :style="{margin: '16px 0'}">
<BreadcrumbItem><span style="cursor: pointer" @click="breadcrumbClick">{{selectedMenu}}</span></BreadcrumbItem>
<BreadcrumbItem>{{selectedSubMenu}}</BreadcrumbItem>
</Breadcrumb>
<Card>
<div :style="{'min-height':mHeight + 'px'}">
<router-view/>
</div>
</Card>
</Content>
</Layout>
</Layout>
</div>
</template>
<script>
import homeRequest from "../services/home/homeRequest";
import homeRequest from "../services/home/homeRequest";
export default {
provide () {
return {
checkParamBlank: this.checkParamBlank,
setMenuName: this.setMenuName,
};
},
data () {
return {
roleCode: JSON.parse(sessionStorage.getItem("loginInfo")).roleCode,
mainUrl: "/customer/view",
isCollapsed: false,
mHeight: 600,
selectedItemName: "",
openName: [],
selectedMenu: '',
selectedSubMenu: '',
//
onePermissionLevel: 1,
twoPermissionLevel: 2,
threePermissionLevel: 3,
//-1
onePermissionList: [],
//2
twoPermissionList: [],
//3
threePermissionList: [],
//
breadcrumbUrl: "",
}
},
mounted () {
let that = this;
this.bus.$on('callBack', function (item) {
that.callBack(item);
})
// this.bus.$on('setHeader', function (data) {
// that.setHeader(data);
// })
},
created () {
// this.mHeight = window.screen.availHeight - 22;
export default {
provide() {
return {
checkParamBlank: this.checkParamBlank,
setMenuName: this.setMenuName,
};
},
data() {
return {
roleCode: JSON.parse(sessionStorage.getItem("loginInfo")).roleCode,
mainUrl: "/customer/view",
isCollapsed: false,
mHeight: 600,
selectedItemName: "",
openName: [],
selectedMenu: '',
selectedSubMenu: '',
//
onePermissionLevel: 1,
twoPermissionLevel: 2,
threePermissionLevel: 3,
//-1
onePermissionList: [],
//2
twoPermissionList: [],
//3
threePermissionList: [],
//
breadcrumbUrl: "",
}
},
mounted() {
let that = this;
this.bus.$on('callBack', function (item) {
that.callBack(item);
})
// this.bus.$on('setHeader', function (data) {
// that.setHeader(data);
// })
},
created() {
// this.mHeight = window.screen.availHeight - 22;
//
this.listOnePermission(this.onePermissionLevel);
},
computed: {
//
this.listOnePermission(this.onePermissionLevel);
},
computed: {
},
watch: {
'selectedItemName' (val) {
console.log(val);
let that = this;
// that.openName = [that.onePermissionList[2]];
this.$nextTick(() => {
that.$refs.menu.updateActiveName();
});
}
},
watch: {
'selectedItemName' (val) {
console.log(val);
let that = this;
// that.openName = [that.onePermissionList[2]];
this.$nextTick(() => {
that.$refs.menu.updateActiveName();
});
}
},
methods: {
onSelectLister(val) {
let i;
this.onePermissionList.forEach(function (data) {
data.subMenuList.forEach(function (dta) {
if(dta.id === val){
i = dta;
}
})
});
if(i){
sessionStorage.setItem("threeLevel",JSON.stringify(i.subMenuList));
}
//
if(val === 0){
this.selectedMenu = "首页";
this.selectedSubMenu = "";
this.breadcrumbUrl = this.mainUrl;
}
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.id === val) {
this.selectedMenu = item.name;
this.selectedSubMenu = cItem.name;
this.selectedItemName = cItem.id;
this.breadcrumbUrl = cItem.resource;
}
}
}
},
//
checkParamBlank: function (obj) {
for (let param in obj) {
obj[param] = this.checkBlank(obj[param]);
}
},
//
checkBlank: function (data) {
if (!data && data != 0) {
return "--";
} else {
return data;
}
},
//
listOnePermission(level) {
let that = this;
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let request = {
userId: userId,
level: level
};
homeRequest.listUserLoginPermissionApi(request, function (data) {
data = data.data;
if (data.code === '0001') {
that.$Message.error("查询用户权限出错");
return;
}
if (data.code === '0000') {
data = data.results;
for (let i = 0; i < data.length; i++) {
let row = data[i];
row.class = 'head-permission';
that.onePermissionList.push(row);
}
that.listTwoPermission(that.twoPermissionLevel);
}
})
},
//
listTwoPermission(level) {
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let that = this;
that.twoPermissionList = [];
let request = {
userId: userId,
level: level
};
homeRequest.listUserLoginPermissionApi(request, function (data) {
data = data.data;
if (data.code === '0001') {
that.$Message.error("查询用户权限出错");
return;
}
if (data.code === '0000') {
data = data.results;
that.twoPermissionList = [];
for (let i = 0; i < data.length; i++) {
let row = data[i];
that.twoPermissionList.push(row);
}
that.listThreePermission(that.threePermissionLevel);
}
})
},
//
listThreePermission(level) {
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let that = this;
that.threePermissionList = [];
let request = {
userId: userId,
level: level
};
homeRequest.listUserLoginPermissionApi(request, function (data) {
data = data.data;
if (data.code === '0001') {
that.$Message.error("查询用户权限出错");
return;
}
if (data.code === '0000') {
data = data.results;
that.threePermissionList = [];
for (let i = 0; i < data.length; i++) {
let row = data[i];
that.threePermissionList.push(row);
}
that.twoPermissionList.forEach(function (two) {
//
let three = that.threePermissionList.filter(function (data) {
return data.pid === two.id
});
two.subMenuList = three;
});
that.onePermissionList.forEach(function (one) {
//
let two = that.twoPermissionList.filter(function (data) {
return data.pid === one.id
});
one.subMenuList = two;
});
//
that.menuInit();
}
})
},
//
menuInit: function () {
let that = this;
if(this.roleCode === 'GLY-ADMIN' || this.roleCode === 'DG-YUNYING' || this.roleCode === 'GL-YUNYING'){
//
that.selectedItemName = 0;
this.$router.push({path: that.mainUrl});
this.selectedMenu = "首页";
this.breadcrumbUrl = this.mainUrl;
}else{
that.selectedItemName = that.onePermissionList[0].subMenuList[0].id;
that.openName = [that.onePermissionList[0].id];
},
methods: {
onSelectLister (val) {
let i;
this.onePermissionList.forEach(function (data) {
data.subMenuList.forEach(function (dta) {
if (dta.id === val) {
i = dta;
}
})
});
if (i) {
sessionStorage.setItem("threeLevel", JSON.stringify(i.subMenuList));
}
//
if (val === 0) {
this.selectedMenu = "首页";
this.selectedSubMenu = "";
this.breadcrumbUrl = this.mainUrl;
}
this.selectedMenu = this.onePermissionList[0].name;
this.selectedSubMenu = this.onePermissionList[0].subMenuList[0].name;
sessionStorage.setItem("threeLevel",JSON.stringify(this.onePermissionList[0].subMenuList[0].subMenuList));
// this.$nextTick(() => {
// this.$refs.menu.updateOpened();
// this.$refs.menu.updateActiveName();
// });
this.$router.push({path: that.onePermissionList[0].subMenuList[0].resource});
}
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.id === val) {
this.selectedMenu = item.name;
this.selectedSubMenu = cItem.name;
this.selectedItemName = cItem.id;
this.breadcrumbUrl = cItem.resource;
}
}
}
},
//
checkParamBlank: function (obj) {
for (let param in obj) {
obj[param] = this.checkBlank(obj[param]);
}
},
//
checkBlank: function (data) {
if (!data && data != 0) {
return "--";
} else {
return data;
}
},
//
listOnePermission (level) {
let that = this;
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let request = {
userId: userId,
level: level
};
homeRequest.listUserLoginPermissionApi(request, function (data) {
data = data.data;
if (data.code === '0001') {
that.$Message.error("查询用户权限出错");
return;
}
if (data.code === '0000') {
data = data.results;
for (let i = 0; i < data.length; i++) {
let row = data[i];
row.class = 'head-permission';
that.onePermissionList.push(row);
}
that.listTwoPermission(that.twoPermissionLevel);
}
},
//
callBack(val) {
this.selectedMenu = val.selectedMenu;
this.selectedSubMenu = val.selectedSubMenu;
})
},
//
listTwoPermission (level) {
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let that = this;
that.twoPermissionList = [];
let request = {
userId: userId,
level: level
};
homeRequest.listUserLoginPermissionApi(request, function (data) {
data = data.data;
if (data.code === '0001') {
that.$Message.error("查询用户权限出错");
return;
}
if (data.code === '0000') {
data = data.results;
that.twoPermissionList = [];
for (let i = 0; i < data.length; i++) {
let row = data[i];
that.twoPermissionList.push(row);
}
that.listThreePermission(that.threePermissionLevel);
}
let url = "";
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;
})
},
//
listThreePermission (level) {
let userId = JSON.parse(sessionStorage.getItem("loginInfo")).userId;
let that = this;
that.threePermissionList = [];
let request = {
userId: userId,
level: level
};
homeRequest.listUserLoginPermissionApi(request, function (data) {
data = data.data;
if (data.code === '0001') {
that.$Message.error("查询用户权限出错");
return;
}
if (data.code === '0000') {
data = data.results;
that.threePermissionList = [];
for (let i = 0; i < data.length; i++) {
let row = data[i];
that.threePermissionList.push(row);
}
that.twoPermissionList.forEach(function (two) {
//
let three = that.threePermissionList.filter(function (data) {
return data.pid === two.id
});
two.subMenuList = three;
});
that.onePermissionList.forEach(function (one) {
//
let two = that.twoPermissionList.filter(function (data) {
return data.pid === one.id
});
one.subMenuList = two;
});
//
that.menuInit();
}
})
},
//
menuInit: function () {
let that = this;
if (this.roleCode === 'GLY-ADMIN' || this.roleCode === 'DG-YUNYING' || this.roleCode === 'GL-YUNYING') {
//
that.selectedItemName = 0;
this.$router.push({ path: that.mainUrl });
this.selectedMenu = "首页";
this.breadcrumbUrl = this.mainUrl;
} else {
that.selectedItemName = that.onePermissionList[0].subMenuList[0].id;
that.openName = [that.onePermissionList[0].id];
}
}
}
this.selectedMenu = this.onePermissionList[0].name;
this.selectedSubMenu = this.onePermissionList[0].subMenuList[0].name;
sessionStorage.setItem("threeLevel", JSON.stringify(this.onePermissionList[0].subMenuList[0].subMenuList));
// this.$nextTick(() => {
// this.$refs.menu.updateOpened();
// this.$refs.menu.updateActiveName();
// });
this.$router.push({ path: that.onePermissionList[0].subMenuList[0].resource });
}
if(val.type === 1){
this.$router.push({path: url,query:val.data});
}else{
this.$router.push(url);
}
},
//
callBack (item) {
let that = this;
this.selectedMenu = "设置管理";
this.selectedSubMenu = "账户管理";
this.selectedItemName = this.onePermissionList[2].subMenuList[0].id;
this.$router.push({ path: '/account/manager', query: item });
},
setHeader (data) {
let that = this;
this.selectedSubMenu = data.header;
this.$nextTick(() => {
that.$refs.menu.updateActiveName();
})
},
//
setMenuName: function (menu1, menu2) {
console.log("setMenu", arguments)
this.selectedMenu = menu1;
this.selectedSubMenu = menu2;
let parentId;
let subId;
this.onePermissionList.forEach(item => {
if (item.name == menu1) parentId = item.id
})
this.$forceUpdate()
},
//
breadcrumbClick: function () {
if (this.selectedMenu === "首页") {
this.selectedSubMenu = "";
}
this.$router.push(this.breadcrumbUrl);
},
//
logoutClick: function () {
sessionStorage.setItem("loginInfo", "");
sessionStorage.setItem("userId", "");
sessionStorage.setItem("roleCode", "");
this.$router.push('/login');
this.$Message.info("登出成功");
},
setHeader(data){
let that = this;
this.selectedSubMenu = data.header;
this.$nextTick(() => {
that.$refs.menu.updateActiveName();
})
},
//
setMenuName: function (menu1, menu2) {
this.selectedMenu = menu1;
this.selectedSubMenu = menu2;
},
//
breadcrumbClick: function () {
if(this.selectedMenu === "首页"){
this.selectedSubMenu = "";
}
this.$router.push(this.breadcrumbUrl);
},
//
logoutClick: function () {
sessionStorage.setItem("loginInfo", "");
sessionStorage.setItem("userId", "");
sessionStorage.setItem("roleCode", "");
this.$router.push('/login');
this.$Message.info("登出成功");
}
},
}
},
}
</script>
<style scoped>
.layout-con {
height: 100%;
width: 100%;
}
/*项目标题*/
.project-title {
font-size: 22px;
margin-left: 15px;
}
/*退出登入*/
.logout-span {
font-size: 15px;
vertical-align: middle;
color: #535353;
}
.logout-img {
vertical-align: middle;
margin-left: 80px;
}
.layout-con {
height: 100%;
width: 100%;
}
/*项目标题*/
.project-title{
font-size: 22px;
margin-left: 15px;
}
/*退出登入*/
.logout-span{
font-size: 15px;
vertical-align: middle;
color: #535353;
}
.logout-img{
vertical-align: middle;
margin-left: 80px;
}
</style>

@ -1,33 +1,70 @@
<template>
<div class="activity_code">
<Table :loading="loading" border :columns="columns" :data="data">
<template slot-scope="{row}" slot="qrCodeAction">
<img :src="require('../../../static/img/qrCode-init.png')" @click="show(row)"
class="table-img-qr-code"/>
<Row class="search-row">
<i-col span="24"
class="search-col">
<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>
<router-link slot-scope="{row}" slot="action"
:to="{path:'/shop/increase/manager/staff',query:{storeId:row.id}}">
<Button ghost class="router-btn"> 门店导购管理</Button>
<router-link slot-scope="{row}"
slot="action"
:to="{path:'/shop/increase/manager/staff',query:{storeId:row.store.id}}">
<Button class="router-btn"> 门店导购管理</Button>
</router-link>
</Table>
<Page
:total="totalSize"
:current="pageNum"
:page-size="pageSize"
show-elevator
show-total
placement="top"
@on-change="handlePage"
class-name="ks-page"
></Page>
<Page :total="totalSize"
:current="pageNum"
:page-size="pageSize"
show-elevator
show-total
placement="top"
@on-change="handlePage"
class-name="ks-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>
</template>
<script>
import { activityCodeList } from "../../services/ActivityManager/ActivityManager";
import http from '../../services/store/IncreaseStoreManager';
import doHttp from '../../services/CommonHttp'
export default {
name: "ActivityCode",
data() {
data () {
let _this = this;
return {
loading: false,
@ -36,6 +73,10 @@ export default {
pageSize: 10,
data: [],
instanceId: 0,
isShow: false,
showStoreName: "",
qrCodeImage: "",
rowData: {},
columns: [
{
width: 80,
@ -52,28 +93,28 @@ export default {
{
title: "所属零售公司",
key: "organizational.name",
render(h, params) {
render (h, params) {
return h("span", params.row["organizational"]["name"]);
},
},
{
title: "零售公司编号",
key: "organizational.code",
render(h, params) {
render (h, params) {
return h("span", params.row["organizational"]["code"]);
},
},
{
title: "店铺名称",
key: "store.name",
render(h, params) {
render (h, params) {
return h("span", params.row["store"]["name"]);
},
},
{
title: "店铺编号",
key: "store.code",
render(h, params) {
render (h, params) {
return h("span", params.row["store"]["code"]);
},
},
@ -135,19 +176,37 @@ export default {
],
};
},
created() {
created () {
this.instanceId = this.$route.query.instanceId;
this.load();
},
methods: {
handlePage(value) {
ok: function () {
this.isShow = false;
},
cancel: function () {
this.isShow = false;
},
handlePage (value) {
this.pageNum = value;
this.load();
},
showQrcode(row) {
showQrcode (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;
this.loading = true;
params.pageSize = this.pageSize;
@ -159,12 +218,27 @@ export default {
_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>
<style>
.table-width-80 {
width: 80px !important;
}
.table-width-80 {
width: 80px !important;
}
.table-img-qr-code {
margin-left: 5px;
margin-top: 5px;
width: 30px;
height: 30px;
}
</style>

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

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

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

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

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

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

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

@ -3,7 +3,7 @@
<Row class="search-row">
<i-col span="24" class="search-col">
<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>
<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>

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

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

@ -3,7 +3,7 @@
<template>
<Row class="search-row">
<!-- <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>
<Select filterable placeholder="请选择角色" v-model="selectedRoleId" class="left-15 search-select"
@on-change="onRoleChangeLister">

@ -367,7 +367,13 @@
goToAccManagerPage: function (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) {

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

@ -5,32 +5,32 @@ module.exports = {
/* 用于默认#模式 */
// publicPath: process.env.NODE_ENV === 'production' ? '/public/' : './',
/* history模式 */
publicPath: process.env.NODE_ENV === 'production' ? '/dist/' : '/',
/* 输出文件目录在npm run build时生成文件的目录名称 */
outputDir: 'dist',
/* 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 */
assetsDir: "assets",
/* 是否在构建生产包时生成 sourceMap 文件false将提高构建速度 */
productionSourceMap: false,
/* 默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变) */
filenameHashing: false,
/* 代码保存时进行eslint检测 */
lintOnSave: true,
/* webpack-dev-server 相关配置 */
devServer: {
/* 自动打开浏览器 */
open: true,
/* 设置为0.0.0.0则所有的地址均能访问 */
host: '0.0.0.0',
port: 8311,
https: false,
hotOnly: false,
disableHostCheck: true,
/* 使用代理 后台接口路径 */
// proxy: 'http://192.168.1.123:8312/'
// proxy: 'http://192.168.31.177:8312/'
proxy: 'http://localhost:8312/'
// proxy: 'http://jdxdev.vipgz4.idcfengye.com/'
}
/* history模式 */
publicPath: process.env.NODE_ENV === 'production' ? '/' : '/',
/* 输出文件目录在npm run build时生成文件的目录名称 */
outputDir: 'dist',
/* 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 */
assetsDir: 'assets',
/* 是否在构建生产包时生成 sourceMap 文件false将提高构建速度 */
productionSourceMap: false,
/* 默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变) */
filenameHashing: false,
/* 代码保存时进行eslint检测 */
lintOnSave: true,
/* webpack-dev-server 相关配置 */
devServer: {
/* 自动打开浏览器 */
open: true,
/* 设置为0.0.0.0则所有的地址均能访问 */
host: '0.0.0.0',
port: 8311,
https: false,
hotOnly: false,
disableHostCheck: true,
/* 使用代理 后台接口路径 */
// proxy: 'http://192.168.1.123:8312/'
// proxy: 'http://192.168.31.177:8312/'
proxy: 'http://localhost:8080/',
// proxy: 'http://jdxdev.vipgz4.idcfengye.com/'
},
}

Loading…
Cancel
Save