作者 刘朕
1 个管道 的构建 通过 耗费 1 秒

合并分支 'liuzhen' 到 'master'

Liuzhen



查看合并请求 !36
<?php
namespace app\admin\controller\user;
use app\common\controller\Backend;
use EasyWeChat\Foundation\Application;
use think\Db;
use think\exception\PDOException;
use think\exception\ValidateException;
/**
* 提现记录管理
*
* @icon fa fa-circle-o
*/
class UserWithdraw extends Backend
{
/**
* UserWithdraw模型对象
* @var \app\admin\model\user\UserWithdraw
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = new \app\admin\model\user\UserWithdraw;
$this->view->assign("statusList", $this->model->getStatusList());
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
/**
* 查看
*/
public function index()
{
//当前是否为关联查询
$this->relationSearch = true;
//设置过滤方法
$this->request->filter(['strip_tags', 'trim']);
if ($this->request->isAjax())
{
//如果发送的来源是Selectpage,则转发到Selectpage
if ($this->request->request('keyField'))
{
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->with(['user'])
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->with(['user'])
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
foreach ($list as $row) {
$row->getRelation('user')->visible(['nickname']);
}
$list = collection($list)->toArray();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
/**
* 审核
*/
public function examine($ids = null)
{
if($ids) {
$row = $this->model->get($ids);
if (!$row) {
$this->error(__('No Results were found'));
}
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
if (!in_array($row[$this->dataLimitField], $adminIds)) {
$this->error(__('You have no permission'));
}
}
$params = $this->request->param();
if ($params['status'] == 2) {
if ($row->status == 2) {
$this->error('该提现申请已通过审核');
}
}
if ($params['status'] == 3) {
if ($row->status == 3) {
$this->error('该提现申请已驳回审核');
}
}
$row->status = $params['status'];
Db::startTrans();
try {
$user_model = new \app\admin\model\User();
$user = $user_model->where('id', $row->user_id)->find();
if ($params['status'] == 2) {
// 微信提现
$options = get_addon_config('epay');
$wechat_option = [
'app_id' => $options['wechat']['appid'],
'app_secret' => $options['wechat']['app_secret'],
'payment' => [
'merchant_id' => $options['wechat']['mch_id'],
'key' => $options['wechat']['key'],
'cert_path' => ROOT_PATH . 'addons' . $options['wechat']['cert_client'],
'key_path' => ROOT_PATH . 'addons' . $options['wechat']['cert_key'],
]
];
$app = new Application($wechat_option);
$merchantPay = $app->merchant_pay;
$order_sn = $row->order_sn;
$user_openid = Db::name('third')->where('user_id', $row->user_id)->where('third_party', 'wechat')->value('openid');
$merchantPayData = [
'partner_trade_no' => $order_sn, //随机字符串作为订单号,跟红包和支付一个概念。
'openid' => $user_openid, //收款人的openid
'check_name' => 'NO_CHECK', //文档中有三种校验实名的方法 NO_CHECK OPTION_CHECK FORCE_CHECK
'amount' => $row->money * 100, //单位为分
'desc' => '用户提现',
'spbill_create_ip' => request()->ip(), //发起交易的IP地址
];
$result_pay = $merchantPay->send($merchantPayData);
if ($result_pay['return_code'] == 'SUCCESS' && $result_pay['result_code'] == 'SUCCESS') {
// 余额变动记录
$log = [
'user_id' => $row->user_id,
'money' => $row->money,
'before' => $user['money'],
'after' => $user['money'] - $row->money,
'createtime' => time(),
'memo' => '用户微信提现'
];
$result_log = Db::name('user_money_log')->insertGetId($log);
$row->success_time = time();
$row->more = json_encode($result_pay, JSON_UNESCAPED_UNICODE);
} else {
Db::rollback();
$this->error($result_pay['err_code_des']);
}
} else {
// 返还用户余额
$result_user = $user_model->where('id', $user['id'])->setInc('money', $row->money);
if (!$result_user) {
Db::rollback();
$this->error('提现审核失败');
}
}
$result = $row->save();
Db::commit();
} catch (ValidateException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (PDOException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (\think\Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
if(!$result) {
$this->error('提现审核失败');
}
$this->success('提现审核成功');
}
}
}
... ...
<?php
return [
'User_id' => '用户id',
'Before_money' => '提现前余额',
'After_money' => '提现后余额',
'Order_sn' => '提现单号',
'Status' => '订单状态',
'Status 0' => '待提现',
'Status 1' => '提现中',
'Status 2' => '提现完成',
'Status 3' => '提现失败',
'Pay_type' => '提现方式:1=微信',
'Money' => '提现金额',
'Success_time' => '提现时间',
'Transaction_id' => '提现回调参数',
'More' => '提现回调json',
'Createtime' => '创建时间',
'Updatetime' => '更新时间',
'Percent' => '提现手续费比例',
'User.nickname' => '昵称'
];
... ...
<?php
namespace app\admin\model\user;
use think\Model;
class UserWithdraw extends Model
{
// 表名
protected $name = 'user_withdraw';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = false;
// 追加属性
protected $append = [
'status_text',
'success_time_text'
];
public function getStatusList()
{
return ['0' => __('Status 0'), '1' => __('Status 1'), '2' => __('Status 2'), '3' => __('Status 3')];
}
public function getStatusTextAttr($value, $data)
{
$value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
$list = $this->getStatusList();
return isset($list[$value]) ? $list[$value] : '';
}
public function getSuccessTimeTextAttr($value, $data)
{
$value = $value ? $value : (isset($data['success_time']) ? $data['success_time'] : '');
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
}
protected function setSuccessTimeAttr($value)
{
return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
}
public function user()
{
return $this->belongsTo('app\admin\model\User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
}
... ...
<?php
namespace app\admin\validate\user;
use think\Validate;
class UserWithdraw extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}
... ...
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Before_money')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-before_money" data-rule="required" class="form-control" step="0.01" name="row[before_money]" type="number" value="0.00">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('After_money')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-after_money" data-rule="required" class="form-control" step="0.01" name="row[after_money]" type="number" value="0.00">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Order_sn')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-order_sn" data-rule="required" class="form-control" name="row[order_sn]" type="text" value="''">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="0"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pay_type')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-pay_type" data-rule="required" class="form-control" name="row[pay_type]" type="number" value="1">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Money')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-money" data-rule="required" class="form-control" step="0.01" name="row[money]" type="number" value="0.00">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Success_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-success_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[success_time]" type="text" value="{:date('Y-m-d H:i:s')}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Transaction_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-transaction_id" data-rule="required" data-source="transaction/index" class="form-control selectpage" name="row[transaction_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('More')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-more" class="form-control " rows="5" name="row[more]" cols="50">NULL</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Percent')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-percent" class="form-control" step="0.1" name="row[percent]" type="number" value="0.0">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
... ...
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Before_money')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-before_money" data-rule="required" class="form-control" step="0.01" name="row[before_money]" type="number" value="{$row.before_money|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('After_money')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-after_money" data-rule="required" class="form-control" step="0.01" name="row[after_money]" type="number" value="{$row.after_money|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Order_sn')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-order_sn" data-rule="required" class="form-control" name="row[order_sn]" type="text" value="{$row.order_sn|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pay_type')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-pay_type" data-rule="required" class="form-control" name="row[pay_type]" type="number" value="{$row.pay_type|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Money')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-money" data-rule="required" class="form-control" step="0.01" name="row[money]" type="number" value="{$row.money|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Success_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-success_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[success_time]" type="text" value="{:$row.success_time?datetime($row.success_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Transaction_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-transaction_id" data-rule="required" data-source="transaction/index" class="form-control selectpage" name="row[transaction_id]" type="text" value="{$row.transaction_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('More')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-more" class="form-control " rows="5" name="row[more]" cols="50">{$row.more|htmlentities}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Percent')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-percent" class="form-control" step="0.1" name="row[percent]" type="number" value="{$row.percent|htmlentities}">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
... ...
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="status">
<li class="active"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="statusList" item="vo"}
<li><a href="#t-{$key}" data-value="{$key}" data-toggle="tab">{$vo}</a></li>
{/foreach}
</ul>
</div>
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('user/user_withdraw/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('user/user_withdraw/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('user/user_withdraw/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('user/user_withdraw/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload"></i> {:__('Import')}</a>
<div class="dropdown btn-group {:$auth->check('user/user_withdraw/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('user/user_withdraw/edit')}"
data-operate-del="{:$auth->check('user/user_withdraw/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
... ...
... ... @@ -142,7 +142,7 @@ class Goods extends Api
$basic_where['goods_name'] = ['like','%'.$param['keyword'].'%'];
}
$where = [
'where' => $basic_where
'where' => $basic_where,
];
$goods = $this->goods_model->pageSelect($page,$where,$field,$order,config('option.num'));
$list = $goods->items();
... ... @@ -293,6 +293,23 @@ class Goods extends Api
"stock_num": 剩余库存,
"goods_price": "销售价",
"line_price": "划线价",
"store": {
"id": 1,
"order_sn": "20200826142729172194",
"user_id": 1,
"store_name": "店铺名称",
"industry_id": "行业标签",
"name": "测试11",
"mobile": "13911111111",
"store_icon": "http://cloud.caiyunpan.brotop.cn/assets/img/qrcode.png",
"province": "地址省",
"city": "地址市",
"region": "地址区",
"image_arr": [
"http://cloud.caiyunpan.brotop.cn/assets/img/qrcode.png",
"http://cloud.caiyunpan.brotop.cn/assets/img/qrcode.png"
]
},
"image": "https://her-family.oss-cn-qingdao.aliyuncs.com/addons_store_uploads/20181105/ffc4440df18661948b9c2d4dd4ae419b.jpg"
},
}
... ... @@ -323,6 +340,7 @@ class Goods extends Api
$specData['spec_list'][$index]["form"]['imgshow'] = $specData['spec_list'][$index]["form"]['spec_image']==='' ? null:cdnurl($specData['spec_list'][$index]["form"]['spec_image'], true);
}
}
$detail['store'] = \app\api\model\Store::get($detail['store_id']);
// $basic_where = [
// 'goods_id' => $param['goods_id'],
// 'goods_status' => '10',
... ...
... ... @@ -64,11 +64,35 @@ class Hot extends Api
"data": {
"list": [
{
"id": 5,
"user_id": 1,
"store_id": 0,
"content": "内容",
"images": "http://cloud.caiyunpan.brotop.cn/assets/img/qrcode.png",
"house_ids": ",1,",
"type": 类型1=红包2=一般信息,
"score": "5800",
"red_package": "5000",
"number": 红包数量,
"single": "单人领取金额",
"get": 已领数量,
"surplus": 剩余数量,
"views": 浏览量,
"good_count": 点赞总数,
"is_good": 是否点赞0=否1=是
"image_arr"图片: [
"http://cloud.caiyunpan.brotop.cn/assets/img/qrcode.png"
],
"store": {
"id": 1,
"name": "行业名称",
"weigh": 0,
}
]
"store_name": "店铺名称",
"store_icon": "图标",
"industry_id": "行业标签",
},
},
],
"this_page": 当前页数,
"total_page": 总页数
}
})
*/
... ... @@ -88,7 +112,8 @@ class Hot extends Api
}
};
$where = [
'where' => $query
'where' => $query,
'with' => ['store']
];
$order = ['number'=>'DESC','createtime'=>'DESC'];
$inform = $this->store_inform_model->pageSelect($page,$where,'*',$order,config('option.num'));
... ...
... ... @@ -852,23 +852,16 @@ class Store extends Api
if (!$validate->check($param)) {
$this->error($validate->getError());
}
$withdraw_percent = config('site.withdraw_percent');
$withdraw_percent = $withdraw_percent > 0 ? ($withdraw_percent / 100) : 1;
if ($param['money'] < 1) {
$this->error('提现金额不可小于1元');
}
if ($param['money'] > 5000) {
$this->error('提现金额不可大于5000元');
if ($param['money'] > 1000) {
$this->error('提现金额不可大于1000元');
}
// 判断余额是否充足
if ($param['money'] / $withdraw_percent * 10 > $this->auth->money) {
if ($param['money'] > $this->auth->money) {
$this->error('桃币余额不足,无法提现');
}
// 判断用户是否绑定微信
$user_openid = Db::name('third')->where(['user_id'=>$this->auth->id,'third_party'=>'wechat'])->value('openid');
if(!$user_openid) {
$this->error('请先绑定微信之后进行提现',40004);
}
// 提现记录
Db::startTrans();
$user_model = $this->auth->getUser();
... ... @@ -878,15 +871,24 @@ class Store extends Api
$withdraw = [
'user_id' => $this->auth->id,
'before_money' => $this->auth->money,
'after_money' => $this->auth->money - $param['money'] / $withdraw_percent * 10,
'after_money' => $this->auth->money - $param['money'],
'order_sn' => $order_sn,
'money' => $param['money'],
'percent' => $withdraw_percent
];
$result = $withdraw_model->isUpdate(false)->save($withdraw);
// 记录用户余额
$result_user = $user_model->isUpdate(true)->save(['money' => $user['money'] - $param['money'] / $withdraw_percent * 10], ['id' => $this->auth->id]);
if (!$result || !$result_user) {
$result_user = $user_model->isUpdate(true)->save(['money' => $user['money'] - $param['money']]);
// 记录余额变更
$insert_data = array(
'user_id' => $this->auth->id,
'money' => $param['money'],
'before' => $this->auth->money,
'after' => $this->auth->money - $param['money'],
'createtime' => time(),
'memo' => '提现',
);
$res_log = Db::name('user_money_log')->insert($insert_data);
if (!$result || !$result_user || !$res_log) {
Db::rollback();
$this->error('提现申请失败', [$result, $result_user]);
}
... ...
... ... @@ -47,7 +47,7 @@ class Base extends Model {
* 构造关联社区文章查询
*/
public function store(){
return $this->hasOne("Store","sort_id","id")->field("id,store_name,store_icon,industry_id");
return $this->hasOne("Store","id","store_id")->field("id,store_name,store_icon,industry_id,images");
}
/**
... ...
... ... @@ -11,6 +11,11 @@ class Store extends Base
'image_arr'
];
public function getStoreIconAttr($value)
{
return cdnurl($value);
}
public function getImageArrAttr($value,$data)
{
$arr = [];
... ...
... ... @@ -7,4 +7,18 @@ namespace app\api\model;
class StoreInform extends Base
{
protected $append = [
'image_arr'
];
public function getImageArrAttr($value,$data)
{
$image_arr = [];
if($data['images']) {
$image_arr = explode(',',$data['images']);
foreach ($image_arr as &$v) {
$v = cdnurl($v);
}
}
return $image_arr;
}
}
\ No newline at end of file
... ...
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'user/user_withdraw/index' + location.search,
add_url: 'user/user_withdraw/add',
edit_url: 'user/user_withdraw/edit',
del_url: 'user/user_withdraw/del',
multi_url: 'user/user_withdraw/multi',
table: 'user_withdraw',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'user_id', title: __('User_id')},
{field: 'before_money', title: __('Before_money'), operate:'BETWEEN'},
{field: 'after_money', title: __('After_money'), operate:'BETWEEN'},
{field: 'order_sn', title: __('Order_sn')},
{field: 'status', title: __('Status'), searchList: {"0":__('Status 0'),"1":__('Status 1'),"2":__('Status 2'),"3":__('Status 3')}, formatter: Table.api.formatter.status},
{field: 'pay_type', title: __('Pay_type')},
{field: 'money', title: __('Money'), operate:'BETWEEN'},
{field: 'success_time', title: __('Success_time'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'transaction_id', title: __('Transaction_id')},
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'percent', title: __('Percent'), operate:'BETWEEN'},
{field: 'user.nickname', title: __('User.nickname')},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
edit: function () {
Controller.api.bindevent();
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});
\ No newline at end of file
... ...