通知中心
This commit is contained in:
parent
b1bf21ccad
commit
1e52030f5e
|
|
@ -0,0 +1,42 @@
|
||||||
|
import request from "@/utils/request";
|
||||||
|
|
||||||
|
|
||||||
|
// 推送店铺消息开关
|
||||||
|
export function shopState(data) {
|
||||||
|
return request({
|
||||||
|
url: "/api/msg/shopState",
|
||||||
|
method: "put",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function msgall(params) {
|
||||||
|
return request({
|
||||||
|
url: "/api/msg/all",
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function msginfo(data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/msg/info',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function state(params) {
|
||||||
|
return request({
|
||||||
|
url: "/api/msg/state",
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function delmsg(ids) {
|
||||||
|
return request({
|
||||||
|
url: '/api/msg',
|
||||||
|
method: 'delete',
|
||||||
|
data: ids
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -428,7 +428,14 @@ export function findActivate(params) {
|
||||||
params
|
params
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 获取店铺会员二维码
|
||||||
|
export function getwxacode(data) {
|
||||||
|
return request({
|
||||||
|
url: `/shop/storage/getwxacode`,
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 商家用户列表
|
* 商家用户列表
|
||||||
* @returns
|
* @returns
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,177 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="notifications">
|
<div class="app-container">
|
||||||
123
|
<div class="head-container">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="3">
|
||||||
|
店铺推送: <el-switch v-model="alldata.allState" :active-value="1" :inactive-value="0"
|
||||||
|
@change="changeEvent(alldata.allState, '')"></el-switch>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="3">
|
||||||
|
耗材: <el-switch v-model="alldata.conState" :active-value="1" :inactive-value="0"
|
||||||
|
@change="changeEvent(alldata.conState, 1)"></el-switch>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="3">
|
||||||
|
操作商品: <el-switch v-model="alldata.opeState" :active-value="1" :inactive-value="0"
|
||||||
|
@change="changeEvent(alldata.opeState, 2)"></el-switch>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="3">
|
||||||
|
商品库存: <el-switch v-model="alldata.stockState" :active-value="1" :inactive-value="0"
|
||||||
|
@change="changeEvent(alldata.stockState, 0)"></el-switch>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
<div class="head-container" id="table_drag">
|
||||||
|
<el-table ref="table" :data="tableData.data" v-loading="tableData.loading" row-key="id">
|
||||||
|
<el-table-column label="头像">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<div class="shop_info">
|
||||||
|
<el-image :src="scope.row.avatar"
|
||||||
|
style="width: 50px;height: 50px;border-radius: 4px;background-color: #efefef;">
|
||||||
|
<div class="img_error" slot="error">
|
||||||
|
<i class="icon el-icon-document-delete"></i>
|
||||||
|
</div>
|
||||||
|
</el-image>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="昵称" prop="nickname"> </el-table-column>
|
||||||
|
<el-table-column label="商品库存" prop="createdAt">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<el-switch v-model="scope.row.proState" :active-value="1" :inactive-value="0"
|
||||||
|
@change="changeHot(scope.row.proState, 0, scope.row.openId)"></el-switch>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="耗材" prop="createdAt">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<el-switch v-model="scope.row.conState" :active-value="1" :inactive-value="0"
|
||||||
|
@change="changeHot(scope.row.conState, 1, scope.row.openId)"></el-switch>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作商品" prop="createdAt">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<el-switch v-model="scope.row.opeState" :active-value="1" :inactive-value="0"
|
||||||
|
@change="changeHot(scope.row.opeState, 2, scope.row.openId)"></el-switch>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="200">
|
||||||
|
<template v-slot="scope">
|
||||||
|
<el-popconfirm title="确定解绑吗?" @confirm="delTableHandle(scope.row.openId)">
|
||||||
|
<el-button type="text" slot="reference">解绑</el-button>
|
||||||
|
</el-popconfirm>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<div class="head-container">
|
||||||
|
<el-pagination :total="tableData.total" :current-page="tableData.page + 1" :page-size="tableData.size"
|
||||||
|
@current-change="paginationChange" layout="total, sizes, prev, pager, next, jumper"></el-pagination>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import { msgall, msginfo, shopState, state, delmsg } from '@/api/notifications'
|
||||||
export default {
|
export default {
|
||||||
data(){
|
data() {
|
||||||
return {}
|
return {
|
||||||
|
test: "1",
|
||||||
|
tableData: {
|
||||||
|
data: [],
|
||||||
|
page: 1,
|
||||||
|
size: 30,
|
||||||
|
loading: false,
|
||||||
|
total: 0
|
||||||
|
},
|
||||||
|
alldata: {
|
||||||
|
allState: 0,
|
||||||
|
conState: 0,
|
||||||
|
opeState: 0,
|
||||||
|
stockState: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getTableData()
|
||||||
|
this.getlist()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getlist() {
|
||||||
|
let res = await state({
|
||||||
|
shopId: localStorage.getItem('shopId'),
|
||||||
|
})
|
||||||
|
this.alldata = res
|
||||||
|
},
|
||||||
|
async changeEvent(state, type) {
|
||||||
|
let res = await shopState({
|
||||||
|
shopId: localStorage.getItem('shopId'),
|
||||||
|
type,
|
||||||
|
state
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
// 设置消息推送
|
||||||
|
async changeHot(row, index, openId) {
|
||||||
|
// index 0商品库存 1耗材 2操作商品
|
||||||
|
let obj = {
|
||||||
|
shopId: localStorage.getItem('shopId'),
|
||||||
|
type: index,
|
||||||
|
state: row, openId
|
||||||
|
}
|
||||||
|
let res = await msginfo(obj)
|
||||||
|
this.$message.success('修改成功!')
|
||||||
|
this.getTableData()
|
||||||
|
},
|
||||||
|
// 分页回调
|
||||||
|
paginationChange(e) {
|
||||||
|
this.tableData.page = e - 1
|
||||||
|
this.getTableData()
|
||||||
|
},
|
||||||
|
// 获取商品列表
|
||||||
|
async getTableData() {
|
||||||
|
try {
|
||||||
|
this.tableData.loading = true
|
||||||
|
const res = await msgall({
|
||||||
|
page: this.tableData.page,
|
||||||
|
size: this.tableData.size,
|
||||||
|
shopId: localStorage.getItem('shopId')
|
||||||
|
})
|
||||||
|
this.tableData.loading = false
|
||||||
|
this.tableData.data = res.records
|
||||||
|
this.tableData.total = res.total
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除商品
|
||||||
|
async delTableHandle(ids) {
|
||||||
|
try {
|
||||||
|
await delmsg({
|
||||||
|
shopId: localStorage.getItem('shopId'),
|
||||||
|
openId: ids
|
||||||
|
})
|
||||||
|
this.getTableData()
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.shop_info {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.info {
|
||||||
|
flex: 1;
|
||||||
|
padding-left: 8px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.tag_wrap {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -15,6 +15,9 @@
|
||||||
<el-button type="primary" icon="el-icon-plus" @click="$refs.addActive.show()">
|
<el-button type="primary" icon="el-icon-plus" @click="$refs.addActive.show()">
|
||||||
添加活动
|
添加活动
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button type="primary" icon="el-icon-plus" @click="$refs.downloadQR.show()">
|
||||||
|
下载会员充值二维码
|
||||||
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="head-container">
|
<div class="head-container">
|
||||||
<el-table :data="tableData.data" v-loading="tableData.loading">
|
<el-table :data="tableData.data" v-loading="tableData.loading">
|
||||||
|
|
@ -51,17 +54,19 @@
|
||||||
@current-change="paginationChange" layout="total"></el-pagination>
|
@current-change="paginationChange" layout="total"></el-pagination>
|
||||||
</div>
|
</div>
|
||||||
<addActive ref="addActive" @success="getTableData" />
|
<addActive ref="addActive" @success="getTableData" />
|
||||||
|
<QR ref="downloadQR"></QR>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import handselTypes from './handselTypes'
|
import handselTypes from './handselTypes'
|
||||||
import addActive from './components/addActive'
|
import addActive from './components/addActive'
|
||||||
|
import QR from './components/downloadQR.vue'
|
||||||
import { findActivate, modityActivate } from '@/api/shop'
|
import { findActivate, modityActivate } from '@/api/shop'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
addActive
|
addActive,QR
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
<template>
|
||||||
|
<div class="downloadQR" v-show="isshow">
|
||||||
|
<div class="box">
|
||||||
|
<img :src="imgUrl" style="width: 300px;height: 300px;" alt="">
|
||||||
|
<div class="btnStyle">
|
||||||
|
<el-button type="primary" @click="isshow = false">取消</el-button>
|
||||||
|
|
||||||
|
<a :href="imgUrl"><el-button type="primary" @click="downImg">下载</el-button></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getwxacode } from '@/api/shop'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isshow: false,
|
||||||
|
imgUrl: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getlist()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
show() {
|
||||||
|
this.isshow = true
|
||||||
|
},
|
||||||
|
async getlist() {
|
||||||
|
let res = await getwxacode({
|
||||||
|
shopId: localStorage.getItem('shopId')
|
||||||
|
})
|
||||||
|
this.imgUrl = res
|
||||||
|
}, downImg() {
|
||||||
|
// window.location.href()
|
||||||
|
window.URL.revokeObjectURL(this.imgUrl)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.downloadQR {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: rgba($color: #000000, $alpha: .6);
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
z-index: 9999;
|
||||||
|
|
||||||
|
.box {
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 3px;
|
||||||
|
height: 400px;
|
||||||
|
width: 340px;
|
||||||
|
background-color: #fff;
|
||||||
|
display: flex;
|
||||||
|
// align-items: center;
|
||||||
|
// justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.btnStyle {
|
||||||
|
margin-top: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
Reference in New Issue