new-mshop-view/pages/admin/custom/index.vue

477 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="custom-content">
<!--顶部搜索框-->
<view class="search-content">
<view class="search-box">
<text class="iconfont icon-sousuo" @click="searchCustom()"></text>
<input class="search-input" type='number' placeholder='请输入会员昵称' v-model="search.nickname" @input="searchCustom()" />
</view>
</view>
<!-- 客户列表 -->
<view class="custom-list">
<view class="list-item" v-for="(item,index) in list" :key="index">
<view class="left-avatar">
<image v-if="item.avatar.length > 10" :src="item.avatar" mode="widthFix"/>
</view>
<view class="center-info">
<view class="info-top">
<view class="nickname">{{ item.nickname }}</view>
<view class="custom-id">{{ item.uid }}</view>
</view>
<view class="info-bottom">积分:{{ item.merchant_integral }}</view>
</view>
<view class="right-btn">
<view class="give-btn" @click="showIntegralChangePopup(item)">赠送积分</view>
</view>
</view>
</view>
<!-- 积分变更弹框 -->
<uni-popup ref="integralChangePopup">
<view class="integral-change">
<view class="integral-change-content">
<view class="title">赠送积分</view>
<view class="form-content">
<view class="form-content-box">
<view class="box-title">变更数量:</view>
<view class="box-value">
<input type='number' placeholder='输入变更数量' v-model="integral_change.number"/>
</view>
</view>
<view class="form-content-box">
<view class="box-title">变更凭证:</view>
<view class="box-value">
<!--图片内容-->
<view class="image-img image-size-set" v-if="integral_change.voucher_image" @click="uploadImage">
<image class="image-img-image" :src="integral_change.voucher_image" mode="widthFix"></image>
<view class="change-image-btn">替换图片</view>
</view>
<!--上传图片按钮-->
<view class="upload-btn-box image-size-set" v-else @click="uploadImage">
<image class="upload-btn-icon" src="@/static/images/custom/creamer.png" mode="widthFix"></image>
上传凭证
</view>
</view>
</view>
</view>
<view class="submit-button">
<view class="submit-btn" @click="submitIntegralChange">提交</view>
</view>
</view>
</view>
</uni-popup>
<!-- 图片上传 -->
<avatar @upload="doUpload" quality="1" ref="avatar" selWidth="250upx" selHeight="250upx"></avatar>
</view>
</template>
<script>
import avatar from "@/components/yq-avatar/yq-avatar.vue";
import { HTTP_REQUEST_URL } from '@/config/app';
import { getCustomList,customIntegralChange } from "@/api/user.js";
export default {
name: 'custom',
components: {
avatar
},
data() {
return {
mer_id: 0,
list: [],
search:{
page: 1,
limit: 20,
nickname: '',
},
// 积分改变
integral_change:{
uid: 0,
pm: 1,// 0 = 支出 1 = 获得
number: '',// 变更数量
voucher_image: '',// 积分变更凭证
},
imgName: ""
}
},
computed: { },
onLoad: function(options) {
this.mer_id = options.mer_id || 0;
if(this.mer_id <= 0){
uni.showModal({
title: '提示',
content: '非法访问,参数不明确!',
success: function success(res) {
uni.navigateBack();
}
});
}
// 获取用户列表
this.getCustom();
},
methods: {
// 获取用户列表
getCustom(isRefresh = false) {
let _this = this;
// 是否为刷新
if(isRefresh) {
_this.search.page = 1;
_this.list = [];
}
// 发起请求
getCustomList(_this.mer_id, _this.search).then(res => {
let list = res.data.list || {};
if(Object.values(list).length > 0){
// 数据接收
_this.list = _this.list.concat(list);
_this.search.page++;
}
}).catch(err => {
console.log("错误 catch",err);
})
},
// 搜索
searchCustom(){
this.$nextTick(()=>{
this.getCustom(true);
});
},
// 赠送积分 - 初始化并且显示弹框
showIntegralChangePopup(item){
let _this = this;
_this.integral_change = _this.$options.data().integral_change;
_this.integral_change.uid = item.uid;
_this.$refs.integralChangePopup.open('center');
},
// 图片上传 - 触发上传
uploadImage() {
let avatar = this.$refs.avatar;
avatar.fChooseImg(1,{selWidth: '350upx', selHeight: '350upx', inner: true});
},
// 图片上传 - 上传
doUpload(rsp) {
let _this = this
uni.uploadFile({
url: HTTP_REQUEST_URL + '/api/upload/image/field',
filePath: rsp.path,
name: 'field',
formData: {
'filename': rsp.path,
'name': _this.imgName
},
header: {
// #ifdef MP
"Content-Type": "multipart/form-data",
// #endif
// [TOKENNAME]: 'Bearer ' + store.state.app.token
},
success: (uploadFileRes) => {
let imgData = JSON.parse(uploadFileRes.data)
// console.log(imgData.data);
_this.integral_change.voucher_image = imgData.data.path || '';
}
});
},
// 提交赠送积分请求
submitIntegralChange(){
let _this = this;
// 数据验证
let integralChangeInfo = Object.assign({},_this.integral_change);
let number = isNaN(parseFloat(integralChangeInfo.number)) ? 0 : parseFloat(integralChangeInfo.number);
if(number <= 0) {
uni.showModal({
title: '提示',
content: '请输入正确的变更数量!',
});
return false;
}
if(integralChangeInfo.voucher_image.length <= 0){
uni.showModal({
title: '提示',
content: '请上传凭证!',
});
return false;
}
// 发起请求
customIntegralChange(_this.mer_id, integralChangeInfo).then(res => {
// 关闭弹框
_this.$refs.integralChangePopup.close();
// 刷新
_this.getCustom(true);
// 提示
uni.showModal({
title: '提示',
content: res.message,
});
}).catch(err => {
console.log("错误 catch",err);
})
},
// 加载动画
loadingModel(){
uni.showLoading({
title: '加载中...',
mask: true
});
}
},
onReachBottom() {
this.getCustom()
}
}
</script>
<style scoped lang="scss">
.custom-content{
// 搜索框
.search-content{
width: 100vw;
background: url("@/static/images/custom/custom_top_bg.jpg") no-repeat;
padding: 20rpx 30rpx;
.search-box{
width: 100%;
height: 70rpx;
padding: 10rpx 15rpx;
background: #FFFFFF;
border-radius: 10rpx;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: center;
font-size: 28rpx;
.icon-sousuo{
width: calc(70rpx - 15rpx);
padding-right: 15rpx;
height: calc(70rpx - (10rpx * 2));
line-height: calc(70rpx - (10rpx * 2));
text-align: center;
}
.search-input{
width: calc(100% - 70rpx + 15rpx);
height: calc(70rpx - (10rpx * 2));
}
}
}
// 客户列表
.custom-list{
width: 100vw;
background: #FFFFFF;
display: inline-flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: center;
.list-item:not(:last-child){
border-bottom: 2rpx solid #f6f6f6;
}
.list-item{
--item-height-value-: 100rpx;
width: 100vw;
padding: 20rpx 30rpx;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: center;
.left-avatar{
width: 100rpx;
height: var(--item-height-value-);
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
align-items: center;
image{
width: 80rpx !important;
height: 80rpx !important;
border-radius: 50% !important;
}
}
.center-info{
width: calc(100% - 100rpx - 150rpx);
height: var(--item-height-value-);
display: inline-flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: flex-start;
justify-content: center;
padding-left: 10rpx;
.info-top{
width: 100%;
height: calc(100rpx - 40rpx);
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: flex-start;
.nickname{
font-size: 28rpx;
}
.custom-id{
background: #ffeed5;
padding: 0rpx 8rpx;
border-radius: 50rpx;
font-size: 23rpx;
color: #f8cc88;
width: max-content;
height: 30rpx;
line-height: 30rpx;
margin-left: 10rpx;
}
}
.info-bottom{
width: 100%;
height: 40rpx;
line-height: 40rpx;
font-size: 26rpx;
color: #9e9e9e;
}
}
.right-btn{
width: 150rpx;
height: var(--item-height-value-);
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
.give-btn{
background: #ea9a1f;
padding: 6rpx 15rpx;
border-radius: 50rpx;
font-size: 26rpx;
color: #FFFFFF;
width: max-content;
}
}
}
}
// 积分变更弹框
.integral-change{
width: 100vw;
display: inline-flex;
flex-direction: row;
justify-content: center;
flex-wrap: nowrap;
align-items: center;
.integral-change-content{
width: calc(100vw - (20rpx * 2) - (30rpx * 2));
background: #FFFFFF;
border-radius: 20rpx;
padding: 20rpx;
.title{
width: 100%;
text-align: center;
font-size: 30rpx;
font-weight: 600;
height: 60rpx;
line-height: 45rpx;
margin-bottom: 35rpx;
}
.form-content{
width: 100%;
display: inline-flex;
flex-direction: column;
justify-content: center;
flex-wrap: nowrap;
align-items: flex-start;
.form-content-box:not(:last-child){
margin-bottom: 20rpx;
}
.form-content-box{
--box-width-: 180rpx;
width: 100%;
display: inline-flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: nowrap;
align-items: center;
line-height: 60rpx;
.box-title{
width: var(--box-width-);
text-align: right;
font-size: 28rpx;
}
.box-value{
width: calc(100% - var(--box-width-));
.image-size-set{
width: 210rpx;
height: 210rpx;
border: 2rpx solid #dddddd;
border-radius: 8rpx;
display: inline-flex;
flex-direction: row;
justify-content: center;
flex-wrap: nowrap;
align-items: center;
image{
max-width: 100% !important;
max-height: 100% !important;
}
}
.upload-btn-box{
font-size: 24rpx;
color: #999999;
display: inline-flex;
flex-direction: column!important;
justify-content: center;
flex-wrap: nowrap;
align-items: center;
.upload-btn-icon{
width: 45rpx !important;
}
}
}
}
.image-img{
position: relative;
border: unset!important;
.change-image-btn{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
text-align: center;
font-size: 24rpx!important;
height: 40rpx;
line-height: 40rpx;
background: rgba(0,0,0,.5);
color: #FFFFFF;
}
}
}
.submit-button{
width: 100%;
margin-top: 60rpx;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
align-items: center;
.submit-btn{
color: #fff;
background-color: #437ffd;
border-color: #437ffd;
padding: 10rpx 25rpx;
font-size: 24rpx;
border-radius: 6rpx;
}
}
}
}
}
</style>