model = new PluginFinanceWallet; } public function indexGetTable(Request $request) { $builder = new TableBuilder; $builder->addAction('操作', [ 'width' => '180px', 'fixed' => 'right' ]); $builder->addTableAction('余额', [ 'model' => Action::DIALOG['value'], 'path' => '/app/finance/control/Wallet/recharge', 'props' => [ 'title' => '余额操作《{nickname}》' ], 'component' => [ 'name' => 'button', 'props' => [ 'type' => 'primary', 'size' => 'small' ] ] ]); $builder->addTableAction('积分', [ 'model' => Action::DIALOG['value'], 'path' => '/app/finance/control/Wallet/rechargePoints', 'props' => [ 'title' => '积分操作《{nickname}》' ], 'component' => [ 'name' => 'button', 'props' => [ 'type' => 'info', 'size' => 'small' ] ] ]); $builder->addTableAction('临时积分', [ 'model' => Action::DIALOG['value'], 'path' => '/app/finance/control/Wallet/rechargeTmpPoints', 'props' => [ 'title' => '临时积分操作《{nickname}》' ], 'component' => [ 'name' => 'button', 'props' => [ 'type' => 'warning', 'size' => 'small' ] ] ]); $formBuilder = new FormBuilder(null, null, [ 'inline' => true ]); $formBuilder->add('uid', 'UID', 'input', '', [ 'props' => [ 'placeholder' => 'UID搜索', 'clearable' => true ] ]); $formBuilder->add('mobile', '手机号', 'input', '', [ 'props' => [ 'placeholder' => '手机号搜索', 'clearable' => true ] ]); $formBuilder->add('nickname', '昵称', 'input', '', [ 'props' => [ 'placeholder' => '昵称搜索', 'clearable' => true ] ]); $builder->addScreen($formBuilder); $builder->add('id', 'ID', [ 'props' => [ 'width' => '100px' ] ]); $builder->add('user', '用户', [ 'where' => [ ['uid', '!=', null] ], 'component' => [ 'name' => 'table-userinfo', 'props' => [ 'nickname' => 'nickname', 'avatar' => 'headimg', 'info' => 'mobile', 'tags' => [ [ 'field' => 'uid', 'props' => [ 'type' => 'success', 'size' => 'small' ] ] ], ] ], 'props' => [ 'width' => '240px' ] ]); $builder->add('points', '可用积分', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder->add('points_sum', '累计积分', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder->add('points_used', '累计支出积分', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder->add('tmp_points', '临时积分', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder->add('tmp_points_sum', '累计临时积分', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder->add('tmp_points_used', '累计支出临时积分', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder->add('balance', '可用余额', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder->add('balance_sum', '累计余额', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder->add('balance_used', '累计支出余额', [ 'props' => [ 'minWidth' => '100px' ] ]); $builder = $builder->builder(); return $this->resData($builder); } public function index(Request $request) { $limit = $request->get('limit', 10); $where = []; $where[] = ['w.channels_uid', '=', $request->channels_uid]; $nickname = $request->get('nickname'); if ($nickname) { $where[] = ['u.nickname', 'like', "%{$nickname}%"]; } $mobile = $request->get('mobile'); if ($mobile) { $where[] = ['u.mobile', '=', $mobile]; } $uid = $request->get('uid'); if ($uid) { $where[] = ['w.uid', '=', $uid]; } $list = PluginFinanceWallet::alias('w') ->join('plugin_user u', ' u.id=w.uid ') ->field('w.*,u.id,u.nickname,u.headimg,u.mobile') ->where($where) ->order('w.uid desc') ->paginate($limit) ->each(function ($item) { $item->headimg = Uploads::url($item->headimg); }); return $this->resData($list); } public function recharge(Request $request) { if ($request->method() == 'POST') { $data = $request->post(); Account::updateAccount($data['id'], $request->channels_uid, $data['number'], $data['action'], BillScene::ADMIN['value'], 0, $data['remarks'], $data['is_accumulate'] == 1); return $this->success('操作成功'); } $builder = new FormBuilder(); $builder->add('action', '操作', 'radio', MoneyAction::INCREASE['value'], [ 'options' => MoneyAction::getOptions() ]); $Component = new ComponentBuilder; $builder->add('is_accumulate', '是否计入累计', 'switch', State::NO['value'], [ 'prompt' => [ $Component->add('text', ['default' => '是否计入累计,如退款时,不计入累计'], ['type' => 'info', 'size' => 'small'])->builder() ], 'props' => [ 'active-value' => State::YES['value'], 'inactive-value' => State::NO['value'] ] ]); $builder->add('number', '操作数量', 'input-number', 0, [ 'required' => true, 'props' => [ 'controls' => false, 'min' => 1, 'step' => 1, 'style' => [ 'width' => '200px' ] ] ]); $builder->add('remarks', '备注', 'input', '', [ 'required' => true, ]); return $this->resData($builder); } public function rechargePoints(Request $request) { if ($request->method() == 'POST') { $data = $request->post(); Account::updatePermanentPoints($data['id'], $request->channels_uid, $data['number'], PointsBillScene::ADMIN['value'], 0, $data['action'], $data['remarks'], $data['is_accumulate']); return $this->success('操作成功'); } $builder = new FormBuilder(); $builder->add('action', '操作', 'radio', MoneyAction::INCREASE['value'], [ 'options' => MoneyAction::getOptions() ]); $Component = new ComponentBuilder; $builder->add('is_accumulate', '是否计入累计', 'switch', State::NO['value'], [ 'prompt' => [ $Component->add('text', ['default' => '是否计入累计,如退款时,不计入累计消费'], ['type' => 'info', 'size' => 'small'])->builder() ], 'props' => [ 'active-value' => State::YES['value'], 'inactive-value' => State::NO['value'] ] ]); $builder->add('number', '操作数量', 'input-number', 0, [ 'required' => true, 'props' => [ 'controls' => false, 'min' => 1, 'step' => 1, 'style' => [ 'width' => '200px' ] ] ]); $builder->add('remarks', '备注', 'input', '', [ 'required' => true, ]); return $this->resData($builder); } public function rechargeTmpPoints(Request $request) { if ($request->method() == 'POST') { $data = $request->post(); if ($data['action'] == MoneyAction::INCREASE['value']) { Account::incPoints($data['id'], $request->channels_uid, $data['number'], PointsBillScene::ADMIN['value'], 0, $data['remarks'], $data['is_accumulate'], $data['valid_time']); } else { Account::decTemporaryPoints($data['id'], $request->channels_uid, $data['number'], PointsBillScene::ADMIN['value'], 0, $data['action'], $data['remarks'], $data['is_accumulate'], $data['point_id']); } return $this->success('操作成功'); } $list = PluginUserPoints::field('id as value,points as label, valid_time as tips') ->where('channels_uid', $request->channels_uid) ->where('uid', $request->get('id')) ->where('points', '>', 0) ->where('valid_time', '>=', date('Y-m-d H:i:s')) ->where('extended_time', '>=', date('Y-m-d H:i:s')) ->order('extended_time ASC, valid_time ASC') ->select(); $list = $list->map(function ($item) { return [ 'value' => $item['value'], 'label' => '剩余积分' . $item['label'], 'tips' => '有效期至:' . $item['tips'] ]; }); $builder = new FormBuilder(); $builder->add('action', '操作', 'radio', MoneyAction::INCREASE['value'], [ 'options' => MoneyAction::getOptions() ]); $builder->add('point_id', '选择扣除对象', 'select', null, [ 'options' => $list, 'required' => true, 'where' => [ ['action', '=', MoneyAction::DECREASE['value']] ] ]); $Component = new ComponentBuilder; $builder->add('is_accumulate', '是否计入累计', 'switch', State::NO['value'], [ 'prompt' => [ $Component->add('text', ['default' => '是否计入累计,如退款时,不计入累计消费'], ['type' => 'info', 'size' => 'small'])->builder() ], 'props' => [ 'active-value' => State::YES['value'], 'inactive-value' => State::NO['value'] ] ]); $builder->add('number', '操作数量', 'input-number', 0, [ 'required' => true, 'props' => [ 'controls' => false, 'min' => 1, 'step' => 1, 'style' => [ 'width' => '200px' ] ] ]); $builder->add('valid_time', '有效期', 'date-picker', null, [ 'required' => true, 'where' => [ ['action', '=', MoneyAction::INCREASE['value']] ] ]); $builder->add('remarks', '备注', 'input', '', [ 'required' => true, ]); return $this->resData($builder); } }