Commit 775cffe3 by huaying

fix: 核销门店

parent f96878b1
......@@ -14,6 +14,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",
......
......@@ -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);
<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>核销记录</div>
<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 {};
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>核销门店</div>
<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 {};
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: {}
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