初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
var prefix = '{$root}'.replace(/(http:\/\/)|(https:\/\/)/g, '') + '_';
{if isset($token) && $store_id > 0}
localStorage.setItem(prefix + 'cashierToken', '{$token}');
localStorage.setItem(prefix + 'siteId', '{:request()->siteid()}');
localStorage.setItem(prefix + 'globalStoreId', '{$store_id}');
{else/}
localStorage.removeItem(prefix + 'cashierToken');
localStorage.removeItem(prefix + 'siteId');
localStorage.removeItem(prefix + 'globalStoreId');
{/if}
location.href = '{$store_id ? $url : $url."/pages/login/login"}';
</script>
</body>
</html>

View File

@@ -0,0 +1,643 @@
<link rel="stylesheet" href="SHOP_CSS/order_detail.css"/>
<link rel="stylesheet" href="SHOP_CSS/package.css"/>
<!-- 订单详情、订单状态 -->
<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 layui-card-body order-information-bottom">
<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_type_name']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">订单来源:</div>
<div class="contentOne-content-text">收银台</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">来源门店:</div>
<div class="contentOne-content-text">{$order_detail['store_name']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">买家:</div>
<div class="contentOne-content-text">
{if $order_detail.member_id}
<a class="text-color" href="javascript:toMemberDetail();">{$order_detail.nickname}</a>
{else/}
散客
{/if}
</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">付款方式:</div>
<div class="contentOne-content-text">{$order_detail.pay_type_name}</div>
</div>
</div>
<!-- <div class="order-information-contentTwo">-->
<!-- <div class="contentOne-content">-->
<!-- <div class="contentOne-content-title">配送方式:</div>-->
<!-- <div class="contentOne-content-text">{$order_detail['delivery_type_name']}</div>-->
<!-- </div>-->
<!-- <div class="contentOne-content">-->
<!-- <div class="contentOne-content-title">收货人:</div>-->
<!-- <div class="contentOne-content-text">{$order_detail['name']}</div>-->
<!-- </div>-->
<!-- <div class="contentOne-content">-->
<!-- <div class="contentOne-content-title">联系电话:</div>-->
<!-- <div class="contentOne-content-text">{$order_detail['mobile']}</div>-->
<!-- </div>-->
<!-- <div class="contentOne-content">-->
<!-- <div class="contentOne-content-title">收货地址:</div>-->
<!-- <input type="text" class="address" id="address" value="{$order_detail['full_address']}-{$order_detail['address']}">-->
<!-- <div class="contentOne-content-text contentOne-content-text-die" title="{$order_detail['full_address']}-{$order_detail['address']}">{$order_detail['full_address']}-{$order_detail['address']}</div>-->
<!-- <div class="copy-icon-box"><a href="javascript:ns.copy('address');" class="iconfont iconfuzhi" style="margin-top: 4px"></a></div>-->
<!-- </div>-->
<!-- </div>-->
<div class="order-information-contentTwo">
<div class="contentOne-content">
<div class="contentOne-content-title">营销活动:</div>
<div class="contentOne-content-text">{$order_detail['promotion_type_name']}</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 class="contentOne-content">
<div class="contentOne-content-title">备注:</div>
<div class="contentOne-content-text">
{if $order_detail['remark'] == ""}
-
{else/}
{$order_detail['remark']}
{/if}
</div>
</div>
</div>
</div>
<div class="layui-card-header">
<span class="card-title">订单状态</span>
</div>
<div class="order-information-contentOne order-orderStatus-contentOne layui-card-body">
<div class="contentOne-content">
<div class="contentOne-content-title">订单状态:</div>
<div class="contentOne-content-text contentOne-content-textNew">{$order_detail.order_status_name}</div>
</div>
<div class="contentTow-operation">
<div class="contentTow-operation-content bg-color-light-9 contentTow-operation-new" onclick="orderRemark('{$order_detail.order_id}')">备注</div>
{php}
$order_json_data = json_decode($order_detail['order_status_action'], true);
$action = $order_json_data['action'] ?? [];
{/php}
{if !empty($action)}
{foreach $action as $action_k => $action_item}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new" href="javascript:orderAction('{$action_item.action}', '{$order_detail.order_id}')">{$action_item.title}</a>
{/foreach}
{/if}
{if $order_detail.order_type == 1 && in_array($order_detail.order_status, [0,1,3,4,10])}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new" href="javascript:printDeliverOrder('{$order_detail.order_id}');" >打印发货单</a>
{/if}
{if $order_detail.order_type == 1 && $order_detail.order_status == 1}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new" href="javascript:orderPrintElectronicsheet('{$order_detail.order_id}');" >打印电子面单</a>
{/if}
</div>
<div class="orderStatus">
<div class="orderStatus-content-title">提醒:</div>
<div class="orderStatus-content-text">
<p class="text-tile">买家付款成功后,货款将直接进入您的商户号(微信、支付宝)</p>
<p class="text-tile">请及时关注你发出的包裹状态,确保可以配送至买家手中</p>
<p class="text-tile">如果买家表示没收到货或货物有问题,请及时联系买家处理,友好协商</p>
</div>
</div>
</div>
{if isset($order_detail.form)}
<!-- 表单信息 -->
<div class="formFields">
<div class="layui-card-header">
<span class="card-title">表单信息</span>
</div>
<div class="order-information order-formFields layui-card-body">
{foreach name="$order_detail.form" item="vo"}
<div class="contentOne-content">
<div class="contentOne-content-title">{$vo.value.title}</div>
<div class="contentOne-content-text">
{if $vo.controller == 'Img'}
{foreach name="$vo.img_lists" item="io"}
<div class="form-img">
<div class="form-img-wrap">
<img src="{:img($io)}" layer-src>
</div>
</div>
{/foreach}
{else/}
{if isset($vo.val)}
{$vo.val}
{/if}
{/if}
</div>
</div>
{/foreach}
</div>
</div>
{/if}
{if $order_detail['is_invoice'] == 1}
<!-- 发票信息 -->
<div class="formFields">
<div class="layui-card-header">
<span class="card-title">发票信息</span>
</div>
<div class="order-information order-formFields layui-card-body">
<div class="contentOne-content">
<div class="contentOne-content-title">发票类型:</div>
<div class="contentOne-content-text">{if $order_detail['invoice_type'] == 1}纸质{else/}电子{/if}{if $order_detail['is_tax_invoice'] == 1}专票{else/}普票{/if}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">发票抬头:</div>
<div class="contentOne-content-text">{$order_detail['invoice_title']}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">发票抬头类型:</div>
<div class="contentOne-content-text">{$order_detail['invoice_title_type'] == 1 ? '个人' : '企业'}</div>
</div>
{if $order_detail['invoice_title_type'] == 2}
<div class="contentOne-content">
<div class="contentOne-content-title">纳税人识别号:</div>
<div class="contentOne-content-text">{$order_detail['taxpayer_number']}</div>
</div>
{/if}
<div class="contentOne-content">
<div class="contentOne-content-title">发票内容:</div>
<div class="contentOne-content-text">{$order_detail['invoice_content']}</div>
</div>
{if $order_detail['invoice_type'] == 1}
<div class="contentOne-content">
<div class="contentOne-content-title">发票邮寄地址:</div>
<div class="contentOne-content-text">{$order_detail['invoice_full_address']}</div>
</div>
{else/}
<div class="contentOne-content">
<div class="contentOne-content-title">发票接收邮件:</div>
<div class="contentOne-content-text">{$order_detail['invoice_email']}</div>
</div>
{/if}
<div class="contentOne-content">
<div class="contentOne-content-title">发票费用:</div>
<div class="contentOne-content-text">¥{$order_detail.invoice_money}</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">发票税率:</div>
<div class="contentOne-content-text">{$order_detail.invoice_rate}%</div>
</div>
<div class="contentOne-content">
<div class="contentOne-content-title">发票邮寄费用:</div>
<div class="contentOne-content-text">¥{$order_detail.invoice_delivery_money}</div>
</div>
</div>
</div>
{/if}
</div>
{if !empty($order_detail['package_list'])}
<!-- 物流信息 -->
<div class="distribution layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">物流信息</span>
</div>
<div class="order-information layui-card-body">
<div class="order-information-contentOne order-package">
<ul class="package-list">
{foreach $order_detail['package_list'] as $package_k => $package_v}
<li {if $package_k == 0}class="text-color bg-color-light-9 border-color-light-9"{/if}>{$package_v.package_name}</li>
{/foreach}
</ul>
<div class="order-package-content">
{foreach $order_detail['package_list'] as $package_k => $package_v}
<div class="layui-tab-item{if $package_k == 0} layui-show{/if}">
<div class="package-inner">
<div class="package-head">
<div class="contentOne-content">
<label class="contentOne-content-title">发货时间:</label>
<div class="contentOne-content-text">{:time_to_date($package_v["delivery_time"])}</div>
</div>
{if $order_detail.delivery_type == 'express' && $package_v.delivery_type == 1}
<div class="contentOne-content">
<label class="contentOne-content-title">物流公司:</label>
<div class="contentOne-content-text">{$package_v.express_company_name}</div>
</div>
<div class="contentOne-content">
<label class="contentOne-content-title">运单号:</label>
<div class="contentOne-content-text">{$package_v.delivery_no}</div>
</div>
{/if}
<div class="contentOne-content">
{php}
$packageV = json_encode($package_v);
{/php}
{if in_array($order_detail.order_status,[1,3])}
<a class="contentTow-operation-content bg-color-light-9 contentTow-operation-new" onclick="logisticsOperation('{$order_detail.order_id}','{$package_v.id}',{$packageV})">修改物流</a>
{/if}
</div>
</div>
<div class="package-body">
<div class="goods-list">
{foreach $package_v['goods_list'] as $goods_k => $goods_v }
<div class="goods-item">
<div class="package-inner-goods-item-inner">
<div class="package-inner-goods-item-image"><img layer-src src="{:img($goods_v.sku_image,'')}"></div>
<div class="package-inner-goods-item-info">
<p class="package-inner-goods-item-name multi-line-hiding" title="{:$goods_v.sku_name}">{:$goods_v.sku_name}</p>
<p class="package-inner-goods-item-name">数量:{$goods_v.num}</p>
</div>
</div>
</div>
{/foreach}
</div>
</div>
<div class="package-inner-express">
<div class="package-inner-content-item">
<div class="package-head">
{if $order_detail.delivery_type == 'express' && $package_v.delivery_type == 1}
<div class="contentOne-content" style="padding-right: 20px;">
<label class="contentOne-content-title">物流状态:</label>
<div class="contentOne-content-text">
{if $package_v.trace.success}
{$package_v.trace.status_name}
{else/}
{$package_v.trace.reason}
{/if}
</div>
</div>
{/if}
{if $package_v.type == 'electronicsheet'}
<div class="contentOne-content">
<a onclick="printElectronicsheet({order_detail.order_id})" class="contentTow-operation-content bg-color-light-9 contentTow-operation-new">重新打印电子面单</a>
</div>
{/if}
</div>
</div>
{if $package_v.trace.success}
<div class="shop-operation-time">
<ul class="layui-timeline">
{foreach $package_v.trace.list as $trace_k => $trace_v}
<li class="layui-timeline-item">
<div class="layui-time-left">
<p>{:date('Y-m-d', strtotime($trace_v.datetime))}</p>
<p>{:date('H:i:s', strtotime($trace_v.datetime))}</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">{$trace_v.remark}</div>
</div>
</li>
{/foreach}
</ul>
</div>
{/if}
</div>
</div>
</div>
{/foreach}
</div>
</div>
</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:'price'}">价格</th>
<th lay-data="{field:'sale_num'}">数量</th>
<th lay-data="{field:'total_money'}">小计(元)</th>
<th lay-data="{field:'refund_status'}">退款状态</th>
<th lay-data="{field:'shipping_status'}">状态</th>
</tr>
</thead>
<tbody>
{foreach $order_detail['order_goods'] as $list_k => $order_goods_item}
<tr class="table-trTow">
<td>{$order_goods_item.sku_name}</td>
<td>{$order_goods_item.price}</td>
<td>{$order_goods_item.num}</td>
<td>{$order_goods_item.goods_money}</td>
<td>
{if $order_goods_item.refund_status != 0}
<div><a class="" href='{:href_url("shop/orderrefund/detail?order_goods_id=".$order_goods_item["order_goods_id"])}'>{$order_goods_item.refund_status_name}</a></div>
{php}
$refund_money = $order_goods_item['shop_active_refund_money']+$order_goods_item['refund_real_money'];
$refund_money = sprintf("%.2f",$refund_money);
{/php}
{if $refund_money > 0}
<div style="color:red;">¥{$refund_money}</div>
{/if}
{/if}
</td>
<td>{$order_goods_item.delivery_status_name}</td>
</tr>
{if isset($order_goods_item.form)}
<tr>
<td colspan="6">
<div class="order-goods-form">
{foreach name="$order_goods_item.form" item="vo"}
<div class="form-item">
<div class="field-title">{$vo.value.title}</div>
<div class="field-content">
{if $vo.controller == 'Img'}
{foreach name="$vo.img_lists" item="io"}
<div class="form-img">
<div class="form-img-wrap">
<img src="{:img($io)}" layer-src>
</div>
</div>
{/foreach}
{else/}
{if isset($vo.val)}
{$vo.val}
{/if}
{/if}
</div>
</div>
{/foreach}
</div>
</td>
</tr>
{/if}
{/foreach}
</tbody>
</table>
<div class="table-trThree table-trFour">
<div>
<p>商品总额:<span>¥{$order_detail["goods_money"]}</span></p>
</div>
<div>
<p>店铺优惠券:<span>¥{$order_detail["coupon_money"]}</span></p>
</div>
<div>
<p>店铺优惠:<span>¥{$order_detail["promotion_money"]}</span></p>
</div>
{if $order_detail["point_money"] > 0}
<div>
<p>积分抵扣:<span>¥{$order_detail["point_money"]}</span></p>
</div>
{/if}
{if $order_detail["balance_money"] > 0}
<div>
<p>余额:<span>¥{$order_detail["balance_money"]}</span></p>
</div>
{/if}
<div>
<p>订单调价:<span>¥{$order_detail["adjust_money"]}</span></p>
</div>
<div>
<p>配送费用:<span>¥{$order_detail["delivery_money"]}</span></p>
</div>
<div>
<p>发票费用:<span>¥{$order_detail["invoice_money"]}</span></p>
</div>
<div>
<p>发票邮寄费用:<span>¥{$order_detail["invoice_delivery_money"]}</span></p>
</div>
{if $order_detail["member_card_money"] > 0}
<div>
<p>会员卡:<span>¥{$order_detail["member_card_money"]}</span></p>
</div>
{/if}
</div>
<div class="table-settlement">
订单共<span>{$order_detail["goods_num"]}</span>件商品,共计<span>¥{$order_detail["order_money"]}</span>
</div>
</div>
</div>
{notempty name="$order_detail.order_log"}
<!-- 订单操作 -->
<div class="shop-operation layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">订单操作日志</span>
</div>
<div class="shop-operation-time layui-card-body">
<ul class="layui-timeline">
{foreach name="$order_detail.order_log" item="vo"}
<li class="layui-timeline-item">
<div class="layui-time-left">
<p>{:date('Y-m-d', $vo.action_time)}</p>
<p>{:date('H:i:s', $vo.action_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.action}</div>
</div>
</li>
{/foreach}
</ul>
</div>
</div>
{/notempty}
{include file="app/shop/view/order/order_common_action.html" /}
<!-- 修改订单收货地址 -->
{include file="app/shop/view/order/order_action.html" /}
<!-- 发货 -->
{include file="app/shop/view/order/order_delivery_action.html" /}
<!-- 主动退款 -->
{include file="app/shop/view/order/shop_active_refund.html" /}
<!--打印相关-->
{include file="app/shop/view/electronicsheet/print_html.html" /}
<script src="SHOP_JS/lodop_funcs.js"></script>
<script>
$('.package-list li').click(function(){
$(this).addClass('text-color bg-color-light-9 border-color-light-9').siblings('li').removeClass('text-color bg-color-light-9 border-color-light-9');
$('.order-package-content .layui-tab-item:eq('+ $(this).index() +')').addClass('layui-show').siblings('.layui-tab-item').removeClass('layui-show');
});
function printElectronicsheet(order_id,template_id)
{
$.ajax({
type: 'post',
url: ns.url("shop/delivery/printElectronicsheet"),
dataType: 'JSON',
data:{
order_id:order_id,
template_id:template_id
},
success: function(res) {
layer.msg(res.message);
if (res.code >= 0){
expressSheet(res.data.PrintTemplate);
}
}
});
}
function logisticsOperation(orderId,packageId,dataJson) {
//获取模板
var getTpl = $("#logistics_html").html();
var data = {};
data.dataJson = dataJson;
$.ajax({
type: "post",
url: ns.url("shop/express/getShopExpressCompanyList"),
dataType: 'json',
async: false,
success: function (res) {
if (res.code == 0) {
data.express_company = res.data;
}
}
});
laytpl(getTpl).render(data, function (html) {
layer.open({
type: 1,
shadeClose: true,
shade: 0.3,
fixed: false,
scrollbar: false,
title: "修改物流信息",
area: '800px',
content: html,
cancel: function (index, layero) {
//右上角关闭回调
layer.close(index);
//return false 开启该代码可禁止点击该按钮关闭
},
success: function (layero, index) {
form.render();
form.on('radio(delivery_type)', function (data) {
if (data.value == 1) {
$(".express-type").removeClass("layui-hide");
} else {
$(".express-type").addClass("layui-hide");
}
});
var submitting = false;
form.on('submit(button_logistics_order)', function (data) {
var express_company_id = data.field.express_company_id;
if (data.field.delivery_type == 1 && express_company_id <= 0) {
layer.msg('请选择物流公司', {time: 2000, icon: 5});
return;
}
if (data.field.delivery_no == "" && data.field.delivery_type == 1) {
layer.msg('物流单号不能为空', {time: 2000, icon: 5});
return;
}
if (submitting) return false;
submitting = true;
data.field.order_id = orderId;
data.field.package_id = packageId;
$.ajax({
type: "post",
url: ns.url('shop/delivery/editOrderDelivery'),
async: true,
dataType: 'json',
data: data.field,
success: function (res) {
layer.msg(res.message);
if(res.code == 0){
layer.close(layer.index - 1);
reloadList();
}
submitting = false;
}
})
});
}
});
})
}
function toMemberDetail(){
let member_id = '{$order_detail.member_id}';
window.open(ns.href("shop/member/editmember", {member_id:member_id}));
}
</script>
<script type="text/html" id="logistics_html">
<div class="order-delivery">
<div class="layui-form">
<input type="hidden" name="type" value="manual">
<div class="layui-form-item delivery-type">
<label class="layui-form-label">发货方式</label>
<div class="layui-input-block">
{{# if(d.dataJson.delivery_type == 1){ }}
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="1" title="物流发货" checked>
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="0" title='无需物流'>
{{# }else{ }}
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="1" title="物流发货">
<input type="radio" lay-filter="delivery_type" name="delivery_type" value="0" title='无需物流' checked>
{{# } }}
</div>
</div>
{{# if(d.dataJson.delivery_type == 1){ }}
<div class="express-type">
{{# }else{ }}
<div class="express-type layui-hide">
{{# } }}
<div class="layui-form-item logistics-company">
<label class="layui-form-label">物流公司</label>
<div class="layui-input-block len-mid">
<select name="express_company_id" lay-search lay-filter="express_company">
<option value="">请选择物流公司</option>
{{# layui.each(d.express_company, function(index, item){ }}
{{# if(item.company_id == d.dataJson.express_company_id){ }}
<option value="{{ item.company_id }}" selected>{{ item.company_name }}</option>
{{# }else{ }}
<option value="{{ item.company_id }}">{{ item.company_name }}</option>
{{# } }}
{{# }); }}
</select>
</div>
</div>
<div class="layui-form-item express-number">
<label class="layui-form-label">快递单号</label>
<div class="layui-input-block">
<input type="text" name="delivery_no" placeholder="" autocomplete="off" class="layui-input len-mid" value="{{d.dataJson.delivery_no}}">
</div>
</div>
</div>
<div class="form-row">
<button type="button" class="layui-btn" lay-submit lay-filter="button_logistics_order">保存</button>
</div>
</div>
</div>
</script>

View File

@@ -0,0 +1,563 @@
<link rel="stylesheet" href="SHOP_CSS/order_list.css"/>
<style>
.layui-tab-content .order-operation-btn{display: flex;align-items: center;margin-top: 10px}
.layui-tab-content .order-operation-all-btn{width: 4%;text-align: center; }
.layui-tab-content .btn-box{ width: 96%;}
.layui-tab-content .order-operation-btn .btn-box span{padding: 0px 5px;font-size: 12px;line-height: 2;height: auto;display: inline-block; border: 1px solid #C9C9C9;cursor: pointer;}
.sub-selected-checkbox{display: flex;justify-content: center;align-items: center;}
.layui-layout-admin .layui-table-cell{height: 32px; line-height: 32px;}
.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" lay-filter="order_list">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">搜索方式</label>
<div class="layui-input-inline">
<select name="order_label" >
{foreach $order_label_list as $k => $label_val}
<option value="{$k}">{$label_val}</option>
{/foreach}
</select>
</div>
<div class="layui-form-mid">&nbsp;</div>
<div class="layui-input-inline">
<input type="text" name="search" autocomplete="off" class="layui-input" />
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">来源门店</label>
<div class="layui-input-inline">
<select name="store_id">
<option value="">请选择来源门店</option>
{foreach $store_list as $item}
<option value="{$item.store_id}">{$item.store_name}</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">
<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 class="layui-inline">
<label class="layui-form-label">订单类型</label>
<div class="layui-input-inline">
<select name="cashier_order_type" >
<option value="">全部</option>
{foreach $cashier_order_type_list as $cashier_order_type_k => $cashier_order_type_v}
<option value="{$cashier_order_type_k}">{$cashier_order_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 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 class="layui-inline layui-hide" id="delivery_time_box">
<label class="layui-form-label">自提时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" name="delivery_start_time" placeholder="开始时间" id="delivery_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="delivery_end_time" placeholder="结束时间" id="delivery_end_time" readonly>
<i class=" iconrili iconfont calendar"></i>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit id="btn_search"lay-filter="btn_search">筛选</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order_goods">导出订单商品</button>
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order" >导出订单</button>
<a class="layui-btn layui-btn-primary" href="{:href_url('shop/order/export')}" target="_blank">查看导出记录</a>
</div>
<input type="hidden" name="order_scene" value="cashier">
<input type="hidden" name="status"/>
<input type="hidden" name="page"/>
</form>
</div>
</div>
<div class="layui-tab table-tab" lay-filter="order_tab">
<div class="layui-tab-content">
<!-- 列表 -->
<div class="layui-form order-operation-btn all-selected-checkbox" style="display: none">
<div class="order-operation-all-btn">
<input type="checkbox" name="" lay-skin="primary" lay-filter="allCheckbox">
<input type="hidden" name="allOrderId">
</div>
<div class="btn-box">
<span class="btn-deliver">批量收货</span>
</div>
</div>
<div id="order_list"></div>
</div>
</div>
<div id="order_page"></div>
<div id="order_operation"></div>
{include file="app/shop/view/order/order_common_action.html" /}
<!-- 修改订单收货地址 -->
{include file="app/shop/view/order/order_action.html" /}
<!-- 主动退款 -->
{include file="app/shop/view/order/shop_active_refund.html" /}
<script src="CASHIER_JS/order_list.js?time=20241121"></script>
<script>
var laypage,element, form;
var is_refresh = false;
var laypage_util;
var orderIdAll = [];
var order_type_status_json = {:json_encode($order_type_list)};
// 通过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 = {
"end_time": "",
"delivery_end_time": "",
"order_from": "",
"order_label": $("select[name=order_label]").val(),
"order_name": "",
"order_status": "",
"promotion_type": "",
"pay_type": "",
"search": "",
"start_time": "",
"delivery_start_time": "",
"order_type": 'all',
'page_size': '',
"page": "",
"store_id": $("select[name=store_id]").val(),
'cashier_order_type': ''
};
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.order_type, 2);
form.val("order_list", form_json);
switchOrderType(form_json.order_type);
setOrderStatusTab(form_json.order_status);
return form_json;
}
/**
* 获取哈希值order_type
*/
function getHashOrderType(){
var hash_arr = getHashArr();
var order_type = "all";
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("order_type") != "-1") {
order_type = item_arr[1];
}
}
})
}
return order_type;
}
layui.use(['laypage','laydate','form', 'element'], function(){
form = layui.form;
laypage = layui.laypage;
element = layui.element;
var 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");
}
});
laydate.render({
elem: '#delivery_start_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
laydate.render({
elem: '#delivery_end_time'
,type: 'datetime'
,change: function(value, date, endDate){
$(".date-picker-btn").removeClass("selected");
}
});
//监听筛选事件
form.on('submit(btn_search)', function(data){
is_refresh = true;
data.field.page = 1;
setHashOrderList(data.field);
setOrderStatusTab(data.field.order_status);
return false;
});
//批量导出(订单项)
form.on('submit(batch_export_order_goods)', function(data){
data.field.order_ids = orderIdAll.toString(); // 选择要导出的订单
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("shop/order/exportordergoods"),
data: data.field,
success: function (res) {
}
});
window.open(ns.href("shop/order/export",{}));
return false;
});
//批量导出(订单)
form.on('submit(batch_export_order)', function(data){
data.field.order_ids = orderIdAll.toString(); // 选择要导出的订单
$.ajax({
type: 'post',
dataType: 'json',
url: ns.url("shop/order/exportorder"),
data: data.field,
success: function (res) {
}
});
window.open(ns.href("shop/order/export",{}));
return false;
});
//订单类型
form.on('select(order_type)', function(data){
switchOrderType(data.value);
resetOrderStatus(data.value, 1);
return false;
});
//监听Tab切换以改变地址hash值
element.on('tab(order_tab)', function(){
$(".all-selected-checkbox input").prop("checked",false);
var status = this.getAttribute('lay-id');
form.val("order_list", {"order_status":status});
var hash_data = getHashList();
hash_data.order_status = status;
hash_data.page = 1;
setHashOrderList(hash_data);
});
getHashData();
getOrderList();//筛选
});
function switchOrderType(value){
if(value == 2 || value == 3){
var time_type = value == 2 ? '要求自提时间:': '要求送达时间:';
$("#delivery_time_box").removeClass('layui-hide').find('label').text(time_type);
}else{
$("#delivery_time_box").addClass('layui-hide');
}
}
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").find(":first").addClass("layui-this");
}
if(is_tab != 2 || is_refresh == false){
$("select[name=order_status] option").not(':first').remove();
}
var status_item = order_type_status_json[order_type]["status"];
$.each(status_item,function(index, itemobj){
if(is_tab != 1 || is_refresh == false) {
$(".layui-tab-title").append('<li lay-id="' + index + '">' + itemobj + '</li>');
}
if(is_tab != 2 || is_refresh == false) {
$("select[name=order_status]").append('<option value="' + index + '">' + itemobj + '</option>');
}
});
form.render('select');
}
}
//哈希值 订单数据
function setHashOrderList(data){
localStorage.setItem('formSubmit','search'); // 表单搜索标识,防止页面重新加载
var hash = ['url=cashier://shop/order/lists'];
for (var key in data) {
if (data[key] != '' && data[key] != 'all') {
hash.push(`${key}=${data[key]}`)
}
}
location.hash = hash.join('&');
getOrderList();
}
function getHashList(){
var hash_arr = getHashArr();
var form_json = {
"end_time" : "",
"delivery_end_time" : "",
"order_from" : "",
"order_label" : $("select[name=order_label]").val(),
"order_name" : "",
"order_status" : "",
"promotion_type" : "",
"pay_type" : "",
"search" : "",
"start_time" : "",
"delivery_start_time" : "",
"order_type" : 'all',
'page_size':'',
"page" : "",
"store_id" : $("select[name=store_id]").val(),
'cashier_order_type':''
};
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;
}
var order = new Order();
function getOrderList(){
var url = ns.url("cashier://shop/order/lists", getHashArr().join('&'));
$.ajax({
type : 'get',
dataType: 'json',
url :url,
success : function(res){
if(res.code == 0){
setOrderInfo(res.data.list);
order.setData(res.data);
$("#order_list").html(order.fetch());
if(res.data.order_status == 3){
$(".order-operation-btn.all-selected-checkbox").show();
} else{
$(".order-operation-btn.all-selected-checkbox").hide();
}
form.render();
//批量选择
form.on('checkbox(allCheckbox)', function(data){
$(".sub-selected-checkbox input").prop("checked",data.elem.checked);
$(".all-selected-checkbox input").prop("checked",data.elem.checked);
$(".sub-selected-checkbox input").each(function(index,item){
if($(item).attr('disabled') == 'disabled'){
$(item).prop("checked",false);
}
});
form.render("checkbox");
getOrderId();
});
//全选选择
form.on('checkbox(subCheckbox)', function(data){
var subLen = $(".sub-selected-checkbox input:checked").length;
$(".all-selected-checkbox input").prop("checked",false);
if (subLen == 10){
$(".all-selected-checkbox input").prop("checked",true);
}
$(".sub-selected-checkbox input").each(function(index,item){
if($(item).attr('disabled') == 'disabled'){
$(item).prop("checked",false);
}
});
form.render("checkbox");
getOrderId();
});
//获取选中的id
function getOrderId(){
var lists = $(".sub-selected-checkbox input:checked");
orderIdAll = [];
lists.each(function(index,item){
if($(item).parents(".sub-selected-checkbox").attr("disabled") != "disabled"){
orderIdAll.push(JSON.parse($(item).parents(".sub-selected-checkbox").attr("data-id")));
}
});
}
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);
}
}
});
}
/**
* 七天时间
*/
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);
}
//批量收货
$("body").off("click",".layui-tab-content .btn-deliver").on("click",".layui-tab-content .btn-deliver", function () {
var subLen = $(".sub-selected-checkbox input:checked").length;
if (subLen <=0 ) {
layer.msg("请选择订单");
return false;
}
takeDelivery(orderIdAll.toString(), 1);
});
</script>

View File

@@ -0,0 +1,421 @@
<style>
.printer-box{display: flex;}
.printer-box > .layui-form{flex: 1;}
.printer-box .preview{width: 310px;margin: 0 20px;}
.printer-box .preview .layui-card-body{margin: 20px;padding: 0 10px;border: 1px solid #ededed;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;}
.printer-box .preview .layui-card-body div{font-size: 12px;color: #333;}
.printer-box .preview .layui-card-body div ~ div{border-top: 1px dashed #ededed ;}
.printer-box .preview .receipt-name{text-align: center;line-height: 40px;}
.printer-box .preview .shopping-name{line-height: 40px;font-size: 16px !important;text-align: center;}
.printer-box .preview .order-info, .printer-box .preview .goods-info, .printer-box .preview .price-info, .printer-box .preview .buyer-info, .printer-box .preview .shopping-info{padding: 8px 0;}
.printer-box .preview .order-info span{display: block;line-height: 2.5;}
.printer-box .preview .goods-info table{width: 100%;}
.printer-box .preview .goods-info table tr{line-height: 2.5;}
.printer-box .preview .goods-info table th{font-weight: normal;}
.printer-box .preview .price-info p{display: flex;line-height: 2.5;justify-content: space-between;}
.printer-box .preview .price-info p:first-child {font-size: 16px}
.printer-box .preview .buyer-info span, .printer-box .preview .shopping-info span{display: block;line-height: 2;}
.printer-box .preview .buyer-message,.printer-box .preview .merchant-message{padding: 10px 0;line-height: 1.5;}
.preview .button-info{height: 40px;line-height: 40px;text-align: center}
.preview .shopping-code{text-align: center;}
.preview .shopping-code img{width: 100px;height: 100px;margin: 10px 0;}
.commodity-type-box{display: flex;}
.commodity-type-item{margin-right: 15px;padding: 0px 20px;display: flex;justify-content: center;align-items: center;flex-direction: column;border: 1px solid #e5e5e5;cursor: pointer;}
.goods_code_show td{line-height: 1;padding-bottom: 5px}
</style>
<div class="layui-collapse tips-wrap">
<div class="layui-colla-item">
<h2 class="layui-colla-title">操作提示</h2>
<ul class="layui-colla-content layui-show">
<li>管理员可以在此页操作打印模板</li>
</ul>
</div>
</div>
<div class="printer-box">
<div class="layui-form form-wrap">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">模板信息</span>
</div>
<div class="layui-card-body">
{if empty($info)}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>模板类型:</label>
<div class="layui-input-block commodity-type-box">
{foreach $template_type as $k => $v}
<div class="commodity-type-item {if $type == $k} border-color{/if}" onclick="location.hash = ns.hash('printer://shop/template/add', {'type' : '{$v['type']}'})">
<span class="{if $type == $k} text-color{/if}">{$v['type_name']}</span>
</div>
{/foreach}
</div>
</div>
<input type="hidden" name="type_name" value="{$template_type[$type]['type_name']}">
<input type="hidden" name="type" value="{$type}">
{/if}
<div class="layui-form-item">
<label class="layui-form-label"><span class="required"></span>模板名称:</label>
<div class="layui-input-block">
<input type="text" name="template_name" lay-verify="required" {if !empty($info)} value="{$info['template_name']}" {/if} autocomplete="off" class="layui-input len-long">
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">打印信息</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">小票名称:</label>
<div class="layui-input-block">
<input type="text" name="title" {if !empty($info)} value="{$info['title']}"{else/} value="小票名称" {/if} lay-verify="required" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商城名称:</label>
<div class="layui-input-block">
<input type="radio" lay-filter="shop_name" name="head" value="1" title="显示" {if (!empty($info) && $info['head'] == 1) || empty($info) } checked {/if} autocomplete="off" class="layui-input len-long">
<input type="radio" lay-filter="shop_name" name="head" value="0" title="不显示" {if !empty($info) && !$info['head']} checked {/if} autocomplete="off" class="layui-input len-long">
</div>
</div>
</div>
</div>
{if !empty($info)}
<input type="hidden" name="template_id" value="{$info['template_id']}">
{/if}
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="backPrinterTemplateList()">返回</button>
</div>
</div>
<div class="preview">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">预览图</span>
</div>
<div class="layui-card-body">
<div class="receipt-name">小票名称</div>
<div class="shopping-name">商城名称</div>
<div class="order-info">
<span>交班员工:***</span>
<span>上班时间2022-11-17 08:00:00</span>
<span>交班时间2022-11-17 12:00:00</span>
</div>
<div class="price-info">
<p>
<span>销售</span>
</p>
<p>
<span>开单销售</span>
<span>¥100</span>
</p>
<p>
<span>售卡销售</span>
<span>¥95</span>
</p>
</div>
<div class="price-info">
<p>
<span>会员充值</span>
</p>
<p>
<span>会员充值</span>
<span>¥100</span>
</p>
</div>
<div class="price-info">
<p>
<span>应收金额</span>
</p>
<p>
<span>开单销售</span>
<span>¥100</span>
</p>
<p>
<span>售卡销售</span>
<span>¥95</span>
</p>
<p>
<span>会员充值</span>
<span>¥100</span>
</p>
<p>
<span>订单退款</span>
<span>¥100</span>
</p>
</div>
<div class="price-info">
<p>
<span>支付统计</span>
</p>
<p>
<span>现金收款</span>
<span>¥100</span>
</p>
</div>
</div>
</div>
</div>
</div>
<script>
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false;
form.render();
/**
* 表单验证
*/
form.verify({
time: function(value) {
var now_time = (new Date()).getTime();
var start_time = (new Date($("#start_time").val())).getTime();
var end_time = (new Date(value)).getTime();
if (now_time > end_time) {
return '结束时间不能小于当前时间!'
}
if (start_time > end_time) {
return '结束时间不能小于开始时间!';
}
},
flnum: function(value) {
var arrMen = value.split(".");
var val = 0;
if (arrMen.length == 2) {
val = arrMen[1];
}
if (val.length > 2) {
return '保留小数点后两位!'
}
},
int: function(value) {
if (value <= 1 || value % 1 != 0) {
return '请输入大于1的正整数'
}
}
});
form.on('checkbox(shop_qrcode)', function(data){
var value = data.elem.checked;
if(value == true){
$(".preview .shopping-code").removeClass("layui-hide");
$(".qrcode_url").removeClass('layui-hide');
$("input[name='qrcode_url']").attr("lay-verify", "required");
}else{
$(".preview .shopping-code").addClass("layui-hide");
$(".qrcode_url").addClass('layui-hide');
$("input[name='qrcode_url']").attr("lay-verify", "");
}
});
/**
* 表单提交
*/
form.on('submit(save)', function(data){
var field = data.field;
if(repeat_flag) return;
repeat_flag = true;
var url = ns.url("printer://shop/template/add");
if(parseInt(field.template_id) > 0 ) url = ns.url("printer://shop/template/edit");
$.ajax({
type: 'POST',
dataType: 'JSON',
url: url,
data: field,
async: false,
success: function(res){
repeat_flag = false;
if (res.code == 0) {
layer.confirm('操作成功', {
title:'操作提示',
btn: ['返回列表', '{$info ? "继续编辑" : "继续添加"}'],
closeBtn: 0,
yes: function(index, layero) {
location.hash = ns.hash("printer://shop/template/lists");
layer.close(index);
},
btn2: function(index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
});
}else{
layer.msg(res.message);
}
}
})
});
// 小票打印
$("input[name='title']").bind("input propertychange",function(event){
$(".preview .receipt-name").text($("input[name='title']").val());
});
//商城名称
form.on('radio(shop_name)', function(data){
if (parseInt(data.value)) $(".shopping-name").removeClass("layui-hide");
else $(".shopping-name").addClass("layui-hide");
});
//商品价格
form.on('checkbox(goods_price_show)', function(data){
if (data.elem.checked) {
$(".goods_price_show").removeClass("layui-hide");
$('.goods_price_type').removeClass("layui-hide");
}else {
$('.goods_price_type').addClass("layui-hide");
$(".goods_price_show").addClass("layui-hide");
}
});
//商品编码
form.on('checkbox(goods_code_show)', function(data){
if (data.elem.checked) $(".goods_code_show").removeClass("layui-hide");
else $(".goods_code_show").addClass("layui-hide");
});
//表单
form.on('checkbox(form_show)', function(data){
if (data.elem.checked) $(".form_show").removeClass("layui-hide");
else $(".form_show").addClass("layui-hide");
});
//买家留言
form.on('checkbox(buyer_message)', function(data){
if(data.elem.checked)
$(".buyer-message").removeClass("layui-hide");
else
$(".buyer-message").addClass("layui-hide");
});
//卖家留言
form.on('checkbox(merchant_message)', function(data){
if(data.elem.checked)
$(".merchant-message").removeClass("layui-hide");
else
$(".merchant-message").addClass("layui-hide");
});
var buyerName = true,buyerPhone=true,buyerAddres=true;
//买家姓名
form.on('checkbox(buyer_name)', function(data){
buyerName = data.elem.checked;
if(data.elem.checked)
$(".buyer-info .name").removeClass("layui-hide");
else
$(".buyer-info .name").addClass("layui-hide");
buyerFn();
});
//买家手机号
form.on('checkbox(buyer_phone)', function(data){
buyerPhone = data.elem.checked;
if(data.elem.checked)
$(".buyer-info .phone").removeClass("layui-hide");
else
$(".buyer-info .phone").addClass("layui-hide");
buyerFn();
});
//买家地址
form.on('checkbox(buyer_addres)', function(data){
buyerAddres= data.elem.checked;
if(data.elem.checked)
$(".buyer-info .addres").removeClass("layui-hide");
else
$(".buyer-info .addres").addClass("layui-hide");
buyerFn();
});
function buyerFn() {
if (!buyerName )
$(".buyer-info").addClass("layui-hide");
else
$(".buyer-info").removeClass("layui-hide");
}
// 底部信息
$("input[name='bottom']").bind("input propertychange",function(event){
$(".preview .button-info").text($("input[name='bottom']").val());
});
});
function backPrinterTemplateList() {
location.hash = ns.hash("printer://shop/template/lists");
}
</script>
{if !empty($info)}
<script>
var shop_qrcode = {$info['shop_qrcode']};
if(shop_qrcode){
$(".preview .shopping-code").removeClass("layui-hide");
$(".qrcode_url").removeClass('layui-hide');
$("input[name='qrcode_url']").attr("lay-verify", "required");
}else{
$(".preview .shopping-code").addClass("layui-hide");
$(".qrcode_url").addClass('layui-hide');
$("input[name='qrcode_url']").attr("lay-verify", "");
}
var head = {$info['head']};
if (head) {
$(".shopping-name").removeClass("layui-hide");
}else {
$(".shopping-name").addClass("layui-hide");
}
var goods_price_show = {$info['goods_price_show']};
if (goods_price_show) {
$(".goods_price_show").removeClass("layui-hide");
$('.goods_price_type').removeClass("layui-hide");
}else {
$('.goods_price_type').addClass("layui-hide");
$(".goods_price_show").addClass("layui-hide");
}
var goods_code_show = {$info['goods_code_show']};
if (goods_code_show) $(".goods_code_show").removeClass("layui-hide");
else $(".goods_code_show").addClass("layui-hide");
var form_show = {$info['form_show']};
if (form_show) $(".form_show").removeClass("layui-hide");
else $(".form_show").addClass("layui-hide");
var buy_notes = {$info['buy_notes']};
if(buy_notes) $(".buyer-message").removeClass("layui-hide");
else $(".buyer-message").addClass("layui-hide");
var seller_notes = {$info['seller_notes']};
if(seller_notes) $(".merchant-message").removeClass("layui-hide");
else $(".merchant-message").addClass("layui-hide");
buyerName = {$info['buy_name']},buyerPhone={$info['buy_mobile']},buyerAddres={$info['buy_address']};
if(buyerName) $(".buyer-info .name").removeClass("layui-hide");
else $(".buyer-info .name").addClass("layui-hide");
if(buyerPhone) $(".buyer-info .phone").removeClass("layui-hide");
else $(".buyer-info .phone").addClass("layui-hide");
if(buyerAddres) $(".buyer-info .addres").removeClass("layui-hide");
else $(".buyer-info .addres").addClass("layui-hide");
if (!buyerName ) $(".buyer-info").addClass("layui-hide");
else $(".buyer-info").removeClass("layui-hide");
</script>
{/if}

View File

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

View File

@@ -0,0 +1,404 @@
/**
* 渲染订单列表
*/
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.full_address = order.full_address;
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: "25%",
className: "product-info",
template: function (orderitem, order) {
var h = '<div class="img-block">';
if(order.cashier_order_type == 'recharge'){
h += '<img layer-src="' + ns.img(orderitem.sku_image) + '" src="' + ns.img(orderitem.sku_image) + '">';
}else{
h += '<img layer-src="' + ns.img(orderitem.sku_image,'big') + '" src="' + ns.img(orderitem.sku_image,'small') + '">';
}
h += '</div>';
h += '<div class="info">';
h += '<a href="' + ns.href("shop/order/detail", {order_id: orderitem.order_id}) + '" target="_blank" title="' + orderitem.sku_name + '" class="multi-line-hiding text-color-sub">' + orderitem.sku_name + '</a>';
if(orderitem.sku_no){
h += '<span class="text-tile" title="' + orderitem.sku_no + '" >' + orderitem.sku_no + '</span>';
}
h += '</div>';
return h;
}
},
{
title: "单价(元) / 数量",
width: "8%",
align: "right",
className: "order-price",
template: function (orderitem, order) {
var h = '<div style="padding-right: 15px;">';
h += '<div>';
h += '<span>' + orderitem.price + '</span>';
h += '</div>';
h += '<div>';
h += '<span>' + orderitem.num + '件</span>';
h += '</div>';
h += '</div>';
return h;
}
},
{
title: "维权",
width: "8%",
align: "right",
className: "order-price",
template: function (orderitem, order) {
var refund_money = (Number(orderitem.shop_active_refund_money) + Number(orderitem.refund_real_money)).toFixed(2);
var html = '';
if (orderitem.refund_status != 0) {
html += '<div><a href="' + ns.href("shop/orderrefund/detail", {order_goods_id: orderitem.order_goods_id}) + '" target="_blank" >' + orderitem.refund_status_name + '</a></div>';
if(refund_money > 0){
html += '<div style="color:red;">¥'+ refund_money +'</div>';
}
}else{
if((order.order_status == 1 ||order.order_status == 2 ) && order.is_enable_refund == 1 && order.promotion_type != 'blindbox'){
html += '<button class="layui-btn" onclick="shopActiveRefund('+ orderitem.order_goods_id +')" >主动退款</button>';
}
}
return html;
}
},
{
title: "实付金额(元)",
width: "10%",
align: "right",
className: "order-money",
merge: true,
template: function (orderitem, order) {
var h = '<div style="padding-right: 15px;">';
h += '<span>' + order.pay_money + '</span>';
h += '</div>';
return h;
}
},
{
title: "买家",
width: "15%",
align: "center",
className: "buyers",
merge: true,
template: function (orderitem, order) {
var h = '';
if (order.member_id) {
h += '<p>';
h += '<a class="text-color" target="_blank" href="' + ns.href("shop/member/editmember?member_id=") + order.member_id + '">' + order.nickname + '</a>';
h += '</p>';
} else {
h += '<p>';
h += '<a class="text-color" href="javascript:;">散客</a>';
h += '</p>';
}
return h;
}
},
{
title: "来源门店",
width: "9%",
align: "center",
className: "transaction-status",
merge: true,
template: function (orderitem, order) {
var html = '<div>' + order.store_name + '</div>';
return html;
}
},
{
title: "交易状态",
width: "10%",
align: "center",
className: "transaction-status",
merge: true,
template: function (orderitem, order) {
// console.log("orderitem",order);
// if(order.order_status_name == '待支付'){
//
// }else if(order.order_status_name == '待发货'){
//
// }
var html = '<div>' + order.order_status_name + '</div>';
html += '<div>' + order.promotion_type_name;
html += order.promotion_status_name != '' ? '(' + order.promotion_status_name + ')' : '';
html += '</div>';
return html;
}
},
// {
// title : "下单时间",
// width : "10%",
// align : "center",
// className : "create-time",
// merge : true,
// template : function(orderitem,order){
// return '<div>' + ns.time_to_date(order.create_time) + '</div>';
// }
// },
// {
// title : "结算状态",
// width : "10%",
// align : "center",
// className : "settlement",
// merge : true,
// template : function(orderitem,order){
// var settlement_name = order.is_settlement == 1 ? "已结算" : "待结算";
// return '<div>'+settlement_name+'</div>';
// }
// },
{
title: "操作",
align: "right",
className: "operation",
width:"11%",
merge: true,
template: function (orderitem, order) {
var url = "shop/order/detail";
var html = '';
var action_json = order.order_status_action;
var action_arr = JSON.parse(action_json);
var action = action_arr.action;
if (action && action.length) {
html += '<div class="table-btn operation-type">';
for (var k = 0; k < action.length; k++) {
//视频号订单不能改价
if (order.is_video_number == 1) {
if (action[k].action != "orderAdjustMoney") {
html += '<a class="layui-btn text-color" href="javascript:orderAction(\'' + action[k].action + '\', ' + order.order_id + ')">' + action[k].title + '</a>';
}
} else {
html += '<a class="layui-btn text-color" href="javascript:orderAction(\'' + action[k].action + '\', ' + order.order_id + ')">' + action[k].title + '</a>';
}
}
// if (orderitem.refund_status_name != '') {
// html += '<a href="javascript:orderAction(\'' + action[k].action + '\', ' + order.order_id + ')">' + action[k].title + '</a>';
// html += '<a class="layui-btn" href="' + ns.href("shop/orderrefund/detail", {order_goods_id: orderitem.order_goods_id}) + '" target="_blank">' + orderitem.refund_status_name + '</a>';
// }
// html += '<a class="layui-btn" href="'+ns.href(url,{order_id:order.order_id})+'" class="default" target="_blank">查看详情</a>';//默认存在
// html += '<a class="layui-btn" href="javascript:;" class="default" onclick="orderRemark('+order.order_id+')">备注</a> ';//默认存在
if (order.order_type == 2 && order.order_status == 2) {
html += '<a class="layui-btn" href="javascript:storeOrderTakedelivery(' + order.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];
var orderitemList = order.order_goods;
var pay_type_name = order.pay_type_name != '' ? order.pay_type_name : "";
var order_type = order.order_type;
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="7">';
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.pay_time) + '</span>';
tbody += '<span class="order-item-header" style="margin-right:50px;">订单来源:收银台</span>';
// tbody += '<span class="order-item-header" style="margin-right:50px;">订单类型:' + order.order_type_name + '</span>';
if (pay_type_name) tbody += '<span class="order-item-header"style="margin-right:50px;">支付方式:' + pay_type_name +'</span>';
if (order.cashier_order_type_name) tbody += '<span class="order-item-header">订单类型:' + order.cashier_order_type_name +'</span>';
if (order_type == 2) {
tbody += '<span class="order-item-header" style="margin-left:50px;">要求自提时间:' + order.buyer_ask_delivery_time + '</span>';
}
if (order_type == 3) {
tbody += '<span class="order-item-header" style="margin-left:50px;">要求送达时间:' + order.buyer_ask_delivery_time + '</span>';
}
tbody += '</td>';
tbody += '<td colspan="2">';
tbody += '<div class="table-btn order-list-top-line" style="align:right;">';
if (order.order_type == 1 && (order.order_status == 0 || order.order_status == 1 || order.order_status == 3 || order.order_status == 4 || order.order_status == 10)) {
tbody += '<a class="layui-btn" href="javascript:printDeliverOrder(' + order.order_id + ');" >打印发货单</a>';
// tbody += '<a href="'+ ns.href('shop/order/printOrder',{order_id:order.order_id}) +'" target="_blank" class="layui-btn">打印发货单</a>';
}
if(printer_addon_is_exit == 1 && [1,2,3].indexOf(parseInt(order.order_type)) != -1 && [1,2,3,10].indexOf(parseInt(order.order_status)) != -1) {
tbody += '<a class="layui-btn" href="javascript:printTicket(' + order.order_id + ');" >打印小票</a>';
}
if (order.order_status == 0) {
// tbody += '<a class="layui-btn" href="javascript:offlinePay(' + order.order_id + ');">线下支付</a> ';
}
tbody += '<a class="layui-btn" href="' + ns.href("cashier://shop/order/detail", {order_id: order.order_id}) + '" target="_blank">详情</a>';
if (order.order_status == -1) {
tbody += '<a class="layui-btn" href="javascript:orderDelete(' + order.order_id + ');" >删除</a>';
}
tbody += '<a class="layui-btn" href="javascript:orderRemark(' + order.order_id + ');">备注</a> ';
tbody += '</div>';
tbody += '</td>';
tbody += '</tr>';
// tbody += '<tr class="separation-row"><td colspan="6"><hr /></td></tr>';
var orderitemHtml = '';
loadImgMagnify();
for (var j = 0; j < orderitemList.length; j++) {
var orderitem = orderitemList[j];
orderitemHtml += '<tr class="content-row">';
for (var k = 0; k < this.cols.length; k++) {
if (j == 0 && this.cols[k].merge && this.cols[k].template) {
orderitemHtml += '<td class="' + (this.cols[k].className || "") + '" align="' + (this.cols[k].align || "") + '" style="' + (this.cols[k].style || "") + '" rowspan="' + orderitemList.length + '">';
orderitemHtml += this.cols[k].template(orderitem, order);
orderitemHtml += '</td>';
} else if (this.cols[k].template && !this.cols[k].merge) {
orderitemHtml += '<td class="' + (this.cols[k].className || "") + '" align="' + (this.cols[k].align || "") + '" style="' + (this.cols[k].style || "") + '">';
orderitemHtml += this.cols[k].template(orderitem, 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>';
}
if (order.remark != '') {
tbody += '<tr class="remark-row">';
tbody += '<td colspan="9">卖家备注:' + order.remark + '</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("收起");
}
})

View File

@@ -0,0 +1,153 @@
<style type="text/css">
.tree-line {
padding: 10px 0;
background: #ededed;
margin-bottom: 2px;
line-height: 1.8;
border: 1px solid #000;
}
.tree-line .layui-form {
padding-left: 10px !important;
}
.tree-line .layui-form-checkbox {
margin: 0 10px !important;
vertical-align: middle;
}
.group-tree-block .layui-table tbody tr:hover {
background-color: white;
}
</style>
<div class="layui-form form-wrap" lay-filter="save">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>角色名称:</label>
<div class="layui-input-block">
<input autocomplete="off" class="layui-input len-long" lay-verify="required" name="group_name" placeholder="请输入角色名称" required type="text">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">适用门店:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<select name="store_id" lay-filter="store_id">
{foreach $store_list as $val}
<option value="{$val.store_id}">{$val.store_name}</option>
{/foreach}
</select>
</div>
</div>
<div class="word-aux"><p>适用门店添加后无法修改,请慎重选择</p></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">描述:</label>
<div class="layui-input-block">
<textarea class="layui-textarea len-long" maxlength="150" name="desc" placeholder="请输入角色的相关描述"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>设置权限:</label>
<div class="layui-input-block">
<div class="layui-input-inline group-tree-block" id="tree_box"></div>
</div>
</div>
<!-- 表单操作 -->
<div class="form-row">
<button class="layui-btn" lay-filter="save" lay-submit>保存</button>
<button class="layui-btn layui-btn-primary" onclick="backCashierUserGroup()">返回</button>
</div>
</div>
<script>
var all_tree_data = JSON.parse('{:json_encode($tree_data, JSON_UNESCAPED_UNICODE)}');
var tree_data = JSON.parse('{:json_encode($tree_data, JSON_UNESCAPED_UNICODE)}'),
form,
repeat_flag = false; //防重复标识
var store_list = {:json_encode($store_list)};
if(store_list.length > 0 && store_list[0].tree_data){
tree_data = store_list[0].tree_data;
}
layui.use('form', function () {
form = layui.form;
form.render();
form.on('select(store_id)', function (data){
let store_id = data.value;
store_list.forEach((item)=>{
if(item.store_id == store_id){
if(item.tree_data){
tree_data = ns.deepclone(item.tree_data);
}else{
tree_data = ns.deepclone(all_tree_data);
}
initTreeBox();
}
})
})
form.on('submit(save)', function (data) {
data.field.store_name = $("select[name=store_id] option:selected").text();
var obj = $("#tree_box input:checked"),
group_array = [];
for (var i = 0; i < obj.length; i++) {
group_array.push(obj.eq(i).val());
}
data.field.menu_array = group_array.toString();
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
type: "POST",
dataType: "JSON",
url: ns.url("cashier://shop/user/addgroup"),
data: data.field,
success: function (res) {
repeat_flag = false;
if (res.code == 0) {
layer.confirm('添加成功', {
title: '操作提示',
btn: ['返回列表', '继续添加'],
closeBtn: 0,
yes: function (index, layero) {
location.hash = ns.hash("cashier://shop/user/group")
layer.close(index);
},
btn2: function (index, layero) {
listenerHash(); // 刷新页面
layer.close(index);
}
})
} else {
layer.msg(res.message);
}
}
});
});
form.verify({
title: function (value) {
if (value.length == 0) {
return '请输入角色名称';
}
}
});
});
function backCashierUserGroup() {
location.hash = ns.hash("cashier://shop/user/group");
}
</script>
<script src="SHOP_JS/tree.js?time=20250315"></script>

View File

@@ -0,0 +1,122 @@
<style type="text/css">
.tree-line{padding:10px 0;background:#ededed;margin-bottom:2px;line-height: 1.8;}
.tree-line .layui-form{padding-left: 10px !important;}
.tree-line .layui-form-checkbox{margin:0 10px !important;vertical-align:middle;}
.group-tree-block .layui-table tbody tr:hover {background-color: white;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label">创建用户:</label>
<div class="layui-input-inline">
{php}$create_user_data = json_decode($group_info['create_user_data'], true);{/php}
{:join(' -> ', array_column($create_user_data, '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="group_name" type="text" lay-verify="required" class="layui-input len-long" placeholder="请输入角色名称" value="{$group_info.group_name}" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">适用门店:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
{$group_info.store_name}
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">描述:</label>
<div class="layui-input-block">
<textarea name ="desc" class="layui-textarea len-long" placeholder="请输入角色的相关描述" maxlength="150">{$group_info.desc}</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>设置权限:</label>
<div class="layui-input-block">
<div class="layui-input-inline group-tree-block" id="tree_box"></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="backCashierUserGroup()">返回</button>
</div>
<!-- 隐藏域 -->
<input name="group_id" type="text" class="layui-input layui-hide" value="{$group_id}">
</div>
<script>
var tree_data = JSON.parse('{:json_encode($tree_data, JSON_UNESCAPED_UNICODE)}'),
form,
repeat_flag = false;//防重复标识
layui.use('form', function() {
form = layui.form;
form.render();
form.on('submit(save)', function (data) {
var obj = $("#tree_box input:checked"),
group_array = [];
for (var i = 0; i < obj.length; i++) {
group_array.push(obj.eq(i).val());
}
data.field.menu_array = group_array.toString();
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
type: "POST",
dataType: "JSON",
url: ns.url("cashier://shop/user/editgroup"),
data: data.field,
success: function (res) {
repeat_flag = false;
if (res.code == 0) {
layer.confirm('编辑成功', {
title:'操作提示',
btn: ['返回列表', '继续编辑'],
yes: function(index, layero) {
location.hash = ns.hash("cashier://shop/user/group")
layer.close(index);
},
btn2: function(index, layero) {
layer.close(index);
}
})
}else{
layer.msg(res.message);
}
}
});
});
form.verify({
title: function (value) {
if (value.length == 0) {
return '请输入角色名称';
}
}
});
});
function backCashierUserGroup() {
location.hash = ns.hash("cashier://shop/user/group");
}
</script>
<script src="SHOP_JS/tree.js"></script>

View File

@@ -0,0 +1,152 @@
<style>
.system-tag {padding: 3px 5px;font-size: 12px;border: 1px solid #ddd;color: #999;border-radius: 4px;margin-left: 3px;}
</style>
<!-- 搜索框 -->
<div class="single-filter-box">
<button class="layui-btn" onclick="add()">添加角色</button>
<div class="layui-form">
<div class="layui-input-inline">
<input type="text" name="search_keys" placeholder="请输入角色名称" autocomplete="off" class="layui-input">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
</div>
<!-- 列表 -->
<table id="group_list" lay-filter="group_list"></table>
<!-- 工具栏操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
{{# if(d.keyword != ''){ }}
<span class="cursor">系统角色不可编辑</span>
{{# }else if(curr_user_group_ids.indexOf(d.group_id) > -1){ }}
<span class="cursor">所属角色不可编辑</span>
{{# }else{ }}
<a class="layui-btn" lay-event="edit">编辑</a>
<a class="layui-btn" lay-event="delete">删除</a>
{{# } }}
</div>
</script>
<script>
var curr_user_group_ids = {:json_encode($curr_user_group_ids)};
layui.use('form', function() {
var table,
form = layui.form,
repeat_flag = false; //防重复标识
form.render();
/**
* 加载表格
*/
table = new Table({
elem: '#group_list',
url: ns.url("cashier://shop/user/group"), //数据接口
cols: [
[{
field: 'group_name',
title: '角色名称',
width: '20%',
unresize: 'false',
templet: function (data) {
var h = data.group_name;
if (data.keyword) h += '<span class="system-tag">系统</span>'
return h;
}
}, {
field: 'desc',
title: '描述',
width: '40%',
unresize: 'false',
},{
field: 'store_name',
title: '适用门店',
width: '12%',
unresize: 'false',
},{
field: 'create_user_data',
title: '创建用户',
width: '8%',
unresize: 'false',
templet: function (data){
let create_user_data = JSON.parse(data.create_user_data);
if(create_user_data.length > 0){
return '<div class="text">'+create_user_data[create_user_data.length-1].name+'</div>';
}else{
return '';
}
}
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
]
});
/**
* 监听工具栏操作
*/
table.tool(function(obj) {
var data = obj.data;
switch (obj.event) {
case 'edit': //编辑
location.hash = ns.hash("cashier://shop/user/editGroup", {"group_id": data.group_id});
break;
case 'delete': //删除
deleteGroup(data.group_id);
break;
}
});
/**
* 删除
*/
function deleteGroup(group_id) {
layer.confirm('确定要删除该员工角色吗?', function(index) {
if (repeat_flag) return false;
repeat_flag = true;
layer.close(index);
$.ajax({
dataType: 'JSON',
type: 'POST',
url: ns.url("cashier://shop/user/deleteGroup"),
data: {group_id},
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
if (res.code == 0) {
table.reload();
}
}
});
}, function () {
layer.close();
repeat_flag = false;
});
}
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
});
});
function add() {
location.hash = ns.hash("cashier://shop/user/addGroup");
}
</script>