初始上传
This commit is contained in:
44
addon/giftcard/api/controller/Activate.php
Executable file
44
addon/giftcard/api/controller/Activate.php
Executable file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\card\RealCard;
|
||||
use app\api\controller\BaseApi;
|
||||
|
||||
|
||||
/**
|
||||
* 激活礼品卡
|
||||
*/
|
||||
class Activate extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 激活
|
||||
*/
|
||||
public function activate()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
|
||||
$card_no = $this->params[ 'card_no' ] ?? '';
|
||||
$card_cdk = $this->params[ 'card_cdk' ] ?? '';
|
||||
$realcard_model = new RealCard();
|
||||
$params = array (
|
||||
'card_no' => $card_no,
|
||||
'card_cdk' => $card_cdk,
|
||||
'member_id' => $this->member_id,
|
||||
'site_id' => $this->site_id
|
||||
);
|
||||
$result = $realcard_model->memberCardActivate($params);
|
||||
return $this->response($result);
|
||||
}
|
||||
|
||||
}
|
||||
40
addon/giftcard/api/controller/Card.php
Executable file
40
addon/giftcard/api/controller/Card.php
Executable file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\card\Card as CardModel;
|
||||
use app\api\controller\BaseApi;
|
||||
|
||||
/**
|
||||
* 礼品卡
|
||||
*/
|
||||
class Card extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
|
||||
$card_id = $this->params[ 'card_id' ] ?? 0;
|
||||
$card_model = new CardModel();
|
||||
$params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'card_id' => $card_id
|
||||
);
|
||||
$detail = $card_model->getCardDetail($params);
|
||||
return $this->response($detail);
|
||||
}
|
||||
|
||||
}
|
||||
41
addon/giftcard/api/controller/Carduse.php
Executable file
41
addon/giftcard/api/controller/Carduse.php
Executable file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\card\CardOperation;
|
||||
use app\api\controller\BaseApi;
|
||||
|
||||
/**
|
||||
* 礼品卡使用
|
||||
*/
|
||||
class Carduse extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 储值礼品卡使用
|
||||
*/
|
||||
public function balanceUse()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
|
||||
$member_card_id = $this->params[ 'member_card_id' ] ?? 0;
|
||||
$card_operation_model = new CardOperation();
|
||||
$params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'member_id' => $this->member_id,
|
||||
'member_card_id' => $member_card_id
|
||||
);
|
||||
$result = $card_operation_model->cardUse($params);
|
||||
return $this->response($result);
|
||||
}
|
||||
|
||||
}
|
||||
43
addon/giftcard/api/controller/Category.php
Executable file
43
addon/giftcard/api/controller/Category.php
Executable file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\giftcard\Category as CategoryModel;
|
||||
use app\api\controller\BaseApi;
|
||||
|
||||
/**
|
||||
* 礼品卡分类
|
||||
*/
|
||||
class Category extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 列表信息
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$page = $this->params['page'] ?? 1;
|
||||
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
|
||||
$search_text = $this->params['search_text'] ?? '';
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
);
|
||||
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'category_name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
|
||||
$category_model = new CategoryModel();
|
||||
$list = $category_model->getPageList($condition, $page, $page_size);
|
||||
return $this->response($list);
|
||||
}
|
||||
|
||||
}
|
||||
113
addon/giftcard/api/controller/Giftcard.php
Executable file
113
addon/giftcard/api/controller/Giftcard.php
Executable file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\giftcard\Category as CategoryModel;
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use addon\giftcard\model\giftcard\Media;
|
||||
use app\api\controller\BaseApi;
|
||||
use app\model\shop\Shop;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 礼品卡
|
||||
*/
|
||||
class Giftcard extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 列表信息
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$card_type = $this->params['card_type'] ?? '';
|
||||
$page = $this->params['page'] ?? 1;
|
||||
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
|
||||
$search_text = $this->params['search_text'] ?? '';
|
||||
$category_id = $this->params['category_id'] ?? 0;
|
||||
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'status', '=', '1' ],
|
||||
[ 'is_delete', '=', '0' ],
|
||||
[ 'card_type', '=', 'virtual' ],
|
||||
);
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'card_name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
|
||||
if (!empty($card_type)) {
|
||||
$condition[] = [ 'card_type', '=', $card_type ];
|
||||
}
|
||||
if ($category_id > 0) {
|
||||
$condition[] = [ 'category_id', '=', $category_id ];
|
||||
}
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$list = $giftcard_model->getGiftcardDetailPageList($condition, $page, $page_size, 'sort desc');
|
||||
return $this->response($list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 活动详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$giftcard_id = $this->params['giftcard_id'] ?? 0;
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$media_model = new Media();
|
||||
$detail = $giftcard_model->getGiftcardDetail([ 'giftcard_id' => $giftcard_id, 'site_id' => $this->site_id ])[ 'data' ] ?? [];
|
||||
$order = Db::raw('field(media_id, ' . $detail[ 'media_ids' ] . ')');
|
||||
$detail[ 'media_list' ] = $media_model->getList([ [ 'media_id', 'in', $detail[ 'media_ids' ] ] ], '*', $order)[ 'data' ] ?? [];
|
||||
$detail[ 'mobile' ] = ( new Shop() )->getShopInfo([ [ 'site_id', '=', $this->site_id ] ], 'mobile')[ 'data' ][ 'mobile' ] ?? '';
|
||||
$detail[ 'giftcard_desc' ] = $giftcard_model->giftcardDesc($detail) ?? '';
|
||||
|
||||
return $this->response($this->success($detail));
|
||||
}
|
||||
|
||||
/**
|
||||
* 分类下礼品卡
|
||||
*/
|
||||
public function giftcardListByCategory()
|
||||
{
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
);
|
||||
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'category_name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
|
||||
$category_model = new CategoryModel();
|
||||
$list = $category_model->getList($condition, '*', 'sort desc');
|
||||
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$giftcard_list = $giftcard_model->getGiftcardDetailList([
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'status', '=', 1 ],
|
||||
[ 'is_delete', '=', '0' ],
|
||||
[ 'card_type', '=', 'virtual' ],
|
||||
], '*', 'sort desc');
|
||||
|
||||
foreach ($list[ 'data' ] as $k => $v) {
|
||||
$list[ 'data' ][ $k ][ 'giftcard_list' ] = [];
|
||||
foreach ($giftcard_list[ 'data' ] as $key => $val) {
|
||||
if ($val[ 'category_id' ] == $v[ 'category_id' ]) {
|
||||
$list[ 'data' ][ $k ][ 'giftcard_list' ][] = $val;
|
||||
}
|
||||
}
|
||||
if (empty($list[ 'data' ][ $k ][ 'giftcard_list' ])) unset($list[ 'data' ][ $k ]);
|
||||
ksort($list[ 'data' ]);
|
||||
}
|
||||
return $this->response($list);
|
||||
}
|
||||
|
||||
}
|
||||
70
addon/giftcard/api/controller/GiftcardRecords.php
Executable file
70
addon/giftcard/api/controller/GiftcardRecords.php
Executable file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use addon\giftcard\model\giftcard\Media;
|
||||
use app\api\controller\BaseApi;
|
||||
use app\model\shop\Shop;
|
||||
|
||||
/**
|
||||
* 礼品卡
|
||||
*/
|
||||
class GiftcardRecords extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 列表信息
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$card_type = $this->params['card_type'] ?? '';
|
||||
$page = $this->params['page'] ?? 1;
|
||||
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
|
||||
$search_text = $this->params['search_text'] ?? '';
|
||||
$category_id = $this->params['category_id'] ?? 0;
|
||||
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'status', '', '1' ]
|
||||
);
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'card_name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
|
||||
if (!empty($card_type)) {
|
||||
$condition[] = [ 'card_type', '=', $card_type ];
|
||||
}
|
||||
if ($category_id > 0) {
|
||||
$condition[] = [ 'category_id', '=', $category_id ];
|
||||
}
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$list = $giftcard_model->getGiftcardDetailPageList($condition, $page, $page_size, 'sort desc');
|
||||
return $this->response($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$giftcard_id = $this->params['giftcard_id'] ?? 0;
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$media_model = new Media();
|
||||
$detail = $giftcard_model->getGiftcardDetail([ 'giftcard_id' => $giftcard_id, 'site_id' => $this->site_id ])[ 'data' ] ?? [];
|
||||
$detail[ 'media_list' ] = $media_model->getList([ [ 'media_id', 'in', $detail[ 'media_ids' ] ] ])[ 'data' ] ?? [];
|
||||
$detail[ 'mobile' ] = ( new Shop() )->getShopInfo([ [ 'site_id', '=', $this->site_id ] ], 'mobile')[ 'data' ][ 'mobile' ] ?? '';
|
||||
$detail[ 'giftcard_desc' ] = $giftcard_model->giftcardDesc($detail) ?? '';
|
||||
|
||||
return $this->response($this->success($detail));
|
||||
}
|
||||
|
||||
}
|
||||
75
addon/giftcard/api/controller/Giftcardordercreate.php
Executable file
75
addon/giftcard/api/controller/Giftcardordercreate.php
Executable file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
/**
|
||||
* Index.php
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2015-2025 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
* @author : niuteam
|
||||
* @date : 2022.8.8
|
||||
* @version : v5.0.0.1
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\ordercreate\GiftcardOrderCreate as OrderCreateModel;
|
||||
use app\api\controller\BaseOrderCreateApi;
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
*
|
||||
*/
|
||||
class Giftcardordercreate extends BaseOrderCreateApi
|
||||
{
|
||||
/**
|
||||
* 创建订单
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$order_create = new OrderCreateModel();
|
||||
$data = [
|
||||
'order_key' => $this->params['order_key'] ?? '',
|
||||
];
|
||||
$res = $order_create->setParam(array_merge($data, $this->getInputParam(), $this->getCommonParam(), $this->getDeliveryParam(), $this->getInvoiceParam()))->create();
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算信息
|
||||
*/
|
||||
public function calculate()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$order_create = new OrderCreateModel();
|
||||
$data = [
|
||||
'order_key' => $this->params['order_key'] ?? '',
|
||||
];
|
||||
$res = $order_create->setParam(array_merge($data, $this->getCommonParam(), $this->getDeliveryParam(), $this->getInvoiceParam()))->confirm();
|
||||
return $this->response($this->success($res));
|
||||
}
|
||||
|
||||
/**
|
||||
* 待支付订单 数据初始化
|
||||
* @return string
|
||||
*/
|
||||
public function payment()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$order_create = new OrderCreateModel();
|
||||
$data = [
|
||||
'member_card_id' => $this->params[ 'member_card_id' ] ?? 0,//组合套餐id
|
||||
'goods_sku_list' => !empty($this->params[ 'goods_sku_list' ]) ? json_decode($this->params[ 'goods_sku_list' ], true) : [],
|
||||
];
|
||||
if (!$data[ 'member_card_id' ] && !$data[ 'goods_sku_list' ]) return $this->response($this->error('', '缺少必填参数商品数据'));
|
||||
|
||||
$res = $order_create->setParam(array_merge($data, $this->getCommonParam(), $this->getDeliveryParam()))->orderPayment();
|
||||
return $this->response($this->success($res));
|
||||
}
|
||||
|
||||
}
|
||||
150
addon/giftcard/api/controller/Membercard.php
Executable file
150
addon/giftcard/api/controller/Membercard.php
Executable file
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use addon\giftcard\model\membercard\MemberCard as MemberCardModel;
|
||||
use addon\giftcard\model\membercard\Poster;
|
||||
use addon\giftcard\model\transfer\Blessing;
|
||||
use app\api\controller\BaseApi;
|
||||
use app\model\shop\Shop;
|
||||
use addon\giftcard\model\card\CardUse as CardUseModel;
|
||||
|
||||
/**
|
||||
* 礼品卡
|
||||
*/
|
||||
class Membercard extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 列表信息
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$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;
|
||||
$is_transfer = $this->params[ 'is_transfer' ] ?? 'all';
|
||||
$status = $this->params[ 'status' ] ?? 'all';
|
||||
$source = $this->params[ 'source' ] ?? 'all';
|
||||
$order = $this->params[ 'order' ] ?? 'get_time';
|
||||
$order_id = $this->params[ 'order_id' ] ?? 0;
|
||||
|
||||
$condition = array (
|
||||
[ 'gc.site_id', '=', $this->site_id ],
|
||||
[ 'gmc.member_id', '=', $this->member_id ]
|
||||
);
|
||||
if ($status != 'all') {
|
||||
$condition[] = [ 'gc.status', '=', $status ];
|
||||
}
|
||||
if ($is_transfer != 'all') {
|
||||
$condition[] = [ 'gmc.is_transfer', '=', $is_transfer ];
|
||||
}
|
||||
|
||||
if ($source != 'all') {
|
||||
$condition[] = [ 'gmc.source', '=', $source ];
|
||||
}
|
||||
if (!empty($order_id)) {
|
||||
$condition[] = [ 'gc.order_id', '=', $order_id ];
|
||||
$condition[] = [ 'gmc.source', '=', 'order' ];
|
||||
}
|
||||
|
||||
$member_card_model = new MemberCardModel();
|
||||
$order_by = 'gmc.' . $order . ' desc';
|
||||
|
||||
$list = $member_card_model->getMemberCardDetailPageList($condition, $page, $page_size, $order_by);
|
||||
return $this->response($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
// if ($token['code'] < 0) return $this->response($token);
|
||||
|
||||
$member_card_id = $this->params[ 'member_card_id' ] ?? 0;
|
||||
$member_card_model = new MemberCardModel();
|
||||
$params = array (
|
||||
'site_id' => $this->site_id,
|
||||
// 'member_id' => $this->member_id,
|
||||
'member_card_id' => $member_card_id
|
||||
);
|
||||
$detail = $member_card_model->getMemberCardDetail($params)[ 'data' ] ?? [];
|
||||
if (!empty($detail)) {
|
||||
$detail[ 'is_self' ] = $detail[ 'member_id' ] == $this->member_id ? 1 : 0;
|
||||
$detail[ 'mobile' ] = ( new Shop() )->getShopInfo([ [ 'site_id', '=', $this->site_id ] ], 'mobile')[ 'data' ][ 'mobile' ] ?? '';
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$giftcard_info = $giftcard_model->getGiftcardInfo([ [ 'giftcard_id', '=', $detail[ 'giftcard_id' ] ] ], 'instruction')[ 'data' ] ?? [];
|
||||
$detail[ 'giftcard_desc' ] = $giftcard_model->giftcardDesc($detail) ?? '';
|
||||
$detail[ 'instruction' ] = $giftcard_info[ 'instruction' ] ?? '';
|
||||
|
||||
if ($detail[ 'status' ] == 'used') {
|
||||
$card_use_model = new CardUseModel();
|
||||
$card_use_condition = array (
|
||||
[ 'card_id', '=', $detail[ 'card_id' ] ]
|
||||
);
|
||||
$card_use_info = $card_use_model->getCardUseRecordsInfo($card_use_condition, 'order_id')[ 'data' ] ?? [];
|
||||
if (!empty($card_use_info)) {
|
||||
$detail[ 'use_order_id' ] = $card_use_info[ 'order_id' ];
|
||||
}
|
||||
}
|
||||
if ($detail[ 'to_member_id' ] > 0) {
|
||||
$blessing_model = new Blessing();
|
||||
$blessing_info = $blessing_model->getMemberCardBlessingInfo([ [ 'card_id', '=', $detail[ 'card_id' ] ], [ 'to_member_id', '=', $detail[ 'to_member_id' ] ] ], 'blessing')[ 'data' ] ?? [];
|
||||
$detail[ 'blessing' ] = $blessing_info[ 'blessing' ] ?? '';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $this->response($this->success($detail));
|
||||
}
|
||||
|
||||
/**
|
||||
* 祝福
|
||||
* @return false|string
|
||||
*/
|
||||
public function blessing()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$member_card_id = $this->params[ 'member_card_id' ] ?? 0;
|
||||
$blessing = $this->params[ 'blessing' ] ?? '';
|
||||
$blessing_model = new Blessing();
|
||||
$params = array (
|
||||
'blessing' => $blessing,
|
||||
'member_id' => $this->member_id,
|
||||
'member_card_id' => $member_card_id,
|
||||
'site_id' => $this->site_id
|
||||
);
|
||||
$result = $blessing_model->blessing($params);
|
||||
return $this->response($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品海报
|
||||
*/
|
||||
public function poster()
|
||||
{
|
||||
$this->checkToken();
|
||||
|
||||
$promotion_type = 'giftcard';
|
||||
$qrcode_param = json_decode($this->params[ 'qrcode_param' ], true);
|
||||
$qrcode_param[ 'source_member' ] = $this->member_id;
|
||||
$poster = new Poster();
|
||||
$res = $poster->poster($this->params[ 'app_type' ], $this->params[ 'page' ], $qrcode_param, $promotion_type, $this->site_id);
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
}
|
||||
105
addon/giftcard/api/controller/Order.php
Executable file
105
addon/giftcard/api/controller/Order.php
Executable file
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\order\GiftCardOrder;
|
||||
use addon\giftcard\model\order\GiftCardOrderOperation;
|
||||
use app\api\controller\BaseApi;
|
||||
|
||||
/**
|
||||
* 礼品卡订单
|
||||
*/
|
||||
class Order extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 列表信息
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$card_type = $this->params['card_type'] ?? '';
|
||||
$page = $this->params['page'] ?? 1;
|
||||
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
|
||||
$search_text = $this->params['search_text'] ?? '';
|
||||
$order_status = $this->params['order_status'] ?? 'all';
|
||||
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'member_id', '=', $this->member_id ],
|
||||
);
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'card_name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
|
||||
if (!empty($card_type)) {
|
||||
$condition[] = [ 'card_type', '=', $card_type ];
|
||||
}
|
||||
if ($order_status != 'all') {
|
||||
$condition[] = [ 'order_status', '=', $order_status ];
|
||||
}
|
||||
$order_model = new GiftCardOrder();
|
||||
|
||||
$field = 'order_id,num,order_no,site_id,site_name,order_name,out_trade_no,giftcard_id,card_right_type,card_cover,media_id,order_money,goods_money,pay_money,pay_type,pay_type_name,create_time,pay_time,order_status,member_id,order_from,order_from_name,close_cause,buyer_message,card_price';
|
||||
$list = $order_model->getOrderDetailPageList($condition, $page, $page_size, 'order_id desc', $field);
|
||||
|
||||
return $this->response($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$order_id = $this->params['order_id'] ?? '';
|
||||
if (empty($order_id)) {
|
||||
return $this->response($this->error('', 'REQUEST_ORDER_ID'));
|
||||
}
|
||||
|
||||
$order_model = new GiftCardOrder();
|
||||
$info = $order_model->getOrderDetail([ 'site_id' => $this->site_id, 'member_id' => $this->member_id, 'order_id' => $order_id ])[ 'data' ] ?? [];
|
||||
|
||||
if (!empty($info)) {
|
||||
$card_model = new Card();
|
||||
$card_list = $card_model->getCardList([ [ 'c.order_id', '=', $order_id ], [ 'c.member_id', '=', $this->member_id ] ], 'c.*,mc.member_card_id', '', 'c', [
|
||||
[ 'giftcard_member_card mc', 'c.card_id=mc.card_id', 'left' ]
|
||||
])[ 'data' ] ?? [];
|
||||
$info[ 'card_list' ] = $card_list;
|
||||
}
|
||||
return $this->response($this->success($info));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单关闭
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$order_id = $this->params['order_id'] ?? '';
|
||||
if (empty($order_id)) {
|
||||
return $this->response($this->error('', 'REQUEST_ORDER_ID'));
|
||||
}
|
||||
|
||||
$order_model = new GiftCardOrderOperation();
|
||||
|
||||
$res = $order_model->close([
|
||||
'site_id' => $this->site_id,
|
||||
'order_id' => $order_id
|
||||
]);
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
}
|
||||
79
addon/giftcard/api/controller/Ordercreate.php
Executable file
79
addon/giftcard/api/controller/Ordercreate.php
Executable file
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* Index.php
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2015-2025 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
* @author : niuteam
|
||||
* @date : 2022.8.8
|
||||
* @version : v5.0.0.1
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use app\api\controller\BaseApi;
|
||||
use addon\giftcard\model\order\GiftCardOrderCreate as OrderCreateModel;
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class Ordercreate extends BaseApi
|
||||
{
|
||||
/**
|
||||
* 创建订单
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$order_create = new OrderCreateModel();
|
||||
$data = [
|
||||
'giftcard_id' => $this->params[ 'giftcard_id' ] ?? 0,//礼包id
|
||||
'num' => $this->params[ 'num' ] ?? 1,//商品数量(买几套)
|
||||
'media_id' => $this->params[ 'media_id' ] ?? 0,
|
||||
'card_cover' => $this->params[ 'card_cover' ] ?? '',
|
||||
'site_id' => $this->site_id,//站点id
|
||||
'member_id' => $this->member_id,
|
||||
'order_from' => $this->params[ 'app_type' ],
|
||||
'order_from_name' => $this->params[ 'app_type_name' ],
|
||||
'buyer_message' => $this->params[ 'buyer_message' ] ?? '',
|
||||
];
|
||||
if (empty($data[ 'giftcard_id' ])) {
|
||||
return $this->response($this->error('', '缺少必填参数商品数据'));
|
||||
}
|
||||
$res = $order_create->create($data);
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算信息
|
||||
*/
|
||||
public function calculate()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$order_create = new OrderCreateModel();
|
||||
$data = [
|
||||
'giftcard_id' => $this->params[ 'giftcard_id' ] ?? 0,//礼包id
|
||||
'num' => $this->params[ 'num' ] ?? 1,//商品数量(买几套)
|
||||
'media_id' => $this->params[ 'media_id' ] ?? 0,
|
||||
'card_cover' => $this->params[ 'card_cover' ] ?? '',
|
||||
'site_id' => $this->site_id,//站点id
|
||||
'member_id' => $this->member_id,
|
||||
'order_from' => $this->params[ 'app_type' ],
|
||||
'order_from_name' => $this->params[ 'app_type_name' ],
|
||||
'buyer_message' => $this->params[ 'buyer_message' ] ?? '',
|
||||
];
|
||||
if (empty($data[ 'giftcard_id' ])) {
|
||||
return $this->response($this->error('', '缺少必填参数商品数据'));
|
||||
}
|
||||
$res = $order_create->calculate($data);
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
}
|
||||
60
addon/giftcard/api/controller/Transfer.php
Executable file
60
addon/giftcard/api/controller/Transfer.php
Executable file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\api\controller;
|
||||
|
||||
use addon\giftcard\model\transfer\Blessing;
|
||||
use addon\giftcard\model\transfer\Transfer as TransferModel;
|
||||
use app\api\controller\BaseApi;
|
||||
|
||||
/**
|
||||
* 礼品卡
|
||||
*/
|
||||
class Transfer extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 转赠
|
||||
*/
|
||||
public function transfer()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token[ 'code' ] < 0) return $this->response($token);
|
||||
$no = $this->params[ 'no' ] ?? '';
|
||||
$blessing_model = new Blessing();
|
||||
$info = $blessing_model->getMemberCardBlessingInfo([ [ 'no', '=', $no ] ])[ 'data' ] ?? [];
|
||||
$transfer_model = new TransferModel();
|
||||
$params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'member_id' => $this->member_id,
|
||||
'blessing_id' => $info[ 'blessing_id' ] ?? 0
|
||||
);
|
||||
$result = $transfer_model->transfer($params);
|
||||
return $this->response($result);
|
||||
}
|
||||
|
||||
|
||||
public function blessingDetail()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
// if ($token['code'] < 0) return $this->response($token);
|
||||
|
||||
$no = $this->params[ 'no' ] ?? '';
|
||||
$blessing_model = new Blessing();
|
||||
$params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'no' => $no,
|
||||
'member_id' => $this->member_id
|
||||
);
|
||||
$result = $blessing_model->getBlessingDetail($params);
|
||||
|
||||
return $this->response($result);
|
||||
}
|
||||
}
|
||||
86
addon/giftcard/config/diy_view.php
Executable file
86
addon/giftcard/config/diy_view.php
Executable file
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
|
||||
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
|
||||
* =========================================================
|
||||
*/
|
||||
return [
|
||||
|
||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||
'template' => [],
|
||||
|
||||
// 后台自定义组件——装修
|
||||
'util' => [],
|
||||
|
||||
// 自定义页面路径
|
||||
'link' => [
|
||||
[
|
||||
'name' => 'GiftCARD',
|
||||
'title' => '礼品卡',
|
||||
'parent' => 'MARKETING_LINK',
|
||||
'wap_url' => '',
|
||||
'web_url' => '',
|
||||
'sort' => 0,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'GIFTCARDMANAGE',
|
||||
'title' => '礼品卡专区',
|
||||
'wap_url' => '/pages_promotion/giftcard/index',
|
||||
'web_url' => '',
|
||||
'sort' => 1
|
||||
],
|
||||
[
|
||||
'name' => 'MYGIFTCARD',
|
||||
'title' => '我的卡包',
|
||||
'wap_url' => '/pages_promotion/giftcard/list',
|
||||
'web_url' => '',
|
||||
'sort' => 2
|
||||
],
|
||||
[
|
||||
'name' => 'GIFTCARD_RECEIVE_LIST',
|
||||
'title' => '收到的卡片',
|
||||
'wap_url' => '/pages_promotion/giftcard/receive_list',
|
||||
'web_url' => '',
|
||||
'sort' => 3
|
||||
],
|
||||
[
|
||||
'name' => 'GIFTCARD_GIVE_LIST',
|
||||
'title' => '送出的卡片',
|
||||
'wap_url' => '/pages_promotion/giftcard/give_list',
|
||||
'web_url' => '',
|
||||
'sort' => 4
|
||||
],
|
||||
[
|
||||
'name' => 'GIFTCARD_EXCHANGE',
|
||||
'title' => '卡密激活',
|
||||
'wap_url' => '/pages_promotion/giftcard/exchange',
|
||||
'web_url' => '',
|
||||
'sort' => 5
|
||||
],
|
||||
]
|
||||
],
|
||||
],
|
||||
|
||||
// 自定义图标库
|
||||
'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' => []
|
||||
];
|
||||
47
addon/giftcard/config/event.php
Executable file
47
addon/giftcard/config/event.php
Executable file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
// 事件定义文件
|
||||
return [
|
||||
'bind' => [
|
||||
|
||||
],
|
||||
|
||||
'listen' => [
|
||||
//展示活动
|
||||
'ShowPromotion' => [
|
||||
'addon\giftcard\event\ShowPromotion',
|
||||
],
|
||||
'GiftCardOrderClose' => [
|
||||
'addon\giftcard\event\GiftCardOrderClose',
|
||||
],
|
||||
'GiftCardOrderPayNotify' => [
|
||||
'addon\giftcard\event\GiftCardOrderPayNotify',
|
||||
],
|
||||
|
||||
'IncomeStatistics' => [
|
||||
'addon\giftcard\event\IncomeStatistics'
|
||||
],
|
||||
//统计写入
|
||||
'AddStat' => [
|
||||
'addon\giftcard\event\AddStat',
|
||||
],
|
||||
'CronCardExpire' => [
|
||||
'addon\giftcard\event\CronCardExpire'
|
||||
],
|
||||
'PayReset' => [
|
||||
'addon\giftcard\event\PayReset'
|
||||
],
|
||||
'OrderPayAfter' => [
|
||||
'addon\giftcard\event\OrderPayAfter'
|
||||
],
|
||||
'OrderPromotionType' => [
|
||||
'addon\giftcard\event\OrderPromotionType',
|
||||
],
|
||||
//通过支付信息获取手机端订单详情路径
|
||||
'WapOrderDetailPathByPayInfo' => [
|
||||
'addon\giftcard\event\WapOrderDetailPathByPayInfo',
|
||||
],
|
||||
],
|
||||
|
||||
'subscribe' => [
|
||||
],
|
||||
];
|
||||
20
addon/giftcard/config/info.php
Executable file
20
addon/giftcard/config/info.php
Executable file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
return [
|
||||
'name' => 'giftcard',
|
||||
'title' => '礼品卡',
|
||||
'description' => '礼品卡管理',
|
||||
'type' => 'promotion', //插件类型 system :系统插件(自动安装), promotion:扩展营销插件 tool:工具插件
|
||||
'status' => 1,
|
||||
'author' => '',
|
||||
'version' => '5.5.3',
|
||||
'version_no' => '553250709001',
|
||||
'content' => '',
|
||||
];
|
||||
177
addon/giftcard/config/menu_shop.php
Executable file
177
addon/giftcard/config/menu_shop.php
Executable file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | 店铺端菜单设置
|
||||
// +----------------------------------------------------------------------
|
||||
return [
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD',
|
||||
'title' => '礼品卡',
|
||||
'url' => 'giftcard://shop/giftcard/lists',
|
||||
'picture' => 'addon/giftcard/shop/view/public/img/distribution_new.png',
|
||||
'picture_selected' => 'addon/giftcard/shop/view/public/img/distribution_select.png',
|
||||
'parent' => 'PROMOTION_CENTER',
|
||||
'is_show' => 1,
|
||||
'sort' => 100,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_LIST',
|
||||
'title' => '礼品卡列表',
|
||||
'url' => 'giftcard://shop/giftcard/lists',
|
||||
'is_show' => 1,
|
||||
'sort' => 1,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_ADD',
|
||||
'title' => '添加礼品卡',
|
||||
'url' => 'giftcard://shop/giftcard/add',
|
||||
'sort' => 1,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_EDIT',
|
||||
'title' => '编辑礼品卡',
|
||||
'url' => 'giftcard://shop/giftcard/edit',
|
||||
'sort' => 2,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_DELETE',
|
||||
'title' => '删除礼品卡',
|
||||
'url' => 'giftcard://shop/giftcard/delete',
|
||||
'sort' => 3,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_DETAIL',
|
||||
'title' => '礼品卡详情',
|
||||
'url' => 'giftcard://shop/giftcard/detail',
|
||||
'sort' => 4,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_IMPORT',
|
||||
'title' => '制卡',
|
||||
'url' => 'giftcard://shop/cardimport/lists',
|
||||
'sort' => 5,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_IMPORT_DETELE',
|
||||
'title' => '删除',
|
||||
'url' => 'giftcard://shop/cardimport/delete',
|
||||
'sort' => 6,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_CARD_LISTS',
|
||||
'title' => '查看卡密',
|
||||
'url' => 'giftcard://shop/card/lists',
|
||||
'sort' => 6,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_CARD_DETAIL',
|
||||
'title' => '详情',
|
||||
'url' => 'giftcard://shop/card/detail',
|
||||
'sort' => 7,
|
||||
'is_show' => 0,
|
||||
'type' => 'button'
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_CATEGORY_LIST',
|
||||
'title' => '分组列表',
|
||||
'url' => 'giftcard://shop/category/lists',
|
||||
'is_show' => 1,
|
||||
'sort' => 2,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_CATEGORY_ADD',
|
||||
'title' => '添加分组',
|
||||
'url' => 'giftcard://shop/category/add',
|
||||
'sort' => 1,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_CATEGORY_EDIT',
|
||||
'title' => '编辑分组',
|
||||
'url' => 'giftcard://shop/category/edit',
|
||||
'sort' => 2,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_CATEGORY_DELETE',
|
||||
'title' => '删除分组',
|
||||
'url' => 'giftcard://shop/category/delete',
|
||||
'sort' => 3,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
]
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_MEDIA_LIST',
|
||||
'title' => '素材列表',
|
||||
'url' => 'giftcard://shop/media/lists',
|
||||
'is_show' => 1,
|
||||
'sort' => 3,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_MEDIA_ADD',
|
||||
'title' => '添加素材',
|
||||
'url' => 'giftcard://shop/media/add',
|
||||
'sort' => 1,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_MEDIA_EDIT',
|
||||
'title' => '编辑素材',
|
||||
'url' => 'giftcard://shop/media/edit',
|
||||
'sort' => 2,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_MEDIA_DELETE',
|
||||
'title' => '删除素材',
|
||||
'url' => 'giftcard://shop/media/delete',
|
||||
'sort' => 3,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
]
|
||||
],
|
||||
]
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_BUYORDER',
|
||||
'title' => '礼品卡订单',
|
||||
'url' => 'giftcard://shop/order/order',
|
||||
'is_show' => 1,
|
||||
'sort' => 4,
|
||||
'parent' => 'ORDER_MANAGE',
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'PROMOTION_GIFTCARD_BUYORDER_DETAIL',
|
||||
'title' => '订单详情',
|
||||
'url' => 'giftcard://shop/order/detail',
|
||||
'sort' => 3,
|
||||
'is_show' => 0,
|
||||
|
||||
],
|
||||
]
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
1
addon/giftcard/data/install.sql
Executable file
1
addon/giftcard/data/install.sql
Executable file
@@ -0,0 +1 @@
|
||||
SET NAMES 'utf8';
|
||||
1
addon/giftcard/data/uninstall.sql
Executable file
1
addon/giftcard/data/uninstall.sql
Executable file
@@ -0,0 +1 @@
|
||||
SET NAMES 'utf8';
|
||||
35
addon/giftcard/event/AddStat.php
Executable file
35
addon/giftcard/event/AddStat.php
Executable file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
|
||||
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
|
||||
/**
|
||||
* 礼品卡统计
|
||||
*/
|
||||
class AddStat
|
||||
{
|
||||
|
||||
public function handle($params)
|
||||
{
|
||||
$type = $params['type'];
|
||||
if($type == 'gift_card_order'){
|
||||
$giftcard_stat_model = new CardStat();
|
||||
$res = $giftcard_stat_model->addGiftcardStat($params['data']);
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
44
addon/giftcard/event/CronCardExpire.php
Executable file
44
addon/giftcard/event/CronCardExpire.php
Executable file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
|
||||
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use addon\giftcard\model\card\CardOperation;
|
||||
use addon\giftcard\model\giftcard\GiftCard;
|
||||
|
||||
/**
|
||||
* 礼品卡过期(轮询 一天一次)
|
||||
*/
|
||||
class CronCardExpire
|
||||
{
|
||||
|
||||
public function handle($params)
|
||||
{
|
||||
$card_operation_model = new CardOperation();
|
||||
$card_condition = [
|
||||
[ 'valid_time', 'between', [ 1, time() ] ]
|
||||
];
|
||||
$card_ids = model('giftcard_card')->getColumn($card_condition, 'card_id');
|
||||
$res = $card_operation_model->cardExpire([ 'card_ids' => $card_ids ]);
|
||||
|
||||
// 礼品卡到期
|
||||
$gift_card_model = new GiftCard();
|
||||
$gift_card_model->modifyStatus(0, [
|
||||
[ 'validity_type', '=', 'date' ],
|
||||
[ 'validity_time', '<', time() ]
|
||||
]);
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
33
addon/giftcard/event/GiftCardOrderClose.php
Executable file
33
addon/giftcard/event/GiftCardOrderClose.php
Executable file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
|
||||
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use addon\giftcard\model\order\GiftCardOrderOperation;
|
||||
|
||||
/**
|
||||
* 订单关闭
|
||||
*/
|
||||
class GiftCardOrderClose
|
||||
{
|
||||
|
||||
public function handle($params)
|
||||
{
|
||||
$model = new GiftCardOrderOperation();
|
||||
$params[ 'close_cause' ] = '长时间未支付,订单自动关闭';
|
||||
$params[ 'order_id' ] = $params[ 'relate_id' ];
|
||||
$res = $model->close($params);
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
31
addon/giftcard/event/GiftCardOrderPayNotify.php
Executable file
31
addon/giftcard/event/GiftCardOrderPayNotify.php
Executable file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
|
||||
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use addon\giftcard\model\order\GiftCardOrderOperation;
|
||||
|
||||
/**
|
||||
* 支付回调
|
||||
*/
|
||||
class GiftCardOrderPayNotify
|
||||
{
|
||||
|
||||
public function handle($params)
|
||||
{
|
||||
$model = new GiftCardOrderOperation();
|
||||
$res = $model->orderPay($params);
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
40
addon/giftcard/event/IncomeStatistics.php
Executable file
40
addon/giftcard/event/IncomeStatistics.php
Executable file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use addon\giftcard\model\order\GiftCardOrder;
|
||||
|
||||
/**
|
||||
* 资金收入统计
|
||||
*/
|
||||
class IncomeStatistics
|
||||
{
|
||||
public function handle($param)
|
||||
{
|
||||
$money = ( new GiftCardOrder() )->getOrderSum(
|
||||
[
|
||||
[ 'go.site_id', '=', $param[ 'site_id' ] ],
|
||||
[ 'go.pay_time', 'between', [ $param[ 'start_time' ], $param[ 'end_time' ] ] ]
|
||||
], 'p.pay_money', 'go', [
|
||||
[
|
||||
'pay p', 'go.out_trade_no = p.out_trade_no', 'left'
|
||||
]
|
||||
])[ 'data' ];
|
||||
return [
|
||||
[
|
||||
'title' => '礼品卡订单',
|
||||
'value' => $money,
|
||||
'desc' => '统计时间内,所有礼品卡订单金额之和',
|
||||
'url' => 'giftcard://shop/order/order',
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
103
addon/giftcard/event/Install.php
Executable file
103
addon/giftcard/event/Install.php
Executable file
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use addon\giftcard\model\giftcard\Media;
|
||||
use app\model\system\Cron;
|
||||
|
||||
/**
|
||||
* 应用安装
|
||||
*/
|
||||
class Install
|
||||
{
|
||||
/**
|
||||
* 执行安装
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
try {
|
||||
execute_sql('addon/giftcard/data/install.sql');
|
||||
|
||||
$cron = new Cron();
|
||||
$cron->deleteCron([ [ 'event', '=', 'CronCardExpire' ] ]);
|
||||
$cron->addCron(2, 1, '礼品卡过期', 'CronCardExpire', time(), 0);
|
||||
|
||||
$site_id = 1;
|
||||
$media = ( new Media() )->getInfo([ [ 'is_system', '=', 1 ], [ 'site_id', '=', $site_id ] ], 'media_id')[ 'data' ];
|
||||
if (empty($media)) {
|
||||
( new Media() )->addList($this->giftMedia($site_id));
|
||||
}
|
||||
return success();
|
||||
} catch (\Exception $e) {
|
||||
return error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private function giftMedia($site_id)
|
||||
{
|
||||
return [
|
||||
[
|
||||
'site_id' => $site_id,
|
||||
'media_type' => 'img',
|
||||
'is_system' => 1,
|
||||
'media_name' => '001.png',
|
||||
'media_path' => 'public/uniapp/giftcard/media/001.png',
|
||||
'media_spec' => '640*400',
|
||||
'create_time' => time(),
|
||||
],
|
||||
[
|
||||
'site_id' => $site_id,
|
||||
'media_type' => 'img',
|
||||
'is_system' => 1,
|
||||
'media_name' => '002.png',
|
||||
'media_path' => 'public/uniapp/giftcard/media/002.png',
|
||||
'media_spec' => '640*400',
|
||||
'create_time' => time(),
|
||||
],
|
||||
[
|
||||
'site_id' => $site_id,
|
||||
'media_type' => 'img',
|
||||
'is_system' => 1,
|
||||
'media_name' => '003.png',
|
||||
'media_path' => 'public/uniapp/giftcard/media/003.png',
|
||||
'media_spec' => '640*400',
|
||||
'create_time' => time(),
|
||||
],
|
||||
[
|
||||
'site_id' => $site_id,
|
||||
'media_type' => 'img',
|
||||
'is_system' => 1,
|
||||
'media_name' => '004.png',
|
||||
'media_path' => 'public/uniapp/giftcard/media/004.png',
|
||||
'media_spec' => '640*400',
|
||||
'create_time' => time(),
|
||||
],
|
||||
[
|
||||
'site_id' => $site_id,
|
||||
'media_type' => 'img',
|
||||
'is_system' => 1,
|
||||
'media_name' => '005.png',
|
||||
'media_path' => 'public/uniapp/giftcard/media/005.png',
|
||||
'media_spec' => '640*400',
|
||||
'create_time' => time(),
|
||||
],
|
||||
[
|
||||
'site_id' => $site_id,
|
||||
'media_type' => 'img',
|
||||
'is_system' => 1,
|
||||
'media_name' => '006.png',
|
||||
'media_path' => 'public/uniapp/giftcard/media/006.png',
|
||||
'media_spec' => '640*400',
|
||||
'create_time' => time(),
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
39
addon/giftcard/event/OrderPayAfter.php
Executable file
39
addon/giftcard/event/OrderPayAfter.php
Executable file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
|
||||
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
|
||||
/**
|
||||
* 礼品卡统计
|
||||
*/
|
||||
class OrderPayAfter
|
||||
{
|
||||
|
||||
public function handle($params)
|
||||
{
|
||||
$promotion_type = $params[ 'promotion_type' ];
|
||||
if ($promotion_type == 'giftcard') {
|
||||
$condition = array (
|
||||
[ 'order_id', '=', $params[ 'order_id' ] ]
|
||||
);
|
||||
$data = array (
|
||||
'is_enable_refund' => 0
|
||||
);
|
||||
//将订单改成不可退款
|
||||
model('order')->update($data, $condition);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
27
addon/giftcard/event/OrderPromotionType.php
Executable file
27
addon/giftcard/event/OrderPromotionType.php
Executable file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
/**
|
||||
* 活动
|
||||
*/
|
||||
class OrderPromotionType
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动类型
|
||||
* @return array
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
return [ "name" => "礼品卡优惠", "type" => "giftcard" ];
|
||||
}
|
||||
}
|
||||
33
addon/giftcard/event/PayReset.php
Executable file
33
addon/giftcard/event/PayReset.php
Executable file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
|
||||
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use addon\giftcard\model\order\GiftCardOrderPay;
|
||||
|
||||
/**
|
||||
* 礼品卡支付重置
|
||||
*/
|
||||
class PayReset
|
||||
{
|
||||
|
||||
public function handle($params)
|
||||
{
|
||||
$event = $params[ 'event' ];
|
||||
if ($event == 'GiftCardOrderPayNotify') {
|
||||
$giftcard_order_pay_model = new GiftCardOrderPay();
|
||||
$result = $giftcard_order_pay_model->resetPay($params);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
45
addon/giftcard/event/ShowPromotion.php
Executable file
45
addon/giftcard/event/ShowPromotion.php
Executable file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
/**
|
||||
* 店铺活动
|
||||
*/
|
||||
class ShowPromotion
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动展示
|
||||
* @return array
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$data = [
|
||||
'shop' => [
|
||||
[
|
||||
//插件名称
|
||||
'name' => 'giftcard',
|
||||
//展示分类(根据平台端设置,admin(平台营销),shop:店铺营销,member:会员营销, tool:应用工具)
|
||||
'show_type' => 'shop',
|
||||
//展示主题
|
||||
'title' => '礼品卡',
|
||||
//展示介绍
|
||||
'description' => '购买礼品,赠送好友',
|
||||
//展示图标
|
||||
'icon' => 'addon/giftcard/icon.png',
|
||||
//跳转链接
|
||||
'url' => 'giftcard://shop/giftcard/lists',
|
||||
]
|
||||
]
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
34
addon/giftcard/event/UnInstall.php
Executable file
34
addon/giftcard/event/UnInstall.php
Executable file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use app\model\system\Cron;
|
||||
|
||||
/**
|
||||
* 应用卸载
|
||||
*/
|
||||
class UnInstall
|
||||
{
|
||||
/**
|
||||
* 执行卸载
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
try {
|
||||
$cron = new Cron();
|
||||
$cron->deleteCron([ [ 'event', '=', 'CronCardExpire' ] ]);
|
||||
execute_sql('addon/giftcard/data/uninstall.sql');
|
||||
return success();
|
||||
} catch (\Exception $e) {
|
||||
return error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
30
addon/giftcard/event/WapOrderDetailPathByPayInfo.php
Executable file
30
addon/giftcard/event/WapOrderDetailPathByPayInfo.php
Executable file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\event;
|
||||
|
||||
use addon\giftcard\model\order\GiftCardOrder;
|
||||
|
||||
/**
|
||||
* 通过支付信息获取手机端订单详情路径
|
||||
*/
|
||||
class WapOrderDetailPathByPayInfo
|
||||
{
|
||||
public function handle($data)
|
||||
{
|
||||
if($data['event'] == 'GiftCardOrderPayNotify'){
|
||||
$order_model = new GiftCardOrder();
|
||||
$order_info = $order_model->getOrderInfo([['out_trade_no', '=', $data['out_trade_no']]], 'order_id')[ 'data' ];
|
||||
if(!empty($order_info)){
|
||||
return '/pages_promotion/giftcard/order_detail?order_id='.$order_info['order_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
addon/giftcard/icon.png
Executable file
BIN
addon/giftcard/icon.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
376
addon/giftcard/model/card/Card.php
Executable file
376
addon/giftcard/model/card/Card.php
Executable file
@@ -0,0 +1,376 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
use addon\giftcard\model\giftcard\GiftCard;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Member;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* 礼品卡工具类
|
||||
*
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class Card extends BaseModel
|
||||
{
|
||||
public $source_list = array (
|
||||
'order' => '购买',
|
||||
'gift' => '赠送'
|
||||
);
|
||||
|
||||
public function getStatusList($card_type)
|
||||
{
|
||||
switch ( $card_type ) {
|
||||
case 'virtual'://电子卡
|
||||
return array (
|
||||
'to_use' => '待使用',
|
||||
'used' => '已使用',
|
||||
'expire' => '已过期'
|
||||
);
|
||||
break;
|
||||
case 'real'://实体卡
|
||||
return array (
|
||||
'to_activate' => '待激活',
|
||||
'to_use' => '待使用',
|
||||
'used' => '已使用',
|
||||
'expire' => '已过期',
|
||||
'invalid' => '已失效'
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成礼品卡记录
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addCardItem($params)
|
||||
{
|
||||
$insert_data = $params[ 'insert_data' ];//可能包含订单id
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
|
||||
$card_type = $params[ 'card_type' ] ?? '';
|
||||
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
|
||||
//批量生成卡号
|
||||
$giftcard_model = new Giftcard();
|
||||
$card_no_res = $giftcard_model->createCardNo($params['giftcard_id'], 1);
|
||||
if($card_no_res['code'] < 0) return $card_no_res;
|
||||
$card_no = $card_no_res['data'][0];
|
||||
if ($card_type == 'real') {
|
||||
$count = model('giftcard_card')->getCount([ [ 'card_no', '=', $card_no ] ]);
|
||||
if ($count > 0) {
|
||||
return $this->error([], '当前卡密和编号已存在');
|
||||
}
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'card_no' => $card_no,
|
||||
'card_type' => $card_type,
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'member_id' => $member_id,
|
||||
'create_time' => time(),
|
||||
'card_right_type' => $card_right_type,
|
||||
'valid_time' => $this->getValidityTime($params),
|
||||
'balance' => $params[ 'balance' ] ?? 0,
|
||||
'card_right_goods_type' => $params[ 'card_right_goods_type' ] ?? '',
|
||||
'card_right_goods_count' => $params[ 'card_right_goods_count' ] ?? '',
|
||||
);
|
||||
$card_id = model('giftcard_card')->add(array_merge($data, $insert_data));
|
||||
if ($card_type == 'virtual') {
|
||||
$goods_list = $params[ 'goods_list' ];
|
||||
foreach ($goods_list as $k => $v) {
|
||||
$v[ 'card_id' ] = $card_id;
|
||||
$v[ 'giftcard_id' ] = $giftcard_id;
|
||||
$v[ 'card_right_type' ] = $card_right_type;
|
||||
$this->addCardItemGoods($v);
|
||||
}
|
||||
}
|
||||
return $this->success($card_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡项
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addCardItemGoods($params)
|
||||
{
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'giftcard_id' => $params[ 'giftcard_id' ],
|
||||
'card_id' => $params[ 'card_id' ],
|
||||
'sku_id' => $params[ 'sku_id' ] ?? 0,
|
||||
'sku_name' => $params[ 'sku_name' ] ?? '',
|
||||
'sku_image' => $params[ 'sku_image' ] ?? '',
|
||||
'sku_no' => $params[ 'sku_no' ] ?? '',
|
||||
'goods_id' => $params[ 'goods_id' ] ?? 0,
|
||||
'goods_name' => $params[ 'goods_name' ] ?? '',
|
||||
'balance' => $params[ 'balance' ] ?? 0,//储值余额
|
||||
'total_balance' => $params[ 'total_balance' ] ?? 0,
|
||||
'price' => $params[ 'price' ] ?? 0,
|
||||
'total_num' => $params[ 'num' ] ?? 1,//购买数量
|
||||
'order_id' => $params[ 'order_id' ] ?? 0,
|
||||
'order_goods_id' => $params[ 'order_goods_id' ] ?? 0,
|
||||
'card_right_type' => $params[ 'card_right_type' ] ?? '',
|
||||
);
|
||||
|
||||
model('giftcard_card_goods')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算礼品卡有效期
|
||||
* @param $params
|
||||
* @return float|int
|
||||
*/
|
||||
public function getValidityTime($params)
|
||||
{
|
||||
$validity_type = $params[ 'validity_type' ];
|
||||
$validity_time = $params[ 'validity_time' ];
|
||||
$validity_day = $params[ 'validity_day' ];
|
||||
switch ( $validity_type ) {
|
||||
case 'forever':
|
||||
$temp_time = 0;
|
||||
break;
|
||||
case 'day':
|
||||
$temp_time = time() + 86400 * $validity_day;
|
||||
break;
|
||||
case 'date':
|
||||
$temp_time = $validity_time;
|
||||
break;
|
||||
}
|
||||
return $temp_time;
|
||||
}
|
||||
|
||||
/**
|
||||
* 一般认为这是针对单项的删除
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function delete($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$card_id = $params[ 'card_id' ] ?? 0;
|
||||
$card_ids = $params[ 'card_ids' ] ?? '';
|
||||
$card_import_id = $params[ 'card_import_id' ] ?? 0;
|
||||
$card_import_ids = $params[ 'card_import_ids' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'status', '=', 'to_activate' ]
|
||||
);
|
||||
if ($card_id > 0) {
|
||||
$condition[] = [ 'card_id', '=', $card_id ];
|
||||
}
|
||||
if (!empty($card_ids)) {
|
||||
$condition[] = [ 'card_id', 'in', $card_ids ];
|
||||
}
|
||||
if ($card_id > 0) {
|
||||
$condition[] = [ 'card_id', '=', $card_id ];
|
||||
}
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($card_import_id > 0) {
|
||||
$condition[] = [ 'card_import_id', '=', $card_import_id ];
|
||||
}
|
||||
if (!empty($card_import_ids)) {
|
||||
$condition[] = [ 'card_import_id', 'in', $card_import_ids ];
|
||||
}
|
||||
$card_list = $this->getCardList($condition)[ 'data' ] ?? [];
|
||||
if (empty($card_list))
|
||||
return $this->error();
|
||||
|
||||
// if($card_info['status'] == 'used')
|
||||
// return $this->error('', '删除失败,不可删除已使用的礼品卡');
|
||||
|
||||
$result = model('giftcard_card')->delete($condition);
|
||||
if ($result === false)
|
||||
return $this->error();
|
||||
|
||||
$params[ 'list' ] = $card_list;
|
||||
$this->deleteOperation($params);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除卡项的后续事件
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function deleteOperation($params)
|
||||
{
|
||||
$list = $params[ 'list' ];
|
||||
foreach ($list as $v) {
|
||||
//数据统计
|
||||
( new CardStat() )->stat(array_merge([ 'card_info' => $v, 'stat_type' => 'del' ]));
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardInfo($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard_card')->getInfo($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardList($condition = [], $field = '*', $order = '', $alias = '', $join = [], $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$list = model('giftcard_card')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录项信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardGoodsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_goods')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录项列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardGoodsList($condition = [], $field = '*', $order = '', $limit = null, $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('giftcard_card_goods')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡记录项分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('giftcard_card_goods')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 卡券详情
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getCardDetail($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$card_id = $params[ 'card_id' ];
|
||||
|
||||
$condition = array (
|
||||
[ 'c.card_id', '=', $card_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'c.site_id', '=', $site_id ];
|
||||
}
|
||||
if ($member_id > 0) {
|
||||
$condition[] = [ 'c.member_id', '=', $member_id ];
|
||||
}
|
||||
$info = $this->getCardInfo($condition, 'c.*,go.order_no', 'c', [
|
||||
[ 'giftcard_order go', 'c.order_id=go.order_id', 'left' ]
|
||||
])[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error();
|
||||
|
||||
$member_model = new Member();
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $info[ 'member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$info[ 'member_nickname' ] = $member_info[ 'nickname' ] ?? '';
|
||||
$info[ 'member_headimg' ] = $member_info[ 'headimg' ] ?? '';
|
||||
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $info[ 'init_member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$info[ 'init_member_nickname' ] = $member_info[ 'nickname' ] ?? '';
|
||||
$info[ 'init_member_headimg' ] = $member_info[ 'headimg' ] ?? '';
|
||||
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($member_id > 0) {
|
||||
$condition[] = [ 'member_id', '=', $member_id ];
|
||||
}
|
||||
$list = $this->getCardGoodsList($condition)[ 'data' ] ?? [];
|
||||
$info[ 'card_goods_list' ] = $list;
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
public function tran($data)
|
||||
{
|
||||
$status = $data[ 'status' ] ?? '';
|
||||
if (!empty($status)) {
|
||||
$data[ 'status_name' ] = $this->getStatusList($data[ 'card_type' ])[ $status ] ?? '';
|
||||
}
|
||||
$source = $data[ 'source' ] ?? '';
|
||||
if (!empty($source)) {
|
||||
$data[ 'source_name' ] = $this->source_list[ $source ];
|
||||
}
|
||||
$member_id = $data[ 'member_id' ] ?? 0;
|
||||
if ($member_id > 0) {
|
||||
$member_model = new Member();
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_id ] ])[ 'data' ] ?? [];
|
||||
$data[ 'member_nickname' ] = $member_info[ 'nickname' ] ?? '';
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
318
addon/giftcard/model/card/CardImport.php
Executable file
318
addon/giftcard/model/card/CardImport.php
Executable file
@@ -0,0 +1,318 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use addon\giftcard\model\giftcard\GiftCard;
|
||||
use app\model\member\Member;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 礼品卡导入类
|
||||
*
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class CardImport extends Card
|
||||
{
|
||||
|
||||
public $create_type_list = array (
|
||||
'auto' => '在线制卡',
|
||||
'import' => '导入制卡'
|
||||
);
|
||||
|
||||
/**
|
||||
* 创建导入记录单据
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function create($params)
|
||||
{
|
||||
$type = $params[ 'type' ];
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$giftcard_model = new GiftCard();
|
||||
$condition = [ [ 'giftcard_id', '=', $giftcard_id ] ];
|
||||
$info = $giftcard_model->getGiftcardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error();
|
||||
|
||||
$info[ 'operator_data' ] = $params[ 'operator_data' ];
|
||||
if ($info[ 'card_type' ] != 'real') {
|
||||
return $this->error('', '该礼品不支持制卡');
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'name' => $params[ 'name' ] ?? date('YmdHis'),
|
||||
'giftcard_id' => $params[ 'giftcard_id' ],
|
||||
'type' => $params[ 'type' ],
|
||||
'card_type' => $info[ 'card_type' ],
|
||||
'create_time' => time()
|
||||
);
|
||||
switch ( $type ) {
|
||||
case 'auto':
|
||||
$data[ 'total_count' ] = $params[ 'num' ] ?? 0;
|
||||
break;
|
||||
case 'manual':
|
||||
$data[ 'total_count' ] = 1;
|
||||
break;
|
||||
case 'import':
|
||||
$file = request()->file('file');
|
||||
$tmp_name = $file->getPathname();//获取上传缓存文件
|
||||
$fp = file($tmp_name);
|
||||
$data[ 'total_count' ] = count($fp) - 1;
|
||||
break;
|
||||
}
|
||||
$import_id = $this->add($data)[ 'data' ] ?? 0;
|
||||
if ($type == 'import') {
|
||||
$path = 'upload/giftcard/';
|
||||
if (file_exists($path) || mkdir($path, 0755, true)) {
|
||||
if (move_uploaded_file($tmp_name, $path . 'giftcard_card_import' . $import_id . '.csv')) {
|
||||
Cache::set('giftcard/giftcard_card_import_name' . $import_id, $file->getOriginalName());
|
||||
} else {
|
||||
return $this->error([], '导入失败');
|
||||
}
|
||||
} else {
|
||||
return $this->error([], '导入失败');
|
||||
}
|
||||
}
|
||||
return $this->success($import_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function add($data)
|
||||
{
|
||||
$data[ 'create_time' ] = time();
|
||||
$id = model('giftcard_card_import')->add($data);
|
||||
return $this->success($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* @param $data
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function update($data, $condition)
|
||||
{
|
||||
$id = model('giftcard_card_import')->update($data, $condition);
|
||||
return $this->success($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除导入记录(todo 能做真删吗)
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function delete($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
$import_ids = $params[ 'import_ids' ] ?? '';
|
||||
$condition = array ();
|
||||
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($import_id > 0) {
|
||||
$condition[] = [ 'import_id', '=', $import_id ];
|
||||
}
|
||||
if (!empty($import_ids)) {
|
||||
$condition[] = [ 'import_id', 'in', $import_ids ];
|
||||
}
|
||||
|
||||
$list = $this->getCardImportList($condition)[ 'data' ] ?? [];
|
||||
if (empty($list))
|
||||
return $this->error();
|
||||
|
||||
foreach ($list as $k => $v) {
|
||||
$item_condition = array (
|
||||
[ 'card_import_id', '=', $v[ 'import_id' ] ],
|
||||
[ 'status', '=', 'used' ]
|
||||
);
|
||||
$count = model('giftcard_card')->getCount($item_condition);
|
||||
if ($count > 0) {
|
||||
return $this->error([], '存在已使用的卡项,当前记录不允许删除');
|
||||
}
|
||||
}
|
||||
//删除制卡记录
|
||||
$res = model('giftcard_card_import')->delete($condition);
|
||||
$this->deleteOperation($params);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除导入卡记录后续
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function deleteOperation($params)
|
||||
{
|
||||
// $list = $params['list'];
|
||||
//会将这个记录之下的卡项全部删除
|
||||
$card_model = new Card();
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
$import_ids = $params[ 'import_ids' ] ?? 0;
|
||||
if ($import_id > 0) {
|
||||
$params[ 'card_import_id' ] = $import_id;
|
||||
}
|
||||
if (!empty($import_ids)) {
|
||||
$params[ 'card_import_ids' ] = $import_ids;
|
||||
}
|
||||
$result = $card_model->delete($params);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡导入记录信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardImportInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_import')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡导入记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardImportList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_import')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡导入记录分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardImportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_card_import')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
public function getCardImportColumn($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_import')->getColumn($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出
|
||||
* @param $condition
|
||||
*/
|
||||
public function export($condition)
|
||||
{
|
||||
try {
|
||||
$file_name = date('Y年m月d日-礼品卡', time()) . '.csv';
|
||||
// $file_name = date('YmdHis').'.csv';//csv文件名
|
||||
//通过分批次执行数据导出(防止内存超出配置设置的)
|
||||
set_time_limit(0);
|
||||
ini_set('memory_limit', '256M');
|
||||
//设置header头
|
||||
header('Content-Description: File Transfer');
|
||||
header('Content-Type: application/vnd.ms-excel');
|
||||
header('Content-Disposition: attachment; filename="' . $file_name . '"');
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate');
|
||||
header('Pragma: public');
|
||||
//打开php数据输入缓冲区
|
||||
$fp = fopen('php://output', 'a');
|
||||
// fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF)); // 添加 BOM
|
||||
$heade = [ '编号', '卡密', '状态', '生成时间', '激活会员', '激活时间' ];
|
||||
//将数据编码转换成GBK格式
|
||||
mb_convert_variables('GBK', 'UTF-8', $heade);
|
||||
//将数据格式化为CSV格式并写入到output流中
|
||||
fputcsv($fp, $heade);
|
||||
$member_model = new Member();
|
||||
|
||||
//写入第一行表头
|
||||
Db::name('giftcard_card')->where($condition)->chunk(500, function($item_list) use ($fp, $member_model) {
|
||||
//写入导出信息
|
||||
foreach ($item_list as $k => $item_v) {
|
||||
$item_member_id = $item_v[ 'member_id' ];
|
||||
$item_nickname = '';
|
||||
if ($item_member_id > 0) {
|
||||
$item_member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $item_member_id ] ])[ 'data' ] ?? [];
|
||||
$item_nickname = $item_member_info[ 'nickname' ];
|
||||
}
|
||||
$item_v = $this->tran($item_v);
|
||||
$temp_data = [
|
||||
(string) $item_v[ 'card_no' ] . "\t",
|
||||
(string) $item_v[ 'card_cdk' ] . "\t",
|
||||
(string) $item_v[ 'status_name' ] . "\t",
|
||||
time_to_date($item_v[ 'create_time' ]) . "\t",
|
||||
$item_nickname . "\t",
|
||||
time_to_date($item_v[ 'activate_time' ]) . "\t",
|
||||
];
|
||||
mb_convert_variables('GBK', 'UTF-8', $temp_data);
|
||||
fputcsv($fp, $temp_data);
|
||||
//将已经存储到csv中的变量数据销毁,释放内存
|
||||
unset($item_v);
|
||||
}
|
||||
unset($item_list);
|
||||
});
|
||||
|
||||
//关闭句柄
|
||||
fclose($fp);
|
||||
die;
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return $this->error([], $e->getMessage() . $e->getFile() . $e->getLine());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 作废
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function invalid($params)
|
||||
{
|
||||
$import_id = $params[ 'import_id' ];
|
||||
$condition = array (
|
||||
[ 'import_id', '=', $import_id ],
|
||||
[ 'status', '=', '1' ]
|
||||
);
|
||||
$data = array (
|
||||
'status' => 2,
|
||||
'invalid_time' => time(),
|
||||
);
|
||||
model('giftcard_card')->update($data, $condition);
|
||||
//应该是批量设置
|
||||
//查询未激活的卡密有多少
|
||||
$card_operation_model = new CardOperation();
|
||||
$params[ 'card_import_id' ] = $import_id;
|
||||
//批量使卡失效作废
|
||||
$card_operation_model->cardInvalid($params);
|
||||
|
||||
return $this->success();
|
||||
}
|
||||
}
|
||||
197
addon/giftcard/model/card/CardLog.php
Executable file
197
addon/giftcard/model/card/CardLog.php
Executable file
@@ -0,0 +1,197 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Member;
|
||||
|
||||
/**
|
||||
* 礼品卡操作日志
|
||||
*
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class CardLog extends BaseModel
|
||||
{
|
||||
public function add($params)
|
||||
{
|
||||
$type = $params[ 'type' ];//操作类型
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$type_id = $params[ 'type_id' ] ?? 0;
|
||||
$card_model = new Card();
|
||||
$card_condition = array (
|
||||
[ 'card_id', '=', $card_id ]
|
||||
);
|
||||
$card_info = $card_model->getCardInfo($card_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error();
|
||||
|
||||
$site_id = $card_info[ 'site_id' ];
|
||||
$operator_type = $params[ 'operator_type' ] ?? '';
|
||||
$operator = '';
|
||||
$operator_name = '';
|
||||
|
||||
$member_model = new Member();
|
||||
switch ( $operator_type ) {
|
||||
case 'member':
|
||||
$operator = $params[ 'operator' ] ?? 0;
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $operator ]
|
||||
);
|
||||
$operator_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
break;
|
||||
case 'shop':
|
||||
$operator_info = $params[ 'operator_data' ] ?? [];
|
||||
$operator = $operator_info[ 'uid' ] ?? 0;
|
||||
$operator_name = $operator_info[ 'username' ] ?? '';
|
||||
break;
|
||||
case 'system':
|
||||
$operator = 0;
|
||||
$operator_name = '系统任务';
|
||||
break;
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'card_id' => $card_id,
|
||||
'site_id' => $site_id,
|
||||
'type' => $type,
|
||||
'type_id' => $type_id,
|
||||
'giftcard_id' => $card_info[ 'giftcard_id' ],
|
||||
'member_id' => $card_info[ 'member_id' ],
|
||||
'create_time' => time(),
|
||||
'operator_type' => $operator_type,
|
||||
'operator' => $operator,
|
||||
'operator_name' => $operator_name,
|
||||
);
|
||||
$remark = '';
|
||||
switch ( $type ) {
|
||||
case 'create'://制卡
|
||||
$remark = '店铺管理员' . $operator_name . '制成礼品卡';
|
||||
break;
|
||||
case 'buy'://购买卡
|
||||
$init_member_id = $card_info[ 'init_member_id' ];
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $init_member_id ]
|
||||
);
|
||||
$init_member_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
$remark = '会员' . $init_member_name . '购买礼品卡';
|
||||
break;
|
||||
case 'transfer'://赠送
|
||||
$member_card_id = $type_id;
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_condition = array (
|
||||
[ 'member_card_id', '=', $member_card_id ]
|
||||
);
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($member_card_condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info)) {
|
||||
return $this->error();
|
||||
}
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $member_card_info[ 'from_member_id' ] ]
|
||||
);
|
||||
$from_member_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $member_card_info[ 'member_id' ] ]
|
||||
);
|
||||
$member_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
|
||||
$remark = '会员' . $from_member_name . '将礼品卡赠送给会员' . $member_name;
|
||||
break;
|
||||
|
||||
case 'use'://使用
|
||||
$records_id = $type_id;
|
||||
$card_use_model = new CardUse();
|
||||
$use_condition = array (
|
||||
[ 'records_id', '=', $records_id ]
|
||||
);
|
||||
$card_use_info = $card_use_model->getCardUseRecordsInfo($use_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_use_info))
|
||||
return $this->error();
|
||||
|
||||
$use_member_id = $card_use_info[ 'member_id' ];
|
||||
$member_condition = array (
|
||||
[ 'member_id', '=', $use_member_id ]
|
||||
);
|
||||
$use_member_name = $member_model->getMemberInfo($member_condition)[ 'data' ][ 'nickname' ] ?? '';
|
||||
$remark = '会员' . $use_member_name . '使用礼品卡购买了';
|
||||
$card_use_list = $card_use_model->getCardUseRecordsGoodsList($use_condition)[ 'data' ] ?? [];
|
||||
$card_use_goods_array = [];
|
||||
foreach ($card_use_list as $v) {
|
||||
$card_use_goods_array[] = $v[ 'sku_name' ] . $v[ 'use_num' ] . '件';
|
||||
}
|
||||
$remark .= implode('、', $card_use_goods_array);
|
||||
break;
|
||||
case 'used':
|
||||
$remark = '礼品卡次数使用完毕,礼品卡已使用';
|
||||
break;
|
||||
case 'expire':
|
||||
$remark = '礼品卡过期';
|
||||
break;
|
||||
case 'invalid':
|
||||
$remark = '店铺管理员' . $operator_name . '将礼品卡作废';
|
||||
break;
|
||||
}
|
||||
$data[ 'remark' ] = $remark;
|
||||
$data[ 'extend' ] = json_encode($extend ?? []);
|
||||
model('giftcard_card_log')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡日志记录信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @param string $alias
|
||||
* @param array $join
|
||||
* @return array
|
||||
*/
|
||||
public function getCardLogInfo($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard_card_log')->getInfo($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡日志记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param string $alias
|
||||
* @param array $join
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardLogList($condition = [], $field = '*', $order = '', $alias = '', $join = [], $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_log')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡日志记录分页列表
|
||||
* @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 getCardLogPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$list = model('giftcard_card_log')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
}
|
||||
341
addon/giftcard/model/card/CardOperation.php
Executable file
341
addon/giftcard/model/card/CardOperation.php
Executable file
@@ -0,0 +1,341 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\dict\member_account\AccountDict;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\MemberAccount;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* 礼品卡工具类
|
||||
*
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class CardOperation extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 礼品卡使用吧公共函数
|
||||
* @param $params
|
||||
* @return array
|
||||
* @throws \think\db\exception\DbException
|
||||
*/
|
||||
public function cardUseOperation($params)
|
||||
{
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$card_goods_list = $params[ 'goods_list' ];
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ]
|
||||
);
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];
|
||||
$card_right_goods_count = $params[ 'card_right_goods_count' ];
|
||||
$card_use_count = $params[ 'use_count' ];
|
||||
$card_right_goods_count -= $card_use_count;
|
||||
foreach ($card_goods_list as $k => $v) {
|
||||
$use_num = $v[ 'use_num' ];
|
||||
$total_num = $v[ 'total_num' ];
|
||||
$temp_use_num = $v[ 'temp_use_num' ];
|
||||
if ($card_right_goods_type != 'all') {
|
||||
if (( $use_num + $temp_use_num ) > $total_num) {
|
||||
return $this->error([], '使用次数超出可使用次数');
|
||||
}
|
||||
} else {
|
||||
if ($temp_use_num > $card_right_goods_count) {
|
||||
return $this->error([], '使用次数超出可使用次数');
|
||||
}
|
||||
}
|
||||
$item_condition = array (
|
||||
[ 'id', '=', $v[ 'id' ] ]
|
||||
);
|
||||
|
||||
model('giftcard_card_goods')->setInc($item_condition, 'use_num', $temp_use_num);
|
||||
model('giftcard_card')->setInc($condition, 'use_count', $temp_use_num);//卡整体使用次数
|
||||
$card_right_goods_count -= $temp_use_num;
|
||||
}
|
||||
//写入使用记录
|
||||
$card_use_records_model = new CardUse();
|
||||
$result = $card_use_records_model->addCardUseRecords($params);
|
||||
$records_id = $result[ 'data' ];
|
||||
//核验礼品卡还是否存在可使用次数
|
||||
if ($card_right_goods_type != 'all') {
|
||||
$surplus_num = model('giftcard_card_goods')->getSum($condition, Db::raw('(total_num - use_num)'));
|
||||
} else {
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($condition)[ 'data' ] ?? [];
|
||||
$surplus_num = $card_info[ 'card_right_goods_count' ] - $card_info[ 'use_count' ];
|
||||
}
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $card_id,
|
||||
'type_id' => $records_id,
|
||||
'type' => 'use',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator' => $params[ 'member_id' ],
|
||||
]);
|
||||
|
||||
if ($surplus_num == 0) {
|
||||
//使用
|
||||
$this->used($params);
|
||||
}
|
||||
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 储值礼品卡使用
|
||||
* @param $params
|
||||
*/
|
||||
public function cardUse($params)
|
||||
{
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_card_id = $params[ 'member_card_id' ];
|
||||
$order_id = $params[ 'order_id' ] ?? 0;
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_condition = array (
|
||||
[ 'member_card_id', '=', $member_card_id ],
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'is_transfer', '=', 0 ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$member_card_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($member_card_condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info))
|
||||
return $this->error([], '礼品卡不存在或已转赠');
|
||||
|
||||
$member_id = $member_card_info[ 'member_id' ];
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
$card_model = new Card();
|
||||
$card_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
);
|
||||
$card_info = $card_model->getCardInfo($card_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error([], '礼品卡不存在或已转赠');
|
||||
|
||||
$card_info[ 'use_order_id' ] = $order_id;
|
||||
$status = $card_info[ 'status' ];
|
||||
//todo 加入队列概念,队列
|
||||
if ($status != 'to_use')
|
||||
return $this->error([], '当前礼品卡不可以使用');
|
||||
|
||||
$card_right_type = $card_info[ 'card_right_type' ];
|
||||
if ($card_right_type == 'balance') {
|
||||
$card_goods_list = $card_model->getCardGoodsList($card_condition)[ 'data' ] ?? [];
|
||||
foreach ($card_goods_list as $k => $v) {
|
||||
$card_goods_list[ $k ][ 'temp_use_num' ] = $v[ 'total_num' ];
|
||||
}
|
||||
} else {
|
||||
$card_goods_array = $params[ 'card_goods_json' ];//[{'card_goods_id':15,'order_goods_id':1, 'num': 2}]
|
||||
if (empty($card_goods_array))
|
||||
return $this->error([], '礼品卡使用参数有误');
|
||||
|
||||
$card_goods_ids = array_column($card_goods_array, 'card_goods_id');
|
||||
$card_goods_column = array_column($card_goods_array, null, 'card_goods_id');
|
||||
$temp_card_condition = $card_condition;
|
||||
$temp_card_condition[] = [ 'id', 'in', $card_goods_ids ];
|
||||
$card_goods_list = $card_model->getCardGoodsList($temp_card_condition)[ 'data' ] ?? [];
|
||||
foreach ($card_goods_list as $k => $v) {
|
||||
$item_column = $card_goods_column[ $v[ 'id' ] ];
|
||||
$card_goods_list[ $k ][ 'temp_use_num' ] = $item_column[ 'num' ];
|
||||
$card_goods_list[ $k ][ 'use_order_goods_id' ] = $item_column[ 'order_goods_id' ];
|
||||
}
|
||||
}
|
||||
model('giftcard_card')->startTrans();
|
||||
try {
|
||||
|
||||
$user_params = array_merge($member_card_info, $card_info);
|
||||
$user_params[ 'goods_list' ] = $card_goods_list;
|
||||
$result = $this->cardUseOperation($user_params);
|
||||
if ($result[ 'code' ] < 0) {
|
||||
model('giftcard_card')->rollback();
|
||||
return $result;
|
||||
}
|
||||
|
||||
$result = $this->balanceCardUse($user_params);
|
||||
if ($result[ 'code' ] < 0) {
|
||||
model('giftcard_card')->rollback();
|
||||
return $result;
|
||||
}
|
||||
model('giftcard_card')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('giftcard_card')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡兑换
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function balanceCardUse($params)
|
||||
{
|
||||
$card_goods_list = $params[ 'goods_list' ];
|
||||
//将余额给会员
|
||||
$member_account_model = new MemberAccount();
|
||||
foreach ($card_goods_list as $k => $v) {
|
||||
$item_balance = $v[ 'total_balance' ];//总的余额
|
||||
if ($item_balance > 0) {
|
||||
$member_account_model->addMemberAccount($params[ 'site_id' ], $params[ 'member_id' ], AccountDict::balance, $item_balance, 'giftcard', '礼品卡兑换' . $item_balance, '储值礼品卡兑换');
|
||||
}
|
||||
$card_goods_list[ $k ][ 'temp_use_num' ] = $v[ 'total_num' ];
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
public function cardExpire($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$card_ids = $params[ 'card_ids' ];
|
||||
$condition = array (
|
||||
[ 'card_id', 'in', $card_ids ],
|
||||
[ 'status', 'in', [ 'to_activate', 'to_use' ] ]//暂时认为只有待使用和待激活的卡项会过期
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$card_model = new Card();
|
||||
$list = $card_model->getCardList($condition)[ 'data' ] ?? [];
|
||||
if (empty($list)){
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'status' => 'expire'
|
||||
);
|
||||
model('giftcard_card')->update($data, $condition);
|
||||
|
||||
$this->cardExpireOperation($list);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 卡过期后续任务
|
||||
* @param $list
|
||||
* @return array
|
||||
*/
|
||||
public function cardExpireOperation($list)
|
||||
{
|
||||
$card_log_model = new CardLog();
|
||||
foreach ($list as $k => $v) {
|
||||
//将贺卡全部作废
|
||||
$card_blessing_condition = array (
|
||||
[ 'card_id', '=', $v[ 'card_id' ] ],
|
||||
[ 'status', '=', 0 ]
|
||||
);
|
||||
model('giftcard_card_blessing')->update([ 'status' => 1 ], $card_blessing_condition);
|
||||
$card_log_model->add([
|
||||
'card_id' => $v[ 'card_id' ],
|
||||
'type' => 'expire',
|
||||
'operator_type' => 'system',//todo 暂时是确定的
|
||||
]);
|
||||
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 卡使用
|
||||
* @param $params
|
||||
*/
|
||||
public function used($params)
|
||||
{
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $params[ 'card_id' ] ]
|
||||
);
|
||||
$data = array (
|
||||
'status' => 'used',
|
||||
'use_time' => time(),
|
||||
);
|
||||
model('giftcard_card')->update($data, $condition);
|
||||
|
||||
//数据统计
|
||||
( new CardStat() )->stat(array_merge($params, [ 'stat_type' => 'use' ]));
|
||||
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $params[ 'card_id' ],
|
||||
'type' => 'used',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator' => $params[ 'member_id' ],
|
||||
]);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量作废
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function cardInvalid($params)
|
||||
{
|
||||
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$card_import_id = $params[ 'card_import_id' ] ?? 0;
|
||||
$card_id = $params[ 'card_id' ] ?? 0;
|
||||
$condition = [
|
||||
[ 'status', '=', 'to_activate' ]
|
||||
];
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($card_import_id > 0) {
|
||||
$condition[] = [ 'card_import_id', '=', $card_import_id ];
|
||||
}
|
||||
if ($card_id > 0) {
|
||||
$condition[] = [ 'card_id', '=', $card_id ];
|
||||
}
|
||||
$data = array (
|
||||
'status' => 'invalid',
|
||||
'invalid_time' => time(),
|
||||
);
|
||||
$card_model = new Card();
|
||||
$list = $card_model->getCardList($condition)[ 'data' ] ?? [];
|
||||
if (empty($list))
|
||||
return $this->error();
|
||||
|
||||
model('giftcard_card')->update($data, $condition);
|
||||
$params[ 'list' ] = $list;
|
||||
//作废后的操作
|
||||
$this->cardInvalidOperation($params);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 作废后操作
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function cardInvalidOperation($params)
|
||||
{
|
||||
$list = $params[ 'list' ];
|
||||
$card_log_model = new CardLog();
|
||||
foreach ($list as $k => $v) {
|
||||
//添加日志
|
||||
$card_log_model->add([
|
||||
'card_id' => $v[ 'card_id' ],
|
||||
'type' => 'used',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator_data' => $params[ 'operator_data' ],
|
||||
]);
|
||||
}
|
||||
( new CardStat() )->stat(array_merge($params, [ 'stat_type' => 'invalid', 'num' => count($list) ]));
|
||||
return $this->success();
|
||||
}
|
||||
}
|
||||
165
addon/giftcard/model/card/CardUse.php
Executable file
165
addon/giftcard/model/card/CardUse.php
Executable file
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
/**
|
||||
* 礼品卡使用记录工具类
|
||||
* Class CardUse
|
||||
* @package addon\giftcard\model\card
|
||||
*/
|
||||
class CardUse extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 生成礼品卡记录
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addCardUseRecords($params)
|
||||
{
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
$use_order_id = $params[ 'use_order_id' ] ?? 0;
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'card_id' => $params[ 'card_id' ],
|
||||
'member_card_id' => $params[ 'member_card_id' ],
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'member_id' => $member_id,
|
||||
'use_time' => time(),
|
||||
'card_right_type' => $card_right_type,
|
||||
'order_id' => $use_order_id
|
||||
);
|
||||
$records_id = model('giftcard_card_use_records')->add($data);
|
||||
|
||||
$goods_list = $params[ 'goods_list' ];
|
||||
foreach ($goods_list as $k => $v) {
|
||||
$v[ 'order_id' ] = $use_order_id;
|
||||
$v[ 'records_id' ] = $records_id;
|
||||
$this->addCardUseRecordsGoods($v);
|
||||
}
|
||||
return $this->success($records_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡项使用记录
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addCardUseRecordsGoods($params)
|
||||
{
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'records_id' => $params[ 'records_id' ],//使用记录id
|
||||
'card_goods_id' => $params[ 'id' ],
|
||||
'sku_id' => $params[ 'sku_id' ] ?? 0,
|
||||
'sku_name' => $params[ 'sku_name' ] ?? '',
|
||||
'sku_image' => $params[ 'sku_image' ] ?? '',
|
||||
'sku_no' => $params[ 'sku_no' ] ?? '',
|
||||
'goods_id' => $params[ 'goods_id' ] ?? 0,
|
||||
'goods_name' => $params[ 'goods_name' ] ?? '',
|
||||
'balance' => $params[ 'balance' ] ?? 0,//储值余额
|
||||
'use_num' => $params[ 'temp_use_num' ] ?? '',
|
||||
'order_id' => $params[ 'order_id' ] ?? 0,
|
||||
'order_goods_id' => $params[ 'use_order_goods_id' ] ?? 0,
|
||||
);
|
||||
|
||||
model('giftcard_card_use_records_goods')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_use_records')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_use_records')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_card_use_records')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录项信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsGoodsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_use_records_goods')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录项列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsGoodsList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_use_records_goods')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡使用记录项分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getCardUseRecordsGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_card_use_records_goods')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
}
|
||||
470
addon/giftcard/model/card/RealCard.php
Executable file
470
addon/giftcard/model/card/RealCard.php
Executable file
@@ -0,0 +1,470 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
use addon\giftcard\model\giftcard\GiftCard;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* 实体卡(线下)
|
||||
* Class GiftCardRecords
|
||||
* @package addon\giftcard\model\records
|
||||
*/
|
||||
class RealCard extends Card
|
||||
{
|
||||
|
||||
public function addCard($params)
|
||||
{
|
||||
$source = $params[ 'source' ] ?? '';
|
||||
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];
|
||||
$card_right_goods_count = $params[ 'card_right_goods_count' ];
|
||||
$insert_data = array (
|
||||
'card_name' => $params[ 'card_name' ] ?? '',
|
||||
'card_cover' => $params[ 'card_cover' ] ?? '',
|
||||
'card_right_goods_type' => $card_right_goods_type,
|
||||
'card_right_goods_count' => $card_right_goods_count,
|
||||
'card_cdk' => $params[ 'card_cdk' ],
|
||||
'status' => 'to_activate',
|
||||
'card_import_id' => $params[ 'import_id' ]
|
||||
);
|
||||
$params[ 'card_type' ] = 'real';
|
||||
$params[ 'insert_data' ] = $insert_data;
|
||||
|
||||
//批量生成卡号
|
||||
$giftcard_model = new Giftcard();
|
||||
$card_no_res = $giftcard_model->createCardNo($params['giftcard_id'], 1);
|
||||
if($card_no_res['code'] < 0) return $card_no_res;
|
||||
$card_no = $card_no_res['data'][0];
|
||||
|
||||
$params[ 'card_no' ] = $card_no;
|
||||
$result = $this->addCardItem($params);
|
||||
|
||||
if ($result[ 'code' ] >= 0) {
|
||||
$card_id = $result[ 'data' ];
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $card_id,
|
||||
'type' => 'create',
|
||||
'operator_type' => 'shop',//todo 暂时是确定的
|
||||
'operator_data' => $params[ 'operator_data' ],
|
||||
'type_id' => $params[ 'import_id' ]
|
||||
]);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 制卡
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function cdkLog($params)
|
||||
{
|
||||
set_time_limit(0);
|
||||
ini_set('memory_limit', '512M');
|
||||
$import_id = $params[ 'import_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$card_import_model = new CardImport();
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ],
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$import_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$import_info = $card_import_model->getCardImportInfo($import_condition)[ 'data' ] ?? [];
|
||||
if (empty($import_info))
|
||||
return $this->error();
|
||||
|
||||
$type = $import_info[ 'type' ];
|
||||
$giftcard_id = $import_info[ 'giftcard_id' ];
|
||||
$card_type = $import_info[ 'card_type' ];
|
||||
$giftcard_model = new GiftCard();
|
||||
$condition = [ [ 'giftcard_id', '=', $giftcard_id ] ];
|
||||
$info = $giftcard_model->getGiftcardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error();
|
||||
|
||||
$info[ 'operator_data' ] = $params[ 'operator_data' ];
|
||||
if ($card_type != 'real') {
|
||||
return $this->error('', '该礼品不支持制卡');
|
||||
}
|
||||
|
||||
if (empty($type) && !in_array($type, [ 'auto', 'manual', 'import' ]))
|
||||
return $this->error();
|
||||
|
||||
$data = array (
|
||||
'site_id' => $info[ 'site_id' ],
|
||||
'card_type' => $info[ 'card_type' ],
|
||||
'giftcard_id' => $info[ 'giftcard_id' ],
|
||||
'create_time' => time(),
|
||||
'card_right_type' => $info[ 'card_right_type' ],
|
||||
'valid_time' => $this->getValidityTime($info),
|
||||
'balance' => $info[ 'balance' ] ?? 0,
|
||||
'card_right_goods_type' => $info[ 'card_right_goods_type' ] ?? '',
|
||||
'card_right_goods_count' => $info[ 'card_right_goods_count' ] ?? '',
|
||||
'card_name' => $info[ 'card_name' ] ?? '',
|
||||
'card_cover' => $info[ 'card_cover' ] ?? '',
|
||||
'status' => 'to_activate',
|
||||
'card_import_id' => $import_id
|
||||
);
|
||||
$info[ 'card_data' ] = $data;
|
||||
$info[ 'import_id' ] = $import_id;
|
||||
switch ( $type ) {
|
||||
case 'auto':
|
||||
$info[ 'num' ] = $import_info[ 'total_count' ] ?? 0;
|
||||
$result = $this->createCdk($info);
|
||||
break;
|
||||
case 'manual':
|
||||
$card_cdk = $params[ 'card_cdk' ];
|
||||
$info[ 'card_cdk' ] = $card_cdk;
|
||||
$result = $this->addCdk($info);
|
||||
break;
|
||||
case 'import':
|
||||
$info[ 'num' ] = $import_info[ 'total_count' ];
|
||||
$result = $this->importCdk($info);
|
||||
break;
|
||||
}
|
||||
//制卡统计
|
||||
//( new CardStat() )->stat([ 'stat_type' => 'create', 'giftcard_id' => $giftcard_id, 'num' => $result[ 'data' ][ 'success_count' ] ?? 0 ]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function addCdk($params)
|
||||
{
|
||||
$result = $this->addCard($params);
|
||||
$total_count = 1;
|
||||
if ($result[ 'code' ] < 0) {
|
||||
//生成卡密失败后,继续还是退出
|
||||
$fail_count = 1;
|
||||
$success_count = 0;
|
||||
$error = $result[ 'message' ];
|
||||
} else {
|
||||
$fail_count = 0;
|
||||
$success_count = 1;
|
||||
}
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
if ($import_id > 0) {
|
||||
model('giftcard_card_import')->setInc([ [ 'import_id', '=', $import_id ] ], 'imported_count', 1);
|
||||
$card_import_model = new CardImport();
|
||||
$card_import_model->update([
|
||||
'import_time' => time(),
|
||||
// 'total_count' => $total_count,
|
||||
'fail_count' => $fail_count,
|
||||
'success_count' => $success_count,
|
||||
'card_cdk' => $params[ 'card_cdk' ],
|
||||
'error' => $error ?? ''
|
||||
], [ [ 'import_id', '=', $import_id ] ]);
|
||||
}
|
||||
|
||||
return $this->success([ 'total_count' => $total_count, 'fail_count' => $fail_count, 'success_count' => $success_count, 'error' => $error ?? '' ]);
|
||||
}
|
||||
|
||||
public function createCdk($params)
|
||||
{
|
||||
$num = $params[ 'num' ];//生成卡密数量(一般上限一次1000个)
|
||||
$num_dict = '0123456789';
|
||||
$latter_dict = 'abcdefghijklmnopqrstuvwxyz';
|
||||
$big_latter_dict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
$cdk_length = $params[ 'cdk_length' ];
|
||||
$card_prefix = $params[ 'card_prefix' ];
|
||||
$card_suffix = $params[ 'card_suffix' ];
|
||||
// $cdk_prefix_length = strlen($cdk_prefix);
|
||||
// $cdk_suffix_length = strlen($cdk_suffix);
|
||||
// $length = $cdk_length - $cdk_prefix_length - $cdk_suffix_length;
|
||||
$length = $cdk_length;
|
||||
$cdk_type = $params[ 'cdk_type' ];
|
||||
$dict = '';
|
||||
if (strstr($cdk_type, '0-9')) {
|
||||
$dict .= $num_dict;
|
||||
}
|
||||
if (strstr($cdk_type, 'a-z')) {
|
||||
$dict .= $latter_dict;
|
||||
}
|
||||
if (strstr($cdk_type, 'A-Z')) {
|
||||
$dict .= $big_latter_dict;
|
||||
}
|
||||
$dict_len = strlen($dict) - 1;
|
||||
|
||||
$start_num = 1;
|
||||
|
||||
$total_count = $num;
|
||||
$fail_count = 0;
|
||||
$success_count = 0;
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
$import_info = model('giftcard_card_import')->getInfo([ [ 'import_id', '=', $import_id ] ], "*");
|
||||
Cache::set("card_import_log_" . $import_id, $import_info);
|
||||
|
||||
$common_data = $params[ 'card_data' ];
|
||||
|
||||
//批量生成卡号
|
||||
$giftcard_model = new Giftcard();
|
||||
$card_no_res = $giftcard_model->createCardNo($params['giftcard_id'], $num);
|
||||
if($card_no_res['code'] < 0) return $card_no_res;
|
||||
$card_no_arr = $card_no_res['data'];
|
||||
|
||||
$insert_data = array ();
|
||||
while ($start_num <= $num) {
|
||||
$randstr = '';
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
$temp_num = mt_rand(0, $dict_len);
|
||||
$randstr .= $dict[ $temp_num ];
|
||||
}
|
||||
$card_cdk = $randstr;
|
||||
|
||||
$success_count++;
|
||||
$item_data = $common_data;
|
||||
$item_data[ 'card_no' ] = array_shift($card_no_arr);
|
||||
$item_data[ 'card_cdk' ] = $card_cdk;
|
||||
$insert_data[] = $item_data;
|
||||
if (( $start_num % 100 ) == 0) {
|
||||
model('giftcard_card')->addList($insert_data);
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $start_num ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
$insert_data = [];
|
||||
} else if ($start_num >= $num) {
|
||||
model('giftcard_card')->addList($insert_data);
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $start_num ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
$insert_data = [];
|
||||
}
|
||||
$start_num++;
|
||||
}
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $import_info[ 'total_count' ] ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
if ($import_id > 0) {
|
||||
$card_import_model = new CardImport();
|
||||
$card_import_model->update([
|
||||
'cdk_length' => $cdk_length,
|
||||
'card_prefix' => $card_prefix,
|
||||
'card_suffix' => $card_suffix,
|
||||
'cdk_type' => $cdk_type,
|
||||
'import_time' => time(),
|
||||
// 'total_count' => $total_count,
|
||||
'fail_count' => $fail_count,
|
||||
'success_count' => $success_count,
|
||||
], [ [ 'import_id', '=', $import_id ] ]);
|
||||
}
|
||||
|
||||
return $this->success([ 'total_count' => $total_count, 'fail_count' => $fail_count, 'success_count' => $success_count ]);
|
||||
}
|
||||
|
||||
public function importCdk($params)
|
||||
{
|
||||
//之后可以配合匿名函数封装公共函数
|
||||
$total_count = 0;
|
||||
$fail_count = 0;
|
||||
$success_count = 0;
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
$file_path = 'upload/giftcard/giftcard_card_import' . $import_id . '.csv';
|
||||
$import_info = model('giftcard_card_import')->getInfo([ [ 'import_id', '=', $import_id ] ], "*");
|
||||
Cache::set("card_import_log_" . $import_id, $import_info);
|
||||
$common_data = $params[ 'card_data' ];
|
||||
$card_no_array = [];
|
||||
foreach (getCsvRow($file_path) as $row) {
|
||||
if (!empty($row)) {
|
||||
$total_count++;
|
||||
if ($total_count > 1) {
|
||||
$card_cdk = $row[ 1 ] ?? '';
|
||||
$card_no = $row[ 0 ] ?? '';
|
||||
$card_cdk = trim($card_cdk);
|
||||
$card_no = trim($card_no);
|
||||
if (!empty($card_no) && !empty($card_cdk)) {
|
||||
$params[ 'card_cdk' ] = $card_cdk;
|
||||
$params[ 'card_no' ] = $card_no;
|
||||
// $result = $this->addCard($params);
|
||||
// if ($result['code'] < 0) {
|
||||
// //生成卡密失败后,继续还是退出
|
||||
// $fail_count++;
|
||||
// } else {
|
||||
// $success_count++;
|
||||
// }
|
||||
$item_data = $common_data;
|
||||
$item_data[ 'card_no' ] = $card_no;
|
||||
$card_no_array[] = $card_no;
|
||||
$item_data[ 'card_cdk' ] = $card_cdk;
|
||||
$insert_data[] = $item_data;
|
||||
if (( $total_count % 100 ) == 0) {
|
||||
$column = model('giftcard_card')->getColumn([ [ 'card_no', 'in', $card_no_array ] ], 'card_no');
|
||||
$column = array_unique($column);
|
||||
foreach ($insert_data as $k => $v) {
|
||||
if (in_array($v[ 'card_no' ], $column)) {
|
||||
unset($insert_data[ $k ]);
|
||||
$fail_count++;
|
||||
}
|
||||
}
|
||||
model('giftcard_card')->addList($insert_data);
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $total_count ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
$success_count += count($insert_data);
|
||||
$insert_data = [];
|
||||
$card_no_array = [];
|
||||
}
|
||||
} else {
|
||||
$fail_count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$column = model('giftcard_card')->getColumn([ [ 'card_no', 'in', $card_no_array ] ], 'card_no');
|
||||
$column = array_unique($column);
|
||||
foreach ($insert_data as $k => $v) {
|
||||
if (in_array($v[ 'card_no' ], $column)) {
|
||||
unset($insert_data[ $k ]);
|
||||
$fail_count++;
|
||||
}
|
||||
}
|
||||
$success_count += count($insert_data);
|
||||
//最后一次补充提交
|
||||
model('giftcard_card')->addList($insert_data);
|
||||
model('giftcard_card_import')->update([ 'imported_count' => $import_info[ 'total_count' ] ], [ [ 'import_id', '=', $import_id ] ]);
|
||||
|
||||
if ($import_id > 0) {
|
||||
|
||||
$original_name = Cache::get('giftcard/giftcard_card_import_name' . $import_id);//文件原名
|
||||
$card_import_model = new CardImport();
|
||||
$card_import_model->update([
|
||||
'import_time' => time(),
|
||||
// 'total_count' => $total_count,
|
||||
'fail_count' => $fail_count,
|
||||
'success_count' => $success_count,
|
||||
'file_name' => $original_name
|
||||
], [ [ 'import_id', '=', $import_id ] ]);
|
||||
}
|
||||
return $this->success([ 'total_count' => $total_count, 'fail_count' => $fail_count, 'success_count' => $success_count ]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员激活卡密
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function memberCardActivate($params)
|
||||
{
|
||||
$card_no = $params[ 'card_no' ];
|
||||
$card_cdk = $params[ 'card_cdk' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$card_condition = array (
|
||||
[ 'gc.card_no', '=', $card_no ],
|
||||
[ 'gc.card_cdk', '=', $card_cdk ],
|
||||
[ 'gc.member_id', '=', 0 ],
|
||||
[ 'g.is_delete', '=', 0 ],
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$card_condition[] = [ 'gc.site_id', '=', $site_id ];
|
||||
}
|
||||
$card_info = $this->getCardInfo($card_condition, 'gc.*,g.is_delete,g.status as giftcard_status', 'gc', [
|
||||
[ 'giftcard g', 'gc.giftcard_id = g.giftcard_id', 'inner' ]
|
||||
])[ 'data' ] ?? [];
|
||||
|
||||
if (empty($card_info))
|
||||
return $this->error([], '当前卡密无效或已被激活');
|
||||
|
||||
if (empty($card_info[ 'giftcard_status' ]))
|
||||
return $this->error([], '当前礼品卡已下架');
|
||||
|
||||
$card_id = $card_info[ 'card_id' ];
|
||||
$result = $this->activate([ 'card_id' => $card_id, 'member_id' => $member_id, 'site_id' => $site_id ]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 激活卡密
|
||||
* @param $params
|
||||
*/
|
||||
public function activate($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$card_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'member_id', '=', 0 ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$card_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($card_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error();
|
||||
|
||||
$giftcard_model = new GiftCard();
|
||||
$giftcard_id = $card_info[ 'giftcard_id' ];
|
||||
$condition = [
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
];
|
||||
$info = $giftcard_model->getGiftcardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error();
|
||||
|
||||
$data = array (
|
||||
'card_type' => $info[ 'card_type' ],
|
||||
'card_right_type' => $info[ 'card_right_type' ],
|
||||
'valid_time' => $this->getValidityTime($info),
|
||||
'balance' => $info[ 'balance' ] ?? 0,
|
||||
'card_right_goods_type' => $info[ 'card_right_goods_type' ] ?? '',
|
||||
'card_right_goods_count' => $info[ 'card_right_goods_count' ] ?? '',
|
||||
'card_name' => $info[ 'card_name' ] ?? '',
|
||||
'card_cover' => $info[ 'card_cover' ] ?? ''
|
||||
);
|
||||
model('giftcard_card')->update($data, $card_condition);
|
||||
|
||||
//需要更新卡项数据的
|
||||
if ($info[ 'card_right_type' ] == 'goods') {
|
||||
$goods_list = $giftcard_model->getGiftcardGoodsList([ [ 'giftcard_id', '=', $giftcard_id ] ], 'cg.*,gs.sku_name,gs.sku_image,gs.goods_name,gs.sku_no,gs.price', '', 'cg', [
|
||||
[ 'goods_sku gs', 'cg.sku_id=gs.sku_id', 'inner' ]
|
||||
])[ 'data' ] ?? [];
|
||||
foreach ($goods_list as $k => $v) {
|
||||
if ($info[ 'card_right_goods_type' ] == 'all') {
|
||||
$goods_list[ $k ][ 'num' ] = 0;
|
||||
} else {
|
||||
$goods_list[ $k ][ 'num' ] = $v[ 'goods_num' ];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$goods_list = array (
|
||||
[
|
||||
'site_id' => $info[ 'site_id' ],
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'sku_name' => $info[ 'card_name' ],
|
||||
'sku_image' => $info[ 'card_cover' ],
|
||||
'goods_name' => $info[ 'card_name' ],
|
||||
'balance' => $info[ 'balance' ],//储值余额
|
||||
'total_balance' => $info[ 'balance' ],
|
||||
'total_num' => 1,//购买数量
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($goods_list as $k => $v) {
|
||||
$v[ 'card_id' ] = $card_id;
|
||||
$v[ 'giftcard_id' ] = $giftcard_id;
|
||||
$v[ 'card_right_type' ] = $info[ 'card_right_type' ];
|
||||
$this->addCardItemGoods($v);
|
||||
}
|
||||
$data = array (
|
||||
'status' => 'to_use',
|
||||
'init_member_id' => $member_id,
|
||||
'member_id' => $member_id,
|
||||
'activate_time' => time()
|
||||
);
|
||||
model('giftcard_card')->update($data, $card_condition);
|
||||
//生成会员所属记录
|
||||
$member_card_model = new MemberCard();
|
||||
$card_params = array (
|
||||
'site_id' => $site_id,
|
||||
'form_member_id' => 0,
|
||||
'member_id' => $member_id,
|
||||
'card_id' => $card_id,
|
||||
'source' => '',
|
||||
);
|
||||
$result = $member_card_model->addMemberCard($card_params);
|
||||
|
||||
//数据统计
|
||||
( new CardStat() )->stat(array_merge($params, [ 'stat_type' => 'activate' ]));
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
56
addon/giftcard/model/card/VirtualCard.php
Executable file
56
addon/giftcard/model/card/VirtualCard.php
Executable file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\card;
|
||||
|
||||
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
|
||||
/**
|
||||
* 电子卡(线上)
|
||||
* Class GiftCardRecords
|
||||
* @package addon\giftcard\model\records
|
||||
*/
|
||||
class VirtualCard extends Card
|
||||
{
|
||||
|
||||
public function addCard($params)
|
||||
{
|
||||
$source = $params[ 'source' ];
|
||||
|
||||
$insert_data = array (
|
||||
'order_id' => $params[ 'order_id' ],
|
||||
'source' => $source,
|
||||
'is_allow_transfer' => $params[ 'is_allow_transfer' ],
|
||||
'init_member_id' => $params[ 'member_id' ],
|
||||
'card_name' => $params[ 'order_name' ] ?? '',
|
||||
'card_cover' => $params[ 'card_cover' ] ?? '',
|
||||
'status' => 'to_use',
|
||||
);
|
||||
$params[ 'insert_data' ] = $insert_data;
|
||||
$params[ 'card_type' ] = 'virtual';
|
||||
$result = $this->addCardItem($params);
|
||||
$card_id = $result[ 'data' ];
|
||||
|
||||
//生成会员所属记录
|
||||
$member_card_model = new MemberCard();
|
||||
$card_params = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'form_member_id' => 0,
|
||||
'member_id' => $params[ 'member_id' ],
|
||||
'card_id' => $card_id,
|
||||
'source' => $source,
|
||||
);
|
||||
$member_card_model->addMemberCard($card_params);
|
||||
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $card_id,
|
||||
'type' => 'buy',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator' => $params[ 'member_id' ],
|
||||
'type_id' => $params[ 'order_id' ]
|
||||
]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
143
addon/giftcard/model/giftcard/CardStat.php
Executable file
143
addon/giftcard/model/giftcard/CardStat.php
Executable file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\giftcard;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use app\model\BaseModel;
|
||||
use app\model\system\Stat;
|
||||
|
||||
|
||||
class CardStat extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动相关统计
|
||||
* @param $params
|
||||
*/
|
||||
public function stat($params)
|
||||
{
|
||||
$stat_type = $params[ 'stat_type' ];
|
||||
$giftcard_id = $params[ 'giftcard_id' ] ?? 0;
|
||||
$num = $params[ 'num' ] ?? 1;
|
||||
$card_id = $params[ 'card_id' ] ?? 0;
|
||||
$card_info = $params[ 'card_info' ] ?? [];
|
||||
$import_id = $params[ 'import_id' ] ?? 0;
|
||||
if ($card_id > 0) {
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo([ [ 'card_id', '=', $card_id ] ])[ 'data' ] ?? [];
|
||||
$import_id = $card_info[ 'card_import_id' ];
|
||||
$giftcard_id = $card_info[ 'giftcard_id' ];
|
||||
}
|
||||
if (!empty($card_info)) {
|
||||
$import_id = $card_info[ 'card_import_id' ];
|
||||
$giftcard_id = $card_info[ 'giftcard_id' ];
|
||||
}
|
||||
switch ( $stat_type ) {
|
||||
case 'sale'://销量
|
||||
$condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
$giftcard_model = new GiftCard();
|
||||
$giftcard_model->incSaleNum($num, $condition);
|
||||
break;
|
||||
case 'invalid'://作废
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'invalid_count', $num);
|
||||
if ($import_id > 0) {
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ]
|
||||
);
|
||||
model('giftcard_card_import')->setInc($import_condition, 'invalid_count', $num);
|
||||
}
|
||||
break;
|
||||
case 'activate'://激活
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'activate_count', $num);
|
||||
if ($import_id > 0) {
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ]
|
||||
);
|
||||
model('giftcard_card_import')->setInc($import_condition, 'activate_count', $num);
|
||||
}
|
||||
break;
|
||||
case 'create'://制卡
|
||||
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'card_count', $num);
|
||||
break;
|
||||
case 'use'://使用
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'use_count', $num);
|
||||
if ($import_id > 0) {
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ]
|
||||
);
|
||||
model('giftcard_card_import')->setInc($import_condition, 'use_count', 1);
|
||||
}
|
||||
|
||||
break;
|
||||
case 'del':
|
||||
$giftcard_condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
model('giftcard')->setInc($giftcard_condition, 'del_count', $num);
|
||||
$card_type = $card_info[ 'card_type' ] ?? '';
|
||||
if ($card_type == 'real') {
|
||||
//暂时只有实体未激活的卡才能删除
|
||||
model('giftcard')->setDec($giftcard_condition, 'card_count', $num);
|
||||
}
|
||||
|
||||
if ($import_id > 0) {
|
||||
$import_condition = array (
|
||||
[ 'import_id', '=', $import_id ]
|
||||
);
|
||||
model('giftcard_card_import')->setInc($import_condition, 'del_count', $num);
|
||||
// model('giftcard_card_import')->setDec($giftcard_condition, 'total_count', $num);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入礼品卡统计数据
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addGiftcardStat($params)
|
||||
{
|
||||
$order_id = $params[ 'order_id' ];
|
||||
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$order_condition = array (
|
||||
[ 'order_id', '=', $order_id ],
|
||||
[ 'site_id', '=', $site_id ]
|
||||
);
|
||||
$order_info = model('giftcard_order')->getInfo($order_condition);
|
||||
if (empty($order_info))
|
||||
return $this->error();
|
||||
|
||||
//存在余额支付,以实际付款为准
|
||||
$pay_money = model('pay')->getValue([ [ 'out_trade_no', '=', $order_info[ 'out_trade_no' ] ] ], 'pay_money') ?? '0.00';
|
||||
$stat_data = array (
|
||||
'site_id' => $site_id,
|
||||
'member_giftcard_count' => 1,
|
||||
'member_giftcard_total_money' => $pay_money
|
||||
);
|
||||
|
||||
$stat_model = new Stat();
|
||||
$result = $stat_model->addShopStat($stat_data);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
124
addon/giftcard/model/giftcard/Category.php
Executable file
124
addon/giftcard/model/giftcard/Category.php
Executable file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\giftcard;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
class Category extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 添加礼品卡分组
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function add($data)
|
||||
{
|
||||
$data[ 'create_time' ] = time();
|
||||
model('giftcard_category')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑礼品卡分组
|
||||
* @param $data
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function edit($data, $condition)
|
||||
{
|
||||
$data[ 'update_time' ] = time();
|
||||
model('giftcard_category')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除礼品卡分组
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function delete($condition)
|
||||
{
|
||||
model('giftcard_category')->delete($condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改礼品卡分组活动排序号
|
||||
* @param $sort
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function modifySort($sort, $condition)
|
||||
{
|
||||
$data = array (
|
||||
'sort' => $sort,
|
||||
'update_time' => time()
|
||||
);
|
||||
model('giftcard_category')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分组信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_category')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分组列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_category')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分组分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_category')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分组详情
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getDetail($params)
|
||||
{
|
||||
$category_id = $params[ 'category_id' ];
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$condition = array (
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$info = $this->getInfo($condition)[ 'data' ] ?? [];
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
}
|
||||
740
addon/giftcard/model/giftcard/GiftCard.php
Executable file
740
addon/giftcard/model/giftcard/GiftCard.php
Executable file
@@ -0,0 +1,740 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\giftcard;
|
||||
|
||||
|
||||
use app\model\BaseModel;
|
||||
use app\model\goods\Goods;
|
||||
use app\model\system\Cron;
|
||||
use think\facade\Db;
|
||||
|
||||
|
||||
class GiftCard extends BaseModel
|
||||
{
|
||||
|
||||
public $card_type_list = array (
|
||||
'real' => '实体卡',
|
||||
'virtual' => '电子卡',
|
||||
);
|
||||
public $card_right_type_list = array (
|
||||
'balance' => '储值卡',
|
||||
'goods' => '礼品卡',
|
||||
);
|
||||
|
||||
//商品权益模式
|
||||
public $card_right_goods_type_list = array (
|
||||
'all' => '总包权益模式',
|
||||
'item' => '独立权益模式'
|
||||
);
|
||||
|
||||
public $status_list = array (
|
||||
0 => '下架',
|
||||
1 => '上架',
|
||||
);
|
||||
public $validity_type_list = array (
|
||||
'forever' => '永久有效',
|
||||
'day' => '购买后x天有效',
|
||||
'date' => '指定过期日期'
|
||||
);
|
||||
|
||||
/**
|
||||
* 添加礼品卡活动
|
||||
* @param $params
|
||||
*/
|
||||
public function addGiftCard($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$card_name = $params[ 'card_name' ];
|
||||
$category_id = $params[ 'category_id' ];
|
||||
$media_ids = $params[ 'media_ids' ] ?? '';//一般情况下不需要
|
||||
$card_cover = $params[ 'card_cover' ];
|
||||
$validity_type = $params[ 'validity_type' ];
|
||||
$sort = $params[ 'sort' ];
|
||||
$card_count = $params[ 'card_count' ];
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];
|
||||
$desc = $params[ 'desc' ] ?? '';
|
||||
|
||||
$cartgory_model = new Category();
|
||||
$cartgory_condition = array (
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
$category_info = $cartgory_model->getInfo($cartgory_condition)[ 'data' ] ?? [];
|
||||
if (empty($category_info))
|
||||
return $this->error([], '当前分组不可用!');
|
||||
$data = array (
|
||||
'site_id' => $site_id,
|
||||
'card_name' => $card_name,
|
||||
'category_id' => $category_id,
|
||||
'media_ids' => $media_ids,
|
||||
'card_cover' => $card_cover,
|
||||
'validity_type' => $validity_type,
|
||||
'sort' => $sort,
|
||||
'create_time' => time(),
|
||||
'card_count' => $card_count,
|
||||
'card_right_type' => $card_right_type,
|
||||
'card_right_goods_type' => $card_right_goods_type,
|
||||
'desc' => $desc,
|
||||
'is_allow_transfer' => $params[ 'is_allow_transfer' ],
|
||||
'card_price' => $params[ 'card_price' ],
|
||||
'instruction' => $params[ 'instruction' ],
|
||||
'card_type' => $params[ 'card_type' ],
|
||||
);
|
||||
switch ( $validity_type ) {
|
||||
case 'forever'://永久
|
||||
$data[ 'validity_day' ] = 0;
|
||||
$data[ 'validity_time' ] = 0;
|
||||
break;
|
||||
case 'day'://几天后过期
|
||||
$validity_day = $params[ 'validity_day' ] ?? 0;
|
||||
$data[ 'validity_day' ] = $validity_day;
|
||||
$data[ 'validity_time' ] = 0;
|
||||
break;
|
||||
case 'date'://指定日期过期
|
||||
$validity_time = $params[ 'validity_time' ] ? strtotime($params[ 'validity_time' ]) : 0;
|
||||
$data[ 'validity_time' ] = $validity_time;
|
||||
$data[ 'validity_day' ] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
$cdk_length = $params[ 'cdk_length' ] ?? 0;//长度
|
||||
$cdk_type = $params[ 'cdk_type' ] ?? '';//待激活卡类型
|
||||
$card_prefix = $params[ 'card_prefix' ] ?? '';//前缀
|
||||
$card_suffix = $params[ 'card_suffix' ] ?? '';//后缀
|
||||
|
||||
$data[ 'cdk_length' ] = $cdk_length;
|
||||
$data[ 'card_prefix' ] = $card_prefix;
|
||||
$data[ 'card_suffix' ] = $card_suffix;
|
||||
$data[ 'cdk_type' ] = $cdk_type;
|
||||
|
||||
$giftcard_id = 0;
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
switch ( $card_right_type ) {
|
||||
case 'balance'://储值
|
||||
$card_price = $params[ 'card_price' ] ?? 0;//购买礼品卡的单价
|
||||
$balance = $params[ 'balance' ];//储值余额数
|
||||
$data[ 'card_price' ] = $card_price;
|
||||
$data[ 'balance' ] = $balance;
|
||||
break;
|
||||
|
||||
case 'goods'://商品
|
||||
$goods_sku_list = $params[ 'goods_sku_list' ];//[{"sku_id":1, 'goods_id':2, 'goods_price':10,'goods_num':30}]
|
||||
$giftcard_goods_list = array ();
|
||||
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];//兑换商品业务形式 all 总体数量 item按照商品数量
|
||||
switch ( $card_right_goods_type ) {
|
||||
case 'all'://设置整体共享的数量
|
||||
$card_right_goods_count = $params[ 'card_right_goods_count' ];//可兑换的整体数量
|
||||
$data[ 'card_right_goods_count' ] = $card_right_goods_count;
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$giftcard_goods_list[] = [ 'site_id' => $site_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'giftcard_id' => &$giftcard_id ];
|
||||
}
|
||||
break;
|
||||
case 'item'://单个每个商品的数量
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$giftcard_goods_list[] = [ 'site_id' => $site_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'giftcard_id' => &$giftcard_id, 'goods_num' => $v[ 'goods_num' ] ];
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (empty($giftcard_goods_list))
|
||||
return $this->error([], '商品不存在!');
|
||||
break;
|
||||
}
|
||||
|
||||
$giftcard_id = model('giftcard')->add($data);
|
||||
if (!empty($giftcard_goods_list)) {
|
||||
model('giftcard_goods')->addList($giftcard_goods_list);
|
||||
}
|
||||
|
||||
$cron = new Cron();
|
||||
$cron->deleteCron([ [ 'event', '=', 'CronCardExpire' ] ]);
|
||||
$cron->addCron(2, 1, '礼品卡过期', 'CronCardExpire', time(), 0);
|
||||
return $this->success($giftcard_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑礼品卡活动
|
||||
* @param $params
|
||||
*/
|
||||
public function editGiftCard($params)
|
||||
{
|
||||
|
||||
//编辑的时候不允许修改活动类型
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$card_name = $params[ 'card_name' ];
|
||||
$category_id = $params[ 'category_id' ];
|
||||
$media_ids = $params[ 'media_ids' ] ?? 0;//一般情况下不需要
|
||||
$card_cover = $params[ 'card_cover' ];
|
||||
$validity_type = $params[ 'validity_type' ];
|
||||
$giftcard_id = $params[ 'giftcard_id' ] ?? 0;
|
||||
$sort = $params[ 'sort' ];
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];
|
||||
$desc = $params[ 'desc' ] ?? '';
|
||||
$cartgory_model = new Category();
|
||||
$cartgory_condition = array (
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
$category_info = $cartgory_model->getInfo($cartgory_condition)[ 'data' ] ?? [];
|
||||
if (empty($category_info))
|
||||
return $this->error([], '当前分组不可用!');
|
||||
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
|
||||
$data = array (
|
||||
'site_id' => $site_id,
|
||||
'card_name' => $card_name,
|
||||
//'card_count' => $card_count,
|
||||
'category_id' => $category_id,
|
||||
'media_ids' => $media_ids,
|
||||
'card_cover' => $card_cover,
|
||||
'validity_type' => $validity_type,
|
||||
'sort' => $sort,
|
||||
'card_right_type' => $card_right_type,
|
||||
'card_right_goods_type' => $card_right_goods_type,
|
||||
'update_time' => time(),
|
||||
'desc' => $desc,
|
||||
'is_allow_transfer' => $params[ 'is_allow_transfer' ],
|
||||
'instruction' => $params[ 'instruction' ],
|
||||
'card_price' => $params[ 'card_price' ]
|
||||
);
|
||||
switch ( $validity_type ) {
|
||||
case 'forever'://永久
|
||||
$data[ 'validity_day' ] = 0;
|
||||
$data[ 'validity_time' ] = 0;
|
||||
break;
|
||||
case 'day'://几天后过期
|
||||
$validity_day = $params[ 'validity_day' ] ?? 0;
|
||||
$data[ 'validity_day' ] = $validity_day;
|
||||
$data[ 'validity_time' ] = 0;
|
||||
break;
|
||||
case 'date'://指定日期过期
|
||||
$validity_time = $params[ 'validity_time' ] ? strtotime($params[ 'validity_time' ]) : 0;
|
||||
$data[ 'validity_time' ] = $validity_time;
|
||||
$data[ 'validity_day' ] = 0;
|
||||
break;
|
||||
}
|
||||
$cdk_length = $params[ 'cdk_length' ];//长度
|
||||
$cdk_type = $params[ 'cdk_type' ];//待激活卡类型
|
||||
$card_prefix = $params[ 'card_prefix' ];//前缀
|
||||
$card_suffix = $params[ 'card_suffix' ];//后缀
|
||||
$data[ 'cdk_length' ] = $cdk_length;
|
||||
$data[ 'cdk_type' ] = $cdk_type;
|
||||
$data[ 'card_prefix' ] = $card_prefix;
|
||||
$data[ 'card_suffix' ] = $card_suffix;
|
||||
|
||||
$card_right_type = $params[ 'card_right_type' ];
|
||||
switch ( $card_right_type ) {
|
||||
case 'balance'://储值
|
||||
$card_price = $params[ 'card_price' ] ?? 0;//购买礼品卡的单价
|
||||
$balance = $params[ 'balance' ];//储值余额数
|
||||
$data[ 'card_price' ] = $card_price;
|
||||
$data[ 'balance' ] = $balance;
|
||||
break;
|
||||
case 'goods'://商品
|
||||
$goods_sku_list = $params[ 'goods_sku_list' ];//[{"sku_id":1, 'goods_id':2, 'goods_price':10,'goods_num':30}]
|
||||
$giftcard_goods_list = array ();
|
||||
$card_right_goods_type = $params[ 'card_right_goods_type' ];//兑换商品业务形式 all 总体数量 item按照商品数量
|
||||
switch ( $card_right_goods_type ) {
|
||||
case 'all'://设置整体共享的数量
|
||||
$card_right_goods_count = $params[ 'card_right_goods_count' ];//可兑换的整体数量
|
||||
$data[ 'card_right_goods_count' ] = $card_right_goods_count;
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$giftcard_goods_list[] = [ 'site_id' => $site_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'giftcard_id' => $giftcard_id ];
|
||||
}
|
||||
break;
|
||||
case 'item'://单个每个商品的数量
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$giftcard_goods_list[] = [ 'site_id' => $site_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'giftcard_id' => $giftcard_id, 'goods_num' => $v[ 'goods_num' ] ];
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (empty($giftcard_goods_list))
|
||||
return $this->error([], '商品不存在!');
|
||||
break;
|
||||
}
|
||||
//每次都创建新的活动商品关联
|
||||
model('giftcard_goods')->delete($condition);
|
||||
$giftcard_id = model('giftcard')->update($data, $condition);
|
||||
if (!empty($giftcard_goods_list)) {
|
||||
model('giftcard_goods')->addList($giftcard_goods_list);
|
||||
}
|
||||
|
||||
$cron = new Cron();
|
||||
$cron->deleteCron([ [ 'event', '=', 'CronCardExpire' ] ]);
|
||||
$cron->addCron(2, 1, '礼品卡过期', 'CronCardExpire', time(), 0);
|
||||
return $this->success($giftcard_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡上架
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function giftcardOn($params)
|
||||
{
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$data = array (
|
||||
'status' => 1
|
||||
);
|
||||
$res = model('giftcard')->update($data, $condition);
|
||||
if ($res === false)
|
||||
return $this->error();
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡下架
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function giftcardOff($params)
|
||||
{
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$data = array (
|
||||
'status' => 0
|
||||
);
|
||||
$res = model('giftcard')->update($data, $condition);
|
||||
if ($res === false)
|
||||
return $this->error();
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
* @param $status
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function modifyStatus($status, $condition)
|
||||
{
|
||||
$res = model('giftcard')->update([ 'status' => $status ], $condition);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改礼品卡排序
|
||||
* @param $sort
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function modifyGiftcardSort($sort, $condition)
|
||||
{
|
||||
$data = array (
|
||||
'sort' => $sort,
|
||||
'update_time' => time()
|
||||
);
|
||||
model('giftcard')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动增加销量
|
||||
* @param $num
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function incSaleNum($num, $condition)
|
||||
{
|
||||
model('giftcard')->setInc($condition, 'sale_num', $num);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function deleteGiftcard($condition)
|
||||
{
|
||||
$data = array (
|
||||
'is_delete' => 1,
|
||||
'update_time' => time()
|
||||
);
|
||||
model('giftcard')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardInfo($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard')->getInfo($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡商品信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardGoodsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_goods')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡商品列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardGoodsList($condition = [], $field = '*', $order = '', $alias = '', $join = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_goods')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡商品分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_goods')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡活动详情
|
||||
* @param $params
|
||||
*/
|
||||
public function getGiftcardDetail($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
|
||||
$condition = array (
|
||||
[ 'g.giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'g.site_id', '=', $site_id ];
|
||||
}
|
||||
$info = $this->getGiftcardInfo($condition, 'g.*,gc.category_name', 'g', [
|
||||
[ 'giftcard_category gc', 'g.category_id=gc.category_id', 'left' ]
|
||||
])[ 'data' ] ?? [];
|
||||
if (!empty($info)) {
|
||||
//查询活动商品关联项
|
||||
$condition = array (
|
||||
[ 'giftcard_id', '=', $giftcard_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$list = $this->getGiftcardGoodsList($condition)[ 'data' ] ?? [];
|
||||
if (!empty($list)) {
|
||||
$list = array_map([ $this, 'itemTran' ], $list);
|
||||
}
|
||||
$info[ 'goods_list' ] = $list;
|
||||
}
|
||||
$info = $this->tran($info);
|
||||
return $this->success($info);
|
||||
}
|
||||
/**
|
||||
* 获取礼品卡分页列表(部分信息转化)
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardDetailPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = $this->getGiftcardPageList($condition, $page, $page_size, $order, $field);
|
||||
if (!empty($list)) {
|
||||
foreach ($list[ 'data' ]['list'] as $k => $v) {
|
||||
$list[ 'data' ]['list'][$k] = $this->tran($v);
|
||||
}
|
||||
}
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡列表(部分信息转化)
|
||||
* @param array $condition
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardDetailList($condition = [], $field = '*', $order = '')
|
||||
{
|
||||
$list = $this->getGiftcardList($condition, $field, $order);
|
||||
if (!empty($list)) {
|
||||
foreach ($list[ 'data' ] as $k => $v) {
|
||||
$list[ 'data' ][$k] = $this->tran($v);
|
||||
}
|
||||
}
|
||||
return $this->success($list[ 'data' ]);
|
||||
}
|
||||
/**
|
||||
* 获取礼品卡分页列表(部分信息转化)
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardDetailPageListInAdmin($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = $this->getGiftcardPageList($condition, $page, $page_size, $order, $field);
|
||||
if (!empty($list)) {
|
||||
foreach ($list[ 'data' ]['list'] as $k => $v) {
|
||||
$card_right_type = $v[ 'card_right_type' ] ?? '';
|
||||
if (!empty($card_right_type)) {
|
||||
$list[ 'data' ]['list'][$k][ 'card_right_type_name' ] = $this->card_right_type_list[ $card_right_type ] ?? '';
|
||||
}
|
||||
$card_right_goods_type = $v[ 'card_right_goods_type' ] ?? '';
|
||||
if (!empty($card_right_goods_type)) {
|
||||
$list[ 'data' ]['list'][$k][ 'card_right_goods_type_name' ] = $this->card_right_goods_type_list[ $card_right_goods_type ] ?? '';
|
||||
}
|
||||
$status = $v[ 'status' ] ?? -1;
|
||||
if ($status != -1) {
|
||||
$list[ 'data' ]['list'][$k][ 'status_name' ] = $this->status_list[ $status ] ?? '';
|
||||
}
|
||||
$validity_type = $v[ 'validity_type' ] ?? '';
|
||||
if (!empty($validity_type)) {
|
||||
$list[ 'data' ]['list'][$k][ 'validity_type_name' ] = $this->validity_type_list[ $validity_type ] ?? '';
|
||||
}
|
||||
$card_type = $v[ 'card_type' ] ?? '';
|
||||
if (!empty($card_type)) {
|
||||
$list[ 'data' ]['list'][$k][ 'card_type_name' ] = $this->card_type_list[ $card_type ] ?? '';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡列表(部分信息转化)
|
||||
* @param array $condition
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getGiftcardDetailListInAdmin($condition = [], $field = '*', $order = '')
|
||||
{
|
||||
$list = $this->getGiftcardList($condition, $field, $order);
|
||||
if (!empty($list)) {
|
||||
foreach ($list[ 'data' ] as $k => $v) {
|
||||
$card_right_type = $v[ 'card_right_type' ] ?? '';
|
||||
if (!empty($card_right_type)) {
|
||||
$list[ 'data' ][$k][ 'card_right_type_name' ] = $this->card_right_type_list[ $card_right_type ] ?? '';
|
||||
}
|
||||
$card_right_goods_type = $v[ 'card_right_goods_type' ] ?? '';
|
||||
if (!empty($card_right_goods_type)) {
|
||||
$list[ 'data' ][$k][ 'card_right_goods_type_name' ] = $this->card_right_goods_type_list[ $card_right_goods_type ] ?? '';
|
||||
}
|
||||
$status = $v[ 'status' ] ?? -1;
|
||||
if ($status != -1) {
|
||||
$list[ 'data' ][$k][ 'status_name' ] = $this->status_list[ $status ] ?? '';
|
||||
}
|
||||
$validity_type = $v[ 'validity_type' ] ?? '';
|
||||
if (!empty($validity_type)) {
|
||||
$list[ 'data' ][$k][ 'validity_type_name' ] = $this->validity_type_list[ $validity_type ] ?? '';
|
||||
}
|
||||
$card_type = $v[ 'card_type' ] ?? '';
|
||||
if (!empty($card_type)) {
|
||||
$list[ 'data' ][$k][ 'card_type_name' ] = $this->card_type_list[ $card_type ] ?? '';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->success($list[ 'data' ]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动主表的一些映射翻译
|
||||
* @param $data
|
||||
* @return mixed
|
||||
*/
|
||||
public function tran($data)
|
||||
{
|
||||
$card_right_type = $data[ 'card_right_type' ] ?? '';
|
||||
if (!empty($card_right_type)) {
|
||||
$data[ 'card_right_type_name' ] = $this->card_right_type_list[ $card_right_type ] ?? '';
|
||||
}
|
||||
$card_right_goods_type = $data[ 'card_right_goods_type' ] ?? '';
|
||||
if (!empty($card_right_goods_type)) {
|
||||
$data[ 'card_right_goods_type_name' ] = $this->card_right_goods_type_list[ $card_right_goods_type ] ?? '';
|
||||
}
|
||||
$status = $data[ 'status' ] ?? -1;
|
||||
if ($status != -1) {
|
||||
$data[ 'status_name' ] = $this->status_list[ $status ] ?? '';
|
||||
}
|
||||
$validity_type = $data[ 'validity_type' ] ?? '';
|
||||
if (!empty($validity_type)) {
|
||||
$data[ 'validity_type_name' ] = $this->validity_type_list[ $validity_type ] ?? '';
|
||||
}
|
||||
$card_type = $data[ 'card_type' ] ?? '';
|
||||
if (!empty($card_type)) {
|
||||
$data[ 'card_type_name' ] = $this->card_type_list[ $card_type ] ?? '';
|
||||
}
|
||||
|
||||
$media_ids = $data[ 'media_ids' ] ?? '';
|
||||
if (!empty($media_ids)) {
|
||||
$media_model = new Media();
|
||||
$data[ 'media_list' ] = $media_model->getList([ [ 'media_id', 'in', (string) $media_ids ] ])[ 'data' ] ?? [];
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 活动商品表的一些映射翻译
|
||||
* @param $data
|
||||
* @return mixed
|
||||
*/
|
||||
public function itemTran($data)
|
||||
{
|
||||
$goods_id = $data[ 'goods_id' ];
|
||||
$sku_id = $data[ 'sku_id' ];
|
||||
$goods_model = new Goods();
|
||||
$sku_condition = array (
|
||||
[ 'goods_id', '=', $goods_id ],
|
||||
[ 'sku_id', '=', $sku_id ]
|
||||
);
|
||||
$sku_info = $goods_model->getGoodsSkuInfo($sku_condition)[ 'data' ] ?? [];
|
||||
$data[ 'sku_info' ] = $sku_info;
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 购买须知拼接
|
||||
*/
|
||||
public function giftcardDesc($data)
|
||||
{
|
||||
$text = '';
|
||||
|
||||
if (isset($data[ 'valid_time' ])) {
|
||||
if ($data[ 'valid_time' ] == 0) {
|
||||
$text .= '1.该礼品卡永久有效。<br>';
|
||||
} else {
|
||||
$text .= '1.该礼品卡' . time_to_date($data[ 'valid_time' ]) . '过期,过期失效,请在有效期内使用。<br>';
|
||||
}
|
||||
} else {
|
||||
if ($data[ 'validity_type' ] == 'forever') {
|
||||
$text .= '1.该礼品卡永久有效。<br>';
|
||||
} else if ($data[ 'validity_type' ] == 'day') {
|
||||
$text .= '1.该礼品卡有效期为购买日起' . $data[ 'validity_day' ] . '天内有效,过期失效,请在有效期内使用。<br>';
|
||||
} else if ($data[ 'validity_type' ] == 'date') {
|
||||
$text .= '1.该礼品卡' . date('Y-m-d', $data[ 'validity_time' ]) . '过期,过期失效,请在有效期内使用。<br>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($data[ 'is_allow_transfer' ] == 1) {
|
||||
$text .= '2.本卡可在指定门店,可以本人使用,或者转赠他人,本卡仅限于店铺或者外带时消费使用,不适用于会员卡购买或者充值。<br>';
|
||||
} else {
|
||||
$text .= '2.本卡可在指定门店,可以本人使用,本卡仅限于店铺或者外带时消费使用,不适用于会员卡购买或者充值。<br>';
|
||||
}
|
||||
|
||||
$text .= '3.本卡不记名、不挂失、不可兑换现金、不找零。<br>';
|
||||
if (isset($data[ 'mobile' ]) && $data[ 'mobile' ]) {
|
||||
$text .= '4.如有疑问请拨打:<span style="color: #364385">' . $data[ 'mobile' ] . '</span>';
|
||||
}
|
||||
return $text;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成卡号
|
||||
* @param $giftcard_id
|
||||
* @param $num
|
||||
* @return array
|
||||
*/
|
||||
public function createCardNo($giftcard_id, $num)
|
||||
{
|
||||
$giftcard_info = model('giftcard')->getInfo([
|
||||
['giftcard_id', '=', $giftcard_id],
|
||||
]);
|
||||
if(empty($giftcard_info)){
|
||||
return $this->error(null, '礼品卡信息缺失');
|
||||
}
|
||||
Db::startTrans();
|
||||
try{
|
||||
$giftcard_info = Db::name('giftcard')->where([['giftcard_id', '=', $giftcard_id]])->lock(true)->find();
|
||||
if(empty($giftcard_info)){
|
||||
Db::rollback();
|
||||
return $this->error(null, '礼品卡信息缺失');
|
||||
}
|
||||
|
||||
$start_num = $giftcard_info['card_count'] + 1;
|
||||
$end_num = $giftcard_info['card_count'] + $num;
|
||||
$card_no_arr = [];
|
||||
for($i = $start_num;$i <= $end_num;$i ++){
|
||||
$card_no_arr[] = $giftcard_info['card_prefix'].$giftcard_id.sprintf('%04d', $i).$giftcard_info['card_suffix'];
|
||||
}
|
||||
model('giftcard')->update(['card_count'=>$end_num], [
|
||||
['giftcard_id', '=', $giftcard_id],
|
||||
]);
|
||||
|
||||
Db::commit();
|
||||
return $this->success($card_no_arr);
|
||||
}catch(\Exception $e){
|
||||
Db::rollback();
|
||||
return $this->error(null, $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
177
addon/giftcard/model/giftcard/Media.php
Executable file
177
addon/giftcard/model/giftcard/Media.php
Executable file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
|
||||
namespace addon\giftcard\model\giftcard;
|
||||
|
||||
use app\model\BaseModel;
|
||||
use app\model\upload\Upload;
|
||||
|
||||
class Media extends BaseModel
|
||||
{
|
||||
/**
|
||||
* 添加礼品卡素材
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function add($data)
|
||||
{
|
||||
$data[ 'create_time' ] = time();
|
||||
model('giftcard_media')->add($data);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加礼品卡素材
|
||||
* @param array $list
|
||||
* @return array
|
||||
*/
|
||||
public function addList(array $list)
|
||||
{
|
||||
model('giftcard_media')->addList($list);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加礼品卡素材
|
||||
* @param $data
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function edit($data, $condition)
|
||||
{
|
||||
$data[ 'update_time' ] = time();
|
||||
model('giftcard_media')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除礼品卡素材
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function delete($condition)
|
||||
{
|
||||
$info = $this->getInfo($condition, 'media_path,site_id')[ 'data' ] ?? [];
|
||||
|
||||
$giftcard_count = model('giftcard')->getCount([ [ 'card_cover', 'like', '%' . $info[ 'media_path' ] . '%' ] ], 'giftcard_id');
|
||||
if ($giftcard_count > 0) $this->error('', '删除失败,不能删除正在使用的图');
|
||||
|
||||
model('giftcard_media')->delete($condition);
|
||||
$upload_model = new Upload($info[ 'site_id' ]);
|
||||
$upload_model->deleteFile($info[ 'media_path' ]);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改礼品卡活动所在素材
|
||||
* @param $cartgory_id
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function modifyGiftCardCategoryMediaCategoryId($cartgory_id, $condition)
|
||||
{
|
||||
$data = array (
|
||||
'cartgory_id' => $cartgory_id,
|
||||
'update_time' => time()
|
||||
);
|
||||
model('giftcard_media')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_media')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_media')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_media')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传图片并保存
|
||||
* @param $params
|
||||
*/
|
||||
public function upload($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$upload_model = new Upload($site_id);
|
||||
$path = $site_id > 0 ? 'common/giftcardimages/' . date('Ymd') . '/' : 'common/giftcardimages/' . date('Ymd') . '/';
|
||||
$result = $upload_model->setPath($path)->image($params);
|
||||
if ($result[ 'code' ] < 0) {
|
||||
return $result;
|
||||
}
|
||||
$result_data = $result[ 'data' ];
|
||||
$data = array (
|
||||
'media_path' => $result_data[ 'pic_path' ],
|
||||
'media_name' => $result_data[ 'pic_name' ],
|
||||
'media_spec' => $result_data[ 'pic_spec' ],
|
||||
'site_id' => $site_id,
|
||||
);
|
||||
$result = $this->add($data);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换素材
|
||||
* @param $params
|
||||
* @return array|false|\multitype|string
|
||||
*/
|
||||
public function replace($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$media_id = $params[ 'media_id' ];
|
||||
// 图片信息
|
||||
$info = $this->getInfo([ [ 'site_id', '=', $site_id ], [ 'media_id', '=', $media_id ] ])[ 'data' ] ?? [];
|
||||
// 判断是否找到有效图片
|
||||
if (empty($info)) {
|
||||
return json_encode(error('', '未查到素材信息', ''));
|
||||
}
|
||||
$upload_model = new Upload($site_id);
|
||||
$path = $site_id > 0 ? 'common/giftcardimages/' . date('Ymd') . '/' : 'common/giftcardimages/' . date('Ymd') . '/';
|
||||
$result = $upload_model->setPath($path)->image($params);
|
||||
if ($result[ 'code' ] < 0) {
|
||||
return $result;
|
||||
}
|
||||
$result_data = $result[ 'data' ];
|
||||
$data = array (
|
||||
'media_path' => $result_data[ 'pic_path' ],
|
||||
'media_name' => $result_data[ 'pic_name' ],
|
||||
'media_spec' => $result_data[ 'pic_spec' ],
|
||||
);
|
||||
$result = $this->edit($data, [ [ 'media_id', '=', $media_id ] ]);
|
||||
$upload_model->deleteFile($info[ 'media_path' ]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
299
addon/giftcard/model/membercard/MemberCard.php
Executable file
299
addon/giftcard/model/membercard/MemberCard.php
Executable file
@@ -0,0 +1,299 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\membercard;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\transfer\Blessing;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Member;
|
||||
|
||||
|
||||
class MemberCard extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 生成会员所属卡记录
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function addMemberCard($params)
|
||||
{
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$member_id = $params[ 'member_id' ];
|
||||
// $condition = array(
|
||||
// ['card_id', '=', $card_id],
|
||||
// ['member_id', '=', $member_id]
|
||||
// );
|
||||
// $member_card_info = $this->getMemberCardInfo($condition)['data'] ?? [];
|
||||
// if(!empty($member_card_info)){
|
||||
// $this->deleteMemberCard($condition);
|
||||
// }
|
||||
$data = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'card_id' => $card_id,
|
||||
'from_member_id' => $params[ 'from_member_id' ] ?? 0,
|
||||
'member_id' => $member_id,
|
||||
// 'to_member_id' => $params['to_member_id'] ?? 0,
|
||||
// 'is_transfer' => $params['is_transfer'] ?? 0,
|
||||
'source' => $params[ 'source' ],
|
||||
'get_time' => time()
|
||||
);
|
||||
$member_card_id = model('giftcard_member_card')->add($data);
|
||||
return $this->success($member_card_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 赠送后的操作
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function memberCardTransfer($params)
|
||||
{
|
||||
$card_id = $params[ 'card_id' ];
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$member_card_id = $params[ 'member_card_id' ];
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'member_id', '=', $member_id ],
|
||||
);
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error([], '当前礼品卡不存在或已被领取!');
|
||||
|
||||
$card_goods_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
);
|
||||
$card_goods_list = $card_model->getCardGoodsList($card_goods_condition)[ 'data' ] ?? [];
|
||||
|
||||
$snapshot = array (
|
||||
'card_info' => $card_info,
|
||||
'card_goods_list' => $card_goods_list
|
||||
);
|
||||
//赠送
|
||||
$data = array (
|
||||
'is_transfer' => 1,
|
||||
'to_member_id' => $params[ 'to_member_id' ],
|
||||
'transfer_time' => time(),
|
||||
'snapshot' => json_encode($snapshot)
|
||||
);
|
||||
model('giftcard_member_card')->update($data, [ [ 'member_card_id', '=', $member_card_id ] ]);
|
||||
model('giftcard_card')->update([ 'member_id' => $data[ 'to_member_id' ] ], [ [ 'card_id', '=', $card_id ] ]);
|
||||
|
||||
//使祝福语失效
|
||||
$blessing_model = new Blessing();
|
||||
$blessing_model->blessingToVoid([ [ 'member_card_id', '=', $member_card_id ] ]);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function deleteMemberCard($condition)
|
||||
{
|
||||
model('giftcard_member_card')->delete($condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_member_card')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardList($condition = [], $field = '*', $order = '', $limit = null, $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('giftcard_member_card')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡详情列表
|
||||
* @param array $condition
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardDetailList($condition = [], $order = 'gmc.get_time asc', $limit = null)
|
||||
{
|
||||
$alias = 'gmc';
|
||||
$join = [
|
||||
[
|
||||
'giftcard_card gc',
|
||||
'gc.card_id = gmc.card_id',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m1',
|
||||
'gmc.from_member_id = m1.member_id or m1.member_id is null',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m2',
|
||||
'gmc.to_member_id = m2.member_id or m2.member_id is null',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m3',
|
||||
'gmc.member_id = m3.member_id or m3.member_id is null',
|
||||
'left'
|
||||
],
|
||||
];
|
||||
$field = 'gc.*,gmc.*,m1.nickname as from_nickname, m2.nickname as to_nickname, m3.nickname as member_nickname';
|
||||
$list = $this->getMemberCardList($condition, $field, $order, $limit, $alias, $join)[ 'data' ] ?? [];
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡分页列表
|
||||
* @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 getMemberCardPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [])
|
||||
{
|
||||
$list = model('giftcard_member_card')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取我的卡券列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardDetailPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '')
|
||||
{
|
||||
$alias = 'gmc';
|
||||
$join = [
|
||||
[
|
||||
'giftcard_card gc',
|
||||
'gc.card_id = gmc.card_id',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m1',
|
||||
'gmc.from_member_id = m1.member_id or m1.member_id is null',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m2',
|
||||
'gmc.to_member_id = m2.member_id or m2.member_id is null',
|
||||
'left'
|
||||
],
|
||||
[
|
||||
'member m3',
|
||||
'gmc.member_id = m3.member_id or m3.member_id is null',
|
||||
'left'
|
||||
],
|
||||
];
|
||||
$field = 'gc.*,gmc.*,m1.nickname as from_nickname, m2.nickname as to_nickname, m3.nickname as member_nickname';
|
||||
$list = $this->getMemberCardPageList($condition, $page, $page_size, $order, $field, $alias, $join)[ 'data' ] ?? [];
|
||||
if (!empty($list[ 'list' ])) {
|
||||
$card_model = new Card();
|
||||
foreach ($list[ 'list' ] as $k => $v) {
|
||||
if ($v[ 'is_transfer' ] == 0) {
|
||||
$item_condition = array (
|
||||
[ 'card_id', '=', $v[ 'card_id' ] ]
|
||||
);
|
||||
$card_goods_list = $card_model->getCardGoodsList($item_condition)[ 'data' ] ?? [];
|
||||
} else {
|
||||
$snapshot = $v[ 'snapshot' ];
|
||||
$snapshot_array = json_decode($snapshot, true);
|
||||
$card_goods_list = $snapshot_array[ 'card_goods_list' ] ?? [];
|
||||
}
|
||||
$list[ 'list' ][ $k ][ 'card_goods_list' ] = $card_goods_list;
|
||||
}
|
||||
}
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 我的卡券详情
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardDetail($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$card_id = $params[ 'card_id' ] ?? 0;
|
||||
$member_card_id = $params[ 'member_card_id' ];
|
||||
$condition = array (
|
||||
[ 'member_card_id', '=', $member_card_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
if ($member_id > 0) {
|
||||
$condition[] = [ 'member_id', '=', $member_id ];
|
||||
}
|
||||
if ($card_id > 0) {
|
||||
$condition[] = [ 'card_id', '=', $card_id ];
|
||||
}
|
||||
$member_card_info = $this->getMemberCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info))
|
||||
return $this->error();
|
||||
|
||||
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
if ($member_card_info[ 'is_transfer' ] == 0) {
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardDetail([ 'site_id' => $site_id, 'card_id' => $card_id ])[ 'data' ] ?? [];
|
||||
} else {
|
||||
$snapshot = $member_card_info[ 'snapshot' ];
|
||||
$snapshot_array = json_decode($snapshot, true);
|
||||
$card_info = $snapshot_array[ 'card_info' ];
|
||||
$card_goods_list = $snapshot_array[ 'card_goods_list' ];
|
||||
$card_info[ 'card_goods_list' ] = $card_goods_list;
|
||||
}
|
||||
$member_model = new Member();
|
||||
|
||||
if ($member_card_info[ 'to_member_id' ] > 0) {
|
||||
$to_member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_card_info[ 'to_member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$card_info[ 'to_member_nickname' ] = $to_member_info[ 'nickname' ];
|
||||
$card_info[ 'to_member_headimg' ] = $to_member_info[ 'headimg' ];
|
||||
}
|
||||
if ($member_card_info[ 'from_member_id' ] > 0) {
|
||||
$from_member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_card_info[ 'from_member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$card_info[ 'from_member_nickname' ] = $from_member_info[ 'nickname' ];
|
||||
$card_info[ 'from_member_headimg' ] = $from_member_info[ 'headimg' ];
|
||||
}
|
||||
if ($member_card_info[ 'member_id' ] > 0) {
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_card_info[ 'member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$card_info[ 'member_nickname' ] = $member_info[ 'nickname' ];
|
||||
$card_info[ 'member_headimg' ] = $member_info[ 'headimg' ];
|
||||
}
|
||||
$info = array_merge($card_info, $member_card_info);
|
||||
return $this->success($info);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
266
addon/giftcard/model/membercard/Poster.php
Executable file
266
addon/giftcard/model/membercard/Poster.php
Executable file
@@ -0,0 +1,266 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\membercard;
|
||||
|
||||
use addon\giftcard\model\transfer\Blessing;
|
||||
use app\model\BaseModel;
|
||||
use app\model\system\Site;
|
||||
use app\model\upload\Upload;
|
||||
use extend\Poster as PosterExtend;
|
||||
|
||||
/**
|
||||
* 海报生成类
|
||||
*/
|
||||
class Poster extends BaseModel
|
||||
{
|
||||
/**
|
||||
* 海报
|
||||
*/
|
||||
public function poster($app_type, $page, $qrcode_param, $promotion_type, $site_id)
|
||||
{
|
||||
try {
|
||||
$blessing_model = new Blessing();
|
||||
$params = array (
|
||||
'no' => $qrcode_param[ 'no' ],
|
||||
'member_id' => $qrcode_param[ 'source_member' ]
|
||||
);
|
||||
$card_info = $blessing_model->getBlessingDetail($params)[ 'data' ] ?? [];
|
||||
if (empty($card_info)) return $this->error('未获取到信息');
|
||||
|
||||
$qrcode_info = $this->getQrcode($app_type, $page, $qrcode_param, $promotion_type, $site_id);
|
||||
if ($qrcode_info[ 'code' ] < 0) return $qrcode_info;
|
||||
//判断海报是否存在或停用
|
||||
// $site_model = new Site();
|
||||
// $condition = array (
|
||||
// [ "site_id", "=", $site_id ]
|
||||
// );
|
||||
// $site_info = $site_model->getSiteInfo($condition);
|
||||
if (!empty($qrcode_param[ 'source_member' ])) {
|
||||
$member_info = $this->getMemberInfo($qrcode_param[ 'source_member' ]);
|
||||
}
|
||||
|
||||
$poster_width = 720;
|
||||
$poster_height = 1280;
|
||||
$poster = new PosterExtend($poster_width, $poster_height);
|
||||
$option = [
|
||||
[
|
||||
'action' => 'imageCopy', // 背景图
|
||||
'data' => [
|
||||
img('upload/poster/bg/promotion_4.jpg'),
|
||||
0,
|
||||
0,
|
||||
720,
|
||||
1280,
|
||||
'square',
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageCopy', // 商品图
|
||||
'data' => [
|
||||
$card_info[ 'card_cover' ],
|
||||
100,
|
||||
300,
|
||||
520,
|
||||
310,
|
||||
'square',
|
||||
5,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageCopy', // 二维码
|
||||
'data' => [
|
||||
$qrcode_info[ 'data' ][ 'path' ],
|
||||
100,
|
||||
930,
|
||||
150,
|
||||
150,
|
||||
'square',
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入礼品卡名称
|
||||
'data' => [
|
||||
$card_info[ 'card_name' ],
|
||||
25,
|
||||
[34, 34, 34],
|
||||
100,
|
||||
660,
|
||||
540,
|
||||
2,
|
||||
true,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入祝福语
|
||||
'data' => [
|
||||
$card_info[ 'blessing' ],
|
||||
22,
|
||||
[255, 0, 0],
|
||||
150,
|
||||
800,
|
||||
480,
|
||||
1,
|
||||
false,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入固定文字
|
||||
'data' => [
|
||||
'扫码查看礼品详情',
|
||||
22,
|
||||
[51, 51, 51],
|
||||
290,
|
||||
1000,
|
||||
548,
|
||||
1,
|
||||
true,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入有效期
|
||||
'data' => [
|
||||
'有效期:' . ($card_info[ 'valid_time' ] > 0 ? time_to_date($card_info[ 'valid_time' ]) : '永久有效'),
|
||||
18,
|
||||
[51, 51, 51],
|
||||
290,
|
||||
1060,
|
||||
548,
|
||||
1,
|
||||
false,
|
||||
1
|
||||
]
|
||||
],
|
||||
];
|
||||
|
||||
if (!empty($member_info)) {
|
||||
$member_option = [
|
||||
[
|
||||
'action' => 'imageCircularCopy', // 写入用户头像
|
||||
'data' => [
|
||||
!empty($member_info[ 'headimg' ]) ? $member_info[ 'headimg' ] : 'public/static/img/default_img/head.png',
|
||||
86,
|
||||
90,
|
||||
101,
|
||||
101
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText', // 写入分享人昵称
|
||||
'data' => [
|
||||
$member_info[ 'nickname' ],
|
||||
28,
|
||||
[255, 255, 255],
|
||||
210,
|
||||
135,
|
||||
420,
|
||||
1,
|
||||
true,
|
||||
1
|
||||
]
|
||||
],
|
||||
[
|
||||
'action' => 'imageText',
|
||||
'data' => [
|
||||
'送给您一张礼品卡',
|
||||
22,
|
||||
[255, 255, 255],
|
||||
200,
|
||||
185,
|
||||
430,
|
||||
1,
|
||||
0,
|
||||
1
|
||||
]
|
||||
]
|
||||
];
|
||||
$option = array_merge($option, $member_option);
|
||||
}
|
||||
|
||||
$option_res = $poster->create($option);
|
||||
if (is_array($option_res)) return $option_res;
|
||||
|
||||
$res = $option_res->jpeg('upload/poster/goods', 'goods_' . $promotion_type . '_' . $card_info[ 'no' ] . '_' . $qrcode_param[ 'source_member' ] . '_' . time() . '_' . $app_type);
|
||||
if ($res[ 'code' ] == 0) {
|
||||
$upload = new Upload($site_id);
|
||||
$cloud_res = $upload->fileCloud($res[ 'data' ][ 'path' ]);
|
||||
if ($cloud_res[ 'code' ] >= 0) {
|
||||
return $this->success(["path" => $cloud_res[ 'data' ]]);
|
||||
} else {
|
||||
return $this->error();
|
||||
}
|
||||
}
|
||||
return $res;
|
||||
} catch (\Exception $e) {
|
||||
return $this->error($e->getMessage() . $e->getFile() . $e->getLine());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
* @param $member_id
|
||||
* @return mixed
|
||||
*/
|
||||
private function getMemberInfo($member_id)
|
||||
{
|
||||
$info = model('member')->getInfo(['member_id' => $member_id], 'nickname,headimg');
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取二维码
|
||||
* @param unknown $app_type 请求类型
|
||||
* @param unknown $page uniapp页面路径
|
||||
* @param unknown $qrcode_param 二维码携带参数
|
||||
* @param string $promotion_type 活动类型 null为无活动
|
||||
*/
|
||||
private function getQrcode($app_type, $page, $qrcode_param, $promotion_type, $site_id)
|
||||
{
|
||||
$res = event('Qrcode', [
|
||||
'site_id' => $site_id,
|
||||
'app_type' => $app_type,
|
||||
'type' => 'create',
|
||||
'data' => $qrcode_param,
|
||||
'page' => $page,
|
||||
'qrcode_path' => 'upload/qrcode/goods',
|
||||
'qrcode_name' => 'goods_' . $promotion_type . '_' . $qrcode_param[ 'no' ] . '_' . $qrcode_param[ 'source_member' ] . '_' . $site_id,
|
||||
], true);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取海报信息
|
||||
* @param $template_id
|
||||
* @return mixed
|
||||
*/
|
||||
private function getTemplateInfo($template_id)
|
||||
{
|
||||
$info = model('poster_template')->getInfo(['template_id' => $template_id], 'template_id,template_status');
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除分享图片
|
||||
* @param int $pintuan_id
|
||||
*/
|
||||
public function clearShareImg(int $pintuan_id)
|
||||
{
|
||||
$dir = 'upload/share_img/pintuan_' . $pintuan_id;
|
||||
@deleteDir($dir);
|
||||
}
|
||||
}
|
||||
177
addon/giftcard/model/order/GiftCardOrder.php
Executable file
177
addon/giftcard/model/order/GiftCardOrder.php
Executable file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
class GiftCardOrder extends BaseModel
|
||||
{
|
||||
|
||||
public $order_status_list = [
|
||||
'topay' => '待支付',
|
||||
'complete' => '已完成',
|
||||
'close' => '已关闭',
|
||||
];
|
||||
|
||||
public $pay_type = [
|
||||
'ONLINE_PAY' => '在线支付',
|
||||
'BALANCE' => '余额支付',
|
||||
'offlinepay' => '线下支付'
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* 获取支付方式
|
||||
*/
|
||||
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' ];
|
||||
}
|
||||
}
|
||||
return $pay_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderInfo($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard_order')->getInfo($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderSum($condition, $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$info = model('giftcard_order')->getSum($condition, $field, $alias, $join);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_order')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$list = model('giftcard_order')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情分页列表
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderDetailPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = [])
|
||||
{
|
||||
$list = $this->getOrderPageList($condition, $page, $page_size, $order, $field, $alias, $join)[ 'data' ] ?? [];
|
||||
if (!empty($list[ 'list' ])) {
|
||||
$order_id_array = [];
|
||||
foreach ($list['list'] as $k => $v){
|
||||
$order_id_array[] = $v['order_id'];
|
||||
}
|
||||
$order_ids = implode(',', $order_id_array);
|
||||
$order_goods_list = model('giftcard_order_goods')->getList( [['order_id', 'in', $order_ids]], '*');
|
||||
foreach ($list[ 'list' ] as $k => $v) {
|
||||
|
||||
foreach ($order_goods_list as $ck => $cv) {
|
||||
$order_goods_list[ $ck ][ 'num' ] = numberFormat($order_goods_list[ $ck ][ 'num' ]);
|
||||
if($v['order_id'] == $cv['order_id'])
|
||||
{
|
||||
$list[ 'list' ][ $k ][ 'order_goods_list' ][] = $cv;
|
||||
}
|
||||
}
|
||||
$list[ 'list' ][ $k ] = $this->tran($v);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderDetail($params)
|
||||
{
|
||||
$order_id = $params[ 'order_id' ];
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'go.order_id', '=', $order_id ]
|
||||
);
|
||||
if ($site_id > 0) $condition[] = [ 'go.site_id', '=', $site_id ];
|
||||
if ($member_id > 0) $condition[] = [ 'go.member_id', '=', $member_id ];
|
||||
|
||||
$order_info = $this->getOrderInfo($condition, 'go.*,m.nickname,m.headimg,m.mobile', 'go', [
|
||||
[ 'member m', 'go.member_id=m.member_id', 'left' ]
|
||||
])[ 'data' ] ?? [];
|
||||
if (empty($order_info))
|
||||
return $this->error();
|
||||
|
||||
$order_goods_model = new GiftCardOrderGoods();
|
||||
$condition = array (
|
||||
[ 'order_id', '=', $order_id ]
|
||||
);
|
||||
if ($site_id > 0) $condition[] = [ 'site_id', '=', $site_id ];
|
||||
if ($member_id > 0) $condition[] = [ 'member_id', '=', $member_id ];
|
||||
$order_goods_list = $order_goods_model->getOrderGoodsList($condition)[ 'data' ] ?? [];
|
||||
if (empty($order_goods_list))
|
||||
return $this->error();
|
||||
|
||||
$order_info[ 'order_goods_list' ] = $order_goods_list;
|
||||
$order_info = $this->tran($order_info);
|
||||
return $this->success($order_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据字段转化翻译
|
||||
* @param $data
|
||||
* @return mixed
|
||||
*/
|
||||
public function tran($data)
|
||||
{
|
||||
$order_status = $data[ 'order_status' ] ?? '';
|
||||
if (!empty($order_status)) {
|
||||
$data[ 'order_status_name' ] = $this->order_status_list[ $order_status ];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
281
addon/giftcard/model/order/GiftCardOrderCreate.php
Executable file
281
addon/giftcard/model/order/GiftCardOrderCreate.php
Executable file
@@ -0,0 +1,281 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use addon\giftcard\model\giftcard\Media;
|
||||
use app\model\BaseModel;
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use app\model\order\Config;
|
||||
use app\model\system\Cron;
|
||||
use app\model\system\Pay;
|
||||
use app\model\system\Site;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* 礼品卡订单创建
|
||||
* Class GiftCardOrderCreate
|
||||
* @package addon\giftcard\model\order
|
||||
*/
|
||||
class GiftCardOrderCreate extends BaseModel
|
||||
{
|
||||
|
||||
public function create($params)
|
||||
{
|
||||
if(isset($params['num']) && $params['num'] === '') $params['num'] = 0;
|
||||
$calculate_result = $this->calculate($params);
|
||||
if ($calculate_result[ 'code' ] < 0)
|
||||
return $calculate_result;
|
||||
|
||||
$calculate_data = $calculate_result[ 'data' ];
|
||||
|
||||
$member_id = $calculate_data[ 'member_id' ];
|
||||
$site_id = $calculate_data[ 'site_id' ];
|
||||
$pay = new Pay();
|
||||
$out_trade_no = $pay->createOutTradeNo($member_id);
|
||||
$order_no = $this->createOrderNo($site_id, $member_id);
|
||||
|
||||
$site_info = $calculate_data[ 'site_info' ];
|
||||
$site_name = $site_info[ 'site_name' ];
|
||||
$card_right_type = $calculate_data[ 'card_right_type' ];
|
||||
$giftcard_info = $calculate_data[ 'giftcard_info' ];
|
||||
|
||||
$validity_type = $giftcard_info[ 'validity_type' ];
|
||||
$validity_time = $giftcard_info[ 'validity_time' ];
|
||||
$validity_day = $giftcard_info[ 'validity_day' ];
|
||||
$common_data = array (
|
||||
'order_no' => $order_no,
|
||||
'site_id' => $site_id,
|
||||
'site_name' => $site_name,
|
||||
'member_id' => $member_id,
|
||||
);
|
||||
$pay_money = $calculate_data[ 'pay_money' ];
|
||||
$order_name = $calculate_data[ 'order_name' ];
|
||||
$order_data = [
|
||||
'out_trade_no' => $out_trade_no,
|
||||
'order_from' => $calculate_data[ 'order_from' ],
|
||||
'order_from_name' => $calculate_data[ 'order_from_name' ],
|
||||
'order_status' => 'topay',
|
||||
'buyer_ip' => request()->ip(),
|
||||
'goods_money' => $calculate_data[ 'goods_money' ],
|
||||
'order_money' => $calculate_data[ 'order_money' ],
|
||||
'pay_money' => $calculate_data[ 'pay_money' ],
|
||||
'create_time' => time(),
|
||||
'order_name' => $order_name,
|
||||
// 'buyer_message' => $calculate_data['buyer_message'],
|
||||
'giftcard_id' => $calculate_data[ 'giftcard_id' ],
|
||||
'card_right_type' => $card_right_type,
|
||||
'card_cover' => $calculate_data[ 'card_cover' ],
|
||||
'is_allow_transfer' => $calculate_data[ 'is_allow_transfer' ],
|
||||
'media_id' => $calculate_data[ 'media_id' ],
|
||||
'card_price' => $calculate_data[ 'item_money' ],
|
||||
'validity_type' => $validity_type,
|
||||
'validity_time' => $validity_time,
|
||||
'validity_day' => $validity_day,
|
||||
'num' => $calculate_data[ 'num' ],
|
||||
'card_right_goods_type' => $giftcard_info[ 'card_right_goods_type' ],
|
||||
'card_right_goods_count' => $giftcard_info[ 'card_right_goods_count' ],
|
||||
];
|
||||
model('giftcard_order')->startTrans();
|
||||
//循环生成多个订单
|
||||
try {
|
||||
$order_id = model('giftcard_order')->add(array_merge($common_data, $order_data));
|
||||
$order_goods_list = $calculate_data[ 'order_goods_list' ];
|
||||
$order_goods_data_list = [];
|
||||
foreach ($order_goods_list as $k => $v) {
|
||||
$order_goods_data_list[] = array_merge($common_data, [
|
||||
'order_id' => $order_id,
|
||||
'sku_id' => $v[ 'sku_id' ],
|
||||
'sku_name' => $v[ 'sku_name' ],
|
||||
'sku_image' => $v[ 'sku_image' ],
|
||||
'sku_no' => $v[ 'sku_no' ] ?? '',
|
||||
'goods_id' => $v[ 'goods_id' ] ?? 0,
|
||||
'goods_name' => $v[ 'goods_name' ] ?? '',
|
||||
'goods_class' => $v[ 'goods_class' ] ?? '',
|
||||
'goods_class_name' => $v[ 'goods_class_name' ] ?? '',
|
||||
'price' => $v[ 'price' ],
|
||||
'num' => $v[ 'num' ],
|
||||
'card_right_type' => $card_right_type,
|
||||
'goods_money' => $v[ 'goods_money' ],
|
||||
'balance' => $v[ 'balance' ] ?? 0,
|
||||
'total_balance' => $v[ 'total_balance' ] ?? 0,
|
||||
]);
|
||||
}
|
||||
model('giftcard_order_goods')->addList($order_goods_data_list);
|
||||
//生成整体付费支付单据
|
||||
$pay_model = new Pay();
|
||||
$res = $pay_model->addPay($site_id, $out_trade_no, 'ONLINE_PAY', $order_name, $order_name, $pay_money, '', 'GiftCardOrderPayNotify', '/pages_promotion/giftcard/order_detail?order_id=' . $order_id, $order_id, $member_id);
|
||||
if($res['code'] < 0){
|
||||
model('giftcard_order')->rollback();
|
||||
return $res;
|
||||
}
|
||||
|
||||
$config_model = new Config();
|
||||
$order_config = $config_model->getOrderEventTimeConfig($site_id)[ 'data' ];
|
||||
if ($order_config[ 'value' ][ 'auto_close' ] > 0) {
|
||||
$now_time = time();
|
||||
$execute_time = $now_time + $order_config[ 'value' ][ 'auto_close' ] * 60; //自动关闭时间
|
||||
$cron_model = new Cron();
|
||||
$cron_model->addCron(1, 0, '订单自动关闭', 'GiftCardOrderClose', $execute_time, $order_id);
|
||||
}
|
||||
|
||||
model('giftcard_order')->commit();
|
||||
return $this->success($out_trade_no);
|
||||
} catch (\Exception $e) {
|
||||
model('giftcard_order')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function calculate($params)
|
||||
{
|
||||
if(isset($params['num']) && $params['num'] === '') $params['num'] = 0;
|
||||
$giftcard_id = $params[ 'giftcard_id' ] ?? 0;
|
||||
$site_id = $params[ 'site_id' ];
|
||||
|
||||
$site_result = $this->initSite($params);
|
||||
if ($site_result[ 'code' ] < 0)
|
||||
return $site_result;
|
||||
|
||||
$params = $site_result[ 'data' ];
|
||||
$num = $params[ 'num' ] ?? 1;
|
||||
$item_result = $this->itemCalculate($params);
|
||||
if ($item_result[ 'code' ] < 0)
|
||||
return $item_result;
|
||||
|
||||
$params = $item_result[ 'data' ];
|
||||
$goods_money = $params[ 'goods_money' ];
|
||||
$total_money = $params[ 'giftcard_info' ][ 'card_price' ] * $num;
|
||||
$order_money = $total_money;
|
||||
$pay_money = $order_money;
|
||||
$params[ 'goods_money' ] = $total_money;
|
||||
$params[ 'order_money' ] = $order_money;
|
||||
$params[ 'pay_money' ] = $pay_money;
|
||||
$params[ 'item_money' ] = $params[ 'giftcard_info' ][ 'card_price' ];
|
||||
|
||||
return $this->success($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单项计算
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function itemCalculate($params)
|
||||
{
|
||||
$giftcard_id = $params[ 'giftcard_id' ];
|
||||
$media_id = $params[ 'media_id' ];
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$info = $giftcard_model->getGiftcardDetail([ 'site_id' => $site_id, 'giftcard_id' => $giftcard_id ])[ 'data' ] ?? [];
|
||||
if (empty($info))
|
||||
return $this->error([], '当前礼品卡活动不存在');
|
||||
|
||||
if ($info[ 'status' ] != 1)
|
||||
return $this->error([], '当前礼品卡活动已下架');
|
||||
|
||||
$params[ 'giftcard_info' ] = $info;
|
||||
$media_model = new Media();
|
||||
$media_condition = array (
|
||||
[ 'media_id', '=', $media_id ],
|
||||
);
|
||||
$media_info = $media_model->getInfo($media_condition)[ 'data' ] ?? [];
|
||||
if (empty($media_info))
|
||||
return $this->error([], '封面图不存在');
|
||||
|
||||
$card_cover = $media_info[ 'media_path' ];
|
||||
$params[ 'card_cover' ] = $card_cover;
|
||||
$card_name = $info[ 'card_name' ];
|
||||
$params[ 'order_name' ] = $card_name;
|
||||
$goods_money = 0;
|
||||
$card_right_type = $info[ 'card_right_type' ];//卡券类型
|
||||
$params[ 'card_right_type' ] = $card_right_type;
|
||||
$params[ 'is_allow_transfer' ] = $info[ 'is_allow_transfer' ];
|
||||
$goods_item_list = [];
|
||||
switch ( $card_right_type ) {
|
||||
case 'goods'://商品
|
||||
$goods_list = $info[ 'goods_list' ];
|
||||
foreach ($goods_list as $v) {
|
||||
$item_sku_id = $v[ 'sku_id' ];
|
||||
$item_num = $v[ 'goods_num' ];
|
||||
$goods_id = $v[ 'goods_id' ];
|
||||
$item_goods_price = $v[ 'goods_price' ];
|
||||
$item_goods_money = $item_goods_price * $item_num;
|
||||
$goods_item_list[] = [
|
||||
'sku_id' => $item_sku_id,
|
||||
'goods_id' => $goods_id,
|
||||
'price' => $item_goods_price,
|
||||
'goods_money' => $item_goods_money,
|
||||
'num' => $item_num,
|
||||
'sku_name' => $v[ 'sku_info' ][ 'sku_name' ],
|
||||
'sku_image' => $v[ 'sku_info' ][ 'sku_image' ],
|
||||
'sku_no' => $v[ 'sku_info' ][ 'sku_no' ],
|
||||
'goods_class' => $v[ 'sku_info' ][ 'goods_class' ],
|
||||
'goods_class_name' => $v[ 'sku_info' ][ 'goods_class_name' ],
|
||||
'goods_name' => $v[ 'sku_info' ][ 'goods_name' ],
|
||||
];
|
||||
$goods_money = $info[ 'card_price' ];
|
||||
}
|
||||
break;
|
||||
case 'balance'://储值
|
||||
$num = 1;
|
||||
$item_goods_price = $info[ 'card_price' ];
|
||||
$item_goods_money = $item_goods_price * $num;
|
||||
$item_sku_name = $info[ 'balance' ] . '元储值卡';
|
||||
$item_sku_image = $card_cover;
|
||||
$balance = $info[ 'balance' ];
|
||||
$total_balance = $balance * $num;
|
||||
$goods_item_list[] = [
|
||||
'sku_id' => $giftcard_id,
|
||||
'price' => $item_goods_price,
|
||||
'goods_money' => $item_goods_money,
|
||||
'num' => $num,
|
||||
'sku_name' => $item_sku_name,
|
||||
'sku_image' => $item_sku_image,
|
||||
'goods_name' => $card_name,
|
||||
'balance' => $balance,
|
||||
'total_balance' => $total_balance
|
||||
];
|
||||
$goods_money += $item_goods_money;
|
||||
break;
|
||||
}
|
||||
$params[ 'order_goods_list' ] = $goods_item_list;
|
||||
$params[ 'goods_money' ] = $goods_money;
|
||||
return $this->success($params);
|
||||
}
|
||||
|
||||
|
||||
public function initSite($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ];
|
||||
$site_model = new Site();
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $site_id ]
|
||||
);
|
||||
$site_info = $site_model->getSiteInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($site_info))
|
||||
return $this->error();
|
||||
$params[ 'site_info' ] = $site_info;
|
||||
return $this->success($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成订单编号
|
||||
* @param $site_id
|
||||
* @param int $member_id
|
||||
* @return string
|
||||
*/
|
||||
public function createOrderNo($site_id, $member_id = 0)
|
||||
{
|
||||
$time_str = date('YmdHi');
|
||||
$max_no = Cache::get($site_id . '_' . $member_id . '_' . $time_str);
|
||||
if (empty($max_no)) {
|
||||
$max_no = 1;
|
||||
} else {
|
||||
$max_no = $max_no + 1;
|
||||
}
|
||||
$order_no = $time_str . sprintf('%05d', $member_id) . sprintf('%03d', $max_no);
|
||||
Cache::set($site_id . '_' . $member_id . '_' . $time_str, $max_no);
|
||||
return $order_no;
|
||||
}
|
||||
}
|
||||
54
addon/giftcard/model/order/GiftCardOrderGoods.php
Executable file
54
addon/giftcard/model/order/GiftCardOrderGoods.php
Executable file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
|
||||
class GiftCardOrderGoods extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单项信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderGoodsInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_order_goods')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单项列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderGoodsList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_order_goods')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取礼品卡订单项分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_order_goods')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
161
addon/giftcard/model/order/GiftCardOrderOperation.php
Executable file
161
addon/giftcard/model/order/GiftCardOrderOperation.php
Executable file
@@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use addon\giftcard\model\card\VirtualCard;
|
||||
use addon\giftcard\model\giftcard\CardStat;
|
||||
use app\dict\member_account\AccountDict;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\MemberAccount;
|
||||
use app\model\system\Pay;
|
||||
use app\model\system\Stat;
|
||||
|
||||
class GiftCardOrderOperation extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 只涉及订单业务交互
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function orderPay($params)
|
||||
{
|
||||
$out_trade_no = $params[ 'out_trade_no' ];
|
||||
$order_model = new GiftCardOrder();
|
||||
$order_condition = array (
|
||||
[ 'out_trade_no', '=', $out_trade_no ]
|
||||
);
|
||||
$order_info = $order_model->getOrderInfo($order_condition)[ 'data' ] ?? [];
|
||||
if (empty($order_info))
|
||||
return $this->error();
|
||||
|
||||
$giftcard_id = $order_info[ 'giftcard_id' ];
|
||||
$num = $order_info[ 'num' ];//礼品卡套数
|
||||
$order_goods_model = new GiftCardOrderGoods();
|
||||
$order_goods_list = $order_goods_model->getOrderGoodsList([ [ 'order_id', '=', $order_info[ 'order_id' ] ] ])[ 'data' ] ?? [];
|
||||
$total_balance = 0;
|
||||
foreach ($order_goods_list as $k => $v) {
|
||||
$total_balance += $v[ 'total_balance' ];
|
||||
}
|
||||
|
||||
//订单支付后生成礼品卡
|
||||
$virtual_card_model = new VirtualCard();
|
||||
$order_info[ 'source' ] = 'order';
|
||||
$order_info[ 'goods_list' ] = $order_goods_list;
|
||||
$order_info[ 'balance' ] = $total_balance;
|
||||
$temp_num = 0;
|
||||
model('giftcard_order')->startTrans();
|
||||
try {
|
||||
while ($temp_num < $num) {
|
||||
$virtual_card_model->addCard($order_info);
|
||||
$temp_num++;
|
||||
}
|
||||
$pay_type = $params[ 'pay_type' ];
|
||||
//订单相关操作(业务复杂后会拆开步骤)
|
||||
$pay_type_list = $order_model->getPayType();
|
||||
$data = array (
|
||||
'order_status' => 'complete',
|
||||
'pay_status' => 1,
|
||||
'pay_time' => time(),
|
||||
'pay_type' => $pay_type,
|
||||
'pay_type_name' => $pay_type_list[ $pay_type ]
|
||||
);
|
||||
model('giftcard_order')->update($data, $order_condition);
|
||||
//可能是消费奖励
|
||||
event('GiftCardOrderPay', $order_info);
|
||||
|
||||
//业务和支付的融合
|
||||
$pay_money = new Pay();
|
||||
$pay_info = $pay_money->getPayInfo($out_trade_no)[ 'data' ] ?? [];
|
||||
if (!empty($pay_info)) {
|
||||
$balance = $pay_info[ 'balance' ];
|
||||
$balance_money = $pay_info[ 'balance_money' ];
|
||||
$member_account_model = new MemberAccount();
|
||||
if ($balance > 0) {
|
||||
$use_res = $member_account_model->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], AccountDict::balance, -$balance, 'order', $order_info[ 'order_id' ], '订单消费扣除');
|
||||
if ($use_res[ 'code' ] != 0) {
|
||||
model('giftcard_order')->rollback();
|
||||
return $use_res;
|
||||
}
|
||||
}
|
||||
if ($balance_money > 0) {
|
||||
$use_res = $member_account_model->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], 'balance_money', -$balance_money, 'order', $order_info[ 'order_id' ], '订单消费扣除');
|
||||
if ($use_res[ 'code' ] != 0) {
|
||||
model('giftcard_order')->rollback();
|
||||
return $use_res;
|
||||
}
|
||||
}
|
||||
}
|
||||
model('giftcard_order')->commit();
|
||||
//活动增加销量
|
||||
( new CardStat() )->stat([ 'stat_type' => 'sale', 'giftcard_id' => $giftcard_id, 'num' => $num ]);
|
||||
$stat_model = new Stat();
|
||||
$stat_model->switchStat([ 'type' => 'gift_card_order', 'data' => [ 'order_id' => $order_info[ 'order_id' ], 'site_id' => $order_info[ 'site_id' ] ] ]);
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('giftcard_order')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除礼品卡订单(伪删除)
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function delete($condition)
|
||||
{
|
||||
model('giftcard_order')->update([ 'is_delete' => 1 ], $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单关闭
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function close($params)
|
||||
{
|
||||
$order_id = $params[ 'order_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$close_cause = $params[ 'close_cause' ] ?? '长时间未支付,订单自动关闭';
|
||||
$condition = array (
|
||||
[ 'order_id', '=', $order_id ],
|
||||
[ 'order_status', '=', 'topay' ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$order_model = new GiftCardOrder();
|
||||
$info = $order_model->getOrderInfo($condition, 'order_status, out_trade_no, pay_status')[ 'data' ] ?? [];
|
||||
if (empty($info)) {
|
||||
return $this->error([], '订单不存在');
|
||||
}
|
||||
|
||||
if ($info[ 'order_status' ] != 'topay') {
|
||||
return $this->error([], '订单不是待支付状态');
|
||||
}
|
||||
|
||||
$data = array (
|
||||
'order_status' => 'close',
|
||||
'close_time' => time(),
|
||||
);
|
||||
if (!empty($close_cause)) {
|
||||
$data[ 'close_cause' ] = $close_cause;
|
||||
}
|
||||
//关闭支付单据(没支付的话)
|
||||
if ($info[ 'pay_status' ] == 0) {
|
||||
$pay_model = new Pay();
|
||||
$pay_result = $pay_model->closePay($info[ 'out_trade_no' ]);
|
||||
if ($pay_result[ 'code' ] < 0) {
|
||||
return $pay_result;
|
||||
}
|
||||
}
|
||||
model('giftcard_order')->update($data, $condition);
|
||||
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
}
|
||||
42
addon/giftcard/model/order/GiftCardOrderPay.php
Executable file
42
addon/giftcard/model/order/GiftCardOrderPay.php
Executable file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\order;
|
||||
|
||||
use app\model\BaseModel;
|
||||
use app\model\system\Pay;
|
||||
|
||||
class GiftCardOrderPay extends BaseModel
|
||||
{
|
||||
|
||||
public function resetPay($params)
|
||||
{
|
||||
$out_trade_no = $params[ 'out_trade_no' ];
|
||||
$order_condition = array (
|
||||
[ 'pay_status', '=', 0 ],
|
||||
[ 'out_trade_no', '=', $out_trade_no ]
|
||||
);
|
||||
$order_condition[] = [ 'out_trade_no', '=', $out_trade_no ];
|
||||
$giftcard_order_model = new GiftCardOrder();
|
||||
$order_info = $giftcard_order_model->getOrderInfo($order_condition, 'pay_money,site_id,member_id');
|
||||
if (empty($order_info))
|
||||
return $this->error([], '没有可支付订单!');
|
||||
|
||||
$pay_money = $order_info[ 'pay_money' ];
|
||||
$site_id = $order_info[ 'site_id' ];
|
||||
|
||||
$pay_model = new Pay();
|
||||
$result = $pay_model->closePay($out_trade_no);//关闭旧支付单据
|
||||
if ($result[ 'code' ] < 0) {
|
||||
return $result;
|
||||
}
|
||||
$member_id = $order_info[ 'member_id' ];
|
||||
$new_out_trade_no = $pay_model->createOutTradeNo($member_id ?? 0);
|
||||
$update_data = array (
|
||||
'out_trade_no' => $new_out_trade_no
|
||||
);
|
||||
model('giftcard_order')->update($update_data, $order_condition);
|
||||
$result = $pay_model->addPay($site_id, $new_out_trade_no, '', $params[ 'pay_body' ], $params[ 'pay_detail' ], $pay_money, '', 'GiftCardOrderPayNotify', '', $order_info['order_id'], $order_info['member_id']);
|
||||
return $this->success($new_out_trade_no);
|
||||
}
|
||||
}
|
||||
356
addon/giftcard/model/ordercreate/GiftcardOrderCreate.php
Executable file
356
addon/giftcard/model/ordercreate/GiftcardOrderCreate.php
Executable file
@@ -0,0 +1,356 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\ordercreate;
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\card\CardOperation;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\model\BaseModel;
|
||||
use app\model\order\Config;
|
||||
use app\model\order\OrderCreate;
|
||||
use app\model\order\OrderCreateTool;
|
||||
use app\model\store\Store;
|
||||
use app\model\express\Express;
|
||||
use app\model\system\Pay;
|
||||
use app\model\express\Config as ExpressConfig;
|
||||
use app\model\express\Local;
|
||||
use extend\exception\OrderException;
|
||||
|
||||
/**
|
||||
* 订单创建(礼品卡)
|
||||
*/
|
||||
class GiftcardOrderCreate extends BaseModel
|
||||
{
|
||||
|
||||
use OrderCreateTool;
|
||||
|
||||
public $cart_id = 0;
|
||||
public $member_card_id = 0;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->promotion_type = 'giftcard';
|
||||
$this->promotion_type_name = '礼品卡';
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//计算
|
||||
$this->confirm();
|
||||
if ($this->error > 0) {
|
||||
return $this->error([ 'error_code' => $this->error ], $this->error_msg);
|
||||
}
|
||||
//订单创建数据
|
||||
$order_insert_data = $this->getOrderInsertData([ 'discount' ], 'invert');
|
||||
$order_insert_data[ 'store_id' ] = $this->store_id;
|
||||
$order_insert_data[ 'create_time' ] = time();
|
||||
$order_insert_data[ 'is_enable_refund' ] = 0;
|
||||
//订单类型以及状态
|
||||
$this->orderType();
|
||||
$order_insert_data[ 'order_type' ] = $this->order_type[ 'order_type_id' ];
|
||||
$order_insert_data[ 'order_type_name' ] = $this->order_type[ 'order_type_name' ];
|
||||
$order_insert_data[ 'order_status_name' ] = $this->order_type[ 'order_status' ][ 'name' ];
|
||||
$order_insert_data[ 'order_status_action' ] = json_encode($this->order_type[ 'order_status' ], JSON_UNESCAPED_UNICODE);
|
||||
model('order')->startTrans();
|
||||
//循环生成多个订单
|
||||
try {
|
||||
|
||||
|
||||
$this->order_id = model('order')->add($order_insert_data);
|
||||
|
||||
$order_goods_insert_data = [];
|
||||
//订单项目表
|
||||
foreach ($this->goods_list as &$order_goods_v) {
|
||||
$order_goods_insert_data[] = $this->getOrderGoodsInsertData($order_goods_v);
|
||||
}
|
||||
model('order_goods')->addList($order_goods_insert_data);
|
||||
|
||||
$card_goods_json = [];
|
||||
foreach ($this->getOrderGoodsList() as $k => $v) {
|
||||
$goods_item = $this->goods_list[ $k ];
|
||||
$card_goods_json[] = [
|
||||
'order_goods_id' => $v[ 'order_goods_id' ],
|
||||
'card_goods_id' => $goods_item[ 'id' ],
|
||||
'num' => $v[ 'num' ],
|
||||
];
|
||||
}
|
||||
$card_use_params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'order_id' => $this->order_id,
|
||||
'member_id' => $this->member_id,
|
||||
'member_card_id' => $this->member_card_id,
|
||||
'card_goods_json' => $card_goods_json
|
||||
);
|
||||
$card_operation_model = new CardOperation();
|
||||
$use_res = $card_operation_model->cardUse($card_use_params);
|
||||
if($use_res['code'] < 0){
|
||||
model('order')->rollback();
|
||||
return $use_res;
|
||||
}
|
||||
|
||||
//批量库存处理(卡密商品支付后在扣出库存)//todo 可以再商品中设置扣除库存步骤
|
||||
$this->batchDecOrderGoodsStock();
|
||||
model('order')->commit();
|
||||
//订单创建后事件
|
||||
$this->orderCreateAfter();
|
||||
$pay = new Pay();
|
||||
//生成整体支付单据
|
||||
$pay_res = $pay->addPay($this->site_id, $this->out_trade_no, $this->pay_type, $this->order_name, $this->order_name, $this->pay_money, '', 'OrderPayNotify', '/pages/order/detail?order_id=' . $this->order_id, $this->order_id, $this->member_id);
|
||||
if($pay_res['code'] < 0){
|
||||
model('order')->rollback();
|
||||
return $pay_res;
|
||||
}
|
||||
|
||||
return $this->success($this->out_trade_no);
|
||||
} catch (\Exception $e) {
|
||||
model('order')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单计算
|
||||
*/
|
||||
public function calculate()
|
||||
{
|
||||
//初始化地址
|
||||
$this->initMemberAddress();
|
||||
//初始化会员账户
|
||||
$this->initMemberAccount();
|
||||
//商品列表信息
|
||||
$this->getOrderGoodsCalculate();
|
||||
//订单计算
|
||||
$this->shopOrderCalculate();
|
||||
//获取发票相关
|
||||
$this->getInovice();
|
||||
$this->order_key = create_no();
|
||||
$this->setOrderCache(get_object_vars($this), $this->order_key);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 待付款订单
|
||||
*/
|
||||
public function orderPayment()
|
||||
{
|
||||
$this->calculate();
|
||||
//查询配送信息
|
||||
$this->getDeliveryData();
|
||||
//订单初始项
|
||||
event('OrderPayment', [ 'order_object' => $this ]);
|
||||
return get_object_vars($this);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品的计算信息
|
||||
* @param unknown $data
|
||||
*/
|
||||
public function getOrderGoodsCalculate()
|
||||
{
|
||||
$this->getCardGoodsList();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取组合套餐商品列表信息
|
||||
*/
|
||||
public function getCardGoodsList()
|
||||
{
|
||||
$this->member_card_id = $this->param[ 'member_card_id' ];
|
||||
$member_card_model = new MemberCard();
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'member_card_id', '=', $this->member_card_id ],
|
||||
[ 'member_id', '=', $this->member_id ]
|
||||
);
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info)) return $this->error([], '当前礼品卡不存在或已被领取!');
|
||||
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
|
||||
$card_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'member_id', '=', $this->member_id ]
|
||||
);
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($card_condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info)) throw new OrderException('当前礼品卡不存在或已被使用!');
|
||||
if ($card_info[ 'status' ] != 'to_use') throw new OrderException('当前礼品卡已被使用!');
|
||||
$goods_sku_list = $this->param[ 'goods_sku_list' ];
|
||||
//组装商品列表
|
||||
$field = ' gcg.total_num,gcg.id,gcg.sku_id, ngs.sku_name, ngs.sku_no,
|
||||
ngs.price, ngs.discount_price, ngs.cost_price, ngs.stock, ngs.weight, ngs.volume, ngs.sku_image,
|
||||
ngs.site_id, ngs.goods_state, ngs.is_virtual, ngs.supplier_id,ngs.form_id,
|
||||
ngs.is_free_shipping, ngs.shipping_template, ngs.goods_class, ngs.goods_class_name, ngs.goods_id, ns.site_name,ngs.sku_spec_format,ngs.goods_name,ngs.support_trade_type';
|
||||
$alias = 'gcg';
|
||||
$join = [
|
||||
[
|
||||
'goods_sku ngs',
|
||||
'gcg.sku_id = ngs.sku_id',
|
||||
'inner'
|
||||
],
|
||||
|
||||
[
|
||||
'site ns',
|
||||
'ngs.site_id = ns.site_id',
|
||||
'inner'
|
||||
]
|
||||
];
|
||||
$card_model = new Card();
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ]
|
||||
);
|
||||
$card_info = $card_model->getCardInfo($condition)[ 'data' ] ?? [];
|
||||
$card_right_goods_type = $card_info[ 'card_right_goods_type' ];
|
||||
|
||||
$card_goods_list = $card_model->getCardGoodsList($condition, $field, '', null, $alias, $join)[ 'data' ] ?? [];
|
||||
$card_goods_list_column = array_column($card_goods_list, null, 'sku_id');
|
||||
|
||||
if (!empty($card_goods_list)) {
|
||||
if ($card_right_goods_type == 'item') {
|
||||
foreach ($card_goods_list as $v) {
|
||||
$this->is_virtual = $v[ 'is_virtual' ];
|
||||
$num = $v[ 'total_num' ];
|
||||
$v[ 'num' ] = $num;
|
||||
$price = $v[ 'discount_price' ];
|
||||
$v[ 'price' ] = $price;
|
||||
$goods_money = $price * $num;
|
||||
$v[ 'goods_money' ] = $goods_money;
|
||||
$promotion_money = 0;
|
||||
$v[ 'real_goods_money' ] = $goods_money;
|
||||
$v[ 'coupon_money' ] = 0;//优惠券金额
|
||||
$v[ 'promotion_money' ] = $promotion_money;//优惠金额
|
||||
|
||||
|
||||
$this->goods_list[] = $v;
|
||||
$order_name = $this->order_name ?? '';
|
||||
if ($order_name) {
|
||||
$len = strlen_mb($order_name);
|
||||
if ($len > 200) {
|
||||
$this->order_name = str_sub($order_name, 200);
|
||||
} else {
|
||||
$this->order_name = string_split($order_name, ',', $v[ 'sku_name' ]);
|
||||
}
|
||||
} else {
|
||||
$this->order_name = string_split('', ',', $v[ 'sku_name' ]);
|
||||
}
|
||||
$this->site_name = $v[ 'site_name' ];
|
||||
$this->goods_num += $v[ 'num' ];
|
||||
$this->goods_money += $v[ 'goods_money' ];
|
||||
//以;隔开的商品项
|
||||
$goods_list_str = $this->goods_list_str ?? '';
|
||||
if ($goods_list_str) {
|
||||
$this->goods_list_str = $goods_list_str . ';' . $v[ 'sku_id' ] . ':' . $v[ 'num' ];
|
||||
} else {
|
||||
$this->goods_list_str = $v[ 'sku_id' ] . ':' . $v[ 'num' ];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($goods_sku_list as $v) {
|
||||
$sku_info = $card_goods_list_column[ $v[ 'sku_id' ] ] ?? [];
|
||||
$v = array_merge($v, $sku_info);
|
||||
$this->is_virtual = $v[ 'is_virtual' ];
|
||||
$price = $sku_info[ 'discount_price' ];
|
||||
$v[ 'price' ] = $price;
|
||||
$goods_money = $price * $v[ 'num' ];
|
||||
$v[ 'goods_money' ] = $goods_money;
|
||||
$promotion_money = 0;
|
||||
$v[ 'real_goods_money' ] = $goods_money;
|
||||
$v[ 'coupon_money' ] = 0;//优惠券金额
|
||||
$v[ 'promotion_money' ] = $promotion_money;//优惠金额
|
||||
|
||||
$this->goods_list[] = $v;
|
||||
$order_name = $this->order_name ?? '';
|
||||
if ($order_name) {
|
||||
$len = strlen_mb($order_name);
|
||||
if ($len > 200) {
|
||||
$this->order_name = str_sub($order_name, 200);
|
||||
} else {
|
||||
$this->order_name = string_split($order_name, ',', $v[ 'sku_name' ]);
|
||||
}
|
||||
} else {
|
||||
$this->order_name = string_split('', ',', $v[ 'sku_name' ]);
|
||||
}
|
||||
$this->site_name = $v[ 'site_name' ];
|
||||
$this->goods_num += $v[ 'num' ];
|
||||
$this->goods_money += $v[ 'goods_money' ];
|
||||
//以;隔开的商品项
|
||||
$goods_list_str = $this->goods_list_str ?? '';
|
||||
if ($goods_list_str) {
|
||||
$this->goods_list_str = $goods_list_str . ';' . $v[ 'sku_id' ] . ':' . $v[ 'num' ];
|
||||
} else {
|
||||
$this->goods_list_str = $v[ 'sku_id' ] . ':' . $v[ 'num' ];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取店铺订单计算
|
||||
*/
|
||||
public function shopOrderCalculate()
|
||||
{
|
||||
$promotion_money = 0;
|
||||
foreach ($this->goods_list as &$v) {
|
||||
$item_goods_money = $v[ 'goods_money' ];
|
||||
$item_promotion_money = $item_goods_money;
|
||||
$real_goods_money = $item_goods_money - $item_promotion_money;
|
||||
$v[ 'real_goods_money' ] = $real_goods_money;
|
||||
$v[ 'promotion_money' ] = $item_promotion_money;
|
||||
$promotion_money += $item_promotion_money;
|
||||
}
|
||||
$this->promotion_money = $promotion_money;
|
||||
$this->is_free_delivery = true;
|
||||
//重新计算订单总额
|
||||
$this->getOrderMoney();
|
||||
//理论上是多余的操作
|
||||
if ($this->order_money < 0) {
|
||||
$this->order_money = 0;
|
||||
}
|
||||
//总结计算
|
||||
$this->pay_money = $this->order_money;
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算后的进一步计算(不存缓存,每次都是重新计算)
|
||||
* @return array
|
||||
*/
|
||||
public function confirm()
|
||||
{
|
||||
$order_key = $this->param[ 'order_key' ];
|
||||
$this->getOrderCache($order_key);
|
||||
//初始化地址
|
||||
$this->initMemberAddress();
|
||||
//初始化门店信息
|
||||
$this->initStore();
|
||||
//配送计算
|
||||
$this->calculateDelivery();
|
||||
//批量校验配送方式
|
||||
$this->batchCheckDeliveryType();
|
||||
//计算发票相关
|
||||
$this->calculateInvoice();
|
||||
//计算余额
|
||||
$this->calculateBalcnce();
|
||||
$this->pay_money = $this->order_money - $this->balance_money;
|
||||
//设置过的商品项信息
|
||||
return get_object_vars($this);
|
||||
}
|
||||
}
|
||||
137
addon/giftcard/model/share/WchatShare.php
Executable file
137
addon/giftcard/model/share/WchatShare.php
Executable file
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\share;
|
||||
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use app\model\share\WchatShareBase as BaseModel;
|
||||
use app\model\system\Config as ConfigModel;
|
||||
|
||||
/**
|
||||
* 分享
|
||||
*/
|
||||
class WchatShare extends BaseModel
|
||||
{
|
||||
protected $config = [
|
||||
[
|
||||
'title' => '礼品卡列表',
|
||||
'config_key' => 'WCHAT_SHARE_CONFIG_GIGTCARD_LIST_PROMOTE',
|
||||
'path' => [ '/pages_promotion/giftcard/index' ],
|
||||
'method_prefix' => 'goodsList',
|
||||
],
|
||||
[
|
||||
'title' => '礼品卡详情',
|
||||
'config_key' => 'WCHAT_SHARE_CONFIG_GIGTCARD_PROMOTE',
|
||||
'path' => [ '/pages_promotion/giftcard/card_info' ],
|
||||
'method_prefix' => 'goodsDetail',
|
||||
],
|
||||
];
|
||||
|
||||
protected $sort = 5;
|
||||
|
||||
/**
|
||||
* 礼品卡分享数据
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function goodsListShareData($param)
|
||||
{
|
||||
//跳转路径
|
||||
$link = $this->getShareLink($param);
|
||||
$config_data = $this->goodsListShareConfig($param)[ 'value' ];
|
||||
|
||||
$data = [
|
||||
'link' => $link,
|
||||
'desc' => $config_data[ 'desc' ],
|
||||
'imgUrl' => $config_data[ 'imgUrl' ],
|
||||
'title' => $config_data[ 'title' ]
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'hideOptionMenu' => false,
|
||||
'hideMenuItems' => [],
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡列表分享配置
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
public function goodsListShareConfig($param)
|
||||
{
|
||||
$site_id = $param[ 'site_id' ];
|
||||
$config = $param[ 'config' ];
|
||||
|
||||
$config_model = new ConfigModel();
|
||||
$data = $config_model->getConfig([ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', $config[ 'config_key' ] ] ])[ 'data' ];
|
||||
if (empty($data[ 'value' ])) {
|
||||
$data[ 'value' ] = [
|
||||
'title' => "礼品卡列表",
|
||||
'desc' => "购卡送好礼",
|
||||
'imgUrl' => ''
|
||||
];
|
||||
}
|
||||
if (empty($data[ 'value' ][ 'imgUrl' ])) {
|
||||
$data[ 'value' ][ 'imgUrl' ] = img('addon/giftcard/icon.png');
|
||||
}
|
||||
return [
|
||||
'value' => $data[ 'value' ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡分享数据
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function goodsDetailShareData($param)
|
||||
{
|
||||
$site_id = $param[ 'site_id' ] ?? 0;
|
||||
$url = $param[ 'url' ];
|
||||
|
||||
//跳转路径
|
||||
$parse_res = parse_url($url);
|
||||
parse_str($parse_res[ 'query' ] ?? '', $query);
|
||||
|
||||
if (isset($query[ 'id' ]) || isset($query[ 'giftcard_id' ])) {
|
||||
$giftcard_id = $query['id'] ?? $query['giftcard_id'];
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$field = 'id,card_name,selling_price,point,goods_ids,balance,card_count,max_buy,time_type,youxiao_time,youxiao_day,card_cover,site_id,is_balance';
|
||||
$sku_info = $giftcard_model->getGiftcardGoodsInfo([ [ 'site_id', '=', $site_id ], [ 'id', '=', $giftcard_id ] ], $field)[ 'data' ];
|
||||
if (!empty($sku_info)) {
|
||||
$config_model = new \app\model\share\WchatShare();
|
||||
$config_data = $config_model->goodsDetailShareConfig($param);
|
||||
|
||||
$title = str_replace('{goods_name}', $sku_info[ 'card_name' ], $config_data[ 'value' ][ 'title' ]);
|
||||
$desc = str_replace('{price}', $sku_info[ 'selling_price' ], $config_data[ 'value' ][ 'desc' ]);
|
||||
$link = $this->getShareLink($param);
|
||||
$image_url = $sku_info[ 'card_cover' ];
|
||||
|
||||
$data = [
|
||||
'title' => $title,
|
||||
'desc' => $desc,
|
||||
'link' => $link,
|
||||
'imgUrl' => $image_url,
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'hideOptionMenu' => false,
|
||||
'hideMenuItems' => [],
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
90
addon/giftcard/model/share/WeappShare.php
Executable file
90
addon/giftcard/model/share/WeappShare.php
Executable file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\model\share;
|
||||
|
||||
use app\model\share\WeappShareBase;
|
||||
use app\model\system\Config as ConfigModel;
|
||||
|
||||
/**
|
||||
* 分享
|
||||
*/
|
||||
class WeappShare extends WeappShareBase
|
||||
{
|
||||
protected $config = [
|
||||
[
|
||||
'title' => '礼品卡列表',
|
||||
'config_key' => 'WEAPP_SHARE_CONFIG_GIFTCARD_LIST',
|
||||
'path' => ['/pages_promotion/giftcard/index'],
|
||||
'method_prefix' => 'giftcardList',
|
||||
],
|
||||
];
|
||||
|
||||
protected $sort = 4;
|
||||
|
||||
/**
|
||||
* 礼品卡列表
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function giftcardListShareData($param)
|
||||
{
|
||||
//获取和替换配置数据
|
||||
$config_data = $this->giftcardListShareConfig($param);
|
||||
$title = $config_data['value']['title'];
|
||||
$image_url = $config_data['value']['imageUrl'] ? img($config_data['value']['imageUrl']) : '';
|
||||
$path = $this->getSharePath($param);
|
||||
|
||||
$data = [
|
||||
'title' => $title,
|
||||
'path' => $path,
|
||||
'imageUrl' => $image_url,
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'onShareAppMessage' => true,
|
||||
'onShareTimeline' => true,
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 礼品卡列表
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function giftcardListShareConfig($param)
|
||||
{
|
||||
$site_id = $param['site_id'];
|
||||
$config = $param['config'];
|
||||
|
||||
$config_model = new ConfigModel();
|
||||
$data = $config_model->getConfig([
|
||||
['site_id', '=', $site_id],
|
||||
['app_module', '=', 'shop'],
|
||||
['config_key', '=', $config['config_key']],
|
||||
])['data'];
|
||||
if (empty($data['value'])) {
|
||||
$data['value'] = [
|
||||
'title' => '跟我一起来领礼品卡吧!',
|
||||
'imageUrl' => '',
|
||||
];
|
||||
}
|
||||
$variable = [];
|
||||
|
||||
return [
|
||||
'value' => $data['value'],
|
||||
'variable' => $variable,
|
||||
];
|
||||
}
|
||||
}
|
||||
180
addon/giftcard/model/transfer/Blessing.php
Executable file
180
addon/giftcard/model/transfer/Blessing.php
Executable file
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\transfer;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\model\BaseModel;
|
||||
use app\model\member\Member;
|
||||
|
||||
|
||||
class Blessing extends BaseModel
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* 祝福语
|
||||
*/
|
||||
public function blessing($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$member_card_id = $params[ 'member_card_id' ];
|
||||
$condition = array (
|
||||
[ 'member_id', '=', $member_id ],
|
||||
[ 'member_card_id', '=', $member_card_id ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info))
|
||||
return $this->error([], '礼品卡不存在或已转赠');
|
||||
|
||||
$is_transfer = $member_card_info[ 'is_transfer' ];
|
||||
if ($is_transfer == 1)
|
||||
return $this->error([], '礼品卡不存在或已转赠');
|
||||
$blessing_id = model('giftcard_card_blessing')->update([ 'status' => 1 ], $condition);
|
||||
|
||||
$site_id = $member_card_info[ 'site_id' ];
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
$code = substr(md5(microtime(true) . $blessing_id), 0, 6);
|
||||
$data = array (
|
||||
'blessing' => $params[ 'blessing' ],
|
||||
'member_id' => $member_id,
|
||||
'member_card_id' => $member_card_id,
|
||||
'site_id' => $site_id,
|
||||
'card_id' => $card_id,
|
||||
'create_time' => time(),
|
||||
'no' => $code
|
||||
);
|
||||
model('giftcard_card_blessing')->add($data);
|
||||
return $this->success($code);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 使祝福语失效
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function blessingToVoid($condition)
|
||||
{
|
||||
model('giftcard_card_blessing')->update([ 'status' => 1 ], $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 祝福语详情
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function getBlessingDetail($params)
|
||||
{
|
||||
$no = $params[ 'no' ] ?? '';
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$blessing_id = $params[ 'blessing_id' ] ?? 0;
|
||||
$member_id = $params[ 'member_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'no', '=', $no ]
|
||||
);
|
||||
if ($blessing_id > 0) {
|
||||
$condition[] = [ 'blessing_id', '=', $blessing_id ];
|
||||
}
|
||||
if (!empty($code)) {
|
||||
$condition[] = [ 'code', '=', $code ];
|
||||
}
|
||||
if ($site_id > 0) {
|
||||
$condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$info = model('giftcard_card_blessing')->getInfo($condition);
|
||||
if (empty($info))
|
||||
return $this->error([], '礼品卡祝福不存在或已失效');
|
||||
|
||||
$member_model = new Member();
|
||||
if ($info[ 'to_member_id' ] > 0) {
|
||||
$to_member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $info[ 'to_member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$info[ 'to_member_nickname' ] = $to_member_info[ 'nickname' ];
|
||||
$info[ 'to_member_headimg' ] = $to_member_info[ 'headimg' ];
|
||||
}
|
||||
|
||||
if ($info[ 'member_id' ] > 0) {
|
||||
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $info[ 'member_id' ] ] ], 'nickname,headimg')[ 'data' ] ?? [];
|
||||
$info[ 'member_nickname' ] = $member_info[ 'nickname' ];
|
||||
$info[ 'member_headimg' ] = $member_info[ 'headimg' ];
|
||||
}
|
||||
$info[ 'is_self' ] = $member_id == $info[ 'member_id' ] ? 1 : 0;
|
||||
$card_id = $info[ 'card_id' ];
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardDetail([ 'card_id' => $card_id ])[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error([], '礼品卡祝福不存在或已失效');
|
||||
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_info = $member_card_model->getMemberCardInfo([ [ 'member_card_id', '=', $info[ 'member_card_id' ] ] ])[ 'data' ] ?? [];
|
||||
$info[ 'is_transfer' ] = $member_card_info[ 'is_transfer' ];
|
||||
return $this->success(array_merge($card_info, $info));
|
||||
}
|
||||
|
||||
|
||||
public function setBlessingToMember($params)
|
||||
{
|
||||
$blessing_id = $params[ 'blessing_id' ] ?? 0;
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$to_member_id = $params[ 'to_member_id' ] ?? 0;
|
||||
$condition = array (
|
||||
[ 'blessing_id', '=', $blessing_id ]
|
||||
);
|
||||
$data = array (
|
||||
'to_member_id' => $to_member_id,
|
||||
'to_time' => time(),
|
||||
'status' => 2
|
||||
);
|
||||
model('giftcard_card_blessing')->update($data, $condition);
|
||||
return $this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡祝福信息
|
||||
* @param $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardBlessingInfo($condition, $field = '*')
|
||||
{
|
||||
$info = model('giftcard_card_blessing')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡祝福列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param null $limit
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardBlessingList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('giftcard_card_blessing')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员礼品卡祝福分页列表
|
||||
* @param array $condition
|
||||
* @param int $page
|
||||
* @param int $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getMemberCardBlessingPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('giftcard_card_blessing')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
}
|
||||
113
addon/giftcard/model/transfer/Transfer.php
Executable file
113
addon/giftcard/model/transfer/Transfer.php
Executable file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace addon\giftcard\model\transfer;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\card\CardLog;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
use app\model\BaseModel;
|
||||
|
||||
|
||||
class Transfer extends BaseModel
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* 赠送后的操作
|
||||
* @param $params
|
||||
* @return array
|
||||
*/
|
||||
public function transfer($params)
|
||||
{
|
||||
$blessing_id = $params[ 'blessing_id' ];
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$blessing_model = new Blessing();
|
||||
$blessing_condition = array (
|
||||
[ 'blessing_id', '=', $blessing_id ],
|
||||
[ 'status', '=', 0 ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$blessing_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
$blessing_info = $blessing_model->getMemberCardBlessingInfo($blessing_condition)[ 'data' ] ?? [];
|
||||
if (empty($blessing_info))
|
||||
return $this->error([], '礼品卡祝福已被领取或已失效');
|
||||
|
||||
//todo 后续必然增加队列控制
|
||||
$member_card_id = $blessing_info[ 'member_card_id' ];
|
||||
$member_card_model = new MemberCard();
|
||||
$member_card_condition = array (
|
||||
[ 'member_card_id', '=', $member_card_id ],
|
||||
[ 'is_transfer', '=', 0 ]
|
||||
);
|
||||
if ($site_id > 0) {
|
||||
$member_card_condition[] = [ 'site_id', '=', $site_id ];
|
||||
}
|
||||
|
||||
$member_card_info = $member_card_model->getMemberCardInfo($member_card_condition)[ 'data' ] ?? [];
|
||||
if (empty($member_card_info))
|
||||
return $this->error([], '当前礼品卡不存在或已被领取!');
|
||||
|
||||
$from_member_id = $member_card_info[ 'member_id' ];
|
||||
$card_id = $member_card_info[ 'card_id' ];
|
||||
|
||||
$member_id = $params[ 'member_id' ];
|
||||
$condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'member_id', '=', $from_member_id ]
|
||||
);
|
||||
if ($from_member_id == $member_id)
|
||||
return $this->error([], '不能自己领取自己的礼品卡!');
|
||||
|
||||
$card_model = new Card();
|
||||
$card_info = $card_model->getCardInfo($condition)[ 'data' ] ?? [];
|
||||
if (empty($card_info))
|
||||
return $this->error([], '当前礼品卡不存在或已被领取!');
|
||||
|
||||
$is_allow_transfer = $card_info[ 'is_allow_transfer' ];
|
||||
if ($is_allow_transfer == 0)
|
||||
return $this->error([], '当前礼品卡不允许转赠!');
|
||||
|
||||
if ($card_info[ 'status' ] != 'to_use')
|
||||
return $this->error([], '只有待使用的礼品卡才允许转赠!');
|
||||
|
||||
//将原所属者改变
|
||||
$transfer_params = array (
|
||||
'card_id' => $card_id,
|
||||
'member_id' => $from_member_id,
|
||||
'to_member_id' => $member_id,
|
||||
'member_card_id' => $member_card_id
|
||||
);
|
||||
$result = $member_card_model->memberCardTransfer($transfer_params);
|
||||
if ($result[ 'code' ] < 0)
|
||||
return $result;
|
||||
|
||||
$set_params = array (
|
||||
'blessing_id' => $blessing_id,
|
||||
'to_member_id' => $member_id
|
||||
);
|
||||
$result = $blessing_model->setBlessingToMember($set_params);
|
||||
if ($result[ 'code' ] < 0)
|
||||
return $result;
|
||||
|
||||
$card_params = array (
|
||||
'site_id' => $params[ 'site_id' ],
|
||||
'from_member_id' => $from_member_id,
|
||||
'member_id' => $member_id,
|
||||
'card_id' => $card_id,
|
||||
'source' => 'gift',
|
||||
);
|
||||
$result = $member_card_model->addMemberCard($card_params);
|
||||
( new CardLog() )->add([
|
||||
'card_id' => $card_id,
|
||||
'type' => 'transfer',
|
||||
'operator_type' => 'member',//todo 暂时是确定的
|
||||
'operator' => $member_id,
|
||||
'type_id' => $result[ 'data' ]
|
||||
]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
149
addon/giftcard/shop/controller/Card.php
Executable file
149
addon/giftcard/shop/controller/Card.php
Executable file
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\shop\controller;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\Card as CardModel;
|
||||
use addon\giftcard\model\card\CardImport as CardImportModel;
|
||||
use addon\giftcard\model\card\CardLog;
|
||||
use addon\giftcard\model\card\CardOperation;
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use addon\giftcard\model\membercard\MemberCard;
|
||||
|
||||
/**
|
||||
* 礼品卡控制器
|
||||
*/
|
||||
class Card extends Giftcard
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* 兑换卡列表
|
||||
* @return array|mixed
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$import_id = input('import_id', 0);
|
||||
if (request()->isJson()) {
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$search_text = input('search_text', '');
|
||||
$status = input('status', 'all');
|
||||
$import_name = input('import_name', '');
|
||||
$condition = array (
|
||||
[ 'gc.site_id', '=', $this->site_id ],
|
||||
);
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'gc.card_no', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
if ($status != 'all') {
|
||||
$condition[] = [ 'gc.status', '=', $status ];
|
||||
}
|
||||
if (!empty($card_type)) {
|
||||
$condition[] = [ 'gc.card_type', '=', $card_type ];
|
||||
}
|
||||
if ($giftcard_id > 0) {
|
||||
$condition[] = [ 'gc.giftcard_id', '=', $giftcard_id ];
|
||||
}
|
||||
|
||||
if ($import_name) {
|
||||
$import_model = new CardImportModel();
|
||||
$import_ids = $import_model->getCardImportColumn([ [ 'name', '=', $import_name ] ], 'import_id')[ 'data' ] ?? [];
|
||||
if (!empty($import_id)) {
|
||||
$import_id = array_merge($import_ids, [ $import_id, '-1' ]);
|
||||
} else {
|
||||
$import_id = array_merge($import_ids, [ -1 ]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($import_id)) {
|
||||
$condition[] = [ 'gc.import_id', 'in', $import_id ];
|
||||
}
|
||||
|
||||
$card_model = new CardModel();
|
||||
$list = $card_model->getCardPageList($condition, $page, $page_size, 'gc.card_id desc', 'gc.*,go.order_no', 'gc', [
|
||||
[ 'giftcard_order go', 'gc.order_id=go.order_id', 'left' ]
|
||||
])[ 'data' ];
|
||||
foreach ($list[ 'list' ] as $k => $v) {
|
||||
$list[ 'list' ][ $k ] = $card_model->tran($v);
|
||||
}
|
||||
return $card_model->success($list);
|
||||
} else {
|
||||
$this->assign('import_id', $import_id);
|
||||
$this->assign('giftcard_id', $giftcard_id);
|
||||
$giftcard_info = ( new GiftCardModel() )->getGiftcardInfo([ [ 'giftcard_id', '=', $giftcard_id ] ], 'card_type')[ 'data' ] ?? [];
|
||||
$this->assign('status_list', ( new CardModel() )->getStatusList($giftcard_info[ 'card_type' ]));
|
||||
return $this->fetch('card/lists');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$card_id = input('card_id', 0);
|
||||
$card_model = new CardModel();
|
||||
$member_card = new MemberCard();
|
||||
$detail = $card_model->getCardDetail([ 'card_id' => $card_id, 'site_id' => $this->site_id ])[ 'data' ] ?? [];
|
||||
if (empty($detail))
|
||||
$this->error('找不到礼品卡项');
|
||||
$detail[ 'status_name' ] = $card_model->getStatusList($detail[ 'card_type' ])[ $detail[ 'status' ] ] ?? '';
|
||||
$this->assign('detail', $detail);
|
||||
$member_card_list = $member_card->getMemberCardDetailList([ [ 'gmc.card_id', '=', $card_id ], [ 'gmc.site_id', '=', $this->site_id ] ])[ 'data' ] ?? [];
|
||||
|
||||
$this->assign('member_card_list', $member_card_list);
|
||||
$card_log_model = new CardLog();
|
||||
$card_log_condition = array (
|
||||
[ 'card_id', '=', $card_id ],
|
||||
[ 'site_id', '=', $this->site_id ]
|
||||
);
|
||||
$card_log_list = $card_log_model->getCardLogList($card_log_condition, '*', 'create_time desc')[ 'data' ] ?? [];
|
||||
$this->assign('card_log_list', $card_log_list);
|
||||
return $this->fetch('card/detail');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @return array|mixed
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$card_id = input('card_id', 0);
|
||||
$card_model = new CardModel();
|
||||
$params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'card_id' => $card_id
|
||||
);
|
||||
$result = $card_model->delete($params);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 卡作废
|
||||
* @return array
|
||||
*/
|
||||
public function invalid()
|
||||
{
|
||||
$card_id = input('card_id', 0);
|
||||
$card_operation_model = new CardOperation();
|
||||
$params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'card_id' => $card_id,
|
||||
'operator_data' => $this->user_info
|
||||
);
|
||||
$result = $card_operation_model->cardInvalid($params);
|
||||
return $result;
|
||||
|
||||
}
|
||||
}
|
||||
157
addon/giftcard/shop/controller/Cardimport.php
Executable file
157
addon/giftcard/shop/controller/Cardimport.php
Executable file
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\shop\controller;
|
||||
|
||||
use addon\giftcard\model\card\CardImport as CardImportModel;
|
||||
use addon\giftcard\model\card\RealCard;
|
||||
|
||||
/**
|
||||
* 礼品卡批次控制器
|
||||
*/
|
||||
class Cardimport extends Giftcard
|
||||
{
|
||||
|
||||
/**
|
||||
* 批次列表
|
||||
* @return array|mixed
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
if (request()->isJson()) {
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$search_text = input('search_text', '');
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'giftcard_id', '=', $giftcard_id ],
|
||||
);
|
||||
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
$card_import_model = new CardImportModel();
|
||||
$list = $card_import_model->getCardImportPageList($condition, $page, $page_size, 'create_time desc')[ 'data' ];
|
||||
foreach ($list[ 'list' ] as $k => $v) {
|
||||
$v[ 'type_name' ] = $card_import_model->create_type_list[ $v[ 'type' ] ];
|
||||
$list[ 'list' ][ $k ] = $card_import_model->tran($v);
|
||||
|
||||
}
|
||||
return $card_import_model->success($list);
|
||||
} else {
|
||||
$this->assign('giftcard_id', $giftcard_id);
|
||||
return $this->fetch('cardimport/lists');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @return array|mixed|void
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$import_id = input('import_id', 0);
|
||||
$condition = array (
|
||||
'site_id' => $this->site_id,
|
||||
'import_id' => $import_id,
|
||||
);
|
||||
$card_import_model = new CardImportModel();
|
||||
$res = $card_import_model->delete($condition);
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 作废
|
||||
* @param $params
|
||||
*/
|
||||
public function invalid()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$import_id = input('import_id', 0);
|
||||
$params = array (
|
||||
'site_id' => $this->site_id,
|
||||
'import_id' => $import_id,
|
||||
'operator_data' => $this->user_info
|
||||
);
|
||||
$card_import_model = new CardImportModel();
|
||||
$res = $card_import_model->invalid($params);
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出卡密和卡编号
|
||||
*/
|
||||
public function export()
|
||||
{
|
||||
$import_id = input('import_id', 0);
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'card_import_id', '=', $import_id ],
|
||||
);
|
||||
$card_import_model = new CardImportModel();
|
||||
$card_import_model->export($condition);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建导入记录
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$type = input('type', 0);
|
||||
$num = input('num', 0);
|
||||
$card_cdk = input('card_cdk', '');
|
||||
$card_import_model = new CardImportModel();
|
||||
$result = $card_import_model->create([
|
||||
'site_id' => $this->site_id,
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'type' => $type,
|
||||
'num' => $num,
|
||||
'card_cdk' => $card_cdk,
|
||||
'operator_data' => $this->user_info
|
||||
]);
|
||||
if ($result[ 'code' ] >= 0) {
|
||||
// http(addon_url('giftcard://shop/cardimportlog/cdkLog', [ 'import_id' => $result[ 'data' ] ]), 1);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入记录
|
||||
*/
|
||||
public function getCardImportInfo()
|
||||
{
|
||||
$import_id = input('import_id', 0);
|
||||
$card_import_model = new CardImportModel();
|
||||
$info = $card_import_model->getCardImportInfo([ [ 'site_id', '=', $this->site_id ], [ 'import_id', '=', $import_id ] ]);
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 录入卡项
|
||||
*/
|
||||
public function cdkLog()
|
||||
{
|
||||
set_time_limit(0);
|
||||
$import_id = input('import_id', 0);
|
||||
$real_card_model = new RealCard();
|
||||
$result = $real_card_model->cdkLog([
|
||||
'site_id' => $this->site_id,
|
||||
'import_id' => $import_id,
|
||||
'operator_data' => $this->user_info
|
||||
]);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
37
addon/giftcard/shop/controller/Cardimportlog.php
Executable file
37
addon/giftcard/shop/controller/Cardimportlog.php
Executable file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\shop\controller;
|
||||
|
||||
|
||||
use addon\giftcard\model\card\RealCard;
|
||||
use app\Controller;
|
||||
|
||||
/**
|
||||
* 礼品卡批次控制器
|
||||
*/
|
||||
class Cardimportlog extends Controller
|
||||
{
|
||||
/**
|
||||
* 录入卡项
|
||||
*/
|
||||
public function cdkLog()
|
||||
{
|
||||
set_time_limit(0);
|
||||
$import_id = input('import_id', 0);
|
||||
$real_card_model = new RealCard();
|
||||
$result = $real_card_model->cdkLog([
|
||||
'import_id' => $import_id,
|
||||
'operator_data' => []
|
||||
]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
118
addon/giftcard/shop/controller/Category.php
Executable file
118
addon/giftcard/shop/controller/Category.php
Executable file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\shop\controller;
|
||||
|
||||
use addon\giftcard\model\giftcard\Category as CategoryModel;
|
||||
|
||||
/**
|
||||
* 礼品卡分组控制器
|
||||
*/
|
||||
class Category extends Giftcard
|
||||
{
|
||||
/**
|
||||
* 兑换卡列表
|
||||
* @return array|mixed
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$search_text = input('search_text', '');
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ]
|
||||
);
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'category_name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
|
||||
$category_model = new CategoryModel();
|
||||
$list = $category_model->getPageList($condition, $page, $page_size);
|
||||
return $list;
|
||||
} else {
|
||||
return $this->fetch('category/lists');
|
||||
}
|
||||
}
|
||||
|
||||
public function add()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$data = [
|
||||
'category_name' => input('category_name', ''),
|
||||
'sort' => input('sort', 0),
|
||||
'font_color' => input('font_color', ''),
|
||||
'site_id' => $this->site_id
|
||||
];
|
||||
$category_model = new CategoryModel();
|
||||
$result = $category_model->add($data);
|
||||
return $result;
|
||||
} else {
|
||||
return $this->fetch('category/add');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑礼品卡活动
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
$category_id = input('category_id', 0);
|
||||
$category_model = new CategoryModel();
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
if (request()->isJson()) {
|
||||
$data = [
|
||||
'category_name' => input('category_name', ''),
|
||||
'sort' => input('sort', 0),
|
||||
'font_color' => input('font_color', ''),
|
||||
'site_id' => $this->site_id
|
||||
];
|
||||
$result = $category_model->edit($data, $condition);
|
||||
return $result;
|
||||
} else {
|
||||
$detail = $category_model->getInfo($condition)[ 'data' ] ?? [];
|
||||
$this->assign('detail', $detail);
|
||||
return $this->fetch('category/edit');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$category_id = input('category_id', 0);
|
||||
$category_model = new CategoryModel();
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
$result = $category_model->delete($condition);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function modifySort()
|
||||
{
|
||||
$category_id = input('category_id', 0);
|
||||
$category_model = new CategoryModel();
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'category_id', '=', $category_id ]
|
||||
);
|
||||
$sort = input('sort', 0);
|
||||
$result = $category_model->modifySort($sort, $condition);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
301
addon/giftcard/shop/controller/Giftcard.php
Executable file
301
addon/giftcard/shop/controller/Giftcard.php
Executable file
@@ -0,0 +1,301 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\shop\controller;
|
||||
|
||||
use addon\giftcard\model\giftcard\Category as CategoryModel;
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use addon\giftcard\model\giftcard\Media as MediaModel;
|
||||
use app\shop\controller\BaseShop;
|
||||
use addon\giftcard\model\card\Card;
|
||||
use addon\giftcard\model\giftcard\Category as GiftCardCategoryModel;
|
||||
use think\App;
|
||||
|
||||
/**
|
||||
* 礼品卡控制器
|
||||
*/
|
||||
class Giftcard extends BaseShop
|
||||
{
|
||||
public function __construct(App $app = null)
|
||||
{
|
||||
$this->replace = [
|
||||
'GIFTCARD_CSS' => __ROOT__ . '/addon/giftcard/shop/view/public/css',
|
||||
'GIFTCARD_JS' => __ROOT__ . '/addon/giftcard/shop/view/public/js',
|
||||
'GIFTCARD_IMG' => __ROOT__ . '/addon/giftcard/shop/view/public/img',
|
||||
'GIFTCARD_CSV' => __ROOT__ . '/addon/giftcard/shop/view/public/csv',
|
||||
];
|
||||
parent::__construct($app);
|
||||
}
|
||||
|
||||
/**
|
||||
* 兑换卡列表
|
||||
* @return array|mixed
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$search_text = input('search_text', '');
|
||||
$status = input('status', 'all');
|
||||
$category_id = input('category_id', 0);
|
||||
$card_type = input('card_type', 'all');
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'is_delete', '=', 0 ]
|
||||
);
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'card_name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
if (!empty($card_type) && $card_type != 'all') {
|
||||
$condition[] = [ 'card_type', '=', $card_type ];
|
||||
}
|
||||
if ($status != 'all') {
|
||||
$condition[] = [ 'status', '=', $status ];
|
||||
}
|
||||
if ($category_id > 0) {
|
||||
$condition[] = [ 'category_id', '=', $category_id ];
|
||||
}
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$list = $giftcard_model->getGiftcardDetailPageListInAdmin($condition, $page, $page_size, 'giftcard_id desc')[ 'data' ];
|
||||
return $list;
|
||||
} else {
|
||||
return $this->fetch('giftcard/lists');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加礼品卡
|
||||
* @return array|mixed
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$card_type = input('card_type', 'virtual');
|
||||
if (request()->isJson()) {
|
||||
$goods_sku_list = input('goods_sku_list', '');
|
||||
$goods_sku_list = empty($goods_sku_list) ? [] : json_decode($goods_sku_list, true);
|
||||
$cdk_type_array = input()[ 'cdk_type' ] ?? [];
|
||||
$data = [
|
||||
'card_name' => input('card_name', ''),
|
||||
'card_count' => input('card_count', 0),
|
||||
'card_cover' => input('card_cover', ''),
|
||||
'media_ids' => input('media_ids', ''),
|
||||
'cdk_length' => input('cdk_length', 0),
|
||||
'cdk_type' => implode(',', $cdk_type_array),
|
||||
'card_prefix' => input('card_prefix', ''),
|
||||
'card_suffix' => input('card_suffix', ''),
|
||||
'card_right_type' => input('card_right_type', ''),
|
||||
'card_right_goods_type' => input('card_right_goods_type', ''),
|
||||
'card_right_goods_count' => input('card_right_goods_count', ''),
|
||||
'card_price' => input('card_price', 0),
|
||||
'balance' => input('balance', 0),
|
||||
'sort' => input('sort', 0),
|
||||
'validity_type' => input('validity_type', ''),
|
||||
'validity_time' => input('validity_time', 0),
|
||||
'validity_day' => input('validity_day', 0),
|
||||
'status' => input('status', 0),
|
||||
'category_id' => input('category_id', 0),
|
||||
'is_allow_transfer' => input('is_allow_transfer', 0),
|
||||
'site_id' => $this->site_id,
|
||||
'goods_sku_list' => $goods_sku_list,
|
||||
'desc' => input('desc', ''),
|
||||
'card_type' => input('card_type', ''),
|
||||
'instruction' => input('instruction', ''),
|
||||
];
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$result = $giftcard_model->addGiftCard($data);
|
||||
return $result;
|
||||
} else {
|
||||
$this->assign('category_list', ( new GiftCardCategoryModel() )->getList([ [ 'site_id', '=', $this->site_id ] ])[ 'data' ] ?? []);
|
||||
$this->assign('card_right_type_list', ( new GiftCardModel )->card_right_type_list ?? []);
|
||||
$this->assign('card_type', $card_type);
|
||||
return $this->fetch('giftcard/add');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑礼品卡活动
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$giftcard_model = new GiftCardModel();
|
||||
if (request()->isJson()) {
|
||||
$goods_sku_list = input('goods_sku_list', '');
|
||||
$goods_sku_list = empty($goods_sku_list) ? [] : json_decode($goods_sku_list, true);
|
||||
$cdk_type_array = input()[ 'cdk_type' ] ?? [];
|
||||
$data = [
|
||||
'card_name' => input('card_name', ''),
|
||||
'card_cover' => input('card_cover', ''),
|
||||
'media_ids' => input('media_ids', ''),
|
||||
'cdk_length' => input('cdk_length', 0),
|
||||
'cdk_type' => implode(',', $cdk_type_array),
|
||||
'card_prefix' => input('card_prefix', ''),
|
||||
'card_suffix' => input('card_suffix', ''),
|
||||
'card_right_type' => input('card_right_type', ''),
|
||||
'card_right_goods_type' => input('card_right_goods_type', ''),
|
||||
'card_right_goods_count' => input('card_right_goods_count', ''),
|
||||
'card_price' => input('card_price', 0),
|
||||
'balance' => input('balance', 0),
|
||||
'sort' => input('sort', 0),
|
||||
'validity_type' => input('validity_type', ''),
|
||||
'validity_time' => input('validity_time', 0),
|
||||
'validity_day' => input('validity_day', 0),
|
||||
'status' => input('status', 0),
|
||||
'category_id' => input('category_id', 0),
|
||||
'card_type' => input('card_type', ''),
|
||||
'is_allow_transfer' => input('is_allow_transfer', 0),
|
||||
'site_id' => $this->site_id,
|
||||
'goods_sku_list' => $goods_sku_list,
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'desc' => input('desc', ''),
|
||||
'instruction' => input('instruction', ''),
|
||||
];
|
||||
$result = $giftcard_model->editGiftCard($data);
|
||||
return $result;
|
||||
} else {
|
||||
// 分组列表
|
||||
$this->assign('category_list', ( new GiftCardCategoryModel() )->getList([ [ 'site_id', '=', $this->site_id ] ])[ 'data' ] ?? []);
|
||||
// 详情
|
||||
$giftcard_info = $giftcard_model->getGiftcardDetail([ 'giftcard_id' => $giftcard_id, 'site_id' => $this->site_id ])[ 'data' ] ?? [];
|
||||
if (empty($giftcard_info))
|
||||
$this->error('找不到礼品卡活动');
|
||||
$this->assign('giftcard_info', $giftcard_info);
|
||||
$this->assign('card_right_type_list', ( new GiftCardModel )->card_right_type_list ?? []);
|
||||
return $this->fetch('giftcard/edit');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$detail = $giftcard_model->getGiftcardDetail([ 'giftcard_id' => $giftcard_id, 'site_id' => $this->site_id ])[ 'data' ] ?? [];
|
||||
if (empty($detail)) {
|
||||
$this->error('找不到礼品卡活动');
|
||||
}
|
||||
|
||||
$this->assign('category_list', ( new GiftCardCategoryModel() )->getList([ [ 'site_id', '=', $this->site_id ] ])[ 'data' ] ?? []);
|
||||
$this->assign('card_right_type_list', ( new GiftCardModel )->card_right_type_list ?? []);
|
||||
|
||||
$this->assign('detail', $detail);
|
||||
$this->assign('status_list', ( new Card() )->getStatusList($detail[ 'card_type' ]));
|
||||
return $this->fetch('giftcard/detail');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$result = $giftcard_model->deleteGiftcard([ [ 'giftcard_id', '=', $giftcard_id ], [ 'site_id', '=', $this->site_id ] ]);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 排序
|
||||
* @return array
|
||||
*/
|
||||
public function sort()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$sort = input('sort', 0);
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$result = $giftcard_model->modifyGiftcardSort($sort, [ [ 'giftcard_id', '=', $giftcard_id ], [ 'site_id', '=', $this->site_id ] ]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCategoryMedia()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$category_id = input('category_id', '');
|
||||
if (empty($category_id)) return error('-1', '参数不能为空', '');
|
||||
$condition = [
|
||||
[ 'category_id', '=', $category_id ]
|
||||
];
|
||||
$category_model = new CategoryModel();
|
||||
$category_info = $category_model->getInfo($condition, 'media_ids')[ 'data' ];
|
||||
$res = success();
|
||||
if (isset($category_info[ 'media_ids' ]) && !empty($category_info[ 'media_ids' ])) {
|
||||
$condition = [
|
||||
[ 'media_id', 'in', $category_info[ 'media_ids' ] ]
|
||||
];
|
||||
$media_model = new MediaModel();
|
||||
$res = $media_model->getList($condition);
|
||||
if (!empty($res[ 'data' ])) {
|
||||
foreach ($res[ 'data' ] as $k => $v) {
|
||||
$res[ 'data' ][ $k ][ 'media_path' ] = img($v[ 'media_path' ]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 电子卡上/下架
|
||||
* @return array
|
||||
*/
|
||||
public function isuse()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$giftcard_id = input('id', '');
|
||||
$status = input('status', '');
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$param = [
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'status' => $status,
|
||||
'site_id' => $this->site_id
|
||||
];
|
||||
if ($status == 0) {
|
||||
$result = $giftcard_model->giftcardOff($param);
|
||||
} elseif ($status == 1) {
|
||||
$result = $giftcard_model->giftcardOn($param);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 实体卡批量激活/作废
|
||||
* @return array
|
||||
*/
|
||||
public function editstatus()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$giftcard_id = input('id', '');
|
||||
$status = input('status', '');
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$param = [
|
||||
'giftcard_id' => $giftcard_id,
|
||||
'status' => $status,
|
||||
'site_id' => $this->site_id
|
||||
];
|
||||
if ($status == 2) {
|
||||
$result = $giftcard_model->giftcardOff($param);
|
||||
} elseif ($status == 1) {
|
||||
$result = $giftcard_model->giftcardOn($param);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
179
addon/giftcard/shop/controller/GiftcardRecords.php
Executable file
179
addon/giftcard/shop/controller/GiftcardRecords.php
Executable file
@@ -0,0 +1,179 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\shop\controller;
|
||||
|
||||
use addon\giftcard\model\giftcard\GiftCard as GiftCardModel;
|
||||
use addon\giftcard\model\giftcard\Category as GiftCardCategoryModel;
|
||||
|
||||
/**
|
||||
* 礼品卡记录控制器
|
||||
*/
|
||||
class GiftcardRecords extends Giftcard
|
||||
{
|
||||
/**
|
||||
* 兑换卡列表
|
||||
* @return array|mixed
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$card_type = input('card_type', '');
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$search_text = input('search_text', '');
|
||||
$status = input('status', 'all');
|
||||
$category_id = input('category_id', 0);
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ]
|
||||
);
|
||||
if (!empty($search_text)) {
|
||||
$condition[] = [ 'card_name', 'like', '%' . $search_text . '%' ];
|
||||
}
|
||||
if ($status != 'all') {
|
||||
$condition[] = [ 'status', '=', $status ];
|
||||
}
|
||||
if (!empty($card_type)) {
|
||||
$condition[] = [ 'card_type', '=', $card_type ];
|
||||
}
|
||||
if ($category_id > 0) {
|
||||
$condition[] = [ 'category_id', '=', $category_id ];
|
||||
}
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$list = $giftcard_model->getGiftcardDetailPageList($condition, $page, $page_size);
|
||||
return $list;
|
||||
} else {
|
||||
return $this->fetch('giftcard/lists');
|
||||
}
|
||||
}
|
||||
|
||||
public function add()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$goods_sku_list = input('goods_sku_list', '');
|
||||
$goods_sku_list = empty($goods_sku_list) ? [] : json_decode($goods_sku_list, true);
|
||||
$data = [
|
||||
'card_name' => input('card_name', ''),
|
||||
'card_count' => input('card_count', 0),
|
||||
'card_cover' => input('card_cover', ''),
|
||||
'cdk_length' => input('cdk_length', 0),
|
||||
'cdk_prefix' => input('cdk_prefix', ''),
|
||||
'cdk_suffix' => input('cdk_suffix', ''),
|
||||
'cdk_type' => input('cdk_type', ''),
|
||||
'card_right_type' => input('card_right_type', ''),
|
||||
'card_right_goods_type' => input('card_right_goods_type', ''),
|
||||
'card_right_goods_count' => input('card_right_goods_count', ''),
|
||||
'card_price' => input('card_price', 0),
|
||||
'balance' => input('balance', 0),
|
||||
// 'sale_num' => input('sale_num', 0),
|
||||
'sort' => input('sort', 0),
|
||||
'validity_type' => input('validity_type', ''),
|
||||
'validity_time' => input('validity_time', 0),
|
||||
'validity_day' => input('validity_day', 0),
|
||||
'status' => input('status', 0),
|
||||
'media_id' => input('media_id', 0),
|
||||
'category_id' => input('category_id', 0),
|
||||
'card_type' => input('card_type', ''),
|
||||
'is_allow_transfer' => input('is_allow_transfer', 0),
|
||||
'site_id' => $this->site_id,
|
||||
'goods_sku_list' => $goods_sku_list
|
||||
];
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$result = $giftcard_model->addGiftCard($data);
|
||||
return $result;
|
||||
} else {
|
||||
$this->assign('category_list', ( new GiftCardCategoryModel() )->getList([ [ 'site_id', '=', $this->site_id ] ])[ 'data' ] ?? []);
|
||||
return $this->fetch('giftcard/add');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑礼品卡活动
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$giftcard_model = new GiftCardModel();
|
||||
if (request()->isJson()) {
|
||||
$goods_sku_list = input('goods_sku_list', '');
|
||||
$goods_sku_list = empty($goods_sku_list) ? [] : json_decode($goods_sku_list, true);
|
||||
$data = [
|
||||
'card_name' => input('card_name', ''),
|
||||
'card_count' => input('card_count', 0),
|
||||
'card_cover' => input('card_cover', ''),
|
||||
'cdk_length' => input('cdk_length', 0),
|
||||
'cdk_prefix' => input('cdk_prefix', ''),
|
||||
'cdk_suffix' => input('cdk_suffix', ''),
|
||||
'cdk_type' => input('cdk_type', ''),
|
||||
'card_right_type' => input('card_right_type', ''),
|
||||
'card_right_goods_type' => input('card_right_goods_type', ''),
|
||||
'card_right_goods_count' => input('card_right_goods_count', ''),
|
||||
'card_price' => input('card_price', 0),
|
||||
'balance' => input('balance', 0),
|
||||
// 'sale_num' => input('sale_num', 0),
|
||||
'sort' => input('sort', 0),
|
||||
'validity_type' => input('validity_type', ''),
|
||||
'validity_time' => input('validity_time', 0),
|
||||
'validity_day' => input('validity_day', 0),
|
||||
'status' => input('status', 0),
|
||||
'media_id' => input('media_id', 0),
|
||||
'category_id' => input('category_id', 0),
|
||||
'is_allow_transfer' => input('is_allow_transfer', 0),
|
||||
'site_id' => $this->site_id,
|
||||
'goods_sku_list' => $goods_sku_list,
|
||||
'giftcard_id' => $giftcard_id
|
||||
];
|
||||
//
|
||||
$result = $giftcard_model->editGiftCard($data);
|
||||
return $result;
|
||||
} else {
|
||||
|
||||
$this->assign('category_list', ( new GiftCardCategoryModel() )->getList([ [ 'site_id', '=', $this->site_id ] ])[ 'data' ] ?? []);
|
||||
$detail = $giftcard_model->getGiftcardDetail([ 'giftcard_id' => $giftcard_id, 'site_id' => $this->site_id ])[ 'data' ] ?? [];
|
||||
$this->assign('detail', $detail);
|
||||
return $this->fetch('giftcard/edit');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 活动详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$detail = $giftcard_model->getGiftcardDetail([ 'giftcard_id' => $giftcard_id, 'site_id' => $this->site_id ])[ 'data' ] ?? [];
|
||||
$this->assign('detail', $detail);
|
||||
return $this->fetch('giftcard/detail');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$result = $giftcard_model->deleteGiftcard([ [ 'giftcard_id', '=', $giftcard_id ], [ 'site_id', '=', $this->site_id ] ]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function sort()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$sort = input('sort', 0);
|
||||
$giftcard_model = new GiftCardModel();
|
||||
$result = $giftcard_model->modifyGiftcardSort($sort, [ [ 'giftcard_id', '=', $giftcard_id ], [ 'site_id', '=', $this->site_id ] ]);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
132
addon/giftcard/shop/controller/Media.php
Executable file
132
addon/giftcard/shop/controller/Media.php
Executable file
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\shop\controller;
|
||||
|
||||
use addon\giftcard\model\giftcard\Media as MediaModel;
|
||||
|
||||
/**
|
||||
* 礼品卡分组控制器
|
||||
*/
|
||||
class Media extends Giftcard
|
||||
{
|
||||
/**
|
||||
* 分页列表
|
||||
* @return array|mixed
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
header("Expires:-1");
|
||||
header("Cache-Control:no_cache");
|
||||
header("Pragma:no-cache");
|
||||
$media_model = new MediaModel();
|
||||
if (request()->isJson()) {
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ]
|
||||
);
|
||||
if (!empty($media_name)) {
|
||||
$condition[] = [ 'media_name', '=', $media_name ];
|
||||
}
|
||||
|
||||
$list = $media_model->getPageList($condition, $page, $page_size, 'create_time desc');
|
||||
return $list;
|
||||
} else {
|
||||
return $this->fetch('media/lists');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$media_id = input('media_id', 0);
|
||||
$media_model = new MediaModel();
|
||||
$condition = array (
|
||||
[ 'site_id', '=', $this->site_id ],
|
||||
[ 'media_id', '=', $media_id ]
|
||||
);
|
||||
$result = $media_model->delete($condition);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传
|
||||
*/
|
||||
public function upload()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$media_model = new MediaModel();
|
||||
$param = [
|
||||
'site_id' => $this->site_id,
|
||||
'name' => 'file'
|
||||
];
|
||||
$result = $media_model->upload($param);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 替换
|
||||
* */
|
||||
public function modifyFile()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
// 参数
|
||||
$media_id = input('media_id', '');
|
||||
// 获取图片信息
|
||||
$media_model = new MediaModel();
|
||||
$params = [
|
||||
'media_id' => $media_id,
|
||||
'site_id' => $this->site_id,
|
||||
'name' => 'file'
|
||||
];
|
||||
|
||||
$result = $media_model->replace($params);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 相册管理界面
|
||||
* @return mixed
|
||||
*/
|
||||
public function media()
|
||||
{
|
||||
$img_num = input('imgNum', '');
|
||||
$media_ids = input('mediaIds', '');
|
||||
$media_model = new MediaModel();
|
||||
if (request()->isJson()) {
|
||||
$page_index = input('page', 1);
|
||||
$list_rows = input('limit', PAGE_LIST_ROWS);
|
||||
$media_name = input("media_name", "");
|
||||
$condition = array (
|
||||
[ 'site_id', "=", $this->site_id ],
|
||||
);
|
||||
if (!empty($media_name)) {
|
||||
$condition[] = [ 'media_name', 'like', '%' . $media_name . '%' ];
|
||||
}
|
||||
$list = $media_model->getPageList($condition, $page_index, $list_rows, 'update_time desc');
|
||||
return $list;
|
||||
} else {
|
||||
$media_list = $media_model->getList([ [ 'site_id', "=", $this->site_id ] ]);
|
||||
$this->assign("media_list", $media_list[ 'data' ]);
|
||||
if (!empty($media_ids)) {
|
||||
$media_ids = implode(',', array_unique(explode(',', $media_ids)));
|
||||
}
|
||||
$this->assign("media_ids", $media_ids);
|
||||
$this->assign("img_num", $img_num);
|
||||
return $this->fetch('media/media');
|
||||
}
|
||||
}
|
||||
}
|
||||
97
addon/giftcard/shop/controller/Order.php
Executable file
97
addon/giftcard/shop/controller/Order.php
Executable file
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\giftcard\shop\controller;
|
||||
|
||||
use addon\giftcard\model\card\Card as CardModel;
|
||||
use addon\giftcard\model\order\GiftCardOrder;
|
||||
use think\App;
|
||||
|
||||
/**
|
||||
* 礼品卡订单控制器
|
||||
*/
|
||||
class Order extends Giftcard
|
||||
{
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
* @return mixed
|
||||
*/
|
||||
public function order()
|
||||
{
|
||||
$giftcard_id = input('giftcard_id', 0);
|
||||
$order_model = new GiftCardOrder();
|
||||
if (request()->isJson()) {
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$status = input('status', 'all');
|
||||
$start_time = input('start_time', '');
|
||||
$end_time = input('end_time', '');
|
||||
$nickname = input('nickname', '');
|
||||
$order_no = input('order_no', '');
|
||||
$card_right_type = input('card_right_type', '');
|
||||
|
||||
$condition = array (
|
||||
[ 'o.site_id', '=', $this->site_id ],
|
||||
[ 'o.is_delete', '=', 0 ],
|
||||
[ 'o.order_status', '=', 'complete' ],
|
||||
);
|
||||
if ($giftcard_id > 0) {
|
||||
$condition[] = [ 'o.giftcard_id', '=', $giftcard_id ];
|
||||
}
|
||||
if (!empty($nickname)) {
|
||||
$condition[] = [ 'm.nickname', 'like', '%' . $nickname . '%' ];
|
||||
}
|
||||
if (!empty($card_right_type)) {
|
||||
$condition[] = [ 'o.card_right_type', '=', $card_right_type ];
|
||||
}
|
||||
if (!empty($order_no)) {
|
||||
$condition[] = [ 'o.order_no', 'like', '%'. $order_no . '%' ];
|
||||
}
|
||||
//支付时间
|
||||
if (!empty($start_time) && empty($end_time)) {
|
||||
$condition[] = [ "o.pay_time", ">=", date_to_time($start_time) ];
|
||||
} elseif (empty($start_time) && !empty($end_time)) {
|
||||
$condition[] = [ "o.pay_time", "<=", date_to_time($end_time) ];
|
||||
} elseif (!empty($start_time) && !empty($end_time)) {
|
||||
$condition[] = [ 'o.pay_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
|
||||
}
|
||||
|
||||
$order = 'o.create_time desc';
|
||||
$field = 'o.*, m.nickname,m.headimg,m.mobile';
|
||||
$join = [
|
||||
[ 'member m', 'o.member_id = m.member_id', 'left' ]
|
||||
];
|
||||
$list = $order_model->getOrderDetailPageList($condition, $page, $page_size, $order, $field, 'o', $join);
|
||||
return $list;
|
||||
}
|
||||
$this->assign('giftcard_id', $giftcard_id);
|
||||
return $this->fetch("order/order");
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
* @return mixed|void
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$order_id = input('order_id', '');
|
||||
$order_model = new GiftCardOrder();
|
||||
$order_detail = $order_model->getOrderDetail([ 'site_id' => $this->site_id, 'order_id' => $order_id ])[ 'data' ] ?? [];
|
||||
$card_model = new CardModel();
|
||||
$card_list = $card_model->getCardList([ [ 'site_id', '=', $this->site_id ], [ 'order_id', '=', $order_detail[ 'order_id' ] ] ])[ 'data' ];
|
||||
foreach ($card_list as $k => $v) {
|
||||
$card_list[ $k ] = $card_model->tran($v);
|
||||
}
|
||||
$this->assign('order_detail', $order_detail);
|
||||
$this->assign('card_list', $card_list);
|
||||
return $this->fetch("order/detail");
|
||||
}
|
||||
}
|
||||
192
addon/giftcard/shop/view/card/detail.html
Executable file
192
addon/giftcard/shop/view/card/detail.html
Executable file
@@ -0,0 +1,192 @@
|
||||
<style>
|
||||
.card-common .layui-card-body{padding-top: 0;}
|
||||
.card-common {margin-top: 15px;margin-bottom: 0;box-shadow: initial;}
|
||||
.promotion-view{display:flex;flex-wrap:wrap}
|
||||
.promotion-view-item{width:33.3%;padding-right:10px;box-sizing:border-box;line-height:30px}
|
||||
.todo-list .promotion-stat-item{flex:1;width:0;cursor:pointer}
|
||||
.layui-layout-admin .layui-body .body-content {background: 0 0;padding: 0;}
|
||||
.gift-card-goods span{cursor: pointer; color: var(--base-color);}
|
||||
.layui-tab-title{margin-bottom: 15px;}
|
||||
.layui-layout-admin .single-filter-box.top {padding-top: 0 !important;}
|
||||
.add-way .add-way-item{display: flex;margin: 8px 0;align-items: center;}
|
||||
.add-way .add-way-item input{margin: 0 10px;}
|
||||
.add-way .add-way-item .layui-form-radio{margin-right: 0;}
|
||||
/* 商品列表 */
|
||||
.shop-information-table > p{padding-left: 5px;padding-bottom: 5px;}
|
||||
.shop-information-table table {width: 100%;border: 1px solid rgb(238,238,238);}
|
||||
.shop-information-table .table-body {max-height: 400px;overflow: auto;}
|
||||
.table-trOne{height: 48px;background:rgb(245,245,245) ;}
|
||||
.shop-information-table th{text-align: left;padding-left:28px;box-sizing: border-box;font-weight: 500;color:#333333;}
|
||||
.shop-information-table th:last-child{border:none;}
|
||||
.table-trTow{width:100%;height:60px;border-top:1px solid rgb(238,238,238);}
|
||||
.table-trTow>td{text-align: left;padding-left:28px;box-sizing: border-box;font-weight: 500;color:#333333;border-right:1px solid rgb(238,238,238);}
|
||||
.table-trTow>td:nth-child(5){color:var(--base-color)}
|
||||
/* 卡记录 */
|
||||
.layui-timeline-item{padding-bottom:28px;}
|
||||
.layui-timeline-item:after{overflow: hidden;height: 0;content:"";display: block;clear: both;}
|
||||
.layui-timeline-item:before, hr{background:var(--base-color);margin-left:92px;}
|
||||
.distribution{width:100%;min-height: 50px;background:white;margin-top:15px;padding: 15px;box-sizing: border-box;}
|
||||
.layui-timeline-axis{left:87px;background:var(--base-color);display: flex;align-items: center;justify-content: center;}
|
||||
.layui-timeline-content{float:left;display: inline-block;padding-left:45px;}
|
||||
.layui-time-left{float: left;width:85px;height: 40px;padding: 2px 10px 0 0;box-sizing: border-box;}
|
||||
.layui-timeline{padding-left:60px;}
|
||||
.layui-time-left>p:nth-of-type(1){font-size:14px;color:#333333;text-align: right;}
|
||||
.layui-time-left>p:nth-of-type(2){color:rgb(164,164,164);text-align: right;}
|
||||
.layui-icon-center {width: 40%;height: 40%;border-radius: 50%;background: white;}
|
||||
</style>
|
||||
|
||||
<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="promotion-view">
|
||||
<div class="promotion-view-item">
|
||||
<label>卡号:</label>
|
||||
<span>{$detail.card_no}</span>
|
||||
</div>
|
||||
{if $detail.card_type!='virtual'}
|
||||
<div class="promotion-view-item">
|
||||
<label>卡密:</label>
|
||||
<span>{if $detail.card_cdk}{$detail.card_cdk}{else/}--{/if}</span>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="promotion-view-item">
|
||||
<label>卡类型:</label>
|
||||
<span>{if $detail.card_right_type == 'real'}实体卡{else/}电子卡{/if}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item grouping">
|
||||
<label>权益类型:</label>
|
||||
<span>{if $detail.card_right_type == 'goods'}礼品卡{else/}储值卡{/if}</span>
|
||||
</div>
|
||||
{if $detail.card_right_type == 'balance'}
|
||||
<div class="promotion-view-item grouping">
|
||||
<label>储蓄余额:</label>
|
||||
<span>{$detail.balance}</span>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="promotion-view-item">
|
||||
<label>状态:</label>
|
||||
<span>{$detail.status_name}</span>
|
||||
</div>
|
||||
{if $detail.init_member_id > 0 }
|
||||
<div class="promotion-view-item">
|
||||
<label>{if $detail.card_type == 'real'}激活人{else/}购买人{/if}:</label>
|
||||
<span>{$detail.init_member_nickname}</span>
|
||||
</div>
|
||||
{if $detail.card_type=='virtual'}
|
||||
<div class="promotion-view-item">
|
||||
<label>购买订单:</label>
|
||||
<a class="text-color" href="{:href_url('giftcard://shop/order/detail',['order_id'=> $detail['order_id']])}" target="_blank">{$detail.order_no}</a>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="promotion-view-item">
|
||||
<label>{if $detail.card_type == 'real'}激活{else/}购买{/if}时间:</label>
|
||||
<span>{if $detail.card_type == 'real'}{:time_to_date($detail.activate_time)}{else/}{:time_to_date($detail.create_time)}{/if}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>当前持卡人:</label>
|
||||
<span>{$detail.member_nickname}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item">
|
||||
<label>有效期:</label>
|
||||
<span>{if $detail.valid_time == 0}永久{else/}{:time_to_date($detail.valid_time)}{/if}</span>
|
||||
</div>
|
||||
{if $detail.status != "to_use"&& $detail.use_time && ($detail.status == "expire" || $detail.status == "invalid" || $detail.status == "used")}
|
||||
<div class="promotion-view-item">
|
||||
<label>使用时间:</label>
|
||||
<span>{:date('Y-m-d H:i:s',$detail.use_time)}</span>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 商品信息 -->
|
||||
{if $detail['card_right_type'] == 'goods'}
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">商品信息</span>
|
||||
</div>
|
||||
<div class="layui-card-body shop-information-table">
|
||||
{if $detail.card_right_goods_type == 'all'}
|
||||
<p>礼品卡持卡人兑换时可从以下商品列表中任选{$detail.card_right_goods_count}件</p>
|
||||
{/if}
|
||||
<div class="table-head">
|
||||
<table lay-skin="line">
|
||||
<colgroup>
|
||||
<col width="80%">
|
||||
{if $detail.card_right_goods_type == 'all'}
|
||||
<col width="20%">
|
||||
{/if}
|
||||
{if $detail.card_right_goods_type != 'all'}
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
{/if}
|
||||
<col>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="table-trOne">
|
||||
<th lay-data="{field:'product_name', width:200}">商品</th>
|
||||
<th lay-data="{field:'price'}">价格</th>
|
||||
{if $detail.card_right_goods_type != 'all'}
|
||||
<th lay-data="{field:'sale_num'}">数量</th>
|
||||
{/if}
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
<div class="table-body">
|
||||
<table lay-skin="line">
|
||||
<colgroup>
|
||||
<col width="80%">
|
||||
{if $detail.card_right_goods_type == 'all'}
|
||||
<col width="20%">
|
||||
{/if}
|
||||
{if $detail.card_right_goods_type != 'all'}
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
{/if}
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
{foreach $detail['card_goods_list'] as $list_k => $order_goods_item}
|
||||
<tr class="table-trTow">
|
||||
<td>{$order_goods_item.sku_name}</td>
|
||||
<td>{$order_goods_item.price}</td>
|
||||
{if $detail.card_right_goods_type != 'all'}
|
||||
<td>{$order_goods_item.total_num}</td>
|
||||
{/if}
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">卡记录</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<ul class="layui-timeline">
|
||||
{foreach name="$card_log_list" item="vo"}
|
||||
<li class="layui-timeline-item">
|
||||
<div class="layui-time-left">
|
||||
<p>{:date('Y-m-d', $vo.create_time)}</p>
|
||||
<p>{:date('H:i:s', $vo.create_time)}</p>
|
||||
</div>
|
||||
<div class="layui-icon layui-timeline-axis">
|
||||
<span class="layui-icon-center"></span>
|
||||
</div>
|
||||
<div class="layui-timeline-content layui-text">
|
||||
<div class="layui-timeline-title">{$vo.remark}</div>
|
||||
</div>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
179
addon/giftcard/shop/view/card/lists.html
Executable file
179
addon/giftcard/shop/view/card/lists.html
Executable file
@@ -0,0 +1,179 @@
|
||||
<style>
|
||||
.table-tab .layui-tab-content{margin-top: 10px;}
|
||||
.add-way .add-way-item{display: flex;margin: 8px 0;align-items: center;}
|
||||
.add-way .add-way-item input{margin: 0 10px;}
|
||||
.add-way .add-way-item .layui-form-radio{margin-right: 0;}
|
||||
</style>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="card_tab">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">编号名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入编号名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button type="button" class="layui-btn" lay-filter="search" lay-submit>筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-tab table-tab" lay-filter="bargain_tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" data-status="all">全部</li>
|
||||
{foreach $status_list as $k => $v}
|
||||
<li data-status="{$k}">{$v}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<div class="layui-tab-content poster_list">
|
||||
<!-- 列表 -->
|
||||
<table id="poster_list" lay-filter="poster_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="action">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table,form,laytpl,element,repeat_flag,layer_label;
|
||||
var giftcard_id = {$giftcard_id};
|
||||
var import_id = {$import_id};
|
||||
|
||||
layui.use(['form','laytpl','element'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
form = layui.form;
|
||||
element = layui.element;
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#poster_list',
|
||||
url: ns.url("giftcard://shop/card/lists", {'giftcard_id': giftcard_id,'import_id':import_id}),
|
||||
cols: [
|
||||
[{
|
||||
field: 'card_no',
|
||||
title: '编号',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
},{
|
||||
field: 'card_cdk',
|
||||
title: '卡密',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
}, {
|
||||
title: '生成时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
field: 'member_nickname',
|
||||
title: '激活会员',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: function (data) {
|
||||
return data.member_nickname || '--'
|
||||
}
|
||||
}, {
|
||||
field: 'sort',
|
||||
unresize: 'false',
|
||||
title: '激活时间',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
if(data.activate_time == 0)
|
||||
return "--";
|
||||
else
|
||||
return ns.time_to_date(data.activate_time);
|
||||
}
|
||||
}, {
|
||||
field: 'status_name',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '10%'
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#action',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
element.on('tab(bargain_tab)', function () {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
'status': this.getAttribute('data-status')
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'delete': //删除
|
||||
deleteCard(data.card_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteCard(id) {
|
||||
layer.confirm('确定要删除该卡项记录吗?', function (index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/card/delete"),
|
||||
data: {
|
||||
card_id: 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;
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {curr: 1},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
407
addon/giftcard/shop/view/cardimport/lists.html
Executable file
407
addon/giftcard/shop/view/cardimport/lists.html
Executable file
@@ -0,0 +1,407 @@
|
||||
<style>
|
||||
.add-way .add-way-item{display: flex;margin: 8px 0;align-items: center;flex-wrap: wrap;}
|
||||
.add-way .add-way-item input{margin: 0 10px;}
|
||||
.add-way .add-way-item .layui-form-radio{margin-right: 0;padding-right: 0;}
|
||||
.add-way .word-aux{flex-basis: 100%;margin-left: 0;}
|
||||
.disabled-click{pointer-events: none;color: #999 !important;}
|
||||
#addFile {margin-left: 10px;cursor: pointer;color: var(--base-color);}
|
||||
.upload-file{flex-basis: 100%;padding-left: 12px;padding-top: 5px;}
|
||||
.load-animation {
|
||||
position: fixed;
|
||||
z-index: 19999999;
|
||||
background-color: rgba(255,255,255,.9);
|
||||
width: 700px;
|
||||
height: 400px;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
}
|
||||
.load-animation .load-head{
|
||||
font-size: 16px;
|
||||
height: 44px;
|
||||
line-height: 44px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
.load-animation .load-body {
|
||||
height: 300px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
.load-animation .load-body .animation-outer{
|
||||
position: relative;
|
||||
margin-top: 30px;
|
||||
border-radius: 10px;
|
||||
width: 300px;
|
||||
height: 10px;
|
||||
background-color: #eee;
|
||||
}
|
||||
.load-animation .load-body .animation-within{
|
||||
border-radius: 10px;
|
||||
width: 0;
|
||||
height: 100%;
|
||||
background-color: var(--base-color);
|
||||
transition: all .3s;
|
||||
}
|
||||
.load-animation .load-body .num{
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
top: -20px
|
||||
}
|
||||
.confirm-import{margin-left: 0 !important;}
|
||||
</style>
|
||||
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="addCard()">添加卡密</button>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="bargain_tab">
|
||||
<div class="layui-tab-content poster_list">
|
||||
<!-- 列表 -->
|
||||
<table id="poster_list" lay-filter="poster_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type='text/html' id="iog_card_cdk">
|
||||
<div class="layui-form iog-card-cdk">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">添加方式:</label>
|
||||
<div class="layui-input-block add-way">
|
||||
<div class="add-way-item">
|
||||
<input type="radio" name="type" value="auto" lay-filter="validityType" checked>
|
||||
<span class="sub-text">在线制卡</span>
|
||||
<input type="number" class="layui-input len-short sub-text" name="num">
|
||||
<span class="sub-text">张</span>
|
||||
<div class="word-aux">在线制卡最多单次制作1千张,卡号及密钥按照制卡规则设置。</div>
|
||||
</div>
|
||||
<div class="add-way-item">
|
||||
<input type="radio" name="type" value="import" lay-filter="validityType">
|
||||
<span class="sub-text disabled-click">导入制卡</span>
|
||||
<span>(下载<a href="GIFTCARD_CSV/card_import.csv" class="text-color" target="_blank">导入模板</a>)</span>
|
||||
<div class="upload-file sub-text disabled-click">
|
||||
<div class="upload-img-block" id="addFile">
|
||||
<div class="upload-img-box">
|
||||
<div class="upload-default">
|
||||
<div class="upload">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>导入模版</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">导入制卡需上传卡密文档,注意不要重复,且单次最多制作1千张。</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn confirm-auto">确定</button>
|
||||
<button class="layui-btn confirm-import layui-hide">确定</button>
|
||||
<button class="layui-btn layui-btn-primary cancel">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
<a class="layui-btn" lay-event="export">导出</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table,form,laytpl,upload,layer_label,
|
||||
repeat_flag = false; //防重复标识
|
||||
var giftcard_id = {$giftcard_id};
|
||||
|
||||
layui.use(['form','laytpl','upload'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
form = layui.form;
|
||||
upload = layui.upload;
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#poster_list',
|
||||
url: ns.url("giftcard://shop/cardimport/lists",{'giftcard_id': giftcard_id}),
|
||||
cols: [
|
||||
[
|
||||
{
|
||||
field:'type_name',
|
||||
title: '制卡类型',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
}, {
|
||||
field: 'total_count',
|
||||
unresize: 'false',
|
||||
title: '在线/导入制卡数',
|
||||
width: '10%',
|
||||
}, {
|
||||
field: 'success_count',
|
||||
unresize: 'false',
|
||||
title: '成功制卡数',
|
||||
width: '10%',
|
||||
}, {
|
||||
field: 'fail_count',
|
||||
unresize: 'false',
|
||||
title: '导入失败数',
|
||||
width: '10%'
|
||||
},
|
||||
{
|
||||
field: 'use_count',
|
||||
unresize: 'false',
|
||||
title: '使用数',
|
||||
width: '10%',
|
||||
}, {
|
||||
field: 'activate_count',
|
||||
unresize: 'false',
|
||||
title: '激活数',
|
||||
width: '10%',
|
||||
}, {
|
||||
field: 'create_time',
|
||||
title: '制卡时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'export':
|
||||
exportFn(data.import_id);
|
||||
break;
|
||||
case 'delete':
|
||||
del(data.import_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 导出
|
||||
*/
|
||||
function exportFn(id) {
|
||||
window.open(ns.url("giftcard://shop/cardimport/export",{ request_mode: 'download',import_id: id}));
|
||||
}
|
||||
|
||||
// 删除
|
||||
function del(id){
|
||||
layer.confirm('您正在执行删除操作,请谨慎处理', {
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
},function (index) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/cardimport/delete"),
|
||||
data: {
|
||||
import_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
}, function(index){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 添加卡密
|
||||
var interval;
|
||||
var formData = new FormData();
|
||||
var cardPup;
|
||||
function addCard(){
|
||||
laytpl($("#iog_card_cdk").html()).render({}, function (html) {
|
||||
cardPup = layer.open({
|
||||
type: 1,
|
||||
title:"添加卡密",
|
||||
area:['700px','400px'],
|
||||
content: html,
|
||||
success: function(layero, index){
|
||||
form.render();
|
||||
|
||||
// 上传文件
|
||||
var uploadInst = upload.render({
|
||||
elem: '#addFile' //绑定元素
|
||||
,url: ns.url("giftcard://shop/cardimport/create") //上传接口
|
||||
,accept:'file'
|
||||
,acceptMime: '.csv'
|
||||
,exts: 'csv'
|
||||
,auto: false
|
||||
,bindAction: ".iog-card-cdk .confirm-import"
|
||||
,data:{
|
||||
type: 'import',
|
||||
giftcard_id
|
||||
},
|
||||
choose:function(obj){
|
||||
//预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
|
||||
obj.preview(function(index, file, result){
|
||||
$("#addFile .upload").html(file.name);
|
||||
formData.append('file',file);
|
||||
});
|
||||
},
|
||||
done: function(res){
|
||||
if (res.code >= 0) {
|
||||
importing(res.data,'import');
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
form.on('radio(validityType)', function(data){
|
||||
if(data.value == 'auto'){
|
||||
$(".iog-card-cdk .confirm-import").addClass("layui-hide");
|
||||
$(".iog-card-cdk .confirm-auto").removeClass("layui-hide");
|
||||
}else{
|
||||
$(".iog-card-cdk .confirm-import").removeClass("layui-hide");
|
||||
$(".iog-card-cdk .confirm-auto").addClass("layui-hide");
|
||||
}
|
||||
$(data.elem).parent(".add-way-item").siblings().find(".sub-text").addClass("disabled-click");
|
||||
$(data.elem).parent(".add-way-item").find(".sub-text").removeClass("disabled-click");
|
||||
});
|
||||
|
||||
$(".iog-card-cdk .confirm-auto").click(()=>{
|
||||
var obj = {};
|
||||
obj.type = $(".iog-card-cdk input[name='type']:checked").val();
|
||||
obj.giftcard_id = giftcard_id;
|
||||
|
||||
var num = $(".iog-card-cdk input[name='num']").val();
|
||||
if(obj.type == 'auto')
|
||||
obj.num = num;
|
||||
else if(obj.type == 'import')
|
||||
return false;
|
||||
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("giftcard://shop/cardimport/create"),
|
||||
data: obj,
|
||||
success: function (res) {
|
||||
repeat_flag = false;
|
||||
if (res.code >= 0) {
|
||||
importing(res.data);
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
$(".iog-card-cdk .form-row .cancel").click(function(){
|
||||
layer.closeAll();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function importing(data) {
|
||||
loadAnimation();
|
||||
cdkLog(data);
|
||||
getCardImportInfo(data);
|
||||
interval = setInterval(()=>{
|
||||
getCardImportInfo(data);
|
||||
},1000);
|
||||
}
|
||||
|
||||
function cdkLog(id) {
|
||||
formData.append('import_id',id);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("giftcard://shop/cardimport/cdkLog"),
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType:false,
|
||||
success: function (res) {}
|
||||
});
|
||||
}
|
||||
|
||||
function getCardImportInfo(id) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("giftcard://shop/cardimport/getCardImportInfo"),
|
||||
data: {import_id:id},
|
||||
success: function (res) {
|
||||
if(res.code >= 0){
|
||||
var data = res.data;
|
||||
var num = ((parseInt(data.imported_count)/parseInt(data.total_count))*100).toFixed(2);
|
||||
if(num >= 100) num = 100;
|
||||
progress(num);
|
||||
if(parseInt(data.imported_count) == parseInt(data.total_count)){
|
||||
clearInterval(interval);
|
||||
layer.msg("制卡成功");
|
||||
formData.delete('import_id');
|
||||
formData.delete('file');
|
||||
setTimeout(()=>{
|
||||
closeProgress();
|
||||
layer.close(cardPup);
|
||||
table.reload();
|
||||
},1000)
|
||||
}
|
||||
}else
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function loadAnimation(){
|
||||
var html = `
|
||||
<div class="load-animation">
|
||||
<div class="load-head">正在添加</div>
|
||||
<div class="load-body">
|
||||
<div>卡密正在添加中,请稍等...</div>
|
||||
<div class="animation-outer">
|
||||
<span class="num">0.00%</span>
|
||||
<div class="animation-within"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
$("body").append(html);
|
||||
}
|
||||
function progress(num) {
|
||||
$(".load-animation .animation-within").css("width",num+'%');
|
||||
$(".load-animation .num").html(num+'%');
|
||||
}
|
||||
function closeProgress() {
|
||||
$(".load-animation").remove();
|
||||
}
|
||||
</script>
|
||||
130
addon/giftcard/shop/view/category/add.html
Executable file
130
addon/giftcard/shop/view/category/add.html
Executable file
@@ -0,0 +1,130 @@
|
||||
<style>
|
||||
.colorSelector{
|
||||
position: relative;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #d7d7d7;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
padding: 2px;
|
||||
}
|
||||
.colorSelector div{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.flexbox-fix-btn .btn{
|
||||
margin-top: 0;
|
||||
line-height: 1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form ns-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>分组名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="category_name" type="text" lay-verify="required" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>排序:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="sort" type="number" lay-verify="num" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>分组颜色:</label>
|
||||
<div class="layui-input-block flex">
|
||||
<div class="flex_fill">
|
||||
<div class="picker colorSelector" id="color-picker">
|
||||
<div data-value="#333"></div>
|
||||
</div>
|
||||
</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="backGiftCardCategoryList()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="__STATIC__/ext/colorPicker/js/colorpicker.js"></script>
|
||||
<script>
|
||||
var form,repeat_flag = false;//防重复标识
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
Colorpicker.create({
|
||||
el: "color-picker",
|
||||
color: "#333",
|
||||
change: function (elem, hex) {
|
||||
$('#color-picker').attr('data-value', hex);
|
||||
$('#color-picker div').css('background', hex);
|
||||
}
|
||||
});
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
num: function(value) {
|
||||
if(!new RegExp("^-?[1-9]\\d*$").test(value)){
|
||||
return "排序号只能是大于0的整数";
|
||||
}
|
||||
if(value < 0){
|
||||
return "排序号必须大于0";
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听保存
|
||||
*/
|
||||
form.on('submit(save)', function(data) {
|
||||
data.field.font_color = $('#color-picker').attr('data-value');
|
||||
|
||||
if(repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/category/add"),
|
||||
data: data.field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //http请求类型
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.confirm('添加成功', {
|
||||
title:'操作提示',
|
||||
btn: ['返回列表', '继续添加'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("giftcard://shop/category/lists")
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// 返回
|
||||
function backGiftCardCategoryList() {
|
||||
location.hash = ns.hash("giftcard://shop/category/lists");
|
||||
}
|
||||
</script>
|
||||
149
addon/giftcard/shop/view/category/edit.html
Executable file
149
addon/giftcard/shop/view/category/edit.html
Executable file
@@ -0,0 +1,149 @@
|
||||
<style>
|
||||
.colorSelector{
|
||||
position: relative;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #d7d7d7;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
padding: 2px;
|
||||
}
|
||||
.colorSelector div{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.flexbox-fix-btn .btn{
|
||||
margin-top: 0;
|
||||
line-height: 1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form ns-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>分组名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="category_name" type="text" lay-verify="required" class="layui-input len-mid" value="{$detail.category_name}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>排序:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="sort" type="number" lay-verify="num" class="layui-input len-mid" value="{$detail.sort}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>分组颜色:</label>
|
||||
<div class="layui-input-block flex">
|
||||
<div class="flex_fill">
|
||||
<div class="picker colorSelector" id="color-picker">
|
||||
<div data-value="{$detail.font_color}"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="category_id" value="{$detail.category_id}">
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backGiftCardCategoryList()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--素材图片列表-->
|
||||
<script type="text/html" id="mediaImage">
|
||||
{{# if(d.list.length){ }}
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="item upload_img_square_item" data-index="{{i}}">
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i])}}" layer-src="{{ns.img(d.list[i])}}">
|
||||
</div>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" data-index="{{i}}"></i>
|
||||
<div class="replace_img" data-index="{{i}}">点击替换</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.list.length < d.max){ }}
|
||||
<div class="item js-add-media-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
{{# }else{ }}
|
||||
<div class="item js-add-media-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/javascript" src="__STATIC__/ext/colorPicker/js/colorpicker.js"></script>
|
||||
<script>
|
||||
var form,repeat_flag = false; //防重复标识
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
Colorpicker.create({
|
||||
el: "color-picker",
|
||||
color: "#333",
|
||||
change: function (elem, hex) {
|
||||
$('#color-picker').attr('data-value', hex);
|
||||
$('#color-picker div').css('background', hex);
|
||||
}
|
||||
});
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
num: function(value) {
|
||||
if(!new RegExp("^-?[1-9]\\d*$").test(value)){
|
||||
return "排序号只能是大于0的整数";
|
||||
}
|
||||
if(value < 0){
|
||||
return "排序号必须大于0";
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听保存
|
||||
*/
|
||||
form.on('submit(save)', function(data) {
|
||||
data.field.font_color = $('#color-picker').attr('data-value');
|
||||
|
||||
if(repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/category/edit"),
|
||||
data: data.field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //http请求类型
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.confirm('编辑成功', {
|
||||
title:'操作提示',
|
||||
btn: ['返回列表'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("giftcard://shop/category/lists")
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function backGiftCardCategoryList() {
|
||||
location.hash = ns.hash("giftcard://shop/category/lists");
|
||||
}
|
||||
</script>
|
||||
189
addon/giftcard/shop/view/category/lists.html
Executable file
189
addon/giftcard/shop/view/category/lists.html
Executable file
@@ -0,0 +1,189 @@
|
||||
<style>
|
||||
.len-short{width: 70px !important;}
|
||||
</style>
|
||||
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加分组</button>
|
||||
</div>
|
||||
<div class="screen layui-collapse" lay-filter="category_tab">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">分组名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入分组名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button type="button" class="layui-btn" lay-filter="search" lay-submit>筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="category_tab">
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="list" lay-filter="list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 编辑排序 -->
|
||||
<script type="text/html" id="editSort">
|
||||
<input name="sort" type="number" onchange="modifySort({{d.category_id}}, this)" value="{{d.sort}}" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table ,form, laytpl,layer_label, element;
|
||||
var repeat_flag = false; //防重复标识
|
||||
|
||||
layui.use(['form', 'laytpl','element',], function () {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#list',
|
||||
url: ns.url("giftcard://shop/category/lists"),
|
||||
cols: [
|
||||
[{
|
||||
field: 'category_name',
|
||||
title: '分组名称',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
}, {
|
||||
field: 'font_color',
|
||||
unresize: 'false',
|
||||
title: '分组颜色',
|
||||
templet: function (data) {
|
||||
return '<span style="color:'+data.font_color+'">'+data.font_color+'</span>'
|
||||
},
|
||||
}, {
|
||||
field: 'sort',
|
||||
unresize: 'false',
|
||||
title: '排序',
|
||||
templet: '#editSort',
|
||||
sort : true,
|
||||
width: '15%',
|
||||
}, {
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
unresize: 'false',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit':
|
||||
location.hash = ns.hash("giftcard://shop/category/edit", {'category_id': data.category_id});
|
||||
break;
|
||||
case 'delete':
|
||||
del(data.category_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听搜索
|
||||
*/
|
||||
form.on('submit(search)', function(data){
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
function del(id){
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.confirm('您正在执行删除操作,请谨慎处理', {
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
},function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/category/delete"),
|
||||
data: {
|
||||
category_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function(index){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 监听单元格编辑
|
||||
function modifySort(id, event) {
|
||||
var data = $(event).val();
|
||||
if (!new RegExp("^-?[1-9]\\d*$").test(data)) {
|
||||
layer.msg("排序号只能是整数");
|
||||
return;
|
||||
}
|
||||
if(data<0){
|
||||
layer.msg("排序号必须大于0");
|
||||
return ;
|
||||
}
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("giftcard://shop/category/modifySort"),
|
||||
data: {
|
||||
sort: data,
|
||||
category_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("giftcard://shop/category/add");
|
||||
}
|
||||
|
||||
</script>
|
||||
732
addon/giftcard/shop/view/giftcard/add.html
Executable file
732
addon/giftcard/shop/view/giftcard/add.html
Executable file
@@ -0,0 +1,732 @@
|
||||
|
||||
<style>
|
||||
.hide{display: none;}
|
||||
.goods_num {padding-left: 20px;}
|
||||
.goods-image-wrap .js-goods-image{margin-bottom: 0;line-height: 1;display: flex}
|
||||
.card-common .goods-image-wrap .item{width: 185px;height: 119.7px;line-height: 119.7px;margin-top: 5px;margin-bottom: 5px;float: unset}
|
||||
.card-common .goods-image-wrap .item .img-wrap{width: 100%;height: 100%;}
|
||||
.card-common .goods-image-wrap .item .img-wrap img{max-height: 100%;max-width: 100%;width: auto;height: auto;display: flex;align-items: center;justify-content: center;}
|
||||
.card-common .goods-image-wrap .item .operation{width: 100%;height: 100%;line-height: 5;}
|
||||
.layui-table .goods-title{display: flex;align-items: center;}
|
||||
.layui-table .goods-title .goods-img{width: 55px;height: 55px;line-height: 55px;flex-shrink: 0;margin-right: 10px;}
|
||||
.layui-table .goods-title .goods-img img{max-width: 100%;max-height: 100%;}
|
||||
#real-goods .layui-table{margin-bottom: 0;margin-top: 0;}
|
||||
#real-goods #goods{border: 0;}
|
||||
#real-goods .layui-table-body{overflow: auto;max-height: 500px;margin-bottom: 15px;border-bottom: 1px solid #e6e6e6;}
|
||||
#real-goods .layui-table-body tbody tr:last-of-type td{border: none;}
|
||||
.layui-table-head tr th:last-of-type{text-align: right;}
|
||||
.layui-table-body tr td:last-of-type .table-btn{justify-content: flex-end;}
|
||||
.disabled-click{pointer-events: none;color: #999 !important;}
|
||||
.period-validity .layui-input-block>div{margin: 8px 0;display: flex;align-items: center;}
|
||||
.period-validity .layui-input-block>div .layui-input-inline{margin: 0 8px;}
|
||||
.period-validity .layui-input-block .layui-form-radio{margin-right: 0;padding-right: 0;}
|
||||
.layui-input-inline.totality-num{float: none;}
|
||||
.commodity-type-box{display: flex;}
|
||||
.commodity-type-item{
|
||||
margin-right: 15px;
|
||||
padding: 15px 20px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
border: 1px solid #e5e5e5;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="layui-form">
|
||||
<!-- 礼品卡类型 -->
|
||||
<div class="layui-tab layui-tab-brief" lay-filter="goods_tab">
|
||||
<div class="layui-tab-content">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">礼品卡类型</span>
|
||||
</div>
|
||||
<div class="layui-card-body commodity-type-box" >
|
||||
<div class="commodity-type-item {if $card_type == 'virtual'}border-color{/if}" onclick="location.hash = ns.hash('giftcard://shop/giftcard/add?card_type=virtual')">
|
||||
<span class="{if $card_type == 'virtual'}text-color{/if}">电子卡</span>
|
||||
<span class="text-color-gray">(线上购买)</span>
|
||||
</div>
|
||||
<div class="commodity-type-item {if $card_type == 'real'}border-color{/if}" onclick="location.hash = ns.hash('giftcard://shop/giftcard/add?card_type=real')">
|
||||
<span class="{if $card_type == 'real'}text-color{/if}">实体卡</span>
|
||||
<span class="text-color-gray">(线下发放)</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card card-common card-brief">
|
||||
<input name="card_type" value="{$card_type}" type="hidden">
|
||||
<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"><span class="required">*</span>礼品卡名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="card_name" value="" lay-verify="required" autocomplete="off" class="layui-input len-long" maxlength="40">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>分组:</label>
|
||||
<div class="layui-input-inline len-mid">
|
||||
<select class="category_id" name="category_id" lay-verify="required" lay-filter="categoryId">
|
||||
<option value="">请选择</option>
|
||||
{foreach $category_list as $k=>$v}
|
||||
<option value="{$v['category_id']}">{$v['category_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div id="card-cover" class="layui-form-item goods-image-wrap">
|
||||
<label class="layui-form-label"><span class="required">*</span>礼品卡封面:</label>
|
||||
<div class="layui-input-block">
|
||||
<!--素材图片-->
|
||||
<div class="js-goods-image"></div>
|
||||
</div>
|
||||
<div class="word-aux">至少传一张封面,最多上传3张封面</div>
|
||||
</div>
|
||||
{if $card_type == 'virtual'}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">销售价:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="card_price" onchange="detectionNumType(this,'positiveNumber')" class="layui-input len-short integral" autocomplete="off" value="0.00">
|
||||
</div>
|
||||
<div class="layui-form-mid">元</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" min="0" name="sort" value="0" lay-verify='sort' onchange="detectionNumType(this,'integral')" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
</div>
|
||||
{if $card_type == 'virtual'}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否允许转赠:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_allow_transfer" value="1" lay-verify="required" title="是" checked>
|
||||
<input type="radio" name="is_allow_transfer" value="0" lay-verify="required" title="否">
|
||||
</div>
|
||||
<div class="word-aux">转赠开启后,用户可以将自己的礼品卡作为礼包赠送给其他用户</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{if $card_type == 'real'}
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">制卡规则</span>
|
||||
</div>
|
||||
<div class="layui-card-body ">
|
||||
|
||||
<div class="layui-form-item participation-condition">
|
||||
<label class="layui-form-label"><span class="required">*</span>秘钥内容:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" class="cdk_type" name="cdk_type[]" value="0-9" lay-skin="primary" title="0-9" checked>
|
||||
<input type="checkbox" class="cdk_type" name="cdk_type[]" value="a-z" lay-skin="primary" title="a-z">
|
||||
<input type="checkbox" class="cdk_type" name="cdk_type[]" value="A-Z" lay-skin="primary" title="A-Z">
|
||||
</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" min="4" name="cdk_length" lay-verify="required|cdk_length" onchange="detectionNumType(this,'integral')" class="layui-input len-short" autocomplete="off" value="6">
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
卡密位数仅限制卡密内容长度
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">卡号前缀:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="card_prefix" value="" 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="text" name="card_suffix" value="" autocomplete="off" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<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"><span class="required">*</span>权益类型:</label>
|
||||
<div class="layui-input-block">
|
||||
{foreach $card_right_type_list as $k=>$v}
|
||||
<input type="radio" name="card_right_type" value="{$k}" lay-verify="required" lay-filter="cardRightType" title="{$v}" {if $k=='balance' }checked{/if}>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
<!--储值-->
|
||||
<div id="real-balance" class="layui-show">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">储值余额:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="balance" onchange="detectionNumType(this,'positiveNumber')" class="layui-input len-short" autocomplete="off" value="0">
|
||||
</div>
|
||||
<div class="layui-form-mid">元</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--商品-->
|
||||
<div id="real-goods" class="layui-hide">
|
||||
<!--数量类型选择-->
|
||||
<div class="layui-form-item goods-number">
|
||||
<label class="layui-form-label"><span class="required">*</span>礼品卡中商品选赠规则:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="card_right_goods_type" value="item" lay-verify="required" lay-filter="cardTightGoodsType" title="礼品卡由下列商品及其数量打包而成" checked>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods-number">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="card_right_goods_type" value="all" lay-verify="required" lay-filter="cardTightGoodsType" title="礼品卡持卡人兑换时可从以下商品列表中任选N件商品">
|
||||
<div class="layui-input-inline totality-num">
|
||||
<input type="number" min="0" disabled name="card_right_goods_count" onchange="detectionNumType(this,'integral')" class="layui-input len-short" autocomplete="off" value="0">
|
||||
</div>
|
||||
<span class="sub-text totality-num disabled-click">件</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-table-head">
|
||||
<table class="layui-table show" lay-skin="line" lay-size="lg">
|
||||
<colgroup>
|
||||
<col width="45%">
|
||||
<col width="15%">
|
||||
<col class="goods_num_col" width="15%">
|
||||
<col width="15%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>商品名称</th>
|
||||
<th>原价</th>
|
||||
<th class="goods_num_col">数量</th>
|
||||
<th class="operation">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
<div class="layui-table-body">
|
||||
<table class="layui-table show" id="goods" lay-skin="line" lay-size="lg">
|
||||
<colgroup>
|
||||
<col width="45%">
|
||||
<col width="15%">
|
||||
<col class="goods_num_col" width="15%">
|
||||
<col width="15%">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr class="goods-empty">
|
||||
<td colspan="4">
|
||||
<div>未添加商品</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<button class="layui-btn" onclick="addGoods()">添加商品</button>
|
||||
<span class="goods_num">已选商品(<span id="goods_num" class="text-color">0</span>)</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">有效期</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item period-validity">
|
||||
<label class="layui-form-label"><span class="required">*</span>有效期:</label>
|
||||
<div class="layui-input-block">
|
||||
<div>
|
||||
<input type="radio" name="validity_type" value="forever" lay-filter="validityType" checked>
|
||||
<span class="sub-text">永久有效</span>
|
||||
</div>
|
||||
<div>
|
||||
<input type="radio" name="validity_type" value="date" lay-filter="validityType">
|
||||
<span class="sub-text disabled-click">有效期至</span>
|
||||
<div class="layui-input-inline" style="float: none">
|
||||
<input type="text" class="layui-input sub-text disabled-click" name="validity_time" lay-verify="time" placeholder="有效期限" id="start_time" readonly>
|
||||
<i class="iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<input type="radio" name="validity_type" value="day" lay-filter="validityType">
|
||||
<span class="sub-text disabled-click">领取后</span>
|
||||
<div class="layui-input-inline" style="float: none">
|
||||
<input type="number" min="0" name="validity_day" onchange="detectionNumType(this,'integral')" autocomplete="off" class="layui-input len-short sub-text disabled-click" value="0" lay-verify='time_day' readonly>
|
||||
</div>
|
||||
<span class="sub-text disabled-click">天有效</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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"><span class="required"></span>使用须知:</label>
|
||||
<div class="layui-input-block">
|
||||
<script id="instruction" type="text/plain" style="width:800px;height:400px;"></script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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"><span class="required"></span>详情:</label>
|
||||
<div class="layui-input-block">
|
||||
<script id="editor" type="text/plain" style="width:800px;height:400px;"></script>
|
||||
</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="backGiftCardList()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--素材图片列表-->
|
||||
<script type="text/html" id="mediaImage">
|
||||
{{# if(d.list.length){ }}
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="item upload_img_square_item" data-index="{{i}}">
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i])}}" layer-src="{{ns.img(d.list[i])}}">
|
||||
</div>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" data-index="{{i}}"></i>
|
||||
<div class="replace_img" data-index="{{i}}">点击替换</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.list.length < d.max){ }}
|
||||
<div class="item js-add-media-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
{{# }else{ }}
|
||||
<div class="item js-add-media-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.config.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.all.js"> </script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script type="text/javascript" src="GIFTCARD_JS/media.js"></script>
|
||||
<script>
|
||||
var form,laytpl,laydate,
|
||||
repeat_flag = false,
|
||||
selectGoodsSkuId = [],
|
||||
selectGoodsId = [],
|
||||
num_list = [],
|
||||
goods = [],
|
||||
currentDate = new Date(),
|
||||
mediaImage = [],
|
||||
mediaIds = [],
|
||||
activityInstruction,
|
||||
activityDetail;
|
||||
|
||||
var GOODS_IMAGE_MAX = 3; //素材上传数量
|
||||
|
||||
var default_instruction = `1. 礼品卡有效期为购买日起三年内有效,过期失效,请在有效期内使用。<br>2. 本卡可在指定门店,可以本人使用,或者转赠他人,本卡仅限于店铺或者外带时消费使用,不适用于会员卡购买或者充值。<br>3. 本卡不记名、不挂失、不可兑换现金、不找零。可多次使用。<br>4. 如有疑问请拨打:`;
|
||||
|
||||
layui.use(['form', 'laytpl', 'laydate'], function() {
|
||||
laydate = layui.laydate;
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
refreshGoodsImage();
|
||||
|
||||
activityDetail = UE.getEditor('editor', {
|
||||
autoHeightEnabled: false
|
||||
});
|
||||
activityInstruction = UE.getEditor('instruction', {
|
||||
autoHeightEnabled: false
|
||||
});
|
||||
|
||||
currentDate.setDate(currentDate.getDate() + 30);
|
||||
form.render();
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime',
|
||||
change: function(value, date, endDate) {
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
}
|
||||
});
|
||||
|
||||
//权益类型
|
||||
form.on('radio(cardRightType)', function(data) {
|
||||
if (data.value.trim() == 'balance') {
|
||||
$('#real-balance').removeClass('layui-hide').addClass('layui-show');
|
||||
$('#real-goods').removeClass('layui-show').addClass('layui-hide');
|
||||
$('.goods_num_col').find('input').attr('lay-verify','required');
|
||||
} else if (data.value.trim() == 'goods') {
|
||||
$('#real-goods').removeClass('layui-hide').addClass('layui-show');
|
||||
$('#real-balance').removeClass('layui-show').addClass('layui-hide');
|
||||
$('input[name="balance"]').val(0);
|
||||
$('.goods_num_col').find('input').attr('lay-verify','required|number');
|
||||
}
|
||||
});
|
||||
|
||||
//有效期
|
||||
form.on('radio(validityType)', function(data) {
|
||||
$(data.elem).parent("div").siblings().find(".sub-text").addClass("disabled-click");
|
||||
$(data.elem).parent("div").find(".sub-text").removeClass("disabled-click");
|
||||
if (data.value.trim() == 'forever') {
|
||||
$('input[name="validity_day"]').val('').attr('readonly', 'readonly');
|
||||
$('input[name="validity_time"]').val('');
|
||||
} else if (data.value.trim() == 'date') {
|
||||
$('input[name="validity_day"]').val('').attr('readonly', 'readonly');
|
||||
} else if (data.value.trim() == 'day') {
|
||||
$('input[name="validity_day"]').removeAttr('readonly');
|
||||
$('input[name="validity_time"]').val('');
|
||||
}
|
||||
});
|
||||
|
||||
//商品数量类型
|
||||
form.on('radio(cardTightGoodsType)', function(data) {
|
||||
if (data.value.trim() == 'all') {
|
||||
$(".goods-number .word-aux").addClass("layui-hide");
|
||||
$('.goods_num_col').removeClass('show').addClass('hide');
|
||||
$('.goods_num_col').find('input').attr('lay-verify','required');
|
||||
|
||||
$(".totality-num input").attr("disabled", false);
|
||||
$(".totality-num input").attr('lay-verify','required|number');
|
||||
$(".totality-num").removeClass('disabled-click');
|
||||
|
||||
} else if (data.value.trim() == 'item') {
|
||||
$(".goods-number .word-aux").removeClass("layui-hide");
|
||||
$(".totality-num input").attr("disabled", true);
|
||||
$(".totality-num").addClass('disabled-click');
|
||||
$(".totality-num input").attr('lay-verify','');
|
||||
$('input[name="card_right_goods_count"]').val(0);
|
||||
$('.goods_num_col').removeClass('hide').addClass('show');
|
||||
$('.goods_num_col').find('input').attr('lay-verify','required|number');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交
|
||||
*/
|
||||
form.on('submit(save)', function(data) {
|
||||
if (mediaImage.length < 1) {
|
||||
layer.msg("至少选择一个礼品封面");
|
||||
return false;
|
||||
}
|
||||
data.field.media_ids = mediaIds.toString();
|
||||
data.field.card_cover = mediaImage.toString();
|
||||
|
||||
if (data.field.card_right_type == 'goods') {
|
||||
goods = [];
|
||||
var num_list = [];
|
||||
$(".goods_num").each(function() {
|
||||
// 商品按数量
|
||||
if (data.field.card_right_goods_type == 'all') {
|
||||
num_list.push(0);
|
||||
} else {
|
||||
num_list.push($(this).val());
|
||||
}
|
||||
});
|
||||
|
||||
for (var i = 0; i < selectGoodsSkuId.length; i++) {
|
||||
var obj = {};
|
||||
obj.sku_id = selectGoodsSkuId[i];
|
||||
obj.goods_id = selectGoodsId[i];
|
||||
obj.goods_num = num_list[i];
|
||||
goods.push(obj)
|
||||
}
|
||||
data.field.goods_sku_list = JSON.stringify(goods);
|
||||
if (goods.length == 0) {
|
||||
layer.msg("请选择商品");
|
||||
return;
|
||||
}
|
||||
}else{
|
||||
data.field.goods_sku_list = '';
|
||||
if (data.field.balance == 0) {
|
||||
layer.msg("请输入储值余额");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(data.field.card_type == 'real'){
|
||||
if(data.field['cdk_type[0]'] == undefined && data.field['cdk_type[1]'] == undefined && data.field['cdk_type[2]'] == undefined){
|
||||
layer.msg("卡密内容不能为空");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
data.field.desc = activityDetail.getContent();
|
||||
data.field.instruction = activityInstruction.getContent();
|
||||
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("giftcard://shop/giftcard/add"),
|
||||
data: data.field,
|
||||
async: false,
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
layer.confirm('添加成功', {
|
||||
title: '操作提示',
|
||||
btn: ['返回列表', '继续添加'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/lists");
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
//表单验证
|
||||
form.verify({
|
||||
number: function(value) {
|
||||
if (value <= 0) {
|
||||
return "数量不能小于或等于0"
|
||||
}
|
||||
},
|
||||
sort: function(value) {
|
||||
if (value < 0) {
|
||||
return "排序不能小于0"
|
||||
}
|
||||
},
|
||||
nums: function(value) {
|
||||
if (value < 10) {
|
||||
return "请输入大于10的数"
|
||||
}
|
||||
},
|
||||
time: function(value) {
|
||||
var time_type = $('[name="time_type"]:checked').val();
|
||||
if (time_type == 2) {
|
||||
var now_time = (new Date()).getTime();
|
||||
var end_time = (new Date(value)).getTime();
|
||||
if (!end_time) {
|
||||
return '有效期不能为空'
|
||||
}
|
||||
if (now_time > end_time) {
|
||||
return '有效期不能小于当前时间!'
|
||||
}
|
||||
}
|
||||
},
|
||||
time_day: function(value) {
|
||||
var time_type = $('[name="time_type"]:checked').val();
|
||||
if (time_type == 3) {
|
||||
if (value <= 0) {
|
||||
return '有效期天数至少为一天!'
|
||||
}
|
||||
}
|
||||
},
|
||||
cdk_length: function(value) {
|
||||
if (value <= 0) {
|
||||
return "密钥位数不能小于或等于0"
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
//添加素材
|
||||
$("body").off("click", ".js-add-media-image").on("click", ".js-add-media-image", function() {
|
||||
openMedia(function(data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (mediaImage.length < GOODS_IMAGE_MAX) {
|
||||
mediaImage.push(data[i].media_path);
|
||||
mediaIds.push(data[i].media_id);
|
||||
}
|
||||
}
|
||||
refreshGoodsImage();
|
||||
}, GOODS_IMAGE_MAX - mediaImage.length);
|
||||
});
|
||||
|
||||
//替换商品主图
|
||||
$("body").off("click", ".replace_img").on("click", ".replace_img", function () {
|
||||
var index = $(this).data('index');
|
||||
openMedia(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
mediaImage[index] = data[i].media_path;
|
||||
mediaIds[index] = data[i].media_id;
|
||||
}
|
||||
refreshGoodsImage();
|
||||
},1);
|
||||
});
|
||||
|
||||
//渲染商品主图列表
|
||||
function refreshGoodsImage() {
|
||||
var goods_image_template = $("#mediaImage").html();
|
||||
var data = {
|
||||
list: mediaImage,
|
||||
max: GOODS_IMAGE_MAX
|
||||
};
|
||||
|
||||
laytpl(goods_image_template).render(data, function(html) {
|
||||
|
||||
$(".js-goods-image").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (mediaImage.length) {
|
||||
|
||||
//预览
|
||||
$(".js-goods-image .js-preview").click(function() {
|
||||
$(this).parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".js-goods-image .js-delete").click(function() {
|
||||
var index = $(this).attr("data-index");
|
||||
mediaImage.splice(index, 1);
|
||||
mediaIds.splice(index, 1);
|
||||
refreshGoodsImage();
|
||||
});
|
||||
}
|
||||
|
||||
//最多传十张图
|
||||
if (mediaImage.length < GOODS_IMAGE_MAX) {
|
||||
$(".js-add-goods-image").show();
|
||||
} else {
|
||||
$(".js-add-goods-image").hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function backGiftCardList() {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/lists");
|
||||
}
|
||||
|
||||
//检测数据类型
|
||||
function detectionNumType(el, type) {
|
||||
var value = $(el).val();
|
||||
//大于零 且 不是小数
|
||||
if (value < 0 && type == 'integral')
|
||||
$(el).val(0);
|
||||
else if (type == 'integral')
|
||||
$(el).val(Math.round(value));
|
||||
|
||||
//大于1 且 不是小数
|
||||
if (value < 1 && type == 'positiveInteger')
|
||||
$(el).val(1);
|
||||
else if (type == 'positiveInteger')
|
||||
$(el).val(Math.round(value));
|
||||
//大于零可以是小数
|
||||
if (type == 'positiveNumber') {
|
||||
value = parseFloat(value).toFixed(2);
|
||||
if (value < 0)
|
||||
$(el).val(0);
|
||||
else
|
||||
$(el).val(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品
|
||||
*/
|
||||
function addGoods() {
|
||||
goodsSelect(function (data) {
|
||||
if (Object.keys(data).length == 0) {
|
||||
selectGoodsSkuId = [];
|
||||
selectGoodsId = [];
|
||||
$('.goods-empty').show();
|
||||
$("#goods_num").text(selectGoodsSkuId.length);
|
||||
$("#goods tbody tr:not(.goods-empty)").remove();
|
||||
return;
|
||||
}
|
||||
|
||||
var price = 0.00;
|
||||
var card_right_goods_type_change = $('input[name="card_right_goods_type"]:checked').val();
|
||||
|
||||
var th_display = card_right_goods_type_change == 'item' ? 'show' : 'hide';
|
||||
if (th_display == 'show') {
|
||||
$('.goods_num_col').removeClass('hide').addClass('show');
|
||||
} else {
|
||||
$('.goods_num_col').removeClass('show').addClass('hide');
|
||||
}
|
||||
|
||||
var html = '';
|
||||
|
||||
for (var key in data) {
|
||||
for (var sku in data[key].selected_sku_list) {
|
||||
var item = data[key].selected_sku_list[sku];
|
||||
if (selectGoodsSkuId.indexOf(parseInt(item.sku_id)) != -1) {
|
||||
continue;
|
||||
}
|
||||
html += `<tr data-sku_id="${item.sku_id}" data-goods_id="${item.goods_id}">`;
|
||||
html += `
|
||||
<td>
|
||||
<div class="goods-title">
|
||||
<div class="goods-img">
|
||||
<img layer-src src="${item.sku_image ? ns.img(item.sku_image) : ''}" alt="">
|
||||
</div>
|
||||
<p class="multi-line-hiding goods-name">${item.sku_name}</p>
|
||||
</div>
|
||||
</td>`;
|
||||
html += `<td class='price-one'>${item.price}</td>`;
|
||||
html += `<td class="goods_num_col ` + th_display +
|
||||
`"><input type="number" name="" min="1" onchange="detectionNumType(this,'integral')" lay-verify="required|number" class="layui-input goods_num" value='1'></td>`;
|
||||
html +=
|
||||
`<td class='operation'> <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='deleteGoods(this)'>删除商品</a></div></td>`;
|
||||
html += `</tr>`;
|
||||
price += Number(item.price);
|
||||
selectGoodsSkuId.push(item.sku_id);
|
||||
selectGoodsId.push(item.goods_id);
|
||||
}
|
||||
}
|
||||
|
||||
if(selectGoodsSkuId.length) {
|
||||
$('.goods-empty').hide();
|
||||
$("#goods tbody").append(html);
|
||||
} else {
|
||||
$('.goods-empty').show();
|
||||
}
|
||||
$("#goods_num").text(selectGoodsSkuId.length);
|
||||
|
||||
}, selectGoodsSkuId, {
|
||||
mode: "sku",
|
||||
goods_class: 1,
|
||||
is_disabled_goods_class: 1
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品
|
||||
*/
|
||||
function deleteGoods(data) {
|
||||
var obj = $(data).parent().parent().parent();
|
||||
$(obj).remove();
|
||||
for (var i in selectGoodsSkuId) {
|
||||
if (selectGoodsSkuId[i] == Number($(obj).attr("data-sku_id"))) {
|
||||
selectGoodsSkuId.splice(i, 1);
|
||||
num_list.splice(i, 1);
|
||||
}
|
||||
}
|
||||
$("#goods_num").text(selectGoodsSkuId.length)
|
||||
|
||||
if(selectGoodsSkuId.length) $('.goods-empty').hide();
|
||||
else $('.goods-empty').show();
|
||||
}
|
||||
</script>
|
||||
424
addon/giftcard/shop/view/giftcard/buy_order.html
Executable file
424
addon/giftcard/shop/view/giftcard/buy_order.html
Executable file
@@ -0,0 +1,424 @@
|
||||
<style>
|
||||
.rights_interests{line-height: 13px;}
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
|
||||
</style>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">订单号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="order_number" autocomplete="off" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">订单状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="status" id="">
|
||||
<option value="">请选择状态</option>
|
||||
<option value="0">待支付</option>
|
||||
<option value="1">已完成</option>
|
||||
<option value="2">已取消</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">订单来源</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="order_from">
|
||||
<option value="">全部</option>
|
||||
{foreach $order_from_list as $order_from_k => $order_from_v}
|
||||
<option value="{$order_from_k}">{$order_from_v['name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">付款方式</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="pay_type" >
|
||||
<option value="">全部</option>
|
||||
{foreach pay_type_list as $pay_type_k => $pay_type_v}
|
||||
<option value="{$pay_type_k}">{$pay_type_v}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</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="layui-form-item"></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="manjian_tab">
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="order_list" lay-filter="order_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="rights_interests">
|
||||
<div class=rights_interests>
|
||||
<p><span>积分:{{d.point}}</span></p><br>
|
||||
<p><span>余额:{{d.balance}}</span></p><br>
|
||||
<!-- <p><span>优惠卷:{{d.coupon_name}}</span></p>-->
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="order_status">
|
||||
<div>
|
||||
{{# if(d.status == 0){ }}待支付{{# }else if(d.status == 1){ }}已完成{{# }else{ }}已取消{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="poster_status">
|
||||
<div class='table-title'>
|
||||
{{# if(d.status == 0){ }}
|
||||
<div class='title-pic' style="text-align:left">未激活</div>
|
||||
{{# }else if(d.status == 1){ }}
|
||||
<div class='title-pic text-color' style="text-align:left">已激活</div>
|
||||
{{# }else if(d.status == 2){ }}
|
||||
<div class='title-pic' style="text-align:left">已作废</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
{{#if(d.type==1){ }}
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
{{# } }}
|
||||
{{# if(d.type==2){ }}
|
||||
<a class="layui-btn" lay-event="detail">兑换卡列表</a>
|
||||
{{# if(d.status==0){ }}
|
||||
<a class="layui-btn" lay-event="start">批量激活</a>
|
||||
<a class="layui-btn" lay-event="close">批量作废</a>
|
||||
{{# }else if(d.status==0 || d.status==1){ }}
|
||||
<a class="layui-btn" lay-event="close">批量作废</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn" lay-event="exportcard">导出</a>
|
||||
{{#} }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 电子卡编辑html -->
|
||||
<script type="text/html" id="label_change">
|
||||
<div class="layui-form member-form" id="reset_label" lay-filter="form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">数量:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="card_count" class="layui-input len-short" autocomplete="off" min="0">
|
||||
</div>
|
||||
</div>
|
||||
<input class="reset-label-id" type="hidden" name="card_id" value="{{d.id}}" />
|
||||
<div class="form-row sm">
|
||||
<button class="layui-btn" lay-submit lay-filter="setlabel">确定</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closeLabel()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl,layer_label,laydate;
|
||||
layui.use(['form', 'laytpl','laydate'], function () {
|
||||
var table, form = layui.form, repeat_flag = false; //防重复标识
|
||||
laydate = layui.laydate;
|
||||
laytpl = layui.laytpl;
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#order_list',
|
||||
url: ns.url("giftcard://shop/giftcard/order"),
|
||||
cols: [
|
||||
[{
|
||||
field: 'order_number',
|
||||
title: '订单编号',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
}, {
|
||||
field: 'card_name',
|
||||
title: '礼品卡名称',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
},
|
||||
{
|
||||
field: 'order_total_name',
|
||||
title: '下单会员',
|
||||
unresize: 'false',
|
||||
width: '7%',
|
||||
// templet: '#selling_price'
|
||||
},{
|
||||
field: 'card_price',
|
||||
title: '单价',
|
||||
unresize: 'false',
|
||||
width: '7%',
|
||||
},{
|
||||
field: 'num',
|
||||
title: '数量',
|
||||
unresize: 'false',
|
||||
width: '7%',
|
||||
},{
|
||||
field: 'order_total_price',
|
||||
title: '总价',
|
||||
unresize: 'false',
|
||||
width: '7%',
|
||||
// templet: '#selling_price'
|
||||
},{
|
||||
title: '下单时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
},{
|
||||
field: 'pay_time',
|
||||
title: '支付时间',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: function (data) {
|
||||
return data.pay_time? ns.time_to_date(data.pay_time):'---';
|
||||
}
|
||||
}, {
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: '#order_status'
|
||||
},
|
||||
// {
|
||||
// title: '操作',
|
||||
// toolbar: '#operation',
|
||||
// unresize: 'false',
|
||||
// align:'right'
|
||||
// }
|
||||
]
|
||||
],
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit':
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/editgiftcard?id="+data.id);
|
||||
break;
|
||||
case 'detail':
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/recordlist?id="+data.id);
|
||||
break;
|
||||
case 'close': //关闭
|
||||
close(data.id);
|
||||
break;
|
||||
case 'start': //启用
|
||||
start(data.id);
|
||||
break;
|
||||
case 'exportcard'://导出
|
||||
exportcard(data.id,data.code);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 关闭
|
||||
*/
|
||||
function close(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定作废吗?',{
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
}
|
||||
}, function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/editstatus"),
|
||||
data: {
|
||||
id: id, status: 2
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function(index){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启
|
||||
*/
|
||||
function start(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.confirm('确定激活吗?', {
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
},function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/editstatus"),
|
||||
data: {
|
||||
id: id, status: 1
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function(index){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
|
||||
function edit(data){
|
||||
laytpl($("#label_change").html()).render(data, function(html) {
|
||||
layer_label = layer.open({
|
||||
title: '编辑数量',
|
||||
skin: 'layer-tips-class',
|
||||
type: 1,
|
||||
area: ['450px'],
|
||||
content: html,
|
||||
success: function(){
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
form.render();
|
||||
}
|
||||
function exportcard(id,name){
|
||||
var param = {request_mode: 'download','id':id,'name':name};
|
||||
location.href = ns.url("giftcard://shop/giftcard/exportcard",param);
|
||||
return false;
|
||||
}
|
||||
form.on('submit(setlabel)', function(obj) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
var field = obj.field;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ns.url("giftcard://shop/giftcard/editGiftCard"),
|
||||
data: {
|
||||
'card_id': field.card_id,
|
||||
'card_count': field.card_count
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
layer.closeAll('page');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 七天时间
|
||||
*/
|
||||
function datePick(date_num,event_obj){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
$(event_obj).addClass('selected');
|
||||
// alert(new Date().format("yyyy-MM-dd hh:mm"));
|
||||
var now_date = new Date();
|
||||
|
||||
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 HH:mm:ss",0);//当前日期
|
||||
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);
|
||||
|
||||
}
|
||||
function closeLabel() {
|
||||
layer.close(layer_label);
|
||||
}
|
||||
function add() {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/addelectgiftcard");
|
||||
}
|
||||
</script>
|
||||
467
addon/giftcard/shop/view/giftcard/detail.html
Executable file
467
addon/giftcard/shop/view/giftcard/detail.html
Executable file
@@ -0,0 +1,467 @@
|
||||
<style>
|
||||
.card-common {margin-top: 15px;margin-bottom: 0;box-shadow: initial;}
|
||||
.card-common .layui-card-body{padding-top: 0;}
|
||||
.promotion-view{display:flex;flex-wrap:wrap}
|
||||
.promotion-view-item{width:33.3%;padding-right:10px;box-sizing:border-box;line-height:30px}
|
||||
.promotion-stat-view{display:flex;flex-wrap:wrap}
|
||||
.promotion-stat-view .promotion-stat-item{width:25%;padding:0 15px 10px 15px;box-sizing:border-box}
|
||||
.promotion-stat-view .promotion-stat-item .promotion-stat-item-title{color:#909399;font-size:14px;margin-top:5px}
|
||||
.promotion-stat-view .promotion-stat-item .promotion-stat-item-value{color:#303133;font-size:26px;margin-top:10px}
|
||||
.todo-list .promotion-stat-item{flex:1;width:0;cursor:pointer}
|
||||
.layui-layout-admin .layui-body .body-content {background: 0 0;padding: 0;}
|
||||
.gift-card-goods span{cursor: pointer; color: var(--base-color);}
|
||||
.layui-tab-title{margin-bottom: 15px;}
|
||||
.layui-layout-admin .single-filter-box.top {padding-top: 0 !important;}
|
||||
.add-way .add-way-item{display: flex;margin: 8px 0;align-items: center;}
|
||||
.add-way .add-way-item input{margin: 0 10px;}
|
||||
.add-way .add-way-item .layui-form-radio{margin-right: 0;}
|
||||
.card-goods .layui-table{margin-bottom: 0;margin-top: 0;}
|
||||
#card_right_type_goods #goods{border: 0;}
|
||||
.card-goods .layui-table .goods-title{display: flex;align-items: center;}
|
||||
.card-goods .layui-table .goods-title .goods-img{width: 55px;height: 55px;line-height: 55px;flex-shrink: 0;margin-right: 10px;}
|
||||
.card-goods .layui-table .goods-title .goods-img img{max-width: 100%;max-height: 100%;}
|
||||
.card-goods .layui-table-body{overflow: auto;max-height: 425px;margin-bottom: 15px;border-bottom: 1px solid #e6e6e6;}
|
||||
.card-goods .layui-table-body .layui-table{border: none;}
|
||||
.card-goods .layui-table-body tbody tr:last-of-type td{border: none;}
|
||||
.card-goods .layui-table-head tr th:last-of-type{text-align: right;}
|
||||
.card-goods .layui-table-body tr td:last-of-type{text-align: right;}
|
||||
.card-tab{margin-bottom: 15px;margin-top: 15px;}
|
||||
/* 商品列表 */
|
||||
.shop-information-table > p{padding-left: 5px;padding-bottom: 5px;}
|
||||
.shop-information-table table {width: 100%;border: 1px solid rgb(238,238,238);}
|
||||
.shop-information-table .table-body {max-height: 400px;overflow: auto;}
|
||||
.table-trOne{height: 48px;background:rgb(245,245,245) ;}
|
||||
.shop-information-table th{text-align: left;padding-left:28px;box-sizing: border-box;font-weight: 500;color:#333333;}
|
||||
.shop-information-table th:last-child{border:none;}
|
||||
.table-trTow{width:100%;height:60px;border-top:1px solid rgb(238,238,238);}
|
||||
.table-trTow>td{text-align: left;padding-left:28px;box-sizing: border-box;font-weight: 500;color:#333333;border-right:1px solid rgb(238,238,238);}
|
||||
.table-trTow>td:nth-child(5){color:var(--base-color)}
|
||||
</style>
|
||||
|
||||
<div class="layui-card card-common card-brief head top">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">基本信息</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="promotion-view">
|
||||
<div class="promotion-view-item">
|
||||
<label>礼品卡名称:</label>
|
||||
<span>{$detail.card_name}</span>
|
||||
</div>
|
||||
<div class="promotion-view-item grouping">
|
||||
<label>分组:</label>
|
||||
<span>{$detail.category_name}</span>
|
||||
</div>
|
||||
|
||||
<div class="promotion-view-item grouping">
|
||||
<label>卡类型:</label>
|
||||
<span>{$detail.card_type_name}</span>
|
||||
</div>
|
||||
|
||||
<div class="promotion-view-item">
|
||||
<label>权益类型:</label>
|
||||
<span>{$detail.card_right_type=='goods' ? '礼品卡' : '储值卡'}</span>
|
||||
</div>
|
||||
{if $detail.card_right_type=='balance'}
|
||||
<div class="promotion-view-item">
|
||||
<label>储值余额:</label>
|
||||
<span>{$detail.balance}元</span>
|
||||
</div>
|
||||
{/if}
|
||||
{if $detail.card_type=='virtual'}
|
||||
<div class="promotion-view-item">
|
||||
<label>销售价:</label>
|
||||
<span>{$detail.card_price}元</span>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="promotion-view-item">
|
||||
<label>有效期:</label>
|
||||
<span>
|
||||
{if $detail.validity_type=='forever'}
|
||||
永久有效
|
||||
{elseif $detail.validity_type=='date'/}
|
||||
有效期至{:date('Y-m-d H:i:s',$detail.validity_time)}
|
||||
{elseif $detail.validity_type=='day'/}
|
||||
领取后{$detail.validity_day}天有效
|
||||
{/if}
|
||||
</span>
|
||||
</div>
|
||||
{if $detail.card_type=='virtual'}
|
||||
<div class="promotion-view-item">
|
||||
<label>是否允许转赠:</label>
|
||||
<span>{if $detail.is_allow_transfer == 1}是{else/}否{/if}</span>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card card-common card-brief head top">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">数据统计</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="promotion-stat-view todo-list">
|
||||
{if $detail.card_type=='virtual'}
|
||||
<div class="promotion-stat-item" >
|
||||
<div class="promotion-stat-item-title">卡销量</div>
|
||||
<div class="promotion-stat-item-value">{$detail.sale_num}</div>
|
||||
</div>
|
||||
<div class="promotion-stat-item" >
|
||||
<div class="promotion-stat-item-title">已使用</div>
|
||||
<div class="promotion-stat-item-value">{$detail.use_count}</div>
|
||||
</div>
|
||||
<div class="promotion-stat-item" >
|
||||
<div class="promotion-stat-item-title">未使用</div>
|
||||
<div class="promotion-stat-item-value">{$detail.sale_num - $detail.use_count}</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if $detail.card_type=='real'}
|
||||
<div class="promotion-stat-item" >
|
||||
<div class="promotion-stat-item-title">制卡数</div>
|
||||
<div class="promotion-stat-item-value">{$detail.card_count}</div>
|
||||
</div>
|
||||
<div class="promotion-stat-item" >
|
||||
<div class="promotion-stat-item-title">激活数</div>
|
||||
<div class="promotion-stat-item-value">{$detail.activate_count}</div>
|
||||
</div>
|
||||
<div class="promotion-stat-item" >
|
||||
<div class="promotion-stat-item-title">已使用</div>
|
||||
<div class="promotion-stat-item-value">{$detail.use_count}</div>
|
||||
</div>
|
||||
<div class="promotion-stat-item" >
|
||||
<div class="promotion-stat-item-title">未使用</div>
|
||||
<div class="promotion-stat-item-value">{$detail.activate_count - $detail.use_count}</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card card-common card-brief head top">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">使用规则</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
{if $detail.card_right_type=='goods'}
|
||||
{if $detail.card_right_goods_type == 'all'}
|
||||
<p>礼品卡持卡人兑换时可从以下商品列表中任选{$detail.card_right_goods_count}件。</p>
|
||||
{else/}
|
||||
<p>礼品卡持卡人兑换时可从按照商品列表中商品数量进行兑换。</p>
|
||||
{/if}
|
||||
{else/}
|
||||
<p>礼品卡持卡人兑换时将储值卡的储值余额充值到持卡人账户余额中</p>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 商品信息 -->
|
||||
{if $detail['card_right_type'] == 'goods'}
|
||||
<div class="layui-card card-common card-brief head top">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">商品信息</span>
|
||||
</div>
|
||||
<div class="layui-card-body shop-information-table">
|
||||
<div class="table-head">
|
||||
<table lay-skin="line">
|
||||
<colgroup>
|
||||
<col width="80%">
|
||||
{if $detail.card_right_goods_type == 'all'}
|
||||
<col width="20%">
|
||||
{/if}
|
||||
{if $detail.card_right_goods_type != 'all'}
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
{/if}
|
||||
<col>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="table-trOne">
|
||||
<th lay-data="{field:'product_name', width:200}">商品</th>
|
||||
<th lay-data="{field:'price'}">价格</th>
|
||||
{if $detail.card_right_goods_type != 'all'}
|
||||
<th lay-data="{field:'sale_num'}">数量</th>
|
||||
{/if}
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
<div class="table-body">
|
||||
<table lay-skin="line">
|
||||
<colgroup>
|
||||
<col width="80%">
|
||||
{if $detail.card_right_goods_type == 'all'}
|
||||
<col width="20%">
|
||||
{/if}
|
||||
{if $detail.card_right_goods_type != 'all'}
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
{/if}
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
{foreach $detail['goods_list'] as $list_k => $order_goods_item}
|
||||
<tr class="table-trTow">
|
||||
<td>{$order_goods_item.sku_info ? $order_goods_item.sku_info.sku_name : ''}</td>
|
||||
<td>{$order_goods_item.sku_info ? $order_goods_item.sku_info.price : ''}</td>
|
||||
{if $detail.card_right_goods_type != 'all'}
|
||||
<td>{$order_goods_item.goods_num}</td>
|
||||
{/if}
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="layui-card card-common card-brief head top">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">礼品卡列表</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="screen layui-collapse card-tab" lay-filter="card_tab">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">礼品卡编号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入礼品卡编号" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button type="button" class="layui-btn" lay-filter="search" lay-submit>筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="card_state_tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" data-status="all">全部</li>
|
||||
{foreach $status_list as $k => $v}
|
||||
<li data-status="{$k}">{$v}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<div class="layui-tab-content poster_list">
|
||||
<!-- 列表 -->
|
||||
<table id="poster_list" lay-filter="poster_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type='text/html' id="promotion_list_item_box_html">
|
||||
<div class="promotion-list-item-title">
|
||||
<div class="promotion-list-item-title-icon">
|
||||
<img src="{{ ns.img(d.sku_image) }}" alt="">
|
||||
</div>
|
||||
<p class="promotion-list-item-title-name multi-line-hiding">{{ d.sku_name }}</p>
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
{{# if(d.status == 'to_activate'){ }}
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
{{# } }}
|
||||
{{# if(d.status != 'to_activate'){ }}
|
||||
<a class="layui-btn" lay-event="info">详情</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<script>
|
||||
var categoryList = {:json_encode($category_list)} ? {:json_encode($category_list)} : [];
|
||||
var category_id = {$detail.category_id};
|
||||
var giftcard_id = {$detail.giftcard_id};
|
||||
categoryList.forEach(item => {
|
||||
if(item.category_id == category_id){
|
||||
$(".grouping span").text(item.name);
|
||||
}
|
||||
});
|
||||
|
||||
var table,element,form,laytpl,repeat_flag=false;
|
||||
layui.use(['form', 'element', 'laytpl','laydate'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
element = layui.element;
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
element.on('tab(card_state_tab)', function () {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
'status': this.getAttribute('data-status')
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {curr: 1},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#poster_list',
|
||||
url: ns.url("giftcard://shop/card/lists", {'giftcard_id': giftcard_id}),
|
||||
cols: [
|
||||
{if $detail.card_type=='virtual'}
|
||||
[{
|
||||
field: 'card_no',
|
||||
title: '卡号',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
}, {
|
||||
field: 'member_nickname',
|
||||
title: '所属会员',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
var html = `<a class="text-color" href="${ns.href('shop/member/editmember',{'member_id':data.member_id})}" target="_blank">${data.member_nickname || '--'}</a>`
|
||||
return html;
|
||||
}
|
||||
}, {
|
||||
title: '获取时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
field: 'status_name',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '15%'
|
||||
}, {
|
||||
field: 'order_no',
|
||||
title: '订单',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
var html = `<a class="text-color" href="${ns.href('giftcard://shop/order/detail',{'order_id':data.order_id})}" target="_blank">${data.order_no}</a>`
|
||||
return html;
|
||||
}
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
{else /}
|
||||
[{
|
||||
field: 'card_no',
|
||||
title: '卡号',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
},{
|
||||
field: 'card_cdk',
|
||||
title: '秘钥',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
}, {
|
||||
title: '生成时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
field: 'member_nickname',
|
||||
title: '激活会员',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: function (data) {
|
||||
var html;
|
||||
if(data.member_id)
|
||||
html = `<a class="text-color" href="${ns.href('shop/member/editmember',{'member_id':data.member_id})}" target="_blank">${data.member_nickname}</a>`;
|
||||
else
|
||||
html = `<a>--</a>`;
|
||||
return html;
|
||||
}
|
||||
}, {
|
||||
field: 'sort',
|
||||
unresize: 'false',
|
||||
title: '激活时间',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
if(data.activate_time == 0)
|
||||
return "--";
|
||||
else
|
||||
return ns.time_to_date(data.activate_time);
|
||||
}
|
||||
}, {
|
||||
field: 'status_name',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '10%'
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
{/if}
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'delete': //删除
|
||||
deleteCard(data.card_id);
|
||||
break;
|
||||
case 'info':
|
||||
window.open(ns.href("giftcard://shop/card/detail",{card_id:data.card_id}))
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteCard(id) {
|
||||
layer.confirm('确定要删除该卡项记录吗?', function (index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/card/delete"),
|
||||
data: {
|
||||
card_id: 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;
|
||||
});
|
||||
}
|
||||
})
|
||||
</script>
|
||||
744
addon/giftcard/shop/view/giftcard/edit.html
Executable file
744
addon/giftcard/shop/view/giftcard/edit.html
Executable file
@@ -0,0 +1,744 @@
|
||||
<style>
|
||||
.operation .table-btn{justify-content: flex-start ;}
|
||||
.goods_num {padding-left: 20px;}
|
||||
.hide{display: none;}
|
||||
.layui-table .goods-title{display: flex;align-items: center;}
|
||||
.layui-table .goods-title .goods-img{width: 55px;height: 55px;line-height: 55px;flex-shrink: 0;margin-right: 10px;}
|
||||
.layui-table .goods-title .goods-img img{max-width: 100%;max-height: 100%;}
|
||||
#card_right_type_goods .layui-table{margin-bottom: 0;margin-top: 0;}
|
||||
#card_right_type_goods #goods{border: 0;}
|
||||
#card_right_type_goods .layui-table-body{overflow: auto;max-height: 500px;margin-bottom: 15px;border-bottom: 1px solid #e6e6e6;}
|
||||
#card_right_type_goods .layui-table-body tbody tr:last-of-type td{border: none;}
|
||||
.layui-table-head tr th:last-of-type{text-align: right;}
|
||||
.layui-table-body tr td:last-of-type .table-btn{justify-content: flex-end;}
|
||||
.card-common .goods-image-wrap .item{width: 185px;height: 119.7px;line-height: 119.7px;margin-top: 5px;margin-bottom: 5px;float: unset}
|
||||
.card-common .goods-image-wrap .item .img-wrap{width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;}
|
||||
.card-common .goods-image-wrap .item .img-wrap img{max-height: 100%;max-width: 100%;width: auto;height: auto;}
|
||||
.card-common .goods-image-wrap .item .operation{width: 100%;height: 100%;line-height: 5;}
|
||||
.goods-image-wrap .js-goods-image{margin-bottom: 0;line-height: 1;display: flex}
|
||||
.disabled-click{pointer-events: none;color: #999 !important;}
|
||||
.period-validity .layui-input-block>div{margin: 8px 0;display: flex;align-items: center;}
|
||||
.period-validity .layui-input-block>div .layui-input-inline{margin: 0 8px;}
|
||||
.period-validity .layui-input-block .layui-form-radio{margin-right: 0;padding-right: 0;}
|
||||
.layui-input-inline.totality-num{float: none;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form">
|
||||
<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"><span class="required">*</span>礼品卡名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="card_name" value="{$giftcard_info.card_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"><span class="required">*</span>分组:</label>
|
||||
<div class="layui-input-inline len-mid">
|
||||
<select class="category_id" name="category_id" lay-verify="required" lay-filter="categoryId">
|
||||
<option value="">请选择</option>
|
||||
{foreach $category_list as $k=>$v}
|
||||
<option value="{$v['category_id']}" {if $giftcard_info.category_id == $v['category_id']} selected {/if}>{$v['category_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div id="card-cover" class="layui-form-item goods-image-wrap">
|
||||
<label class="layui-form-label">礼品卡封面:</label>
|
||||
<div class="layui-input-block">
|
||||
<!--素材图片-->
|
||||
<div class="js-goods-image"></div>
|
||||
</div>
|
||||
<div class="word-aux"></div>
|
||||
</div>
|
||||
{if $giftcard_info['card_type'] == 'virtual'}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">销售价:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="card_price" onchange="detectionNumType(this,'positiveNumber')" class="layui-input len-short integral" autocomplete="off" value="{$giftcard_info.card_price}">
|
||||
</div>
|
||||
<div class="layui-form-mid">元</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" min="0" name="sort" value="{$giftcard_info.sort}" lay-verify = 'sort' onchange="detectionNumType(this,'integral')" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
</div>
|
||||
{if $giftcard_info['card_type'] == 'virtual'}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否允许转赠:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_allow_transfer" value="1" lay-verify="required" title="是" {if $giftcard_info.is_allow_transfer == 1} checked {/if}>
|
||||
<input type="radio" name="is_allow_transfer" value="0" lay-verify="required" title="否" {if $giftcard_info.is_allow_transfer == 0} checked {/if}>
|
||||
</div>
|
||||
<div class="word-aux">转赠开启后,用户可以将自己的礼品卡作为礼包赠送给其他用户</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{if $giftcard_info['card_type'] == 'real'}
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">制卡规则</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
|
||||
<div class="layui-form-item participation-condition">
|
||||
<label class="layui-form-label"><span class="required">*</span>卡密内容:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" class="cdk_type" name="cdk_type[]" value="0-9" lay-skin="primary" title="0-9" {if in_array('0-9',explode(',',$giftcard_info.cdk_type))} checked {/if}>
|
||||
<input type="checkbox" class="cdk_type" name="cdk_type[]" value="a-z" lay-skin="primary" title="a-z" {if in_array('a-z',explode(',',$giftcard_info.cdk_type))} checked {/if}>
|
||||
<input type="checkbox" class="cdk_type" name="cdk_type[]" value="A-Z" lay-skin="primary" title="A-Z" {if in_array('A-Z',explode(',',$giftcard_info.cdk_type))} checked {/if}>
|
||||
</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" min="4" name="cdk_length" value="{$giftcard_info.cdk_length}" lay-verify="required" onchange="detectionNumType(this,'integral')" class="layui-input len-short" autocomplete="off">
|
||||
</div>
|
||||
<div class="word-aux">卡密位数仅限制卡密内容长度</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">卡号前缀:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="card_prefix" value="{$giftcard_info.card_prefix}" 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="text" name="card_suffix" value="{$giftcard_info.card_suffix}" autocomplete="off" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<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"><span class="required">*</span>权益类型:</label>
|
||||
<div class="layui-input-block">
|
||||
{foreach $card_right_type_list as $k=>$v}
|
||||
<input type="radio" name="card_right_type" value="{$k}" lay-verify="required" lay-filter="cardRightType" title="{$v}" {if $k == $giftcard_info.card_right_type}checked{else/}disabled{/if}>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
<!--储值-->
|
||||
<div id="card_right_type_balance" class="{if $giftcard_info.card_right_type == 'balance'} layui-show {else/} layui-hide {/if}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">储值余额:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="balance" onchange="detectionNumType(this,'positiveNumber')" class="layui-input len-short" autocomplete="off" value="{$giftcard_info.balance}">
|
||||
</div>
|
||||
<div class="layui-form-mid">元</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--商品-->
|
||||
<div id="card_right_type_goods" class="{if $giftcard_info.card_right_type == 'goods'} layui-show {else/} layui-hide {/if}">
|
||||
|
||||
<div class="layui-form-item goods-number">
|
||||
<label class="layui-form-label"><span class="required">*</span>礼品卡中商品选赠规则:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="card_right_goods_type" value="item" lay-verify="required" lay-filter="cardTightGoodsType" title="礼品卡由下列商品及其数量打包而成" {if $giftcard_info.card_right_goods_type == 'item'} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods-number">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="card_right_goods_type" value="all" lay-verify="required" lay-filter="cardTightGoodsType" title="礼品卡持卡人兑换时可从以下商品列表中任选N件商品" {if $giftcard_info.card_right_goods_type == 'all'} checked {/if}>
|
||||
<div class="layui-input-inline totality-num">
|
||||
<input type="number" min="0" {if $giftcard_info.card_right_goods_type == 'all'} lay-verify="required|number"{/if} {if $giftcard_info.card_right_goods_type == 'item'} disabled {/if} name="card_right_goods_count" onchange="detectionNumType(this,'integral')" class="layui-input len-short" autocomplete="off" value="{$giftcard_info.card_right_goods_count}">
|
||||
</div>
|
||||
<span class="sub-text totality-num {if $giftcard_info.card_right_goods_type == 'item'} disabled-click {/if}">件</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-table-head">
|
||||
<table class="layui-table" lay-skin="line" lay-size="lg">
|
||||
<colgroup>
|
||||
<col width="45%">
|
||||
<col width="15%">
|
||||
<col class="goods_num_col {if $giftcard_info.card_right_goods_type == 'all'} hide {else/} show {/if}" width="15%">
|
||||
<col>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>商品名称</th>
|
||||
<th>原价</th>
|
||||
<th class="goods_num_col {if $giftcard_info.card_right_goods_type == 'all'} hide {else/} show {/if}">数量</th>
|
||||
<th class="operation">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
<div class="layui-table-body">
|
||||
<table class="layui-table" id="goods" lay-skin="line" lay-size="lg">
|
||||
<colgroup>
|
||||
<col width="45%">
|
||||
<col width="15%">
|
||||
<col class="goods_num_col {if $giftcard_info.card_right_goods_type == 'all'} hide {else/} show {/if}" width="15%">
|
||||
<col>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
{if empty($giftcard_info.goods_list)}
|
||||
<tr class="goods-empty">
|
||||
<td colspan="{if $giftcard_info.card_right_goods_type == 'item'}4{else/}3{/if}">
|
||||
<div>未添加商品</div>
|
||||
</td>
|
||||
</tr>
|
||||
{else/}
|
||||
{foreach $giftcard_info.goods_list as $goods_item}
|
||||
<tr data-sku_id="{$goods_item.sku_id}" data-goods_id="{$goods_item.goods_id}">
|
||||
<td>
|
||||
<div class="goods-title">
|
||||
<div class="goods-img">
|
||||
<img layer-src src="{$goods_item.sku_info.sku_image ? img($goods_item.sku_info.sku_image) : ''}" alt="">
|
||||
</div>
|
||||
<p class="multi-line-hiding goods-name">{$goods_item.sku_info ? $goods_item.sku_info.sku_name : ''}</p>
|
||||
</div>
|
||||
</td>
|
||||
<td class='price-one'>{$goods_item.sku_info ? $goods_item.sku_info.price : ''}</td>
|
||||
<td class="goods_num_col {if $giftcard_info.card_right_goods_type == 'all'} hide {else/} show {/if}">
|
||||
<input type="number" name="" min="1" onchange="detectionNumType(this,'integral')" lay-verify="required{if $giftcard_info.card_right_goods_type == 'item'}|number{/if}" class="layui-input goods_num" value='{$goods_item.goods_num}'>
|
||||
</td>
|
||||
<td class='operation'> <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='deleteGoods(this)'>删除商品</a></div></td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<button class="layui-btn" onclick="addGoods()">添加商品</button>
|
||||
<span class="goods_num">已选商品(<span id="goods_num" class="text-color">{:count($giftcard_info.goods_list)}</span>)</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">有效期</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item period-validity">
|
||||
<label class="layui-form-label"><span class="required">*</span>有效期:</label>
|
||||
<div class="layui-input-block">
|
||||
<div>
|
||||
<input type="radio" name="validity_type" value="forever" lay-filter="validityType" {if $giftcard_info.validity_type == 'forever'} checked {/if}>
|
||||
<span class="sub-text {if $giftcard_info.validity_type != 'forever'} disabled-click {/if}">永久有效</span>
|
||||
</div>
|
||||
<div>
|
||||
<input type="radio" name="validity_type" value="date" lay-filter="validityType" {if $giftcard_info.validity_type == 'date'} checked {/if}>
|
||||
<span class="sub-text {if $giftcard_info.validity_type != 'date'} disabled-click {/if}">有效期至</span>
|
||||
<div class="layui-input-inline" style="float: none">
|
||||
<input type="text" class="layui-input sub-text {if $giftcard_info.validity_type != 'date'} disabled-click {/if}" name="validity_time" lay-verify="time" placeholder="有效期限" id="start_time" value="{:time_to_date($giftcard_info.validity_time)}" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<input type="radio" name="validity_type" value="day" lay-filter="validityType" {if $giftcard_info.validity_type == 'day'} checked {/if}>
|
||||
<span class="sub-text {if $giftcard_info.validity_type != 'day'} disabled-click {/if}">领取后</span>
|
||||
<div class="layui-input-inline" style="float: none">
|
||||
<input type="number" min="0" name="validity_day" onchange="detectionNumType(this,'integral')" autocomplete="off" class="layui-input len-short sub-text {if $giftcard_info.validity_type != 'day'} disabled-click {/if}" value="{$giftcard_info.validity_day}" lay-verify='time_day' readonly>
|
||||
</div>
|
||||
<span class="sub-text {if $giftcard_info.validity_type != 'day'} disabled-click {/if}">天有效</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">说明:有效期截止后,不支持退款</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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"><span class="required"></span>使用须知:</label>
|
||||
<div class="layui-input-block">
|
||||
<script id="instruction" type="text/plain" style="width:800px;height:400px;"></script>
|
||||
<input type="hidden" name="activity_instruction" value="{$giftcard_info.instruction}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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"><span class="required"></span>详情:</label>
|
||||
<div class="layui-input-block">
|
||||
<script id="editor" type="text/plain" style="width:800px;height:400px;"></script>
|
||||
<input type="hidden" name="activity_detail" value="{$giftcard_info.desc}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<input type="hidden" name="giftcard_id" value="{$giftcard_info.giftcard_id}" />
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backGiftCardList()">返回</button>
|
||||
<a id="cardCoverId"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--素材图片列表-->
|
||||
<script type="text/html" id="mediaImage">
|
||||
{{# if(d.list.length){ }}
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="item upload_img_square_item" data-index="{{i}}">
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i])}}" layer-src="{{ns.img(d.list[i])}}">
|
||||
</div>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" data-index="{{i}}"></i>
|
||||
<div class="replace_img" data-index="{{i}}">点击替换</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.list.length < d.max){ }}
|
||||
<div class="item js-add-media-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
{{# }else{ }}
|
||||
<div class="item js-add-media-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.config.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.all.js"> </script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script type="text/javascript" src="GIFTCARD_JS/media.js"></script>
|
||||
<script>
|
||||
var form, laytpl, tableData = [],
|
||||
repeat_flag = false,
|
||||
selectGoodsSkuId = [],
|
||||
selectGoodsId = [],
|
||||
goods = [],
|
||||
currentDate = new Date(),
|
||||
activityInstruction = "",
|
||||
activityDetail = "",
|
||||
mediaImage = [], //封面头像
|
||||
mediaIds = [],//封面id
|
||||
saveData = null;
|
||||
|
||||
var GOODS_IMAGE_MAX = 3; //素材上传数量
|
||||
var card_right_goods_type = "{$giftcard_info.card_right_goods_type}";
|
||||
var goods_list = {:json_encode($giftcard_info.goods_list)};
|
||||
mediaImage = '{:json_encode($giftcard_info.card_cover)}' ? {:json_encode($giftcard_info.card_cover)}.split(',') : [];
|
||||
mediaIds = '{:json_encode($giftcard_info.media_ids)}' ? {:json_encode($giftcard_info.media_ids)}.split(',') : [];
|
||||
|
||||
if(goods_list.length > 0){
|
||||
for(var i = 0; i < goods_list.length; i++){
|
||||
selectGoodsSkuId.push(parseInt(goods_list[i].sku_id));
|
||||
selectGoodsId.push(parseInt(goods_list[i].goods_id));
|
||||
}
|
||||
}
|
||||
|
||||
layui.use(['form', 'laytpl','laydate'], function () {
|
||||
var laydate = layui.laydate;
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
|
||||
refreshGoodsImage();
|
||||
currentDate.setDate(currentDate.getDate() + 30);
|
||||
activityDetail = UE.getEditor('editor', {autoHeightEnabled: false});
|
||||
// 加载商品详情
|
||||
activityDetail.ready(function () {
|
||||
activityDetail.setContent($("input[name='activity_detail']").val());
|
||||
});
|
||||
|
||||
activityInstruction = UE.getEditor('instruction', {autoHeightEnabled: false});
|
||||
// 加载商品详情
|
||||
activityInstruction.ready(function () {
|
||||
activityInstruction.setContent($("input[name='activity_instruction']").val());
|
||||
});
|
||||
form.render();
|
||||
|
||||
// 时间组件
|
||||
laydate.render({
|
||||
elem: '#start_time'
|
||||
,type: 'datetime'
|
||||
,change: function(value, date, endDate){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
}
|
||||
});
|
||||
|
||||
//表单验证
|
||||
form.verify({
|
||||
number: function (value) {
|
||||
if (value <= 0) {
|
||||
return "数量不能小于或等于0"
|
||||
}
|
||||
},
|
||||
sort: function (value) {
|
||||
if (value < 0) {
|
||||
return "排序不能小于0"
|
||||
}
|
||||
},
|
||||
price: function (value) {
|
||||
if (value == 0) {
|
||||
return "销售价不能为0"
|
||||
}
|
||||
},
|
||||
market_price: function (value) {
|
||||
if (value < 0) {
|
||||
return "市场价不能为小于0"
|
||||
}
|
||||
},
|
||||
time: function (value) {
|
||||
var validity_type = $('[name="validity_type"]:checked').val();
|
||||
if (validity_type == 'date') {
|
||||
var now_time = (new Date()).getTime();
|
||||
var end_time = (new Date(value)).getTime();
|
||||
if (!end_time) {
|
||||
return '有效期不能为空!'
|
||||
}
|
||||
if (now_time > end_time) {
|
||||
return '有效期不能小于当前时间!'
|
||||
}
|
||||
}
|
||||
},
|
||||
time_day: function (value) {
|
||||
var validity_type = $('[name="validity_type"]:checked').val();
|
||||
if (validity_type == 'day') {
|
||||
if (value <= 0) {
|
||||
return '有效期天数至少为一天!'
|
||||
}
|
||||
}
|
||||
},
|
||||
cdk_length: function (value) {
|
||||
if (value <= 0) {
|
||||
return "密钥位数不能小于或等于0"
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
//权益类型
|
||||
form.on('radio(cardRightType)', function(data){
|
||||
if(data.value.trim() == 'balance'){
|
||||
$('#card_right_type_balance').removeClass('layui-hide').addClass('layui-show');
|
||||
$('#card_right_type_goods').removeClass('layui-show').addClass('layui-hide');
|
||||
}else if(data.value.trim() == 'goods'){
|
||||
$('#card_right_type_goods').removeClass('layui-hide').addClass('layui-show');
|
||||
$('#card_right_type_balance').removeClass('layui-show').addClass('layui-hide');
|
||||
}
|
||||
});
|
||||
|
||||
//有效期
|
||||
form.on('radio(validityType)', function(data){
|
||||
$(data.elem).parent("div").siblings().find(".sub-text").addClass("disabled-click");
|
||||
$(data.elem).parent("div").find(".sub-text").removeClass("disabled-click");
|
||||
if(data.value.trim() == 'forever'){
|
||||
$('input[name="validity_day"]').val('').attr('readonly','readonly');
|
||||
$('input[name="validity_time"]').val('');
|
||||
}else if(data.value.trim() == 'date'){
|
||||
$('input[name="validity_day"]').val('').attr('readonly','readonly');
|
||||
}else if(data.value.trim() == 'day'){
|
||||
$('input[name="validity_day"]').removeAttr('readonly');
|
||||
$('input[name="validity_time"]').val('');
|
||||
}
|
||||
});
|
||||
|
||||
//商品数量类型
|
||||
form.on('radio(cardTightGoodsType)', function(data){
|
||||
if (data.value.trim() == 'all') {
|
||||
|
||||
$('.goods_num_col').removeClass('show').addClass('hide');
|
||||
$('.goods_num_col').find('input').attr('lay-verify','required');
|
||||
|
||||
$(".totality-num input").attr("disabled", false);
|
||||
$(".totality-num").removeClass('disabled-click');
|
||||
$(".totality-num input").attr('lay-verify','required|number');
|
||||
|
||||
} else if (data.value.trim() == 'item') {
|
||||
$('.goods_num_col').removeClass('hide').addClass('show');
|
||||
$('.goods_num_col').find('input').attr('lay-verify','required|number');
|
||||
|
||||
$('input[name="card_right_goods_count"]').val(0);
|
||||
$(".totality-num input").attr("disabled", true);
|
||||
$(".totality-num").addClass('disabled-click');
|
||||
$(".totality-num input").attr('lay-verify','');
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
// 保存
|
||||
function saveFunc(data){
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("giftcard://shop/giftcard/edit"),
|
||||
data: data.field,
|
||||
async: false,
|
||||
success: function (res) {
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
layer.confirm('编辑成功', {
|
||||
title: '操作提示',
|
||||
btn: ['返回列表', '继续编辑'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/lists");
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 表单提交
|
||||
*/
|
||||
form.on('submit(save)', function (data) {
|
||||
if(!mediaIds.length){
|
||||
layer.msg("请至少选择一张图片作为礼品卡封面");
|
||||
return false;
|
||||
}
|
||||
data.field.media_ids = mediaIds.toString();
|
||||
data.field.card_cover = mediaImage.toString();
|
||||
|
||||
if(data.field.card_right_type == 'goods') {
|
||||
goods = [];
|
||||
var num_list = [];
|
||||
$(".goods_num").each(function () {
|
||||
// 商品按数量
|
||||
if(data.field.card_right_goods_type == 'all'){
|
||||
num_list.push(0);
|
||||
}else{
|
||||
num_list.push($(this).val());
|
||||
}
|
||||
});
|
||||
|
||||
for (var i = 0; i < selectGoodsSkuId.length; i++) {
|
||||
var obj = {};
|
||||
obj.sku_id = selectGoodsSkuId[i];
|
||||
obj.goods_id = selectGoodsId[i];
|
||||
obj.goods_num = num_list[i];
|
||||
goods.push(obj)
|
||||
}
|
||||
data.field.goods_sku_list = JSON.stringify(goods);
|
||||
if (goods.length == 0) {
|
||||
layer.msg("请选择商品");
|
||||
return;
|
||||
}
|
||||
}else{
|
||||
data.field.goods_sku_list = '';
|
||||
if (data.field.balance == 0) {
|
||||
layer.msg("请输入储值余额");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
data.field.desc = activityDetail.getContent();
|
||||
data.field.instruction = activityInstruction.getContent();
|
||||
|
||||
if(data.field.card_type == 'real'){
|
||||
if(data.field['cdk_type[0]'] == undefined && data.field['cdk_type[1]'] == undefined && data.field['cdk_type[2]'] == undefined){
|
||||
layer.msg("卡密内容不能为空");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
saveFunc(data);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
//添加素材
|
||||
$("body").off("click", ".js-add-media-image").on("click", ".js-add-media-image", function () {
|
||||
openMedia(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (mediaImage.length < GOODS_IMAGE_MAX){
|
||||
mediaImage.push(data[i].media_path);
|
||||
mediaIds.push(data[i].media_id);
|
||||
}
|
||||
}
|
||||
refreshGoodsImage();
|
||||
}, GOODS_IMAGE_MAX - mediaImage.length);
|
||||
});
|
||||
|
||||
//替换商品主图
|
||||
$("body").off("click", ".replace_img").on("click", ".replace_img", function () {
|
||||
var index = $(this).data('index');
|
||||
openMedia(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
mediaImage[index] = data[i].media_path;
|
||||
mediaIds[index] = data[i].media_id;
|
||||
}
|
||||
refreshGoodsImage();
|
||||
},1);
|
||||
});
|
||||
|
||||
//渲染商品主图列表
|
||||
function refreshGoodsImage() {
|
||||
var goods_image_template = $("#mediaImage").html();
|
||||
var data = {
|
||||
list: mediaImage,
|
||||
max: GOODS_IMAGE_MAX
|
||||
};
|
||||
|
||||
laytpl(goods_image_template).render(data, function (html) {
|
||||
|
||||
$(".js-goods-image").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (mediaImage.length) {
|
||||
|
||||
//预览
|
||||
$(".js-goods-image .js-preview").click(function () {
|
||||
$(this).parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".js-goods-image .js-delete").click(function () {
|
||||
var index = $(this).attr("data-index");
|
||||
mediaImage.splice(index, 1);
|
||||
mediaIds.splice(index, 1);
|
||||
refreshGoodsImage();
|
||||
});
|
||||
}
|
||||
|
||||
//最多传十张图
|
||||
if (mediaImage.length < GOODS_IMAGE_MAX) {
|
||||
$(".js-add-goods-image").show();
|
||||
} else {
|
||||
$(".js-add-goods-image").hide();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
// 返回
|
||||
function backGiftCardList() {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/lists");
|
||||
}
|
||||
|
||||
//检测数据类型
|
||||
function detectionNumType(el, type) {
|
||||
var value = $(el).val();
|
||||
//大于零 且 不是小数
|
||||
if (value < 0 && type == 'integral')
|
||||
$(el).val(0);
|
||||
else if (type == 'integral')
|
||||
$(el).val(Math.round(value));
|
||||
|
||||
//大于1 且 不是小数
|
||||
if (value < 1 && type == 'positiveInteger')
|
||||
$(el).val(1);
|
||||
else if (type == 'positiveInteger')
|
||||
$(el).val(Math.round(value));
|
||||
//大于零可以是小数
|
||||
if (type == 'positiveNumber') {
|
||||
value = parseFloat(value).toFixed(2);
|
||||
if (value < 0)
|
||||
$(el).val(0);
|
||||
else
|
||||
$(el).val(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品
|
||||
*/
|
||||
function addGoods() {
|
||||
goodsSelect(function (data) {
|
||||
if (Object.keys(data).length == 0) {
|
||||
selectGoodsSkuId = [];
|
||||
selectGoodsId = [];
|
||||
$('.goods-empty').show();
|
||||
$("#goods_num").text(selectGoodsSkuId.length);
|
||||
$("#goods tbody tr:not(.goods-empty)").remove();
|
||||
return;
|
||||
}
|
||||
|
||||
var price = 0.00;
|
||||
var card_right_goods_type_change = $('input[name="card_right_goods_type"]:checked').val();
|
||||
|
||||
var th_display = card_right_goods_type_change == 'item' ? 'show' : 'hide';
|
||||
if(th_display == 'show'){
|
||||
$('.goods_num_col').removeClass('hide').addClass('show').find('input').attr('lay-verify','required|number');
|
||||
}else{
|
||||
$('.goods_num_col').removeClass('show').addClass('hide').find('input').attr('lay-verify','required');
|
||||
}
|
||||
|
||||
var html = '';
|
||||
|
||||
for (var key in data) {
|
||||
for (var sku in data[key].selected_sku_list) {
|
||||
var item = data[key].selected_sku_list[sku];
|
||||
if (selectGoodsSkuId.indexOf(parseInt(item.sku_id)) != -1) {
|
||||
continue;
|
||||
}
|
||||
html += `<tr data-sku_id="${item.sku_id}" data-goods_id="${item.goods_id}">`;
|
||||
html += `
|
||||
<td>
|
||||
<div class="goods-title">
|
||||
<div class="goods-img">
|
||||
<img layer-src src="${item.sku_image ? ns.img(item.sku_image) : ''}" alt="">
|
||||
</div>
|
||||
<p class="multi-line-hiding goods-name">${item.sku_name}</p>
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
html += `<td class='price-one'>${item.price }</td>`;
|
||||
html += `<td class="goods_num_col `+ th_display +`"><input type="number" name="" min="1" onchange="detectionNumType(this,'integral')" lay-verify="required" class="layui-input goods_num" value='1'></td>`;
|
||||
html += `<td class='operation'> <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='deleteGoods(this)'>删除商品</a></div></td>`;
|
||||
html += `</tr>`;
|
||||
price += Number(item.price);
|
||||
selectGoodsSkuId.push(item.sku_id);
|
||||
selectGoodsId.push(item.goods_id);
|
||||
}
|
||||
}
|
||||
|
||||
if(selectGoodsSkuId.length) {
|
||||
$('.goods-empty').hide();
|
||||
$("#goods tbody").append(html);
|
||||
} else {
|
||||
$('.goods-empty').show();
|
||||
}
|
||||
$("#goods_num").text(selectGoodsSkuId.length);
|
||||
|
||||
}, selectGoodsSkuId, {mode: "sku",goods_class: 1,is_disabled_goods_class: 1});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品
|
||||
*/
|
||||
function deleteGoods(data) {
|
||||
var obj = $(data).parent().parent().parent();
|
||||
$(obj).remove();
|
||||
for (var i in selectGoodsSkuId) {
|
||||
if (selectGoodsSkuId[i] == Number($(obj).attr("data-sku_id"))) {
|
||||
selectGoodsSkuId.splice(i, 1);
|
||||
selectGoodsId.splice(i, 1);
|
||||
}
|
||||
}
|
||||
$("#goods_num").text(selectGoodsSkuId.length)
|
||||
|
||||
if(selectGoodsSkuId.length) $('.goods-empty').hide();
|
||||
else $('.goods-empty').show();
|
||||
}
|
||||
|
||||
</script>
|
||||
552
addon/giftcard/shop/view/giftcard/lists.html
Executable file
552
addon/giftcard/shop/view/giftcard/lists.html
Executable file
@@ -0,0 +1,552 @@
|
||||
<style>
|
||||
.rights_interests{line-height: 13px;}
|
||||
.len-short{width: 70px !important;}
|
||||
.hide{display: none;}
|
||||
.show{display: block;}
|
||||
.layui-layout-admin .table-tab .layui-tab-title{margin-bottom: 10px;}
|
||||
</style>
|
||||
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加礼品卡</button>
|
||||
</div>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="card_tab">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">礼品卡名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入卡名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button type="button" class="layui-btn" lay-filter="search" lay-submit>筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-tab table-tab" lay-filter="card_type_tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this tab1" lay-id="all">全部</li>
|
||||
<li class="tab1" lay-id="virtual">电子卡</li>
|
||||
<li class="tab2" lay-id="real">实体卡</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content poster_list">
|
||||
<!-- 列表 -->
|
||||
<table id="poster_list" lay-filter="poster_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="rights_interests">
|
||||
<div class=rights_interests>
|
||||
<p style="margin-top: 13px"><span>积分:{{d.point}}</span></p><br>
|
||||
<p><span>余额:{{d.balance}}</span></p><br>
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="selling_price">
|
||||
<div class=rights_interests>
|
||||
{{# if(d.type == 1){ }}¥{{d.selling_price}}{{# }else{ }}---{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="poster_status">
|
||||
<div class='table-title'>
|
||||
{{# if(d.status == 0){ }}
|
||||
<div class='title-pic' style="text-align:left">未激活</div>
|
||||
{{# }else if(d.status == 1){ }}
|
||||
<div class='title-pic' style="text-align:left">已激活</div>
|
||||
{{# }else if(d.status == 2){ }}
|
||||
<div class='title-pic' style="text-align:left">已作废</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 时间 -->
|
||||
<script id="time" type="text/html">
|
||||
<div class="layui-elip">开始:{{ns.time_to_date(d.start_time)}}</div>
|
||||
<div class="layui-elip">结束:{{ns.time_to_date(d.end_time)}}</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="validity_type">
|
||||
<div class='table-title'>
|
||||
{{# if(d.validity_type == 'forever'){ }}
|
||||
<div class='title-pic' style="text-align:left">永久有效</div>
|
||||
{{# }else if(d.validity_type == 'date'){ }}
|
||||
<div class='title-pic' style="text-align:left">有效期至{{ns.time_to_date(d.validity_time)}}</div>
|
||||
{{# }else if(d.validity_type == 'day'){ }}
|
||||
<div class='title-pic' style="text-align:left">领取后{{d.validity_day}}天内有效</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="elect_detail">详情</a>
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
{{# if(d.status==0){ }}
|
||||
<a class="layui-btn" lay-event="start">上架</a>
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
{{# } }}
|
||||
{{# if(d.status==1){ }}
|
||||
<a class="layui-btn" lay-event="close">下架</a>
|
||||
{{# } }}
|
||||
{{# if(d.card_type=='real'){ }}
|
||||
<a class="layui-btn" lay-event="add_batch">制卡</a>
|
||||
{{# } }}
|
||||
{{# if(d.card_type=='virtual'){ }}
|
||||
<a class="layui-btn" lay-event="order">订单</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="status">
|
||||
<div class='table-title'>
|
||||
{{# if(d.status == 0){ }}
|
||||
<div class='title-pic' style="text-align:left">已结束</div>
|
||||
{{# }else if(d.status == 1){ }}
|
||||
<div class='title-pic' style="text-align:left">进行中</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 编辑排序 -->
|
||||
<script type="text/html" id="editSort">
|
||||
<input name="sort" type="number" onchange="editSort({{d.giftcard_id}}, this)" value="{{d.sort}}" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="card_right_type">
|
||||
<div class='table-title'>
|
||||
{{# if(d.card_right_type == 'balance'){ }}
|
||||
<div class='title-pic' style="text-align:left">储值卡</div>
|
||||
{{# }else if(d.card_right_type == 'goods'){ }}
|
||||
<div class='title-pic' style="text-align:left">礼品卡</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table,form,laytpl,repeat_flag,layer_label,element;
|
||||
layui.use(['form','laytpl','element'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
form = layui.form;
|
||||
element = layui.element;
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
var cols = {
|
||||
"all": [
|
||||
[{
|
||||
field: 'card_name',
|
||||
title: '礼品卡名称',
|
||||
unresize: 'false',
|
||||
width: '16%',
|
||||
}, {
|
||||
title: '权益类型',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: '#card_right_type'
|
||||
}, {
|
||||
title: '卡类型',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
field: 'card_type_name'
|
||||
}, {
|
||||
field: 'sale_num',
|
||||
title: '销量/激活数',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: function(data){
|
||||
var val = data.card_type == 'real' ? data.activate_count : data.sale_num;
|
||||
return val;
|
||||
}
|
||||
},{
|
||||
field: 'use_count',
|
||||
title: '已使用',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
}, {
|
||||
title: '有效期',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: '#validity_type'
|
||||
}, {
|
||||
field: 'sort',
|
||||
unresize: 'false',
|
||||
title: '排序',
|
||||
templet: '#editSort',
|
||||
sort : true,
|
||||
width: '7%',
|
||||
}, {
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: '#status'
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
unresize: 'false',
|
||||
width: '14%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
],
|
||||
"virtual": [
|
||||
[{
|
||||
field: 'card_name',
|
||||
title: '礼品卡名称',
|
||||
unresize: 'false',
|
||||
width: '16%',
|
||||
}, {
|
||||
title: '权益类型',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: '#card_right_type'
|
||||
}, {
|
||||
title: '卡类型',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
field: 'card_type_name'
|
||||
}, {
|
||||
field: 'sale_num',
|
||||
title: '销量',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
},{
|
||||
field: 'use_count',
|
||||
title: '已使用',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
}, {
|
||||
title: '有效期',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: '#validity_type'
|
||||
}, {
|
||||
field: 'sort',
|
||||
unresize: 'false',
|
||||
title: '排序',
|
||||
templet: '#editSort',
|
||||
sort : true,
|
||||
width: '7%',
|
||||
}, {
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: '#status'
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
unresize: 'false',
|
||||
width: '14%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
],
|
||||
"real": [
|
||||
[{
|
||||
field: 'card_name',
|
||||
title: '礼品卡名称',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
}, {
|
||||
title: '权益类型',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: '#card_right_type'
|
||||
}, {
|
||||
title: '卡类型',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
field: 'card_type_name'
|
||||
},
|
||||
{
|
||||
field: 'card_count',
|
||||
title: '制卡数',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
},{
|
||||
field: 'activate_count',
|
||||
title: '激活数',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
},{
|
||||
field: 'use_count',
|
||||
title: '已使用',
|
||||
unresize: 'false',
|
||||
width: '8%'
|
||||
},{
|
||||
title: '有效期',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: '#validity_type'
|
||||
}, {
|
||||
field: 'sort',
|
||||
unresize: 'false',
|
||||
title: '排序',
|
||||
templet: '#editSort',
|
||||
sort : true,
|
||||
width: '7%',
|
||||
}, {
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: '#status'
|
||||
},{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
unresize: 'false',
|
||||
width: '14%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
]
|
||||
}
|
||||
|
||||
element.on('tab(card_type_tab)', function () {
|
||||
table = new Table({
|
||||
elem: '#poster_list',
|
||||
url: ns.url("giftcard://shop/giftcard/lists"),
|
||||
cols: cols[this.getAttribute('lay-id')],
|
||||
where: {
|
||||
'card_type': this.getAttribute('lay-id')
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#poster_list',
|
||||
url: ns.url("giftcard://shop/giftcard/lists"),
|
||||
cols: cols.all
|
||||
});
|
||||
|
||||
$('body').off('click', '.tab1').on('click', '.tab1', function () {
|
||||
$('.poster_list2').removeClass('show').addClass('hide');
|
||||
$('.poster_list').removeClass('hide').addClass('show');
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
|
||||
switch (obj.event) {
|
||||
case 'edit':
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/edit?giftcard_id="+data.giftcard_id);
|
||||
break;
|
||||
case 'delete':
|
||||
del(data.giftcard_id);
|
||||
break;
|
||||
case 'elect_detail':
|
||||
window.open(ns.href("giftcard://shop/giftcard/detail?giftcard_id="+data.giftcard_id));
|
||||
break;
|
||||
case 'close': //下架
|
||||
output(data.giftcard_id);
|
||||
break;
|
||||
case 'start': //上架
|
||||
onput(data.giftcard_id);
|
||||
break;
|
||||
case 'add_batch': //添加批次
|
||||
location.hash = ns.hash("giftcard://shop/cardimport/lists",{"giftcard_id": data.giftcard_id});
|
||||
break;
|
||||
case 'check_card': //查看卡密
|
||||
window.open(ns.href("giftcard://shop/card/lists",{giftcard_id: data.giftcard_id}));
|
||||
break;
|
||||
case 'order': //查看订单
|
||||
window.open(ns.href('giftcard://shop/order/order?giftcard_id=' + data.giftcard_id))
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
table.on("sort",function (obj) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
order:obj.field,
|
||||
sort:obj.type
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 下架
|
||||
*/
|
||||
function output(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定下架吗?',{
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
}, function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/isuse"),
|
||||
data: {
|
||||
id: id,
|
||||
status: 0
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function(){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 上架
|
||||
*/
|
||||
function onput(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定上架吗?',{
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
}, function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/isuse"),
|
||||
data: {
|
||||
id: id, status: 1
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function(index){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
|
||||
// 监听单元格编辑
|
||||
function editSort(goods_id, event){
|
||||
var data = $(event).val();
|
||||
if (data == '') {
|
||||
$(event).val(0);
|
||||
data = 0;
|
||||
}
|
||||
|
||||
if(!new RegExp("^-?[0-9]\\d*$").test(data)){
|
||||
layer.msg("排序号只能是整数");
|
||||
return ;
|
||||
}
|
||||
if(data<0){
|
||||
layer.msg("排序号必须大于0");
|
||||
return ;
|
||||
}
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("giftcard://shop/giftcard/sort"),
|
||||
data: {
|
||||
goods_id: goods_id,
|
||||
sort: data
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if(res.code==0){
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 删除
|
||||
function del(id){
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.confirm('礼品卡删除将同时删除对应会员获取的礼品卡,请谨慎处理。', {
|
||||
title:'删除礼品卡',
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
},function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/delete"),
|
||||
data: {
|
||||
giftcard_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function(index){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {curr: 1},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/add");
|
||||
}
|
||||
</script>
|
||||
242
addon/giftcard/shop/view/giftcard_records/elect_lists.html
Executable file
242
addon/giftcard/shop/view/giftcard_records/elect_lists.html
Executable file
@@ -0,0 +1,242 @@
|
||||
<style>
|
||||
.rights_interests {
|
||||
line-height: 13px;
|
||||
}
|
||||
.layui-form-item{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.search-input{
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
.layui-table-view .layui-table td, .layui-table-view .layui-table th{
|
||||
text-align: center;
|
||||
}
|
||||
.table-title .title-pic{
|
||||
width: 100% !important;
|
||||
height: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline search-input">
|
||||
<label class="layui-form-label">卡编号:</label>
|
||||
<div class="layui-input-inline search-input">
|
||||
<input type="text" name="search_text" placeholder="请输入卡编号" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<!-- <button class="layui-btn" lay-submit lay-filter="search">筛选</button> -->
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-tab table-tab" lay-filter="manjian_tab">
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="poster_list" lay-filter="poster_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="time">
|
||||
<div class='rights_interests'>
|
||||
{{# if(d.create_time){ }}
|
||||
<p style="margin-top: 13px;"><span>生成时间:{{ns.time_to_date(d.create_time)}}</span></p><br/>
|
||||
{{# } }}
|
||||
{{# if(d.use_time){ }}
|
||||
<p><span>使用时间:{{ns.time_to_date(d.use_time)}}</span></p>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="rights_interests">
|
||||
<div class='rights_interests'>
|
||||
<p style="margin-top: 13px;"><span>积分:{{d.point}}</span></p><br>
|
||||
<p><span>余额:{{d.balance}}</span></p><br>
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="poster_status">
|
||||
<div class='table-title'>
|
||||
{{# if(d.elect_status == 0){ }}
|
||||
<div class='title-pic text-color'>待使用</div>
|
||||
{{# }else if(d.elect_status == 1){ }}
|
||||
<div class='title-pic '>已使用</div>
|
||||
{{# }else if(d.elect_status == 2){ }}
|
||||
<div class='title-pic'>已过期</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
{{# if(d.entity_status==0){ }}
|
||||
<a class="layui-btn" lay-event="start">激活</a>
|
||||
<a class="layui-btn" lay-event="close">作废</a>
|
||||
{{# }else if(d.entity_status==1){ }}
|
||||
<a class="layui-btn" lay-event="close">作废</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl;
|
||||
var id = {:input('id', 0)};
|
||||
layui.use(['form', 'laytpl'], function () {
|
||||
var table,
|
||||
form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
laytpl = layui.laytpl;
|
||||
table = new Table({
|
||||
elem: '#poster_list',
|
||||
url: ns.url("giftcard://shop/giftcard/electlist"),
|
||||
where: {
|
||||
id: id
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
field: 'LAY_INDEX',
|
||||
title: '序号',
|
||||
unresize: 'false',
|
||||
width: '7%',
|
||||
templet: function (data) {
|
||||
return data.LAY_INDEX;
|
||||
}
|
||||
}, {
|
||||
field: 'number',
|
||||
title: '卡编号',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
}, {
|
||||
field: 'username',
|
||||
title: '使用人',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
}, {
|
||||
title: '兑换权益',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: '#rights_interests'
|
||||
}, {
|
||||
title: '时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: '#time'
|
||||
}, {
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: '#poster_status'
|
||||
},]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'close': //关闭
|
||||
close(data.id);
|
||||
break;
|
||||
case 'start': //启用
|
||||
start(data.id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 关闭
|
||||
*/
|
||||
function close(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.confirm('确定作废吗?', {
|
||||
btn: ['确定', '取消'] //按钮
|
||||
, cancel: function (index, layero) {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
}, function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/editrecordstatus"),
|
||||
data: {
|
||||
id: id, entity_status: 2
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
}, function (index) {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启
|
||||
*/
|
||||
function start(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定激活吗?', {
|
||||
btn: ['确定', '取消'] //按钮
|
||||
, cancel: function (index, layero) {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
}, function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/editrecordstatus"),
|
||||
data: {
|
||||
id: id, entity_status: 1
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function (index) {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1,
|
||||
id: id
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/addgiftcard");
|
||||
}
|
||||
</script>
|
||||
293
addon/giftcard/shop/view/giftcard_records/lists.html
Executable file
293
addon/giftcard/shop/view/giftcard_records/lists.html
Executable file
@@ -0,0 +1,293 @@
|
||||
<style>
|
||||
.rights_interests {
|
||||
line-height: 13px;
|
||||
}
|
||||
.layui-form-item{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.search-input{
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
.layui-table-view .layui-table td, .layui-table-view .layui-table th{
|
||||
text-align: center;
|
||||
}
|
||||
.table-title .title-pic{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
.layui-table .table-btn{
|
||||
text-align: center;
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline search-input">
|
||||
<label class="layui-form-label">兑换码:</label>
|
||||
<div class="layui-input-inline search-input">
|
||||
<input type="text" name="search_text" placeholder="请输入兑换码" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<!-- <button class="layui-btn" lay-submit lay-filter="search">筛选</button> -->
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-tab table-tab" lay-filter="manjian_tab">
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="poster_list" lay-filter="poster_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="time">
|
||||
<div class='rights_interests'>
|
||||
{{# if(d.create_time){ }}
|
||||
<p><span>生成时间:{{ns.time_to_date(d.create_time)}}</span></p><br/>
|
||||
{{# } }}
|
||||
{{# if(d.activation_time){ }}
|
||||
<p><span>激活时间:{{ns.time_to_date(d.activation_time)}}</span></p><br>
|
||||
{{# } }}
|
||||
{{# if(d.use_time){ }}
|
||||
<p><span>使用时间:{{ns.time_to_date(d.use_time)}}</span></p>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="rights_interests">
|
||||
<div class='rights_interests' style="margin-top: 13px;">
|
||||
<p><span>积分:{{d.point}}</span></p><br>
|
||||
<p><span>余额:{{d.balance}}</span></p><br>
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="poster_status">
|
||||
<div class='table-title'>
|
||||
{{# if(d.entity_status == 0){ }}
|
||||
<div class='title-pic'>未激活</div>
|
||||
{{# }else if(d.entity_status == 1){ }}
|
||||
<div class='title-pic text-color'>待使用</div>
|
||||
{{# }else if(d.entity_status == 2){ }}
|
||||
<div class='title-pic'>已作废</div>
|
||||
{{# }else if(d.entity_status == 3){ }}
|
||||
<div class='title-pic'>已使用</div>
|
||||
{{# }else if(d.entity_status == 4){ }}
|
||||
<div class='title-pic'>已过期</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
{{# if(d.entity_status==0){ }}
|
||||
<a class="layui-btn" lay-event="start">激活</a>
|
||||
<a class="layui-btn" lay-event="close">作废</a>
|
||||
{{# }else if(d.entity_status==1){ }}
|
||||
<a class="layui-btn" lay-event="close">作废</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl;
|
||||
var id = {:input('id', 0)};
|
||||
layui.use(['form', 'laytpl'], function () {
|
||||
var table,
|
||||
form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
laytpl = layui.laytpl;
|
||||
table = new Table({
|
||||
elem: '#poster_list',
|
||||
url: ns.url("giftcard://shop/giftcard/recordlist"),
|
||||
where: {
|
||||
id: id
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
field: 'LAY_INDEX',
|
||||
title: '序号',
|
||||
unresize: 'false',
|
||||
width: '7%',
|
||||
templet: function (data) {
|
||||
return data.LAY_INDEX;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'entity_bianhao',
|
||||
title: '卡编号',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
}, {
|
||||
// field: 'carmichael_text',
|
||||
title: "<a onclick='hideorview()'>兑换码 <i id='hideorview' class='iconfont iconguanbi-yanjing'></i></a>",
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet:function(data){
|
||||
var obj = $("#hideorview");
|
||||
if(obj.hasClass('iconguanbi-yanjing')){
|
||||
return '<span class="ceshi" data-index="'+data.carmichael_text+'">*********</span>';
|
||||
}else{
|
||||
return '<span class="ceshi" data-index="**********">'+data.carmichael_text+'</span>';
|
||||
}
|
||||
},
|
||||
}, {
|
||||
field: 'username',
|
||||
title: '使用人',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
}, {
|
||||
title: '兑换权益',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
templet: '#rights_interests'
|
||||
}, {
|
||||
title: '时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: '#time'
|
||||
}, {
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
templet: '#poster_status'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'close': //关闭
|
||||
close(data.id);
|
||||
break;
|
||||
case 'start': //启用
|
||||
start(data.id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 关闭
|
||||
*/
|
||||
function close(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.confirm('确定作废吗?', {
|
||||
btn: ['确定', '取消'] //按钮
|
||||
, cancel: function (index, layero) {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
}, function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/editrecordstatus"),
|
||||
data: {
|
||||
id: id, entity_status: 2
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
}, function (index) {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启
|
||||
*/
|
||||
function start(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定激活吗?', {
|
||||
btn: ['确定', '取消'] //按钮
|
||||
, cancel: function (index, layero) {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
}, function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/editrecordstatus"),
|
||||
data: {
|
||||
id: id, entity_status: 1
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function (index) {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1,
|
||||
id: id
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
function hideorview(data){
|
||||
var obj = $("#hideorview");
|
||||
// $("table tr").each(function(i){
|
||||
// if(i!=0){
|
||||
// // console.log($(this).children('1'));
|
||||
// }
|
||||
// });
|
||||
if(obj.hasClass('iconguanbi-yanjing')){
|
||||
obj.removeClass('iconguanbi-yanjing');
|
||||
obj.addClass('iconreview');
|
||||
$('.ceshi').each(function(index,val){
|
||||
var old = $(this).text();
|
||||
$(this).text($(this).data('index')).data('index',old)
|
||||
})
|
||||
}else{
|
||||
obj.removeClass('iconreview');
|
||||
obj.addClass('iconguanbi-yanjing');
|
||||
$('.ceshi').each(function(index,val){
|
||||
var old = $(this).text();
|
||||
$(this).text($(this).data('index')).data('index',old)
|
||||
})
|
||||
}
|
||||
}
|
||||
function add() {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/addgiftcard");
|
||||
}
|
||||
</script>
|
||||
427
addon/giftcard/shop/view/media/lists.html
Executable file
427
addon/giftcard/shop/view/media/lists.html
Executable file
@@ -0,0 +1,427 @@
|
||||
<link rel="stylesheet" type="text/css" href="SHOP_CSS/picture_manager.css" />
|
||||
<style>
|
||||
.album-box .album-img-box{display: flex;flex-wrap: wrap;}
|
||||
.album-box .album-content{margin-top: 10px;}
|
||||
.album-box .album-img-box li{margin: 0 13px 20px 0;position: relative;width: 290px;height: 187.5px;cursor: pointer;border: 1px solid #ccc;padding: 2px;}
|
||||
.album-box .album-img-box li.selected{border-color: var(--base-color);}
|
||||
.album-box .album-img-box li.selected .iconfont{color: var(--base-color);}
|
||||
.album-box .album-img-box li .iconfont{position: absolute;bottom: 0;right: 0;font-size: 30px;color: transparent;}
|
||||
.album-box .album-img-box li .album-pic{width: 100%;height: 100%;background-size: 100% 100%;background-repeat: no-repeat;background-position: center;}
|
||||
.album-box .album-img-box li .album-img-operation{position: absolute;top: 0;right: 0;bottom: 0;left: 0;background-color: rgba(0, 0, 0, .5);display: none;align-items: center;justify-content: center;color: #fff;}
|
||||
.album-box .album-img-box li .album-img-operation a{margin: 0 12px;color: #fff;font-size: 14px;}
|
||||
.multuple-list{max-height: 275px; height: auto;}
|
||||
.upload-attention{margin-left: 75px;}
|
||||
.multuple-list-box{display: flex;flex-direction: column;height: 100%;}
|
||||
.multuple-list-box .form-row{margin-top: auto;}
|
||||
.album-box .album-img-box li:hover .album-img-operation{display: flex;}
|
||||
.album-foot-operation{margin-top: auto;display: flex;justify-content: flex-end;padding: 0 25px;}
|
||||
.preview-img .layui-layer-content{padding: 0;}
|
||||
.album-content .album-img-box li:nth-child(7n){margin-right: 13px;}
|
||||
</style>
|
||||
|
||||
<!-- 清理网站缓存 start-->
|
||||
<meta http-equiv="pragma" content="no-cache">
|
||||
<meta http-equiv="Cache-Control" content="no-cache, no-store">
|
||||
<meta http-equiv="expires" content="0">
|
||||
<!-- 清理网站缓存 end-->
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="uploadImg()">添加素材</button>
|
||||
</div>
|
||||
<div class="album-box">
|
||||
<div class="album-content">
|
||||
<ul class="album-img-box"></ul>
|
||||
<div class="album-foot-operation">
|
||||
<div id="paged" class="page"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 存储图片路径 -->
|
||||
<input type="hidden" id="hidden_image_path">
|
||||
</div>
|
||||
|
||||
<!-- 相册展示 -->
|
||||
<script type="text/html" id="list_html">
|
||||
{{# layui.each(d.list,function(index, item){ }}
|
||||
<li class="img layui-show">
|
||||
<img class="album-pic" src="{{ ns.img(item.media_path + '?time=' + parseInt(new Date().getTime()/1000)) }}" onerror="onerrorFn(this)">
|
||||
<div class="album-img-operation">
|
||||
<a href="javascript:;" data-id="{{item.media_id}}" onclick="previewFile('{{item.media_path}}','{{item.media_spec}}',this)">预览</a> |
|
||||
<a href="javascript:;" data-id="{{item.media_id}}" onclick="modifyFile(this)">替换</a> |
|
||||
<a href="javascript:;" class="delete-pic" data-id="{{item.media_id}}" onclick="deleteImg(this)">删除</a>
|
||||
</div>
|
||||
<i class="iconfont iconxuanzhong"></i>
|
||||
</li>
|
||||
{{# }) }}
|
||||
</script>
|
||||
|
||||
<!-- 多图上传 -->
|
||||
<script type="text/html" id="multuple_html">
|
||||
<div class="layui-form multuple-list-box">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">本地图片</label>
|
||||
<ul class="layui-input-block multuple-list">
|
||||
<li class="multuple-list-img" id="ImgUpload">
|
||||
<span class="bg-color">+</span>
|
||||
<span>点击添加图片</span>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="upload-attention">请上传320*220素材图片</p>
|
||||
</div>
|
||||
<div class="form-row sm">
|
||||
<button class="layui-btn layui-btn-disabled" disabled="disabled" onclick="submitOne()" id="chooseListAction">提交</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 替换图片 -->
|
||||
<script type="text/html" id="modify_file_html">
|
||||
<div class="layui-form multuple-list-box">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">本地图片</label>
|
||||
<ul class="layui-input-block multuple-list">
|
||||
<li class="multuple-list-img" id="modifyFile">
|
||||
<span class="bg-color">+</span>
|
||||
<span>点击添加图片</span>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="upload-attention">请上传320*220素材图片</p>
|
||||
</div>
|
||||
<div class="form-row sm">
|
||||
<button class="layui-btn layui-btn-disabled" disabled="disabled" id="modifyFileAction">提交</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var form, upload, laytpl, layer, laypage, layer_one,element,
|
||||
picture_arr = [],
|
||||
initIdent= true,
|
||||
limit = 10,
|
||||
album_list_count = 0;
|
||||
var repeat_flag = false;
|
||||
|
||||
$(function() {
|
||||
layui.use(['form', 'laytpl', 'laypage', 'layer', 'upload', 'element'], function () {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
laypage = layui.laypage;
|
||||
element = layui.element;
|
||||
layer = layui.layer;
|
||||
upload = layui.upload;
|
||||
|
||||
init(); //初始化数据
|
||||
form.render();
|
||||
element.init();
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 图片加载
|
||||
*/
|
||||
function getFileAlbumList(page, limit) {
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/media/lists"),
|
||||
type: "POST",
|
||||
dataType: "JSON",
|
||||
async: false,
|
||||
data: {
|
||||
pic_name: $(".album-img-sreach").val(),
|
||||
page_size:limit,
|
||||
page
|
||||
},
|
||||
success: function(res) {
|
||||
res.data.status = $('.album-content-title .edit').attr('data-status');
|
||||
laytpl($("#list_html").html()).render(res.data, function(html) {
|
||||
$(".album-img-box").html(html);
|
||||
loadImgMagnify();
|
||||
});
|
||||
if(initIdent){
|
||||
album_list_count = res.data.list.length;
|
||||
$(".default-group .num").text(album_list_count);
|
||||
initIdent = false;
|
||||
}
|
||||
$("#paged").empty();
|
||||
if (res.data.count > 0) {
|
||||
//调用分页
|
||||
laypage.render({
|
||||
elem: "paged",
|
||||
count: res.data.count,
|
||||
curr: page, //当前页
|
||||
limit: limit,
|
||||
jump: function(obj, first) {
|
||||
if (!first) {
|
||||
getFileAlbumList(obj.curr, obj.limit);
|
||||
}
|
||||
form.render('checkbox');
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 图片替换
|
||||
function modifyFile(data) {
|
||||
laytpl($("#modify_file_html").html()).render({}, function(html) {
|
||||
layer_one = layer.open({
|
||||
type: 1,
|
||||
area: ['580px', '500px'],
|
||||
title: '替换图片',
|
||||
content: html,
|
||||
cancel: function() {
|
||||
$("#modifyFileAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
|
||||
},
|
||||
success: function(res) {
|
||||
//上传图片
|
||||
upload.render({
|
||||
elem: '#modifyFile',
|
||||
url: ns.url("giftcard://shop/media/modifyFile"),
|
||||
data: {
|
||||
media_id: $(data).attr('data-id')
|
||||
},
|
||||
multiple: true,
|
||||
auto: false,
|
||||
bindAction: '#modifyFileAction',
|
||||
choose: function(obj) {
|
||||
//将每次选择的文件追加到文件队列
|
||||
var files = this.files = obj.pushFile();
|
||||
//预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
|
||||
obj.preview(function(index, file, result) {
|
||||
//追加预览图片
|
||||
var html = '';
|
||||
html += '<li class="multuple-list-img upload-wrap" index="' + index + '">';
|
||||
html += '<img src="' + result + '" alt="' + file.name + '">';
|
||||
html += '<span class="upload-close-modal" id="upload_img_' + index + '">×</span>';
|
||||
html += '<div class="upload-image-curtain">50%</div>';
|
||||
html += '<div class="tips"></div>';
|
||||
html += '</li>';
|
||||
$(".multuple-list").prepend(html);
|
||||
|
||||
//删除预览图片
|
||||
$("#upload_img_" + index).bind("click", function() {
|
||||
delete files[index];
|
||||
delete picture_arr[index]; //删除所选队列
|
||||
$(this).parent('.upload-wrap').remove();
|
||||
|
||||
// uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
|
||||
|
||||
//禁止点击
|
||||
if ($(".multuple-list li").length <= 1) {
|
||||
$("#modifyFileAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
|
||||
//未选择图片时,显示添加按钮
|
||||
$("#modifyFile").show();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//禁止点击
|
||||
if ($(".multuple-list li").length > 1) {
|
||||
$("#modifyFileAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
|
||||
//隐藏添加按钮,仅替换一张图片
|
||||
$("#modifyFile").hide();
|
||||
}
|
||||
});
|
||||
},
|
||||
done: function(res, index) {
|
||||
picture_arr.push(res.data);
|
||||
var image_box = $(".upload-wrap[index='" + index + "']").parent().find(".upload-image-curtain");
|
||||
var image_tips = $(".upload-wrap[index='" + index + "']").parent().find(".tips");
|
||||
image_box.text("50%");
|
||||
image_box.show();
|
||||
if (res.code >= 0) {
|
||||
setTimeout(function() {
|
||||
image_box.text("100%");
|
||||
}, 500);
|
||||
setTimeout(function() {
|
||||
getFileAlbumList(1, limit);
|
||||
layer.close(layer_one);
|
||||
}, 1000);
|
||||
return delete this.files[index]; //删除文件队列已经上传成功的文件
|
||||
} else {
|
||||
setTimeout(function() {
|
||||
image_box.text("上传失败");
|
||||
image_tips.text(res.message);
|
||||
layer.close(layer_one);
|
||||
}, 500);
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// 预览图片
|
||||
function previewFile(path, spec,data){
|
||||
let val = $(data).parent().parent().find('img').attr("data-isShow");
|
||||
if(val){
|
||||
layer.msg("图片无法进行预览!")
|
||||
return false;
|
||||
}
|
||||
spec = spec.split("*");
|
||||
layer.open({
|
||||
type:1,
|
||||
title: false,
|
||||
closeBtn: 0,
|
||||
shadeClose: true,
|
||||
area: [spec[0]+'px', spec[1]+'px'], //宽高
|
||||
content: "<img src=" + ns.img(path) + " />",
|
||||
skin: 'preview-img'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function init() {
|
||||
getFileAlbumList(1, limit); //图片加载
|
||||
}
|
||||
|
||||
/**
|
||||
* 多图上传
|
||||
*/
|
||||
function uploadImg() {
|
||||
var imageArray=1;
|
||||
laytpl($("#multuple_html").html()).render({}, function(html) {
|
||||
layer_one = layer.open({
|
||||
type: 1,
|
||||
area: ['580px', '430px'],
|
||||
title: '本地上传',
|
||||
content: html,
|
||||
cancel: function() {
|
||||
$("#chooseListAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
|
||||
},
|
||||
success: function(res) {
|
||||
//上传图片
|
||||
upload.render({
|
||||
elem: '#ImgUpload',
|
||||
url: ns.url("giftcard://shop/media/upload"),
|
||||
data: {
|
||||
is_thumb:1,
|
||||
},
|
||||
multiple: true,
|
||||
auto: false,
|
||||
bindAction: '#chooseListAction',
|
||||
choose: function(obj) {
|
||||
imageArray=1;
|
||||
//将每次选择的文件追加到文件队列
|
||||
var files = this.files = obj.pushFile();
|
||||
//预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
|
||||
obj.preview(function(index, file, result) {
|
||||
this.num=index;
|
||||
//追加预览图片
|
||||
var html = '';
|
||||
html += '<li class="multuple-list-img upload-wrap" index="' + index + '">';
|
||||
html += '<img class="multuple-list-image" src="' + result + '" alt="' + file.name + '">';
|
||||
html += '<span class="upload-close-modal" id="upload_img_' + index + '">×</span>';
|
||||
html += '<div class="upload-image-curtain">50%</div>';
|
||||
html += '<div class="tips"></div>';
|
||||
html += '</li>';
|
||||
$(".multuple-list").prepend(html);
|
||||
//删除预览图片
|
||||
$("#upload_img_" + index).bind("click", function() {
|
||||
delete files[index];
|
||||
delete picture_arr[index]; //删除所选队列
|
||||
$(this).parent('.upload-wrap').remove();
|
||||
// uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
|
||||
//禁止点击
|
||||
if ($(".multuple-list li").length <= 1) {
|
||||
$("#chooseListAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled", "disabled");
|
||||
}
|
||||
});
|
||||
//开启点击
|
||||
if ($(".multuple-list li").length > 1) {
|
||||
$("#chooseListAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
|
||||
}
|
||||
|
||||
});
|
||||
},
|
||||
done: function(res,index) {
|
||||
let data=$('.multuple-list-image');
|
||||
// 禁止点击
|
||||
picture_arr.push(res.data);
|
||||
var image_box = $(".upload-wrap[index='" + index + "']").parent().find(".upload-image-curtain");
|
||||
var image_tips = $(".upload-wrap[index='" + index + "']").parent().find(".tips");
|
||||
image_box.text("上传汇总");
|
||||
image_box.text("50%");
|
||||
image_box.show();
|
||||
if (res.code >= 0) {
|
||||
setTimeout(function() {
|
||||
image_box.text("100%");
|
||||
}, 500);
|
||||
setTimeout(function() {
|
||||
getFileAlbumList(1, limit);
|
||||
layer.close(layer_one)
|
||||
}, 1000);
|
||||
return delete this.files[index]; //删除文件队列已经上传成功的文件
|
||||
} else {
|
||||
setTimeout(function() {
|
||||
image_box.text("上传失败");
|
||||
image_tips.text(res.message);
|
||||
layer.msg(res.message);
|
||||
}, 500);
|
||||
}
|
||||
if(imageArray==data.length){
|
||||
$("#chooseListAction").addClass("bg-color").removeClass("layui-btn-disabled").removeAttr("disabled");
|
||||
imageArray=1;
|
||||
return false
|
||||
}
|
||||
imageArray++
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 上传图片是禁止操作
|
||||
function submitOne(){
|
||||
$("#chooseListAction").removeClass("bg-color").addClass("layui-btn-disabled").attr("disabled","disabled");
|
||||
$(".upload-image-curtain").css('display','block').text('等待中')
|
||||
}
|
||||
|
||||
function deleteImg(data) {
|
||||
var flag_delete_img = false;
|
||||
var media_id = $(data).attr("data-id");
|
||||
if(!media_id){
|
||||
layer.msg("请选择图片再进行操作");
|
||||
return false;
|
||||
}
|
||||
var url = ns.url("giftcard://shop/media/delete");
|
||||
layer.confirm('删除图片会连本地存储或云存储的图片也删掉,请谨慎操作!', {
|
||||
btn: ['确定', '取消']
|
||||
}, function(index) {
|
||||
if (flag_delete_img) return;
|
||||
flag_delete_img = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
async: true,
|
||||
url,
|
||||
data: {
|
||||
media_id: media_id
|
||||
},
|
||||
dataType: "JSON",
|
||||
success: function(data) {
|
||||
flag_delete_img = false;
|
||||
layer.msg(data.message);
|
||||
if (data.code == 0) {
|
||||
getFileAlbumList(1, limit);
|
||||
layer.closeAll('page');
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function() {
|
||||
layer.close();
|
||||
});
|
||||
}
|
||||
function onerrorFn(data){
|
||||
$(data).attr("data-isShow",true)
|
||||
}
|
||||
</script>
|
||||
213
addon/giftcard/shop/view/media/media.html
Executable file
213
addon/giftcard/shop/view/media/media.html
Executable file
@@ -0,0 +1,213 @@
|
||||
<link rel="stylesheet" type="text/css" href="GIFTCARD_CSS/media_manager.css" />
|
||||
<style>
|
||||
body{background-color: #fff;}
|
||||
.media-box .media-list-box{height: 380px;margin-right: 20px;display: flex;flex-direction: column;}
|
||||
.media-box .media-list-box .media-list {flex: 1;height: 0;overflow-y: scroll}
|
||||
.media-box .media-list-box .media-list::-webkit-scrollbar{display: none;}
|
||||
.media-box .media-img{max-height: 336px;}
|
||||
.media-box .media-img li{width: 185px;height: auto; margin: 0 7px 15px;}
|
||||
.media-box .media-img li div{height: 119.7px;line-height: 119.7px;background-size: cover;background-repeat: no-repeat;background-position: center;cursor: pointer;}
|
||||
.media-box .media-img li:nth-child(5n){margin-right: 0;}
|
||||
.layui-tab-content{padding: 0;height: 449px;}
|
||||
.layui-tab{margin: 5px 0 0;}
|
||||
.layui-tab .layui-tab-item{height: 449px;}
|
||||
.layui-laypage{margin: 10px 0 0;}
|
||||
.layui-tab-title {margin: 0 20px}
|
||||
#media {padding: 20px 20px 0;}
|
||||
.page {text-align: right}
|
||||
</style>
|
||||
|
||||
<div class="layui-tab layui-tab-brief media-tab select-media-wrap">
|
||||
<ul class="layui-tab-title layui-hide">
|
||||
<li class="layui-this">选择图片</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<div id="media" class="layui-tab-item">
|
||||
<div class="media-box">
|
||||
<div class="media-content">
|
||||
<ul class="media-img"></ul>
|
||||
<div id="paged" class="page"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="media_ids" value="{$media_ids}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 图片展示 -->
|
||||
<script type="text/html" id="mediaList">
|
||||
{{# layui.each(d.list,function(index,item){ }}
|
||||
<li data-media-id="{{item.media_id}}" data-json_data='{{JSON.stringify(item)}}' class="media-list-item">
|
||||
<div class="bg-color-gray" style="background-image:url({{ ns.img(item.media_path) }})">
|
||||
{{# if( getActiveArrayIndex(item.media_id) != "-1"){ }}
|
||||
<div class="image-box-active border-color"><i class="active-index">{{ getActiveArrayIndex(item.media_id) }}</i></div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</li>
|
||||
{{# }) }}
|
||||
{{# if(d.list.length === 0){ }}
|
||||
<div class="empty-data">暂无数据</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var form, laytpl, laypage, upload,element,
|
||||
limit = 10,
|
||||
active_array = [],
|
||||
repeat_flag = false;
|
||||
layui.use(['form', 'laytpl', 'laypage', 'upload', 'element'], function() {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
laypage = layui.laypage;
|
||||
element = layui.element;
|
||||
upload = layui.upload;
|
||||
|
||||
form.render();
|
||||
//初始化数据
|
||||
init();
|
||||
|
||||
//监听搜索事件
|
||||
form.on('submit(search)', function() {
|
||||
mediaImgList(1, limit);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 素材图片加载
|
||||
* @param page
|
||||
* @param limit
|
||||
*/
|
||||
function mediaImgList(page, limit) {
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/media/media"),
|
||||
type: "POST",
|
||||
dataType: "JSON",
|
||||
async: false,
|
||||
data: {
|
||||
limit,
|
||||
page,
|
||||
media_name: $(".media-img-sreach").val(),
|
||||
app_module:ns_url.appModule,
|
||||
site_id:ns_url.siteId
|
||||
},
|
||||
success: function(res) {
|
||||
laytpl($("#mediaList").html()).render(res.data, function(data) {
|
||||
$(".media-img").html(data);
|
||||
});
|
||||
laypage.render({
|
||||
elem: 'paged',
|
||||
count: res.data.count,
|
||||
limit,
|
||||
curr: page,
|
||||
jump: function(obj, first) {
|
||||
if (!first) {
|
||||
mediaImgList(obj.curr, obj.limit);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择个体
|
||||
*/
|
||||
function checkItem() {
|
||||
$("#media").unbind('click').on("click", ".media-list-item", function() {
|
||||
var json_data = $(this).data("json_data");
|
||||
json_data.id = parseInt(json_data.media_id);
|
||||
|
||||
if ($(this).find(".image-box-active").length > 0) {
|
||||
var active_index = getDeleteActiveArrayIndex(json_data.id);
|
||||
sortActiveArrayIndex(active_index);
|
||||
$(this).find(".image-box-active").remove();
|
||||
} else {
|
||||
json_data.index = active_array.length + 1;
|
||||
if (json_data.index > imgNum) {
|
||||
$(".media-box .media-img li").each((index,item) => {
|
||||
if(active_array.length > 0 && $(item).attr("data-media-id") == active_array[0].media_id) $(item).find(".image-box-active").remove();
|
||||
});
|
||||
var active_index = active_array.length > 0 ? getDeleteActiveArrayIndex(active_array[0].media_id) : 0;
|
||||
sortActiveArrayIndex(active_index);
|
||||
--json_data.index;
|
||||
}
|
||||
active_array.push(json_data);
|
||||
var active_html = '<div class="image-box-active border-color"><i class="active-index">' + active_array.length + '</i></div>';
|
||||
$(this).find("div").append(active_html);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//获取选择图片信息
|
||||
function selectGiftCardMediaListener(callback) {
|
||||
if (typeof callback != "function") return false;
|
||||
if($(".select-media-wrap .layui-tab-content .layui-tab-item").eq(0).hasClass("layui-show")){
|
||||
callback(active_array);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//获取选中
|
||||
function getActiveArrayIndex(id) {
|
||||
var delete_index = -1;
|
||||
$.each(active_array, function(i, item) {
|
||||
if (item.media_id == id) {
|
||||
delete_index = item.index;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return delete_index;
|
||||
}
|
||||
|
||||
//删除选中
|
||||
function getDeleteActiveArrayIndex(id) {
|
||||
var delete_index;
|
||||
$.each(active_array, function(i, item) {
|
||||
if (item.id == id) {
|
||||
delete_index = item.index;
|
||||
active_array.splice(i, 1);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return delete_index;
|
||||
}
|
||||
|
||||
//重新排序
|
||||
function sortActiveArrayIndex(index) {
|
||||
$.each(active_array, function(i, item) {
|
||||
var item_index = item.index;
|
||||
if (item_index > index) {
|
||||
active_array[i]["index"] = item_index - 1;
|
||||
if ($("#media").find(".media-list-item[data-media-id = '" + item["id"] + "']").length > 0) {
|
||||
$("#media").find(".media-list-item[data-media-id = '" + item["id"] + "']").find(".image-box-active i ").text(item["index"]);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function init() {
|
||||
mediaImgList(1, limit); //分组图像
|
||||
checkItem(); //选择个体
|
||||
$(".select-media-wrap .layui-tab-content .layui-tab-item").eq(0).addClass('layui-show').siblings().removeClass('layui-show');
|
||||
}
|
||||
|
||||
var search = window.location.search,
|
||||
imgNum = parseInt(getSearchString('imgNum', search));
|
||||
function getSearchString(key, Url) {
|
||||
var str = Url;
|
||||
str = str.substring(1, str.length); // 获取URL中?之后的字符(去掉第一位的问号)
|
||||
// 以&分隔字符串,获得类似name=xiaoli这样的元素数组
|
||||
var arr = str.split("&");
|
||||
var obj = new Object();
|
||||
// 将每一个数组元素以=分隔并赋给obj对象
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
var tmp_arr = arr[i].split("=");
|
||||
obj[decodeURIComponent(tmp_arr[0])] = decodeURIComponent(tmp_arr[1]);
|
||||
}
|
||||
return obj[key];
|
||||
}
|
||||
|
||||
</script>
|
||||
150
addon/giftcard/shop/view/order/detail.html
Executable file
150
addon/giftcard/shop/view/order/detail.html
Executable file
@@ -0,0 +1,150 @@
|
||||
<style>
|
||||
.layui-layout-admin .layui-body .body-content{background:none;padding:0;}
|
||||
.order-detail{padding: 15px;box-sizing: border-box;background: white;}
|
||||
.order-information{max-width:1500px;width:100%;min-height:40px;display: flex;}
|
||||
.order-information-bottom{margin-bottom: 38px;}
|
||||
.order-information-contentOne{width:400px;height:100%;padding-right: 48px;box-sizing: border-box;}
|
||||
.order-information-contentTwo{width:600px;height:100%;padding:0 80px;box-sizing: border-box}
|
||||
.order-information>div{border-left: 1px solid rgb(245,245,245);}
|
||||
.order-information>div:nth-child(1){border-left: none;}
|
||||
.contentOne-content{display: flex; font-size:14px;color:rgb(164,164,164);margin-bottom:14px;}
|
||||
.contentOne-content:after{overflow: hidden;display: block;content: "";height: 0;clear: both;}
|
||||
.contentOne-content-text{max-width:70%;min-width: 20%;color:#333333;margin-left:16px;float: left;display: -webkit-box;-webkit-line-clamp:2;overflow: hidden;text-overflow: ellipsis;-webkit-box-orient: vertical}
|
||||
.contentOne-content-title{min-width:85px;float: left;}
|
||||
.contentOne-content-text-die{line-height:24px;}
|
||||
.shop-information{width: 100%;background:white;padding:15px;box-sizing: border-box;margin-top:15px}
|
||||
.shop-information-table{width: 100%;padding:0 48px;box-sizing: border-box;margin-bottom:10px;}
|
||||
.shop-information-table>table{width: 100%;border: 1px solid rgb(238,238,238);}
|
||||
.table-trOne{height: 48px;background:rgb(245,245,245) ;}
|
||||
th{text-align: left;padding-left:28px;box-sizing: border-box;font-weight: 500;color:#333333;border-right:1px solid rgb(238,238,238);}
|
||||
th:last-child{border:none;}
|
||||
.table-trTow{width:100%;height:60px;border-top:1px solid rgb(238,238,238);}
|
||||
.table-trTow>td{text-align: left;padding-left:28px;box-sizing: border-box;font-weight: 500;color:#333333;border-right:1px solid rgb(238,238,238);}
|
||||
.table-trTow>td:nth-child(5){color:var(--base-color)}
|
||||
.to-detail{cursor: pointer;}
|
||||
</style>
|
||||
|
||||
<!-- 订单详情、订单状态 -->
|
||||
<div class="order-detail layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">订单详情</span>
|
||||
</div>
|
||||
<div class="order-information order-information-bottom layui-card-body">
|
||||
<div class="order-information-contentOne">
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">交易流水号:</div>
|
||||
<div class="contentOne-content-text text-num">{$order_detail['out_trade_no']}</div>
|
||||
</div>
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">订单编号:</div>
|
||||
<div class="contentOne-content-text text-num">{$order_detail['order_no']}</div>
|
||||
</div>
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">订单来源:</div>
|
||||
<div class="contentOne-content-text">{$order_detail.order_from_name}</div>
|
||||
</div>
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">订单状态:</div>
|
||||
<div class="contentOne-content-text">{$order_detail.order_status_name}</div>
|
||||
</div>
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">购买人:</div>
|
||||
<div class="contentOne-content-text">{$order_detail.nickname}</div>
|
||||
</div>
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">买家留言:</div>
|
||||
<div class="contentOne-content-text contentOne-content-text-die">
|
||||
{if $order_detail['buyer_message'] == ""}
|
||||
-
|
||||
{else/}
|
||||
{$order_detail['buyer_message']}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="order-information-contentTwo">
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">礼品卡名称:</div>
|
||||
<div class="contentOne-content-text text-num">{$order_detail['order_name']}</div>
|
||||
</div>
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">权益类型:</div>
|
||||
<div class="contentOne-content-text">{if $order_detail['card_right_type'] == 'goods'}礼品卡{else/}储值卡{/if}</div>
|
||||
</div>
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">礼品卡数量:</div>
|
||||
<div class="contentOne-content-text">{$order_detail['num']}份</div>
|
||||
</div>
|
||||
<div class="contentOne-content">
|
||||
<div class="contentOne-content-title">卡内容:</div>
|
||||
<div class="contentOne-content-text">在使用时任选{$order_detail['card_right_goods_count']}件</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 商品信息 -->
|
||||
{if $order_detail['card_right_type'] == 'goods'}
|
||||
<div class="shop-information layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">商品信息</span>
|
||||
</div>
|
||||
<div class="shop-information-table layui-card-body">
|
||||
<table lay-filter="parse-table-order-product" lay-skin="line">
|
||||
<thead>
|
||||
<tr class="table-trOne">
|
||||
<th lay-data="{field:'product_name', width:200}">商品</th>
|
||||
<th lay-data="{field:'price'}">价格</th>
|
||||
{if $order_detail.card_right_goods_type != 'all'}
|
||||
<th lay-data="{field:'sale_num'}">数量</th>
|
||||
{/if}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach $order_detail['order_goods_list'] as $list_k => $order_goods_item}
|
||||
<tr class="table-trTow">
|
||||
<td>{$order_goods_item.sku_name}</td>
|
||||
<td>{$order_goods_item.price}</td>
|
||||
{if $order_detail.card_right_goods_type != 'all'}
|
||||
<td>{$order_goods_item.num}</td>
|
||||
{/if}
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<!-- 卡密信息 -->
|
||||
<div class="shop-information layui-card card-common card-brief">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">礼品卡信息</span>
|
||||
</div>
|
||||
<div class="shop-information-table layui-card-body">
|
||||
<table lay-filter="parse-table-order-product" lay-skin="line">
|
||||
<thead>
|
||||
<tr class="table-trOne">
|
||||
<th lay-data="{field:'product_name', width:200}">卡编号</th>
|
||||
<th lay-data="{field:'product_name', width:200}">权益类型</th>
|
||||
<th lay-data="{field:'sale_num'}">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach $card_list as $list_k => $card_item}
|
||||
<tr class="table-trTow">
|
||||
<td>{$card_item.card_no}</td>
|
||||
<td>{if $card_item.card_right_type == 'goods'}礼品卡{else/}储值卡{/if}</td>
|
||||
<td><span onclick="toDetail({$card_item.card_id})" class="text-color to-detail">查看详情</span></td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toDetail(id){
|
||||
window.open(ns.href('giftcard://shop/card/detail',{'card_id': id}));
|
||||
}
|
||||
</script>
|
||||
326
addon/giftcard/shop/view/order/order.html
Executable file
326
addon/giftcard/shop/view/order/order.html
Executable file
@@ -0,0 +1,326 @@
|
||||
<link rel="stylesheet" href="GIFTCARD_CSS/order_list.css"/>
|
||||
<style>
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
|
||||
.layui-layout-admin .table-tab .layui-tab-title{margin-bottom: 15px;}
|
||||
</style>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">订单号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="order_no" placeholder="请输入订单号" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">购买人昵称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="nickname" placeholder="购买人昵称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</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 date-picker-btn-seven" onclick="datePick(7, this);return false;">近7天</button>
|
||||
<button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-thirty" onclick="datePick(30, this);return false;">近30天</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="giftcard_id" value="{$giftcard_id}">
|
||||
<div class="form-row">
|
||||
<button type="button" class="layui-btn" lay-filter="search" lay-submit>筛选</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">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" lay-id="">全部</li>
|
||||
<li lay-id="balance">储值卡</li>
|
||||
<li lay-id="goods">礼品卡</li>
|
||||
</ul>
|
||||
|
||||
<div class="layui-tab-content">
|
||||
<div id="order_list"></div>
|
||||
</div>
|
||||
<div id="order_page"></div>
|
||||
</div>
|
||||
<script src="GIFTCARD_JS/order_list.js"></script>
|
||||
<script>
|
||||
var form,laypage,element,laydate;
|
||||
var is_refresh = false;
|
||||
var order_type_status_json = {'balance': '储值卡', 'goods': '礼品卡'};
|
||||
|
||||
layui.use(['laypage','laydate','form', 'element'], function(){
|
||||
form = layui.form;
|
||||
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 card_right_type = this.getAttribute('lay-id');
|
||||
|
||||
var hash_data = getHashList();
|
||||
hash_data.card_right_type = card_right_type;
|
||||
hash_data.page = 1;
|
||||
setHashOrderList(hash_data);
|
||||
});
|
||||
//监听筛选事件
|
||||
form.on('submit(search)', function(data){
|
||||
is_refresh = true;
|
||||
data.field.page = 1;
|
||||
resetOrderStatus(data.field.order_type, 2);
|
||||
setHashOrderList(data.field);
|
||||
setOrderStatusTab(data.field.order_status);
|
||||
return false;
|
||||
});
|
||||
|
||||
getHashData();
|
||||
getOrderList();//筛选
|
||||
});
|
||||
|
||||
var order = new Order();
|
||||
function getOrderList(){
|
||||
var url = ns.url("giftcard://shop/order/order", 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" : "",
|
||||
"card_right_type" : "",
|
||||
'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];
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
resetOrderStatus(form_json.card_right_type, 2);
|
||||
setOrderStatusTab(form_json.card_right_type);
|
||||
return form_json;
|
||||
}
|
||||
function getHashList(){
|
||||
var hash_arr = getHashArr();
|
||||
var form_json = {
|
||||
"start_time" : "",
|
||||
"end_time" : "",
|
||||
"nickname" : "",
|
||||
"order_no" : "",
|
||||
"card_right_type" : "",
|
||||
'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 setOrderStatusTab(order_status){
|
||||
$(".layui-tab-title li").removeClass("layui-this");
|
||||
$(".layui-tab-title li").each(function(){
|
||||
var status = $(this).attr("lay-id");
|
||||
if(status == order_status){
|
||||
$(this).addClass("layui-this")
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//重置状态tab 选项卡
|
||||
function resetOrderStatus(order_type, is_tab){
|
||||
var hash_order_type = getHashOrderType();
|
||||
if(hash_order_type != order_type || is_refresh == false){
|
||||
if(is_tab != 1 || is_refresh == false) {
|
||||
$(".layui-tab-title li").not(':first').remove();
|
||||
$(".layui-tab-title li:first").addClass("layui-this");
|
||||
}
|
||||
$.each(order_type_status_json,function(index, itemobj){
|
||||
if(is_tab != 1 || is_refresh == false) {
|
||||
$(".layui-tab-title").append('<li lay-id="' + index + '">' + itemobj + '</li>');
|
||||
}
|
||||
});
|
||||
form.render('select');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 获取哈希值order_type
|
||||
*/
|
||||
function getHashOrderType(){
|
||||
var hash_arr = getHashArr();
|
||||
var card_right_type = "";
|
||||
if(hash_arr.length > 0){
|
||||
$.each(hash_arr,function(index, itemobj){
|
||||
var item_arr = itemobj.split("=");
|
||||
if(item_arr.length == 2){
|
||||
if(item_arr[0].indexOf("card_right_type") != "-1") {
|
||||
card_right_type = item_arr[1];
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
return card_right_type;
|
||||
}
|
||||
|
||||
function setHashOrderList(data){
|
||||
localStorage.setItem('formSubmit','search'); // 表单搜索标识,防止页面重新加载
|
||||
var hash = ['url=giftcard://shop/order/order'];
|
||||
for (let key in data) {
|
||||
if (data[key] != '' && data[key] != 'all') {
|
||||
hash.push(`${key}=${data[key]}`)
|
||||
}
|
||||
}
|
||||
location.hash = hash.join('&');
|
||||
getOrderList();
|
||||
}
|
||||
/**
|
||||
* 七天时间
|
||||
*/
|
||||
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>
|
||||
230
addon/giftcard/shop/view/public/css/media_manager.css
Executable file
230
addon/giftcard/shop/view/public/css/media_manager.css
Executable file
@@ -0,0 +1,230 @@
|
||||
#media {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
.media-box {
|
||||
display: flex;
|
||||
}
|
||||
.media-list-box::-webkit-scrollbar {
|
||||
display: none; /* Chrome Safari */
|
||||
}
|
||||
|
||||
.media-list-box {
|
||||
scrollbar-width: none; /* firefox */
|
||||
-ms-overflow-style: none; /* IE 10+ */
|
||||
overflow: auto;
|
||||
margin-right: 25px;
|
||||
width: 180px;
|
||||
height: 385px;
|
||||
position: relative;
|
||||
}
|
||||
.media-list-box ul .layui-nav-bar{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.media-list-box button {
|
||||
position: absolute;
|
||||
left: 40px;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.media-list {
|
||||
width: 180px;
|
||||
background-color: #F7F7F7;
|
||||
}
|
||||
|
||||
.media-list li a{
|
||||
color: #333!important;
|
||||
}
|
||||
.media-list li a .num{position: absolute;right: 15px}
|
||||
.media-list li a .layui-nav-more{border-color: #333 transparent transparent}
|
||||
.media-list li.layui-nav-itemed a .layui-nav-more{border-color: transparent transparent #333!important;}
|
||||
.media-list li a:hover{background-color: #F7F7F7!important;}
|
||||
.media-list li a.layui-this{background-color: #E8E8E8!important;color: var(--base-color)!important;}
|
||||
.media-list li dl.layui-nav-child{background-color: #E8E8E8!important;}
|
||||
.media-list li dl.layui-nav-child a{padding-left: 20px}
|
||||
.media-list li.active {
|
||||
color: var(--base-color)!important;
|
||||
}
|
||||
|
||||
.media-content {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.media-img {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.media-img li {
|
||||
width: 125px;
|
||||
height: 155px;
|
||||
margin: 0 15px 15px 0;
|
||||
}
|
||||
|
||||
.media-img li div {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 125px;
|
||||
line-height: 125px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.media-img li div .image-box-active {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: 2px solid;
|
||||
}
|
||||
|
||||
.media-img li div .image-box-active:after {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0;
|
||||
border: 15px solid;
|
||||
border-color: transparent;
|
||||
border-top-color: var(--base-color);
|
||||
border-right-color: var(--base-color);
|
||||
}
|
||||
|
||||
.media-img li div .image-box-active i {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 2px;
|
||||
color: #fff;
|
||||
z-index: 2;
|
||||
font-style: normal;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.media-img li img {
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.media-img li video {
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.media-img li span {
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.empty-data {
|
||||
margin-top: 10px;
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* 本地图片上传*/
|
||||
.multuple-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
overflow-y: auto;
|
||||
height: 300px;
|
||||
padding-top: 10px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.multuple-list-img {
|
||||
border-color: #DDDDDD!important;
|
||||
}
|
||||
|
||||
.multuple-list li {
|
||||
position: relative;
|
||||
display: flex;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 10px;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
border: 1px solid;
|
||||
}
|
||||
|
||||
.multuple-list li img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.multuple-list li video {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.upload-close-modal {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
right: -10px;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
font-size: 18px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
background-color: rgba(0, 0, 0, .5);
|
||||
border-radius: 50%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.upload-image-curtain {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
text-align: center;
|
||||
line-height: 122px;
|
||||
font-size: 18px;
|
||||
color: #fff;
|
||||
background-color: rgba(0, 0, 0, .5);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.multuple-list li:hover .upload-close-modal {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.multuple-list li span {
|
||||
cursor: pointer;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.multuple-list li span:first-of-type {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
font-size: 18px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 30px;
|
||||
border-radius: 50%;
|
||||
color: #fff;
|
||||
}
|
||||
.media-list .layui-tree-iconArrow:after{top: 5px}
|
||||
.media-list .layui-tree-spread .layui-tree-iconArrow:after{transform: rotate(90deg);top: 8px;left: 0;}
|
||||
.media-list .layui-tree .layui-tree-entry {padding: 0;line-height: 1;height: auto;}
|
||||
.media-list .layui-tree .layui-tree-main {width: 100%;box-sizing: border-box;display: flex;align-items: center;}
|
||||
.media-list .layui-tree .layui-tree-main .layui-tree-txt{width: 100%;display: flex;justify-content: space-between;padding: 12px 10px 12px 0;}
|
||||
79
addon/giftcard/shop/view/public/css/order_list.css
Executable file
79
addon/giftcard/shop/view/public/css/order_list.css
Executable file
@@ -0,0 +1,79 @@
|
||||
.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:var(--base-color) !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: var(--base-color) ;}
|
||||
.content-row .order-price {
|
||||
border-left: 0;
|
||||
}
|
||||
.content-row .card-info {
|
||||
border-right: 0;
|
||||
}
|
||||
/*订单顶部的一行*/
|
||||
.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;}
|
||||
1
addon/giftcard/shop/view/public/csv/card_import.csv
Executable file
1
addon/giftcard/shop/view/public/csv/card_import.csv
Executable file
@@ -0,0 +1 @@
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>Կ
|
||||
|
BIN
addon/giftcard/shop/view/public/img/distribution.png
Executable file
BIN
addon/giftcard/shop/view/public/img/distribution.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
addon/giftcard/shop/view/public/img/distribution_new.png
Executable file
BIN
addon/giftcard/shop/view/public/img/distribution_new.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 390 B |
BIN
addon/giftcard/shop/view/public/img/distribution_new1.png
Executable file
BIN
addon/giftcard/shop/view/public/img/distribution_new1.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
addon/giftcard/shop/view/public/img/distribution_select.png
Executable file
BIN
addon/giftcard/shop/view/public/img/distribution_select.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
34
addon/giftcard/shop/view/public/js/media.js
Executable file
34
addon/giftcard/shop/view/public/js/media.js
Executable file
@@ -0,0 +1,34 @@
|
||||
// 素材
|
||||
function openMedia(callback, imgNum) {
|
||||
layui.use(['layer'], function () {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '素材管理',
|
||||
area: ['1050px', '600px'],
|
||||
fixed: false, //不固定
|
||||
btn: ['保存', '返回'],
|
||||
content: ns.url("giftcard://shop/media/media", {
|
||||
request_mode: 'iframe',
|
||||
mediaIds: mediaIds.toString(),
|
||||
imgNum: imgNum
|
||||
}),
|
||||
yes: function (index, layero) {
|
||||
var iframeWin = document.getElementById(layero.find('iframe')[0]['name']).contentWindow;//得到iframe页的窗口对象,执行iframe页的方法:
|
||||
iframeWin.selectGiftCardMediaListener(function (obj) {
|
||||
if (typeof callback == "string") {
|
||||
try {
|
||||
eval(callback + '(obj)');
|
||||
layer.close(index);
|
||||
} catch (e) {
|
||||
console.error('回调函数' + callback + '未定义');
|
||||
}
|
||||
} else if (typeof callback == "function") {
|
||||
callback(obj);
|
||||
layer.close(index);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
265
addon/giftcard/shop/view/public/js/order_list.js
Executable file
265
addon/giftcard/shop/view/public/js/order_list.js
Executable file
@@ -0,0 +1,265 @@
|
||||
/**
|
||||
* 渲染订单列表
|
||||
*/
|
||||
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;
|
||||
json.giftcard_id = order.giftcard_id;
|
||||
// if(order.order_type == 4 && order.order_data_status == 3){
|
||||
// var h = '<div class="sub-selected-checkbox" data-json='+ JSON.stringify(json) +' data-id='+ order.order_id +' disabled>';
|
||||
// h += '<input type="checkbox" lay-skin="primary" lay-filter="subCheckbox" name="" disabled>';
|
||||
// h += '</div>';
|
||||
// }else{
|
||||
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: "30%",
|
||||
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.card_cover.split(",")[0]) + '" src="' + ns.img(orderitem.card_cover.split(",")[0]) + '">';
|
||||
h += '</div>';
|
||||
h += '<div class="info">';
|
||||
h += '<a href="' + ns.href("giftcard://shop/order/detail", {order_id: orderitem.order_id}) + '" target="_blank" title="' + orderitem.order_name + '" class="multi-line-hiding text-color-sub">' + orderitem.order_name + '</a>';
|
||||
h += '</div>';
|
||||
h += '</div>';
|
||||
|
||||
return h;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "数量",
|
||||
width: "8%",
|
||||
align: "right",
|
||||
className: "order-price",
|
||||
template: function (orderitem, order) {
|
||||
var h = '<div style="text-align: center;">';
|
||||
h += '<span>' + orderitem.card_price + '</span><br>';
|
||||
h += '<span>' + orderitem.num + '件</span>';
|
||||
h += '</div>';
|
||||
return h;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "权益类型",
|
||||
width: "10%",
|
||||
align: "right",
|
||||
className: "card-right-type",
|
||||
template: function (orderitem, order) {
|
||||
var h = '<div style="padding-right: 15px;">';
|
||||
h += '<span>' + (orderitem.card_right_type=='goods' ? '礼品卡' : '储值卡') + '</span>';
|
||||
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.pay_money + '</span>';
|
||||
h += '</div>';
|
||||
return h;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "买家",
|
||||
width: "14%",
|
||||
align: "left",
|
||||
className: "goods-num",
|
||||
template: function (orderitem, order) {
|
||||
var h = '<div style="text-align: left;">';
|
||||
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 += '<span>' + orderitem.mobile + '</span>';
|
||||
h += '</div>';
|
||||
return h;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "订单状态",
|
||||
width: "10%",
|
||||
align: "center",
|
||||
className: "transaction-status",
|
||||
merge: true,
|
||||
template: function (orderitem, order) {
|
||||
var html = '<div>' + order.order_status_name + '</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:"11%",
|
||||
merge: true,
|
||||
template: function (orderitem, order) {
|
||||
var html='';
|
||||
html += '<div>';
|
||||
html += '<a class="layui-btn text-color" href="'+ns.href("giftcard://shop/order/detail", {order_id: 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="9">';
|
||||
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 + (order.is_video_number ? '(视频号)' : '') +'</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;
|
||||
|
||||
if(order.buyer_message != '') {
|
||||
//订单项底部
|
||||
tbody += '<tr class="bottom-row">';
|
||||
tbody += '<td colspan="9">';
|
||||
tbody += '<span class="order-item-header" style="margin-right:10px;">买家备注:' + order.buyer_message + '</span>';
|
||||
tbody += '</td>';
|
||||
tbody += '</tr>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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("收起");
|
||||
}
|
||||
})
|
||||
359
addon/giftcard/shop/view/transfer/list.html
Executable file
359
addon/giftcard/shop/view/transfer/list.html
Executable file
@@ -0,0 +1,359 @@
|
||||
<style>
|
||||
.rights_interests{
|
||||
line-height: 13px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">筛选</h2>
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">卡编号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="number" autocomplete="off" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">赠与人</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="has_keywords" placeholder="请输入账号昵称或手机号" autocomplete="off" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">受赠人</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="receive_keywords" placeholder="请输入账号昵称或手机号" autocomplete="off" class="layui-input" />
|
||||
</div>
|
||||
</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="manjian_tab">
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="record_list" lay-filter="record_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="rights_interests">
|
||||
<div class=rights_interests>
|
||||
<p><span>积分:{{d.point}}</span></p><br>
|
||||
<p><span>余额:{{d.balance}}</span></p><br>
|
||||
<!-- <p><span>优惠卷:{{d.coupon_name}}</span></p>-->
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="order_status">
|
||||
<div class=rights_interests>
|
||||
{{# if(d.status == 0){ }}待支付{{# }else if(d.status == 1){ }}已完成{{# }else{ }}已取消{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="poster_status">
|
||||
<div class='table-title'>
|
||||
{{# if(d.status == 0){ }}
|
||||
<div class='title-pic' style="text-align:left">未激活</div>
|
||||
{{# }else if(d.status == 1){ }}
|
||||
<div class='title-pic text-color' style="text-align:left">已激活</div>
|
||||
{{# }else if(d.status == 2){ }}
|
||||
<div class='title-pic' style="text-align:left">已作废</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
{{#if(d.type==1){ }}
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
{{# } }}
|
||||
{{# if(d.type==2){ }}
|
||||
<a class="layui-btn" lay-event="detail">兑换卡列表</a>
|
||||
{{# if(d.status==0){ }}
|
||||
<a class="layui-btn" lay-event="start">批量激活</a>
|
||||
<a class="layui-btn" lay-event="close">批量作废</a>
|
||||
{{# }else if(d.status==0 || d.status==1){ }}
|
||||
<a class="layui-btn" lay-event="close">批量作废</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn" lay-event="exportcard">导出</a>
|
||||
{{#} }}
|
||||
</div>
|
||||
</script>
|
||||
<!-- 电子卡编辑html -->
|
||||
<script type="text/html" id="label_change">
|
||||
<div class="layui-form member-form" id="reset_label" lay-filter="form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">数量:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="card_count" class="layui-input len-short" autocomplete="off" min="0">
|
||||
</div>
|
||||
</div>
|
||||
<input class="reset-label-id" type="hidden" name="card_id" value="{{d.id}}" />
|
||||
<div class="form-row sm">
|
||||
<button class="layui-btn" lay-submit lay-filter="setlabel">确定</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closeLabel()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl,layer_label;
|
||||
layui.use(['form', 'laytpl','laydate'], function () {
|
||||
var table,
|
||||
form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
laydate = layui.laydate;
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laytpl = layui.laytpl;
|
||||
table = new Table({
|
||||
elem: '#record_list',
|
||||
url: ns.url("giftcard://shop/giftcard/transferrecordlist"),
|
||||
cols: [
|
||||
[{
|
||||
field: 'number',
|
||||
title: '卡编号',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
}, {
|
||||
field: 'card_name',
|
||||
title: '礼品卡名称',
|
||||
unresize: 'false',
|
||||
width: '12%',
|
||||
}, {
|
||||
field: 'has_member_name',
|
||||
title: '赠与人',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
},{
|
||||
field: 'receive_member_name',
|
||||
title: '受赠人',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
},{
|
||||
title: '转赠时间',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}
|
||||
// {
|
||||
// title: '操作',
|
||||
// toolbar: '#operation',
|
||||
// unresize: 'false',
|
||||
// align:'right'
|
||||
// }
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit':
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/editgiftcard?id="+data.id);
|
||||
break;
|
||||
case 'detail':
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/recordlist?id="+data.id);
|
||||
break;
|
||||
case 'close': //关闭
|
||||
close(data.id);
|
||||
break;
|
||||
case 'start': //启用
|
||||
start(data.id);
|
||||
break;
|
||||
case 'exportcard'://导出
|
||||
exportcard(data.id,data.code);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 关闭
|
||||
*/
|
||||
function close(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定作废吗?',{
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
}, function () {
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/editstatus"),
|
||||
data: {
|
||||
id: id, status: 2
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function(){
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启
|
||||
*/
|
||||
function start(id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.confirm('确定激活吗?', {
|
||||
btn: ['确定','取消'] //按钮
|
||||
,cancel: function(index, layero){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
},function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("giftcard://shop/giftcard/editstatus"),
|
||||
data: {
|
||||
id: id, status: 1
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function(index){
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
|
||||
function edit(data){
|
||||
laytpl($("#label_change").html()).render(data, function(html) {
|
||||
layer_label = layer.open({
|
||||
title: '编辑数量',
|
||||
skin: 'layer-tips-class',
|
||||
type: 1,
|
||||
area: ['450px'],
|
||||
content: html,
|
||||
success: function(){
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
form.render();
|
||||
}
|
||||
function exportcard(id,name){
|
||||
var param = {request_mode: 'download','id':id,'name':name};
|
||||
location.href = ns.url("giftcard://shop/giftcard/exportcard",param);
|
||||
return false;
|
||||
}
|
||||
form.on('submit(setlabel)', function(obj) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
var field = obj.field;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ns.url("giftcard://shop/giftcard/editGiftCard"),
|
||||
data: {
|
||||
'card_id': field.card_id,
|
||||
'card_count': field.card_count
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
layer.closeAll('page');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 七天时间
|
||||
*/
|
||||
function datePick(date_num,event_obj){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
$(event_obj).addClass('selected');
|
||||
// alert(new Date().format("yyyy-MM-dd hh:mm"));
|
||||
var now_date = new Date();
|
||||
|
||||
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 HH:mm:ss",0);//当前日期
|
||||
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);
|
||||
|
||||
}
|
||||
function closeLabel() {
|
||||
layer.close(layer_label);
|
||||
}
|
||||
function add() {
|
||||
location.hash = ns.hash("giftcard://shop/giftcard/addelectgiftcard");
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user