50 changed files with 203 additions and 4940 deletions
@ -1,62 +0,0 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
// USER_CODE_BEGIN -- zhjw_users
|
|||
/** |
|||
* 获取用户管理列表 |
|||
* @param params |
|||
* @returns |
|||
*/ |
|||
export function getUsersList(params: Record<string, any>) { |
|||
return request.get(`zhjw/users`, {params}) |
|||
} |
|||
|
|||
/** |
|||
* 获取用户管理详情 |
|||
* @param member_id 用户管理member_id |
|||
* @returns |
|||
*/ |
|||
export function getUsersInfo(member_id: number) { |
|||
return request.get(`zhjw/users/${member_id}`); |
|||
} |
|||
|
|||
/** |
|||
* 添加用户管理 |
|||
* @param params |
|||
* @returns |
|||
*/ |
|||
export function addUsers(params: Record<string, any>) { |
|||
return request.post('zhjw/users', params, { showErrorMessage: true, showSuccessMessage: true }) |
|||
} |
|||
|
|||
/** |
|||
* 编辑用户管理 |
|||
* @param member_id |
|||
* @param params |
|||
* @returns |
|||
*/ |
|||
export function editUsers(params: Record<string, any>) { |
|||
return request.put(`zhjw/users/${params.member_id}`, params, { showErrorMessage: true, showSuccessMessage: true }) |
|||
} |
|||
|
|||
/** |
|||
* 删除用户管理 |
|||
* @param member_id |
|||
* @returns |
|||
*/ |
|||
export function deleteUsers(member_id: number) { |
|||
return request.delete(`zhjw/users/${member_id}`, { showErrorMessage: true, showSuccessMessage: true }) |
|||
} |
|||
|
|||
export function getWithUsersList(params: Record<string,any>){ |
|||
return request.get('zhjw/users_all', {params}) |
|||
} |
|||
|
|||
// USER_CODE_END -- zhjw_users
|
|||
@ -1,88 +0,0 @@ |
|||
{ |
|||
"memberId":"序号", |
|||
"memberNo":"会员编码", |
|||
"pid":"推广会员", |
|||
"username":"会员用户名", |
|||
"usernamePlaceholder":"请输入会员用户名", |
|||
"mobile":"手机号", |
|||
"mobilePlaceholder":"请输入手机号", |
|||
"password":"会员密码", |
|||
"nickname":"会员昵称", |
|||
"nicknamePlaceholder":"请输入会员昵称", |
|||
"headimg":"会员头像", |
|||
"memberLevel":"会员等级", |
|||
"memberLevelPlaceholder":"请输入会员等级", |
|||
"memberLabel":"会员标签", |
|||
"memberLabelPlaceholder":"请输入会员标签", |
|||
"wxOpenid":"微信用户openid", |
|||
"wxOpenidPlaceholder":"请输入微信用户openid", |
|||
"weappOpenid":"微信小程序openid", |
|||
"weappOpenidPlaceholder":"请输入微信小程序openid", |
|||
"wxUnionid":"微信unionid", |
|||
"wxUnionidPlaceholder":"请输入微信unionid", |
|||
"aliOpenid":"支付宝账户id", |
|||
"aliOpenidPlaceholder":"请输入支付宝账户id", |
|||
"douyinOpenid":"抖音小程序openid", |
|||
"douyinOpenidPlaceholder":"请输入抖音小程序openid", |
|||
"registerChannel":"注册来源", |
|||
"registerChannelPlaceholder":"请输入注册来源", |
|||
"registerType":"注册方式", |
|||
"registerTypePlaceholder":"请输入注册方式", |
|||
"loginIp":"当前登录ip", |
|||
"loginIpPlaceholder":"请输入当前登录ip", |
|||
"loginType":"当前登录的操作终端类型", |
|||
"loginTypePlaceholder":"请输入当前登录的操作终端类型", |
|||
"loginChannel":"登录渠道", |
|||
"loginChannelPlaceholder":"请输入登录渠道", |
|||
"loginCount":"登录次数", |
|||
"loginCountPlaceholder":"请输入登录次数", |
|||
"loginTime":"当前登录时间", |
|||
"loginTimePlaceholder":"请输入当前登录时间", |
|||
"lastVisitTime":"最后访问时间", |
|||
"lastVisitTimePlaceholder":"请输入最后访问时间", |
|||
"lastConsumTime":"最后消费时间", |
|||
"lastConsumTimePlaceholder":"请输入最后消费时间", |
|||
"sex":"性别", |
|||
"sexPlaceholder":"请输入性别", |
|||
"status":"用户状态", |
|||
"statusPlaceholder":"请输入用户状态", |
|||
"birthday":"出生日期", |
|||
"birthdayPlaceholder":"请输入出生日期", |
|||
"point":"可用积分", |
|||
"pointPlaceholder":"请输入可用积分", |
|||
"pointGet":"累计获取积分", |
|||
"pointGetPlaceholder":"请输入累计获取积分", |
|||
"balance":"可用余额", |
|||
"balancePlaceholder":"请输入可用余额", |
|||
"balanceGet":"累计获取余额", |
|||
"balanceGetPlaceholder":"请输入累计获取余额", |
|||
"money":"可用余额(可提现)", |
|||
"moneyPlaceholder":"请输入可用余额(可提现)", |
|||
"moneyGet":"累计获取余额(可提现)", |
|||
"moneyGetPlaceholder":"请输入累计获取余额(可提现)", |
|||
"moneyCashOuting":"提现中余额(可提现)", |
|||
"moneyCashOutingPlaceholder":"请输入提现中余额(可提现)", |
|||
"growth":"成长值", |
|||
"growthPlaceholder":"请输入成长值", |
|||
"growthGet":"累计获得成长值", |
|||
"growthGetPlaceholder":"请输入累计获得成长值", |
|||
"commission":"当前佣金", |
|||
"commissionPlaceholder":"请输入当前佣金", |
|||
"commissionGet":"佣金获取", |
|||
"commissionGetPlaceholder":"请输入佣金获取", |
|||
"commissionCashOuting":"提现中佣金", |
|||
"commissionCashOutingPlaceholder":"请输入提现中佣金", |
|||
"isMember":"是否是会员", |
|||
"isMemberPlaceholder":"请输入是否是会员", |
|||
"memberTime":"成为会员时间", |
|||
"memberTimePlaceholder":"请输入成为会员时间", |
|||
"address":"详细地址", |
|||
"createTime":"注册时间", |
|||
"createTimePlaceholder":"请输入注册时间", |
|||
"updateTime":"修改时间", |
|||
"addUsers":"添加用户管理", |
|||
"updateUsers":"编辑用户管理", |
|||
"usersDeleteTips":"确定要删除该数据吗?", |
|||
"startDate":"请选择开始时间", |
|||
"endDate":"请选择结束时间" |
|||
} |
|||
@ -1,87 +0,0 @@ |
|||
{ |
|||
"memberNo":"会员编码", |
|||
"pid":"推广会员", |
|||
"username":"会员用户名", |
|||
"mobile":"手机号", |
|||
"password":"会员密码", |
|||
"nickname":"会员昵称", |
|||
"headimg":"会员头像", |
|||
"memberLevel":"会员等级", |
|||
"memberLabel":"会员标签", |
|||
"wxOpenid":"微信用户openid", |
|||
"weappOpenid":"微信小程序openid", |
|||
"wxUnionid":"微信unionid", |
|||
"aliOpenid":"支付宝账户id", |
|||
"douyinOpenid":"抖音小程序openid", |
|||
"registerChannel":"注册来源", |
|||
"registerType":"注册方式", |
|||
"loginIp":"当前登录ip", |
|||
"loginType":"当前登录的操作终端类型", |
|||
"loginChannel":"登录渠道", |
|||
"loginCount":"登录次数", |
|||
"loginTime":"当前登录时间", |
|||
"lastVisitTime":"最后访问时间", |
|||
"lastConsumTime":"最后消费时间", |
|||
"sex":"性别", |
|||
"status":"用户状态", |
|||
"birthday":"出生日期", |
|||
"point":"可用积分", |
|||
"pointGet":"累计获取积分", |
|||
"balance":"可用余额", |
|||
"balanceGet":"累计获取余额", |
|||
"money":"可用余额(可提现)", |
|||
"moneyGet":"累计获取余额(可提现)", |
|||
"moneyCashOuting":"提现中余额(可提现)", |
|||
"growth":"成长值", |
|||
"growthGet":"累计获得成长值", |
|||
"commission":"当前佣金", |
|||
"commissionGet":"佣金获取", |
|||
"commissionCashOuting":"提现中佣金", |
|||
"isMember":"是否是会员", |
|||
"memberTime":"成为会员时间", |
|||
"address":"详细地址", |
|||
"memberNoPlaceholder":"请输入会员编码", |
|||
"pidPlaceholder":"请选择推广会员", |
|||
"usernamePlaceholder":"请输入会员用户名", |
|||
"mobilePlaceholder":"请输入手机号", |
|||
"passwordPlaceholder":"请输入会员密码", |
|||
"nicknamePlaceholder":"请输入会员昵称", |
|||
"headimgPlaceholder":"请上传会员头像", |
|||
"memberLevelPlaceholder":"请输入会员等级", |
|||
"memberLabelPlaceholder":"请输入会员标签", |
|||
"wxOpenidPlaceholder":"请输入微信用户openid", |
|||
"weappOpenidPlaceholder":"请输入微信小程序openid", |
|||
"wxUnionidPlaceholder":"请输入微信unionid", |
|||
"aliOpenidPlaceholder":"请输入支付宝账户id", |
|||
"douyinOpenidPlaceholder":"请输入抖音小程序openid", |
|||
"registerChannelPlaceholder":"请输入注册来源", |
|||
"registerTypePlaceholder":"请输入注册方式", |
|||
"loginIpPlaceholder":"请输入当前登录ip", |
|||
"loginTypePlaceholder":"请输入当前登录的操作终端类型", |
|||
"loginChannelPlaceholder":"请输入登录渠道", |
|||
"loginCountPlaceholder":"请输入登录次数", |
|||
"loginTimePlaceholder":"请输入当前登录时间", |
|||
"lastVisitTimePlaceholder":"请输入最后访问时间", |
|||
"lastConsumTimePlaceholder":"请输入最后消费时间", |
|||
"sexPlaceholder":"请选择性别", |
|||
"statusPlaceholder":"请选择用户状态", |
|||
"birthdayPlaceholder":"请选择出生日期", |
|||
"pointPlaceholder":"请输入可用积分", |
|||
"pointGetPlaceholder":"请输入累计获取积分", |
|||
"balancePlaceholder":"请输入可用余额", |
|||
"balanceGetPlaceholder":"请输入累计获取余额", |
|||
"moneyPlaceholder":"请输入可用余额(可提现)", |
|||
"moneyGetPlaceholder":"请输入累计获取余额(可提现)", |
|||
"moneyCashOutingPlaceholder":"请输入提现中余额(可提现)", |
|||
"growthPlaceholder":"请输入成长值", |
|||
"growthGetPlaceholder":"请输入累计获得成长值", |
|||
"commissionPlaceholder":"请输入当前佣金", |
|||
"commissionGetPlaceholder":"请输入佣金获取", |
|||
"commissionCashOutingPlaceholder":"请输入提现中佣金", |
|||
"isMemberPlaceholder":"请选择是否是会员", |
|||
"memberTimePlaceholder":"请选择成为会员时间", |
|||
"addressPlaceholder":"请输入详细地址", |
|||
"addUsers":"添加用户管理", |
|||
"updateUsers":"编辑用户管理", |
|||
"usersDeleteTips":"确定要删除该用户管理吗?" |
|||
} |
|||
@ -1,615 +0,0 @@ |
|||
<template> |
|||
<el-dialog v-model="showDialog" :title="formData.member_id ? t('updateUsers') : t('addUsers')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true"> |
|||
<el-form :model="formData" label-width="120px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading"> |
|||
<el-form-item :label="t('memberNo')" > |
|||
<el-input v-model="formData.member_no" clearable :placeholder="t('memberNoPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('pid')" > |
|||
<el-select class="input-width" v-model="formData.pid" clearable :placeholder="t('pidPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in pidList" |
|||
:key="index" |
|||
:label="item['mobile']" |
|||
:value="item['member_id']" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('username')" prop="username"> |
|||
<el-input v-model="formData.username" clearable :placeholder="t('usernamePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('mobile')" prop="mobile"> |
|||
<el-input v-model="formData.mobile" clearable :placeholder="t('mobilePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('password')" prop="password"> |
|||
<el-input v-model="formData.password" clearable :placeholder="t('passwordPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('nickname')" prop="nickname"> |
|||
<el-input v-model="formData.nickname" clearable :placeholder="t('nicknamePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('headimg')"> |
|||
<upload-image v-model="formData.headimg" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberLevel')" prop="member_level"> |
|||
<el-input v-model="formData.member_level" clearable :placeholder="t('memberLevelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberLabel')" prop="member_label"> |
|||
<el-input v-model="formData.member_label" clearable :placeholder="t('memberLabelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('wxOpenid')" > |
|||
<el-input v-model="formData.wx_openid" clearable :placeholder="t('wxOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('weappOpenid')" > |
|||
<el-input v-model="formData.weapp_openid" clearable :placeholder="t('weappOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('wxUnionid')" > |
|||
<el-input v-model="formData.wx_unionid" clearable :placeholder="t('wxUnionidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('aliOpenid')" > |
|||
<el-input v-model="formData.ali_openid" clearable :placeholder="t('aliOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('douyinOpenid')" > |
|||
<el-input v-model="formData.douyin_openid" clearable :placeholder="t('douyinOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('registerChannel')" > |
|||
<el-input v-model="formData.register_channel" clearable :placeholder="t('registerChannelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('registerType')" > |
|||
<el-input v-model="formData.register_type" clearable :placeholder="t('registerTypePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginIp')" > |
|||
<el-input v-model="formData.login_ip" clearable :placeholder="t('loginIpPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginType')" > |
|||
<el-input v-model="formData.login_type" clearable :placeholder="t('loginTypePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginChannel')" > |
|||
<el-input v-model="formData.login_channel" clearable :placeholder="t('loginChannelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginCount')" > |
|||
<el-input v-model="formData.login_count" clearable :placeholder="t('loginCountPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginTime')" > |
|||
<el-input v-model="formData.login_time" clearable :placeholder="t('loginTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('lastVisitTime')" > |
|||
<el-input v-model="formData.last_visit_time" clearable :placeholder="t('lastVisitTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('lastConsumTime')" > |
|||
<el-input v-model="formData.last_consum_time" clearable :placeholder="t('lastConsumTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('sex')" prop="sex"> |
|||
<el-select class="input-width" v-model="formData.sex" clearable :placeholder="t('sexPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in sexList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('status')" prop="status"> |
|||
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in statusList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('birthday')" class="input-width"> |
|||
<el-date-picker |
|||
class="flex-1 !flex" |
|||
v-model="formData.birthday" |
|||
clearable |
|||
type="datetime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:placeholder="t('birthdayPlaceholder')"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item :label="t('point')" > |
|||
<el-input v-model="formData.point" clearable :placeholder="t('pointPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('pointGet')" > |
|||
<el-input v-model="formData.point_get" clearable :placeholder="t('pointGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('balance')" > |
|||
<el-input v-model="formData.balance" clearable :placeholder="t('balancePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('balanceGet')" > |
|||
<el-input v-model="formData.balance_get" clearable :placeholder="t('balanceGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('money')" > |
|||
<el-input v-model="formData.money" clearable :placeholder="t('moneyPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('moneyGet')" > |
|||
<el-input v-model="formData.money_get" clearable :placeholder="t('moneyGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('moneyCashOuting')" > |
|||
<el-input v-model="formData.money_cash_outing" clearable :placeholder="t('moneyCashOutingPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('growth')" > |
|||
<el-input v-model="formData.growth" clearable :placeholder="t('growthPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('growthGet')" > |
|||
<el-input v-model="formData.growth_get" clearable :placeholder="t('growthGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commission')" > |
|||
<el-input v-model="formData.commission" clearable :placeholder="t('commissionPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commissionGet')" > |
|||
<el-input v-model="formData.commission_get" clearable :placeholder="t('commissionGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commissionCashOuting')" > |
|||
<el-input v-model="formData.commission_cash_outing" clearable :placeholder="t('commissionCashOutingPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('isMember')" prop="is_member"> |
|||
<el-select class="input-width" v-model="formData.is_member" clearable :placeholder="t('isMemberPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in is_memberList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberTime')" class="input-width"> |
|||
<el-date-picker |
|||
class="flex-1 !flex" |
|||
v-model="formData.member_time" |
|||
clearable |
|||
type="datetime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:placeholder="t('memberTimePlaceholder')"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item :label="t('address')" > |
|||
<el-input v-model="formData.address" clearable :placeholder="t('addressPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
|
|||
<template #footer> |
|||
<span class="dialog-footer"> |
|||
<el-button @click="showDialog = false">{{ t('cancel') }}</el-button> |
|||
<el-button type="primary" :loading="loading" @click="confirm(formRef)">{{ |
|||
t('confirm') |
|||
}}</el-button> |
|||
</span> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script lang="ts" setup> |
|||
import { ref, reactive, computed, watch } from 'vue' |
|||
import { useDictionary } from '@/app/api/dict' |
|||
import { t } from '@/lang' |
|||
import type { FormInstance } from 'element-plus' |
|||
import { addUsers, editUsers, getUsersInfo, getWithUsersList } from '@/addon/zhjw/api/users' |
|||
|
|||
let showDialog = ref(false) |
|||
const loading = ref(false) |
|||
|
|||
/** |
|||
* 表单数据 |
|||
*/ |
|||
const initialFormData = { |
|||
member_id: '', |
|||
member_no: '', |
|||
pid: '', |
|||
username: '', |
|||
mobile: '', |
|||
password: '', |
|||
nickname: '', |
|||
headimg: '', |
|||
member_level: '', |
|||
member_label: '', |
|||
wx_openid: '', |
|||
weapp_openid: '', |
|||
wx_unionid: '', |
|||
ali_openid: '', |
|||
douyin_openid: '', |
|||
register_channel: '', |
|||
register_type: '', |
|||
login_ip: '', |
|||
login_type: '', |
|||
login_channel: '', |
|||
login_count: '', |
|||
login_time: '', |
|||
last_visit_time: '', |
|||
last_consum_time: '', |
|||
sex: '', |
|||
status: '', |
|||
birthday: '', |
|||
point: '', |
|||
point_get: '', |
|||
balance: '', |
|||
balance_get: '', |
|||
money: '', |
|||
money_get: '', |
|||
money_cash_outing: '', |
|||
growth: '', |
|||
growth_get: '', |
|||
commission: '', |
|||
commission_get: '', |
|||
commission_cash_outing: '', |
|||
is_member: '', |
|||
member_time: '', |
|||
address: '', |
|||
} |
|||
const formData: Record<string, any> = reactive({ ...initialFormData }) |
|||
|
|||
const formRef = ref<FormInstance>() |
|||
|
|||
// 表单验证规则 |
|||
const formRules = computed(() => { |
|||
return { |
|||
member_no: [ |
|||
{ required: true, message: t('memberNoPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
pid: [ |
|||
{ required: true, message: t('pidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
username: [ |
|||
{ required: true, message: t('usernamePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
mobile: [ |
|||
{ required: true, message: t('mobilePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
password: [ |
|||
{ required: true, message: t('passwordPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
nickname: [ |
|||
{ required: true, message: t('nicknamePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
headimg: [ |
|||
{ required: true, message: t('headimgPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_level: [ |
|||
{ required: true, message: t('memberLevelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_label: [ |
|||
{ required: true, message: t('memberLabelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
wx_openid: [ |
|||
{ required: true, message: t('wxOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
weapp_openid: [ |
|||
{ required: true, message: t('weappOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
wx_unionid: [ |
|||
{ required: true, message: t('wxUnionidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
ali_openid: [ |
|||
{ required: true, message: t('aliOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
douyin_openid: [ |
|||
{ required: true, message: t('douyinOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
register_channel: [ |
|||
{ required: true, message: t('registerChannelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
register_type: [ |
|||
{ required: true, message: t('registerTypePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_ip: [ |
|||
{ required: true, message: t('loginIpPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_type: [ |
|||
{ required: true, message: t('loginTypePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_channel: [ |
|||
{ required: true, message: t('loginChannelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_count: [ |
|||
{ required: true, message: t('loginCountPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_time: [ |
|||
{ required: true, message: t('loginTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
last_visit_time: [ |
|||
{ required: true, message: t('lastVisitTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
last_consum_time: [ |
|||
{ required: true, message: t('lastConsumTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
sex: [ |
|||
{ required: true, message: t('sexPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
status: [ |
|||
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
birthday: [ |
|||
{ required: true, message: t('birthdayPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
point: [ |
|||
{ required: true, message: t('pointPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
point_get: [ |
|||
{ required: true, message: t('pointGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
balance: [ |
|||
{ required: true, message: t('balancePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
balance_get: [ |
|||
{ required: true, message: t('balanceGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money: [ |
|||
{ required: true, message: t('moneyPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money_get: [ |
|||
{ required: true, message: t('moneyGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money_cash_outing: [ |
|||
{ required: true, message: t('moneyCashOutingPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
growth: [ |
|||
{ required: true, message: t('growthPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
growth_get: [ |
|||
{ required: true, message: t('growthGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission: [ |
|||
{ required: true, message: t('commissionPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission_get: [ |
|||
{ required: true, message: t('commissionGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission_cash_outing: [ |
|||
{ required: true, message: t('commissionCashOutingPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
is_member: [ |
|||
{ required: true, message: t('isMemberPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_time: [ |
|||
{ required: true, message: t('memberTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
address: [ |
|||
{ required: true, message: t('addressPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
} |
|||
}) |
|||
|
|||
const emit = defineEmits(['complete']) |
|||
|
|||
/** |
|||
* 确认 |
|||
* @param formEl |
|||
*/ |
|||
const confirm = async (formEl: FormInstance | undefined) => { |
|||
if (loading.value || !formEl) return |
|||
let save = formData.member_id ? editUsers : addUsers |
|||
|
|||
await formEl.validate(async (valid) => { |
|||
if (valid) { |
|||
loading.value = true |
|||
|
|||
let data = formData |
|||
|
|||
save(data).then(res => { |
|||
loading.value = false |
|||
showDialog.value = false |
|||
emit('complete') |
|||
}).catch(err => { |
|||
loading.value = false |
|||
}) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
// 获取字典数据 |
|||
let sexList = ref([]) |
|||
const sexDictList = async () => { |
|||
sexList.value = await (await useDictionary('users_sex')).data.dictionary |
|||
} |
|||
sexDictList(); |
|||
watch(() => sexList.value, () => { formData.sex = sexList.value[0].value }) |
|||
let statusList = ref([]) |
|||
const statusDictList = async () => { |
|||
statusList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
statusDictList(); |
|||
watch(() => statusList.value, () => { formData.status = statusList.value[0].value }) |
|||
let is_memberList = ref([]) |
|||
const is_memberDictList = async () => { |
|||
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_memberDictList(); |
|||
watch(() => is_memberList.value, () => { formData.is_member = is_memberList.value[0].value }) |
|||
let is_delList = ref([]) |
|||
const is_delDictList = async () => { |
|||
is_delList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_delDictList(); |
|||
watch(() => is_delList.value, () => { formData.is_del = is_delList.value[0].value }) |
|||
|
|||
|
|||
const pidList = ref([] as any[]) |
|||
const setPidList = async () => { |
|||
pidList.value = await (await getWithUsersList({})).data |
|||
} |
|||
setPidList() |
|||
const setFormData = async (row: any = null) => { |
|||
Object.assign(formData, initialFormData) |
|||
loading.value = true |
|||
if(row){ |
|||
const data = await (await getUsersInfo(row.member_id)).data |
|||
if (data) Object.keys(formData).forEach((key: string) => { |
|||
if (data[key] != undefined) formData[key] = data[key] |
|||
}) |
|||
} |
|||
loading.value = false |
|||
} |
|||
|
|||
// 验证手机号格式 |
|||
const mobileVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/^1[3-9]\d{9}$/.test(value)) { |
|||
callback(new Error(t('generateMobile'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证身份证号 |
|||
const idCardVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)) { |
|||
callback(new Error(t('generateIdCard'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证邮箱号 |
|||
const emailVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) { |
|||
callback(new Error(t('generateEmail'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证请输入整数 |
|||
const numberVerify = (rule: any, value: any, callback: any) => { |
|||
if (!Number.isInteger(value)) { |
|||
callback(new Error(t('generateNumber'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
defineExpose({ |
|||
showDialog, |
|||
setFormData |
|||
}) |
|||
</script> |
|||
|
|||
<style lang="scss" scoped></style> |
|||
<style lang="scss"> |
|||
.diy-dialog-wrap .el-form-item__label{ |
|||
height: auto !important; |
|||
} |
|||
</style> |
|||
@ -1,481 +0,0 @@ |
|||
<template> |
|||
<div class="main-container"> |
|||
<el-card class="box-card !border-none" shadow="never"> |
|||
|
|||
<div class="flex justify-between items-center"> |
|||
<span class="text-lg">{{pageName}}</span> |
|||
<el-button type="primary" @click="addEvent"> |
|||
{{ t('addUsers') }} |
|||
</el-button> |
|||
</div> |
|||
|
|||
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never"> |
|||
<el-form :inline="true" :model="usersTable.searchParam" ref="searchFormRef"> |
|||
<el-form-item :label="t('username')" prop="username"> |
|||
<el-input v-model="usersTable.searchParam.username" :placeholder="t('usernamePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('mobile')" prop="mobile"> |
|||
<el-input v-model="usersTable.searchParam.mobile" :placeholder="t('mobilePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('nickname')" prop="nickname"> |
|||
<el-input v-model="usersTable.searchParam.nickname" :placeholder="t('nicknamePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('memberLevel')" prop="member_level"> |
|||
<el-input v-model="usersTable.searchParam.member_level" :placeholder="t('memberLevelPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('memberLabel')" prop="member_label"> |
|||
<el-input v-model="usersTable.searchParam.member_label" :placeholder="t('memberLabelPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('wxOpenid')" prop="wx_openid"> |
|||
<el-input v-model="usersTable.searchParam.wx_openid" :placeholder="t('wxOpenidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('weappOpenid')" prop="weapp_openid"> |
|||
<el-input v-model="usersTable.searchParam.weapp_openid" :placeholder="t('weappOpenidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('wxUnionid')" prop="wx_unionid"> |
|||
<el-input v-model="usersTable.searchParam.wx_unionid" :placeholder="t('wxUnionidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('aliOpenid')" prop="ali_openid"> |
|||
<el-input v-model="usersTable.searchParam.ali_openid" :placeholder="t('aliOpenidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('douyinOpenid')" prop="douyin_openid"> |
|||
<el-input v-model="usersTable.searchParam.douyin_openid" :placeholder="t('douyinOpenidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('registerChannel')" prop="register_channel"> |
|||
<el-input v-model="usersTable.searchParam.register_channel" :placeholder="t('registerChannelPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('registerType')" prop="register_type"> |
|||
<el-input v-model="usersTable.searchParam.register_type" :placeholder="t('registerTypePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginIp')" prop="login_ip"> |
|||
<el-input v-model="usersTable.searchParam.login_ip" :placeholder="t('loginIpPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginType')" prop="login_type"> |
|||
<el-input v-model="usersTable.searchParam.login_type" :placeholder="t('loginTypePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginChannel')" prop="login_channel"> |
|||
<el-input v-model="usersTable.searchParam.login_channel" :placeholder="t('loginChannelPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginCount')" prop="login_count"> |
|||
<el-input v-model="usersTable.searchParam.login_count" :placeholder="t('loginCountPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginTime')" prop="login_time"> |
|||
<el-input v-model="usersTable.searchParam.login_time" :placeholder="t('loginTimePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('lastVisitTime')" prop="last_visit_time"> |
|||
<el-input v-model="usersTable.searchParam.last_visit_time" :placeholder="t('lastVisitTimePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('lastConsumTime')" prop="last_consum_time"> |
|||
<el-input v-model="usersTable.searchParam.last_consum_time" :placeholder="t('lastConsumTimePlaceholder')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('sex')" prop="sex"> |
|||
<el-select class="w-[280px]" v-model="usersTable.searchParam.sex" clearable :placeholder="t('sexPlaceholder')"> |
|||
<el-option label="全部" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in sexList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
|
|||
<el-form-item :label="t('status')" prop="status"> |
|||
<el-select class="w-[280px]" v-model="usersTable.searchParam.status" clearable :placeholder="t('statusPlaceholder')"> |
|||
<el-option label="全部" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in statusList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('birthday')" prop="birthday"> |
|||
<el-date-picker v-model="usersTable.searchParam.birthday" type="datetimerange" format="YYYY-MM-DD hh:mm:ss" |
|||
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('point')" prop="point"> |
|||
<el-input v-model="usersTable.searchParam.point" :placeholder="t('pointPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('pointGet')" prop="point_get"> |
|||
<el-input v-model="usersTable.searchParam.point_get" :placeholder="t('pointGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('balance')" prop="balance"> |
|||
<el-input v-model="usersTable.searchParam.balance" :placeholder="t('balancePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('balanceGet')" prop="balance_get"> |
|||
<el-input v-model="usersTable.searchParam.balance_get" :placeholder="t('balanceGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('money')" prop="money"> |
|||
<el-input v-model="usersTable.searchParam.money" :placeholder="t('moneyPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('moneyGet')" prop="money_get"> |
|||
<el-input v-model="usersTable.searchParam.money_get" :placeholder="t('moneyGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('moneyCashOuting')" prop="money_cash_outing"> |
|||
<el-input v-model="usersTable.searchParam.money_cash_outing" :placeholder="t('moneyCashOutingPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('growth')" prop="growth"> |
|||
<el-input v-model="usersTable.searchParam.growth" :placeholder="t('growthPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('growthGet')" prop="growth_get"> |
|||
<el-input v-model="usersTable.searchParam.growth_get" :placeholder="t('growthGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('commission')" prop="commission"> |
|||
<el-input v-model="usersTable.searchParam.commission" :placeholder="t('commissionPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('commissionGet')" prop="commission_get"> |
|||
<el-input v-model="usersTable.searchParam.commission_get" :placeholder="t('commissionGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('commissionCashOuting')" prop="commission_cash_outing"> |
|||
<el-input v-model="usersTable.searchParam.commission_cash_outing" :placeholder="t('commissionCashOutingPlaceholder')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('isMember')" prop="is_member"> |
|||
<el-select class="w-[280px]" v-model="usersTable.searchParam.is_member" clearable :placeholder="t('isMemberPlaceholder')"> |
|||
<el-option label="全部" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in is_memberList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberTime')" prop="member_time"> |
|||
<el-date-picker v-model="usersTable.searchParam.member_time" type="datetimerange" format="YYYY-MM-DD hh:mm:ss" |
|||
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('createTime')" prop="create_time"> |
|||
<el-date-picker v-model="usersTable.searchParam.create_time" type="datetimerange" format="YYYY-MM-DD hh:mm:ss" |
|||
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item> |
|||
<el-button type="primary" @click="loadUsersList()">{{ t('search') }}</el-button> |
|||
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-card> |
|||
|
|||
<div class="mt-[10px]"> |
|||
<el-table :data="usersTable.data" size="large" v-loading="usersTable.loading"> |
|||
<template #empty> |
|||
<span>{{ !usersTable.loading ? t('emptyData') : '' }}</span> |
|||
</template> |
|||
<el-table-column prop="member_id" :label="t('memberId')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="member_no" :label="t('memberNo')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="pid_name" :label="t('pid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="username" :label="t('username')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="mobile" :label="t('mobile')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="password" :label="t('password')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="nickname" :label="t('nickname')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column :label="t('headimg')" width="100" align="left"> |
|||
<template #default="{ row }"> |
|||
<el-avatar v-if="row.headimg" :src="img(row.headimg)" /> |
|||
<el-avatar v-else icon="UserFilled" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="member_level" :label="t('memberLevel')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="member_label" :label="t('memberLabel')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="wx_openid" :label="t('wxOpenid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="weapp_openid" :label="t('weappOpenid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="wx_unionid" :label="t('wxUnionid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="ali_openid" :label="t('aliOpenid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="douyin_openid" :label="t('douyinOpenid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="register_channel" :label="t('registerChannel')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="register_type" :label="t('registerType')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_ip" :label="t('loginIp')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_type" :label="t('loginType')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_channel" :label="t('loginChannel')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_count" :label="t('loginCount')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_time" :label="t('loginTime')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="last_visit_time" :label="t('lastVisitTime')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="last_consum_time" :label="t('lastConsumTime')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column :label="t('sex')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
<div v-for="(item, index) in sexList"> |
|||
<div v-if="item.value == row.sex">{{ item.name }}</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="t('status')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
<div v-for="(item, index) in statusList"> |
|||
<div v-if="item.value == row.status">{{ item.name }}</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="birthday" :label="t('birthday')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="point" :label="t('point')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="point_get" :label="t('pointGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="balance" :label="t('balance')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="balance_get" :label="t('balanceGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="money" :label="t('money')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="money_get" :label="t('moneyGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="money_cash_outing" :label="t('moneyCashOuting')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="growth" :label="t('growth')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="growth_get" :label="t('growthGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="commission" :label="t('commission')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="commission_get" :label="t('commissionGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="commission_cash_outing" :label="t('commissionCashOuting')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column :label="t('isMember')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
<div v-for="(item, index) in is_memberList"> |
|||
<div v-if="item.value == row.is_member">{{ item.name }}</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="t('memberTime')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
{{ row.member_time || '' }} |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="address" :label="t('address')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column :label="t('createTime')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
{{ row.create_time || '' }} |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="t('updateTime')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
{{ row.update_time || '' }} |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="t('operation')" fixed="right" min-width="120"> |
|||
<template #default="{ row }"> |
|||
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> |
|||
<el-button type="primary" link @click="deleteEvent(row.member_id)">{{ t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
</el-table> |
|||
<div class="mt-[16px] flex justify-end"> |
|||
<el-pagination v-model:current-page="usersTable.page" v-model:page-size="usersTable.limit" |
|||
layout="total, sizes, prev, pager, next, jumper" :total="usersTable.total" |
|||
@size-change="loadUsersList()" @current-change="loadUsersList" /> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
</el-card> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts" setup> |
|||
import { reactive, ref, watch } from 'vue' |
|||
import { t } from '@/lang' |
|||
import { useDictionary } from '@/app/api/dict' |
|||
import { getUsersList, deleteUsers, getWithUsersList } from '@/addon/zhjw/api/users' |
|||
import { img } from '@/utils/common' |
|||
import { ElMessageBox,FormInstance } from 'element-plus' |
|||
import { useRouter } from 'vue-router' |
|||
import { useRoute } from 'vue-router' |
|||
const route = useRoute() |
|||
const pageName = route.meta.title; |
|||
|
|||
let usersTable = reactive({ |
|||
page: 1, |
|||
limit: 10, |
|||
total: 0, |
|||
loading: true, |
|||
data: [], |
|||
searchParam:{ |
|||
"username":"", |
|||
"mobile":"", |
|||
"nickname":"", |
|||
"member_level":"", |
|||
"member_label":"", |
|||
"wx_openid":"", |
|||
"weapp_openid":"", |
|||
"wx_unionid":"", |
|||
"ali_openid":"", |
|||
"douyin_openid":"", |
|||
"register_channel":"", |
|||
"register_type":"", |
|||
"login_ip":"", |
|||
"login_type":"", |
|||
"login_channel":"", |
|||
"login_count":"", |
|||
"login_time":"", |
|||
"last_visit_time":"", |
|||
"last_consum_time":"", |
|||
"sex":"", |
|||
"status":"", |
|||
"birthday":[], |
|||
"point":"", |
|||
"point_get":"", |
|||
"balance":"", |
|||
"balance_get":"", |
|||
"money":"", |
|||
"money_get":"", |
|||
"money_cash_outing":"", |
|||
"growth":"", |
|||
"growth_get":"", |
|||
"commission":"", |
|||
"commission_get":"", |
|||
"commission_cash_outing":"", |
|||
"is_member":"", |
|||
"member_time":[], |
|||
"create_time":"" |
|||
} |
|||
}) |
|||
|
|||
const searchFormRef = ref<FormInstance>() |
|||
|
|||
// 选中数据 |
|||
const selectData = ref<any[]>([]) |
|||
|
|||
// 字典数据 |
|||
const sexList = ref([] as any[]) |
|||
const sexDictList = async () => { |
|||
sexList.value = await (await useDictionary('users_sex')).data.dictionary |
|||
} |
|||
sexDictList(); |
|||
const statusList = ref([] as any[]) |
|||
const statusDictList = async () => { |
|||
statusList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
statusDictList(); |
|||
const is_memberList = ref([] as any[]) |
|||
const is_memberDictList = async () => { |
|||
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_memberDictList(); |
|||
const is_delList = ref([] as any[]) |
|||
const is_delDictList = async () => { |
|||
is_delList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_delDictList(); |
|||
|
|||
/** |
|||
* 获取用户管理列表 |
|||
*/ |
|||
const loadUsersList = (page: number = 1) => { |
|||
usersTable.loading = true |
|||
usersTable.page = page |
|||
|
|||
getUsersList({ |
|||
page: usersTable.page, |
|||
limit: usersTable.limit, |
|||
...usersTable.searchParam |
|||
}).then(res => { |
|||
usersTable.loading = false |
|||
usersTable.data = res.data.data |
|||
usersTable.total = res.data.total |
|||
}).catch(() => { |
|||
usersTable.loading = false |
|||
}) |
|||
} |
|||
loadUsersList() |
|||
|
|||
const router = useRouter() |
|||
|
|||
/** |
|||
* 添加用户管理 |
|||
*/ |
|||
const addEvent = () => { |
|||
router.push('/users/users_edit') |
|||
} |
|||
|
|||
/** |
|||
* 编辑用户管理 |
|||
* @param data |
|||
*/ |
|||
const editEvent = (data: any) => { |
|||
router.push('/users/users_edit?id='+data.member_id) |
|||
} |
|||
|
|||
/** |
|||
* 删除用户管理 |
|||
*/ |
|||
const deleteEvent = (id: number) => { |
|||
ElMessageBox.confirm(t('usersDeleteTips'), t('warning'), |
|||
{ |
|||
confirmButtonText: t('confirm'), |
|||
cancelButtonText: t('cancel'), |
|||
type: 'warning', |
|||
} |
|||
).then(() => { |
|||
deleteUsers(id).then(() => { |
|||
loadUsersList() |
|||
}).catch(() => { |
|||
}) |
|||
}) |
|||
} |
|||
|
|||
|
|||
const pidList = ref([]) |
|||
const setPidList = async () => { |
|||
pidList.value = await (await getWithUsersList({})).data |
|||
} |
|||
setPidList() |
|||
|
|||
const resetForm = (formEl: FormInstance | undefined) => { |
|||
if (!formEl) return |
|||
formEl.resetFields() |
|||
loadUsersList() |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
/* 多行超出隐藏 */ |
|||
.multi-hidden { |
|||
word-break: break-all; |
|||
text-overflow: ellipsis; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
</style> |
|||
@ -1,612 +0,0 @@ |
|||
<template> |
|||
<div class="main-container"> |
|||
<div class="detail-head"> |
|||
<div class="left" @click="back()"> |
|||
<span class="iconfont iconxiangzuojiantou !text-xs"></span> |
|||
<span class="ml-[1px]">{{t('returnToPreviousPage')}}</span> |
|||
</div> |
|||
<span class="adorn">|</span> |
|||
<span class="right">{{ pageName }}</span> |
|||
</div> |
|||
<el-card class="box-card !border-none" shadow="never"> |
|||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form"> |
|||
<el-form-item :label="t('memberNo')" > |
|||
<el-input v-model="formData.member_no" clearable :placeholder="t('memberNoPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('pid')" > |
|||
<el-select class="input-width" v-model="formData.pid" clearable :placeholder="t('pidPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in pidList" |
|||
:key="index" |
|||
:label="item['mobile']" |
|||
:value="item['member_id']" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('username')" prop="username"> |
|||
<el-input v-model="formData.username" clearable :placeholder="t('usernamePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('mobile')" prop="mobile"> |
|||
<el-input v-model="formData.mobile" clearable :placeholder="t('mobilePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('password')" prop="password"> |
|||
<el-input v-model="formData.password" clearable :placeholder="t('passwordPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('nickname')" prop="nickname"> |
|||
<el-input v-model="formData.nickname" clearable :placeholder="t('nicknamePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('headimg')"> |
|||
<upload-image v-model="formData.headimg" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberLevel')" > |
|||
<el-input v-model="formData.member_level" clearable :placeholder="t('memberLevelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberLabel')" > |
|||
<el-input v-model="formData.member_label" clearable :placeholder="t('memberLabelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('wxOpenid')" > |
|||
<el-input v-model="formData.wx_openid" clearable :placeholder="t('wxOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('weappOpenid')" > |
|||
<el-input v-model="formData.weapp_openid" clearable :placeholder="t('weappOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('wxUnionid')" > |
|||
<el-input v-model="formData.wx_unionid" clearable :placeholder="t('wxUnionidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('aliOpenid')" > |
|||
<el-input v-model="formData.ali_openid" clearable :placeholder="t('aliOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('douyinOpenid')" > |
|||
<el-input v-model="formData.douyin_openid" clearable :placeholder="t('douyinOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('registerChannel')" > |
|||
<el-input v-model="formData.register_channel" clearable :placeholder="t('registerChannelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('registerType')" > |
|||
<el-input v-model="formData.register_type" clearable :placeholder="t('registerTypePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginIp')" > |
|||
<el-input v-model="formData.login_ip" clearable :placeholder="t('loginIpPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginType')" > |
|||
<el-input v-model="formData.login_type" clearable :placeholder="t('loginTypePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginChannel')" > |
|||
<el-input v-model="formData.login_channel" clearable :placeholder="t('loginChannelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginCount')" > |
|||
<el-input v-model="formData.login_count" clearable :placeholder="t('loginCountPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginTime')" > |
|||
<el-input v-model="formData.login_time" clearable :placeholder="t('loginTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('lastVisitTime')" > |
|||
<el-input v-model="formData.last_visit_time" clearable :placeholder="t('lastVisitTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('lastConsumTime')" > |
|||
<el-input v-model="formData.last_consum_time" clearable :placeholder="t('lastConsumTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('sex')" prop="sex"> |
|||
<el-select class="input-width" v-model="formData.sex" clearable :placeholder="t('sexPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in sexList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('status')" prop="status"> |
|||
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in statusList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('birthday')" class="input-width"> |
|||
<el-date-picker |
|||
class="flex-1 !flex" |
|||
v-model="formData.birthday" |
|||
clearable |
|||
type="datetime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:placeholder="t('birthdayPlaceholder')"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item :label="t('point')" > |
|||
<el-input v-model="formData.point" clearable :placeholder="t('pointPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('pointGet')" > |
|||
<el-input v-model="formData.point_get" clearable :placeholder="t('pointGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('balance')" > |
|||
<el-input v-model="formData.balance" clearable :placeholder="t('balancePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('balanceGet')" > |
|||
<el-input v-model="formData.balance_get" clearable :placeholder="t('balanceGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('money')" > |
|||
<el-input v-model="formData.money" clearable :placeholder="t('moneyPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('moneyGet')" > |
|||
<el-input v-model="formData.money_get" clearable :placeholder="t('moneyGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('moneyCashOuting')" > |
|||
<el-input v-model="formData.money_cash_outing" clearable :placeholder="t('moneyCashOutingPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('growth')" > |
|||
<el-input v-model="formData.growth" clearable :placeholder="t('growthPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('growthGet')" > |
|||
<el-input v-model="formData.growth_get" clearable :placeholder="t('growthGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commission')" > |
|||
<el-input v-model="formData.commission" clearable :placeholder="t('commissionPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commissionGet')" > |
|||
<el-input v-model="formData.commission_get" clearable :placeholder="t('commissionGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commissionCashOuting')" > |
|||
<el-input v-model="formData.commission_cash_outing" clearable :placeholder="t('commissionCashOutingPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('isMember')" prop="is_member"> |
|||
<el-select class="input-width" v-model="formData.is_member" clearable :placeholder="t('isMemberPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in is_memberList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberTime')" class="input-width"> |
|||
<el-date-picker |
|||
class="flex-1 !flex" |
|||
v-model="formData.member_time" |
|||
clearable |
|||
type="datetime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:placeholder="t('memberTimePlaceholder')"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item :label="t('address')" > |
|||
<el-input v-model="formData.address" clearable :placeholder="t('addressPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
</el-card> |
|||
<div class="fixed-footer-wrap"> |
|||
<div class="fixed-footer"> |
|||
<el-button type="primary" @click="onSave(formRef)">{{ t('save') }}</el-button> |
|||
<el-button @click="back()">{{ t('cancel') }}</el-button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts" setup> |
|||
import { ref, reactive, computed, watch } from 'vue' |
|||
import { t } from '@/lang' |
|||
import { useDictionary } from '@/app/api/dict' |
|||
import type { FormInstance } from 'element-plus' |
|||
import { getUsersInfo,addUsers,editUsers, getWithUsersList } from '@/addon/zhjw/api/users'; |
|||
import { useRoute } from 'vue-router' |
|||
|
|||
const route = useRoute() |
|||
const id:number = parseInt(route.query.id); |
|||
const loading = ref(false) |
|||
const pageName = route.meta.title |
|||
|
|||
|
|||
|
|||
/** |
|||
* 表单数据 |
|||
*/ |
|||
const initialFormData = { |
|||
member_id: 0, |
|||
member_no: '', |
|||
pid: '', |
|||
username: '', |
|||
mobile: '', |
|||
password: '', |
|||
nickname: '', |
|||
headimg: '', |
|||
member_level: 0, |
|||
member_label: '', |
|||
wx_openid: '', |
|||
weapp_openid: '', |
|||
wx_unionid: '', |
|||
ali_openid: '', |
|||
douyin_openid: '', |
|||
register_channel: '', |
|||
register_type: '', |
|||
login_ip: '', |
|||
login_type: '', |
|||
login_channel: '', |
|||
login_count: 0, |
|||
login_time: 0, |
|||
last_visit_time: 0, |
|||
last_consum_time: 0, |
|||
sex: 0, |
|||
status: 0, |
|||
birthday: '', |
|||
point: 0, |
|||
point_get: 0, |
|||
balance: '', |
|||
balance_get: '', |
|||
money: '', |
|||
money_get: '', |
|||
money_cash_outing: '', |
|||
growth: 0, |
|||
growth_get: 0, |
|||
commission: '', |
|||
commission_get: '', |
|||
commission_cash_outing: '', |
|||
is_member: 0, |
|||
member_time: 0, |
|||
address: '', |
|||
} |
|||
const formData: Record<string, any> = reactive({ ...initialFormData }) |
|||
|
|||
const setFormData = async (id:number = 0) => { |
|||
Object.assign(formData, initialFormData) |
|||
const data = await (await getUsersInfo(id)).data |
|||
Object.keys(formData).forEach((key: string) => { |
|||
if (data[key] != undefined) formData[key] = data[key] |
|||
}) |
|||
} |
|||
if(id) setFormData(id); |
|||
|
|||
const formRef = ref<FormInstance>() |
|||
// 选中数据 |
|||
const selectData = ref<any[]>([]) |
|||
|
|||
// 字典数据 |
|||
let sexList = ref([]) |
|||
const sexDictList = async () => { |
|||
sexList.value = await (await useDictionary('users_sex')).data.dictionary |
|||
} |
|||
sexDictList(); |
|||
watch(() => sexList.value, () => { formData.sex = sexList.value[0].value }) |
|||
let statusList = ref([]) |
|||
const statusDictList = async () => { |
|||
statusList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
statusDictList(); |
|||
watch(() => statusList.value, () => { formData.status = statusList.value[0].value }) |
|||
let is_memberList = ref([]) |
|||
const is_memberDictList = async () => { |
|||
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_memberDictList(); |
|||
watch(() => is_memberList.value, () => { formData.is_member = is_memberList.value[0].value }) |
|||
let is_delList = ref([]) |
|||
const is_delDictList = async () => { |
|||
is_delList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_delDictList(); |
|||
watch(() => is_delList.value, () => { formData.is_del = is_delList.value[0].value }) |
|||
|
|||
|
|||
const pidList = ref([] as any[]) |
|||
const setPidList = async () => { |
|||
pidList.value = await (await getWithUsersList({})).data |
|||
} |
|||
setPidList() |
|||
// 表单验证规则 |
|||
const formRules = computed(() => { |
|||
return { |
|||
member_no: [ |
|||
{ required: true, message: t('memberNoPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
pid: [ |
|||
{ required: true, message: t('pidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
username: [ |
|||
{ required: true, message: t('usernamePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
mobile: [ |
|||
{ required: true, message: t('mobilePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
password: [ |
|||
{ required: true, message: t('passwordPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
nickname: [ |
|||
{ required: true, message: t('nicknamePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
headimg: [ |
|||
{ required: true, message: t('headimgPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_level: [ |
|||
{ required: true, message: t('memberLevelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_label: [ |
|||
{ required: true, message: t('memberLabelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
wx_openid: [ |
|||
{ required: true, message: t('wxOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
weapp_openid: [ |
|||
{ required: true, message: t('weappOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
wx_unionid: [ |
|||
{ required: true, message: t('wxUnionidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
ali_openid: [ |
|||
{ required: true, message: t('aliOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
douyin_openid: [ |
|||
{ required: true, message: t('douyinOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
register_channel: [ |
|||
{ required: true, message: t('registerChannelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
register_type: [ |
|||
{ required: true, message: t('registerTypePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_ip: [ |
|||
{ required: true, message: t('loginIpPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_type: [ |
|||
{ required: true, message: t('loginTypePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_channel: [ |
|||
{ required: true, message: t('loginChannelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_count: [ |
|||
{ required: true, message: t('loginCountPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_time: [ |
|||
{ required: true, message: t('loginTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
last_visit_time: [ |
|||
{ required: true, message: t('lastVisitTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
last_consum_time: [ |
|||
{ required: true, message: t('lastConsumTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
sex: [ |
|||
{ required: true, message: t('sexPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
status: [ |
|||
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
birthday: [ |
|||
{ required: true, message: t('birthdayPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
point: [ |
|||
{ required: true, message: t('pointPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
point_get: [ |
|||
{ required: true, message: t('pointGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
balance: [ |
|||
{ required: true, message: t('balancePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
balance_get: [ |
|||
{ required: true, message: t('balanceGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money: [ |
|||
{ required: true, message: t('moneyPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money_get: [ |
|||
{ required: true, message: t('moneyGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money_cash_outing: [ |
|||
{ required: true, message: t('moneyCashOutingPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
growth: [ |
|||
{ required: true, message: t('growthPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
growth_get: [ |
|||
{ required: true, message: t('growthGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission: [ |
|||
{ required: true, message: t('commissionPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission_get: [ |
|||
{ required: true, message: t('commissionGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission_cash_outing: [ |
|||
{ required: true, message: t('commissionCashOutingPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
is_member: [ |
|||
{ required: true, message: t('isMemberPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_time: [ |
|||
{ required: true, message: t('memberTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
address: [ |
|||
{ required: true, message: t('addressPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
} |
|||
}) |
|||
|
|||
const onSave = async (formEl: FormInstance | undefined) => { |
|||
if (loading.value || !formEl) return |
|||
await formEl.validate(async (valid) => { |
|||
if (valid) { |
|||
loading.value = true |
|||
let data = formData |
|||
|
|||
const save = id ? editUsers : addUsers |
|||
save(data).then(res => { |
|||
loading.value = false |
|||
history.back() |
|||
}).catch(err => { |
|||
loading.value = false |
|||
}) |
|||
|
|||
} |
|||
}) |
|||
} |
|||
|
|||
// 验证手机号格式 |
|||
const mobileVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/^1[3-9]\d{9}$/.test(value)) { |
|||
callback(new Error(t('generateMobile'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证身份证号 |
|||
const idCardVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)) { |
|||
callback(new Error(t('generateIdCard'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证邮箱号 |
|||
const emailVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) { |
|||
callback(new Error(t('generateEmail'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
|
|||
// 验证请输入整数 |
|||
const numberVerify = (rule: any, value: any, callback: any) => { |
|||
if (!Number.isInteger(value)) { |
|||
callback(new Error(t('generateNumber'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
const back = () => { |
|||
history.back() |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped></style> |
|||
@ -1,62 +0,0 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
// USER_CODE_BEGIN -- zhjw_users
|
|||
/** |
|||
* 获取用户管理列表 |
|||
* @param params |
|||
* @returns |
|||
*/ |
|||
export function getUsersList(params: Record<string, any>) { |
|||
return request.get(`zhjw/users`, {params}) |
|||
} |
|||
|
|||
/** |
|||
* 获取用户管理详情 |
|||
* @param member_id 用户管理member_id |
|||
* @returns |
|||
*/ |
|||
export function getUsersInfo(member_id: number) { |
|||
return request.get(`zhjw/users/${member_id}`); |
|||
} |
|||
|
|||
/** |
|||
* 添加用户管理 |
|||
* @param params |
|||
* @returns |
|||
*/ |
|||
export function addUsers(params: Record<string, any>) { |
|||
return request.post('zhjw/users', params, { showErrorMessage: true, showSuccessMessage: true }) |
|||
} |
|||
|
|||
/** |
|||
* 编辑用户管理 |
|||
* @param member_id |
|||
* @param params |
|||
* @returns |
|||
*/ |
|||
export function editUsers(params: Record<string, any>) { |
|||
return request.put(`zhjw/users/${params.member_id}`, params, { showErrorMessage: true, showSuccessMessage: true }) |
|||
} |
|||
|
|||
/** |
|||
* 删除用户管理 |
|||
* @param member_id |
|||
* @returns |
|||
*/ |
|||
export function deleteUsers(member_id: number) { |
|||
return request.delete(`zhjw/users/${member_id}`, { showErrorMessage: true, showSuccessMessage: true }) |
|||
} |
|||
|
|||
export function getWithUsersList(params: Record<string,any>){ |
|||
return request.get('zhjw/users_all', {params}) |
|||
} |
|||
|
|||
// USER_CODE_END -- zhjw_users
|
|||
@ -1,88 +0,0 @@ |
|||
{ |
|||
"memberId":"序号", |
|||
"memberNo":"会员编码", |
|||
"pid":"推广会员", |
|||
"username":"会员用户名", |
|||
"usernamePlaceholder":"请输入会员用户名", |
|||
"mobile":"手机号", |
|||
"mobilePlaceholder":"请输入手机号", |
|||
"password":"会员密码", |
|||
"nickname":"会员昵称", |
|||
"nicknamePlaceholder":"请输入会员昵称", |
|||
"headimg":"会员头像", |
|||
"memberLevel":"会员等级", |
|||
"memberLevelPlaceholder":"请输入会员等级", |
|||
"memberLabel":"会员标签", |
|||
"memberLabelPlaceholder":"请输入会员标签", |
|||
"wxOpenid":"微信用户openid", |
|||
"wxOpenidPlaceholder":"请输入微信用户openid", |
|||
"weappOpenid":"微信小程序openid", |
|||
"weappOpenidPlaceholder":"请输入微信小程序openid", |
|||
"wxUnionid":"微信unionid", |
|||
"wxUnionidPlaceholder":"请输入微信unionid", |
|||
"aliOpenid":"支付宝账户id", |
|||
"aliOpenidPlaceholder":"请输入支付宝账户id", |
|||
"douyinOpenid":"抖音小程序openid", |
|||
"douyinOpenidPlaceholder":"请输入抖音小程序openid", |
|||
"registerChannel":"注册来源", |
|||
"registerChannelPlaceholder":"请输入注册来源", |
|||
"registerType":"注册方式", |
|||
"registerTypePlaceholder":"请输入注册方式", |
|||
"loginIp":"当前登录ip", |
|||
"loginIpPlaceholder":"请输入当前登录ip", |
|||
"loginType":"当前登录的操作终端类型", |
|||
"loginTypePlaceholder":"请输入当前登录的操作终端类型", |
|||
"loginChannel":"登录渠道", |
|||
"loginChannelPlaceholder":"请输入登录渠道", |
|||
"loginCount":"登录次数", |
|||
"loginCountPlaceholder":"请输入登录次数", |
|||
"loginTime":"当前登录时间", |
|||
"loginTimePlaceholder":"请输入当前登录时间", |
|||
"lastVisitTime":"最后访问时间", |
|||
"lastVisitTimePlaceholder":"请输入最后访问时间", |
|||
"lastConsumTime":"最后消费时间", |
|||
"lastConsumTimePlaceholder":"请输入最后消费时间", |
|||
"sex":"性别", |
|||
"sexPlaceholder":"请输入性别", |
|||
"status":"用户状态", |
|||
"statusPlaceholder":"请输入用户状态", |
|||
"birthday":"出生日期", |
|||
"birthdayPlaceholder":"请输入出生日期", |
|||
"point":"可用积分", |
|||
"pointPlaceholder":"请输入可用积分", |
|||
"pointGet":"累计获取积分", |
|||
"pointGetPlaceholder":"请输入累计获取积分", |
|||
"balance":"可用余额", |
|||
"balancePlaceholder":"请输入可用余额", |
|||
"balanceGet":"累计获取余额", |
|||
"balanceGetPlaceholder":"请输入累计获取余额", |
|||
"money":"可用余额(可提现)", |
|||
"moneyPlaceholder":"请输入可用余额(可提现)", |
|||
"moneyGet":"累计获取余额(可提现)", |
|||
"moneyGetPlaceholder":"请输入累计获取余额(可提现)", |
|||
"moneyCashOuting":"提现中余额(可提现)", |
|||
"moneyCashOutingPlaceholder":"请输入提现中余额(可提现)", |
|||
"growth":"成长值", |
|||
"growthPlaceholder":"请输入成长值", |
|||
"growthGet":"累计获得成长值", |
|||
"growthGetPlaceholder":"请输入累计获得成长值", |
|||
"commission":"当前佣金", |
|||
"commissionPlaceholder":"请输入当前佣金", |
|||
"commissionGet":"佣金获取", |
|||
"commissionGetPlaceholder":"请输入佣金获取", |
|||
"commissionCashOuting":"提现中佣金", |
|||
"commissionCashOutingPlaceholder":"请输入提现中佣金", |
|||
"isMember":"是否是会员", |
|||
"isMemberPlaceholder":"请输入是否是会员", |
|||
"memberTime":"成为会员时间", |
|||
"memberTimePlaceholder":"请输入成为会员时间", |
|||
"address":"详细地址", |
|||
"createTime":"注册时间", |
|||
"createTimePlaceholder":"请输入注册时间", |
|||
"updateTime":"修改时间", |
|||
"addUsers":"添加用户管理", |
|||
"updateUsers":"编辑用户管理", |
|||
"usersDeleteTips":"确定要删除该数据吗?", |
|||
"startDate":"请选择开始时间", |
|||
"endDate":"请选择结束时间" |
|||
} |
|||
@ -1,87 +0,0 @@ |
|||
{ |
|||
"memberNo":"会员编码", |
|||
"pid":"推广会员", |
|||
"username":"会员用户名", |
|||
"mobile":"手机号", |
|||
"password":"会员密码", |
|||
"nickname":"会员昵称", |
|||
"headimg":"会员头像", |
|||
"memberLevel":"会员等级", |
|||
"memberLabel":"会员标签", |
|||
"wxOpenid":"微信用户openid", |
|||
"weappOpenid":"微信小程序openid", |
|||
"wxUnionid":"微信unionid", |
|||
"aliOpenid":"支付宝账户id", |
|||
"douyinOpenid":"抖音小程序openid", |
|||
"registerChannel":"注册来源", |
|||
"registerType":"注册方式", |
|||
"loginIp":"当前登录ip", |
|||
"loginType":"当前登录的操作终端类型", |
|||
"loginChannel":"登录渠道", |
|||
"loginCount":"登录次数", |
|||
"loginTime":"当前登录时间", |
|||
"lastVisitTime":"最后访问时间", |
|||
"lastConsumTime":"最后消费时间", |
|||
"sex":"性别", |
|||
"status":"用户状态", |
|||
"birthday":"出生日期", |
|||
"point":"可用积分", |
|||
"pointGet":"累计获取积分", |
|||
"balance":"可用余额", |
|||
"balanceGet":"累计获取余额", |
|||
"money":"可用余额(可提现)", |
|||
"moneyGet":"累计获取余额(可提现)", |
|||
"moneyCashOuting":"提现中余额(可提现)", |
|||
"growth":"成长值", |
|||
"growthGet":"累计获得成长值", |
|||
"commission":"当前佣金", |
|||
"commissionGet":"佣金获取", |
|||
"commissionCashOuting":"提现中佣金", |
|||
"isMember":"是否是会员", |
|||
"memberTime":"成为会员时间", |
|||
"address":"详细地址", |
|||
"memberNoPlaceholder":"请输入会员编码", |
|||
"pidPlaceholder":"请选择推广会员", |
|||
"usernamePlaceholder":"请输入会员用户名", |
|||
"mobilePlaceholder":"请输入手机号", |
|||
"passwordPlaceholder":"请输入会员密码", |
|||
"nicknamePlaceholder":"请输入会员昵称", |
|||
"headimgPlaceholder":"请上传会员头像", |
|||
"memberLevelPlaceholder":"请输入会员等级", |
|||
"memberLabelPlaceholder":"请输入会员标签", |
|||
"wxOpenidPlaceholder":"请输入微信用户openid", |
|||
"weappOpenidPlaceholder":"请输入微信小程序openid", |
|||
"wxUnionidPlaceholder":"请输入微信unionid", |
|||
"aliOpenidPlaceholder":"请输入支付宝账户id", |
|||
"douyinOpenidPlaceholder":"请输入抖音小程序openid", |
|||
"registerChannelPlaceholder":"请输入注册来源", |
|||
"registerTypePlaceholder":"请输入注册方式", |
|||
"loginIpPlaceholder":"请输入当前登录ip", |
|||
"loginTypePlaceholder":"请输入当前登录的操作终端类型", |
|||
"loginChannelPlaceholder":"请输入登录渠道", |
|||
"loginCountPlaceholder":"请输入登录次数", |
|||
"loginTimePlaceholder":"请输入当前登录时间", |
|||
"lastVisitTimePlaceholder":"请输入最后访问时间", |
|||
"lastConsumTimePlaceholder":"请输入最后消费时间", |
|||
"sexPlaceholder":"请选择性别", |
|||
"statusPlaceholder":"请选择用户状态", |
|||
"birthdayPlaceholder":"请选择出生日期", |
|||
"pointPlaceholder":"请输入可用积分", |
|||
"pointGetPlaceholder":"请输入累计获取积分", |
|||
"balancePlaceholder":"请输入可用余额", |
|||
"balanceGetPlaceholder":"请输入累计获取余额", |
|||
"moneyPlaceholder":"请输入可用余额(可提现)", |
|||
"moneyGetPlaceholder":"请输入累计获取余额(可提现)", |
|||
"moneyCashOutingPlaceholder":"请输入提现中余额(可提现)", |
|||
"growthPlaceholder":"请输入成长值", |
|||
"growthGetPlaceholder":"请输入累计获得成长值", |
|||
"commissionPlaceholder":"请输入当前佣金", |
|||
"commissionGetPlaceholder":"请输入佣金获取", |
|||
"commissionCashOutingPlaceholder":"请输入提现中佣金", |
|||
"isMemberPlaceholder":"请选择是否是会员", |
|||
"memberTimePlaceholder":"请选择成为会员时间", |
|||
"addressPlaceholder":"请输入详细地址", |
|||
"addUsers":"添加用户管理", |
|||
"updateUsers":"编辑用户管理", |
|||
"usersDeleteTips":"确定要删除该用户管理吗?" |
|||
} |
|||
@ -1,615 +0,0 @@ |
|||
<template> |
|||
<el-dialog v-model="showDialog" :title="formData.member_id ? t('updateUsers') : t('addUsers')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true"> |
|||
<el-form :model="formData" label-width="120px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading"> |
|||
<el-form-item :label="t('memberNo')" > |
|||
<el-input v-model="formData.member_no" clearable :placeholder="t('memberNoPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('pid')" > |
|||
<el-select class="input-width" v-model="formData.pid" clearable :placeholder="t('pidPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in pidList" |
|||
:key="index" |
|||
:label="item['mobile']" |
|||
:value="item['member_id']" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('username')" prop="username"> |
|||
<el-input v-model="formData.username" clearable :placeholder="t('usernamePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('mobile')" prop="mobile"> |
|||
<el-input v-model="formData.mobile" clearable :placeholder="t('mobilePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('password')" prop="password"> |
|||
<el-input v-model="formData.password" clearable :placeholder="t('passwordPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('nickname')" prop="nickname"> |
|||
<el-input v-model="formData.nickname" clearable :placeholder="t('nicknamePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('headimg')"> |
|||
<upload-image v-model="formData.headimg" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberLevel')" prop="member_level"> |
|||
<el-input v-model="formData.member_level" clearable :placeholder="t('memberLevelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberLabel')" prop="member_label"> |
|||
<el-input v-model="formData.member_label" clearable :placeholder="t('memberLabelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('wxOpenid')" > |
|||
<el-input v-model="formData.wx_openid" clearable :placeholder="t('wxOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('weappOpenid')" > |
|||
<el-input v-model="formData.weapp_openid" clearable :placeholder="t('weappOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('wxUnionid')" > |
|||
<el-input v-model="formData.wx_unionid" clearable :placeholder="t('wxUnionidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('aliOpenid')" > |
|||
<el-input v-model="formData.ali_openid" clearable :placeholder="t('aliOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('douyinOpenid')" > |
|||
<el-input v-model="formData.douyin_openid" clearable :placeholder="t('douyinOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('registerChannel')" > |
|||
<el-input v-model="formData.register_channel" clearable :placeholder="t('registerChannelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('registerType')" > |
|||
<el-input v-model="formData.register_type" clearable :placeholder="t('registerTypePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginIp')" > |
|||
<el-input v-model="formData.login_ip" clearable :placeholder="t('loginIpPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginType')" > |
|||
<el-input v-model="formData.login_type" clearable :placeholder="t('loginTypePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginChannel')" > |
|||
<el-input v-model="formData.login_channel" clearable :placeholder="t('loginChannelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginCount')" > |
|||
<el-input v-model="formData.login_count" clearable :placeholder="t('loginCountPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginTime')" > |
|||
<el-input v-model="formData.login_time" clearable :placeholder="t('loginTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('lastVisitTime')" > |
|||
<el-input v-model="formData.last_visit_time" clearable :placeholder="t('lastVisitTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('lastConsumTime')" > |
|||
<el-input v-model="formData.last_consum_time" clearable :placeholder="t('lastConsumTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('sex')" prop="sex"> |
|||
<el-select class="input-width" v-model="formData.sex" clearable :placeholder="t('sexPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in sexList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('status')" prop="status"> |
|||
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in statusList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('birthday')" class="input-width"> |
|||
<el-date-picker |
|||
class="flex-1 !flex" |
|||
v-model="formData.birthday" |
|||
clearable |
|||
type="datetime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:placeholder="t('birthdayPlaceholder')"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item :label="t('point')" > |
|||
<el-input v-model="formData.point" clearable :placeholder="t('pointPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('pointGet')" > |
|||
<el-input v-model="formData.point_get" clearable :placeholder="t('pointGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('balance')" > |
|||
<el-input v-model="formData.balance" clearable :placeholder="t('balancePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('balanceGet')" > |
|||
<el-input v-model="formData.balance_get" clearable :placeholder="t('balanceGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('money')" > |
|||
<el-input v-model="formData.money" clearable :placeholder="t('moneyPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('moneyGet')" > |
|||
<el-input v-model="formData.money_get" clearable :placeholder="t('moneyGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('moneyCashOuting')" > |
|||
<el-input v-model="formData.money_cash_outing" clearable :placeholder="t('moneyCashOutingPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('growth')" > |
|||
<el-input v-model="formData.growth" clearable :placeholder="t('growthPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('growthGet')" > |
|||
<el-input v-model="formData.growth_get" clearable :placeholder="t('growthGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commission')" > |
|||
<el-input v-model="formData.commission" clearable :placeholder="t('commissionPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commissionGet')" > |
|||
<el-input v-model="formData.commission_get" clearable :placeholder="t('commissionGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commissionCashOuting')" > |
|||
<el-input v-model="formData.commission_cash_outing" clearable :placeholder="t('commissionCashOutingPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('isMember')" prop="is_member"> |
|||
<el-select class="input-width" v-model="formData.is_member" clearable :placeholder="t('isMemberPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in is_memberList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberTime')" class="input-width"> |
|||
<el-date-picker |
|||
class="flex-1 !flex" |
|||
v-model="formData.member_time" |
|||
clearable |
|||
type="datetime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:placeholder="t('memberTimePlaceholder')"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item :label="t('address')" > |
|||
<el-input v-model="formData.address" clearable :placeholder="t('addressPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
|
|||
<template #footer> |
|||
<span class="dialog-footer"> |
|||
<el-button @click="showDialog = false">{{ t('cancel') }}</el-button> |
|||
<el-button type="primary" :loading="loading" @click="confirm(formRef)">{{ |
|||
t('confirm') |
|||
}}</el-button> |
|||
</span> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script lang="ts" setup> |
|||
import { ref, reactive, computed, watch } from 'vue' |
|||
import { useDictionary } from '@/app/api/dict' |
|||
import { t } from '@/lang' |
|||
import type { FormInstance } from 'element-plus' |
|||
import { addUsers, editUsers, getUsersInfo, getWithUsersList } from '@/addon/zhjw/api/users' |
|||
|
|||
let showDialog = ref(false) |
|||
const loading = ref(false) |
|||
|
|||
/** |
|||
* 表单数据 |
|||
*/ |
|||
const initialFormData = { |
|||
member_id: '', |
|||
member_no: '', |
|||
pid: '', |
|||
username: '', |
|||
mobile: '', |
|||
password: '', |
|||
nickname: '', |
|||
headimg: '', |
|||
member_level: '', |
|||
member_label: '', |
|||
wx_openid: '', |
|||
weapp_openid: '', |
|||
wx_unionid: '', |
|||
ali_openid: '', |
|||
douyin_openid: '', |
|||
register_channel: '', |
|||
register_type: '', |
|||
login_ip: '', |
|||
login_type: '', |
|||
login_channel: '', |
|||
login_count: '', |
|||
login_time: '', |
|||
last_visit_time: '', |
|||
last_consum_time: '', |
|||
sex: '', |
|||
status: '', |
|||
birthday: '', |
|||
point: '', |
|||
point_get: '', |
|||
balance: '', |
|||
balance_get: '', |
|||
money: '', |
|||
money_get: '', |
|||
money_cash_outing: '', |
|||
growth: '', |
|||
growth_get: '', |
|||
commission: '', |
|||
commission_get: '', |
|||
commission_cash_outing: '', |
|||
is_member: '', |
|||
member_time: '', |
|||
address: '', |
|||
} |
|||
const formData: Record<string, any> = reactive({ ...initialFormData }) |
|||
|
|||
const formRef = ref<FormInstance>() |
|||
|
|||
// 表单验证规则 |
|||
const formRules = computed(() => { |
|||
return { |
|||
member_no: [ |
|||
{ required: true, message: t('memberNoPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
pid: [ |
|||
{ required: true, message: t('pidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
username: [ |
|||
{ required: true, message: t('usernamePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
mobile: [ |
|||
{ required: true, message: t('mobilePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
password: [ |
|||
{ required: true, message: t('passwordPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
nickname: [ |
|||
{ required: true, message: t('nicknamePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
headimg: [ |
|||
{ required: true, message: t('headimgPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_level: [ |
|||
{ required: true, message: t('memberLevelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_label: [ |
|||
{ required: true, message: t('memberLabelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
wx_openid: [ |
|||
{ required: true, message: t('wxOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
weapp_openid: [ |
|||
{ required: true, message: t('weappOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
wx_unionid: [ |
|||
{ required: true, message: t('wxUnionidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
ali_openid: [ |
|||
{ required: true, message: t('aliOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
douyin_openid: [ |
|||
{ required: true, message: t('douyinOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
register_channel: [ |
|||
{ required: true, message: t('registerChannelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
register_type: [ |
|||
{ required: true, message: t('registerTypePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_ip: [ |
|||
{ required: true, message: t('loginIpPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_type: [ |
|||
{ required: true, message: t('loginTypePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_channel: [ |
|||
{ required: true, message: t('loginChannelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_count: [ |
|||
{ required: true, message: t('loginCountPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_time: [ |
|||
{ required: true, message: t('loginTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
last_visit_time: [ |
|||
{ required: true, message: t('lastVisitTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
last_consum_time: [ |
|||
{ required: true, message: t('lastConsumTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
sex: [ |
|||
{ required: true, message: t('sexPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
status: [ |
|||
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
birthday: [ |
|||
{ required: true, message: t('birthdayPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
point: [ |
|||
{ required: true, message: t('pointPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
point_get: [ |
|||
{ required: true, message: t('pointGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
balance: [ |
|||
{ required: true, message: t('balancePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
balance_get: [ |
|||
{ required: true, message: t('balanceGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money: [ |
|||
{ required: true, message: t('moneyPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money_get: [ |
|||
{ required: true, message: t('moneyGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money_cash_outing: [ |
|||
{ required: true, message: t('moneyCashOutingPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
growth: [ |
|||
{ required: true, message: t('growthPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
growth_get: [ |
|||
{ required: true, message: t('growthGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission: [ |
|||
{ required: true, message: t('commissionPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission_get: [ |
|||
{ required: true, message: t('commissionGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission_cash_outing: [ |
|||
{ required: true, message: t('commissionCashOutingPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
is_member: [ |
|||
{ required: true, message: t('isMemberPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_time: [ |
|||
{ required: true, message: t('memberTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
address: [ |
|||
{ required: true, message: t('addressPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
} |
|||
}) |
|||
|
|||
const emit = defineEmits(['complete']) |
|||
|
|||
/** |
|||
* 确认 |
|||
* @param formEl |
|||
*/ |
|||
const confirm = async (formEl: FormInstance | undefined) => { |
|||
if (loading.value || !formEl) return |
|||
let save = formData.member_id ? editUsers : addUsers |
|||
|
|||
await formEl.validate(async (valid) => { |
|||
if (valid) { |
|||
loading.value = true |
|||
|
|||
let data = formData |
|||
|
|||
save(data).then(res => { |
|||
loading.value = false |
|||
showDialog.value = false |
|||
emit('complete') |
|||
}).catch(err => { |
|||
loading.value = false |
|||
}) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
// 获取字典数据 |
|||
let sexList = ref([]) |
|||
const sexDictList = async () => { |
|||
sexList.value = await (await useDictionary('users_sex')).data.dictionary |
|||
} |
|||
sexDictList(); |
|||
watch(() => sexList.value, () => { formData.sex = sexList.value[0].value }) |
|||
let statusList = ref([]) |
|||
const statusDictList = async () => { |
|||
statusList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
statusDictList(); |
|||
watch(() => statusList.value, () => { formData.status = statusList.value[0].value }) |
|||
let is_memberList = ref([]) |
|||
const is_memberDictList = async () => { |
|||
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_memberDictList(); |
|||
watch(() => is_memberList.value, () => { formData.is_member = is_memberList.value[0].value }) |
|||
let is_delList = ref([]) |
|||
const is_delDictList = async () => { |
|||
is_delList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_delDictList(); |
|||
watch(() => is_delList.value, () => { formData.is_del = is_delList.value[0].value }) |
|||
|
|||
|
|||
const pidList = ref([] as any[]) |
|||
const setPidList = async () => { |
|||
pidList.value = await (await getWithUsersList({})).data |
|||
} |
|||
setPidList() |
|||
const setFormData = async (row: any = null) => { |
|||
Object.assign(formData, initialFormData) |
|||
loading.value = true |
|||
if(row){ |
|||
const data = await (await getUsersInfo(row.member_id)).data |
|||
if (data) Object.keys(formData).forEach((key: string) => { |
|||
if (data[key] != undefined) formData[key] = data[key] |
|||
}) |
|||
} |
|||
loading.value = false |
|||
} |
|||
|
|||
// 验证手机号格式 |
|||
const mobileVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/^1[3-9]\d{9}$/.test(value)) { |
|||
callback(new Error(t('generateMobile'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证身份证号 |
|||
const idCardVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)) { |
|||
callback(new Error(t('generateIdCard'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证邮箱号 |
|||
const emailVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) { |
|||
callback(new Error(t('generateEmail'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证请输入整数 |
|||
const numberVerify = (rule: any, value: any, callback: any) => { |
|||
if (!Number.isInteger(value)) { |
|||
callback(new Error(t('generateNumber'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
defineExpose({ |
|||
showDialog, |
|||
setFormData |
|||
}) |
|||
</script> |
|||
|
|||
<style lang="scss" scoped></style> |
|||
<style lang="scss"> |
|||
.diy-dialog-wrap .el-form-item__label{ |
|||
height: auto !important; |
|||
} |
|||
</style> |
|||
@ -1,481 +0,0 @@ |
|||
<template> |
|||
<div class="main-container"> |
|||
<el-card class="box-card !border-none" shadow="never"> |
|||
|
|||
<div class="flex justify-between items-center"> |
|||
<span class="text-lg">{{pageName}}</span> |
|||
<el-button type="primary" @click="addEvent"> |
|||
{{ t('addUsers') }} |
|||
</el-button> |
|||
</div> |
|||
|
|||
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never"> |
|||
<el-form :inline="true" :model="usersTable.searchParam" ref="searchFormRef"> |
|||
<el-form-item :label="t('username')" prop="username"> |
|||
<el-input v-model="usersTable.searchParam.username" :placeholder="t('usernamePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('mobile')" prop="mobile"> |
|||
<el-input v-model="usersTable.searchParam.mobile" :placeholder="t('mobilePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('nickname')" prop="nickname"> |
|||
<el-input v-model="usersTable.searchParam.nickname" :placeholder="t('nicknamePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('memberLevel')" prop="member_level"> |
|||
<el-input v-model="usersTable.searchParam.member_level" :placeholder="t('memberLevelPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('memberLabel')" prop="member_label"> |
|||
<el-input v-model="usersTable.searchParam.member_label" :placeholder="t('memberLabelPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('wxOpenid')" prop="wx_openid"> |
|||
<el-input v-model="usersTable.searchParam.wx_openid" :placeholder="t('wxOpenidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('weappOpenid')" prop="weapp_openid"> |
|||
<el-input v-model="usersTable.searchParam.weapp_openid" :placeholder="t('weappOpenidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('wxUnionid')" prop="wx_unionid"> |
|||
<el-input v-model="usersTable.searchParam.wx_unionid" :placeholder="t('wxUnionidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('aliOpenid')" prop="ali_openid"> |
|||
<el-input v-model="usersTable.searchParam.ali_openid" :placeholder="t('aliOpenidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('douyinOpenid')" prop="douyin_openid"> |
|||
<el-input v-model="usersTable.searchParam.douyin_openid" :placeholder="t('douyinOpenidPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('registerChannel')" prop="register_channel"> |
|||
<el-input v-model="usersTable.searchParam.register_channel" :placeholder="t('registerChannelPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('registerType')" prop="register_type"> |
|||
<el-input v-model="usersTable.searchParam.register_type" :placeholder="t('registerTypePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginIp')" prop="login_ip"> |
|||
<el-input v-model="usersTable.searchParam.login_ip" :placeholder="t('loginIpPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginType')" prop="login_type"> |
|||
<el-input v-model="usersTable.searchParam.login_type" :placeholder="t('loginTypePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginChannel')" prop="login_channel"> |
|||
<el-input v-model="usersTable.searchParam.login_channel" :placeholder="t('loginChannelPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginCount')" prop="login_count"> |
|||
<el-input v-model="usersTable.searchParam.login_count" :placeholder="t('loginCountPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('loginTime')" prop="login_time"> |
|||
<el-input v-model="usersTable.searchParam.login_time" :placeholder="t('loginTimePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('lastVisitTime')" prop="last_visit_time"> |
|||
<el-input v-model="usersTable.searchParam.last_visit_time" :placeholder="t('lastVisitTimePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('lastConsumTime')" prop="last_consum_time"> |
|||
<el-input v-model="usersTable.searchParam.last_consum_time" :placeholder="t('lastConsumTimePlaceholder')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('sex')" prop="sex"> |
|||
<el-select class="w-[280px]" v-model="usersTable.searchParam.sex" clearable :placeholder="t('sexPlaceholder')"> |
|||
<el-option label="全部" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in sexList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
|
|||
<el-form-item :label="t('status')" prop="status"> |
|||
<el-select class="w-[280px]" v-model="usersTable.searchParam.status" clearable :placeholder="t('statusPlaceholder')"> |
|||
<el-option label="全部" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in statusList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('birthday')" prop="birthday"> |
|||
<el-date-picker v-model="usersTable.searchParam.birthday" type="datetimerange" format="YYYY-MM-DD hh:mm:ss" |
|||
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('point')" prop="point"> |
|||
<el-input v-model="usersTable.searchParam.point" :placeholder="t('pointPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('pointGet')" prop="point_get"> |
|||
<el-input v-model="usersTable.searchParam.point_get" :placeholder="t('pointGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('balance')" prop="balance"> |
|||
<el-input v-model="usersTable.searchParam.balance" :placeholder="t('balancePlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('balanceGet')" prop="balance_get"> |
|||
<el-input v-model="usersTable.searchParam.balance_get" :placeholder="t('balanceGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('money')" prop="money"> |
|||
<el-input v-model="usersTable.searchParam.money" :placeholder="t('moneyPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('moneyGet')" prop="money_get"> |
|||
<el-input v-model="usersTable.searchParam.money_get" :placeholder="t('moneyGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('moneyCashOuting')" prop="money_cash_outing"> |
|||
<el-input v-model="usersTable.searchParam.money_cash_outing" :placeholder="t('moneyCashOutingPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('growth')" prop="growth"> |
|||
<el-input v-model="usersTable.searchParam.growth" :placeholder="t('growthPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('growthGet')" prop="growth_get"> |
|||
<el-input v-model="usersTable.searchParam.growth_get" :placeholder="t('growthGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('commission')" prop="commission"> |
|||
<el-input v-model="usersTable.searchParam.commission" :placeholder="t('commissionPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('commissionGet')" prop="commission_get"> |
|||
<el-input v-model="usersTable.searchParam.commission_get" :placeholder="t('commissionGetPlaceholder')" /> |
|||
</el-form-item> |
|||
<el-form-item :label="t('commissionCashOuting')" prop="commission_cash_outing"> |
|||
<el-input v-model="usersTable.searchParam.commission_cash_outing" :placeholder="t('commissionCashOutingPlaceholder')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('isMember')" prop="is_member"> |
|||
<el-select class="w-[280px]" v-model="usersTable.searchParam.is_member" clearable :placeholder="t('isMemberPlaceholder')"> |
|||
<el-option label="全部" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in is_memberList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberTime')" prop="member_time"> |
|||
<el-date-picker v-model="usersTable.searchParam.member_time" type="datetimerange" format="YYYY-MM-DD hh:mm:ss" |
|||
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('createTime')" prop="create_time"> |
|||
<el-date-picker v-model="usersTable.searchParam.create_time" type="datetimerange" format="YYYY-MM-DD hh:mm:ss" |
|||
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item> |
|||
<el-button type="primary" @click="loadUsersList()">{{ t('search') }}</el-button> |
|||
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-card> |
|||
|
|||
<div class="mt-[10px]"> |
|||
<el-table :data="usersTable.data" size="large" v-loading="usersTable.loading"> |
|||
<template #empty> |
|||
<span>{{ !usersTable.loading ? t('emptyData') : '' }}</span> |
|||
</template> |
|||
<el-table-column prop="member_id" :label="t('memberId')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="member_no" :label="t('memberNo')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="pid_name" :label="t('pid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="username" :label="t('username')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="mobile" :label="t('mobile')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="password" :label="t('password')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="nickname" :label="t('nickname')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column :label="t('headimg')" width="100" align="left"> |
|||
<template #default="{ row }"> |
|||
<el-avatar v-if="row.headimg" :src="img(row.headimg)" /> |
|||
<el-avatar v-else icon="UserFilled" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="member_level" :label="t('memberLevel')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="member_label" :label="t('memberLabel')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="wx_openid" :label="t('wxOpenid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="weapp_openid" :label="t('weappOpenid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="wx_unionid" :label="t('wxUnionid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="ali_openid" :label="t('aliOpenid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="douyin_openid" :label="t('douyinOpenid')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="register_channel" :label="t('registerChannel')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="register_type" :label="t('registerType')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_ip" :label="t('loginIp')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_type" :label="t('loginType')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_channel" :label="t('loginChannel')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_count" :label="t('loginCount')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="login_time" :label="t('loginTime')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="last_visit_time" :label="t('lastVisitTime')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="last_consum_time" :label="t('lastConsumTime')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column :label="t('sex')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
<div v-for="(item, index) in sexList"> |
|||
<div v-if="item.value == row.sex">{{ item.name }}</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="t('status')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
<div v-for="(item, index) in statusList"> |
|||
<div v-if="item.value == row.status">{{ item.name }}</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="birthday" :label="t('birthday')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="point" :label="t('point')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="point_get" :label="t('pointGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="balance" :label="t('balance')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="balance_get" :label="t('balanceGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="money" :label="t('money')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="money_get" :label="t('moneyGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="money_cash_outing" :label="t('moneyCashOuting')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="growth" :label="t('growth')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="growth_get" :label="t('growthGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="commission" :label="t('commission')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="commission_get" :label="t('commissionGet')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column prop="commission_cash_outing" :label="t('commissionCashOuting')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column :label="t('isMember')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
<div v-for="(item, index) in is_memberList"> |
|||
<div v-if="item.value == row.is_member">{{ item.name }}</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="t('memberTime')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
{{ row.member_time || '' }} |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="address" :label="t('address')" min-width="120" :show-overflow-tooltip="true"/> |
|||
|
|||
<el-table-column :label="t('createTime')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
{{ row.create_time || '' }} |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="t('updateTime')" min-width="180" align="center" :show-overflow-tooltip="true"> |
|||
<template #default="{ row }"> |
|||
{{ row.update_time || '' }} |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="t('operation')" fixed="right" min-width="120"> |
|||
<template #default="{ row }"> |
|||
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> |
|||
<el-button type="primary" link @click="deleteEvent(row.member_id)">{{ t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
</el-table> |
|||
<div class="mt-[16px] flex justify-end"> |
|||
<el-pagination v-model:current-page="usersTable.page" v-model:page-size="usersTable.limit" |
|||
layout="total, sizes, prev, pager, next, jumper" :total="usersTable.total" |
|||
@size-change="loadUsersList()" @current-change="loadUsersList" /> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
</el-card> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts" setup> |
|||
import { reactive, ref, watch } from 'vue' |
|||
import { t } from '@/lang' |
|||
import { useDictionary } from '@/app/api/dict' |
|||
import { getUsersList, deleteUsers, getWithUsersList } from '@/addon/zhjw/api/users' |
|||
import { img } from '@/utils/common' |
|||
import { ElMessageBox,FormInstance } from 'element-plus' |
|||
import { useRouter } from 'vue-router' |
|||
import { useRoute } from 'vue-router' |
|||
const route = useRoute() |
|||
const pageName = route.meta.title; |
|||
|
|||
let usersTable = reactive({ |
|||
page: 1, |
|||
limit: 10, |
|||
total: 0, |
|||
loading: true, |
|||
data: [], |
|||
searchParam:{ |
|||
"username":"", |
|||
"mobile":"", |
|||
"nickname":"", |
|||
"member_level":"", |
|||
"member_label":"", |
|||
"wx_openid":"", |
|||
"weapp_openid":"", |
|||
"wx_unionid":"", |
|||
"ali_openid":"", |
|||
"douyin_openid":"", |
|||
"register_channel":"", |
|||
"register_type":"", |
|||
"login_ip":"", |
|||
"login_type":"", |
|||
"login_channel":"", |
|||
"login_count":"", |
|||
"login_time":"", |
|||
"last_visit_time":"", |
|||
"last_consum_time":"", |
|||
"sex":"", |
|||
"status":"", |
|||
"birthday":[], |
|||
"point":"", |
|||
"point_get":"", |
|||
"balance":"", |
|||
"balance_get":"", |
|||
"money":"", |
|||
"money_get":"", |
|||
"money_cash_outing":"", |
|||
"growth":"", |
|||
"growth_get":"", |
|||
"commission":"", |
|||
"commission_get":"", |
|||
"commission_cash_outing":"", |
|||
"is_member":"", |
|||
"member_time":[], |
|||
"create_time":"" |
|||
} |
|||
}) |
|||
|
|||
const searchFormRef = ref<FormInstance>() |
|||
|
|||
// 选中数据 |
|||
const selectData = ref<any[]>([]) |
|||
|
|||
// 字典数据 |
|||
const sexList = ref([] as any[]) |
|||
const sexDictList = async () => { |
|||
sexList.value = await (await useDictionary('users_sex')).data.dictionary |
|||
} |
|||
sexDictList(); |
|||
const statusList = ref([] as any[]) |
|||
const statusDictList = async () => { |
|||
statusList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
statusDictList(); |
|||
const is_memberList = ref([] as any[]) |
|||
const is_memberDictList = async () => { |
|||
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_memberDictList(); |
|||
const is_delList = ref([] as any[]) |
|||
const is_delDictList = async () => { |
|||
is_delList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_delDictList(); |
|||
|
|||
/** |
|||
* 获取用户管理列表 |
|||
*/ |
|||
const loadUsersList = (page: number = 1) => { |
|||
usersTable.loading = true |
|||
usersTable.page = page |
|||
|
|||
getUsersList({ |
|||
page: usersTable.page, |
|||
limit: usersTable.limit, |
|||
...usersTable.searchParam |
|||
}).then(res => { |
|||
usersTable.loading = false |
|||
usersTable.data = res.data.data |
|||
usersTable.total = res.data.total |
|||
}).catch(() => { |
|||
usersTable.loading = false |
|||
}) |
|||
} |
|||
loadUsersList() |
|||
|
|||
const router = useRouter() |
|||
|
|||
/** |
|||
* 添加用户管理 |
|||
*/ |
|||
const addEvent = () => { |
|||
router.push('/users/users_edit') |
|||
} |
|||
|
|||
/** |
|||
* 编辑用户管理 |
|||
* @param data |
|||
*/ |
|||
const editEvent = (data: any) => { |
|||
router.push('/users/users_edit?id='+data.member_id) |
|||
} |
|||
|
|||
/** |
|||
* 删除用户管理 |
|||
*/ |
|||
const deleteEvent = (id: number) => { |
|||
ElMessageBox.confirm(t('usersDeleteTips'), t('warning'), |
|||
{ |
|||
confirmButtonText: t('confirm'), |
|||
cancelButtonText: t('cancel'), |
|||
type: 'warning', |
|||
} |
|||
).then(() => { |
|||
deleteUsers(id).then(() => { |
|||
loadUsersList() |
|||
}).catch(() => { |
|||
}) |
|||
}) |
|||
} |
|||
|
|||
|
|||
const pidList = ref([]) |
|||
const setPidList = async () => { |
|||
pidList.value = await (await getWithUsersList({})).data |
|||
} |
|||
setPidList() |
|||
|
|||
const resetForm = (formEl: FormInstance | undefined) => { |
|||
if (!formEl) return |
|||
formEl.resetFields() |
|||
loadUsersList() |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
/* 多行超出隐藏 */ |
|||
.multi-hidden { |
|||
word-break: break-all; |
|||
text-overflow: ellipsis; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
</style> |
|||
@ -1,612 +0,0 @@ |
|||
<template> |
|||
<div class="main-container"> |
|||
<div class="detail-head"> |
|||
<div class="left" @click="back()"> |
|||
<span class="iconfont iconxiangzuojiantou !text-xs"></span> |
|||
<span class="ml-[1px]">{{t('returnToPreviousPage')}}</span> |
|||
</div> |
|||
<span class="adorn">|</span> |
|||
<span class="right">{{ pageName }}</span> |
|||
</div> |
|||
<el-card class="box-card !border-none" shadow="never"> |
|||
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form"> |
|||
<el-form-item :label="t('memberNo')" > |
|||
<el-input v-model="formData.member_no" clearable :placeholder="t('memberNoPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('pid')" > |
|||
<el-select class="input-width" v-model="formData.pid" clearable :placeholder="t('pidPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in pidList" |
|||
:key="index" |
|||
:label="item['mobile']" |
|||
:value="item['member_id']" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('username')" prop="username"> |
|||
<el-input v-model="formData.username" clearable :placeholder="t('usernamePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('mobile')" prop="mobile"> |
|||
<el-input v-model="formData.mobile" clearable :placeholder="t('mobilePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('password')" prop="password"> |
|||
<el-input v-model="formData.password" clearable :placeholder="t('passwordPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('nickname')" prop="nickname"> |
|||
<el-input v-model="formData.nickname" clearable :placeholder="t('nicknamePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('headimg')"> |
|||
<upload-image v-model="formData.headimg" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberLevel')" > |
|||
<el-input v-model="formData.member_level" clearable :placeholder="t('memberLevelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberLabel')" > |
|||
<el-input v-model="formData.member_label" clearable :placeholder="t('memberLabelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('wxOpenid')" > |
|||
<el-input v-model="formData.wx_openid" clearable :placeholder="t('wxOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('weappOpenid')" > |
|||
<el-input v-model="formData.weapp_openid" clearable :placeholder="t('weappOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('wxUnionid')" > |
|||
<el-input v-model="formData.wx_unionid" clearable :placeholder="t('wxUnionidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('aliOpenid')" > |
|||
<el-input v-model="formData.ali_openid" clearable :placeholder="t('aliOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('douyinOpenid')" > |
|||
<el-input v-model="formData.douyin_openid" clearable :placeholder="t('douyinOpenidPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('registerChannel')" > |
|||
<el-input v-model="formData.register_channel" clearable :placeholder="t('registerChannelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('registerType')" > |
|||
<el-input v-model="formData.register_type" clearable :placeholder="t('registerTypePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginIp')" > |
|||
<el-input v-model="formData.login_ip" clearable :placeholder="t('loginIpPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginType')" > |
|||
<el-input v-model="formData.login_type" clearable :placeholder="t('loginTypePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginChannel')" > |
|||
<el-input v-model="formData.login_channel" clearable :placeholder="t('loginChannelPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginCount')" > |
|||
<el-input v-model="formData.login_count" clearable :placeholder="t('loginCountPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('loginTime')" > |
|||
<el-input v-model="formData.login_time" clearable :placeholder="t('loginTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('lastVisitTime')" > |
|||
<el-input v-model="formData.last_visit_time" clearable :placeholder="t('lastVisitTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('lastConsumTime')" > |
|||
<el-input v-model="formData.last_consum_time" clearable :placeholder="t('lastConsumTimePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('sex')" prop="sex"> |
|||
<el-select class="input-width" v-model="formData.sex" clearable :placeholder="t('sexPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in sexList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('status')" prop="status"> |
|||
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in statusList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('birthday')" class="input-width"> |
|||
<el-date-picker |
|||
class="flex-1 !flex" |
|||
v-model="formData.birthday" |
|||
clearable |
|||
type="datetime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:placeholder="t('birthdayPlaceholder')"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item :label="t('point')" > |
|||
<el-input v-model="formData.point" clearable :placeholder="t('pointPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('pointGet')" > |
|||
<el-input v-model="formData.point_get" clearable :placeholder="t('pointGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('balance')" > |
|||
<el-input v-model="formData.balance" clearable :placeholder="t('balancePlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('balanceGet')" > |
|||
<el-input v-model="formData.balance_get" clearable :placeholder="t('balanceGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('money')" > |
|||
<el-input v-model="formData.money" clearable :placeholder="t('moneyPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('moneyGet')" > |
|||
<el-input v-model="formData.money_get" clearable :placeholder="t('moneyGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('moneyCashOuting')" > |
|||
<el-input v-model="formData.money_cash_outing" clearable :placeholder="t('moneyCashOutingPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('growth')" > |
|||
<el-input v-model="formData.growth" clearable :placeholder="t('growthPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('growthGet')" > |
|||
<el-input v-model="formData.growth_get" clearable :placeholder="t('growthGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commission')" > |
|||
<el-input v-model="formData.commission" clearable :placeholder="t('commissionPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commissionGet')" > |
|||
<el-input v-model="formData.commission_get" clearable :placeholder="t('commissionGetPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('commissionCashOuting')" > |
|||
<el-input v-model="formData.commission_cash_outing" clearable :placeholder="t('commissionCashOutingPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('isMember')" prop="is_member"> |
|||
<el-select class="input-width" v-model="formData.is_member" clearable :placeholder="t('isMemberPlaceholder')"> |
|||
<el-option label="请选择" value=""></el-option> |
|||
<el-option |
|||
v-for="(item, index) in is_memberList" |
|||
:key="index" |
|||
:label="item.name" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item :label="t('memberTime')" class="input-width"> |
|||
<el-date-picker |
|||
class="flex-1 !flex" |
|||
v-model="formData.member_time" |
|||
clearable |
|||
type="datetime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:placeholder="t('memberTimePlaceholder')"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item :label="t('address')" > |
|||
<el-input v-model="formData.address" clearable :placeholder="t('addressPlaceholder')" class="input-width" /> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
</el-card> |
|||
<div class="fixed-footer-wrap"> |
|||
<div class="fixed-footer"> |
|||
<el-button type="primary" @click="onSave(formRef)">{{ t('save') }}</el-button> |
|||
<el-button @click="back()">{{ t('cancel') }}</el-button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts" setup> |
|||
import { ref, reactive, computed, watch } from 'vue' |
|||
import { t } from '@/lang' |
|||
import { useDictionary } from '@/app/api/dict' |
|||
import type { FormInstance } from 'element-plus' |
|||
import { getUsersInfo,addUsers,editUsers, getWithUsersList } from '@/addon/zhjw/api/users'; |
|||
import { useRoute } from 'vue-router' |
|||
|
|||
const route = useRoute() |
|||
const id:number = parseInt(route.query.id); |
|||
const loading = ref(false) |
|||
const pageName = route.meta.title |
|||
|
|||
|
|||
|
|||
/** |
|||
* 表单数据 |
|||
*/ |
|||
const initialFormData = { |
|||
member_id: 0, |
|||
member_no: '', |
|||
pid: '', |
|||
username: '', |
|||
mobile: '', |
|||
password: '', |
|||
nickname: '', |
|||
headimg: '', |
|||
member_level: 0, |
|||
member_label: '', |
|||
wx_openid: '', |
|||
weapp_openid: '', |
|||
wx_unionid: '', |
|||
ali_openid: '', |
|||
douyin_openid: '', |
|||
register_channel: '', |
|||
register_type: '', |
|||
login_ip: '', |
|||
login_type: '', |
|||
login_channel: '', |
|||
login_count: 0, |
|||
login_time: 0, |
|||
last_visit_time: 0, |
|||
last_consum_time: 0, |
|||
sex: 0, |
|||
status: 0, |
|||
birthday: '', |
|||
point: 0, |
|||
point_get: 0, |
|||
balance: '', |
|||
balance_get: '', |
|||
money: '', |
|||
money_get: '', |
|||
money_cash_outing: '', |
|||
growth: 0, |
|||
growth_get: 0, |
|||
commission: '', |
|||
commission_get: '', |
|||
commission_cash_outing: '', |
|||
is_member: 0, |
|||
member_time: 0, |
|||
address: '', |
|||
} |
|||
const formData: Record<string, any> = reactive({ ...initialFormData }) |
|||
|
|||
const setFormData = async (id:number = 0) => { |
|||
Object.assign(formData, initialFormData) |
|||
const data = await (await getUsersInfo(id)).data |
|||
Object.keys(formData).forEach((key: string) => { |
|||
if (data[key] != undefined) formData[key] = data[key] |
|||
}) |
|||
} |
|||
if(id) setFormData(id); |
|||
|
|||
const formRef = ref<FormInstance>() |
|||
// 选中数据 |
|||
const selectData = ref<any[]>([]) |
|||
|
|||
// 字典数据 |
|||
let sexList = ref([]) |
|||
const sexDictList = async () => { |
|||
sexList.value = await (await useDictionary('users_sex')).data.dictionary |
|||
} |
|||
sexDictList(); |
|||
watch(() => sexList.value, () => { formData.sex = sexList.value[0].value }) |
|||
let statusList = ref([]) |
|||
const statusDictList = async () => { |
|||
statusList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
statusDictList(); |
|||
watch(() => statusList.value, () => { formData.status = statusList.value[0].value }) |
|||
let is_memberList = ref([]) |
|||
const is_memberDictList = async () => { |
|||
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_memberDictList(); |
|||
watch(() => is_memberList.value, () => { formData.is_member = is_memberList.value[0].value }) |
|||
let is_delList = ref([]) |
|||
const is_delDictList = async () => { |
|||
is_delList.value = await (await useDictionary('is_radio')).data.dictionary |
|||
} |
|||
is_delDictList(); |
|||
watch(() => is_delList.value, () => { formData.is_del = is_delList.value[0].value }) |
|||
|
|||
|
|||
const pidList = ref([] as any[]) |
|||
const setPidList = async () => { |
|||
pidList.value = await (await getWithUsersList({})).data |
|||
} |
|||
setPidList() |
|||
// 表单验证规则 |
|||
const formRules = computed(() => { |
|||
return { |
|||
member_no: [ |
|||
{ required: true, message: t('memberNoPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
pid: [ |
|||
{ required: true, message: t('pidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
username: [ |
|||
{ required: true, message: t('usernamePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
mobile: [ |
|||
{ required: true, message: t('mobilePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
password: [ |
|||
{ required: true, message: t('passwordPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
nickname: [ |
|||
{ required: true, message: t('nicknamePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
headimg: [ |
|||
{ required: true, message: t('headimgPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_level: [ |
|||
{ required: true, message: t('memberLevelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_label: [ |
|||
{ required: true, message: t('memberLabelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
wx_openid: [ |
|||
{ required: true, message: t('wxOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
weapp_openid: [ |
|||
{ required: true, message: t('weappOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
wx_unionid: [ |
|||
{ required: true, message: t('wxUnionidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
ali_openid: [ |
|||
{ required: true, message: t('aliOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
douyin_openid: [ |
|||
{ required: true, message: t('douyinOpenidPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
register_channel: [ |
|||
{ required: true, message: t('registerChannelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
register_type: [ |
|||
{ required: true, message: t('registerTypePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_ip: [ |
|||
{ required: true, message: t('loginIpPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_type: [ |
|||
{ required: true, message: t('loginTypePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_channel: [ |
|||
{ required: true, message: t('loginChannelPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_count: [ |
|||
{ required: true, message: t('loginCountPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
login_time: [ |
|||
{ required: true, message: t('loginTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
last_visit_time: [ |
|||
{ required: true, message: t('lastVisitTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
last_consum_time: [ |
|||
{ required: true, message: t('lastConsumTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
sex: [ |
|||
{ required: true, message: t('sexPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
status: [ |
|||
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
birthday: [ |
|||
{ required: true, message: t('birthdayPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
point: [ |
|||
{ required: true, message: t('pointPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
point_get: [ |
|||
{ required: true, message: t('pointGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
balance: [ |
|||
{ required: true, message: t('balancePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
balance_get: [ |
|||
{ required: true, message: t('balanceGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money: [ |
|||
{ required: true, message: t('moneyPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money_get: [ |
|||
{ required: true, message: t('moneyGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
money_cash_outing: [ |
|||
{ required: true, message: t('moneyCashOutingPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
growth: [ |
|||
{ required: true, message: t('growthPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
growth_get: [ |
|||
{ required: true, message: t('growthGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission: [ |
|||
{ required: true, message: t('commissionPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission_get: [ |
|||
{ required: true, message: t('commissionGetPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
commission_cash_outing: [ |
|||
{ required: true, message: t('commissionCashOutingPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
is_member: [ |
|||
{ required: true, message: t('isMemberPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
member_time: [ |
|||
{ required: true, message: t('memberTimePlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
address: [ |
|||
{ required: true, message: t('addressPlaceholder'), trigger: 'blur' }, |
|||
|
|||
] |
|||
, |
|||
} |
|||
}) |
|||
|
|||
const onSave = async (formEl: FormInstance | undefined) => { |
|||
if (loading.value || !formEl) return |
|||
await formEl.validate(async (valid) => { |
|||
if (valid) { |
|||
loading.value = true |
|||
let data = formData |
|||
|
|||
const save = id ? editUsers : addUsers |
|||
save(data).then(res => { |
|||
loading.value = false |
|||
history.back() |
|||
}).catch(err => { |
|||
loading.value = false |
|||
}) |
|||
|
|||
} |
|||
}) |
|||
} |
|||
|
|||
// 验证手机号格式 |
|||
const mobileVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/^1[3-9]\d{9}$/.test(value)) { |
|||
callback(new Error(t('generateMobile'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证身份证号 |
|||
const idCardVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)) { |
|||
callback(new Error(t('generateIdCard'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
// 验证邮箱号 |
|||
const emailVerify = (rule: any, value: any, callback: any) => { |
|||
if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) { |
|||
callback(new Error(t('generateEmail'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
|
|||
|
|||
// 验证请输入整数 |
|||
const numberVerify = (rule: any, value: any, callback: any) => { |
|||
if (!Number.isInteger(value)) { |
|||
callback(new Error(t('generateNumber'))) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
const back = () => { |
|||
history.back() |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped></style> |
|||
@ -1,205 +0,0 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | Niucloud-admin 企业快速开发的多应用管理平台 |
|||
// +---------------------------------------------------------------------- |
|||
// | 官方网址:https://www.niucloud.com |
|||
// +---------------------------------------------------------------------- |
|||
// | niucloud团队 版权所有 开源版本可自由商用 |
|||
// +---------------------------------------------------------------------- |
|||
// | Author: Niucloud Team |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
namespace addon\zhjw\app\adminapi\controller\users; |
|||
|
|||
use core\base\BaseAdminController; |
|||
use addon\zhjw\app\service\admin\users\UsersService; |
|||
|
|||
|
|||
/** |
|||
* 用户管理控制器 |
|||
* Class Users |
|||
* @package addon\zhjw\app\adminapi\controller\users |
|||
*/ |
|||
class Users extends BaseAdminController |
|||
{ |
|||
/** |
|||
* 获取用户管理列表 |
|||
* @return \think\Response |
|||
*/ |
|||
public function lists(){ |
|||
$data = $this->request->params([ |
|||
["username",""], |
|||
["mobile",""], |
|||
["nickname",""], |
|||
["member_level",""], |
|||
["member_label",""], |
|||
["wx_openid",""], |
|||
["weapp_openid",""], |
|||
["wx_unionid",""], |
|||
["ali_openid",""], |
|||
["douyin_openid",""], |
|||
["register_channel",""], |
|||
["register_type",""], |
|||
["login_ip",""], |
|||
["login_type",""], |
|||
["login_channel",""], |
|||
["login_count",""], |
|||
["login_time",""], |
|||
["last_visit_time",""], |
|||
["last_consum_time",""], |
|||
["sex",""], |
|||
["status",""], |
|||
["birthday",["",""]], |
|||
["point",""], |
|||
["point_get",""], |
|||
["balance",""], |
|||
["balance_get",""], |
|||
["money",""], |
|||
["money_get",""], |
|||
["money_cash_outing",""], |
|||
["growth",""], |
|||
["growth_get",""], |
|||
["commission",""], |
|||
["commission_get",""], |
|||
["commission_cash_outing",""], |
|||
["is_member",""], |
|||
["member_time",["",""]], |
|||
["create_time",""] |
|||
]); |
|||
return success((new UsersService())->getPage($data)); |
|||
} |
|||
|
|||
/** |
|||
* 用户管理详情 |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function info(int $id){ |
|||
return success((new UsersService())->getInfo($id)); |
|||
} |
|||
|
|||
/** |
|||
* 添加用户管理 |
|||
* @return \think\Response |
|||
*/ |
|||
public function add(){ |
|||
$data = $this->request->params([ |
|||
["member_no",""], |
|||
["pid",0], |
|||
["username",""], |
|||
["mobile",""], |
|||
["password",""], |
|||
["nickname",""], |
|||
["headimg",""], |
|||
["member_level",0], |
|||
["member_label",""], |
|||
["wx_openid",""], |
|||
["weapp_openid",""], |
|||
["wx_unionid",""], |
|||
["ali_openid",""], |
|||
["douyin_openid",""], |
|||
["register_channel",""], |
|||
["register_type",""], |
|||
["login_ip",""], |
|||
["login_type",""], |
|||
["login_channel",""], |
|||
["login_count",0], |
|||
["login_time",0], |
|||
["last_visit_time",0], |
|||
["last_consum_time",0], |
|||
["sex",0], |
|||
["status",0], |
|||
["birthday",""], |
|||
["point",0], |
|||
["point_get",0], |
|||
["balance",0.00], |
|||
["balance_get",0.00], |
|||
["money",0.00], |
|||
["money_get",0.00], |
|||
["money_cash_outing",0.00], |
|||
["growth",0], |
|||
["growth_get",0], |
|||
["commission",0.00], |
|||
["commission_get",0.00], |
|||
["commission_cash_outing",0.00], |
|||
["is_member",0], |
|||
["member_time",0], |
|||
["address",""], |
|||
|
|||
]); |
|||
$this->validate($data, 'addon\zhjw\app\validate\users\Users.add'); |
|||
$id = (new UsersService())->add($data); |
|||
return success('ADD_SUCCESS', ['id' => $id]); |
|||
} |
|||
|
|||
/** |
|||
* 用户管理编辑 |
|||
* @param $id 用户管理id |
|||
* @return \think\Response |
|||
*/ |
|||
public function edit(int $id){ |
|||
$data = $this->request->params([ |
|||
["member_no",""], |
|||
["pid",0], |
|||
["username",""], |
|||
["mobile",""], |
|||
["password",""], |
|||
["nickname",""], |
|||
["headimg",""], |
|||
["member_level",0], |
|||
["member_label",""], |
|||
["wx_openid",""], |
|||
["weapp_openid",""], |
|||
["wx_unionid",""], |
|||
["ali_openid",""], |
|||
["douyin_openid",""], |
|||
["register_channel",""], |
|||
["register_type",""], |
|||
["login_ip",""], |
|||
["login_type",""], |
|||
["login_channel",""], |
|||
["login_count",0], |
|||
["login_time",0], |
|||
["last_visit_time",0], |
|||
["last_consum_time",0], |
|||
["sex",0], |
|||
["status",0], |
|||
["birthday",""], |
|||
["point",0], |
|||
["point_get",0], |
|||
["balance",0.00], |
|||
["balance_get",0.00], |
|||
["money",0.00], |
|||
["money_get",0.00], |
|||
["money_cash_outing",0.00], |
|||
["growth",0], |
|||
["growth_get",0], |
|||
["commission",0.00], |
|||
["commission_get",0.00], |
|||
["commission_cash_outing",0.00], |
|||
["is_member",0], |
|||
["member_time",0], |
|||
["address",""], |
|||
|
|||
]); |
|||
$this->validate($data, 'addon\zhjw\app\validate\users\Users.edit'); |
|||
(new UsersService())->edit($id, $data); |
|||
return success('EDIT_SUCCESS'); |
|||
} |
|||
|
|||
/** |
|||
* 用户管理删除 |
|||
* @param $id 用户管理id |
|||
* @return \think\Response |
|||
*/ |
|||
public function del(int $id){ |
|||
(new UsersService())->del($id); |
|||
return success('DELETE_SUCCESS'); |
|||
} |
|||
|
|||
|
|||
public function getUsersAll(){ |
|||
return success(( new UsersService())->getUsersAll()); |
|||
} |
|||
|
|||
} |
|||
@ -1,520 +0,0 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | Niucloud-admin 企业快速开发的多应用管理平台 |
|||
// +---------------------------------------------------------------------- |
|||
// | 官方网址:https://www.niucloud.com |
|||
// +---------------------------------------------------------------------- |
|||
// | niucloud团队 版权所有 开源版本可自由商用 |
|||
// +---------------------------------------------------------------------- |
|||
// | Author: Niucloud Team |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
namespace addon\zhjw\app\model\users; |
|||
|
|||
use core\base\BaseModel; |
|||
use think\model\concern\SoftDelete; |
|||
use think\model\relation\HasMany; |
|||
use think\model\relation\HasOne; |
|||
|
|||
use addon\zhjw\app\model\users\Users; |
|||
|
|||
/** |
|||
* 用户管理模型 |
|||
* Class Users |
|||
* @package addon\zhjw\app\model\users |
|||
*/ |
|||
class Users extends BaseModel |
|||
{ |
|||
|
|||
use SoftDelete; |
|||
|
|||
/** |
|||
* 数据表主键 |
|||
* @var string |
|||
*/ |
|||
protected $pk = 'member_id'; |
|||
|
|||
/** |
|||
* 模型名称 |
|||
* @var string |
|||
*/ |
|||
protected $name = 'zhjw_users'; |
|||
|
|||
/** |
|||
* 定义软删除标记字段. |
|||
* @var string |
|||
*/ |
|||
protected $deleteTime = 'is_del'; |
|||
|
|||
/** |
|||
* 定义软删除字段的默认值. |
|||
* @var int |
|||
*/ |
|||
protected $defaultSoftDelete = 0; |
|||
|
|||
/** |
|||
* 搜索器:用户管理会员用户名 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchUsernameAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("username", "like", "%".$value."%"); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理手机号 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchMobileAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("mobile", "like", "%".$value."%"); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理会员昵称 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchNicknameAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("nickname", "like", "%".$value."%"); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理会员等级 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchMemberLevelAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("member_level", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理会员标签 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchMemberLabelAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("member_label", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理微信用户openid |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchWxOpenidAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("wx_openid", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理微信小程序openid |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchWeappOpenidAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("weapp_openid", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理微信unionid |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchWxUnionidAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("wx_unionid", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理支付宝账户id |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchAliOpenidAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("ali_openid", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理抖音小程序openid |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchDouyinOpenidAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("douyin_openid", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理注册来源 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchRegisterChannelAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("register_channel", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理注册方式 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchRegisterTypeAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("register_type", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理当前登录ip |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchLoginIpAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("login_ip", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理当前登录的操作终端类型 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchLoginTypeAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("login_type", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理登录渠道 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchLoginChannelAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("login_channel", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理登录次数 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchLoginCountAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("login_count", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理当前登录时间 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchLoginTimeAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("login_time", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理最后访问时间 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchLastVisitTimeAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("last_visit_time", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理最后消费时间 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchLastConsumTimeAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("last_consum_time", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理性别 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchSexAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("sex", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理用户状态 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchStatusAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("status", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理出生日期 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchBirthdayAttr($query, $value, $data) |
|||
{ |
|||
$start = empty($value[0]) ? 0 : strtotime($value[0]); |
|||
$end = empty($value[1]) ? 0 : strtotime($value[1]); |
|||
if ($start > 0 && $end > 0) { |
|||
$query->where([["birthday", "between", [$start, $end]]]); |
|||
} else if ($start > 0 && $end == 0) { |
|||
$query->where([["birthday", ">=", $start]]); |
|||
} else if ($start == 0 && $end > 0) { |
|||
$query->where([["birthday", "<=", $end]]); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理可用积分 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchPointAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("point", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理累计获取积分 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchPointGetAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("point_get", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理可用余额 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchBalanceAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("balance", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理累计获取余额 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchBalanceGetAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("balance_get", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理可用余额(可提现) |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchMoneyAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("money", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理累计获取余额(可提现) |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchMoneyGetAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("money_get", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理提现中余额(可提现) |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchMoneyCashOutingAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("money_cash_outing", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理成长值 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchGrowthAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("growth", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理累计获得成长值 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchGrowthGetAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("growth_get", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理当前佣金 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchCommissionAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("commission", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理佣金获取 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchCommissionGetAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("commission_get", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理提现中佣金 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchCommissionCashOutingAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("commission_cash_outing", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理是否是会员 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchIsMemberAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("is_member", $value); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理成为会员时间 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchMemberTimeAttr($query, $value, $data) |
|||
{ |
|||
$start = empty($value[0]) ? 0 : strtotime($value[0]); |
|||
$end = empty($value[1]) ? 0 : strtotime($value[1]); |
|||
if ($start > 0 && $end > 0) { |
|||
$query->where([["member_time", "between", [$start, $end]]]); |
|||
} else if ($start > 0 && $end == 0) { |
|||
$query->where([["member_time", ">=", $start]]); |
|||
} else if ($start == 0 && $end > 0) { |
|||
$query->where([["member_time", "<=", $end]]); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 搜索器:用户管理注册时间 |
|||
* @param $value |
|||
* @param $data |
|||
*/ |
|||
public function searchCreateTimeAttr($query, $value, $data) |
|||
{ |
|||
if ($value) { |
|||
$query->where("create_time", $value); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
public function users(){ |
|||
return $this->hasOne(Users::class, 'member_id', 'pid')->joinType('left')->withField('mobile,member_id')->bind(['pid_name'=>'mobile']); |
|||
} |
|||
|
|||
} |
|||
@ -1,104 +0,0 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | Niucloud-admin 企业快速开发的多应用管理平台 |
|||
// +---------------------------------------------------------------------- |
|||
// | 官方网址:https://www.niucloud.com |
|||
// +---------------------------------------------------------------------- |
|||
// | niucloud团队 版权所有 开源版本可自由商用 |
|||
// +---------------------------------------------------------------------- |
|||
// | Author: Niucloud Team |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
namespace addon\zhjw\app\service\admin\users; |
|||
|
|||
use addon\zhjw\app\model\users\Users; |
|||
|
|||
use core\base\BaseAdminService; |
|||
|
|||
|
|||
/** |
|||
* 用户管理服务层 |
|||
* Class UsersService |
|||
* @package addon\zhjw\app\service\admin\users |
|||
*/ |
|||
class UsersService extends BaseAdminService |
|||
{ |
|||
public function __construct() |
|||
{ |
|||
parent::__construct(); |
|||
$this->model = new Users(); |
|||
} |
|||
|
|||
/** |
|||
* 获取用户管理列表 |
|||
* @param array $where |
|||
* @return array |
|||
*/ |
|||
public function getPage(array $where = []) |
|||
{ |
|||
$field = 'member_id,member_no,pid,username,mobile,password,nickname,headimg,member_level,member_label,wx_openid,weapp_openid,wx_unionid,ali_openid,douyin_openid,register_channel,register_type,login_ip,login_type,login_channel,login_count,login_time,last_visit_time,last_consum_time,sex,status,birthday,point,point_get,balance,balance_get,money,money_get,money_cash_outing,growth,growth_get,commission,commission_get,commission_cash_outing,is_member,member_time,is_del,province_id,city_id,district_id,address,location,delete_time,create_time,update_time,created_by,created_role,updated_by,updated_role'; |
|||
$order = 'member_id desc'; |
|||
$search_model = $this->model->withSearch(["username","mobile","nickname","member_level","member_label","wx_openid","weapp_openid","wx_unionid","ali_openid","douyin_openid","register_channel","register_type","login_ip","login_type","login_channel","login_count","login_time","last_visit_time","last_consum_time","sex","status","birthday","point","point_get","balance","balance_get","money","money_get","money_cash_outing","growth","growth_get","commission","commission_get","commission_cash_outing","is_member","member_time","create_time"], $where)->with(['users'])->field($field)->order($order); |
|||
$list = $this->pageQuery($search_model); |
|||
return $list; |
|||
} |
|||
|
|||
/** |
|||
* 获取用户管理信息 |
|||
* @param int $id |
|||
* @return array |
|||
*/ |
|||
public function getInfo(int $id) |
|||
{ |
|||
$field = 'member_id,member_no,pid,username,mobile,password,nickname,headimg,member_level,member_label,wx_openid,weapp_openid,wx_unionid,ali_openid,douyin_openid,register_channel,register_type,login_ip,login_type,login_channel,login_count,login_time,last_visit_time,last_consum_time,sex,status,birthday,point,point_get,balance,balance_get,money,money_get,money_cash_outing,growth,growth_get,commission,commission_get,commission_cash_outing,is_member,member_time,is_del,province_id,city_id,district_id,address,location,delete_time,create_time,update_time,created_by,created_role,updated_by,updated_role'; |
|||
|
|||
$info = $this->model->field($field)->where([['member_id', "=", $id]])->with(['users'])->findOrEmpty()->toArray(); |
|||
$info['is_del'] = strval($info['is_del']); |
|||
return $info; |
|||
} |
|||
|
|||
/** |
|||
* 添加用户管理 |
|||
* @param array $data |
|||
* @return mixed |
|||
*/ |
|||
public function add(array $data) |
|||
{ |
|||
$res = $this->model->create($data); |
|||
return $res->member_id; |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 用户管理编辑 |
|||
* @param int $id |
|||
* @param array $data |
|||
* @return bool |
|||
*/ |
|||
public function edit(int $id, array $data) |
|||
{ |
|||
|
|||
$this->model->where([['member_id', '=', $id]])->update($data); |
|||
return true; |
|||
} |
|||
|
|||
/** |
|||
* 删除用户管理 |
|||
* @param int $id |
|||
* @return bool |
|||
*/ |
|||
public function del(int $id) |
|||
{ |
|||
$model = $this->model->where([['member_id', '=', $id]])->find(); |
|||
$res = $model->delete(); |
|||
return $res; |
|||
} |
|||
|
|||
|
|||
public function getUsersAll(){ |
|||
$usersModel = new Users(); |
|||
return $usersModel->select()->toArray(); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -1,49 +0,0 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | Niucloud-admin 企业快速开发的多应用管理平台 |
|||
// +---------------------------------------------------------------------- |
|||
// | 官方网址:https://www.niucloud.com |
|||
// +---------------------------------------------------------------------- |
|||
// | niucloud团队 版权所有 开源版本可自由商用 |
|||
// +---------------------------------------------------------------------- |
|||
// | Author: Niucloud Team |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
namespace addon\zhjw\app\validate\users; |
|||
use core\base\BaseValidate; |
|||
/** |
|||
* 用户管理验证器 |
|||
* Class Users |
|||
* @package addon\zhjw\app\validate\users |
|||
*/ |
|||
class Users extends BaseValidate |
|||
{ |
|||
|
|||
protected $rule = [ |
|||
'username' => 'require', |
|||
'mobile' => 'require', |
|||
'password' => 'require', |
|||
'nickname' => 'require', |
|||
'headimg' => 'require', |
|||
'sex' => 'require', |
|||
'status' => 'require', |
|||
'is_member' => 'require', |
|||
]; |
|||
|
|||
protected $message = [ |
|||
'username.require' => ['common_validate.require', ['username']], |
|||
'mobile.require' => ['common_validate.require', ['mobile']], |
|||
'password.require' => ['common_validate.require', ['password']], |
|||
'nickname.require' => ['common_validate.require', ['nickname']], |
|||
'headimg.require' => ['common_validate.require', ['headimg']], |
|||
'sex.require' => ['common_validate.require', ['sex']], |
|||
'status.require' => ['common_validate.require', ['status']], |
|||
'is_member.require' => ['common_validate.require', ['is_member']], |
|||
]; |
|||
|
|||
protected $scene = [ |
|||
"add" => ['member_no', 'pid', 'username', 'mobile', 'password', 'nickname', 'headimg', 'member_level', 'member_label', 'wx_openid', 'weapp_openid', 'wx_unionid', 'ali_openid', 'douyin_openid', 'register_channel', 'register_type', 'login_ip', 'login_type', 'login_channel', 'login_count', 'login_time', 'last_visit_time', 'last_consum_time', 'sex', 'status', 'birthday', 'point', 'point_get', 'balance', 'balance_get', 'money', 'money_get', 'money_cash_outing', 'growth', 'growth_get', 'commission', 'commission_get', 'commission_cash_outing', 'is_member', 'member_time', 'address'], |
|||
"edit" => ['member_no', 'pid', 'username', 'mobile', 'password', 'nickname', 'headimg', 'member_level', 'member_label', 'wx_openid', 'weapp_openid', 'wx_unionid', 'ali_openid', 'douyin_openid', 'register_channel', 'register_type', 'login_ip', 'login_type', 'login_channel', 'login_count', 'login_time', 'last_visit_time', 'last_consum_time', 'sex', 'status', 'birthday', 'point', 'point_get', 'balance', 'balance_get', 'money', 'money_get', 'money_cash_outing', 'growth', 'growth_get', 'commission', 'commission_get', 'commission_cash_outing', 'is_member', 'member_time', 'address'] |
|||
]; |
|||
|
|||
} |
|||
Loading…
Reference in new issue