修改商品

This commit is contained in:
邹景立 2021-03-11 16:16:49 +08:00
parent cd562da07d
commit 5970a1dbf5
19 changed files with 219 additions and 164 deletions

View File

@ -13,7 +13,7 @@ use think\console\Output;
* Class UserLevel * Class UserLevel
* @package app\data\command * @package app\data\command
*/ */
class UserLevel extends Command class UserUpgrade extends Command
{ {
protected function configure() protected function configure()
{ {

View File

@ -51,7 +51,7 @@ class ShopGoods extends Controller
elseif ($this->type === 'recycle') $query->where(['deleted' => 1]); elseif ($this->type === 'recycle') $query->where(['deleted' => 1]);
else $this->error("无法加载 {$this->type} 数据列表!"); else $this->error("无法加载 {$this->type} 数据列表!");
// 列表排序并显示 // 列表排序并显示
$query->like('code,name,mark')->equal('status,cate'); $query->like('code,name,marks,cateids')->equal('status');
$query->order('sort desc,id desc')->page(); $query->order('sort desc,id desc')->page();
} }
@ -65,7 +65,7 @@ class ShopGoods extends Controller
public function select() public function select()
{ {
$query = $this->_query($this->table); $query = $this->_query($this->table);
$query->equal('status,cate')->like('code,name,mark'); $query->equal('status')->like('code,name,marks')->in('cates');
$query->where(['deleted' => 0])->order('sort desc,id desc')->page(); $query->where(['deleted' => 0])->order('sort desc,id desc')->page();
} }
@ -78,13 +78,9 @@ class ShopGoods extends Controller
*/ */
protected function _page_filter(array &$data) protected function _page_filter(array &$data)
{ {
$this->marks = GoodsService::instance()->getMarkList(); $this->marks = GoodsService::instance()->getMarkData();
$this->clist = GoodsService::instance()->getCateList('arr2table'); $this->cates = GoodsService::instance()->getCateData();
$clist = $this->app->db->name('ShopGoodsCate')->whereIn('id', array_column($data, 'cate'))->column('pid,name,status', 'id'); GoodsService::instance()->buildItemData($data, false);
foreach ($data as &$vo) {
$vo['cate'] = $clist[$vo['cate']] ?? $vo['cate'];
$vo['mark'] = str2arr($vo['mark'] ?: '', ',', $this->marks);
}
} }
/** /**
@ -153,12 +149,15 @@ class ShopGoods extends Controller
$data['code'] = CodeExtend::uniqidNumber(14, 'G'); $data['code'] = CodeExtend::uniqidNumber(14, 'G');
} }
if ($this->request->isGet()) { if ($this->request->isGet()) {
$data['mark'] = str2arr($data['mark'] ?? ''); $data['marks'] = str2arr($data['marks'] ?? '');
$this->marks = GoodsService::instance()->getMarkList(); $data['payment'] = str2arr($data['payment'] ?? '');
$this->cates = GoodsService::instance()->getCateList('arr2table'); $data['cateids'] = str2arr($data['cateids'] ?? '');
$this->levels = $this->app->db->name('DataUserLevel')->where(['status' => 1])->order('number asc,id desc')->select()->toArray(); $this->marks = GoodsService::instance()->getMarkData();
$this->trucks = $this->app->db->name('ShopTruckTemplate')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->column('code,name'); $this->cates = GoodsService::instance()->getCateData();
$this->discounts = $this->app->db->name('DataUserDiscount')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->select()->toArray(); $this->trucks = $this->app->db->name('ShopTruckTemplate')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->column('code,name', 'code');
$this->payments = $this->app->db->name('ShopPayment')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->column('type,code,name', 'code');
$this->upgrades = $this->app->db->name('DataUserUpgrade')->where(['status' => 1, 'deleted' => 0])->order('number asc,id desc')->column('number,name', 'id');
$this->discounts = $this->app->db->name('DataUserDiscount')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->column('id,name,items', 'id');
// 商品规格处理 // 商品规格处理
$fields = 'goods_sku `sku`,goods_code,goods_spec `key`,price_selling `selling`,price_market `market`,number_virtual `virtual`,number_express `express`,reward_balance `balance`,reward_integral `integral`,status'; $fields = 'goods_sku `sku`,goods_code,goods_spec `key`,price_selling `selling`,price_market `market`,number_virtual `virtual`,number_express `express`,reward_balance `balance`,reward_integral `integral`,status';
$data['data_items'] = json_encode($this->app->db->name('ShopGoodsItem')->where(['goods_code' => $data['code']])->column($fields, 'goods_spec'), JSON_UNESCAPED_UNICODE); $data['data_items'] = json_encode($this->app->db->name('ShopGoodsItem')->where(['goods_code' => $data['code']])->column($fields, 'goods_spec'), JSON_UNESCAPED_UNICODE);
@ -169,7 +168,8 @@ class ShopGoods extends Controller
[$count, $items] = [0, array_column(json_decode($data['data_items'], true), 0)]; [$count, $items] = [0, array_column(json_decode($data['data_items'], true), 0)];
foreach ($items as $item) $count += intval($item['status']); foreach ($items as $item) $count += intval($item['status']);
if (empty($count)) $this->error('无效的的商品价格信息!'); if (empty($count)) $this->error('无效的的商品价格信息!');
$data['mark'] = arr2str($data['mark'] ?? []); $data['marks'] = arr2str($data['marks'] ?? []);
$data['payment'] = arr2str($data['payment'] ?? []);
if (empty($data['price_market'])) $data['price_market'] = min(array_column($items, 'market')); if (empty($data['price_market'])) $data['price_market'] = min(array_column($items, 'market'));
if (empty($data['price_selling'])) $data['price_selling'] = min(array_column($items, 'selling')); if (empty($data['price_selling'])) $data['price_selling'] = min(array_column($items, 'selling'));
$this->app->db->name('ShopGoodsItem')->where(['goods_code' => $data['code']])->update(['status' => 0]); $this->app->db->name('ShopGoodsItem')->where(['goods_code' => $data['code']])->update(['status' => 0]);

View File

@ -84,7 +84,7 @@ class UserDiscount extends Controller
} }
$vo['items'] = json_encode($rule, JSON_UNESCAPED_UNICODE); $vo['items'] = json_encode($rule, JSON_UNESCAPED_UNICODE);
} else { } else {
$query = $this->app->db->name('DataUserLevel'); $query = $this->app->db->name('DataUserUpgrade');
$this->levels = $query->where(['status' => 1])->order('number asc')->select()->toArray(); $this->levels = $query->where(['status' => 1])->order('number asc')->select()->toArray();
if (empty($this->levels)) $this->error('未配置用户等级!'); if (empty($this->levels)) $this->error('未配置用户等级!');
if (!empty($vo['items'])) foreach (json_decode($vo['items'], true) as $item) { if (!empty($vo['items'])) foreach (json_decode($vo['items'], true) as $item) {

View File

@ -7,16 +7,16 @@ use think\admin\Controller;
/** /**
* 用户等级管理 * 用户等级管理
* Class UserLevel * Class UserUpgrade
* @package app\data\controller * @package app\data\controller
*/ */
class UserLevel extends Controller class UserUpgrade extends Controller
{ {
/** /**
* 绑定数据表 * 绑定数据表
* @var string * @var string
*/ */
private $table = 'DataUserLevel'; private $table = 'DataUserUpgrade';
/** /**
* 用户等级管理 * 用户等级管理

View File

@ -43,7 +43,7 @@ abstract class Auth extends Controller
protected function initialize() protected function initialize()
{ {
// 接口数据类型 // 接口数据类型
$this->type = input('api') ?: $this->request->header('api-name'); $this->type = $this->request->header('api-name') ?: input('api');
$this->type = $this->type ?: $this->request->header('api-type'); $this->type = $this->type ?: $this->request->header('api-type');
if (empty($this->type) || empty(UserService::TYPES[$this->type])) { if (empty($this->type) || empty(UserService::TYPES[$this->type])) {
$this->error("接口通道未定义!"); $this->error("接口通道未定义!");

View File

@ -29,7 +29,7 @@ class Goods extends Controller
*/ */
public function getMark() public function getMark()
{ {
$this->success('获取标签成功', GoodsService::instance()->getMarkList()); $this->success('获取标签成功', GoodsService::instance()->getMarkData());
} }
/** /**

View File

@ -74,11 +74,39 @@ class GoodsService extends Service
return $cates; return $cates;
} }
/**
* 获取分类数据
* @param boolean $simple 简化数据
* @return array
*/
public function getCateData($simple = true): array
{
$cates = $this->app->db->name('ShopGoodsCate')->column('id,pid,name', 'id');
foreach ($cates as $cate) if (isset($cates[$cate['pid']])) {
$cates[$cate['id']]['parent'] =& $cates[$cate['pid']];
}
foreach ($cates as $key => $cate) {
$id = $cate['id'];
$cates[$id]['ids'][] = $cate['id'];
$cates[$id]['names'][] = $cate['name'];
while (isset($cate['parent']) && $cate = $cate['parent']) {
$cates[$id]['ids'][] = $cate['id'];
$cates[$id]['names'][] = $cate['name'];
}
$cates[$id]['ids'] = array_reverse($cates[$id]['ids']);
$cates[$id]['names'] = array_reverse($cates[$id]['names']);
if ($simple && count($cates[$id]['names']) !== $this->getCateLevel()) {
unset($cates[$key]);
}
}
return $cates;
}
/** /**
* 获取商品标签数据 * 获取商品标签数据
* @return array * @return array
*/ */
public function getMarkList(): array public function getMarkData(): array
{ {
$map = ['status' => 1]; $map = ['status' => 1];
$query = $this->app->db->name('ShopGoodsMark'); $query = $this->app->db->name('ShopGoodsMark');
@ -88,29 +116,24 @@ class GoodsService extends Service
/** /**
* 商品数据绑定 * 商品数据绑定
* @param array $data 商品主数据 * @param array $data 商品主数据
* @param boolean $simple 简化数据
* @return array * @return array
* @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException * @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException * @throws \think\db\exception\ModelNotFoundException
*/ */
public function buildItemData(array &$data = []): array public function buildItemData(array &$data = [], $simple = true): array
{ {
$cates = $this->app->db->name('ShopGoodsCate')->column('id,pid,name', 'id'); $cates = $this->getCateData();
foreach ($cates as $cate) if (isset($cates[$cate['pid']])) {
$cates[$cate['id']]['parent'] =& $cates[$cate['pid']];
}
$codes = array_unique(array_column($data, 'code'));
$query = $this->app->db->name('ShopGoodsItem')->withoutField('id,status,create_at');
$items = $query->whereIn('goods_code', $codes)->where(['status' => 1])->select()->toArray();
$marks = $this->app->db->name('ShopGoodsMark')->where(['status' => 1])->column('name'); $marks = $this->app->db->name('ShopGoodsMark')->where(['status' => 1])->column('name');
$query = $this->app->db->name('ShopGoodsItem')->withoutField('id,status,create_at');
$items = $query->whereIn('goods_code', array_unique(array_column($data, 'code')))->where(['status' => 1])->select()->toArray();
foreach ($data as &$vo) { foreach ($data as &$vo) {
$vo['marks'] = str2arr($vo['mark'], ',', $marks); [$vo['marks'], $vo['cateids'], $vo['cateinfo']] = [str2arr($vo['marks'], ',', $marks), str2arr($vo['cateids']), []];
$vo['cates'] = $cates[$vo['cate']] ?? []; foreach ($cates as $cate) if (in_array($cate['id'], $vo['cateids'])) $vo['cateinfo'] = $cate;
$vo['slider'] = explode('|', $vo['slider']); [$vo['slider'], $vo['specs'], $vo['items']] = [str2arr($vo['slider'], '|'), json_decode($vo['data_specs'], true), []];
$vo['specs'] = json_decode($vo['data_specs'], true);
$vo['items'] = [];
foreach ($items as $item) if ($item['goods_code'] === $vo['code']) $vo['items'][] = $item; foreach ($items as $item) if ($item['goods_code'] === $vo['code']) $vo['items'][] = $item;
unset($vo['mark'], $vo['sort'], $vo['status'], $vo['deleted'], $vo['data_items'], $vo['data_specs']); if ($simple) unset($vo['marks'], $vo['sort'], $vo['status'], $vo['deleted'], $vo['data_items'], $vo['data_specs']);
} }
return $data; return $data;
} }

View File

@ -221,7 +221,7 @@ class RebateCurrentService extends Service
$pids = array_reverse(explode('-', trim($this->user['path'], '-'))); $pids = array_reverse(explode('-', trim($this->user['path'], '-')));
if (empty($pids)) return false; if (empty($pids)) return false;
// 获取拥有差额奖励的等级 // 获取拥有差额奖励的等级
$query = $this->app->db->name('DataUserLevel'); $query = $this->app->db->name('DataUserUpgrade');
$numbs = $query->whereLike('rule', '%,' . self::PRIZE_05 . ',%')->column('number'); $numbs = $query->whereLike('rule', '%,' . self::PRIZE_05 . ',%')->column('number');
// 获取可以参与奖励的代理 // 获取可以参与奖励的代理
$query = $this->app->db->name('DataUser')->whereIn('vip_number', $numbs); $query = $this->app->db->name('DataUser')->whereIn('vip_number', $numbs);
@ -275,6 +275,6 @@ class RebateCurrentService extends Service
protected function checkLevelPrize(string $prize, int $level): bool protected function checkLevelPrize(string $prize, int $level): bool
{ {
$map = [['number', '=', $level], ['rebate_rule', 'like', "%,{$prize},%"]]; $map = [['number', '=', $level], ['rebate_rule', 'like', "%,{$prize},%"]];
return $this->app->db->name('DataUserLevel')->where($map)->count() > 0; return $this->app->db->name('DataUserUpgrade')->where($map)->count() > 0;
} }
} }

View File

@ -229,7 +229,7 @@ class UserService extends Service
$teamsUsers = $this->app->db->name('DataUser')->whereLike('path', "%-{$uid}-%")->count(); $teamsUsers = $this->app->db->name('DataUser')->whereLike('path', "%-{$uid}-%")->count();
$orderAmount = $this->app->db->name('ShopOrder')->where(['uid' => $uid])->whereIn('status', [3, 4, 5])->sum('amount_total'); $orderAmount = $this->app->db->name('ShopOrder')->where(['uid' => $uid])->whereIn('status', [3, 4, 5])->sum('amount_total');
// 计算用户级别 // 计算用户级别
foreach ($this->app->db->name('DataUserLevel')->where(['status' => 1])->order('number desc')->cursor() as $item) { foreach ($this->app->db->name('DataUserUpgrade')->where(['status' => 1])->order('number desc')->cursor() as $item) {
$l1 = empty($item['goods_vip_status']) || $user['buy_vip_entry'] > 0; $l1 = empty($item['goods_vip_status']) || $user['buy_vip_entry'] > 0;
$l2 = empty($item['teams_users_status']) || $item['teams_users_number'] <= $teamsUsers; $l2 = empty($item['teams_users_status']) || $item['teams_users_number'] <= $teamsUsers;
$l3 = empty($item['order_amount_status']) || $item['order_amount_number'] <= $orderAmount; $l3 = empty($item['order_amount_status']) || $item['order_amount_number'] <= $orderAmount;
@ -249,7 +249,7 @@ class UserService extends Service
$tmpNumber = $query->whereRaw("a.uid={$uid} and a.payment_status=1 and a.status in (3,4,5) and b.vip_entry=1")->max('b.vip_number'); $tmpNumber = $query->whereRaw("a.uid={$uid} and a.payment_status=1 and a.status in (3,4,5) and b.vip_entry=1")->max('b.vip_number');
if ($tmpNumber > $vipNumber) { if ($tmpNumber > $vipNumber) {
$map = ['number' => $tmpNumber, 'status' => 1]; $map = ['number' => $tmpNumber, 'status' => 1];
$levelInfo = $this->app->db->name('DataUserLevel')->where($map)->find(); $levelInfo = $this->app->db->name('DataUserUpgrade')->where($map)->find();
if (!empty($levelInfo)) [$vipNumber, $vipName] = [$levelInfo['number'], $levelInfo['name']]; if (!empty($levelInfo)) [$vipNumber, $vipName] = [$levelInfo['number'], $levelInfo['name']];
} }
// 统计订单统计 // 统计订单统计

View File

@ -2,15 +2,15 @@
use app\data\command\OrderClear; use app\data\command\OrderClear;
use app\data\command\UserBalance; use app\data\command\UserBalance;
use app\data\command\UserLevel; use app\data\command\UserUpgrade;
use app\data\command\UserTransfer; use app\data\command\UserTransfer;
use think\Console; use think\Console;
if (app()->request->isCli()) { if (app()->request->isCli()) {
Console::starting(function (Console $console) { Console::starting(function (Console $console) {
$console->addCommand(UserLevel::class);
$console->addCommand(OrderClear::class); $console->addCommand(OrderClear::class);
$console->addCommand(UserBalance::class); $console->addCommand(UserBalance::class);
$console->addCommand(UserUpgrade::class);
$console->addCommand(UserTransfer::class); $console->addCommand(UserTransfer::class);
}); });
} else { } else {

View File

@ -5,33 +5,47 @@
<form onsubmit="return false;" id="GoodsForm" data-auto="true" method="post" class='layui-form layui-card' autocomplete="off"> <form onsubmit="return false;" id="GoodsForm" data-auto="true" method="post" class='layui-form layui-card' autocomplete="off">
<div class="layui-card-body padding-40 padding-bottom-20"> <div class="layui-card-body padding-40 padding-bottom-20">
{notempty name='marks'} <!--{notempty name='cates'}-->
<div class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">商品标签</span>
<span class="color-desc margin-left-5">Mark Name</span>
<div class="tags-container layui-textarea">
{foreach $marks as $mark}{if isset($vo.mark) && is_array($vo.mark) && in_array($mark, $vo.mark)}
<label class="think-checkbox notselect"><input checked type="checkbox" name="mark[]" value="{$mark}" lay-ignore> {$mark}</label>
{else}
<label class="think-checkbox notselect"><input type="checkbox" name="mark[]" value="{$mark}" lay-ignore> {$mark}</label>
{/if}{/foreach}
</div>
</div>
{/notempty}
{notempty name='cates'}
<label class="layui-form-item block relative"> <label class="layui-form-item block relative">
<span class="color-green font-w7 label-required-prev">所属分类</span> <span class="color-green font-w7 label-required-prev">所属分类</span>
<span class="color-desc margin-left-5">Category Name</span> <span class="color-desc margin-left-5">Category Name</span>
<select class="layui-select" name="cate" lay-search> <select class="layui-select" name="cateids" lay-search>
{foreach $cates as $cate}{if isset($vo.cate) and $vo.cate eq $cate.id} {foreach $cates as $cate}{if in_array($cate.id, $cate.ids)}
<option {$cate.sat} selected value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option> <option selected value="{:arr2str($cate.ids)}">{:join(' ', $cate.names)}</option>
{else} {else}
<option {$cate.sat} value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option> <option value="{:arr2str($cate.ids)}">{:join(' ', $cate.names)}</option>
{/if}{/foreach} {/if}{/foreach}
</select> </select>
</label> </label>
{/notempty} <!--{/notempty}-->
<!--{notempty name='marks'}-->
<div class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">商品标签</span>
<span class="color-desc margin-left-5">Goods Mark Name</span>
<div class="layui-textarea">
{foreach $marks as $mark}{if isset($vo.marks) && is_array($vo.marks) && in_array($mark, $vo.marks)}
<input checked type="checkbox" name="marks[]" value="{$mark}" title="{$mark}">
{else}
<input type="checkbox" name="marks[]" value="{$mark}" title="{$mark}">
{/if}{/foreach}
</div>
</div>
<!--{/notempty}-->
<!--{notempty name='payments'}-->
<div class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">支付方式</span>
<span class="color-desc margin-left-5">Goods Pyament Name</span>
<div class="layui-textarea">
{foreach $payments as $payment}{if isset($vo.payment) && is_array($vo.payment) && in_array($payment.code, $vo.payment)}
<input checked type="checkbox" name="payment[]" value="{$payment.code}" title="{$payment.name}">
{else}
<input type="checkbox" name="payment[]" value="{$payment.code}" title="{$payment.name}">
{/if}{/foreach}
</div>
</div>
<!--{/notempty}-->
<label class="layui-form-item block relative"> <label class="layui-form-item block relative">
<span class="color-green font-w7">商品名称</span> <span class="color-green font-w7">商品名称</span>
@ -77,91 +91,99 @@
</table> </table>
</div> </div>
<div class="layui-clear goods-item-box"> <div class="goods-item-box">
<div class="layui-clear">
<fieldset> <fieldset>
<legend><span class="layui-badge think-bg-violet">物流配送发货</span></legend> <legend><span class="layui-badge think-bg-violet">商品返利配置</span></legend>
<div class="layui-form-item"> <div class="layui-form-item">
{foreach ['虚拟商品,无需物流配送','实物商品,需要物流配送'] as $k=>$v} {foreach ['非返利商品,其代理不会获得奖励','是返利商品,其代理将会获得奖励'] as $k => $v}
{if (isset($vo.truck_type) and $vo.truck_type eq $k) or (empty($vo.truck_type) and $k eq 0)} {if (isset($vo.rebate_type) and $vo.rebate_type eq $k) or (empty($vo.rebate_type) and $k eq 0)}
<input type="radio" name="truck_type" value="{$k}" title="{$v}" checked> <input type="radio" name="rebate_type" value="{$k}" title="{$v}" checked>
{else}
<input type="radio" name="truck_type" value="{$k}" title="{$v}">
{/if}{/foreach}
</div>
</fieldset>
<fieldset>
<legend><span class="layui-badge think-bg-violet">入会礼包配置</span></legend>
<div class="layui-form-item">
{foreach ['非入会礼包,购买后不会影响等级','是入会礼包,购买后升级会员级别'] as $k=>$v}
{if (isset($vo.vip_entry) and $vo.vip_entry eq $k) or (empty($vo.vip_entry) and $k eq 0)}
<input type="radio" name="vip_entry" value="{$k}" title="{$v}" checked lay-filter="vip_entry">
{else}
<input type="radio" name="vip_entry" value="{$k}" title="{$v}" lay-filter="vip_entry">
{/if}{/foreach}
</div>
</fieldset>
{notempty name='levels'}
<fieldset>
<legend><span class="layui-badge think-bg-violet">升级用户级别</span></legend>
<label class="layui-form-item">
<select name="vip_upgrade" class="layui-select" lay-filter="vip_upgrade">
{foreach $levels as $level}{if isset($vo.vip_upgrade) and $vo.vip_upgrade eq $level.number}
<option selected value="{$level.number|default=0}">[ {$level.number|default='0'} ] {$level.name|default=''}</option>
{else} {else}
<option value="{$level.number|default=0}">[ {$level.number|default='0'} ] {$level.name|default=''}</option> <input type="radio" name="rebate_type" value="{$k}" title="{$v}">
{/if}{/foreach} {/if}{/foreach}
</select> </div>
<span class="help-block">购买此商品用户可直接升级至此等级!</span> </fieldset>
</label> <fieldset>
</fieldset> <legend><span class="layui-badge think-bg-violet">入会礼包配置</span></legend>
{/notempty} <div class="layui-form-item">
{foreach ['非入会礼包,购买后不会升级等级','是入会礼包,购买后升级会员级别'] as $k=>$v}
{notempty name='discounts'} {if (isset($vo.vip_entry) and $vo.vip_entry eq $k) or (empty($vo.vip_entry) and $k eq 0)}
<fieldset> <input type="radio" name="vip_entry" value="{$k}" title="{$v}" checked lay-filter="vip_entry">
<legend><span class="layui-badge think-bg-violet">用户折扣方案</span></legend>
<label class="layui-form-item">
<select name="discount_id" class="layui-select" lay-search>
<option value="0"> -- 不设置 --</option>
{foreach $discounts as $discount}{if isset($vo.discount_id) and $vo.discount_id eq $discount.id}
<option selected value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
{else} {else}
<option value="{$discount.id|default=0}">{$discount.name|default='0'}</option> <input type="radio" name="vip_entry" value="{$k}" title="{$v}" lay-filter="vip_entry">
{/if}{/foreach} {/if}{/foreach}
</select> </div>
<span class="help-block">用户级别达到规则可享有折扣!</span> </fieldset>
</label> <!--{notempty name='upgrades'}-->
</fieldset> <fieldset>
{/notempty} <legend><span class="layui-badge think-bg-violet">升级用户级别</span></legend>
<label class="layui-form-item">
<select name="vip_upgrade" class="layui-select" lay-filter="vip_upgrade">
{foreach $upgrades as $upgrade}{if isset($vo.vip_upgrade) and $vo.vip_upgrade eq $upgrade.number}
<option selected value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{else}
<option value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{/if}{/foreach}
</select>
<span class="help-block">购买此商品用户可直接升级至此等级!</span>
</label>
</fieldset>
<!--{/notempty}-->
</div>
{notempty name='levels'} <div class="layui-clear">
<fieldset> <fieldset>
<legend><span class="layui-badge think-bg-violet">限制最低购买等级</span></legend> <legend><span class="layui-badge think-bg-violet">物流配送发货类型</span></legend>
<label class="layui-form-item"> <div class="layui-form-item">
<select name="limit_low_vip" class="layui-select"> {foreach ['虚拟商品,无需物流配送','实物商品,需要物流配送'] as $k=>$v}
<option value="0"> -- 不设置 --</option> {if (isset($vo.truck_type) and $vo.truck_type eq $k) or (empty($vo.truck_type) and $k eq 0)}
{foreach $levels as $level}{if isset($vo.limit_low_vip) and $vo.limit_low_vip eq $level.number} <input type="radio" name="truck_type" value="{$k}" title="{$v}" checked>
<option selected value="{$level.number|default=0}">[ {$level.number|default='0'} ] {$level.name|default=''}</option>
{else} {else}
<option value="{$level.number|default=0}">[ {$level.number|default='0'} ] {$level.name|default=''}</option> <input type="radio" name="truck_type" value="{$k}" title="{$v}">
{/if}{/foreach} {/if}{/foreach}
</select> </div>
<span class="help-block"> </fieldset>
限制此等级及低于此等级的用户不能购买!</span> <!--{notempty name='discounts'}-->
</label> <fieldset>
</fieldset> <legend><span class="layui-badge think-bg-violet">用户购买折扣方案</span></legend>
{/notempty} <label class="layui-form-item">
<select name="discount_id" class="layui-select" lay-search>
<fieldset> <option value="0"> -- 不设置 --</option>
<legend><span class="layui-badge think-bg-violet">商品限购数量</span></legend> {foreach $discounts as $discount}{if isset($vo.discount_id) and $vo.discount_id eq $discount.id}
<label class="layui-form-item"> <option selected value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
<input class="layui-input" data-blur-number="0" name="limit_max_num" value="{$vo.limit_max_num|default=0}" placeholder="请输入商品限购数量"> {else}
<span class="help-block">限制每人可购买数量(为 0 时不限制)!</span> <option value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
</label> {/if}{/foreach}
</fieldset> </select>
<span class="help-block">当用户等级达到指定等级后可享有折扣!</span>
</label>
</fieldset>
<!--{/notempty}-->
<!--{notempty name='upgrades'}-->
<fieldset>
<legend><span class="layui-badge think-bg-violet">限制最低购买等级</span></legend>
<label class="layui-form-item">
<select name="limit_low_vip" class="layui-select">
<option value="0"> -- 不设置 --</option>
{foreach $upgrades as $upgrade}{if isset($vo.limit_low_vip) and $vo.limit_low_vip eq $upgrade.number}
<option selected value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{else}
<option value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{/if}{/foreach}
</select>
<span class="help-block">限制此等级及低于此等级的用户不能购买!</span>
</label>
</fieldset>
<!--{/notempty}-->
<fieldset>
<legend><span class="layui-badge think-bg-violet">商品限购数量</span></legend>
<label class="layui-form-item">
<input class="layui-input" data-blur-number="0" name="limit_max_num" value="{$vo.limit_max_num|default=0}" placeholder="请输入商品限购数量">
<span class="help-block">限制每人可购买数量(为 0 时不限制)!</span>
</label>
</fieldset>
</div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -260,7 +282,7 @@
<label class="layui-form-item block"> <label class="layui-form-item block">
<span class="font-w7 color-green">商品简介描述</span> <span class="font-w7 color-green">商品简介描述</span>
<textarea class="layui-textarea" placeholder="请输入商品简介描述" name="remark">{$vo.remark|default=''|raw}</textarea> <textarea class="layui-textarea" placeholder="请输入商品简介描述" name="remarks">{$vo.remarks|default=''|raw}</textarea>
</label> </label>
<div class="layui-form-item block"> <div class="layui-form-item block">

View File

@ -67,20 +67,24 @@
商品名称:<span>{$vo.name|default='--'}</span><br> 商品名称:<span>{$vo.name|default='--'}</span><br>
</div> </div>
</td> </td>
<td class="text-left"> <td class="text-left sub-span-blue">
<div> <div>
<!--{notempty name='clist'}--> {notempty name='vo.marks'}{foreach $vo.marks as $mark}
所属分类:{$vo.cate.name|default='-'}<br> <b class="notselect nowrap layui-badge layui-bg-cyan">{$mark}</b>
<!--{/notempty}-->
</div>
<div>
{notempty name='vo.mark'}{foreach $vo.mark as $mark}
<span class="notselect nowrap layui-badge layui-bg-cyan">{$mark}</span>
{/foreach}{/notempty} {/foreach}{/notempty}
</div> </div>
<div class="nowrap">
{notempty name='vo.cateinfo'}
{:join('<span class="layui-icon layui-icon-right font-s10"></span>', $vo.cateinfo.names)}<br>
{/notempty}
</div>
</td> </td>
<td class='nowrap'> <td class='nowrap'>
<div>销售状态:{eq name='vo.status' value='0'}<span class="layui-badge">已下架</span>{else}<span class="layui-badge layui-bg-green">销售中</span>{/eq}</div> <div>
{eq name='vo.status' value='0'}<span class="layui-badge">已下架</span>{else}<span class="layui-badge layui-bg-green">销售中</span>{/eq}
{eq name='vo.vip_entry' value='0'}<span class="layui-badge">非入会礼包</span>{else}<span class="layui-badge layui-bg-green">是入会礼包</span>{/eq}
{eq name='vo.truck_type' value='0'}<span class="layui-badge">无需快递配送</span>{else}<span class="layui-badge layui-bg-green">需要快递配送</span>{/eq}
</div>
<div>创建时间:{$vo.create_at|format_datetime}</div> <div>创建时间:{$vo.create_at|format_datetime}</div>
</td> </td>
<td class='nowrap sub-span-blue'> <td class='nowrap sub-span-blue'>

View File

@ -21,26 +21,26 @@
<label class="layui-input-inline"> <label class="layui-input-inline">
<select class="layui-select" name="mark" lay-search> <select class="layui-select" name="mark" lay-search>
<option value="">-- 全部标签 --</option> <option value="">-- 全部标签 --</option>
{foreach $marks as $mark}{if input('mark','') eq $mark} {foreach $marks as $mark}{if input('mark','') eq ','.$mark.','}
<option selected value="{$mark}">{$mark}</option> <option selected value=",{$mark},">{$mark}</option>
{else} {else}
<option value="{$mark}">{$mark}</option> <option value=",{$mark},">{$mark}</option>
{/if}{/foreach} {/if}{/foreach}
</select> </select>
</label> </label>
</div> </div>
{/notempty} {/notempty}
{notempty name='clist'} {notempty name='cates'}
<div class="layui-form-item layui-inline"> <div class="layui-form-item layui-inline">
<label class="layui-form-label">商品分类</label> <label class="layui-form-label">商品分类</label>
<label class="layui-input-inline"> <label class="layui-input-inline">
<select class="layui-select" name="cate" lay-search> <select class="layui-select" name="cateids" lay-search>
<option value="">-- 全部分类 --</option> <option value="">-- 全部分类 --</option>
{foreach $clist as $cate}{if input('cate','') eq $cate.id} {foreach $cates as $cate}{if input('cateids','') eq ','.$cate.id.','}
<option {$cate.sat} selected value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option> <option selected value=",{$cate.id},">{:join(' ', $cate.names)}</option>
{else} {else}
<option {$cate.sat} value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option> <option value=",{$cate.id},">{:join(' ', $cate.names)}</option>
{/if}{/foreach} {/if}{/foreach}
</select> </select>
</label> </label>

View File

@ -9,7 +9,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<div class="relative block"> <div class="relative block">
<span class="color-green font-w7">库存数据</span> <span class="color-green font-w7">库存数据</span>
<span class="color-desc margin-left-5">Stock Data</span> <span class="color-desc margin-left-5">Goods Stock Data</span>
<table class="layui-table border-0 margin-0" lay-skin="line"> <table class="layui-table border-0 margin-0" lay-skin="line">
<colgroup> <colgroup>
<col style="width:auto"> <col style="width:auto">

View File

@ -242,7 +242,10 @@ return array(
'app\\data\\service\\NewsService' => $baseDir . '/app/data/service/NewsService.php', 'app\\data\\service\\NewsService' => $baseDir . '/app/data/service/NewsService.php',
'app\\data\\service\\OrderService' => $baseDir . '/app/data/service/OrderService.php', 'app\\data\\service\\OrderService' => $baseDir . '/app/data/service/OrderService.php',
'app\\data\\service\\PaymentService' => $baseDir . '/app/data/service/PaymentService.php', 'app\\data\\service\\PaymentService' => $baseDir . '/app/data/service/PaymentService.php',
'app\\data\\service\\PrizeService' => $baseDir . '/app/data/service/PrizeService.php', 'app\\data\\service\\RebateCurrentService' => $baseDir . '/app/data/service/RebateCurrentService.php',
'app\\data\\service\\RebateMonthService' => $baseDir . '/app/data/service/RebateMonthService.php',
'app\\data\\service\\RebateQuarterService' => $baseDir . '/app/data/service/RebateQuarterService.php',
'app\\data\\service\\RebateYearService' => $baseDir . '/app/data/service/RebateYearService.php',
'app\\data\\service\\TruckService' => $baseDir . '/app/data/service/TruckService.php', 'app\\data\\service\\TruckService' => $baseDir . '/app/data/service/TruckService.php',
'app\\data\\service\\UserService' => $baseDir . '/app/data/service/UserService.php', 'app\\data\\service\\UserService' => $baseDir . '/app/data/service/UserService.php',
'app\\data\\service\\payment\\AlipayPaymentService' => $baseDir . '/app/data/service/payment/AlipayPaymentService.php', 'app\\data\\service\\payment\\AlipayPaymentService' => $baseDir . '/app/data/service/payment/AlipayPaymentService.php',

View File

@ -371,7 +371,10 @@ class ComposerStaticInit4f89fd0e0503ccf740f2fa5757825d7b
'app\\data\\service\\NewsService' => __DIR__ . '/../..' . '/app/data/service/NewsService.php', 'app\\data\\service\\NewsService' => __DIR__ . '/../..' . '/app/data/service/NewsService.php',
'app\\data\\service\\OrderService' => __DIR__ . '/../..' . '/app/data/service/OrderService.php', 'app\\data\\service\\OrderService' => __DIR__ . '/../..' . '/app/data/service/OrderService.php',
'app\\data\\service\\PaymentService' => __DIR__ . '/../..' . '/app/data/service/PaymentService.php', 'app\\data\\service\\PaymentService' => __DIR__ . '/../..' . '/app/data/service/PaymentService.php',
'app\\data\\service\\PrizeService' => __DIR__ . '/../..' . '/app/data/service/PrizeService.php', 'app\\data\\service\\RebateCurrentService' => __DIR__ . '/../..' . '/app/data/service/RebateCurrentService.php',
'app\\data\\service\\RebateMonthService' => __DIR__ . '/../..' . '/app/data/service/RebateMonthService.php',
'app\\data\\service\\RebateQuarterService' => __DIR__ . '/../..' . '/app/data/service/RebateQuarterService.php',
'app\\data\\service\\RebateYearService' => __DIR__ . '/../..' . '/app/data/service/RebateYearService.php',
'app\\data\\service\\TruckService' => __DIR__ . '/../..' . '/app/data/service/TruckService.php', 'app\\data\\service\\TruckService' => __DIR__ . '/../..' . '/app/data/service/TruckService.php',
'app\\data\\service\\UserService' => __DIR__ . '/../..' . '/app/data/service/UserService.php', 'app\\data\\service\\UserService' => __DIR__ . '/../..' . '/app/data/service/UserService.php',
'app\\data\\service\\payment\\AlipayPaymentService' => __DIR__ . '/../..' . '/app/data/service/payment/AlipayPaymentService.php', 'app\\data\\service\\payment\\AlipayPaymentService' => __DIR__ . '/../..' . '/app/data/service/payment/AlipayPaymentService.php',

2
vendor/services.php vendored
View File

@ -1,5 +1,5 @@
<?php <?php
// This file is automatically generated at:2021-03-10 10:48:21 // This file is automatically generated at:2021-03-11 11:29:29
declare (strict_types = 1); declare (strict_types = 1);
return array ( return array (
0 => 'think\\admin\\Library', 0 => 'think\\admin\\Library',