This commit is contained in:
zoomtk@126.com 2023-04-20 15:27:25 +08:00
parent 4473299e3d
commit 184cda87ee
29 changed files with 460 additions and 152 deletions

View File

@ -89,6 +89,7 @@ class Futures extends BaseApi{
if($search_text != ''){
$condition[] = ['o.order_no','like','%'.$search_text.'%'];
}
// $this->member_id=108;
//1=库存2=已上架3=已售出4=提货中5=提货完成6=待支付7=捡漏8=拆单)
switch($status){
case 6: //买家未付款
@ -148,6 +149,7 @@ class Futures extends BaseApi{
'o.adjust_money',
'o.pay_money',
'o.order_id',
'o.name as buyer_name',
];
// 表关联
$join = [
@ -174,20 +176,22 @@ class Futures extends BaseApi{
$id = input('id', 0);
$price = input('price', 0);
$agree_split_order = input('agree_split_order', 0);
$date = model('futures')->getInfo([['id', '=', $id],['seller_uid', '=', $this->member_id]]);
if(empty($date)){
return $this->response($this->error('','发布失败'));
}
$futuresModel = new FuturesModel;
$basicsConfig = $futuresModel->getBasicsConfig($this->site_id)['data']['value'];
if(!($price > sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['min'] / 100)) && $price <= sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['max'] / 100)))){// 后台配置范围
return $this->response($this->error('','发布失败,价格不在允许范围内'.sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['min'] / 100)).'-'.sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['max'] / 100))));
// if(!($price > sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['min'] / 100)) && $price <= sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['max'] / 100)))){// 后台配置范围
// return $this->response($this->error('','发布失败,价格不在允许范围内'.sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['min'] / 100)).'-'.sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['max'] / 100))));
// }
if(!($price <= sprintf('%.2f',$date['unit_price'] * (1 + $basicsConfig['price_range']['max'] / 100)))){// 后台配置范围
return $this->response($this->error('','发布失败,价格不得高于市场价格'));
}
// 限制发布时间
return $this->response($futuresModel->release($id, $price, $agree_split_order));
}
@ -198,17 +202,15 @@ class Futures extends BaseApi{
public function stock(){
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$id = input('id', 0);
$date = model('futures')->getInfo([['id', '=', $id],['seller_uid', '=', $this->member_id]]);
if(empty($date)){
return $this->response($this->error('','下架失败'));
}
$futuresModel = new FuturesModel;
return $this->response($futuresModel->stock($id));
}
/**
* 提货
* @return false|string
@ -217,28 +219,23 @@ class Futures extends BaseApi{
public function pickUp(){
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$id = input('id', 0);
$date = model('futures')->getInfo([['id', '=', $id],['seller_uid', '=', $this->member_id]]);
if(empty($date)){
return $this->response($this->error('','提货失败'));
}
$futuresModel = new FuturesModel;
return $this->response($futuresModel->pickUp($id));
}
/**
* 详情
* @return false|string
*/
public function detail(){
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$id = input('id', 0);
$futuresModel = new FuturesModel;
$detail = $futuresModel->detail($id, $this->site_id);
$times = $futuresModel->checkTimes($this->site_id, $this->member_id, $detail['data']['status']);
@ -260,20 +257,20 @@ class Futures extends BaseApi{
$res = [
'price_range' => $basicsConfig['price_range'],
'service_price' => $basicsConfig['service_price'],
'proposed_range' => $basicsConfig['proposed_range'],
'technical_range' => $basicsConfig['technical_range'],
];
return $this->response($this->success($res));
}
/**
* 详情
* @return false|string
*/
public function myDetail(){
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$id = input('id', 0);
$futuresModel = new FuturesModel;
$detail = $futuresModel->detail($id, $this->site_id);
if($detail['code'] < 0 || empty($detail['data']) || !($detail['data']['seller_uid'] == $this->member_id || $detail['data']['member_id'] == $this->member_id)){
@ -292,7 +289,4 @@ class Futures extends BaseApi{
return $this->response($info);
}
// public function testBuyBack(){
// return $this->response(event('BuyBack'));
// }
}

View File

@ -14,12 +14,9 @@
namespace addon\futures\api\controller;
use app\api\controller\BaseApi;
use addon\futures\model\order\FuturesOrderCreate as OrderCreateModel;
use app\model\system\Pay;
/**
* 订单创建
* @author Administrator
*
*/
class Ordercreate extends BaseApi
{
@ -45,8 +42,10 @@ class Ordercreate extends BaseApi
'latitude' => $this->params[ 'latitude' ] ?? '',
'longitude' => $this->params[ 'longitude' ] ?? '',
'is_invoice' => $this->params[ 'is_invoice' ] ?? 0,
'pay_password' => $this->params[ 'payPassword' ] ?? '',
'invoice_type' => $this->params[ 'invoice_type' ] ?? 0,
'invoice_title' => $this->params[ 'invoice_title' ] ?? '',
'taxpayer_number' => $this->params[ 'taxpayer_number' ] ?? '',
@ -60,13 +59,9 @@ class Ordercreate extends BaseApi
'goods_sku_list' => !empty($this->params['goods_sku_list']) ? json_decode($this->params['goods_sku_list'], true) : [],
'sku_id' => isset($this->params['sku_id']) ? $this->params['sku_id'] : '',
];
var_dump($data);die;
if ($data[ 'futures_id' ] == 0) {
return $this->response($this->error('', '缺少必填参数商品数据'));
}
$pay = new Pay();
$out_trade_no = $pay->createOutTradeNo($data[ 'member_id' ]);
return $this->success($out_trade_no);
$res = $order_create->create($data);
return $this->response($res);
}
@ -139,7 +134,6 @@ class Ordercreate extends BaseApi
if ($data[ 'futures_id' ] == 0) {
return $this->response($this->error('', '缺少必填参数商品数据'));
}
$res = $order_create->orderPayment($data);
return $this->response($res);
}

View File

@ -1,15 +1,12 @@
<?php
namespace addon\futures\api\controller;
use app\api\controller\BaseApi;
class User extends BaseApi{
public function info(){
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$info = model('futures_user')->getInfo([['member_id', '=', $this->member_id]]);
if(empty($info)){
$data['member_id'] = $this->member_id;
$data['site_id'] = $this->site_id;
@ -17,7 +14,6 @@ class User extends BaseApi{
model('futures_user')->add($data);
$info = model('futures_user')->getInfo([['member_id', '=', $this->member_id]]);
}
return $this->response($this->success($info));
}
}

View File

@ -7,7 +7,7 @@ return [
'name' => 'TRADING_MARKET',
'title' => '交易市场',
'url' => 'futures://shop/futures/index',
'parent' => 'CHANNEL_ROOT',
'parent' => 'PROMOTION_CENTER',
'is_show' => 1,
'sort' => 1,
'picture' => 'addon/futures/shop/view/public/img/futures_new.png', // 图标
@ -15,7 +15,7 @@ return [
'child_list' => [
[
'name' => 'TRADING_MARKET_HOME',
'title' => '交易市场',
'title' => '交易订单',
'url' => 'futures://shop/futures/index',
'is_show' => 1,
'sort' => 1,
@ -33,12 +33,7 @@ return [
'url' => 'futures://shop/config/basics',
'is_show' => 1,
'sort' => 2,
],
]
]
],
];

View File

@ -8,29 +8,32 @@
* =========================================================
*/
namespace addon\futures\event;
use addon\futures\model\Futures as FuturesModel;
use app\model\member\MemberAccount;
use think\facade\Db;
class MemberRegister
{
// 会员注册
public function handle($param){
// 获取用户id
$memberId = $param['member_id'] ?? 0;
if($memberId > 0){
$futuresModel = new FuturesModel;
$memberInfo = Db::name('member')
->field('member_id,site_id')
->where('member_id',$memberId)
->find();
$basics = $futuresModel->getBasicsConfig($memberInfo['site_id'])['data']['value'];
if($basics['newuser_points']){
$member_account = new MemberAccount();
$member_account->addMemberAccount($memberInfo['site_id'], $memberInfo['member_id'], 'diamond', $basics['newuser_points'], 'diamond', '赠送猕猴桃', '新用户注册赠送猕猴桃');
}
$data = [
'site_id' => $memberInfo['site_id'],
'member_id' => $memberInfo['member_id'],
'created_time' => time()
];
Db::name('futures_user')->insert($data);
}
}

View File

@ -20,8 +20,8 @@ class OrderPay
public function handle($param){
if($param['promotion_type'] == 'futures'){
$futures_model = new Futures();
// $result = $futures_model->orderComplete($param['promotion_id'],$param['order_id']);
(new Forder())->calculate($param);
$result = $futures_model->orderComplete($param['promotion_id'],$param['order_id']);
(new Forder())->calculate($param); //计算订单佣金
}else{
$goods_ids = model("order_goods")->getList([[ 'order_id', '=', $param[ 'order_id' ] ] ], 'goods_id');
$diamond = model("goods")->getSum([['goods_id', 'in', array_column($goods_ids,'goods_id')]], 'give_diamond');
@ -29,7 +29,7 @@ class OrderPay
$site_id=$param['site_id'];
$member_id=$param['member_id'];
$member_account = new MemberAccount();
$member_account->addMemberAccount($site_id, $member_id, 'diamond', $diamond, 'diamond', '赠送钻石', '会员购物赠送钻石',$param[ 'order_id' ]);
$member_account->addMemberAccount($site_id, $member_id, 'diamond', $diamond, 'diamond', '赠送猕猴桃', '会员购物赠送猕猴桃',$param[ 'order_id' ]);
}
}
return success();

View File

@ -2,6 +2,7 @@
namespace addon\futures\model;
use addon\fenxiao\model\FenxiaoAccount;
use addon\futures\model\Futures as FuturesModel;
use addon\message\model\Message;
use app\model\member\MemberAccount;
use app\model\system\Config as ConfigModel;
@ -93,6 +94,7 @@ class Futures extends BaseModel{
Cache::store('redis_concurrent')->set('addon_futures_stock_'.$id,'1');
return $this->success($id);
}
/**
* 发布
* @param $id
@ -141,14 +143,22 @@ class Futures extends BaseModel{
}
}
$service_price = $price * $basics['service_price'] / 100;
$technical_range=$service_price*$basics['technical_range']/100;
if(model('member')->getValue(['member_id'=>$date['seller_uid']],'balance_money')<$service_price){
return error(-800, '您余额不足!');
}
model('futures')->update([
'status' => $futuresInfo['status'],
'release_time' => time() + $basics['release_wait'] * 24 * 60 * 60,// 配置上线延迟时间
'price' => $price,
'total' => $futuresInfo['total'],
'service_price' => $service_price,
'real_income' => $price - $service_price,
'real_income' => $price,
],[['id','=',$id]]);
//扣除服务费
$memberAccountModel = new MemberAccount();
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', -$technical_range, 'service_price', $date['id'], '服务费', $date['id']);
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', -$service_price-$technical_range, 'service_price', $date['id'], '商家分账', $date['id']);
model('futures')->commit();
Cache::store('redis_concurrent')->set('addon_futures_'.$id,'1');
return $this->success();
@ -174,6 +184,10 @@ class Futures extends BaseModel{
model('futures')->update([
'status' => 1,
], [['id', '=', $id]]);
//扣除服务费
$memberAccountModel = new MemberAccount();
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', $date['service_price'], 'service_price', $date['id'], '退回服务费与商家分账', $date['id']);
Cache::store('redis_concurrent')->set('addon_futures_stock_'.$id,'1');
return $this->success();
}
/**
@ -193,7 +207,6 @@ class Futures extends BaseModel{
model('futures')->update([
'status' => 5,
], [['id', '=', $id]]);
$basics = $this->getBasicsConfig($date['site_id'])[ 'data' ][ 'value' ];
// 提货用来减少用户买入限制
Db::name('futures_user')
@ -209,23 +222,25 @@ class Futures extends BaseModel{
* @return array
*/
public function orderCreate($id, $order_id, $member_id){
$date = model('futures')->getInfo([['id', '=', $id]]);
if(empty($date) || ($date['status'] !== 2 && $date['status'] !== 7)){
return $this->error($date,'下单失败-1001');
}
if(!Cache::store('redis_concurrent')->delete('addon_futures_'.$id)){
return $this->error('','下单失败-1002');
}
model('futures')->update([
// if(!Cache::store('redis_concurrent')->delete('addon_futures_'.$id)){
// return $this->error('','下单失败-1002');
// }
model('futures')->update(
[
'status' => 6,
'created_time' => time(),
'member_id' => $member_id,
'order_id' => $order_id,
], [['id', '=', $id]]);
],
[['id', '=', $id]]);
// 增加用户已下单次数
Db::name('futures_user')
->where('member_id',$date['member_id'])
$res=Db::name('futures_user')
->where('member_id',$member_id)
->update([
'business_num' => Db::raw('business_num +1'),
'total_business_num' => Db::raw('total_business_num +1'),
@ -270,9 +285,16 @@ class Futures extends BaseModel{
// 给用户增加余额
$memberAccountModel = new MemberAccount();
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', $date['price'], 'sell', $date['id'], '售卖产品', $date['id']);
$memberAccountModel->addMemberAccount($date['site_id'], $date['seller_uid'], 'balance_money', -$date['service_price'], 'service_price', $date['id'], '服务费', $date['id']);
$futuresModel = new FuturesModel;
$basics = $futuresModel->getBasicsConfig($date['site_id'])['data']['value'];
if ($basics['give_integral'] > 0) { //首单赠送积分
if (model('futures')->getCount(['seller_uid'=>$date['member_id']])==1) {
$memberAccountModel->addMemberAccount($date['site_id'], $date['member_id'], 'point', $basics['give_integral'], 'sell', $date['id'], '秒杀首单赠送积分', $date['id']);
}
}
$point=$date['price']*$basics['order_give_points_ratio']/100;
//赠送积分
$memberAccountModel->addMemberAccount($date['site_id'], $date['member_id'], 'point', $date['price'], 'sell', $date['id'], '秒杀赠送积分', $date['id']);
$memberAccountModel->addMemberAccount($date['site_id'], $date['member_id'], 'point', intval($point), 'sell', $date['id'], '秒杀赠送积分', $date['id']);
return $this->success();
}

View File

@ -13,12 +13,14 @@ namespace addon\futures\model\order;
use addon\fenxiao\model\FenxiaoAccount;
use addon\futures\model\Futures;
use addon\futures\model\Futures as FuturesModel;
use addon\member\model\Member;
use app\model\member\MemberAccount;
use app\model\order\Config;
use app\model\order\OrderCreate;
use app\model\goods\GoodsStock;
use app\model\store\Store;
use app\model\express\Express;
use app\model\system\Cron;
use app\model\system\Pay;
use app\model\express\Config as ExpressConfig;
use app\model\express\Local;
@ -95,6 +97,8 @@ class FuturesOrderCreate extends OrderCreate
$order_type = $this->orderType($shop_goods_list, $calculate_data);
$order_no = $this->createOrderNo($shop_goods_list[ 'site_id' ], $data[ 'member_id' ]);
$member_address = $calculate_data[ 'member_address' ];
$member_info= $calculate_data[ 'member_account' ];
$times= $calculate_data[ 'times' ]['original'];
$data_order = [
'order_no' => $order_no,
'site_id' => $site_id,
@ -119,6 +123,7 @@ class FuturesOrderCreate extends OrderCreate
'longitude' => $member_address[ 'longitude' ] ?? '',
'latitude' => $member_address[ 'latitude' ] ?? '',
'buyer_ip' => request()->ip(),
'buyer_nickname' => $member_info['nickname'],
'goods_money' => $shop_goods_list[ 'goods_money' ],
'delivery_money' => $shop_goods_list[ 'delivery_money' ],
'coupon_id' => $shop_goods_list[ 'coupon_id' ] ?? 0,
@ -160,7 +165,6 @@ class FuturesOrderCreate extends OrderCreate
$order_id = model('order')->add($data_order);
$pay_money += $shop_goods_list[ 'pay_money' ];
//订单项目表
foreach ($shop_goods_list[ 'goods_list' ] as $k_order_goods => $order_goods) {
$data_order_goods = array (
'order_id' => $order_id,
@ -192,18 +196,19 @@ class FuturesOrderCreate extends OrderCreate
$order_goods_id = model('order_goods')->add($data_order_goods);
$calculate_data[ 'shop_goods_list' ][ 'goods_list' ][ $k_order_goods ][ 'order_goods_id' ] = $order_goods_id;
}
$futures_model = new Futures;
$futures_info = $futures_model->orderCreate($data['futures_id'],$order_id,$data['member_id']);
if ($futures_info[ 'code' ] != 0) {
model('order')->rollback();
return $futures_info;
}
// 提前秒杀扣除钻石
if($calculate_data['times']['is_early']){
$member_account = new MemberAccount();
$member_account->addMemberAccount($site_id, $data['member_id'], 'balance', -1, 'diamond', '秒杀抵扣钻石', '会员抢购抵扣钻石',$order_id);
$member_account->addMemberAccount($site_id, $data['member_id'], 'diamond', -1, 'diamond', '秒杀抵扣猕猴桃', '会员抢购抵猕猴桃',$order_id);
}
$result_list = event('OrderCreate', [ 'order_id' => $order_id, 'site_id' => $shop_goods_list[ 'site_id' ],'create_data' => $calculate_data ]);
if (!empty($result_list)) {
foreach ($result_list as $k => $v) {
@ -214,8 +219,15 @@ class FuturesOrderCreate extends OrderCreate
}
}
//生成整体支付单据
$pay->addPay($shop_goods_list[ 'site_id' ], $out_trade_no, $this->pay_type, $this->order_name, $this->order_name, $this->pay_money, '', 'OrderPayNotify', '/pages_rush/futures/order?status=stock');//'/pages_rush/order/detail?order_id=' . $order_id
// $pay->addPay($shop_goods_list[ 'site_id' ], $out_trade_no, $this->pay_type, $this->order_name, $this->order_name, $this->pay_money, '', 'OrderPayNotify', '/pages_rush/futures/order?status=stock');//'/pages_rush/order/detail?order_id=' . $order_id
$execute_time = $times['miaosha_end_time'] ?? '';
if ($execute_time) {
$cron_model = new Cron();
$execute_time +=strtotime(date('Ymd'));
$cron_model->addCron(1, 0, "订单自动关闭", "CronOrderClose", $execute_time, $order_id);
} else {
$this->addOrderCronClose($order_id, $shop_goods_list['site_id']);//增加关闭订单自动事件
}
model('order')->commit();
return $this->success($out_trade_no);
} catch (\Exception $e) {
@ -236,6 +248,11 @@ class FuturesOrderCreate extends OrderCreate
if ($data[ 'is_balance' ] > 0) {
$this->member_balance_money = $data[ 'member_account' ][ 'balance_total' ] ?? 0;
}
$member_model = new Member();
$result = $member_model->checkPayPassword($data["member_id"], $data["pay_password"]);
if ($result["code"] < 0) {
return error(-1,'支付密码不正确');
}
$member_id = $data['member_id'];
$futures_id = $data['futures_id'];
$site_id = $data['site_id'];
@ -245,23 +262,24 @@ class FuturesOrderCreate extends OrderCreate
['status', 'in', [2,7]],
['release_time', '<', time()],
);
$futures_info = model('futures')->getInfo($condition) ?? [];
if(empty($futures_info)) return $this->error([], '该秒杀不存在!');
$futuresModel = new FuturesModel;
$data['times'] = $futuresModel->checkTimes($site_id, $member_id, $futures_info['status']);
if($data['times']['code'] != 0){
return $data['times'];
}
$data['times'] = $data['times']['data'];
$data['fenxiao_info'] = model('fenxiao')->getInfo([['member_id','=',$data['member_id']]]);
// $data['fenxiao_info'] = model('fenxiao')->getInfo([['member_id','=',$data['member_id']]]);
$basics = $futuresModel->getBasicsConfig($site_id)['data']['value'];
$data['futures_user_info'] = model('futures_user')->getInfo([['member_id','=',$data['member_id']]]);
//检查钻石数量
if($data['times']['is_early'] && $data['futures_user_info']['is_special'] == 0){
if($data['fenxiao_info']['diamond'] <= 0){
if($data['member_account']['diamond'] <= 0){
return error(-1,'钻石不足,不可提前秒杀');
}
}

View File

@ -56,12 +56,10 @@
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>秒杀时间段设置:</label>
</div>
<div class="layui-form-item js-new-attr-list">
<label class="layui-form-label"></label>
<div class="layui-input-block">
@ -126,6 +124,42 @@
<div class="word-aux ">达到订单数限制后,进行提货恢复限制数</div>
</div>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">首单送积分:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="give_integral" class="layui-input ns-len-mid" value="{$info.give_integral ?? 0}" />
</div>
</div>
<div class="word-aux ">用户抢购首单送积分</div>
</div>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">新用户赠送钻石:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="newuser_points" class="layui-input ns-len-mid" value="{$info.newuser_points??0}" />
</div>
</div>
<div class="word-aux ">新用户赠送积分</div>
</div>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">下单赠送积分:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="order_give_points_ratio" class="layui-input ns-len-mid" value="{$info.order_give_points_ratio??0}" />
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux ">下单赠送积分,得消费额百分比,系统自动取整</div>
</div>
</div>
<div class="layui-card-body">
<div class="layui-form-item time-type-view-all" >
<label class="layui-form-label">价格涨幅区间设置:</label>
@ -139,6 +173,14 @@
</div>
<div class="layui-form-mid layui-word-aux">%</div>
</div>
<div class="layui-form-item time-type-view-all" >
<label class="layui-form-label">建议出售价格比例:</label>
<div class="layui-input-inline">
<input type="number" class="layui-input" name="proposed_range" value="<?= empty($info['proposed_range']) ? '' :$info['proposed_range'] ?>">
</div>
<div class="layui-form-mid layui-word-aux">%</div>
</div>
<div class="word-aux ">建议出售价格比例</div>
</div>
<div class="layui-card-body">
@ -149,6 +191,15 @@
</div>
<div class="layui-form-mid layui-word-aux">%</div>
</div>
<div class="word-aux ">商家出售商品担保交易费用,包含计算服务费商家佣金</div>
<div class="layui-form-item time-type-view-all" >
<label class="layui-form-label">技术服务费:</label>
<div class="layui-input-inline">
<input type="number" class="layui-input" name="technical_range" placeholder="" value="<?= !isset($info['technical_range']) ? '' :$info['technical_range'] ?>">
</div>
<div class="layui-form-mid layui-word-aux">%</div>
</div>
<div class="word-aux ">服务费拆分,用于区分服务费费用名目</div>
<div class="layui-form-item time-type-view-all" >
<label class="layui-form-label">订单商品数量最大翻倍次数:</label>
<div class="layui-input-inline">

View File

@ -285,7 +285,7 @@ class Member extends BaseModel
*/
public function getMemberDetail($member_id, $site_id)
{
$field = 'member_id,source_member,username,nickname,mobile,email,status,headimg,member_level,member_level_name,member_label,member_label_name,qq,realname,sex,location,birthday,reg_time,point,balance,growth,balance_money,account5,pay_password,member_level_type';
$field = 'member_id,source_member,username,nickname,mobile,email,status,headimg,member_level,member_level_name,member_label,member_label_name,qq,realname,sex,location,birthday,reg_time,point,balance,diamond,growth,balance_money,account5,pay_password,member_level_type';
$member_info = model('member')->getInfo([ [ 'member_id', '=', $member_id ], [ 'site_id', '=', $site_id ] ], $field);
if (!empty($member_info)) {
$member_info[ 'balance_total' ] = $member_info[ 'balance' ] + $member_info[ 'balance_money' ];

View File

@ -54,6 +54,8 @@ class Memberrecharge extends BaseApi
$field = 'recharge_id,recharge_name,cover_img,face_value,buy_price,point,growth,coupon_id,sale_num';
$member_recharge_model = new MemberRechargeModel();
$list = $member_recharge_model->getMemberRechargePageList([ [ 'status', '=', 1 ], [ 'site_id', '=', $this->site_id ] ], $page, $page_size, 'create_time desc', $field);
$list['explain']='充值任意金额后,会存到您的账户余额中';
return $this->response($list);
}
}

View File

@ -38,7 +38,6 @@ class MemberrechargeOrderCreate extends OrderCreate
$member_info = $member['data'];
//获取套餐信息
$recharge_model = new Memberrecharge();
if ($data['recharge_id'] > 0) {
//套餐字段
$field = 'recharge_id,recharge_name,cover_img,face_value,buy_price,point,growth,coupon_id';
@ -59,12 +58,10 @@ class MemberrechargeOrderCreate extends OrderCreate
"coupon_id" => 0,
);
}
//创建或加入
$pay = new Pay();
$out_trade_no = $pay->createOutTradeNo($data['member_id']);
$order_no = $this->createOrderNo($data['site_id'], $data['member_id']);
$order_data = [
'recharge_id' => $data['recharge_id'],
'order_no' => $order_no,
@ -90,15 +87,12 @@ class MemberrechargeOrderCreate extends OrderCreate
'relate_id' => $data['relate_id'] ?? 0,
'relate_type' => $data['relate_type'] ?? '',
];
model("member_recharge_order")->startTrans();
//循环生成多个订单
try {
$order_id = model("member_recharge_order")->add($order_data);
//生成整体支付单据
$pay->addPay($data['site_id'], $out_trade_no, "", "会员充值套餐,面额:" . $recharge_info['face_value'], "会员充值套餐,面额:" . $recharge_info['face_value'], $recharge_info['buy_price'], '', 'MemberrechargeOrderPayNotify', '');
//计算订单自动关闭时间
$config_model = new Config();
$order_config_result = $config_model->getOrderEventTimeConfig($data['site_id']);
@ -111,16 +105,12 @@ class MemberrechargeOrderCreate extends OrderCreate
}
$cron_model = new Cron();
$cron_model->addCron(1, 0, "订单自动关闭", "MemberrechargeOrderClose", $execute_time, $order_id);
event("MemberRechargeOrderCreate", ['order_id' => $order_id]);
model("member_recharge_order")->commit();
return $this->success($out_trade_no);
} catch (\Exception $e) {
model("member_recharge_order")->rollback();
return $this->error('', $e->getMessage());
}
}
}

View File

@ -31,13 +31,10 @@ class Memberrecharge extends BaseShop
}
//套餐字段
protected $field = 'recharge_id,recharge_name,cover_img,face_value,buy_price,point,growth,coupon_id,sale_num,create_time,status';
//开卡字段
protected $card_field = 'card_id,recharge_id,card_account,cover_img,face_value,point,growth,coupon_id,buy_price,member_img,nickname,order_id,order_no,from_type,use_status,create_time,use_time';
//订单字段
protected $order_field = 'order_id,recharge_name,recharge_id,order_no,out_trade_no,member_id,cover_img,face_value,buy_price,point,growth,coupon_id,price,pay_type,pay_type_name,status,create_time,pay_time,member_img,nickname,order_from_name,order_from';
//优惠券字段
protected $coupon_field = 'coupon_type_id,coupon_name,money,count,lead_count,max_fetch,at_least,end_time,image,validity_type,fixed_term';
@ -81,7 +78,6 @@ class Memberrecharge extends BaseShop
public function add()
{
if (request()->isAjax()) {
$data = [
'site_id' => $this->site_id,
'recharge_name' => input('recharge_name', ''),//套餐名称
@ -92,10 +88,8 @@ class Memberrecharge extends BaseShop
'growth' => input('growth', ''),//赠送成长值
'coupon_id' => input('coupon_id', '')//优惠券id
];
$model = new MemberRechargeModel();
return $model->addMemberRecharge($data);
} else {
return $this->fetch('memberrecharge/add');
}
@ -108,10 +102,8 @@ class Memberrecharge extends BaseShop
public function edit()
{
$rechargeModel = new MemberRechargeModel();
$recharge_id = input('recharge_id', '');
if (request()->isAjax()) {
$data = [
'recharge_name' => input('recharge_name', ''),//套餐名称
'cover_img' => input('cover_img', ''),//封面
@ -121,7 +113,6 @@ class Memberrecharge extends BaseShop
'growth' => input('growth', ''),//赠送成长值
'coupon_id' => input('coupon_id', '')//优惠券id
];
return $rechargeModel->editMemberRecharge(
[
[ 'recharge_id', '=', $recharge_id ],
@ -129,7 +120,6 @@ class Memberrecharge extends BaseShop
]
, $data
);
} else {
//获取套餐详情
$recharge = $rechargeModel->getMemberRechargeInfo(
@ -143,7 +133,6 @@ class Memberrecharge extends BaseShop
$this->assign('recharge', $recharge);
return $this->fetch('memberrecharge/edit');
}
}
/**
@ -153,9 +142,7 @@ class Memberrecharge extends BaseShop
public function detail()
{
$recharge_model = new MemberRechargeModel();
$recharge_id = input('recharge_id', '');
//获取套餐详情
$info = $recharge_model->getMemberRechargeInfo(
[
@ -166,7 +153,6 @@ class Memberrecharge extends BaseShop
)[ 'data' ] ?? [];
if (empty($info)) $this->error('未获取到套餐数据', addon_url('memberrecharge://shop/memberrecharge/lists'));
$this->assign('info', $info);
return $this->fetch('memberrecharge/detail');
}
@ -177,12 +163,9 @@ class Memberrecharge extends BaseShop
public function invalid()
{
$model = new MemberRechargeModel();
$recharge_id = input('recharge_id', '');
$data = [ 'status' => 2 ];
$condition = [ [ 'recharge_id', '=', $recharge_id ] ];
$res = $model->editMemberRecharge($condition, $data);
return $res;
}
@ -194,12 +177,9 @@ class Memberrecharge extends BaseShop
public function open()
{
$model = new MemberRechargeModel();
$recharge_id = input('recharge_id', '');
$data = [ 'status' => 1 ];
$condition = [ [ 'recharge_id', '=', $recharge_id ] ];
$res = $model->editMemberRecharge($condition, $data);
return $res;
}
@ -211,9 +191,7 @@ class Memberrecharge extends BaseShop
public function delete()
{
$model = new MemberRechargeModel();
$recharge_id = input('recharge_id', '');
return $model->deleteMemberRecharge([ [ 'recharge_id', '=', $recharge_id ] ]);
}
@ -225,7 +203,6 @@ class Memberrecharge extends BaseShop
{
$recharge_id = input('recharge_id', '');
$page_size = input('page_size', PAGE_LIST_ROWS);
$model = new MemberRechargeCardModel();
$condition[] = [ 'site_id', '=', $this->site_id ];
$condition[] = [ 'recharge_id', '=', $recharge_id ];
@ -235,21 +212,16 @@ class Memberrecharge extends BaseShop
if ($status) {
$condition[] = [ 'use_status', '=', $status ];
}
$page = input('page', 1);
$list = $model->getMemberRechargeCardPageList($condition, $page, $page_size, 'card_id desc', $this->card_field);
return $list;
} else {
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getMemberRechargeCardPageList($condition, 1, $page_size, 'card_id desc', $this->card_field);
$this->assign('list', $list);
$this->assign('recharge_id', $recharge_id);
return $this->fetch('memberrecharge/card_lists');
}
}
/**
@ -259,16 +231,13 @@ class Memberrecharge extends BaseShop
public function cardDetail()
{
$model = new MemberRechargeCardModel();
$card_id = input('card_id', '');
//获取详情
$info = $model->getMemberRechargeCardInfo(
[ [ 'card_id', '=', $card_id ] ],
$this->card_field
)[ 'data' ] ?? [];
$this->assign('info', $info);
return $this->fetch('memberrecharge/card_detail');
}

View File

@ -36,6 +36,7 @@ class Memberbankaccount extends BaseApi
$withdraw_type = isset($this->params[ 'withdraw_type' ]) ? $this->params[ 'withdraw_type' ] : '';// '账户类型 alipay 支付宝 bank 银行卡
$branch_bank_name = isset($this->params[ 'branch_bank_name' ]) ? $this->params[ 'branch_bank_name' ] : '';// 银行支行信息
$bank_account = isset($this->params[ 'bank_account' ]) ? $this->params[ 'bank_account' ] : '';// 银行账号
$bank_address = isset($this->params[ 'bank_address' ]) ? $this->params[ 'bank_address' ] : '';// 银行地址
if (empty($realname)) {
return $this->response($this->error('', 'REQUEST_REAL_NAME'));
}
@ -62,6 +63,7 @@ class Memberbankaccount extends BaseApi
'withdraw_type' => $withdraw_type,
'branch_bank_name' => $branch_bank_name,
'bank_account' => $bank_account,
'bank_address' => $bank_address,
'is_default' => 1
];
$res = $member_bank_account_model->addMemberBankAccount($data);
@ -76,13 +78,13 @@ class Memberbankaccount extends BaseApi
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$id = isset($this->params[ 'id' ]) ? $this->params[ 'id' ] : 0;
$realname = isset($this->params[ 'realname' ]) ? $this->params[ 'realname' ] : '';
$mobile = isset($this->params[ 'mobile' ]) ? $this->params[ 'mobile' ] : '';
$withdraw_type = isset($this->params[ 'withdraw_type' ]) ? $this->params[ 'withdraw_type' ] : '';// '账户类型 alipay 支付宝 bank 银行卡
$branch_bank_name = isset($this->params[ 'branch_bank_name' ]) ? $this->params[ 'branch_bank_name' ] : '';// 银行支行信息
$bank_account = isset($this->params[ 'bank_account' ]) ? $this->params[ 'bank_account' ] : '';// 银行账号
$bank_address = isset($this->params[ 'bank_address' ]) ? $this->params[ 'bank_address' ] : '';// 银行地址
if (empty($id)) {
return $this->response($this->error('', 'REQUEST_ID'));
}
@ -113,6 +115,7 @@ class Memberbankaccount extends BaseApi
'withdraw_type' => $withdraw_type,
'branch_bank_name' => $branch_bank_name,
'bank_account' => $bank_account,
'bank_address' => $bank_address,
'is_default' => 1
];
$res = $member_bank_account_model->editMemberBankAccount($data);
@ -166,7 +169,7 @@ class Memberbankaccount extends BaseApi
return $this->response($this->error('', 'REQUEST_ID'));
}
$member_bank_account_model = new MemberBankAccountModel();
$info = $member_bank_account_model->getMemberBankAccountInfo([ [ 'member_id', '=', $this->member_id ], [ 'id', '=', $id ] ], 'id,member_id,realname,mobile,withdraw_type,branch_bank_name,bank_account,is_default');
$info = $member_bank_account_model->getMemberBankAccountInfo([ [ 'member_id', '=', $this->member_id ], [ 'id', '=', $id ] ], 'id,member_id,realname,mobile,withdraw_type,branch_bank_name,bank_account,is_default,bank_address');
if (!empty($info[ 'data' ])) {
$info[ 'data' ][ 'withdraw_type_name' ] = $member_bank_account_model->getWithdrawType()[ $info[ 'data' ][ 'withdraw_type' ] ];
}

View File

@ -96,6 +96,7 @@ class Memberwithdraw extends BaseApi
"account_number" => $account_number,
"apply_money" => $apply_money,
"mobile" => $mobile,
"identity" => $mobile,
"app_type" => $app_type
);
$result = $withdraw_model->apply($data, $member_info[ 'data' ][ 'site_id' ], 'shop');

View File

@ -132,8 +132,8 @@ class MemberAccount extends BaseModel
$from_type[ 'balance' ][ 'transfer' ] = [ 'type_name' => '转账', 'type_url' => '' ];
$from_type[ 'diamond' ]['diamond'] = [ 'type_name' => '赠送钻石', 'type_url' => '' ];
$from_type[ 'balance' ]['diamond'] = [ 'type_name' => '赠送钻石', 'type_url' => '' ];
$from_type[ 'diamond' ]['diamond'] = [ 'type_name' => '赠送猕猴桃', 'type_url' => '' ];
$from_type[ 'balance' ]['diamond'] = [ 'type_name' => '赠送猕猴桃', 'type_url' => '' ];
$this->from_type = $from_type;
}

View File

@ -92,9 +92,7 @@ class MemberBankAccount extends BaseModel
$config_model = new Withdraw();
$config_result = $config_model->getConfig(1, 'shop');
$config = $config_result['data']['value'];
if (!empty($config)) {
//提现方式为微信的时候 判断用户是否已关注公众号
if ($data['withdraw_type'] == 'wechatpay') {
//获取会员信息
@ -103,26 +101,20 @@ class MemberBankAccount extends BaseModel
return $this->error('', '请先绑定微信');
}
}
model('member_bank_account')->startTrans();
try {
if ($data['is_default'] == 1) {
model('member_bank_account')->update(['is_default' => 0], ['member_id' => $data['member_id']]);
}
$data['modify_time'] = time();
$res = model('member_bank_account')->update($data, ['id' => $data['id']]);
Cache::tag("member_bank_account_" . $data['member_id'])->clear();
model('member_bank_account')->commit();
return $this->success($res);
} catch (\Exception $e) {
model('member_bank_account')->rollback();
return $this->error('', $e->getMessage());
}
} else {
return $this->error('', '平台未开启会员提现');
}

View File

@ -101,7 +101,7 @@ class Withdraw extends BaseModel
return $this->error([], "提现金额为{$config["money_multiple"]}倍数");
}
$member_id = $data["member_id"];
$identity = $data["identity"];
$identity = $data["identity"]??'';
$member_model = new Member();
$member_info_result = $member_model->getMemberInfo([["member_id", "=", $member_id]], "balance_money,headimg,wx_openid,username,mobile,weapp_openid,nickname");
$member_info = $member_info_result["data"];
@ -169,7 +169,7 @@ class Withdraw extends BaseModel
"realname" => $data["realname"],
"bank_name" => $bank_name,
"account_number" => $account_number,
"identity" => $identity,
// "identity" => $identity,
"mobile" => $data["mobile"],
"applet_type" => $applet_type
);

View File

@ -29,9 +29,11 @@ class Test extends Controller
}
public function s(){
$paydata='{"item_code":"AM010201000000117823","charset":"UTF-8","notify_time":"2023-02-02 10:41:48","commodity_order_id":"202302020000000008847076","quantity":"1","total_price":"0.00","method":"alipay.open.servicemarket.order.notify","sign":"PrqlBU8y1sIIS962JrLmAuggPH89kSTy1cPLur9z0ynHI0YurAVVahaxxt9iWErUMOQGNKehyilyMtCeZdRh84hSdHKktSTHpDvy423sX9xVLYvPBii05joMBJUZ3PM4y7BbizyPamie3yPqdomDuGQ539AYTA\/9YtmwUoh62zjloIoq4UefDOihwuESGFmB5B3HYbw6HpSiVbe8lHEGNSKOGBTCi2OowaSk1sGaT9\/5dQgBCARDGb+amg4pKGMkw105ERlD2EEW9qoGQNwQVP7o9R5UP+7KqgOhg+X95kW5qcIjltjF6rRPa2cH\/j1WQ1RSeTfTuuRBOMLAOr3xuw==","order_time":"2023-02-02 10:38:00","title":"客单豹","specifications":"客单豹","version":"1.0","notify_id":"2023020200222103800094771410174673","merchant_pid":"2088402283167085","package_count":"0","notify_type":"servicemarket_order_notify","period_day":"-1","phone":"18980669271","name":"*敏","order_item_num":"1","contactor":"柏鸿凯","app_id":"2021003167617037","sign_type":"RSA2","timestamp":"2023-02-02 10:41:48"}';
$res= event('AliAuthNotify',json_decode($paydata,true));
var_dump($res);
var_dump(329*1/100);
// $paydata='{"item_code":"AM010201000000117823","charset":"UTF-8","notify_time":"2023-02-02 10:41:48","commodity_order_id":"202302020000000008847076","quantity":"1","total_price":"0.00","method":"alipay.open.servicemarket.order.notify","sign":"PrqlBU8y1sIIS962JrLmAuggPH89kSTy1cPLur9z0ynHI0YurAVVahaxxt9iWErUMOQGNKehyilyMtCeZdRh84hSdHKktSTHpDvy423sX9xVLYvPBii05joMBJUZ3PM4y7BbizyPamie3yPqdomDuGQ539AYTA\/9YtmwUoh62zjloIoq4UefDOihwuESGFmB5B3HYbw6HpSiVbe8lHEGNSKOGBTCi2OowaSk1sGaT9\/5dQgBCARDGb+amg4pKGMkw105ERlD2EEW9qoGQNwQVP7o9R5UP+7KqgOhg+X95kW5qcIjltjF6rRPa2cH\/j1WQ1RSeTfTuuRBOMLAOr3xuw==","order_time":"2023-02-02 10:38:00","title":"客单豹","specifications":"客单豹","version":"1.0","notify_id":"2023020200222103800094771410174673","merchant_pid":"2088402283167085","package_count":"0","notify_type":"servicemarket_order_notify","period_day":"-1","phone":"18980669271","name":"*敏","order_item_num":"1","contactor":"柏鸿凯","app_id":"2021003167617037","sign_type":"RSA2","timestamp":"2023-02-02 10:41:48"}';
// $res= event('AliAuthNotify',json_decode($paydata,true));
// var_dump($res);
}
// public function e(){

View File

@ -2,10 +2,7 @@
{block name="resources"}
<link rel="stylesheet" href="SHOP_CSS/index.css">
{/block}
{block name="main"}
{if !$guide_close}
<div class="common-wrap guide">
<div class="head">
@ -117,7 +114,6 @@
</div>
</div>
{/if}
<div class="common-wrap">
<div class="head">
<div class="title">实时概况</div>
@ -164,7 +160,6 @@
</div>
</div>
</div>
<div class="common-wrap">
<div class="head">
<div class="title">待办事项</div>
@ -220,7 +215,6 @@
{/if}
</div>
</div>
<div class="echart-wrap">
<div class="common-wrap">
<div class="head">
@ -239,7 +233,6 @@
</div>
</div>
</div>
<div class="common-wrap">
<div class="head">
<div class="title">常用功能</div>
@ -281,7 +274,6 @@
{/if}
</div>
</div>
<div class="promotion-wrap">
<div class="common-wrap">
<div class="head">
@ -336,16 +328,12 @@
{block name="script"}
<script src="SHOP_JS/echarts.min.js"></script>
<script>
// 今日昨日统计
getDayCount();
// 综合统计
getSumCount();
// 图形统计
getChartCount();
function getDay(day){
var today = new Date();
var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;

BIN
public/picture/pass/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
public/picture/pass/ht.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
public/picture/pass/pwd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
public/picture/pass/sq.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,288 @@
.mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.4);
}
.box {
width: 100vw;
height: 50vh;
position: fixed;
bottom: 0;
left: 0;
margin: auto;
z-index: 101;
display: flex;
justify-content: center;
align-items: center;
.center {
position: absolute;
}
.bottom {
position: absolute;
bottom: 0;
width: 100%;
background: #fff;
border-radius: 30rpx 30rpx 0 0;
.tle {
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx 3%;
.tle_lft {
display: flex;
align-items: center;
image {
width:60rpx;
height:60rpx;
}
.tle_1 {
font-size: 30rpx;
color: #444;
font-weight: bold;
letter-spacing: 3rpx;
padding-left: 8rpx;
}
.tle_2 {
font-size: 24rpx;
color: #999;
letter-spacing: 3rpx;
padding-left: 10rpx;
}
}
.tle_rgt {
padding: 0 20rpx;
image {
width: 40rpx;
}
}
}
.pwd_info {
text-align: center;
font-size: 24rpx;
color: red;
margin: 10px;
height: 100rpx;
line-height: 80rpx;
}
.bg {
opacity: 0.5;
position: absolute;
top: 85rpx;
// left: 0;
right: 0;
image {
width: 250rpx;
}
}
}
}
.pwd_box {
display: flex;
align-items: center;
justify-content: center;
background: #fff;
padding: 20rpx 0 0 0;
.pwd-text {
position: relative;
line-height: 60rpx;
vertical-align: middle;
text-align: center;
font-size: 46rpx;
color: #0fb361;
font-weight: bold;
width: 60rpx;
height: 70rpx;
margin-right: 20rpx;
display: inline-block;
border-bottom: solid 1px #666;
}
.pwd-text.active:after {
-webkit-animation: twinkle 1s infinite;
animation: twinkle 1s infinite;
height: 40rpx;
width: 5rpx;
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #007aff;
}
@-webkit-keyframes twinkle {
from {
background-color: #007aff;
}
to {
background-color: transparent;
}
}
}
.solt {
width: 96vw;
background: #f5f5f5;
padding: 10rpx 2vw;
display: flex;
align-items: center;
border-top: 1px solid #ccc;
// border-radius: 30rpx 30rpx 0 0;
.s_lft {
width: 78vw;
padding-right: 10rpx;
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
.s_li {
width: 31%;
margin-bottom: 20rpx;
background: #fff;
height: 90rpx;
line-height: 90rpx;
border-radius: 10rpx;
text-align: center;
font-size: 40rpx;
color: #444;
font-weight: bold;
border: 1px solid #fff;
margin: 10px 5px 5px 0;
}
.s_o {
width: 65%;
}
.button-hover {
background: #eee !important;
}
.s_sq {
display: flex;
align-items: center;
justify-content: center;
image {
width: 30rpx;
height: 30rpx;
}
}
}
.s_rgt {
width: 20vw;
height: 100%;
.s_li {
width: 100%;
margin-bottom: 20rpx;
background: #fff;
border-radius: 10rpx;
text-align: center;
font-size: 28rpx;
color: #000;
font-weight: bold;
border: 1px solid #fff;
}
.s_s {
height: 200rpx;
line-height: 200rpx;
color: #fff;
margin: 0 0 -5px;
background: #0fb361;
}
.s_x {
height: 200rpx;
line-height: 200rpx;
display: flex;
align-items: center;
justify-content: center;
margin: 0 0 5px;
image {
width: 50rpx;
}
}
.s_cx {
.button-hover {
background: #eee !important;
}
}
.s_qd {
.button-hover {
background: #2aa515 !important;
}
}
}
}
/* 弹入-从下 */
.a-bounceinB {
-webkit-animation: 0.3s ease-out backwards;
-moz-animation: 0.3s ease-out backwards;
-ms-animation: 0.3s ease-out backwards;
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-animation-name: bounceinB;
-moz-animation-name: bounceinB;
-ms-animation-name: bounceinB;
animation-name: bounceinB;
}
/* 弹入-从下 */
@keyframes bounceinB {
0% {
opacity: 0;
transform: translateY(100%);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
/* 弹出-向下 */
.a-bounceoutB {
-webkit-animation: 0.3s ease-in forwards;
-moz-animation: 0.3s ease-in forwards;
-ms-animation: 0.3s ease-in forwards;
animation: 0.3s ease-in forwards;
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-animation-name: bounceoutB;
-moz-animation-name: bounceoutB;
-ms-animation-name: bounceoutB;
animation-name: bounceoutB;
}
/* 弹出-向下 */
@keyframes bounceoutB {
0% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 0;
transform: translateY(100%);
}
}

BIN
public/picture/pass/yj1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
public/picture/pass/yj2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB