Commit 0e1c7fae by huaying

Merge branch 'feature/8月-奥莱定制' into dev

# Conflicts:
#	dist/index.html
#	dist/static/css/main.488e27612d0ea2441885f81b4bd425fd.css
#	dist/static/css/main.9cc4f496dfc6be2539a576cd9868b7cd.css
#	dist/static/js/manifest.8025125b9f1a531cb873.js
#	dist/static/js/manifest.fbf3168e0c77db75bf9c.js
parents 4c8c14bd 775cffe3
<<<<<<< HEAD
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title></title><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//at.alicdn.com/t/font_688955_2dxzdzrb3a7.css><script src=//at.alicdn.com/t/font_688955_2dxzdzrb3a7.js></script><link rel=stylesheet href=//at.alicdn.com/t/c/font_3229694_yzk6z4765g.css><script src=//at.alicdn.com/t/font_3229694_yzk6z4765g.js></script><link rel=stylesheet href=//at.alicdn.com/t/c/font_3380872_b9qubgdi1ic.css><link rel=stylesheet href=//at.alicdn.com/t/c/font_3229694_yzk6z4765g.css><script src=//at.alicdn.com/t/c/font_3229694_yzk6z4765g.js></script><link src=//at.alicdn.com/t/font_2859043_udehp133w1.css><script src=//at.alicdn.com/t/font_2859043_udehp133w1.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_2996579_dv9vctk5vdt.css><script src=//at.alicdn.com/t/font_2996579_dv9vctk5vdt.js></script><link href=/marketing/static/css/main.9cc4f496dfc6be2539a576cd9868b7cd.css rel=stylesheet></head><body><div id=app><div class=el-loading-spinner style="width: 98%;"><svg viewBox="25 25 50 50" class=circular><circle cx=50 cy=50 r=20 fill=none class=path></circle></svg></div></div><script>(function() {
=======
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title></title><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//at.alicdn.com/t/font_688955_2dxzdzrb3a7.css><script src=//at.alicdn.com/t/font_688955_2dxzdzrb3a7.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_3229694_f4zx0uhc8y.css><script src=//at.alicdn.com/t/font_3229694_f4zx0uhc8y.js></script><link src=//at.alicdn.com/t/font_2859043_udehp133w1.css><script src=//at.alicdn.com/t/font_2859043_udehp133w1.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_2996579_dv9vctk5vdt.css><script src=//at.alicdn.com/t/font_2996579_dv9vctk5vdt.js></script><link href=/marketing/static/css/main.488e27612d0ea2441885f81b4bd425fd.css rel=stylesheet></head><body><div id=app><div class=el-loading-spinner style="width: 98%;"><svg viewBox="25 25 50 50" class=circular><circle cx=50 cy=50 r=20 fill=none class=path></circle></svg></div></div><script>(function() {
>>>>>>> feature/8-奥莱定制
var src = '/component/static/import-component.js?timestrap=' + new Date().getTime();
var host = window.location.host;
host = host.indexOf('localhost') > -1 || host.indexOf('192.168') > -1 ? 'www.gicdev.com' : host;
document.write('<script src="//' + host + src + '"><\/script>');
})();</script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script src=//web-1251519181.file.myqcloud.com/components/track.1.0.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/upload-file.1.0.10.js></script><script type=text/javascript src=/marketing/static/js/manifest.8025125b9f1a531cb873.js></script><script type=text/javascript src=/marketing/static/js/vendor.24a60bdab11def7b4f96.js></script><script type=text/javascript src=/marketing/static/js/main.389781a74a11ff3041d6.js></script></body></html>
\ No newline at end of file
<<<<<<< HEAD
})();</script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script src=//web-1251519181.file.myqcloud.com/components/track.1.0.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/upload-file.1.0.10.js></script><script type=text/javascript src=/marketing/static/js/manifest.8025125b9f1a531cb873.js></script><script type=text/javascript src=/marketing/static/js/vendor.24a60bdab11def7b4f96.js></script><script type=text/javascript src=/marketing/static/js/main.389781a74a11ff3041d6.js></script></body></html>
=======
})();</script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script src=//web-1251519181.file.myqcloud.com/components/track.1.0.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/upload-file.1.0.10.js></script><script type=text/javascript src=/marketing/static/js/manifest.fbf3168e0c77db75bf9c.js></script><script type=text/javascript src=/marketing/static/js/vendor.e0ebad0c4fec1c8f90bf.js></script><script type=text/javascript src=/marketing/static/js/main.f4253c7a6c3187f30a9b.js></script></body></html>
>>>>>>> feature/8月-奥莱定制
This source diff could not be displayed because it is too large. You can view the blob instead.
!function(e){var a=window.webpackJsonp;window.webpackJsonp=function(n,c,o){for(var b,f,d,i=0,u=[];i<n.length;i++)f=n[i],r[f]&&u.push(r[f][0]),r[f]=0;for(b in c)Object.prototype.hasOwnProperty.call(c,b)&&(e[b]=c[b]);for(a&&a(n,c,o);u.length;)u.shift()();if(o)for(i=0;i<o.length;i++)d=t(t.s=o[i]);return d};var n={},r={25:0};function t(a){if(n[a])return n[a].exports;var r=n[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.e=function(e){var a=r[e];if(0===a)return new Promise(function(e){e()});if(a)return a[2];var n=new Promise(function(n,t){a=r[e]=[n,t]});a[2]=n;var c=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,t.nc&&o.setAttribute("nonce",t.nc),o.src=t.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"ecm",4:"message",5:"ewash",6:"scan",7:"recharge",8:"activity",9:"signIn",10:"evaluation",11:"cdKey",12:"popup",13:"msg",15:"calllog"}[e]||e)+"."+{0:"f44fda034a77bb3a0abb",1:"fe1f48c1d23381a2afab",2:"78a893a3285592901952",3:"ecc8d90767737556b435",4:"93829345121d14b8a625",5:"feb0ffd2cfb795f0d746",6:"5f1cbddbaf62018c6b9e",7:"fed72fe4c42bb8d8d839",8:"442031faa4ebb0041149",9:"e6f1eb3edd0d67e0733b",10:"a5b854bbbee63abccbb4",11:"b3c01b56cf6bb230b455",12:"2cc9afcdab04796a1278",13:"0da42538485540d84757",14:"bda20ad51b5860401314",15:"d9311e9aefc4261c6843",16:"bea1e19a292b8b599704",17:"cc12e35ea94e31a7caa8",18:"fdc377d2e375560439b8",19:"be3e71923d339e38ace9",20:"bc68fb59d5a3191a267b",21:"3b70c426e7cb5384d238",22:"67ff09408b92aef14903"}[e]+".js";var b=setTimeout(f,12e4);function f(){o.onerror=o.onload=null,clearTimeout(b);var a=r[e];0!==a&&(a&&a[1](new Error("Loading chunk "+e+" failed.")),r[e]=void 0)}return o.onerror=o.onload=f,c.appendChild(o),n},t.m=e,t.c=n,t.d=function(e,a,n){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},t.p="/marketing/",t.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -17,6 +17,8 @@
<script src="//at.alicdn.com/t/font_2859043_udehp133w1.js"></script><!--3.0组件库-->
<link rel="stylesheet" href="//at.alicdn.com/t/font_2996579_dv9vctk5vdt.css"> <!-- 3.0企业 -->
<script src="//at.alicdn.com/t/font_2996579_dv9vctk5vdt.js"></script><!-- 3.0企业 -->
<link rel=stylesheet href="//at.alicdn.com/t/c/font_3380872_hsi60jw7bi7.css"><!--3.0新版商户后台-->
<script src=//at.alicdn.com/t/c/font_3380872_hsi60jw7bi7.js></script><!--3.0新版商户后台-->
<!-- <link rel="stylesheet" href="//web-1251519181.file.myqcloud.com/components/element.2.12.0.css"> -->
<!-- element 皮肤 -->
<!-- <link rel="stylesheet" type="text/css" href="http://web-1251519181.file.myqcloud.com/lib/elementUI/theme.1.0.1/index.css"> -->
......
......@@ -391,6 +391,43 @@
"integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==",
"dev": true
},
"@vue/compiler-sfc": {
"version": "2.7.9",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.9.tgz",
"integrity": "sha512-TD2FvT0fPUezw5RVP4tfwTZnKHP0QjeEUb39y7tORvOJQTjbOuHJEk4GPHUPsRaTeQ8rjuKjntyrYcEIx+ODxg==",
"requires": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
},
"dependencies": {
"@babel/parser": {
"version": "7.18.11",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.11.tgz",
"integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ=="
},
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
"postcss": {
"version": "8.4.16",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.16.tgz",
"integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
"requires": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
......@@ -3930,6 +3967,11 @@
}
}
},
"csstype": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.0.tgz",
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
},
"cuint": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
......@@ -4545,6 +4587,26 @@
"integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
"dev": true
},
"el-phone-number-input": {
"version": "1.1.12",
"resolved": "https://registry.npmmirror.com/el-phone-number-input/-/el-phone-number-input-1.1.12.tgz",
"integrity": "sha512-+yKYMhL+IomPdrPpuS+lO1tRTKOZcSoWiFoxLLbFhAmHsNeRKuL2TwV4bM0kaBev/6/zoCmF5SvpUHRUfdZi/g==",
"requires": {
"libphonenumber-js": "^1.7.54",
"vue": "^2.6.10"
},
"dependencies": {
"vue": {
"version": "2.7.9",
"resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.9.tgz",
"integrity": "sha512-GeWCvAUkjzD5q4A3vgi8ka5r9bM6g8fmNmx/9VnHDKCaEzBcoVw+7UcQktZHrJ2jhlI+Zv8L57pMCIwM4h4MWg==",
"requires": {
"@vue/compiler-sfc": "2.7.9",
"csstype": "^3.1.0"
}
}
}
},
"electron-to-chromium": {
"version": "1.4.29",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.29.tgz",
......@@ -7596,6 +7658,11 @@
"type-check": "~0.3.2"
}
},
"libphonenumber-js": {
"version": "1.10.13",
"resolved": "https://registry.npmmirror.com/libphonenumber-js/-/libphonenumber-js-1.10.13.tgz",
"integrity": "sha512-b74iyWmwb4GprAUPjPkJ11GTC7KX4Pd3onpJfKxYyY8y9Rbb4ERY47LvCMEDM09WD3thiLDMXtkfDK/AX+zT7Q=="
},
"lie": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
......@@ -8113,6 +8180,11 @@
"integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
"dev": true
},
"nanoid": {
"version": "3.3.4",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
},
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
......@@ -13399,6 +13471,11 @@
"amdefine": ">=0.0.4"
}
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
},
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
......
......@@ -19,6 +19,7 @@
"animated-vue": "^0.5.3",
"axios": "^0.18.0",
"echarts": "^4.8.0",
"el-phone-number-input": "^1.1.12",
"element-ui": "^2.15.6",
"packele": "^1.0.5",
"scriptjs": "^2.5.8",
......
......@@ -257,6 +257,22 @@ export default {
meta: {
path: '/card/destroy'
}
},
{
path: 'store',
name: '核销门店',
component: () => import(/* webpackChunkName: "card" */ '../../views/card/store-list.vue'),
meta: {
path: '/card/store'
}
},
{
path: 'hhrecord',
name: '核销记录',
component: () => import(/* webpackChunkName: "card" */ '../../views/card/hhrecord-list.vue'),
meta: {
path: '/card/hhrecord'
}
}
]
};
......@@ -194,3 +194,18 @@ export const listConsumeCouponDetail = params => requests(PREFIX + '/list-consum
//是否是奥莱
export const isAolai = params => requests(PREFIX + '/is-aolai', params);
// 核销门店列表
export const getStoreList = params => requests(PREFIX + 'page-write-off-store', params);
// 核销工具二维码
export const getwriteOffQr = params => requests(PREFIX + 'card-write-off-qrcode', params);
// 删除门店
export const delStore = params => requests(PREFIX + 'delete-write-off-store', params);
// 删除员工
export const delstraff = params => requests(PREFIX + 'delete-write-off-staff', params);
// 新增门店
export const addStore = params => requests(PREFIX + 'save-write-off-store', params);
// 新增编辑员工
export const setStraff = params => requests(PREFIX + 'save-write-off-staff', params);
// 查询手机号是否重复
export const searchRePhone = params => requests(PREFIX + '', params);
......@@ -321,7 +321,7 @@ export default {
};
},
// created() {
// if (window.location.host != 'gicdev.demogic.com' && !window.location.host.includes('localhost')) {
// if (window.location.host != 'www.gicdev.com' && !window.location.host.includes('localhost')) {
// this.cardContent.splice(2, 1);
// }
// },
......
<template>
<el-dialog title="新增门店" :visible.sync="show" width="600px" :before-close="handleClose">
<el-form :model="form" ref="form">
<el-form-item label="门店范围:">
<dm-store-selector ref="se" :options="[5]" @saving="saving" :uuid.sync="uuid"></dm-store-selector>
</el-form-item>
</el-form>
<span slot="footer">
<el-button @click="handleClose" :loading="loadings">取 消</el-button>
<el-button type="primary" @click="submit" :loading="loadings">保存</el-button>
</span>
</el-dialog>
</template>
<script>
import { addStore } from '@/service/api/cardApi.js';
export default {
name: 'addStoreDialog',
props: {
show: {
type: Boolean,
default: false
}
},
data() {
return {
loadings: false,
form: {},
storedata: [],
uuid: ''
};
},
methods: {
handleClose() {
this.uuid = '';
this.$nextTick(_ => {
this.$emit('update:show', false);
});
},
async saving() {
this.storedata = await this.$refs.se.getList();
console.log(this.storedata, 'this.storedata');
},
submit() {
this.loadings = true;
if (!this.storedata) {
this.$tips({ type: 'waring', message: '请选择门店' });
return;
}
this.$refs.form.validate(async valid => {
if (valid) {
let res = this.storedata.map(item => {
let para = {
storeId: item.id,
storeName: item.name
};
return para;
});
await addStore(res)
.then(() => {
this.loadings = false;
this.handleClose();
})
.catch(err => {
this.loadings = false;
this.$tips({ type: 'error', message: '操作失败' });
});
} else {
this.loadings = false;
this.$tips({ type: 'waring', message: '请完善表单' });
}
});
}
}
};
</script>
<style lang="scss">
.el-dialog__footer {
border-top: none;
padding: 20px 20px 20px 0;
}
</style>
<template>
<div class="hhBox">
<el-tabs v-model="activeName">
<el-tab-pane label="卡券核销" name="first">
<write-off-card></write-off-card>
</el-tab-pane>
<el-tab-pane label="门店核销" name="second">
<write-off-store></write-off-store>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import writeOffCard from './writeOffCard.vue';
import WriteOffStore from './writeOffStore.vue';
export default {
components: { writeOffCard, WriteOffStore },
data() {
return {
activeName: 'first'
};
},
methods: {}
};
</script>
<style lang="scss" scoped>
.hhBox {
margin: 0 20px 0 29px;
}
</style>
<template>
<el-dialog title="核销工具二维码" :visible.sync="show" width="600px" :before-close="close">
<div v-loading="loading" class="links-block">
<div class="links__body">
<div class="links__body--url">{{ src }}</div>
<div class="links__body--btn">
<el-button v-clipboard:text="src" v-show="src" type="text"><i class="iconfont icon-lianjie font-14"></i> 复制链接</el-button>
</div>
</div>
<div class="link__divider"></div>
<div class="links__qr">
<div style="text-align:center; background: #FFFFFF;border-radius: 2px;">
<vue-qr v-if="sourceType" id="qrImg" :text="src" :size="130" :margin="5"></vue-qr>
<img v-else :src="src" class="imgs" />
</div>
<el-button type="text" v-show="src" @click="download"><i class="iconfont icon-xiazai font-14"></i> 小程序二维码下载</el-button>
</div>
</div>
</el-dialog>
</template>
<script>
import VueQr from 'vue-qr';
export default {
name: 'links',
components: {
VueQr
},
props: {
show: {
type: Boolean,
default: false
},
src: {
type: String,
default: ''
},
imageName: {
type: String,
default: ''
},
sourceType: {
type: Boolean,
default: true
}
},
data() {
return {
loading: false,
miniprogram: {
link: '',
url: ''
}
};
},
watch: {
show(val) {
if (val) {
console.log(this.src);
}
}
},
methods: {
close() {
this.$emit('update:show', false);
},
download() {
if (this.sourceType) {
this.downloadImg();
} else {
this.downloadCodeImg(this.src);
}
},
downloadImg() {
const qrcode = document.getElementById('qrImg');
let img = qrcode.getElementsByTagName('img')[0];
let link = document.createElement('a');
let url = img.getAttribute('src');
link.setAttribute('href', url);
link.setAttribute('download', `${this.imageName}.png`);
link.click();
},
downloadCodeImg(url) {
let image = new Image(); //创建图片对象
image.setAttribute('crossOrigin', 'anonymous'); //设置允许跨域
image.src = url; //赋值src
image.onload = () => {
//等待图片加载完成创建canvas
let canvas = document.createElement('canvas');
//将图片绘制到canvas画布上
canvas.width = image.width;
canvas.height = image.height;
let ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0, image.width, image.height);
//获取图片文件格式 jpg/jpeg/png
let ext = image.src.substring(image.src.lastIndexOf('.') + 1).toLowerCase();
//导出画布快照 此时已越过跨域限制成功取到图片数据
let dataURL = canvas.toDataURL('image/' + ext);
//创建a标签
const a = document.createElement('a');
// 赋值a标签download属性值,标明该a标签提供下载功能,同时该属性指定了下载时的文件名称
a.download = this.imageName;
//赋值a标签下载地址,即canvas导出的画布快照 base64格式的图片地址
a.href = dataURL;
//添加a标签到dom中
document.body.appendChild(a);
//触发a标签点击事件 触发下载
a.click();
//下载完成 删除多余的a标签 保持页面原有元素不动
};
}
}
};
</script>
<style lang="scss" scoped>
.font-14 {
font-size: 14px !important;
}
.m-r-3 {
margin-right: 3px;
}
.links__body {
// border: 1px solid #ddd;
flex: 1;
font-size: 14px;
&--url {
width: 258px;
height: 119px;
overflow-x: hidden;
overflow-y: auto;
word-break: break-all;
padding: 42px 32px 4px 24px;
line-height: 17px;
font-size: 12px;
}
&--btn {
text-align: center;
line-height: 1;
padding-bottom: 19px;
}
}
.links__body--btn {
padding-bottom: 19px;
}
.links__qr {
padding: 16px 43px 19px 34px;
text-align: center;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.link__divider {
margin-top: 28px;
width: 1px;
height: 143px;
border: 1px solid #e4e7ed;
}
.links-block {
display: flex;
// margin: 10px 0 10px;
width: 522px;
height: 200px;
background: #f5f7fa;
border-radius: 2px;
margin-bottom: 36px;
}
.link-title {
display: flex;
align-items: center;
font-weight: 500;
color: #303133;
line-height: 20px;
margin-top: 20px;
i {
font-size: 20px;
margin-right: 8px;
}
}
.imgs {
display: inline-block;
width: 129px;
height: 131px;
background: #ffffff;
border-radius: 2px;
}
</style>
<template>
<el-dialog :title="row.writeOffStoreStaffId ? '新增员工' : '编辑员工'" :visible.sync="show" width="600px" :before-close="handleClose">
<el-form :model="form" ref="form" :rules="rules" label-width="100px">
<el-form-item label="员工姓名:" prop="writeOffName">
<el-input class="w304" v-model="form.writeOffName" placeholder="请输入内容" maxlength="10" show-word-limit></el-input>
</el-form-item>
<el-form-item label="手机号码:" prop="writeOffPhone">
<el-select class="w116" :disabled="row.writeOffStoreStaffId" v-model="typeSe" placeholder="请选择">
<el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
<el-input :disabled="row.writeOffStoreStaffId" class="w178" v-model="form.writeOffPhone" @change="phoneChange"></el-input>
<!-- <el-writeOffPhone-number-input v-model="writeOffPhone" :onlyCountries="onlyCountries"></el-writeOffPhone-number-input> -->
</el-form-item>
</el-form>
<span slot="footer">
<el-button @click="handleClose" :loading="loadings">取 消</el-button>
<el-button type="primary" @click="submit" :loading="loadings">保存</el-button>
</span>
</el-dialog>
</template>
<script>
// import { ElPhoneNumberInput } from 'el-writeOffPhone-number-input';
import { setStraff, searchRePhone } from '@/service/api/cardApi.js';
export default {
// components: {
// ElPhoneNumberInput
// },
props: {
show: {
type: Boolean,
default: false
},
row: {
type: Object,
default: () => {}
}
},
data() {
//验证手机号的正则表达式
let reg = /^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[3-8]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[5-7]{1}))+\d{8})$/;
//验证方法
let validatorPhone = function(writeOffPhone, value, callback) {
if (value === '') {
callback(new Error('手机号不能为空'));
} else if (!reg.test(value)) {
callback(new Error('手机号格式错误'));
} else if (this.rePhone) {
callback(new Error('手机号码已存在'));
} else {
callback();
}
};
return {
loadings: false,
form: {
writeOffName: '',
writeOffPhone: '',
storeId: '',
writeOffStoreStaffId: ''
},
rules: {
writeOffName: [{ required: true, message: '请输入员工姓名', trigger: 'blur' }],
writeOffPhone: [{ required: true, validator: validatorPhone, trigger: 'blur' }]
},
typeSe: '1',
typeList: [
{
value: '1',
label: '中国 +86'
}
],
rePhone: false
// writeOffPhone: {
// callingCode: '86',
// phoneNumber: '18338312402'
// },
// onlyCountries: ['CN', 'HK', 'TW']
};
},
methods: {
async phoneChange(e) {
console.log(e);
await searchRePhone(e).then(res => {
if (res.result.errorCode == 0) {
this.rePhone = res.result.result;
}
});
},
handleClose() {
this.$refs.form.clearValidate();
this.$nextTick(_ => {
this.$emit('update:show', false);
});
},
submit() {
this.loadings = true;
this.$refs.from.validate(async valid => {
if (valid) {
if (this.form.writeOffStoreStaffId == '') {
delete this.form.writeOffStoreStaffId;
}
await setStraff(this.form)
.then(() => {
this.loadings = false;
this.handleClose();
})
.catch(() => {
this.loadings = false;
this.$tips({ type: 'error', message: '操作失败' });
});
} else {
this.loadings = false;
this.$tips({ type: 'waring', message: '请完善表单' });
}
});
}
},
watch: {
row: {
handler: function(val) {
if (!(typeof val == 'string')) {
this.form.writeOffName = this.row.writeOffName;
this.form.writeOffPhone = this.row.writeOffPhone;
this.form.storeId = this.row.storeId;
this.form.writeOffStoreStaffId = this.row.writeOffStoreStaffId;
} else {
this.form.storeId = val;
}
},
immediate: true
}
}
};
</script>
<style lang="scss" scoped>
.w304 {
width: 304px;
}
.w178 {
width: 178px;
}
.w116 {
width: 116px;
}
.mr9 {
margin-right: 9px;
}
</style>
<template>
<div class="storeBox" v-loading="loading">
<div>门店{{ tableData.length }}</div>
<div class="searchBox">
<el-input class="w260" prefix-icon="el-icon-search" placeholder="请输入门店名称/代码" v-model="listParams.search"></el-input>
<div>
<el-button @click="qrEvent">核销工具二维码</el-button>
<el-button type="primary" @click="addSoreEvent">新增门店</el-button>
</div>
</div>
<div class="content">
<div v-for="(item, index) in tableData" :key="index">
<div class="c_top">
<div class="c_t_left">
<div class="icon">
<i class="iconfont icon-mendian-data mendianIcon"></i>
</div>
<div class="new_xinxi">
<p class="xinxi">{{ item.storeName }}</p>
<p class="code">code:{{ item.storeCode }}</p>
</div>
</div>
<div class="c_t_right">
<el-button type="text" style="margin-right: 12px;" @click="setStraffEvent(item.storeId)">新增员工</el-button>
<el-popconfirm confirm-button-text="删除" cancel-button-text="取消" icon="el-icon-warning" icon-color="#FA8C16" style="margin-left:6px" @confirm="deleteStoreEvent(row)" title="删除后卡券适用门店无法选择,是否继续?">
<el-button slot="reference" type="text">删除</el-button>
</el-popconfirm>
</div>
</div>
<div class="tableBox">
<el-table tooltipEffect="light" :data="item.staffList">
<el-table-column prop="writeOffName" label="姓名" min-width="324px"></el-table-column>
<el-table-column prop="writeOffPhone" label="手机号码" min-width="285px"></el-table-column>
<el-table-column prop="unionId" label="unionID" min-width="381px"></el-table-column>
<el-table-column prop="" label="操作" min-width="114px">
<template slot-scope="{ row }">
<el-button type="text" @click="setStraffEvent(row)">编辑</el-button>
<el-popconfirm confirm-button-text="删除" cancel-button-text="取消" icon="el-icon-warning" icon-color="#FA8C16" style="margin-left:20px" @confirm="delstraffEvent(row)" title="删除后员工将无法登录核销小工具,确认删除吗?">
<el-button slot="reference" type="text">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</div>
</div>
<dm-pagination v-show="tableData.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination>
</div>
<links :src="linkUrl" :show.sync="linkShow" :imageName="核销工具二维码" />
<add-store-dialog :show.sync="addStoreShow"></add-store-dialog>
<set-staff-dialog :show.sync="setStraffShow" :row="straffDetail"></set-staff-dialog>
</div>
</template>
<script>
import { getStoreList, delStore, delstraff, getwriteOffQr } from '@/service/api/cardApi.js';
import AddStoreDialog from './addStoreDialog.vue';
import links from './links.vue';
import SetStaffDialog from './setStaffDialog.vue';
export default {
components: {
links,
AddStoreDialog,
SetStaffDialog
},
data() {
return {
loading: false,
tableData: [],
listParams: {
search: '',
currentPage: 1,
pageSize: 20
},
total: 0,
linkShow: false,
linkUrl: 'pages/page-transit/page-transit-qy?scene=ff80808182a5de710182a5fd8e290016',
addStoreShow: false,
setStraffShow: false,
straffDetail: {}
};
},
mounted() {
this.getList();
},
methods: {
handleSizeChange(val) {
this.listParams.currentPage = 1;
this.listParams.pageSize = val;
this.getList();
},
handleCurrentChange(val) {
this.listParams.currentPage = val;
this.getList();
},
async getList() {
this.loading = true;
try {
let res = await getStoreList(this.listParams);
this.tableData = res.result.result;
this.total = res.result.totalCount;
} catch (err) {
this.$tips({ type: 'error', message: '加载列表失败' });
}
this.loading = false;
},
// 新增门店
addSoreEvent() {
this.addStoreShow = true;
},
// 删除门店
async deleteStoreEvent(row) {
await delStore({ storeId: row.storeId })
.then(() => {
this.$tips({ type: 'success', message: '删除成功' });
if (this.tableData.length === 1 && this.listParams.currentPage !== 1) {
this.listParams.currentPage--;
}
this.getList();
})
.catch(err => {
this.$tips({ type: 'error', message: err.message || '操作失败' });
});
},
setStraffEvent(row) {
this.setStraffShow = true;
this.straffDetail = Object.assign({}, row);
},
// 删除员工
async delstraffEvent(row) {
await delstraff({ writeOffStoreStaffId: row.writeOffStoreStaffId })
.then(() => {
this.$tips({ type: 'success', message: '删除成功' });
this.getList();
})
.catch(err => {
this.$tips({ type: 'error', message: err.message || '操作失败' });
});
},
// 核销工具二维码
async qrEvent() {
await getwriteOffQr({}).then(() => {
this.linkShow = true;
});
}
}
};
</script>
<style lang="scss">
.el-popconfirm__main {
margin-bottom: 16px;
}
.el-popper {
max-width: 251px;
}
// .damolish .el-button.el-button--mini {
// border: 1px solid #DCDFE6;
// color: #303133;
// }
</style>
<style lang="scss" scoped>
.storeBox {
margin: 20px;
.w260 {
width: 260px;
}
.searchBox {
margin-top: 14px;
display: flex;
justify-content: space-between;
}
.mendianIcon {
color: #597ef7;
font-size: 21px;
}
.content {
margin-top: 20px;
height: 48px;
.c_top {
background: #ebecf0;
margin-top: 10px;
margin-bottom: 10px;
padding-right: 20px;
padding-left: 13px;
display: flex;
justify-content: space-between;
.c_t_left {
padding-top: 10px;
display: flex;
.icon {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: #f5f7fa;
border-radius: 2px;
margin-right: 14px;
}
.new_xinxi {
font-size: 14px;
font-weight: 500;
color: #303133;
}
.code {
font-size: 12px;
font-weight: 400;
color: #909399;
line-height: 22px;
}
}
.c_t_right {
padding-top: 13px;
}
}
}
}
</style>
<template>
<div v-loading="loading" class="writeOffCardBox">
<div class="searchBox">
<el-form inline>
<el-form-item>
<el-input prefix-icon="el-icon-search" placeholder="请输入会员信息/卡券信息/门店名称" class="w261"></el-input>
</el-form-item>
<el-form-item>
<span class="spanBox">核销时间</span>
<el-date-picker v-model="params.dateTime" type="daterange" range-separator="~" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']"></el-date-picker>
</el-form-item>
<el-form-item>
<el-checkbox class="vertical-middle ml8" :true-label="1" :false-label="0" label="当月" border @change="refresh" />
</el-form-item>
<el-form-item>
<el-checkbox class="vertical-middle ml8" :true-label="1" :false-label="0" label="最近三个月" border @change="refresh" />
</el-form-item>
<el-form-item class="frmbt20">
<el-button type="primary"><i class="iconfont icon-xiazai" style="marginRight:2px;fontSize:12px" />查询结果导出</el-button>
</el-form-item>
</el-form>
</div>
<div class="content">
<el-table :data="tableData"></el-table>
</div>
</div>
</template>
<script>
export default {
name: 'writeOffCard',
data() {
return {
loading: false,
params: {
dateTime: ''
},
tableData: []
};
},
methods: {}
};
</script>
<style lang="scss" scoped>
.w261 {
width: 261px;
}
.ml8 {
margin-left: 8px;
}
.writeOffCardBox {
margin-top: 5px;
.searchBox {
.spanBox {
margin-right: 10px;
margin-left: 10px;
}
.frmbt20 {
margin-bottom: 20px !important;
margin-right: 0 !important;
float: right;
padding-right: 0 !important;
}
}
}
</style>
<template>
<div>
门店核销
</div>
</template>
<script>
export default {
name: 'writeOffStore',
data() {
return {};
},
methods: {}
};
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment