This commit is contained in:
2025-10-29 15:32:26 +08:00
parent d90614805b
commit b7462657cd
78921 changed files with 2753938 additions and 71 deletions

View File

@@ -0,0 +1,59 @@
<?php
/**
*/
namespace addon\memberrecharge\api\controller;
use addon\memberrecharge\model\Memberrecharge as MemberRechargeModel;
use app\api\controller\BaseApi;
/**
* 充值
*/
class Memberrecharge extends BaseApi
{
/**
* 基础信息
*/
public function info()
{
$recharge_id = $this->params['recharge_id'] ?? 0;
if (empty($recharge_id)) {
return $this->response($this->error('', 'REQUEST_RECHARGE_ID'));
}
$field = 'recharge_id,recharge_name,cover_img,face_value,buy_price,point,growth,coupon_id,sale_num,status';
$member_recharge_model = new MemberRechargeModel();
$info = $member_recharge_model->getMemberRechargeInfo([ [ 'recharge_id', '=', $recharge_id ], [ 'site_id', '=', $this->site_id ] ], $field);
return $this->response($info);
}
/**
* 会员充值配置
*/
public function config()
{
$member_recharge_model = new MemberRechargeModel();
$res = $member_recharge_model->getConfig($this->site_id);
return $this->response($res);
}
/**
* 计算信息
*/
public function page()
{
$page = $this->params['page'] ?? 1;
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
$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);
return $this->response($list);
}
}

View File

@@ -0,0 +1,41 @@
<?php
/**
*/
namespace addon\memberrecharge\api\controller;
use addon\memberrecharge\model\MemberrechargeOrder as MemberRechargeOrderModel;
use app\api\controller\BaseApi;
/**
* 充值订单
*/
class Order extends BaseApi
{
/**
* 计算信息
*/
public function page()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$page = $this->params['page'] ?? 1;
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
$field = 'order_id,recharge_id,recharge_name,order_no,cover_img,buy_price,create_time,out_trade_no,face_value,point,growth,coupon_id';
$member_recharge_order_model = new MemberRechargeOrderModel();
$condition = array (
[ 'status', '=', 2 ],
[ 'member_id', '=', $this->member_id ],
[ 'site_id', '=', $this->site_id ]
);
$list = $member_recharge_order_model->getMemberRechargeOrderPageList($condition, $page, $page_size, 'create_time desc', $field);
return $this->response($list);
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace addon\memberrecharge\api\controller;
use app\api\controller\BaseApi;
use addon\memberrecharge\model\MemberrechargeOrderCreate as OrderCreateModel;
/**
* 订单创建
* @author Administrator
*
*/
class Ordercreate extends BaseApi
{
/**
* 创建订单
* @return string
*/
public function create()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$order_create = new OrderCreateModel();
$data = [
'recharge_id' => $this->params['recharge_id'] ?? 0,//套餐id
'face_value' => $this->params['face_value'] ?? 0,//自定义充值面额
'member_id' => $this->member_id,
'order_from' => $this->params[ 'app_type' ],
'order_from_name' => $this->params[ 'app_type_name' ],
'site_id' => $this->site_id,
'store_id' => $this->store_id
];
if ($data[ 'recharge_id' ] == 0 && $data[ 'face_value' ] == 0) {
return $this->response($this->error('', '缺少必填参数数据'));
}
$res = $order_create->create($data);
return $this->response($res);
}
}

View File

@@ -0,0 +1,38 @@
<?php
/**
*/
return [
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据json格式' ]
'template' => [],
// 后台自定义组件——装修
'util' => [],
// 自定义页面路径
'link' => [],
// 自定义图标库
'icon_library' => [],
// uni-app 组件,格式:[ 'name' => '组件名称/文件夹名称', 'path' => '文件路径/目录路径' ]多个逗号隔开自定义组件名称前缀必须是diy-,也可以引用第三方组件
'component' => [],
// uni-app 页面,多个逗号隔开
'pages' => [],
// 模板信息,格式:'title' => '模板名称', 'name' => '模板标识', 'cover' => '模板封面图', 'preview' => '模板预览图', 'desc' => '模板描述'
'info' => [],
// 主题风格配色格式可以自由定义扩展【在uni-app中通过this.themeStyle... 获取定义的颜色字段例如this.themeStyle.main_color】
'theme' => [],
// 自定义页面数据,格式:[ 'title' => '页面名称', 'name' => "页面标识", 'value' => [页面数据json格式] ]
'data' => []
];

View File

@@ -0,0 +1,46 @@
<?php
// 事件定义文件
return [
'bind' => [
],
'listen' => [
//展示活动
'ShowPromotion' => [
'addon\memberrecharge\event\ShowPromotion',
],
//订单支付回调事件
'MemberrechargeOrderPayNotify' => [
'addon\memberrecharge\event\MemberrechargeOrderPayNotify',
],
//关闭订单事件
'MemberrechargeOrderClose' => [
'addon\memberrecharge\event\MemberrechargeOrderClose',
],
'MemberAccountFromType' => [
'addon\memberrecharge\event\MemberAccountFromType',
],
'PrinterTemplateType' => [
'addon\memberrecharge\event\PrinterTemplateType',
],
'PrinterHtml' => [
'addon\memberrecharge\event\PrinterHtml',
],
//打印数据
'PrinterContent' => [
'addon\memberrecharge\event\PrinterContent',
],
'IncomeStatistics' => [
'addon\memberrecharge\event\IncomeStatistics'
],
// 收银订单奖励和计算
'CashierCalculate' => [
'addon\memberrecharge\event\CashierCalculate',
],
],
'subscribe' => [
],
];

View File

@@ -0,0 +1,21 @@
<?php
/**
*/
return [
'name' => 'memberrecharge',
'title' => '充值礼包',
'description' => '会员充值设置',
'type' => 'tool', //插件类型 system :系统插件(自动安装), promotion:扩展营销插件 tool:工具插件
'status' => 1,
'author' => '',
'version' => '5.3.1',
'version_no' => '525231212001',
'content' => '',
];

View File

@@ -0,0 +1,98 @@
<?php
// +----------------------------------------------------------------------
// | 店铺端菜单设置
// +----------------------------------------------------------------------
return [
[
'name' => 'PROMOTION_MEMBERRECHARGE_LIST',
'title' => '充值套餐',
'url' => 'memberrecharge://shop/memberrecharge/lists',
'parent' => 'PROMOTION_TOOL',
'is_show' => 1,
'is_control' => 1,
'sort' => 1,
'child_list' => [
[
'name' => 'PROMOTION_MEMBERRECHARGE_ADD',
'title' => '添加充值套餐',
'url' => 'memberrecharge://shop/memberrecharge/add',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'PROMOTION_MEMBERRECHARGE_EDIT',
'title' => '编辑充值套餐',
'url' => 'memberrecharge://shop/memberrecharge/edit',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'PROMOTION_MEMBERRECHARGE_DETAIL',
'title' => '充值套餐详情',
'url' => 'memberrecharge://shop/memberrecharge/detail',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'PROMOTION_MEMBERRECHARGE_INVALID',
'title' => '停用充值套餐',
'url' => 'memberrecharge://shop/memberrecharge/invalid',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'PROMOTION_MEMBERRECHARGE_DELETE',
'title' => '删除充值套餐',
'url' => 'memberrecharge://shop/memberrecharge/delete',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'PROMOTION_MEMBERRECHARGE_CARD_LISTS',
'title' => '开卡列表',
'url' => 'memberrecharge://shop/memberrecharge/cardlists',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'PROMOTION_MEMBERRECHARGE_CARD_DETAIL',
'title' => '开卡详情',
'url' => 'memberrecharge://shop/memberrecharge/carddetail',
'sort' => 1,
'is_show' => 0
],
[
'name' => 'PROMOTION_MEMBERRECHARGE_SET_CONFIG',
'title' => '充值开关',
'url' => 'memberrecharge://shop/memberrecharge/setConfig',
'sort' => 1,
'is_show' => 0
],
]
],
[
'name' => 'PROMOTION_MEMBERRECHARGE_ORDER_LISTS',
'title' => '充值订单',
'url' => 'memberrecharge://shop/memberrecharge/orderlists',
'parent' => 'ORDER_MANAGE',
'is_show' => 1,
'is_control' => 1,
'sort' => 2,
'is_icon' => 0,
'picture' => 'app/shop/view/public/img/menu_icon/icon13.png',
'picture_selected' => 'app/shop/view/public/img/icon/refill_order.png',
'child_list' => [
[
'name' => 'PROMOTION_MEMBERRECHARGE_ORDER_DETAIL',
'title' => '订单详情',
'url' => 'memberrecharge://shop/memberrecharge/orderdetail',
'sort' => 1,
'is_show' => 0
]
]
],
];

View File

@@ -0,0 +1 @@
SET NAMES 'utf8';

View File

@@ -0,0 +1 @@
SET NAMES 'utf8';

View File

@@ -0,0 +1,15 @@
<?php
namespace addon\memberrecharge\event;
use addon\memberrecharge\model\cashier\Calculate;
class CashierCalculate
{
public function handle($params=[])
{
$calculate_model = new Calculate();
$res = $calculate_model->calculate($params);
return $res;
}
}

View File

@@ -0,0 +1,33 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
use addon\memberrecharge\model\MemberrechargeOrder;
/**
* 资金收入统计
*/
class IncomeStatistics
{
public function handle($param)
{
$money = (new MemberrechargeOrder())->getOrderSum([ ['site_id', '=', $param['site_id'] ], ['pay_time', 'between', [$param['start_time'], $param['end_time']] ] ], 'buy_price')['data'];
return [
[
'title' => '会员充值',
'value' => $money,
'desc' => '统计时间内,所有会员充值金额之和',
'url' => 'memberrecharge://shop/memberrecharge/orderlists'
]
];
}
}

View File

@@ -0,0 +1,26 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
/**
* 应用安装
*/
class Install
{
/**
* 执行安装
*/
public function handle()
{
return success();
}
}

View File

@@ -0,0 +1,51 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
/**
* 会员账户变化来源类型
*/
class MemberAccountFromType
{
public function handle($data)
{
$from_type = [
'balance' => [
'memberrecharge' => [
'type_name' => '会员充值',
'admin_url' => 'admin/order/detail',
'tag_name' => 'order_id'
],
],
'point' => [
'memberrecharge' => [
'type_name' => '会员充值',
'type_url' => '',
],
],
'growth' => [
'memberrecharge' => [
'type_name' => '会员充值',
'type_url' => '',
],
],
];
if ($data == '') {
return $from_type;
} else {
return $from_type[$data] ?? [];
}
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
use addon\memberrecharge\model\MemberrechargeOrder;
/**
* 订单支付回调
*/
class MemberrechargeOrderClose
{
public function handle($params)
{
$order = new MemberrechargeOrder();
$res = $order->cronMemberRechargeOrderClose($params['relate_id']);
return $res;
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
use addon\memberrecharge\model\MemberrechargeOrder;
/**
* 充值订单回调
*/
class MemberrechargeOrderPayNotify
{
public function handle($data)
{
$model = new MemberrechargeOrder();
$res = $model->orderPay($data);
return $res;
}
}

View File

@@ -0,0 +1,125 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
use app\model\member\Member;
use app\model\shop\Shop;
use addon\printer\model\Printer;
use addon\printer\model\PrinterTemplate;
use app\Controller;
use addon\memberrecharge\model\MemberrechargeOrder;
use app\model\system\Site;
/**
* 打印内容
*/
class PrinterContent extends Controller
{
public function handle($params)
{
if ($params[ 'type' ] == 'recharge') {
$order_id = $params[ 'order_id' ];
$order_common_model = new MemberrechargeOrder();
$order_info = $order_common_model->getMemberRechargeOrderInfo([ [ 'order_id', '=', $order_id ] ])[ 'data' ];
$params[ 'site_id' ] = $order_info[ 'site_id' ] ?? 0;
$member = new Member();
$member_info = $member->getMemberInfo([ [ 'member_id', '=', $order_info[ 'member_id' ] ] ], 'balance, balance_money')[ 'data' ] ?? [];
$account = number_format($member_info[ 'balance' ] + $member_info[ 'balance_money' ], 2, '.', '');
//获取店铺信息
$shop_model = new Shop();
$shop_info = $shop_model->getShopInfo([ [ 'site_id', '=', $params[ 'site_id' ] ] ])[ 'data' ];
$site_name = ( new Site() )->getSiteInfo([ [ 'site_id', '=', $params[ 'site_id' ] ] ], 'site_name')[ 'data' ][ 'site_name' ] ?? '';
//获取打印机列表
$print_model = new Printer();
$printer_data = $print_model->getPrinterList([ [ 'site_id', '=', $params[ 'site_id' ] ], [ 'store_id', '=', $order_info[ 'store_id' ] ], [ 'recharge_open', '=', 1 ] ])[ 'data' ] ?? [];
$res_data = [];
foreach ($printer_data as $k => $v) {
//此处应该根据打印机不同分别设置返回不同的数据。当前为易联云
$array = [];
$array[ 'printer_info' ] = $v;
$print_template_model = new PrinterTemplate();
$template_id = $v[ 'recharge_template_id' ];
$print_template = $print_template_model->getPrinterTemplateInfo([ [ 'template_id', '=', $template_id ] ])[ 'data' ];
$array[ 'printer_code' ] = $v[ 'printer_code' ]; //商户授权机器码
$array[ 'origin_id' ] = $order_info[ 'order_no' ]; //内部订单号(32位以内)
/**文本接口开始**/
$content = "<MN>" . $v[ 'recharge_print_num' ] . "</MN>";
//小票名称
if ($print_template[ 'title' ] != '') {
$content .= "<center>" . $print_template[ 'title' ] . "</center>";
$content .= str_repeat('.', 32);
}
//商城名称
if ($print_template[ 'head' ] == 1) {
$content .= "<FH2><FS><center>" . $site_name . "</center></FS></FH2>";
$content .= str_repeat('.', 32);
}
$content .= "订单时间:" . date("Y-m-d H:i", $order_info[ 'pay_time' ]) . "\n";
$content .= "订单编号:" . $order_info[ 'order_no' ] . "\n";
$content .= "支付方式:" . $order_info[ 'pay_type_name' ] . "\n";
$content .= str_repeat('.', 32);
$content .= "充值金额:¥" . $order_info[ "face_value" ] . "\n";
$content .= "实付金额:¥" . $order_info[ "price" ] . "\n";
$content .= "会员余额:¥" . $account . "\n";
/******************** 买家信息 **************************/
//买家姓名
if ($print_template[ 'buy_name' ] == 1) {
$content .= "会员:" . $order_info[ "nickname" ] . "\n";
$content .= str_repeat('.', 32);
}
/******************** 商城信息 **************************/
//联系方式
if ($print_template[ 'shop_mobile' ] == 1) {
$content .= "" . $shop_info[ "mobile" ] . "\n";
}
//地址
if ($print_template[ 'shop_address' ] == 1) {
$content .= "" . $shop_info[ 'province_name' ] . $shop_info[ 'city_name' ] . $shop_info[ 'district_name' ] . $shop_info[ 'address' ] . "\n";
}
if ($print_template[ 'shop_mobile' ] == 1 || $print_template[ 'shop_address' ] == 1) {
$content .= str_repeat('.', 32);
}
//二维码
if ($print_template[ 'shop_qrcode' ] == 1) {
$content .= "<QR>" . $print_template[ 'qrcode_url' ] . "</QR>";
$content .= str_repeat('.', 32);
}
//底部内容
if (!empty($print_template[ 'bottom' ])) {
$content .= "<center>" . $print_template[ 'bottom' ] . "</center>";
}
$array[ 'content' ] = $content;
$res_data[] = $array;
}
return $res_data;
}
}
}

View File

@@ -0,0 +1,26 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
use app\Controller;
/**
* 会员充值小票打印打印机添加
*/
class PrinterHtml extends Controller
{
public function handle($data)
{
return $this->fetch('addon/memberrecharge/shop/view/template/printer_template.html');
}
}

View File

@@ -0,0 +1,31 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
/**
* 会员充值小票打印
*/
class PrinterTemplateType
{
public function handle($data)
{
return [
[
'type' => 'recharge',
'type_name' => '会员充值',
'edit' => 'addon/memberrecharge/shop/view/template/recharge_template.html',
'add' => 'addon/memberrecharge/shop/view/template/recharge_template.html',
]
];
}
}

View File

@@ -0,0 +1,27 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
/**
* 活动类型
*/
class PromotionType
{
/**
* 活动类型
* @return array
*/
public function handle()
{
return [ "name" => "充值礼包", "type" => "memberrecharge" ];
}
}

View File

@@ -0,0 +1,84 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
use addon\memberrecharge\model\Memberrecharge;
/**
* 活动展示
*/
class ShowPromotion
{
public $promotion_type = 'unlimited_time';
/**
* 活动展示
* @param array $params
* @return array
*/
public function handle($params = [])
{
$data = [
'shop' => [
[
//插件名称
'name' => 'memberrecharge',
//展示分类根据平台端设置admin平台营销shop店铺营销member:会员营销, tool:应用工具)
'show_type' => 'member',
//展示主题
'title' => '充值礼包',
//展示介绍
'description' => '提高客户充值金额',
//展示图标
'icon' => 'addon/memberrecharge/icon.png',
//跳转链接
'url' => 'memberrecharge://shop/memberrecharge/lists',
'summary' => $this->summary($params)
]
]
];
return $data;
}
private function summary($params)
{
if (empty($params)) {
return [];
}
if(isset($params['promotion_type']) && $params['promotion_type'] != $this->promotion_type){
return [];
}
if (isset($params[ 'count' ]) || isset($params[ 'summary' ])) $config = ( new Memberrecharge() )->getConfig($params[ 'site_id' ])[ 'data' ];
//获取活动数量
if (isset($params[ 'count' ])) {
$count = model("member_recharge")->getCount([ [ 'site_id', '=', $params[ 'site_id' ] ] ]);
return [
'count' => $count
];
}
//获取活动概况,需要获取开始时间与结束时间
if (isset($params[ 'summary' ])) {
$count = model("member_recharge")->getCount([ [ 'site_id', '=', $params[ 'site_id' ] ], [ 'status', '=', 1 ] ]);
return [
'unlimited_time' => [
'status' => $config[ 'is_use' ],
'detail' => $count ? '已配置' . $count . '个充值套餐' : '未配置充值套餐',
'switch_type' => 'switch',
'config_key' => 'MEMBER_RECHARGE_CONFIG'
]
];
}
}
}

View File

@@ -0,0 +1,26 @@
<?php
/**
*/
namespace addon\memberrecharge\event;
/**
* 应用卸载
*/
class UnInstall
{
/**
* 执行卸载
*/
public function handle()
{
return success();
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,133 @@
<?php
/**
*/
namespace addon\memberrecharge\model;
use addon\coupon\model\Coupon;
use app\dict\member_account\AccountDict;
use app\model\BaseModel;
use addon\coupon\model\CouponType;
use app\model\member\MemberAccount;
use app\model\system\Site;
use think\facade\Cache;
/**
* 开卡
*/
class MemberRechargeCard extends BaseModel
{
/**
* 开卡
* @param $data
* @return array
*/
public function addMemberRechargeCard($data)
{
$site_model = new Site();
$site_info = $site_model->getSiteInfo([ [ 'site_id', '=', $data[ 'site_id' ] ] ]);
$card_account = substr(md5(date('YmdHis') . mt_rand(100, 999)), 8, 16);
$card_data = [
'recharge_id' => $data[ 'recharge_id' ],
'site_id' => $data[ 'site_id' ],
'site_name' => $site_info[ 'data' ][ 'site_name' ],
'recharge_name' => $data[ 'recharge_name' ],
'card_account' => $card_account,
'cover_img' => $data[ 'cover_img' ],
'face_value' => $data[ 'face_value' ],
'point' => $data[ 'point' ],
'growth' => $data[ 'growth' ],
'coupon_id' => $data[ 'coupon_id' ],
'buy_price' => $data[ 'buy_price' ],
'member_id' => $data[ 'member_id' ],
'member_img' => $data[ 'member_img' ],
'nickname' => $data[ 'nickname' ],
'order_id' => $data[ 'order_id' ],
'order_no' => $data[ 'order_no' ],
'use_status' => $data[ 'use_status' ],
'create_time' => time(),
'use_time' => $data[ 'use_time' ]
];
$res = model('member_recharge_card')->add($card_data);
Cache::tag("member_recharge_card")->clear();
return $this->success($res);
}
/**
* 开卡发放礼包
* @param $order_info
*/
public function addMemberAccount($order_info)
{
$member_account = new MemberAccount();
//修改用户的余额
$member_account->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], AccountDict::balance, $order_info[ 'face_value' ], 'memberrecharge', '0', '会员充值');
//积分
if ($order_info[ 'point' ] > 0) {
$member_account->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], 'point', $order_info[ 'point' ], 'memberrecharge', '0', '会员充值奖励');
}
//成长值
if ($order_info[ 'growth' ] > 0) {
$member_account->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], 'growth', $order_info[ 'growth' ], 'memberrecharge', '0', '会员充值奖励');
}
//添加优惠券
if (!empty($order_info[ 'coupon_id' ])) {
$coupon_model = new Coupon();
$coupon_id = explode(',', $order_info[ 'coupon_id' ]);
$coupon_list = array_map(function($value) {
return [ 'coupon_type_id' => $value, 'num' => 1 ];
}, $coupon_id);
$coupon_model->giveCoupon($coupon_list, $order_info[ 'site_id' ], $order_info[ 'member_id' ], 6);
}
}
/**
* 套餐详情
* @param array $condition
* @param string $field
* @return array
*/
public function getMemberRechargeCardInfo($condition = [], $field = '*')
{
$info = model('member_recharge_card')->getInfo($condition, $field);
if ($info) {
//获取优惠券信息
if ($info[ 'coupon_id' ]) {
//优惠券字段
$coupon_field = '*';
$model = new CouponType();
$coupon_list = $model->getCouponTypeList([ [ 'coupon_type_id', 'in', $info[ 'coupon_id' ] ] ], $coupon_field);
$info[ 'coupon_list' ] = $coupon_list[ 'data' ];
}
}
Cache::tag("member_recharge_card")->clear();
return $this->success($info);
}
/**
* 开卡列表
* @param array $condition
* @param int $page
* @param int $page_size
* @param string $order
* @param string $field
* @return array
*/
public function getMemberRechargeCardPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
{
$list = model('member_recharge_card')->pageList($condition, $field, $order, $page, $page_size);
Cache::tag("member_recharge_card")->clear();
return $this->success($list);
}
}

View File

@@ -0,0 +1,157 @@
<?php
/**
*/
namespace addon\memberrecharge\model;
use addon\coupon\model\CouponType;
use app\model\BaseModel;
use think\facade\Cache;
use app\model\system\Config as ConfigModel;
use app\model\upload\Upload;
/**
* 会员充值
*/
class Memberrecharge extends BaseModel
{
/**
* 添加套餐
* @param $data
* @return array
*/
public function addMemberRecharge($data)
{
$data[ 'create_time' ] = time();
$data[ 'status' ] = 1;
$res = model('member_recharge')->add($data);
Cache::tag("member_recharge")->clear();
return $this->success($res);
}
/**
* 编辑套餐
* @param array $condition
* @param $data
* @return array
*/
public function editMemberRecharge($condition, $data)
{
$data[ 'update_time' ] = time();
$recharge_info = model('member_recharge')->getInfo($condition);
if (!empty($recharge_info[ 'cover_img' ]) && !empty($data[ 'cover_img' ]) && $recharge_info[ 'cover_img' ] != $data[ 'cover_img' ]) {
$upload_model = new Upload();
$upload_model->deletePic($recharge_info[ 'cover_img' ], $recharge_info[ 'site_id' ]);
}
$res = model('member_recharge')->update($data, $condition);
Cache::tag("member_recharge")->clear();
return $this->success($res);
}
/**
* 删除套餐详情
* @param array $condition
* @return mixed
*/
public function deleteMemberRecharge($condition = [])
{
$recharge_info = model('member_recharge')->getInfo($condition);
if (!empty($recharge_info[ 'cover_img' ])) {
$upload_model = new Upload();
$upload_model->deletePic($recharge_info[ 'cover_img' ], $recharge_info[ 'site_id' ]);
}
$res = model('member_recharge')->delete($condition);
Cache::tag("member_recharge")->clear();
return $this->success($res);
}
/**
* 套餐详情
* @param array $condition
* @param string $field
* @return array
*/
public function getMemberRechargeInfo($condition = [], $field = '*')
{
$recharge = model('member_recharge')->getInfo($condition, $field);
if ($recharge) {
//获取优惠券信息
if ($recharge[ 'coupon_id' ]) {
//优惠券字段
$coupon_field = 'coupon_type_id,coupon_name,money,count,lead_count,max_fetch,at_least,end_time,image,validity_type,fixed_term,type,discount';
$model = new CouponType();
$coupon = $model->getCouponTypeList([ [ 'coupon_type_id', 'in', $recharge[ 'coupon_id' ] ] ], $coupon_field);
$recharge[ 'coupon_list' ] = $coupon[ 'data' ];
}
}
Cache::tag("member_recharge")->clear();
return $this->success($recharge);
}
/**
* 套餐分页列表
* @param array $condition
* @param int $page
* @param int $page_size
* @param string $order
* @param string $field
* @return array
*/
public function getMemberRechargePageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
{
$list = model('member_recharge')->pageList($condition, $field, $order, $page, $page_size);
Cache::tag("member_recharge")->clear();
return $this->success($list);
}
/**
* 套餐列表
* @param array $condition
* @param string $order
* @param string $field
* @return array
*/
public function getMemberRechargeList($condition = [], $order = '', $field = '*')
{
$list = model('member_recharge')->getList($condition, $field, $order);
return $this->success($list);
}
/**
* 设置会员充值配置
* @param $data
* @param $is_use
* @param $site_id
* @return array
*/
public function setConfig($data, $is_use, $site_id)
{
$config = new ConfigModel();
$res = $config->setConfig($data, '会员充值配置', $is_use, [ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'MEMBER_RECHARGE_CONFIG' ] ]);
return $res;
}
/**
* 获取会员充值配置
* @param $site_id
* @return array
*/
public function getConfig($site_id)
{
$config = new ConfigModel();
$res = $config->getConfig([ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'MEMBER_RECHARGE_CONFIG' ] ]);
return $res;
}
}

View File

@@ -0,0 +1,307 @@
<?php
/**
*/
namespace addon\memberrecharge\model;
use addon\weapp\model\Weapp;
use app\model\BaseModel;
use addon\coupon\model\CouponType;
use app\model\member\Member;
use app\model\system\Stat;
use think\facade\Cache;
use think\facade\Log;
/**
* 订单
*/
class MemberrechargeOrder extends BaseModel
{
/**
* 基础支付方式(不考虑实际在线支付方式或者货到付款方式)
* @var unknown
*/
public $pay_type = [
];
/**
* 获取支付方式
* @return unknown
*/
public function getPayType()
{
//获取订单基础的其他支付方式
$pay_type = $this->pay_type;
//获取当前所有在线支付方式
$onlinepay = event('PayType');
if (!empty($onlinepay)) {
foreach ($onlinepay as $k => $v) {
$pay_type[ $v[ 'pay_type' ] ] = $v[ 'pay_type_name' ];
}
}
$trade_pay_type_list = event('TradePayType', []);
if (!empty($trade_pay_type_list)) {
foreach ($trade_pay_type_list as $k => $v) {
if (!empty($v)) {
$pay_type = array_merge($pay_type, $v);
}
}
}
return $pay_type;
}
/**
* 订单详情
* @param array $condition
* @param string $field
* @param string $alias
* @param array $join
* @return array
*/
public function getMemberRechargeOrderInfo($condition = [], $field = '*', $alias = 'a', $join = [])
{
$order = model('member_recharge_order')->getInfo($condition, $field, $alias, $join);
if ($order) {
//获取优惠券信息
$coupon_id = $order[ 'coupon_id' ] ?? 0;
if ($coupon_id > 0) {
//优惠券字段
$coupon_field = 'coupon_type_id,coupon_name,money,count,lead_count,max_fetch,at_least,end_time,image,validity_type,fixed_term,type';
$model = new CouponType();
$coupon = $model->getCouponTypeList([ [ 'coupon_type_id', 'in', $order[ 'coupon_id' ] ] ], $coupon_field);
$order[ 'coupon_list' ] = $coupon;
}
}
return $this->success($order);
}
/**
* 订单列表
* @param array $condition
* @param int $page
* @param int $page_size
* @param string $order
* @param string $field
* @param string $alias
* @param array $join
* @return array
*/
public function getMemberRechargeOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [])
{
$list = model('member_recharge_order')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
if (!empty($list[ 'list' ])) {
$coupon_ids = '';
foreach ($list[ 'list' ] as $k => $v) {
if (!empty($v[ 'coupon_id' ])) {
$coupon_ids = empty($coupon_ids) ? $v[ 'coupon_id' ] : $coupon_ids . ',' . $v[ 'coupon_id' ];
}
}
$coupon_list = [];
if (!empty($coupon_ids)) {
$coupon_list = model('promotion_coupon_type')->getList([ [ 'coupon_type_id', 'in', $coupon_ids ] ], 'coupon_type_id,coupon_name');
}
if (!empty($coupon_list)) {
$key = array_column($coupon_list, 'coupon_type_id');
$coupon_list = array_combine($key, $coupon_list);
}
foreach ($list[ 'list' ] as $k => $v) {
$list[ 'list' ][ $k ][ 'coupon_name' ] = '';
$coupon_name = '';
if (!empty($v[ 'coupon_id' ])) {
$coupon_array = explode(',', $v[ 'coupon_id' ]);
foreach ($coupon_array as $value) {
$coupon_name_value = $coupon_list[ $value ][ 'name' ] ?? '';
$coupon_name .= ',' . $coupon_name_value;
}
$coupon_name = ltrim($coupon_name, ',');
}
$list[ 'list' ][ $k ][ 'coupon_name' ] = $coupon_name;
}
}
return $this->success($list);
}
/**
* 支付回调
* @param $data
* @return array|\multitype
*/
public function orderPay($data)
{
$order_field = 'order_id,recharge_id,recharge_name,order_no,cover_img,face_value,buy_price,point,growth,coupon_id,price,pay_type,status,create_time,pay_time,member_id,member_img,nickname,site_id,out_trade_no,order_from';
$order_info = $this->getMemberRechargeOrderInfo([ [ 'out_trade_no', '=', $data[ 'out_trade_no' ] ] ], $order_field)[ 'data' ];
if ($order_info[ 'status' ] == 1) {
model('member_recharge_order')->startTrans();
try {
$pay_list = $this->getPayType();
$pay_type_name = '';
if (!empty($data[ 'pay_type' ])) {
$pay_type_name = $pay_list[ $data[ 'pay_type' ] ];
}
//修改订单状态
$order_data = [
'pay_type' => $data[ 'pay_type' ],
'pay_type_name' => $pay_type_name,
'pay_time' => time(),
'price' => $order_info[ 'buy_price' ],
'status' => 2
];
$res = model('member_recharge_order')->update($order_data, [ [ 'out_trade_no', '=', $data[ 'out_trade_no' ] ] ]);
//添加开卡记录
$card_model = new MemberRechargeCard();
$order_info[ 'use_status' ] = 2;
$order_info[ 'use_time' ] = time();
$card_model->addMemberRechargeCard($order_info);
//发放礼包
$card_model->addMemberAccount($order_info);
//获取套餐信息
$recharge_model = new Memberrecharge();
$recharge_info = $recharge_model->getMemberRechargeInfo([ [ 'recharge_id', '=', $order_info[ 'recharge_id' ] ] ], 'sale_num,coupon_id');
//增加发放数
if (!empty($recharge_info[ 'data' ])) {
$sale_num = $recharge_info[ 'data' ][ 'sale_num' ] + 1;
$recharge_model->editMemberRecharge([ [ 'recharge_id', '=', $order_info[ 'recharge_id' ] ] ], [ 'sale_num' => $sale_num ]);
}
$is_stat = $data[ 'is_stat' ] ?? true;
if ($is_stat) {
event('MemberRechargeOrderPay', [ 'order_id' => $order_info[ 'order_id' ], 'order_from' => $order_info[ 'order_from' ] ]);
$stat_model = new Stat();
$stat_res = $stat_model->switchStat([
'type' => 'recharge',
'data' => [
'order_id' => $order_info[ 'order_id' ],
'site_id' => $order_info[ 'site_id' ]
]
]);
}
// 小程序录入发货信息
$member_service = new Member();
$order_info[ 'member_info' ] = $member_service->getMemberInfo([
[ 'site_id', '=', $order_info[ 'site_id' ] ],
[ 'member_id', '=', $order_info[ 'member_id' ] ]
], 'weapp_openid')[ 'data' ];
$this->uploadShippingInfo($order_info);
model('member_recharge_order')->commit();
return $this->success($res);
} catch (\Exception $e) {
model('member_recharge_order')->rollback();
Log::write('memberrechargeerr' . json_encode($e->getMessage() . $e->getFile() . $e->getLine()));
return $this->error('', $e->getMessage());
}
} else {
return $this->success(true);
}
}
/**
* 定时关闭订单
* @param $order_id
* @return array
*/
public function cronMemberRechargeOrderClose($order_id)
{
//获取订单信息
$order_info = $this->getMemberRechargeOrderInfo([ [ 'order_id', '=', $order_id ] ], 'status')[ 'data' ];
if (empty($order_info)) {
$res = true;
} else {
if ($order_info[ 'status' ] == 1) {
//删除订单
$res = model('member_recharge_order')->delete([ [ 'order_id', '=', $order_id ] ]);
Cache::tag("member_recharge_order")->clear();
} else {
$res = true;
}
}
return $this->success($res);
}
/**
* 获取总数
* @param array $where
* @param string $field
* @param string $alias
* @param null $join
* @param null $group
* @return array
*/
public function getOrderCount($where = [], $field = '*', $alias = 'a', $join = null, $group = null)
{
$res = model('member_recharge_order')->getCount($where, $field, $alias, $join, $group);
return $this->success($res);
}
/**
* 获取总和
* @param array $where
* @param string $field
* @param string $alias
* @param null $join
* @return array
*/
public function getOrderSum($where = [], $field = '*', $alias = 'a', $join = null)
{
$res = model('member_recharge_order')->getSum($where, $field, $alias, $join);
return $this->success($res);
}
/**
* 小程序录入发货信息
* @param $order_info
* @return array
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function uploadShippingInfo($order_info)
{
$shipping_list = [
[
'tracking_no' => '', // 物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128]
'express_company' => '', // 物流公司编码快递公司ID参见「查询物流公司编码列表」物流快递发货时必填 示例值: DHL 字符字节限制: [1, 128]
'item_desc' => str_sub($order_info[ 'recharge_name' ], 100), // 商品信息,例如:微信红包抱枕*1个限120个字以内
'contact' => [
'consignor_contact' => '',
'receiver_contact' => ''
]
]
];
$data = [
'site_id' => $order_info[ 'site_id' ],
'out_trade_no' => $order_info[ 'out_trade_no' ],
'logistics_type' => 3, // 3、虚拟商品虚拟商品例如话费充值点卡等无实体配送形式
'delivery_mode' => 1, // 发货模式发货模式枚举值1、UNIFIED_DELIVERY统一发货
'shipping_list' => $shipping_list,
'weapp_openid' => $order_info[ 'member_info' ][ 'weapp_openid' ], // 用户标识用户在小程序appid下的唯一标识。 下单前需获取到用户的Openid 示例值: oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 字符字节限制: [1, 128]
'is_all_delivered' => false
];
$weapp_model = new Weapp($order_info[ 'site_id' ]);
$res = $weapp_model->orderShippingUploadShippingInfoByData($data);
return $res;
}
}

View File

@@ -0,0 +1,125 @@
<?php
/**
*/
namespace addon\memberrecharge\model;
use app\model\BaseModel;
use app\model\order\OrderCreate;
use app\model\system\Cron;
use app\model\system\Pay;
use app\model\order\Config;
use app\model\member\Member as MemberModel;
/**
* 订单创建(充值)
*
* @author Administrator
*
*/
class MemberrechargeOrderCreate extends BaseModel
{
/**
* 订单创建
* @param $data
* @return \app\model\order\unknown|array|mixed
*/
public function create($data)
{
//获取用户头像
$member_model = new MemberModel();
$member = $member_model->getMemberInfo([ [ 'member_id', '=', $data[ 'member_id' ] ] ], 'headimg,nickname');
$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';
$recharge_info = $recharge_model->getMemberRechargeInfo([ [ 'recharge_id', '=', $data[ 'recharge_id' ] ] ], $field)['data'];
if (empty($recharge_info)) {
return $this->error('', '无效的充值套餐');
}
} else {
$recharge_info = array (
"recharge_id" => 0,
"recharge_name" => '自定义面额充值',
"cover_img" => '',
"face_value" => $data[ 'face_value' ],
"buy_price" => $data[ 'face_value' ],
"point" => 0,
"growth" => 0,
"coupon_id" => 0,
);
}
//创建或加入
$pay = new Pay();
$out_trade_no = $pay->createOutTradeNo($data[ 'member_id' ]);
$order_no = (new OrderCreate())->createOrderNo();
$order_data = [
'recharge_id' => $data[ 'recharge_id' ],
'order_no' => $order_no,
'out_trade_no' => $out_trade_no,
'recharge_name' => $recharge_info[ 'recharge_name' ],
'cover_img' => $recharge_info[ 'cover_img' ],
'face_value' => $recharge_info[ 'face_value' ],
'buy_price' => $recharge_info[ 'buy_price' ],
'pay_money' => $recharge_info[ 'buy_price' ],
'point' => $recharge_info[ 'point' ],
'growth' => $recharge_info[ 'growth' ],
'coupon_id' => $recharge_info[ 'coupon_id' ],
'status' => 1,
'create_time' => time(),
'member_id' => $data[ 'member_id' ],
'member_img' => $member_info[ 'headimg' ],
'nickname' => $member_info[ 'nickname' ],
'order_from' => $data[ 'order_from' ],
'order_from_name' => $data[ 'order_from_name' ],
'site_id' => $data[ 'site_id' ],
'store_id' => $data[ 'store_id' ] ?? 0,
'remark' => $data[ 'remark' ] ?? '',
'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 = $config_model->getOrderEventTimeConfig($data[ 'site_id' ])[ "data" ];
$now_time = time();
if (!empty($order_config)) {
$execute_time = $now_time + $order_config[ "value" ][ "auto_close" ] * 60;//自动关闭时间
} else {
$execute_time = $now_time + 3600;//尚未配置 默认一天
}
$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

@@ -0,0 +1,117 @@
<?php
namespace addon\memberrecharge\model\cashier;
use app\model\BaseModel;
class Calculate extends BaseModel
{
/**
* 计算
* @param $data
* @return array
*/
public function calculate($data)
{
$order_object = $data['order_object'];
$type = $order_object->param[ 'type' ] ?? '';
if ($type == 'recharge') {
$order_name = '';
$goods_list = [];
$order_object->cashier_order_type = 'recharge';
$goods_money = 0;
$sku_array = $order_object->param[ 'sku_array' ];
$reward = $data[ 'reward' ] ?? [];
$reward_goods_list = $data[ 'reward_goods_list' ] ?? [];
$sku_ids = [];
$money_array = [];
foreach ($sku_array as $k => $v) {
$item_recharge_id = $v[ 'recharge_id' ] ?? 0;
if ($item_recharge_id > 0) {
$sku_ids[] = $item_recharge_id;
}
$item_money = $v[ 'money' ] ?? 0;
if ($item_money > 0) {
$money_array[] = $item_money;
}
}
$goods_image = 'upload/cashier/member-recharge-icon.png';
if (!empty($sku_ids)) {
$member_recharge_condition = array (
[ 'recharge_id', 'in', $sku_ids ]
);
$member_recharge_list = model('member_recharge')->getList($member_recharge_condition);
if (!empty($member_recharge_list)) {
foreach ($member_recharge_list as $k => $v) {
$item_sku_id = $v[ 'recharge_id' ];
$price = $v[ 'buy_price' ];
$item_goods_id = 0;//sku_id已经是充值个体组件
$num = 1;
$item_goods_money = $price * $num;
$goods_money += $item_goods_money;
$sku_name = '充值套餐' . $v[ 'recharge_name' ];
$order_name = string_split($order_name, ',', '充值套餐' . $v[ 'recharge_name' ]);
$goods_list[] = array (
'goods_id' => $item_goods_id,
'sku_id' => $item_sku_id,
'price' => $price,
'num' => $num,
'goods_money' => $item_goods_money,
'sku_name' => $sku_name,
'real_goods_money' => $item_goods_money,
'goods_name' => '充值礼包',
'goods_image' => $goods_image,
'spec_name' => $v[ 'recharge_name' ],
'goods_class' => 'recharge',
'goods_class_name' => '充值礼包',
'is_virtual' => 1
);
}
}
}
if (!empty($money_array)) {
foreach ($money_array as $k => $v) {
$item_sku_id = 0;
$price = $v;
if ($price > 0) {
$item_goods_id = 0;
$num = 1;
$item_goods_money = $price * $num;
$goods_money += $item_goods_money;
$sku_name = '自定义充值金额' . $item_goods_money;
$order_name = string_split($order_name, ',', '自定义充值金额' . $item_goods_money);
$goods_list[] = array (
'goods_id' => $item_goods_id,
'sku_id' => $item_sku_id,
'price' => $price,
'num' => $num,
'goods_money' => $item_goods_money,
'real_goods_money' => $item_goods_money,
'sku_name' => $sku_name,
'goods_name' => '充值',
'goods_image' => $goods_image,
'spec_name' => '自定义充值',
'goods_class' => 'recharge',
'goods_class_name' => '充值礼包',
'is_virtual' => 1
);
}
}
}
if (empty($goods_list)) throw new \Exception('缺少必填参数商品数据');
$order_object->goods_money = $goods_money;
$order_object->real_goods_money = $goods_money;
$order_object->goods_list = $goods_list;
$order_object->order_name = $order_name;
return true;
}
}
}

View File

@@ -0,0 +1,497 @@
<?php
/**
*/
namespace addon\memberrecharge\shop\controller;
use addon\memberrecharge\model\MemberRechargeCard as MemberRechargeCardModel;
use addon\memberrecharge\model\Memberrecharge as MemberRechargeModel;
use addon\memberrecharge\model\MemberrechargeOrder as MemberRechargeOrderModel;
use addon\memberrecharge\model\MemberrechargeOrder;
use addon\printer\model\PrinterOrder;
use app\model\store\Store as StoreModel;
use app\shop\controller\BaseShop;
use think\App;
/**
* 会员充值
*/
class Memberrecharge extends BaseShop
{
public function __construct(App $app = null)
{
$this->replace = [
'MEMBERRECHARGE_CSS' => __ROOT__ . '/addon/memberrecharge/shop/view/public/css',
'MEMBERRECHARGE_JS' => __ROOT__ . '/addon/memberrecharge/shop/view/public/js',
'MEMBERRECHARGE_IMG' => __ROOT__ . '/addon/memberrecharge/shop/view/public/img',
];
parent::__construct($app);
}
//套餐字段
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 = 'a.order_id,a.recharge_name,a.recharge_id,a.order_no,a.out_trade_no,a.member_id,a.cover_img,a.face_value,a.buy_price,a.point,a.growth,a.coupon_id,a.price,a.pay_type,a.pay_type_name,a.status,a.create_time,a.pay_time,a.member_img,a.nickname,a.order_from_name,a.order_from,IFNULL(s.store_name,"") as store_name';
//优惠券字段
protected $coupon_field = 'coupon_type_id,coupon_name,money,count,lead_count,max_fetch,at_least,end_time,image,validity_type,fixed_term';
/**
* 充值会员套餐列表
* @return array|mixed
*/
public function lists()
{
$model = new MemberRechargeModel();
//获取续签信息
if (request()->isJson()) {
$status = input('status', '');//套餐状态
$condition = [];
if ($status) {
$condition[] = [ 'status', '=', $status ];
}
$condition[] = [ 'site_id', '=', $this->site_id ];
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getMemberRechargePageList($condition, $page, $page_size, 'recharge_id desc', $this->field);
return $list;
} else {
$config = $model->getConfig($this->site_id);
$config = $config[ 'data' ];
$this->assign("config", $config);
return $this->fetch('memberrecharge/lists');
}
}
/**
* 添加充值套餐
* @return array|mixed
*/
public function add()
{
if (request()->isJson()) {
$data = [
'site_id' => $this->site_id,
'recharge_name' => input('recharge_name', ''),//套餐名称
'cover_img' => input('cover_img', ''),//封面
'face_value' => input('face_value', ''),//面值
'buy_price' => input('buy_price', ''),//价格
'point' => input('point', ''),//赠送积分
'growth' => input('growth', ''),//赠送成长值
'coupon_id' => input('coupon_id', '')//优惠券id
];
$model = new MemberRechargeModel();
return $model->addMemberRecharge($data);
} else {
return $this->fetch('memberrecharge/add');
}
}
/**
* 编辑充值套餐
* @return array|mixed
*/
public function edit()
{
$rechargeModel = new MemberRechargeModel();
$recharge_id = input('recharge_id', '');
if (request()->isJson()) {
$data = [
'recharge_name' => input('recharge_name', ''),//套餐名称
'cover_img' => input('cover_img', ''),//封面
'face_value' => input('face_value', ''),//面值
'buy_price' => input('buy_price', ''),//价格
'point' => input('point', ''),//赠送积分
'growth' => input('growth', ''),//赠送成长值
'coupon_id' => input('coupon_id', '')//优惠券id
];
return $rechargeModel->editMemberRecharge(
[
[ 'recharge_id', '=', $recharge_id ],
[ 'site_id', '=', $this->site_id ]
], $data);
} else {
//获取套餐详情
$recharge = $rechargeModel->getMemberRechargeInfo(
[
[ 'recharge_id', '=', $recharge_id ],
[ 'site_id', '=', $this->site_id ]
],
$this->field
);
if (empty($recharge[ 'data' ])) $this->error('未获取到套餐数据', href_url('memberrecharge://shop/memberrecharge/lists'));
$this->assign('recharge', $recharge);
return $this->fetch('memberrecharge/edit');
}
}
/**
* 充值套餐详情
* @return mixed
*/
public function detail()
{
$recharge_model = new MemberRechargeModel();
$recharge_id = input('recharge_id', '');
//获取套餐详情
$info = $recharge_model->getMemberRechargeInfo(
[
[ 'recharge_id', '=', $recharge_id ],
[ 'site_id', '=', $this->site_id ]
],
$this->field
)[ 'data' ] ?? [];
if (empty($info)) $this->error('未获取到套餐数据', href_url('memberrecharge://shop/memberrecharge/lists'));
$this->assign('info', $info);
return $this->fetch('memberrecharge/detail');
}
/**
* 停用充值套餐
* @return array
*/
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;
}
/**
* 开启充值套餐
* @return array
*/
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;
}
/**
* 删除充值套餐
* @return mixed
*/
public function delete()
{
$model = new MemberRechargeModel();
$recharge_id = input('recharge_id', '');
return $model->deleteMemberRecharge([ [ 'recharge_id', '=', $recharge_id ] ]);
}
/**
* 开卡列表
* @return array|mixed
*/
public function cardLists()
{
$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 ];
//获取续签信息
if (request()->isJson()) {
$status = input('use_status', '');//使用状态
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');
}
}
/**
* 开卡详情
* @return mixed
*/
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');
}
/**
* 订单列表
* @return array|mixed
*/
public function orderLists()
{
$recharge_id = input('recharge_id', 0);
$model = new MemberRechargeOrderModel();
//获取续签信息
if (request()->isJson()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$nickname = input('nickname', '');
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$order_no = input('order_no', '');
$store_id = input('store_id', '');
$condition = [
// [ 'a.status', '=', 2 ],
[ 'a.site_id', '=', $this->site_id ]
];
if ($recharge_id > 0) {
$condition[] = [ 'recharge_id', '=', $recharge_id ];
}
if ($nickname) {
$condition[] = [ 'a.nickname', 'like', '%' . $nickname . '%' ];
}
if ($order_no) {
$condition[] = [ 'a.order_no', '=', $order_no ];
}
if ($store_id != '') {
$condition[] = [ 'a.store_id', '=', $store_id ];
}
//支付时间
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ "a.pay_time", ">=", date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ "a.pay_time", "<=", date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty($end_time)) {
$condition[] = [ 'a.pay_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
$alias = 'a';
$join[] = [
'store s',
's.store_id = a.store_id',
'left'
];
$order = 'a.create_time desc';
$list = $model->getMemberRechargeOrderPageList($condition, $page, $page_size, $order, $this->order_field, $alias, $join);
return $list;
} else {
$this->assign('recharge_id', $recharge_id);
$order_num = $model->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 2 ] ], 'order_id')[ 'data' ];
$this->assign('order_num', $order_num);
$order_money = $model->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 2 ] ], 'price')[ 'data' ];
$this->assign('order_money', $order_money);
if (addon_is_exit('store') == 1) {
$store_model = new StoreModel();
$store_list = $store_model->getStoreList([
[ 'site_id', '=', $this->site_id ]
], 'store_id,store_name')[ 'data' ];
$this->assign('store_list', $store_list);
}
$this->assign('printer_addon_is_exit',addon_is_exit('printer'));
return $this->fetch('memberrecharge/order_lists');
}
}
/**
* 订单详情
* @return mixed
*/
public function orderDetail()
{
$order_id = input('order_id', '');
$condition = [
[ 'a.order_id', '=', $order_id ],
[ 'a.site_id', '=', $this->site_id ]
];
$alias = 'a';
$join[] = [
'store s',
's.store_id = a.store_id',
'left'
];
$model = new MemberRechargeOrderModel();
$info = $model->getMemberRechargeOrderInfo($condition, $this->order_field, $alias, $join)[ 'data' ] ?? [];
if (empty($info)) $this->error('未获取到订单数据', href_url('memberrecharge://shop/memberrecharge/order_lists'));
$this->assign('info', $info);
return $this->fetch('memberrecharge/order_detail');
}
/**
* 是否开启充值
* @return mixed
*/
public function setConfig()
{
$model = new MemberRechargeModel();
$is_use = input('is_use', 0);
$data = [];
return $model->setConfig($data, $is_use, $this->site_id);
}
public function exportRecharge()
{
$recharge_id = input("recharge_id", "");//订单状态
$condition[] = [ "recharge_id", "=", $recharge_id ];
$model = new MemberRechargeCardModel();
$list = $model->getMemberRechargeCardPageList($condition, 1, 0, 'card_id desc', "*");
if (empty($list[ 'data' ][ 'list' ])) {
return $this->error("未查询到数据");
}
// 实例化excel
$phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$phpExcel->getProperties()->setTitle("充值记录");
$phpExcel->getProperties()->setSubject("充值记录");
// 对单元格设置居中效果
$phpExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('J')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('K')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$phpExcel->getActiveSheet()->getStyle('L')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//单独添加列名称
$phpExcel->setActiveSheetIndex(0);
$phpExcel->getActiveSheet()->setCellValue('A1', '店铺名称');//可以指定位置
$phpExcel->getActiveSheet()->setCellValue('B1', '充值卡号');
$phpExcel->getActiveSheet()->setCellValue('C1', '套餐名称');
$phpExcel->getActiveSheet()->setCellValue('D1', '面值');
$phpExcel->getActiveSheet()->setCellValue('E1', '积分');
$phpExcel->getActiveSheet()->setCellValue('F1', '成长值');
$phpExcel->getActiveSheet()->setCellValue('G1', '购买金额');
$phpExcel->getActiveSheet()->setCellValue('H1', '会员昵称');
$phpExcel->getActiveSheet()->setCellValue('I1', '订单编号');
$phpExcel->getActiveSheet()->setCellValue('J1', '使用状态');
$phpExcel->getActiveSheet()->setCellValue('K1', '创建时间');
$phpExcel->getActiveSheet()->setCellValue('L1', '使用时间');
//循环添加数据(根据自己的逻辑)
foreach ($list[ 'data' ][ 'list' ] as $k => $v) {
$i = $k + 2;
if ($v[ 'use_status' ] == 1) {
$status_name = "未使用";
} else {
$status_name = "已使用";
}
$phpExcel->getActiveSheet()->setCellValue('A' . $i, $v[ 'site_name' ]);
$phpExcel->getActiveSheet()->setCellValue('B' . $i, $v[ 'card_account' ]);
$phpExcel->getActiveSheet()->setCellValue('C' . $i, $v[ 'recharge_name' ]);
$phpExcel->getActiveSheet()->setCellValue('D' . $i, $v[ 'face_value' ]);
$phpExcel->getActiveSheet()->setCellValue('E' . $i, $v[ 'point' ]);
$phpExcel->getActiveSheet()->setCellValue('F' . $i, $v[ 'growth' ]);
$phpExcel->getActiveSheet()->setCellValue('G' . $i, $v[ 'buy_price' ]);
$phpExcel->getActiveSheet()->setCellValue('H' . $i, $v[ 'nickname' ]);
$phpExcel->getActiveSheet()->setCellValue('I' . $i, ' ' . (string) $v[ 'order_no' ]);
$phpExcel->getActiveSheet()->setCellValue('J' . $i, $status_name);
$phpExcel->getActiveSheet()->setCellValue('K' . $i, date('Y-m-d', $v[ 'create_time' ]));
$phpExcel->getActiveSheet()->setCellValue('L' . $i, date('Y-m-d', $v[ 'use_time' ]));
}
// 重命名工作sheet
$phpExcel->getActiveSheet()->setTitle('充值记录');
// 设置第一个sheet为工作的sheet
$phpExcel->setActiveSheetIndex(0);
// 保存Excel 2007格式文件保存路径为当前路径名字为export.xlsx
$objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
$file = date('Y年m月d日-充值记录表', time()) . '.xlsx';
$objWriter->save($file);
header("Content-type:application/octet-stream");
$filename = basename($file);
header("Content-Disposition:attachment;filename = " . $filename);
header("Accept-ranges:bytes");
header("Accept-length:" . filesize($file));
readfile($file);
unlink($file);
exit;
}
/**
* 打印订单小票
* @return array|mixed|void
*/
public function printTicket()
{
if (addon_is_exit('printer') == 0) return error('', '未安装打印小票插件');
if (request()->isJson()) {
$order_id = input('order_id', 0);
$printer_order_model = new PrinterOrder();
$recharge_order = ( new MemberrechargeOrder() )->getMemberRechargeOrderInfo([ [ 'relate_type', '=', 'order' ], [ 'order_id', '=', $order_id ] ], 'order_id')[ 'data' ];
if (empty($recharge_order)) return error('', '未获取到充值订单信息');
$res = $printer_order_model->printer([
'order_id' => $recharge_order[ 'order_id' ],
'type' => 'recharge',
]);
return $res;
}
}
}

View File

@@ -0,0 +1,418 @@
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>套餐名称:</label>
<div class="layui-input-inline">
<input type="text" name="recharge_name" lay-verify="required" autocomplete="off" class="layui-input len-long" maxlength="40">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">封面:</label>
<div class="layui-input-block img-upload">
<div class="upload-img-block">
<div class="upload-img-box">
<div class="upload-default" id="img">
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
</div>
<div class="operation">
<div>
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
</div>
<div class="replace_img js-replace">点击替换</div>
</div>
<input type="hidden" class="layui-input" name="cover_img" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>面值:</label>
<div class="layui-input-block">
<input type="number" name="face_value" lay-verify="required|sum|number" autocomplete="off" class="layui-input len-short" onblur="checkInput(this)">
</div>
<div class="word-aux">
<p>注意:实际进入用户账户的余额</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>价格:</label>
<div class="layui-input-block">
<input type="number" name="buy_price" lay-verify="required|sum|number|numberFill" autocomplete="off" class="layui-input len-short" onblur="checkInput(this)">
</div>
<div class="word-aux">
<p>注意:用户实际需支付的金额</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>赠送积分:</label>
<div class="layui-input-inline">
<input type="number" name="point" lay-verify="required|num|number" autocomplete="off" class="layui-input len-short" onblur="checkInput(this)">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>赠送成长值:</label>
<div class="layui-input-inline">
<input type="number" name="growth" lay-verify="required|num|number" autocomplete="off" class="layui-input len-short" onblur="checkInput(this)">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">赠送优惠券:</label>
<div class="layui-input-block">
<div class="coupon-item coupon">
<div class="discount-cont">
<div><a href="javascript:;" class="text-color select-coupon">选择优惠券</a></div>
<div class="word-aux" style="margin-left: 0">
<p>活动优惠券发放,不受优惠券自身数量和领取数量的限制</p>
</div>
<div>
<table class="layui-table" lay-skin="nob">
<colgroup>
<col width="30%">
<col width="50%">
<col width="20%">
</colgroup>
<thead>
<tr>
<th>优惠券</th>
<th>优惠内容</th>
<th style="text-align:center;">操作</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
<a id="coverImgId"></a>
</div>
</div>
<script>
var coupon_list = '',laytpl;
var saveData = null;
var totalUploadNum = 0;
var completeUploadNum = 0;
var upload;
layui.use(['form', 'laytpl'], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
laytpl = layui.laytpl;
form.render();
/**
* 表单验证
*/
form.verify({
num: function(value) {
if (value < 0 || value % 1 != 0) {
return '请输入正整数!';
}
},
number: function (value) {
if (value < 0) {
return '请输入不小于0的数!'
}
},
numberFill: function (value) {
if (value == 0) {
return '请输入大于0的数!'
}
},
sum: function (value) {
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return '保留小数点后两位'
}
}
});
upload = new Upload({
elem: '#img',
auto:false,
bindAction:'#coverImgId',
callback: function(res) {
uploadComplete('cover_img', res.data.pic_path);
}
});
function uploadComplete(field, pic_path) {
saveData.field[field] = pic_path;
completeUploadNum += 1;
if(completeUploadNum == totalUploadNum){
saveFunc();
}
}
function saveFunc(){
var data = saveData;
// 删除图片
if(!data.field.cover_img) upload.delete();
$.ajax({
type: "POST",
url: ns.url("memberrecharge://shop/memberrecharge/add"),
data: data.field,
dataType: 'JSON',
success: function(res){
repeat_flag = false;
if (res.code == 0) {
layer.confirm('添加成功', {
title:'操作提示',
btn: ['返回列表', '继续添加'],
closeBtn: 0,
yes: function(index, layero){
location.hash = ns.hash("memberrecharge://shop/memberrecharge/lists");
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
});
}
form.on('submit(save)', function(data){
data.field.coupon_id = coupon_list;
if (repeat_flag) return false;
repeat_flag = true;
saveData = data;
var obj = $("img.img_prev[data-prev='1']");
totalUploadNum = obj.length;
if(totalUploadNum > 0){
obj.each(function(){
var actionId = $(this).attr('data-action-id');
$(actionId).click();
})
}else{
saveFunc();
}
});
form.on('submit(coupon-search)', function(data) {
couponTable.reload({
page: {
curr: 1
},
where: data.field
})
});
});
// 选择优惠
$('body').off('click', '.coupon-item .layui-form-checkbox').on('click', '.coupon-item .layui-form-checkbox', function(e){
if ($(this).prev('[name="discount_type"]').is(':checked')) {
$(this).parents('.coupon-item').find('.discount-cont').removeClass('layui-hide');
} else {
$(this).parents('.coupon-item').find('.discount-cont').addClass('layui-hide');
}
});
$('body').off('click', '.coupon-item .select-coupon').on('click', '.coupon-item .select-coupon', function(e){
var event = this;
layer.open({
type: 1,
area: ["1200px","600px"],
title: '优惠券列表',
skin: 'select-coupon-layer',
content: $("#couponList").html()
});
couponTable = new Table({
elem: "#coupon_list",
url: ns.url("coupon://shop/coupon/lists"),
where: {'status': 1},
cols: [
[{
title: '优惠券名称',
unresize: 'false',
width: '15%',
templet: '#couponName'
}, {
title: '类型',
unresize: 'false',
width: '10%',
templet: function(data){
return data.type == 'discount' ? '折扣' : '满减'
}
}, {
title: '优惠金额/折扣',
unresize: 'false',
width: '15%',
templet: function(data){
return data.type == 'discount' ? data.discount+'折' : data.money+'元';
}
} , {
field: 'goods_type',
title: '适用商品',
unresize: 'false',
width: '10%',
templet: function (data) {
if (data.goods_type == 1) {
return '全部商品';
} else if (data.goods_type == 2) {
return '指定商品';
} else if (data.goods_type == 3) {
return '指定不参与商品';
}
}
}, {
field: 'max_fetch',
title: '领取人限制',
unresize: 'false',
width: '10%'
}, {
field: 'count',
title: '已领取/发放数',
unresize: 'false',
width: '15%',
// templet: function(data){
// return data.count == -1 ? '不限量' : data.count;
// }
templet: function(data){
return data.count == -1 ? data.lead_count+'/不限量' : data.lead_count+'/'+data.count;
}
},{
field: 'gift_state',
title: '结束时间',
unresize: 'false',
width: '15%',
templet: function (res) {
if(res.validity_type == 0){
return ns.time_to_date(res.end_time);
}else{
return "领取之日起" + res.fixed_term + "天有效";
}
}
}, {
title: '操作',
toolbar: '#couponOperation',
unresize: 'false',
align:'right'
}]
]
});
couponTable.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case "add":
addcoupon(data);
break;
}
});
function addcoupon(data){
var template = `<tr data-coupon="{{ d.coupon_type_id }}">
<td>{{ d.coupon_name }}</td>
{{# if(d.at_least > 0){ }}
<td>满{{ d.at_least }}{{ d.type == 'discount' ? '打'+ d.discount +'折' : '减' + d.money }}</td>
{{# } else { }}
<td>无门槛,{{ d.type == 'discount' ? '打'+ d.discount +'折' : '减' + d.money }}</td>
{{# } }}
<td style="text-align:center;"><a href="javascript:;" onclick="deleteCoupon(this)" class="text-color">删除</a></td>
</tr>`;
laytpl(template).render(data, function(string){
$(event).parents('.discount-cont').find('.layui-table tbody').append(string);
layer.closeAll();
});
getCoupon();
}
})
// 删除优惠券
function deleteCoupon(e){
$(e).parents('tr').remove();
getCoupon();
}
//获取已选中优惠券
function getCoupon() {
var coupon = [];
$('.coupon').find('tr[data-coupon]').each(function (i, e) {
coupon.push($(e).attr('data-coupon'));
})
coupon_list = coupon.toString();
}
function back() {
location.hash = ns.hash("memberrecharge://shop/memberrecharge/lists");
}
function checkInput(obj){
$(obj).val(Math.abs($(obj).val()));
}
</script>
<!-- 优惠券 -->
<script type="text/html" id="couponList">
<div class="gift-box">
<div class="single-filter-box">
<div class="layui-form">
<div class="layui-input-inline">
<input type="text" name="coupon_name" placeholder="请输入优惠券名称" class="layui-input len-mid">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="coupon-search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
</div>
<table id="coupon_list" lay-filter="coupon_list"></table>
</div>
</script>
<!-- 优惠券-名称 -->
<script type="text/html" id="couponName">
<div class="table-tuwen-box">
<div class="font-box">
<p class="multi-line-hiding">{{d.coupon_name}}</p>
</div>
</div>
</script>
<!-- 优惠券-操作 -->
<script type="text/html" id="couponOperation">
{{# var select_coupon_list = ','+coupon_list+','}}
{{# if(select_coupon_list.indexOf(','+d.coupon_type_id+',') != -1){ }}
<p title="该优惠券已参加">已添加</p>
{{# }else{ }}
<a class="layui-btn" lay-event="add">添加</a>
{{# } }}
</script>

View File

@@ -0,0 +1,111 @@
<link rel="stylesheet" href="STATIC_CSS/promotion_detail.css">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<div>
<span class="card-title">基本信息</span>
</div>
</div>
<div class="layui-card-body">
<div class="promotion-view">
<div class="promotion-view-item">
<label>卡号:</label>
<span>{$info.card_account}</span>
</div>
<div class="promotion-view-item">
<label>状态:</label>
<span>{$info.use_status == 1 ? '未使用' : '已使用'}</span>
</div>
<div class="promotion-view-item">
<label>订单号:</label>
<span>{$info.order_no}</span>
</div>
<div class="promotion-view-item">
<label>充值用户:</label>
<span>{$info.nickname}</span>
</div>
<div class="promotion-view-item">
<label>套餐面值:</label>
<span>{$info.face_value}</span>
</div>
<div class="promotion-view-item">
<label>金额:</label>
<span>{$info.buy_price}</span>
</div>
<div class="promotion-view-item">
<label>赠送积分:</label>
<span>{$info.point}</span>
</div>
<div class="promotion-view-item">
<label>赠送成长值:</label>
<span>{$info.growth}</span>
</div>
<div class="promotion-view-item">
<label>创建时间:</label>
<span>{:date('Y-m-d H:i:s', $info.create_time)}</span>
</div>
</div>
<div class="promotion-view">
<div class="promotion-view-item-line">
<label class="promotion-view-item-custom-label">横幅图片:</label>
<div class="promotion-view-item-custom-box img-upload">
<div class="upload-img-block icon">
<div class="upload-img-box">
<img layer-src src="{:img($info.cover_img)}" >
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{if !empty($info.coupon_list)}
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<div>
<span class="card-title">赠送优惠券</span>
</div>
</div>
<div class="layui-card-body">
<div class='promotion-view-list'>
<table id="promotion_list"></table>
</div>
</div>
</div>
{/if}
<script>
var promotion_list = {if !empty($info.coupon_list)} {:json_encode($info.coupon_list, JSON_UNESCAPED_UNICODE)}{else/}[] {/if};
layui.use('table', function() {
new Table({
elem: '#promotion_list',
cols: [
[{
field: 'coupon_name',
title: '优惠券',
width: '20%',
}, {
title: '优惠内容',
templet: function(data) {
if(data.at_least > 0){
return '满'+data.at_least+ (data.type == 'discount' ? '打'+data.discount +'折' : '减'+data.money) ;
}else{
return '无门槛'+ (data.type == 'discount' ? '打'+data.discount+'折' : '减' +data.money);
}
}
}]
],
data: promotion_list
});
});
</script>

View File

@@ -0,0 +1,175 @@
<style>
.layui-layout-admin.admin-style-2 .table-tab .layui-tab-title{margin-bottom: 15px;}
</style>
<div class="layui-collapse tips-wrap">
<div class="layui-colla-item">
<h2 class="layui-colla-title">操作提示</h2>
<ul class="layui-colla-content layui-show">
<li>领卡客户</li>
</ul>
</div>
</div>
<!-- 搜索框 -->
<div class="layui-tab table-tab" lay-filter="use_status">
<!-- 搜索框 -->
<div class="single-filter-box">
<button class="layui-btn" onclick="exportRecharge()">导出记录</button>
</div>
<ul class="layui-tab-title">
<li class="layui-this" data-status="">全部</li>
<li data-status="1">未使用</li>
<li data-status="2">已使用</li>
</ul>
<div class="layui-tab-content">
<!-- 列表 -->
<table id="charge_list" lay-filter="charge_list"></table>
</div>
</div>
<!-- 套餐信息 -->
<script type="text/html" id="cover_img">
<div class="table-tuwen-box">
<div class='font-box'>
<p class="multi-line-hiding">面值{{d.face_value}}</p>
<p class="multi-line-hiding">价格{{d.buy_price}}</p>
</div>
</div>
</script>
<!-- 礼包 -->
<script type="text/html" id="libao">
<div class="table-tuwen-box">
<div class='font-box'>
<p class="multi-line-hiding">积分{{d.point}}</p>
<p class="multi-line-hiding">成长值{{d.growth}}</p>
</div>
</div>
</script>
<!-- 用户信息 -->
<script type="text/html" id="user_info">
<div class='table-title'>
<div class='title-pic'>
<img layer-src src="{{ns.img(d.member_img.split(',')[0])}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' "/>
</div>
<div class='title-content'>
<p class="layui-elip">{{d.nickname}}</p>
</div>
</div>
</script>
<!-- 状态 -->
<script type="text/html" id="use_status">
{{d.use_status == 1 ? '未使用' : '已使用'}}
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="card_detail">详情</a>
</div>
</script>
<script>
layui.use(['form', 'element'], function() {
var table,
form = layui.form,
element = layui.element;
form.render();
table = new Table({
elem: '#charge_list',
url: ns.url("memberrecharge://shop/memberrecharge/cardlists"),
where:{
recharge_id:{$recharge_id}
},
cols: [
[{
field:'card_account',
title: '充值卡号',
unresize: 'false',
width: '10%',
templet: '#member_img'
}, {
field: 'cover_img',
title: '套餐信息',
unresize: 'false',
width: '15%',
templet: '#cover_img'
}, {
title: '赠送礼包',
unresize: 'false',
width: '10%',
templet: '#libao'
}, {
field: 'pay_type_name',
title: '用户信息',
unresize: 'false',
width: '15%',
templet: '#user_info'
}, {
field: 'order_no',
title: '订单号',
unresize: 'false',
width: '15%'
}, {
title: '购买时间',
unresize: 'false',
width: '15%',
templet: function(data) {
return ns.time_to_date(data.create_time);
}
}, {
title: '使用状态',
unresize: 'false',
width: '8%',
templet: '#use_status'
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
],
});
//监听Tab切换
element.on('tab(use_status)', function(data) {
var status = $(this).attr("data-status");
table.reload( {
page: {
curr: 1
},
where: {
'use_status': status
}
});
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'card_detail': //编辑
location.hash = ns.hash("memberrecharge://shop/memberrecharge/carddetail?card_id=" + data.card_id);
break;
}
});
});
function exportRecharge(){
var recharge_id = {$recharge_id};
location.href = ns.url("memberrecharge://shop/memberrecharge/exportRecharge?request_mode=download&recharge_id=" + recharge_id);
}
</script>

View File

@@ -0,0 +1,103 @@
<link rel="stylesheet" href="STATIC_CSS/promotion_detail.css">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<div>
<span class="card-title">基本信息</span>
</div>
</div>
<div class="layui-card-body">
<div class="promotion-view">
<div class="promotion-view-item">
<label>套餐名称:</label>
<span>{$info.recharge_name}</span>
</div>
<div class="promotion-view-item">
<label>状态:</label>
<span>{$info.status == 1 ? '正常' : '关闭'}</span>
</div>
<div class="promotion-view-item">
<label>面值:</label>
<span>{$info.face_value}</span>
</div>
<div class="promotion-view-item">
<label>价格:</label>
<span>{$info.buy_price}</span>
</div>
<div class="promotion-view-item">
<label>赠送积分:</label>
<span>{$info.point}</span>
</div>
<div class="promotion-view-item">
<label>赠送成长值:</label>
<span>{$info.growth}</span>
</div>
<div class="promotion-view-item">
<label>创建时间:</label>
<span>{:date('Y-m-d H:i:s', $info.create_time)}</span>
</div>
</div>
<div class="promotion-view">
<div class="promotion-view-item-line">
<label class="promotion-view-item-custom-label">横幅图片:</label>
<div class="promotion-view-item-custom-box img-upload">
<div class="upload-img-block icon">
<div class="upload-img-box">
<img layer-src src="{:img($info.cover_img)}" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{if !empty($info.coupon_list)}
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<div>
<span class="card-title">赠送优惠券</span>
</div>
</div>
<div class="layui-card-body">
<div class='promotion-view-list'>
<table id="promotion_list"></table>
</div>
</div>
</div>
{/if}
<script>
var promotion_list = {if !empty($info.coupon_list)} {:json_encode($info.coupon_list, JSON_UNESCAPED_UNICODE)}{else/}[] {/if};
layui.use('table', function() {
new Table({
elem: '#promotion_list',
cols: [
[{
field: 'coupon_name',
title: '优惠券',
width: '20%',
}, {
title: '优惠内容',
templet: function(data) {
if(data.at_least > 0){
return '满'+data.at_least+ (data.type == 'discount' ? '打'+data.discount +'折' : '减'+data.money) ;
}else{
return '无门槛'+ (data.type == 'discount' ? '打'+data.discount+'折' : '减' +data.money);
}
}
}]
],
data: promotion_list
});
});
</script>

View File

@@ -0,0 +1,431 @@
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>套餐名称:</label>
<div class="layui-input-inline">
<input type="text" name="recharge_name" lay-verify="required" value="{$recharge.data.recharge_name}" autocomplete="off" class="layui-input len-long" maxlength="40">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">封面:</label>
<div class="layui-input-inline img-upload">
<div class="upload-img-block icon">
<div class="upload-img-box {if condition="$recharge.data.cover_img"}hover{/if}">
<div class="upload-default" id="img">
{if condition="$recharge.data.cover_img"}
<div id="preview_img" class="preview_img">
<img layer-src src="{:img($recharge.data.cover_img)}" class="img_prev"/>
</div>
{else/}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{/if}
</div>
<div class="operation">
<div>
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
</div>
<div class="replace_img js-replace">点击替换</div>
</div>
<input type="hidden" class="layui-input" name="cover_img" value="{$recharge.data.cover_img}" />
</div>
<!-- <p id="img" class=" {if condition="$recharge.data.cover_img"} replace {else/} no-replace{/if}">替换</p>
<input type="hidden" class="layui-input" name="cover_img" value="{$recharge.data.cover_img}" />
<i class="del {if condition="$recharge.data.cover_img"}show{/if}">x</i> -->
</div>
</div>
</div>
<!--<div class="layui-form-item">-->
<!--<label class="layui-form-label">封面:</label>-->
<!--<input type="hidden" class="layui-input" name="cover_img" value="{$recharge.data.cover_img}" />-->
<!--<div class="layui-input-inline img-upload">-->
<!--<div class="upload-img-block icon">-->
<!--<div class="upload-img-box" id="redPacket">-->
<!--<img src="{:img($recharge.data.cover_img)}" />-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<input type="hidden" name="recharge_id" value="{$recharge.data.recharge_id}">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>面值:</label>
<div class="layui-input-inline">
<input type="number" name="face_value" lay-verify="required|sum|number" value="{$recharge.data.face_value}" autocomplete="off" class="layui-input len-short" onblur="checkInput(this)">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>价格:</label>
<div class="layui-input-inline">
<input type="number" name="buy_price" lay-verify="required|sum|number" value="{$recharge.data.buy_price}" autocomplete="off" class="layui-input len-short" onblur="checkInput(this)">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>赠送积分:</label>
<div class="layui-input-inline">
<input type="number" name="point" lay-verify="required|num|number" value="{$recharge.data.point}" autocomplete="off" class="layui-input len-short" onblur="checkInput(this)">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>赠送成长值:</label>
<div class="layui-input-inline">
<input type="number" name="growth" lay-verify="required|num|number" value="{$recharge.data.growth}" autocomplete="off" class="layui-input len-short" onblur="checkInput(this)">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">赠送优惠券:</label>
<div class="layui-input-block">
<div class="coupon-item coupon">
<div class="discount-cont">
<div><a href="javascript:;" class="text-color select-coupon">选择优惠券</a></div>
<div class="word-aux" style="margin-left: 0">
<p>活动优惠券发放,不受优惠券自身数量和领取数量的限制</p>
</div>
<div>
<table class="layui-table" lay-skin="nob">
<colgroup>
<col width="30%">
<col width="50%">
<col width="20%">
</colgroup>
<thead>
<tr>
<th>优惠券</th>
<th>优惠内容</th>
<th style="text-align:center;">操作</th>
</tr>
</thead>
<tbody>
{if isset($recharge.data.coupon_list) && !empty($recharge.data.coupon_list)}
{foreach $recharge.data.coupon_list as $k => $vo}
<tr data-coupon="{$vo.coupon_type_id}">
<td>{$vo.coupon_name }</td>
{if $vo.at_least > 0 }
<td>满{$vo.at_least }{$vo.type == 'discount' ? '打'. $vo.discount .'折' : '减' . $vo.money }</td>
{else/}
<td>无门槛,{$vo.type == 'discount' ? '打'. $vo.discount .'折' : '减' . $vo.money }</td>
{/if}
<td style="text-align:center;"><a href="javascript:;" onclick="deleteCoupon(this)" class="text-color">删除</a></td>
</tr>
{/foreach}
{/if}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
<a id="coverImgId"></a>
</div>
</div>
<script>
var coupon_list = '{$recharge.data.coupon_id}',laytpl;
var saveData = null;
var totalUploadNum = 0;
var completeUploadNum = 0;
var upload;
layui.use(['form', 'laytpl'], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
laytpl = layui.laytpl;
form.render();
/**
* 表单验证
*/
form.verify({
num: function(value) {
if (value < 0 || value % 1 != 0) {
return '请输入正整数!';
}
},
number: function (value) {
if (value < 0) {
return '请输入不小于0的数!'
}
},
sum: function (value) {
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return '保留小数点后两位'
}
}
});
upload = new Upload({
elem: '#img',
auto:false,
bindAction:'#coverImgId',
callback: function(res) {
uploadComplete('cover_img', res.data.pic_path);
}
});
function uploadComplete(field, pic_path) {
saveData.field[field] = pic_path;
completeUploadNum += 1;
if(completeUploadNum == totalUploadNum){
saveFunc();
}
}
function saveFunc(){
var data = saveData;
// 删除图片
if(!data.field.cover_img) upload.delete();
$.ajax({
type: "POST",
url: ns.url("memberrecharge://shop/memberrecharge/edit"),
data: data.field,
dataType: 'JSON',
success: function(res){
repeat_flag = false;
if (res.code == 0) {
layer.confirm('编辑成功', {
title:'操作提示',
btn: ['返回列表', '继续操作'],
yes: function(index, layero){
location.hash = ns.hash("memberrecharge://shop/memberrecharge/lists");
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
});
}
form.on('submit(save)', function(data){
data.field.coupon_id = coupon_list;
if (repeat_flag) return false;
repeat_flag = true;
saveData = data;
var obj = $("img.img_prev[data-prev='1']");
totalUploadNum = obj.length;
if(totalUploadNum > 0){
obj.each(function(){
var actionId = $(this).attr('data-action-id');
$(actionId).click();
})
}else{
saveFunc();
}
});
form.on('submit(coupon-search)', function(data) {
couponTable.reload({
page: {
curr: 1
},
where: data.field
})
});
});
// 选择优惠
$('body').off('click', '.coupon-item .layui-form-checkbox').on('click', '.coupon-item .layui-form-checkbox', function(e){
if ($(this).prev('[name="discount_type"]').is(':checked')) {
$(this).parents('.coupon-item').find('.discount-cont').removeClass('layui-hide');
} else {
$(this).parents('.coupon-item').find('.discount-cont').addClass('layui-hide');
}
})
$('body').off('click', '.coupon-item .select-coupon').on('click', '.coupon-item .select-coupon', function(e){
var event = this;
layer.open({
type: 1,
area: ["1200px","800px"],
title: '优惠券列表',
skin: 'select-coupon-layer',
content: $("#couponList").html()
});
couponTable = new Table({
elem: "#coupon_list",
url: ns.url("coupon://shop/coupon/lists"),
where: {'status': 1},
cols: [
[{
title: '优惠券名称',
unresize: 'false',
width: '15%',
templet: '#couponName'
}, {
title: '类型',
unresize: 'false',
width: '10%',
templet: function(data){
return data.type == 'discount' ? '折扣' : '满减'
}
}, {
title: '优惠金额/折扣',
unresize: 'false',
width: '15%',
templet: function(data){
return data.type == 'discount' ? data.discount+'折' : data.money+'元';
}
}, {
field: 'goods_type',
title: '适用商品',
unresize: 'false',
width: '10%',
templet: function (data) {
if (data.goods_type == 1) {
return '全部商品';
} else if (data.goods_type == 2) {
return '指定商品';
} else if (data.goods_type == 3) {
return '指定不参与商品';
}
}
},{
field: 'max_fetch',
title: '领取人限制',
unresize: 'false',
width: '10%'
},{
field: 'count',
title: '已领取/发放数',
unresize: 'false',
width: '15%',
templet: function(data){
return data.count == -1 ? data.lead_count+'/不限量' : data.lead_count+'/'+data.count;
}
}, {
field: 'gift_state',
title: '结束时间',
unresize: 'false',
width: '15%',
templet: function (res) {
if(res.validity_type == 0){
return ns.time_to_date(res.end_time);
}else{
return "领取之日起" + res.fixed_term + "天有效";
}
}
}, {
title: '操作',
toolbar: '#couponOperation',
unresize: 'false',
align:'right'
}]
]
});
couponTable.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case "add":
addcoupon(data);
break;
}
});
function addcoupon(data){
var template = `<tr data-coupon="{{ d.coupon_type_id }}">
<td>{{ d.coupon_name }}</td>
{{# if(d.at_least > 0){ }}
<td>满{{ d.at_least }}{{ d.type == 'discount' ? '打'+ d.discount +'折' : '减' + d.money }}</td>
{{# } else { }}
<td>无门槛,{{ d.type == 'discount' ? '打'+ d.discount +'折' : '减' + d.money }}</td>
{{# } }}
<td style="text-align:center;"><a href="javascript:;" onclick="deleteCoupon(this)" class="text-color">删除</a></td>
</tr>`;
laytpl(template).render(data, function(string){
$(event).parents('.discount-cont').find('.layui-table tbody').append(string);
layer.closeAll();
});
getCoupon();
}
})
// 删除优惠券
function deleteCoupon(e){
$(e).parents('tr').remove();
getCoupon();
}
//获取已选中优惠券
function getCoupon() {
var coupon = [];
$('.coupon').find('tr[data-coupon]').each(function (i, e) {
coupon.push($(e).attr('data-coupon'));
})
coupon_list = coupon.toString();
}
function back() {
location.hash = ns.hash("memberrecharge://shop/memberrecharge/lists");
}
function checkInput(obj){
$(obj).val(Math.abs($(obj).val()));
}
</script>
<!-- 优惠券 -->
<script type="text/html" id="couponList">
<div class="gift-box">
<div class="single-filter-box">
<div class="layui-form">
<div class="layui-input-inline">
<input type="text" name="coupon_name" placeholder="请输入优惠券名称" class="layui-input len-mid">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="coupon-search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
</div>
<table id="coupon_list" lay-filter="coupon_list"></table>
</div>
</script>
<!-- 优惠券-名称 -->
<script type="text/html" id="couponName">
<div class="table-tuwen-box">
<div class="font-box">
<p class="multi-line-hiding">{{d.coupon_name}}</p>
</div>
</div>
</script>
<!-- 优惠券-操作 -->
<script type="text/html" id="couponOperation">
{{# var select_coupon_list = ','+coupon_list+','}}
{{# if(select_coupon_list.indexOf(','+d.coupon_type_id+',') != -1){ }}
<p title="该优惠券已参加">已添加</p>
{{# }else{ }}
<a class="layui-btn" lay-event="add">添加</a>
{{# } }}
</script>

View File

@@ -0,0 +1,286 @@
<style>
.multi-line-hiding .point-left{margin-right: 14px}
.layui-layout-admin.admin-style-2 .table-tab .layui-tab-title{margin-bottom: 15px;}
.layui-layout-admin.admin-style-2 .single-filter-box{padding: 0;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label sm">开启充值:</label>
<div class="layui-input-block">
<input type="checkbox" name="is_use" lay-filter="is_use" value="1" lay-skin="switch" {if !empty($config) && $config.is_use==1 }checked{/if}>
</div>
</div>
</div>
<!-- 搜索框 -->
<div class="single-filter-box">
<button class="layui-btn" onclick="add()">添加充值套餐</button>
</div>
<div class="layui-tab table-tab" lay-filter="status">
<ul class="layui-tab-title">
<li class="layui-this" data-status="">全部</li>
<li data-status="1">正常</li>
<li data-status="2">关闭</li>
</ul>
<div class="layui-tab-content">
<!-- 列表 -->
<table id="charge_list" lay-filter="charge_list"></table>
</div>
</div>
<!-- 封面 -->
<script type="text/html" id="cover_img">
<div class="table-title">
<!-- <div class="title-pic">-->
<!-- <img layer-src src="{{ns.img(d.cover_img.split(',')[0])}}" onerror="this.src = 'SHOP_IMG/goods_empty.gif' "/>-->
<!-- </div>-->
<div class='title-content'>
<p class="multi-line-hiding">面值{{d.face_value}}</p>
<p class="multi-line-hiding">价格{{d.buy_price}}</p>
</div>
</div>
</script>
<!-- 礼包 -->
<script type="text/html" id="libao">
<p class="multi-line-hiding"><span class="point-left">积分</span>{{d.point}}</p>
<p class="multi-line-hiding">成长值{{d.growth}}</p>
</script>
<!-- 状态 -->
<script type="text/html" id="status">
{{d.status == 1 ? '正常' : '关闭'}}
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="detail">详情</a>
<a class="layui-btn" lay-event="card">客户列表</a>
<a class="layui-btn" lay-event="del">删除</a>
<a class="layui-btn" lay-event="records">充值记录</a>
{{# if(d.status == 1){ }}
<a class="layui-btn" lay-event="close">关闭</a>
{{# }else if(d.status == 2){ }}
<a class="layui-btn" lay-event="open">开启</a>
{{# } }}
</div>
</script>
<script>
layui.use(['form', 'element'], function() {
var table,
form = layui.form,
element = layui.element,
repeat_flag = false; //防重复标识
form.render();
form.on('switch(is_use)', function(data) {
$.ajax({
url: ns.url("memberrecharge://shop/memberrecharge/setConfig"),
data: {
is_use: (data.elem.checked ? 1 : 0)
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
}
});
});
table = new Table({
elem: '#charge_list',
url: ns.url("memberrecharge://shop/memberrecharge/lists"),
cols: [
[{
field: 'recharge_name',
title: '套餐名称',
unresize: 'false',
width: '10%'
},{
title: '套餐信息',
unresize: 'false',
width: '15%',
templet: '#cover_img'
}, {
field: 'point',
title: '礼包信息',
unresize: 'false',
width: '15%',
templet: '#libao'
}, {
field: 'sale_num',
title: '购买数量',
unresize: 'false',
width: '10%'
}, {
title: '创建时间',
unresize: 'false',
width: '20%',
templet: function(data) {
return ns.time_to_date(data.create_time);
}
}, {
title: '状态',
unresize: 'false',
width: '10%',
templet: '#status'
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align : 'right'
}]
],
});
//监听Tab切换
element.on('tab(status)', function(data) {
var status = $(this).attr("data-status");
table.reload( {
page: {
curr: 1
},
where: {
'status': status
}
});
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'edit': //编辑
location.hash = ns.hash("memberrecharge://shop/memberrecharge/edit?recharge_id=" + data.recharge_id);
break;
case 'detail': //详情
location.hash = ns.hash("memberrecharge://shop/memberrecharge/detail?recharge_id=" + data.recharge_id);
break;
case 'card': //卡片列表
location.hash = ns.hash("memberrecharge://shop/memberrecharge/cardlists?recharge_id=" + data.recharge_id);
break;
case 'records': // 订单列表
location.hash = ns.hash("memberrecharge://shop/memberrecharge/orderlists?recharge_id=" + data.recharge_id);
break;
case 'del': //删除
deleteMemberRecharge(data.recharge_id);
break;
case 'close': //关闭
invalidMemberRecharge(data.recharge_id);
break;
case 'open': //开启
openMemberRecharge(data.recharge_id);
break;
}
});
/**
* 删除
*/
function deleteMemberRecharge(recharge_id) {
layer.confirm('确定要删除该充值套餐吗?', function(index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("memberrecharge://shop/memberrecharge/delete"),
data: {
recharge_id: recharge_id
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload({
page: {
curr: 1
},
});
}
}
});
}, function() {
layer.close();
repeat_flag = false;
});
}
//使失效
function invalidMemberRecharge(recharge_id) {
layer.confirm('确定关闭该充值套餐吗?', function(index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("memberrecharge://shop/memberrecharge/invalid"),
data: {
recharge_id: recharge_id
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
}, function() {
layer.close();
repeat_flag = false;
});
}
//使开启
function openMemberRecharge(recharge_id) {
layer.confirm('确定重新开启充值套餐吗?', function(index) {
if (repeat_flag) return;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("memberrecharge://shop/memberrecharge/open"),
data: {
recharge_id: recharge_id
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
}, function() {
layer.close();
repeat_flag = false;
});
}
});
function add() {
location.hash = ns.hash("memberrecharge://shop/memberrecharge/add");
}
</script>

View File

@@ -0,0 +1,115 @@
<link rel="stylesheet" href="STATIC_CSS/promotion_detail.css">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<div>
<span class="card-title">基本信息</span>
</div>
</div>
<div class="layui-card-body">
<div class="promotion-view">
<div class="promotion-view-item">
<label>订单:</label>
<span>{$info.order_no}</span>
</div>
<div class="promotion-view-item">
<label>状态:</label>
<span>{$info.status == 1 ? '待支付' : '已支付'}</span>
</div>
<div class="promotion-view-item">
<label>来源门店:</label>
<span>{$info.store_name}</span>
</div>
<div class="promotion-view-item">
<label>充值用户:</label>
<span>{$info.nickname}</span>
</div>
<div class="promotion-view-item">
<label>套餐面值:</label>
<span>{$info.face_value}</span>
</div>
<div class="promotion-view-item">
<label>金额:</label>
<span>{$info.buy_price}</span>
</div>
<div class="promotion-view-item">
<label>赠送积分:</label>
<span>{$info.point}</span>
</div>
<div class="promotion-view-item">
<label>赠送成长值:</label>
<span>{$info.growth}</span>
</div>
<div class="promotion-view-item">
<label>支付方式:</label>
<span>{$info.pay_type_name}</span>
</div>
<div class="promotion-view-item">
<label>支付时间:</label>
<span>{:date('Y-m-d H:i:s', $info.pay_time)}</span>
</div>
</div>
{if $info.cover_img}
<div class="promotion-view" >
<div class="promotion-view-item-line">
<label class="promotion-view-item-custom-label">横幅图片:</label>
<div class="promotion-view-item-custom-box img-upload">
<div class="upload-img-block icon">
<div class="upload-img-box">
<img layer-src src="{:img($info.cover_img)}" >
</div>
</div>
</div>
</div>
</div>
{/if}
</div>
</div>
{if !empty($info.coupon_list)}
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<div>
<span class="card-title">赠送优惠券</span>
</div>
</div>
<div class="layui-card-body">
<div class='promotion-view-list'>
<table id="promotion_list"></table>
</div>
</div>
</div>
{/if}
<script>
var promotion_list = {if !empty($info.coupon_list)} {:json_encode($info.coupon_list.data, JSON_UNESCAPED_UNICODE)}{else/}[] {/if};
layui.use('table', function() {
new Table({
elem: '#promotion_list',
cols: [
[{
field: 'coupon_name',
title: '优惠券',
width: '20%',
}, {
title: '优惠内容',
templet: function(data) {
if(data.at_least > 0){
return '满'+data.at_least+ (data.type == 'discount' ? '打'+data.discount +'折' : '减'+data.money) ;
}else{
return '无门槛'+ (data.type == 'discount' ? '打'+data.discount+'折' : '减' +data.money);
}
}
}]
],
data: promotion_list
});
});
</script>

View File

@@ -0,0 +1,378 @@
<link rel="stylesheet" href="MEMBERRECHARGE_CSS/order_list.css"/>
<!-- <div class="layui-card card-common card-brief">
<div class="layui-card-header">
<div>
<span class="card-title">充值概况</span>
</div>
</div>
<div class="layui-card-body">
<div class="content">
<p class="title">累计充值金额</p>
<p class="money">{$order_money}</p>
</div>
<div class="content">
<p class="title">累计充值次数</p>
<p class="money">{$order_num}</p>
</div>
</div>
</div> -->
<div class="screen layui-collapse" lay-filter="selection_panel">
<div class="layui-colla-item">
<form class="layui-form layui-colla-content layui-form layui-show" lay-filter="order_list" action="javascript:;">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">订单号</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="order_no" placeholder="请输入订单号">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">客户昵称</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="nickname" placeholder="请输入客户昵称">
</div>
</div>
{if addon_is_exit('store') == 1}
<div class="layui-inline">
<label class="layui-form-label">来源门店</label>
<div class="layui-input-inline">
<select name="store_id" lay-filter="store_id">
<option value="">全部</option>
{foreach $store_list as $k => $v}
<option value="{$v.store_id}">{$v.store_name}</option>
{/foreach}
</select>
</div>
</div>
{/if}
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">支付时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(7, this);return false;">近7天</button>
<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(30, this);return false;">近30天</button>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
</div>
</div>
<div class="layui-tab table-tab " lay-filter="order_tab">
<div class="layui-tab-content">
<!-- 列表 -->
<table id="charge_list" lay-filter="charge_list"></table>
<!-- <div id="order_list"></div> -->
</div>
<!-- <div id="order_page"></div> -->
</div>
<script type="text/html" id="userdetail">
<div class='table-title'>
<div class='title-pic headimg'>
{{# if(d.headimg){ }}
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
{{# }else{ }}
<img layer-src src="{:img('public/static/img/default_img/head.png')}">
{{# } }}
</div>
<div class='title-content'>
<p class="layui-elip">{{d.nickname}}</p>
</div>
</div>
</script>
<!-- <script src="MEMBERRECHARGE_JS/order_list.js?v={$version}"></script> -->
<script>
var form,laypage,element,laydate;
var is_refresh = false;
var printer_addon_is_exit = '{$printer_addon_is_exit}';
layui.use(['laypage','laydate','form', 'element','table'], function(){
form = layui.form;
table = layui.table;
laypage = layui.laypage;
element = layui.element;
laydate = layui.laydate;
form.render();
// 支付时间
laydate.render({
elem: '#start_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
laydate.render({
elem: '#end_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
//监听Tab切换以改变地址hash值
element.on('tab(order_tab)', function(){
$(".all-selected-checkbox input").prop("checked",false);
var hash_data = getHashList();
hash_data.page = 1;
setHashOrderList(hash_data);
});
table = new Table({
elem: '#charge_list',
url: ns.url("memberrecharge://shop/memberrecharge/orderlists"),
cols: [
[{
field: 'member_info',
title: '会员',
unresize: 'false',
templet: '#userdetail'
},{
title: '充值金额',
unresize: 'false',
field:'face_value',
templet: function(data) {
return '<span style="font-weight: bold;font-size:14px;color:#262B30">¥'+data.face_value+'</span>';
}
}, {
field: 'point',
title: '充值时间',
unresize: 'false',
templet: function(data) {
return ns.time_to_date(data.create_time);
}
}, {
field: 'sale_num',
title: '充值单号',
unresize: 'false',
templet: function(data) {
return 'RC'+data.order_no;
}
},{
field: 'pay_type_name',
title: '充值方式',
unresize: 'false',
templet: function(data) {
return '<div class="pay-type-text" style="color:#00ac1c"><span class="iconfontnew icon-wechatpay icon" style="font-size:24px;padding-right: 2px;vertical-align: middle;"></span><span class="text" style="color:#000">微信</span></div>';
}
},{
field: 'sale_num',
title: '充值状态',
unresize: 'false',
templet: function(data) {
if(data.status == 2){
return '<span style="color:#19be6b"> 成功 </span>';
}else{
return '<span style="color:#ff1f2c"> 未支付 </span>';
}
}
}
]
],
});
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
return false
});
//监听筛选事件
/*form.on('submit(search)', function(data){
is_refresh = true;
data.field.page = 1;
setHashOrderList(data.field);
return false;
});*/
// getHashData();
// getOrderList();//筛选
});
function setHashOrderList(data){
var hash = ['url=memberrecharge://shop/memberrecharge/orderlists'];
for (let key in data) {
if (data[key] != '' && data[key] != 'all') {
hash.push(`${key}=${data[key]}`)
}
}
location.hash = hash.join('&');
localStorage.setItem('formSubmit','search'); // 表单搜索标识,防止页面重新加载
getOrderList();
}
var order = new Order();
function getOrderList(){
var url = ns.url("memberrecharge://shop/memberrecharge/orderlists", getHashArr().join('&'));
$.ajax({
type : 'get',
dataType: 'json',
url :url,
success : function(res){
if(res.code == 0){
order.setData(res.data);
$("#order_list").html(order.fetch());
form.render();
laypage_util = new Page({
elem: 'order_page',
count: res.data.count,
curr: getHashPage(),
limit:getHashData()['page_size'] || 10,
callback: function(obj){
var hash_data = getHashData();
hash_data.page = obj.curr;
hash_data.page_size = obj.limit;
setHashOrderList(hash_data);
}
});
}else{
layer.msg(res.message);
}
}
});
}
// 通过hash获取页数
function getHashPage(){
var page = 1;
var startTime = '';
var endTime = '';
var hash_arr = getHashArr();
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
switch(item_arr[0]){
case "page":
page = item_arr[1];
break;
case "start_time":
startTime = ns.date_to_time(item_arr[1].split("%")[0]);
break;
case "end_time":
endTime = ns.date_to_time(item_arr[1].split("%")[0]);
break;
}
}
});
var _time = (endTime - startTime) / (24 * 60 * 60);
if (_time == 6) {
$(".date-picker-btn-seven").addClass("selected");
$(".date-picker-btn-thirty").removeClass("selected");
} else if (_time == 29) {
$(".date-picker-btn-thirty").addClass("selected");
$(".date-picker-btn-seven").removeClass("selected");
} else {
$(".date-picker-btn-seven").removeClass("selected");
$(".date-picker-btn-thirty").removeClass("selected");
}
return page;
}
//从hash中获取数据
function getHashData(){
var hash_arr = getHashArr();
var form_json = {
"start_time" : "",
"end_time" : "",
"nickname" : "",
"order_no" : "",
'page_size':'',
"page" : ""
};
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
$.each(form_json,function(key, form_val){
if(item_arr[0] == key){
form_json[key] = item_arr[1];
}
})
}
})
}
return form_json;
}
function getHashList(){
var hash_arr = getHashArr();
var form_json = {
"start_time" : "",
"end_time" : "",
"nickname" : "",
"order_no" : "",
'page_size':'',
"page" : ""
};
if(hash_arr.length > 0){
$.each(hash_arr,function(index, itemobj){
var item_arr = itemobj.split("=");
if(item_arr.length == 2){
$.each(form_json,function(key, form_val){
if(item_arr[0].indexOf(key) != "-1"){
form_json[key] = item_arr[1];
}
})
}
})
}
return form_json;
}
/**
* 七天时间
*/
function datePick(date_num,event_obj){
$(".date-picker-btn").removeClass("selected");
$(event_obj).addClass('selected');
Date.prototype.Format = function (fmt,date_num) { //author: meizz
this.setDate(this.getDate()-date_num);
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
$("input[name=start_time]").val(before_time,0);
$("input[name=end_time]").val(now_time,date_num-1);
}
</script>

View File

@@ -0,0 +1,88 @@
.layui-table {margin-top: 15px;}
.layui-table thead tr {background-color: #F8F6F9;}
.layui-table th {border-width: 0; font-size: 14px!important;}
.layui-table td {padding: 8px 15px;}
.layui-table .header-row {border-top: 1px solid #e6e6e6;background: #f7f7f7;}
.layui-table .header-row:hover{background: #f7f7f7 !important;}
.separation-row hr {margin: 0;}
/* .layui-layout-admin .layui-body{min-width:1100px} */
/*.date-picker-btn.selected{background-color:#0d73f9;color:#fff}*/
.layui-table td,.layui-table th,.layui-table-fixed-r,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-color:#f1f1f1 !important;}
.layui-table thead th{border-bottom:none;padding-left:0;padding-right:0;}
.order-list-table .separation-row td{padding:10px 20px;border: 0;}
.order-list-table .separation-row:hover{background-color: #fff;}
.order-list-table .remark-row{background: #FFF9DF!important;color: #D09B4C;}
.order-list-table .remark-row:hover{background: #FFF9DF!important}
.order-list-table .header-row td{padding: 8px 15px!important;}
.order-list-table .header-row td:nth-child(1){border-right: 0;}
.order-list-table .header-row td:nth-child(2){text-align:center;border-left: 0;}
.order-list-table .header-row span{vertical-align:middle}
.order-list-table .header-row td .order-item-header{text-align:left;color:#333;}
.order-list-table .header-row td .order-item-header.more{cursor: pointer;overflow: hidden;position: relative;}
.order-list-table .header-row td .more-operation{display: none;font-size: 14px;line-height: 20px;background-color: #fff;border-radius: 2px;box-shadow: 0 2px 8px 0 rgba(200,201,204,.5);position: absolute;z-index: 2000;padding: 10px;top: 28px;transform: translateX(10px);left: -12px;width: 200px;}
.order-list-table .header-row td .more-operation:before{left: 8px;top: -14px;border: solid transparent;content: "";height: 0;width: 0;position: absolute;pointer-events: none;border-color: transparent;border-bottom-color: #fff;border-width: 8px;}
.order-list-table .header-row td .more-operation span{color:#333;}
.order-list-table .checkbox-all .layui-table-cell{padding:0;text-align:center;}
.order-list-table .product-info .layui-table-cell{padding:0 5px}
.order-list-table .content-row:hover{background-color:#fff !important;}
.order-list-table .content-row .product-info{border-right: 0;}
.order-list-table .content-row .product-info .img-block{width:60px;height:60px;float:left;border:1px solid #e2e2e2;display: flex;align-items: center;justify-content: center;}
.order-list-table .content-row .product-info .img-block>img{max-width:100%;max-height:100%;}
.order-list-table .content-row .product-info .info{margin-left:70px}
.order-list-table .content-row .product-info .info p{color:#8e8c8c;font-size:12px}
.order-list-table .content-row .order-price{border-left: 0;}
.order-list-table .content-row .product-list{border-right-width:1px}
.order-list-table .content-row .product-list p{font-size:12px}
.order-list-table .content-row .transaction-status{line-height: 24px;}
.order-list-table .content-row .buyers{line-height: 24px;}
.order-list-table .operation a{font-size: 14px;}
.order-list-table .text-tile{color:rgb(164,164,164);}
.order-no-data-block ul{width:200px;margin:20px auto; padding-bottom: 20px;}
.order-no-data-block ul li{text-align:center;color:#c2c2c2}
.order-no-data-block ul li:first-child{height:70px;line-height:70px}
.order-no-data-block ul li:first-child i{font-size:35px}
.footer-row{border:1px solid #f2f2f2}
.screen{margin-top: 0;}
/*.order-money span {color: red;}*/
#order_page {text-align: right;}
.bottom-row{color:#e0a723;background: #fffbec;}
.bottom-row:hover{background: #fffbec!important;}
.table-tab .layui-tab-content {padding-top: 0;}
.line-hiding{ cursor : default; -webkit-line-clamp: 2 !important;}
.address_box{width:87%; display: inline-block}
.address_input{width: 1px;height: 0px;overflow: hidden;border: 0px}
.screen .layui-colla-title .layui-colla-icon{color:#3D88FB !important}
.screen .layui-colla-title .text-color{position: absolute;right: 45px;font-size: 14px;padding: 5px;}
.operation .operation-type{display: block;}
.operation .operation-type .layui-btn{display: inline;text-align: left;line-height: 23px;padding: 0px;margin: 0px;padding-left:8px;}
.layui-colla-title .put-open{position: absolute;right: 40px;padding: 5px;color: #3D88FB ;}
/*订单顶部的一行*/
.order-list-top-line{justify-content:flex-end;}
.order-list-top-line a{padding-right: 0px !important;}
.order-list-table .order-goods{align-items: flex-start !important;}
.order-list-table .order-goods .info{margin-top: 3px;}
.order-list-table .order-goods , .order-list-table .order-goods-item{display: flex;align-items: center;}
.order-list-table .order-goods .img-block{margin-right: 10px;width: 60px;height: 60px;flex-shrink: 0;border: 1px solid #e2e2e2;display: flex;align-items: center;justify-content: center;}
.order-list-table .order-goods .img-block{width: 105px;height: 63px;}
.order-list-table .order-goods .img-block img{max-width: 100%;max-height: 100%;}
.order-list-table .order-goods-item{margin-top: 10px;}
.content-row .order-price {
border-left: 0;
}
.content-row .card-info {
border-right: 0;
}
.card-common:first-of-type{margin-top: 0;}
.layui-card-body{display: flex;padding-bottom: 0 !important;padding-right: 50px !important;padding-left: 50px !important;flex-wrap: wrap;}
.layui-card-body .content{width: 50%;display: flex;flex-direction: column;margin-bottom: 30px;justify-content: center;}
.layui-card-body .content .title{color: #909399;font-size: 14px;}
.layui-card-body .money{color: #303133;font-size: 26px;margin-top: 10px;max-width: 250px;}
.layui-layout-admin.admin-style-2 .screen{margin-bottom: 15px;}
.layui-layout-admin.admin-style-2 .layui-form-item .layui-input-inline{background-color: #fff;}

View File

@@ -0,0 +1,285 @@
/**
* 渲染订单列表
*/
Order = function () {};
/**
* 设置数据集
*/
Order.prototype.setData = function (data) {
Order.prototype.data = data;
};
/**
* 列名数据
*/
Order.prototype.cols = [
/*{
type: 'checkbox',
fixed: 'left',
width: '3%',
merge: true,
template: function (orderitem, order) {
var json = {};
json.order_id = order.order_id;
json.order_no = order.order_no;
var h = '<div class="sub-selected-checkbox" data-json='+ JSON.stringify(json) +' data-id='+ order.order_id +' >';
h += '<input type="checkbox" lay-skin="primary" lay-filter="subCheckbox" name="" >';
h += '</div>';
return h;
}
},*/
{
title: '<span>套餐信息</span>',
width: "25%",
className: "card-info",
template: function (orderitem, order) {
var h = '';
h += '<div class="order-goods">';
// h += '<div class="img-block">';
// h += '<img layer-src="' + ns.img(orderitem.cover_img.split(",")[0]) + '" src="' + ns.img(orderitem.cover_img.split(",")[0]) + '">';
// h += '</div>';
h += '<div class="info">';
h += '<div>'+orderitem.recharge_name+'</div>';
h += '</div>';
h += '</div>';
return h;
}
},
{
title: "面值(元) / 数量",
width: "8%",
align: "right",
className: "order-price",
template: function (orderitem, order) {
var h = '<div style="padding-right: 15px;">';
h += '<div>';
h += '<span>面值' + orderitem.face_value + '</span>';
h += '</div>';
h += '<div>';
h += '<span>1件</span>';
h += '</div>';
h += '</div>';
return h;
}
},
{
title: "赠送礼包",
width: "15%",
align: "left",
className: "give_gift",
template: function (orderitem, order) {
var h = '';
h += '<div class="order-goods">';
h += '<div class="info">';
h += '<div>积分:'+orderitem.point+'</div>';
h += '<div>成长值:'+orderitem.growth+'</div>';
h += '</div>';
h += '</div>';
return h;
}
},
{
title: "实付金额(元)",
width: "8%",
align: "right",
className: "order-money",
merge: true,
template: function (orderitem, order) {
var h = '<div style="padding-right: 15px;">';
h += '<span>' + orderitem.price + '</span>';
h += '</div>';
return h;
}
},
{
title: "买家",
width: "10%",
align: "center",
className: "member",
template: function (orderitem, order) {
var h = '<div style="text-align: center;">';
h += '<a href="' + ns.href("shop/member/editmember", {member_id: orderitem.member_id}) + '" target="_blank" class="multi-line-hiding text-color-sub text-color">' +orderitem.nickname + '</a>';
h += '';
h += '</div>';
return h;
}
},
{
title: "来源门店",
width: "9%",
align: "center",
className: "transaction-status",
merge: true,
template: function (orderitem, order) {
var html = '<div>' + order.store_name + '</div>';
return html;
}
},
{
title: "支付状态",
width: "10%",
align: "center",
className: "transaction-status",
merge: true,
template: function (orderitem, order) {
var html = '<div>' + (order.status == 2 ? '已支付' : '未支付') + '</div>';
return html;
}
},
{
title : "支付时间",
width : "15%",
align : "center",
className : "create-time",
merge : true,
template : function(orderitem,order){
return '<div>' + ns.time_to_date(order.pay_time) + '</div>';
}
},
{
title: "操作",
align: "right",
className: "operation",
width: "10%",
merge: true,
template: function (orderitem, order) {
var html = '';
html += '<div>';
html += '<a class="layui-btn text-color" href="' + ns.href("memberrecharge://shop/memberrecharge/orderdetail", {order_id: orderitem.order_id}) + '" target="_blank">详情</a>';
if(printer_addon_is_exit == 1) {
html += '<a class="layui-btn text-color" href="javascript:printTicket(' + orderitem.order_id + ')">打印小票</a>';
}
html += '</div>';
return html;
}
}
];
/**
* 渲染表头
*/
Order.prototype.header = function (hasThead) {
var colgroup = '<colgroup>';
var thead = '';
if (hasThead) thead = '<thead><tr>';
for (var i = 0; i < this.cols.length; i++) {
var align = this.cols[i].align ? "text-align:" + this.cols[i].align : "";
colgroup += '<col width="' + this.cols[i].width + '">';
if (hasThead) {
thead += '<th style="' + align + '" class="' + (this.cols[i].className || "") + '">';
thead += '<div class="layui-table-cell">';
if(this.cols[i].type){
thead += '<div class="all-selected-checkbox">';
thead += '<input type="checkbox" lay-skin="primary" lay-filter="allCheckbox" name="">';
thead += '</div>';
}else{
thead += this.cols[i].title;
}
thead += '</div>';
thead += '</th>';
}
}
colgroup += '</colgroup>';
if (hasThead) thead += '</tr></thead>';
return colgroup + thead;
};
/**
* 渲染内容
*/
Order.prototype.tbody = function () {
var tbody = '<tbody>';
for (var i = 0; i < this.data.list.length; i++) {
var order = this.data.list[i];
if (i > 0) {
//分割行
tbody += '<tr class="separation-row">';
tbody += '<td colspan="' + this.cols.length + '"></td>';
tbody += '</tr>';
}
//订单项头部
tbody += '<tr class="header-row">';
tbody += '<td colspan="10">';
tbody += '<span class="order-item-header" style="margin-right:10px;">订单号:' + order.order_no + '</span>';
tbody += '<span class="order-item-header text-color more" style="margin-right:50px;" onclick="showMore(' + order.order_id + ')">更多';
tbody += '<div class="more-operation" data-order-id="' + order.order_id + '">';
tbody += '<span>支付流水号:' + order.out_trade_no + '</span>';
tbody += '</div></span>';
tbody += '<span class="order-item-header" style="margin-right:50px;">下单时间:' + ns.time_to_date(order.create_time) + '</span>';
tbody += '<span class="order-item-header" style="margin-right:50px;">订单来源:'+ order.order_from_name +'</span>';
tbody += '<span class="order-item-header" style="margin-right:50px;">支付方式:'+ order.pay_type_name +'</span>';
tbody += '</td>';
tbody += '</tr>';
var orderitemHtml = '';
loadImgMagnify();
orderitemHtml += '<tr class="content-row">';
for (var k = 0; k < this.cols.length; k++) {
orderitemHtml += '<td class="' + (this.cols[k].className || "") + '" align="' + (this.cols[k].align || "") + '" style="' + (this.cols[k].style || "") + '" rowspan="' + order.length + '">';
orderitemHtml += this.cols[k].template(order, order);
orderitemHtml += '</td>';
}
orderitemHtml += '</tr>';
tbody += orderitemHtml;
}
tbody += '</tbody>';
return tbody;
};
/**
* 渲染表格
*/
Order.prototype.fetch = function () {
if (this.data.list.length > 0) {
return '<table class="layui-table layui-form">' + this.header(true) + '</table><table class="layui-table order-list-table layui-form">' + this.header(false) + this.tbody() + '</table>';
} else {
return '<table class="layui-table order-list-table layui-form">' + this.header(true) + '</table>' + '<div class="order-no-data-block"><ul><li><i class="layui-icon layui-icon-tabs"></i> </li><li>暂无订单</li></ul></div>';
}
};
function showMore(order_id) {
$(".more-operation[data-order-id]").hide();
$(".more-operation[data-order-id='" + order_id + "']").show();
$("body").bind('click',function (e) {
if (!$(e.target).closest(".order-item-header.more").length) {
$(".more-operation[data-order-id='" + order_id + "']").hide();
$("body").unbind('click');
}
});
}
$(".layui-colla-title").on("click", function(){
if($(".layui-colla-title>i").hasClass("layui-icon-down") === false && $(".layui-colla-title>i").hasClass("layui-icon-up") === false){
$(".layui-colla-title .put-open").html("展开");
}else if($(".layui-colla-title>i").hasClass("layui-icon-down") === true){
$(".layui-colla-title .put-open").html("展开");
}else if($(".layui-colla-title>i").hasClass("layui-icon-up") === true){
$(".layui-colla-title .put-open").html("收起");
}
})
// 打印订单小票
function printTicket(order_id){
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("memberrecharge://shop/memberrecharge/printTicket"),
data: {order_id},
success: function (res) {
if (res.code != 0) {
layer.msg(res.message ? res.message : '小票打印失败');
}
}
});
}

View File

@@ -0,0 +1,38 @@
<style>
.recharge-box .layui-card-header .layui-form-switch{
margin-top: -4px;
margin-left: 5px;
}
</style>
<div class="layui-card card-common card-brief recharge-box">
<div class="layui-card-header">
<span class="card-title">充值打印
<input type="checkbox" name="recharge_open" lay-filter="recharge_open" value="1" lay-skin="switch" {if empty($printer_info) || $printer_info['recharge_open']} checked {/if} />
</span>
</div>
<div class="layui-card-body recharge-content">
<div class="layui-form-item express_company recharge_item {if !empty($printer_info) && $printer_info['recharge_open'] == 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>打印模板:</label>
<div class="layui-input-block len-short">
<select name="recharge_template_id" lay-filter="recharge_template_id" {if empty($printer_info) || $printer_info['recharge_open'] }lay-verify="required"{/if}>
<option value="">请选择</option>
{foreach $template_list as $k=>$v}
{if $v['type'] == 'recharge'}
<option value="{$v.template_id}" {if !empty($printer_info) && $printer_info['recharge_template_id'] == $v['template_id']} selected {/if}>{$v.template_name}</option>
{/if}
{/foreach}
</select>
</div>
</div>
<div class="layui-form-item recharge_item {if !empty($printer_info) && $printer_info['recharge_open'] == 0}layui-hide{/if}">
<label class="layui-form-label"><span class="required">*</span>打印联数:</label>
<div class="layui-input-block">
<input type="radio" name="recharge_print_num" value="1" {if empty($printer_info) || $printer_info['recharge_print_num'] == 1} checked {/if} lay-verify="required" autocomplete="off" title="1" class="layui-input len-long">
<input type="radio" name="recharge_print_num" value="2" {if !empty($printer_info) && $printer_info['recharge_print_num'] == 2} checked {/if} lay-verify="required" autocomplete="off" title="2" class="layui-input len-long">
<input type="radio" name="recharge_print_num" value="3" {if !empty($printer_info) && $printer_info['recharge_print_num'] == 3} checked {/if} lay-verify="required" autocomplete="off" title="3" class="layui-input len-long">
<input type="radio" name="recharge_print_num" value="4" {if !empty($printer_info) && $printer_info['recharge_print_num'] == 4} checked {/if} lay-verify="required" autocomplete="off" title="4" class="layui-input len-long">
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,502 @@
<style>
.printer-box{display: flex;}
.printer-box > .layui-form{flex: 1;}
.printer-box .preview{width: 310px;margin: 0 20px;}
.printer-box .preview .layui-card-body{margin: 20px;padding: 0 10px;border: 1px solid #ededed;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;}
.printer-box .preview .layui-card-body div{font-size: 12px;color: #333;}
.printer-box .preview .layui-card-body div ~ div{border-top: 1px dashed #ededed ;}
.printer-box .preview .receipt-name{text-align: center;line-height: 40px;}
.printer-box .preview .shopping-name{line-height: 40px;font-size: 16px !important;text-align: center;}
.printer-box .preview .order-info, .printer-box .preview .goods-info, .printer-box .preview .price-info, .printer-box .preview .buyer-info, .printer-box .preview .shopping-info{padding: 8px 0;}
.printer-box .preview .order-info span{display: block;line-height: 2.5;}
.printer-box .preview .goods-info table{width: 100%;}
.printer-box .preview .goods-info table tr{line-height: 2.5;}
.printer-box .preview .goods-info table th{font-weight: normal;}
.printer-box .preview .price-info p{display: flex;line-height: 2.5;justify-content: space-between;}
.printer-box .preview .buyer-info span, .printer-box .preview .shopping-info span{display: block;line-height: 2;}
.printer-box .preview .buyer-message,.printer-box .preview .merchant-message{padding: 10px 0;line-height: 1.5;}
.preview .button-info{height: 40px;line-height: 40px;text-align: center}
.preview .shopping-code{text-align: center;}
.preview .shopping-code img{width: 100px;height: 100px;margin: 10px 0;}
.commodity-type-box{
display: flex;
}
.commodity-type-item{
margin-right: 15px;
padding: 0px 20px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
border: 1px solid #e5e5e5;
cursor: pointer;
/* background: #e5e5e5; */
}
.goods_code_show td{line-height: 1;padding-bottom: 5px}
</style>
<div class="layui-collapse tips-wrap">
<div class="layui-colla-item">
<h2 class="layui-colla-title">操作提示</h2>
<ul class="layui-colla-content layui-show">
<li>管理员可以在此页操作打印模板</li>
</ul>
</div>
</div>
<div class="printer-box">
<div class="layui-form form-wrap">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">模板信息</span>
</div>
<div class="layui-card-body">
{if empty($info)}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>模板类型:</label>
<div class="layui-input-block commodity-type-box">
{foreach $template_type as $k => $v}
<div class="commodity-type-item {if $type == $k} border-color{/if}" onclick="location.hash = ns.hash('printer://shop/template/add', {'type' : '{$v['type']}'})">
<span class="{if $type == $k} text-color{/if}">{$v['type_name']}</span>
</div>
{/foreach}
</div>
</div>
<input type="hidden" name="type_name" value="{$template_type[$type]['type_name']}">
<input type="hidden" name="type" value="{$type}">
{/if}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required"></span>模板名称:</label>
<div class="layui-input-block">
<input type="text" name="template_name" lay-verify="required" {if !empty($info)} value="{$info['template_name']}" {/if} autocomplete="off" class="layui-input len-long">
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">打印信息</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">小票名称:</label>
<div class="layui-input-block">
<input type="text" name="title" {if !empty($info)} value="{$info['title']}"{else/} value="小票名称" {/if} lay-verify="required" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商城名称:</label>
<div class="layui-input-block">
<input type="radio" lay-filter="shop_name" name="head" value="1" title="显示" {if (!empty($info) && $info['head'] == 1) || empty($info) } checked {/if} autocomplete="off" class="layui-input len-long">
<input type="radio" lay-filter="shop_name" name="head" value="0" title="不显示" {if !empty($info) && !$info['head']} checked {/if} autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">买家信息:</label>
<div class="layui-input-block">
<input type="checkbox" name="buy_name" value="1" lay-filter="buyer_name" lay-skin="primary" title="姓名" {if (!empty($info) && $info['buy_name']) || empty($info) } checked {/if}>
<!-- <input type="checkbox" name="buy_mobile" value="1" lay-filter="buyer_phone" lay-skin="primary" title="联系方式" {if (!empty($info) && $info['buy_mobile']) || empty($info) } checked {/if}>-->
<!-- <input type="checkbox" name="buy_address" value="1" lay-filter="buyer_addres" lay-skin="primary" title="地址" {if (!empty($info) && $info['buy_address']) || empty($info) } checked {/if}>-->
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商城信息:</label>
<div class="layui-input-block">
<input type="checkbox" name="shop_mobile" value="1" lay-filter="shopping_phone" lay-skin="primary" title="联系方式" {if (!empty($info) && $info['shop_mobile'])} checked {/if}>
<input type="checkbox" name="shop_address" value="1" lay-filter="shopping_addres" lay-skin="primary" title="地址" {if (!empty($info) && $info['shop_address'])} checked {/if}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商城二维码:</label>
<div class="layui-input-block">
<input type="checkbox" name="shop_qrcode" value="1" lay-filter="shop_qrcode" lay-skin="primary" title="商城二维码" {if (!empty($info) && $info['shop_qrcode']) || empty($info) } checked {/if}>
</div>
</div>
<div class="layui-form-item qrcode_url">
<label class="layui-form-label"><span class="required">*</span>商城二维码链接:</label>
<div class="layui-input-block">
<input type="text" name="qrcode_url" lay-verify="required" autocomplete="off" class="layui-input len-long" {if (!empty($info) && $info['qrcode_url'])} value="{$info['qrcode_url']}" {/if}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">底部信息:</label>
<div class="layui-input-block">
<input type="text" name="bottom" {if (!empty($info) && $info['bottom'])} value="{$info['bottom']}"{else /} value="谢谢惠顾,欢迎下次光临" {/if} lay-verify="required" placeholder="" autocomplete="off" class="layui-input len-long">
</div>
</div>
</div>
</div>
{if !empty($info)}
<input type="hidden" name="template_id" value="{$info['template_id']}">
{/if}
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
</div>
</div>
<div class="preview">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">预览图</span>
</div>
<div class="layui-card-body">
<div class="receipt-name">小票名称</div>
<div class="shopping-name">商城名称</div>
<div class="order-info">
<span>订单编号ME20180702231831547866</span>
<span>支付方式:微信支付</span>
</div>
<div class="goods-info">
<div class="price-info">
<p>
<span>充值金额</span>
<span>¥100</span>
</p>
<p>
<span>支付金额</span>
<span>¥95</span>
</p>
<p>
<span>会员余额</span>
<span>¥230</span>
</p>
</div>
<div class="buyer-message">买家留言:物流很快</div>
<div class="merchant-message layui-hide">卖家留言:欢迎下次购买</div>
<div class="buyer-info">
<span class="name">会员:王二</span>
<!-- <span class="phone">15135669878</span>-->
<!-- <span class="addres">山西省 太原市 小店区 创业街</span>-->
</div>
<div class="shopping-info layui-hide">
<span class="phone layui-hide">4008867993 </span>
<span class="addres layui-hide">山西省 太原市 小店区 创业街 世纪中心4单元1025</span>
</div>
<div class="shopping-code">
<img src="SHOP_IMG/shopping_code.png" alt="">
</div>
<div class="button-info">谢谢惠顾,欢迎下次光临</div>
</div>
</div>
</div>
</div>
<script>
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false;
form.render();
/**
* 表单验证
*/
form.verify({
time: function(value) {
var now_time = (new Date()).getTime();
var start_time = (new Date($("#start_time").val())).getTime();
var end_time = (new Date(value)).getTime();
if (now_time > end_time) {
return '结束时间不能小于当前时间!'
}
if (start_time > end_time) {
return '结束时间不能小于开始时间!';
}
},
flnum: function(value) {
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return '保留小数点后两位!'
}
},
int: function(value) {
if (value <= 1 || value % 1 != 0) {
return '请输入大于1的正整数'
}
}
});
form.on('checkbox(shop_qrcode)', function(data){
var value = data.elem.checked;
if(value == true){
$(".preview .shopping-code").removeClass("layui-hide");
$(".qrcode_url").removeClass('layui-hide');
$("input[name='qrcode_url']").attr("lay-verify", "required");
}else{
$(".preview .shopping-code").addClass("layui-hide");
$(".qrcode_url").addClass('layui-hide');
$("input[name='qrcode_url']").attr("lay-verify", "");
}
});
/**
* 表单提交
*/
form.on('submit(save)', function(data){
var field = data.field;
if(repeat_flag) return;
repeat_flag = true;
let url = ns.url("printer://shop/template/add");
if(parseInt(field.template_id) > 0 ) url = ns.url("printer://shop/template/edit");
$.ajax({
type: 'POST',
dataType: 'JSON',
url: url,
data: field,
async: false,
success: function(res){
repeat_flag = false;
if (res.code == 0) {
layer.confirm('操作成功', {
title:'操作提示',
btn: ['返回列表', '{$info ? "继续编辑" : "继续添加"}'],
closeBtn: 0,
yes: function(index, layero) {
location.hash = ns.hash("printer://shop/template/lists");
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
})
});
/*
* 效果图
* */
// 小票打印
$("input[name='title']").bind("input propertychange",function(event){
$(".preview .receipt-name").text($("input[name='title']").val());
});
//商城名称
form.on('radio(shop_name)', function(data){
if (parseInt(data.value)) $(".shopping-name").removeClass("layui-hide");
else $(".shopping-name").addClass("layui-hide");
});
//商品价格
form.on('checkbox(goods_price_show)', function(data){
if (data.elem.checked) {
$(".goods_price_show").removeClass("layui-hide");
$('.goods_price_type').removeClass("layui-hide");
}else {
$('.goods_price_type').addClass("layui-hide");
$(".goods_price_show").addClass("layui-hide");
}
});
//商品编码
form.on('checkbox(goods_code_show)', function(data){
if (data.elem.checked) $(".goods_code_show").removeClass("layui-hide");
else $(".goods_code_show").addClass("layui-hide");
});
//表单
form.on('checkbox(form_show)', function(data){
if (data.elem.checked) $(".form_show").removeClass("layui-hide");
else $(".form_show").addClass("layui-hide");
});
//买家留言
form.on('checkbox(buyer_message)', function(data){
if(data.elem.checked)
$(".buyer-message").removeClass("layui-hide");
else
$(".buyer-message").addClass("layui-hide");
});
//卖家留言
form.on('checkbox(merchant_message)', function(data){
if(data.elem.checked)
$(".merchant-message").removeClass("layui-hide");
else
$(".merchant-message").addClass("layui-hide");
});
var buyerName = true,buyerPhone=true,buyerAddres=true;
//买家姓名
form.on('checkbox(buyer_name)', function(data){
buyerName = data.elem.checked;
if(data.elem.checked)
$(".buyer-info .name").removeClass("layui-hide");
else
$(".buyer-info .name").addClass("layui-hide");
buyerFn();
});
//买家手机号
form.on('checkbox(buyer_phone)', function(data){
buyerPhone = data.elem.checked;
if(data.elem.checked)
$(".buyer-info .phone").removeClass("layui-hide");
else
$(".buyer-info .phone").addClass("layui-hide");
buyerFn();
});
//买家地址
form.on('checkbox(buyer_addres)', function(data){
buyerAddres= data.elem.checked;
if(data.elem.checked)
$(".buyer-info .addres").removeClass("layui-hide");
else
$(".buyer-info .addres").addClass("layui-hide");
buyerFn();
});
function buyerFn() {
if (!buyerName )
$(".buyer-info").addClass("layui-hide");
else
$(".buyer-info").removeClass("layui-hide");
}
var shoppingPhone=false,shoppingAddress=false;
//商家手机号
form.on('checkbox(shopping_phone)', function(data){
shoppingPhone = data.elem.checked;
if(data.elem.checked)
$(".shopping-info .phone").removeClass("layui-hide");
else
$(".shopping-info .phone").addClass("layui-hide");
shoppingFn();
});
//商家地址
form.on('checkbox(shopping_addres)', function(data){
shoppingAddress= data.elem.checked;
if(data.elem.checked)
$(".shopping-info .addres").removeClass("layui-hide");
else
$(".shopping-info .addres").addClass("layui-hide");
shoppingFn();
});
function shoppingFn() {
if (!shoppingPhone && !shoppingAddress)
$(".shopping-info").addClass("layui-hide");
else
$(".shopping-info").removeClass("layui-hide");
}
// 底部信息
$("input[name='bottom']").bind("input propertychange",function(event){
$(".preview .button-info").text($("input[name='bottom']").val());
});
});
function back() {
location.hash = ns.hash("printer://shop/template/lists");
}
</script>
{if !empty($info)}
<script>
var shop_qrcode = {$info['shop_qrcode']};
if(shop_qrcode){
$(".preview .shopping-code").removeClass("layui-hide");
$(".qrcode_url").removeClass('layui-hide');
$("input[name='qrcode_url']").attr("lay-verify", "required");
}else{
$(".preview .shopping-code").addClass("layui-hide");
$(".qrcode_url").addClass('layui-hide');
$("input[name='qrcode_url']").attr("lay-verify", "");
}
var head = {$info['head']};
if (head) {
$(".shopping-name").removeClass("layui-hide");
}else {
$(".shopping-name").addClass("layui-hide");
}
var goods_price_show = {$info['goods_price_show']};
if (goods_price_show) {
$(".goods_price_show").removeClass("layui-hide");
$('.goods_price_type').removeClass("layui-hide");
}else {
$('.goods_price_type').addClass("layui-hide");
$(".goods_price_show").addClass("layui-hide");
}
var goods_code_show = {$info['goods_code_show']};
if (goods_code_show) $(".goods_code_show").removeClass("layui-hide");
else $(".goods_code_show").addClass("layui-hide");
var form_show = {$info['form_show']};
if (form_show) $(".form_show").removeClass("layui-hide");
else $(".form_show").addClass("layui-hide");
var buy_notes = {$info['buy_notes']};
if(buy_notes) $(".buyer-message").removeClass("layui-hide");
else $(".buyer-message").addClass("layui-hide");
var seller_notes = {$info['seller_notes']};
if(seller_notes) $(".merchant-message").removeClass("layui-hide");
else $(".merchant-message").addClass("layui-hide");
buyerName = {$info['buy_name']},buyerPhone={$info['buy_mobile']},buyerAddres={$info['buy_address']};
if(buyerName) $(".buyer-info .name").removeClass("layui-hide");
else $(".buyer-info .name").addClass("layui-hide");
if(buyerPhone) $(".buyer-info .phone").removeClass("layui-hide");
else $(".buyer-info .phone").addClass("layui-hide");
if(buyerAddres) $(".buyer-info .addres").removeClass("layui-hide");
else $(".buyer-info .addres").addClass("layui-hide");
if (!buyerName ) $(".buyer-info").addClass("layui-hide");
else $(".buyer-info").removeClass("layui-hide");
shoppingPhone= {$info['shop_mobile']},shoppingAddress= {$info['shop_address']};
//商家手机号
if(shoppingPhone)$(".shopping-info .phone").removeClass("layui-hide");
else $(".shopping-info .phone").addClass("layui-hide");
//商家地址
if(shoppingAddress) $(".shopping-info .addres").removeClass("layui-hide");
else $(".shopping-info .addres").addClass("layui-hide");
if (!shoppingPhone && !shoppingAddress) $(".shopping-info").addClass("layui-hide");
else $(".shopping-info").removeClass("layui-hide");
</script>
{/if}

View File

@@ -0,0 +1,38 @@
<?php
/**
*/
namespace addon\memberrecharge\shopapi\controller;
use addon\memberrecharge\model\Memberrecharge as MemberRechargeModel;
use app\shopapi\controller\BaseApi;
class Recharge extends BaseApi
{
public function __construct()
{
//执行父类构造函数
parent::__construct();
$token = $this->checkToken();
if ($token['code'] != 0) exit($this->response($token));
}
/**
* 充值套餐
* @return false|string
*/
public function activity()
{
$member_recharge_model = new MemberRechargeModel();
$res = $member_recharge_model->getConfig($this->site_id);
$res['data']['value'] = $member_recharge_model->getMemberRechargeList([ ['site_id', '=', $this->site_id], ['status', '=', 1] ], 'face_value asc', '*')['data'];
return $this->response($res);
}
}