Files
ZangShiQi/addon/cashier/source/os/components/ns-member-detail/ns-member-detail.vue
2026-04-04 17:27:12 +08:00

500 lines
18 KiB
Vue
Executable File
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="member-detail-wrap">
<view class="member-head flex items-center justify-between">
<text>会员详情</text>
<text class="iconfont iconguanbi1 cursor-pointer" @click="$emit('close')"></text>
</view>
<view class="member-content">
<view class="content-block">
<view class="item-img">
<image mode="aspectFill" v-if="memberInfo && memberInfo.headimg" :src="$util.img(memberInfo.headimg)" @error="headError(memberInfo)"/>
<image mode="aspectFill" v-else :src="$util.img(defaultImg.head)"/>
</view>
<view class="item-content">
<view class="item-title">
<view class="item-title-text">{{ memberInfo && memberInfo.nickname ? memberInfo.nickname : '' }}</view>
<view class="item-label" v-if="memberInfo && memberInfo.member_level && memberInfo.member_level_name">{{ memberInfo.member_level_name }}</view>
</view>
<view class="info-list">
<view class="info-item">手机{{ memberInfo && memberInfo.mobile ? memberInfo.mobile : '' }}</view>
<view class="info-item" v-if="memberInfo && memberInfo.sex == 0">性别未知</view>
<view class="info-item" v-if="memberInfo && memberInfo.sex == 1">性别</view>
<view class="info-item" v-if="memberInfo && memberInfo.sex == 2">性别</view>
<view class="info-item">生日{{ memberInfo && memberInfo.birthday ? memberInfo.birthday : '' }}</view>
<view class="info-item" v-if="memberInfo && memberInfo.member_time">成为会员{{ $util.timeFormat(memberInfo.member_time) }}</view>
</view>
</view>
</view>
<view class="content-block account">
<view class="content-data-item">
<view class="data-item-title">积分</view>
<view class="data-item-value">{{ memberInfo && memberInfo.point ? parseInt(memberInfo.point) : '0' }}</view>
<view class="data-item-action" @click="memberAction('pointList')">查看</view>
</view>
<view class="content-data-item">
<view class="data-item-title">储值余额()</view>
<view class="data-item-value">{{ memberInfo && memberInfo.balance ? memberInfo.balance : '0.00' }}</view>
<view class="data-item-action" @click="memberAction('balanceList')">查看</view>
</view>
<view class="content-data-item">
<view class="data-item-title">现金余额()</view>
<view class="data-item-value">{{ memberInfo && memberInfo.balance_money ? memberInfo.balance_money : '0.00' }}</view>
</view>
<view class="content-data-item">
<view class="data-item-title">成长值</view>
<view class="data-item-value">{{ memberInfo && memberInfo.growth ? memberInfo.growth : '0' }}</view>
<view class="data-item-action" @click="memberAction('growthList')">查看</view>
</view>
<view class="content-data-item">
<view class="data-item-title">优惠券()</view>
<view class="data-item-value">{{ memberInfo && memberInfo.coupon_num ? memberInfo.coupon_num : '0' }}</view>
<view class="data-item-action" @click="memberAction('couponList')">查看</view>
</view>
<view class="content-data-item">
<view class="data-item-title">卡包</view>
<view class="data-item-value">{{ memberInfo && memberInfo.card_num ? memberInfo.card_num : '0' }}
</view>
<view class="data-item-action" @click="memberAction('cardList')">查看</view>
</view>
</view>
<view class="content-block action">
<view class="content-data-item" @click="memberAction('memberInfo')">
<view class="data-item-icon">
<image mode="aspectFit" src="@/static/member/icon-member-info.png" />
</view>
<view class="data-item-value">会员信息</view>
</view>
<view class="content-data-item" @click="memberAction('point')">
<view class="data-item-icon">
<image mode="aspectFit" src="@/static/member/icon-member-point.png" />
</view>
<view class="data-item-value">积分调整</view>
</view>
<view class="content-data-item" @click="memberAction('balance')">
<view class="data-item-icon">
<image mode="aspectFit" src="@/static/member/icon-member-balance.png" />
</view>
<view class="data-item-value">余额充值</view>
</view>
<view class="content-data-item" @click="memberAction('sendCoupon')">
<view class="data-item-icon">
<image mode="aspectFit" src="@/static/member/icon-member-coupon.png" />
</view>
<view class="data-item-value">送优惠券</view>
</view>
<view class="content-data-item" @click="memberAction('growth')">
<view class="data-item-icon">
<image mode="aspectFit" src="@/static/member/icon-member-growth.png" />
</view>
<view class="data-item-value">成长值调整</view>
</view>
<view class="content-data-item" @click="memberAction('applyMember')" v-if="memberInfo && !memberInfo.is_member">
<view class="data-item-icon">
<image mode="aspectFit" src="@/static/member/icon-member-apply.png" />
</view>
<view class="data-item-value">办理会员</view>
</view>
</view>
</view>
<!-- 会员详情 -->
<uni-popup ref="memberInfoPop">
<view class="pop-box memberInfo-box">
<view class="pop-header">
<view class="pop-header-text">会员详情</view>
<view class="pop-header-close" @click="popClose('memberInfo')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<scroll-view scroll-y="true" class="common-scrollbar pop-content">
<view class="form-content" v-if="memberInfo">
<view class="form-item">
<view class="form-label">
<text class="required"></text>
昵称
</view>
<view class="form-inline">
<input class="form-input" placeholder="请输入会员昵称" v-model="memberInfo.nickname" />
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
手机号
</view>
<view class="form-inline">
<input class="form-input" placeholder="请输入手机号" v-model="memberInfo.mobile" maxlength="11" />
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
会员等级
</view>
<view class="form-inline">
<select-lay :zindex="10" :value="memberInfo.member_level" name="names" placeholder="请选择会员等级" :options="memberLevelList" @selectitem="selectMemberLevel"/>
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
性别
</view>
<view class="form-inline">
<uni-data-checkbox v-model="memberInfo.sex" :localdata="sex"></uni-data-checkbox>
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
生日
</view>
<view class="form-inline">
<uni-datetime-picker :end="endTime" v-model="memberInfo.birthday" type="date" :clearIcon="false" />
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
注册时间
</view>
<view class="form-inline">
{{ memberInfo && memberInfo.reg_time ? $util.timeFormat(memberInfo.reg_time) : '--' }}
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
最后访问时间
</view>
<view class="form-inline">
{{ memberInfo && memberInfo.last_login_time ? $util.timeFormat(memberInfo.last_login_time) : '--' }}
</view>
</view>
</view>
</scroll-view>
<view class="pop-bottom">
<button class="primary-btn" @click="saveMemberInfo">确定</button>
</view>
</view>
</uni-popup>
<!-- 积分调整 -->
<uni-popup ref="pointPop">
<view class="pop-box pointPop-box">
<view class="pop-header">
<view class="pop-header-text">调整积分</view>
<view class="pop-header-close" @click="popClose('point')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<scroll-view scroll-y="true" class="common-scrollbar pop-content">
<view class="form-content">
<view class="form-item">
<view class="form-label">
<text class="required"></text>
当前积分
</view>
<view class="form-inline">{{ memberInfo && memberInfo.point ? memberInfo.point : '0' }}</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
调整数额
</view>
<view class="form-inline">
<input class="form-input" type="number" placeholder="请输入调整数额" v-model="pointData.num" />
<view class="word-aux">调整数额与当前积分数相加不能小于0</view>
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
备注
</view>
<view class="form-inline">
<textarea class="form-textarea" v-model="pointData.desc"/>
</view>
</view>
</view>
</scroll-view>
<view class="pop-bottom">
<button class="primary-btn" @click="savePoint">确定</button>
</view>
</view>
</uni-popup>
<!-- 发放优惠券 -->
<uni-popup ref="sendCouponPop">
<view class="pop-box sendCoupon-box">
<view class="pop-header">
<view class="pop-header-text">送优惠券</view>
<view class="pop-header-close" @click="popClose('sendCoupon')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<view class="common-scrollbar sendCoupon-content">
<view class="coupon-table-head">
<view class="coupon-table-th">优惠券名称</view>
<view class="coupon-table-th">金额</view>
<view class="coupon-table-th">有效期</view>
<view class="coupon-table-th">发放数量</view>
</view>
<scroll-view class="coupon-table-body" @scrolltolower="getCouponList()" scroll-y="true">
<view class="coupon-table-tr" v-for="(item, index) in sendCoupon.list" :key="index">
<view class="coupon-table-td">{{ item.coupon_name }}</view>
<view class="coupon-table-td">{{ item.money }}</view>
<view class="coupon-table-td">{{ item.validity_name }}</view>
<view class="coupon-table-td">
<view class="item-num">
<view class="num-dec" v-on:click="dec(item)">-</view>
<input class="table-input" type="text" v-model="item.num" />
<view class="num-inc" v-on:click="inc(item)">+</view>
</view>
</view>
</view>
<view class="empty" v-if="!sendCoupon.list.length">
<view class="iconfont iconwushuju"></view>
<view>暂无数据</view>
</view>
</scroll-view>
</view>
<view class="pop-bottom">
<button v-if="sendCoupon.list.length" class="primary-btn" @click="sendCouponFn">发放优惠券</button>
</view>
</view>
</uni-popup>
<!-- 余额调整 -->
<uni-popup ref="balancePop">
<view class="pop-box pointPop-box">
<view class="pop-header">
<view class="pop-header-text">调整余额</view>
<view class="pop-header-close" @click="popClose('balance')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<scroll-view scroll-y="true" class="common-scrollbar pop-content">
<view class="form-content">
<view class="form-item">
<view class="form-label">
<text class="required"></text>
当前余额
</view>
<view class="form-inline">
{{ memberInfo && memberInfo.balance ? memberInfo.balance : '0.00' }}
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
调整数额
</view>
<view class="form-inline">
<input class="form-input" type="number" placeholder="请输入调整数额" v-model="balanceData.num" />
<view class="word-aux">调整数额与当前储值余额相加不能小于0</view>
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
备注
</view>
<view class="form-inline">
<textarea class="form-textarea" v-model="balanceData.desc"></textarea>
</view>
</view>
</view>
</scroll-view>
<view class="pop-bottom">
<button class="primary-btn" @click="saveBalance">确定</button>
</view>
</view>
</uni-popup>
<!-- 成长值调整 -->
<uni-popup ref="growthPop">
<view class="pop-box pointPop-box">
<view class="pop-header">
<view class="pop-header-text">调整成长值</view>
<view class="pop-header-close" @click="popClose('growth')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<scroll-view scroll-y="true" class="common-scrollbar pop-content">
<view class="form-content">
<view class="form-item">
<view class="form-label">
<text class="required"></text>
当前成长值
</view>
<view class="form-inline">{{ memberInfo && memberInfo.growth ? memberInfo.growth : '0' }}</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
调整数额
</view>
<view class="form-inline">
<input class="form-input" type="number" placeholder="请输入调整数额" v-model="growthData.num" />
<view class="word-aux">调整数额与当前成长值相加不能小于0</view>
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
备注
</view>
<view class="form-inline">
<textarea class="form-textarea" v-model="growthData.desc"></textarea>
</view>
</view>
</view>
</scroll-view>
<view class="pop-bottom">
<button class="primary-btn" @click="saveGrowth">确定</button>
</view>
</view>
</uni-popup>
<!-- 办理会员 -->
<uni-popup ref="applyMemberPop">
<view class="pop-box applyMemberPop-box">
<view class="pop-header">
<view class="pop-header-text">办理会员</view>
<view class="pop-header-close" @click="popClose('applyMember')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<view class="common-scrollbar pop-content">
<view class="form-content">
<view class="form-item">
<view class="form-label">
<text class="required"></text>
会员等级
</view>
<view class="form-inline">
<select-lay :zindex="10" :value="applyMember.level_id" name="names" placeholder="请选择会员等级" :options="memberLevelList" @selectitem="selectMemberLevel"/>
</view>
</view>
<view class="form-item">
<view class="form-label">
<text class="required"></text>
会员卡号
</view>
<view class="form-inline">
<input class="form-input" type="text" placeholder="请输入会员卡号" v-model="applyMember.member_code" />
<view class="word-aux">会员卡号为会员唯一编号若不设置将会自动生成</view>
</view>
</view>
</view>
</view>
<view class="pop-bottom">
<button class="primary-btn" @click="saveApplyMember">确定</button>
</view>
</view>
</uni-popup>
<!-- 优惠券列表 -->
<uni-popup ref="couponListPop">
<view class="pop-box coupon-list-pop-box">
<view class="pop-header">
<view class="pop-header-text">优惠券</view>
<view class="pop-header-close" @click="popClose('couponList')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<scroll-view scroll-y="true" class="common-scrollbar pop-content">
<dataTable url="/cashier/storeapi/member/coupon" :cols="couponCols" ref="table" :option="option" :pagesize="pageSize"></dataTable>
</scroll-view>
</view>
</uni-popup>
<!-- 积分列表 -->
<uni-popup ref="pointListPop">
<view class="pop-box coupon-list-pop-box">
<view class="pop-header">
<view class="pop-header-text">积分</view>
<view class="pop-header-close" @click="popClose('pointList')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<scroll-view scroll-y="true" class="common-scrollbar pop-content">
<dataTable url="/cashier/storeapi/member/memberaccountlist" :cols="pointCols" ref="table" :option="option" :pagesize="pageSize"></dataTable>
</scroll-view>
</view>
</uni-popup>
<!-- 余额列表 -->
<uni-popup ref="balanceListPop">
<view class="pop-box coupon-list-pop-box">
<view class="pop-header">
<view class="pop-header-text">余额</view>
<view class="pop-header-close" @click="popClose('balanceList')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<scroll-view scroll-y="true" class="common-scrollbar pop-content">
<dataTable url="/cashier/storeapi/member/memberaccountlist" :cols="balanceCols" ref="table" :option="option" :pagesize="pageSize"></dataTable>
</scroll-view>
</view>
</uni-popup>
<!-- 成长值列表 -->
<uni-popup ref="growthListPop">
<view class="pop-box coupon-list-pop-box">
<view class="pop-header">
<view class="pop-header-text">成长值</view>
<view class="pop-header-close" @click="popClose('growthList')">
<text class="iconguanbi1 iconfont"></text>
</view>
</view>
<scroll-view scroll-y="true" class="common-scrollbar pop-content">
<dataTable url="/cashier/storeapi/member/memberaccountlist" :cols="growthCols" ref="table" :option="option" :pagesize="pageSize"></dataTable>
</scroll-view>
</view>
</uni-popup>
<!-- 卡项 -->
<ns-member-card-record ref="memberCardRecord" :option="option"/>
</view>
</template>
<script>
import dataTable from '@/components/uni-data-table/uni-data-table.vue';
import nsMemberCardRecord from '@/components/ns-member-card-record/ns-member-card-record.vue';
import index from './index.js';
export default {
components: {
dataTable,
nsMemberCardRecord
},
mixins: [index]
};
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>