地址新增编号快速搜索选择

This commit is contained in:
gongfuxiang
2023-01-17 16:37:00 +08:00
parent 1ca8f46467
commit 46c0169a32
44 changed files with 508 additions and 201 deletions

View File

@ -92,7 +92,20 @@ class Region extends Base
['pid', '=', $pid],
],
];
return ApiService::ApiDataReturn(DataReturn('获取成功', 0, RegionService::RegionNode($params)));
return ApiService::ApiDataReturn(DataReturn('success', 0, RegionService::RegionNode($params)));
}
/**
* 获取地区编号数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-21
* @desc description
*/
public function CodeData()
{
return ApiService::ApiDataReturn(RegionService::RegionCodeData($this->data_post));
}
}
?>

View File

@ -50,12 +50,12 @@
</div>
<div class="am-form-group">
<label class="block">是否已回复</label>
<label class="am-block">是否已回复</label>
<input name="is_reply" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if isset($data['is_reply']) and $data['is_reply'] eq 1}}checked="true"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">是否显示</label>
<label class="am-block">是否显示</label>
<input name="is_show" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if isset($data['is_show']) and $data['is_show'] eq 1}}checked="true"{{/if}} />
</div>

View File

@ -45,7 +45,7 @@
</div>
<div class="am-form-group am-form-file">
<label class="block">导航图标<span class="am-form-group-label-tips-must">*</span></label>
<label class="am-block">导航图标<span class="am-form-group-label-tips-must">*</span></label>
<ul class="plug-file-upload-view slide-images_url-images-view" data-form-name="images_url" data-max-number="1" data-delete="0" data-dialog-type="images">
<li>
<input type="text" name="images_url" value="{{if !empty($data['images_url'])}}{{$data.images_url}}{{/if}}" data-validation-message="请上传图片" required />
@ -60,7 +60,7 @@
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if !empty($data) and $data['is_enable'] eq 1}} checked="true"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">

View File

@ -40,7 +40,7 @@
</div>
<div class="am-form-group am-form-file">
<label class="block">导航图标<span class="am-form-group-label-tips-must">*</span></label>
<label class="am-block">导航图标<span class="am-form-group-label-tips-must">*</span></label>
<ul class="plug-file-upload-view slide-images_url-images-view" data-form-name="images_url" data-max-number="1" data-delete="0" data-dialog-type="images">
<li>
<input type="text" name="images_url" value="{{if !empty($data['images_url'])}}{{$data.images_url}}{{/if}}" data-validation-message="请上传图片" required />
@ -61,11 +61,11 @@
<input type="number" placeholder="顺序" name="sort" min="0" max="255" data-validation-message="顺序 0~255 之间的数值" class="am-radius" value="{{if isset($data['sort'])}}{{$data.sort}}{{else /}}0{{/if}}" required />
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if !empty($data) and $data['is_enable'] eq 1}} checked="true"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">是否需要登录</label>
<label class="am-block">是否需要登录</label>
<input name="is_need_login" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if !empty($data) and $data['is_need_login'] eq 1}} checked="true"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">

View File

@ -48,13 +48,13 @@
<div class="am-cf">
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if !empty($data) and $data['is_enable'] eq 1}}checked="true"{{/if}} />
</div>
</div>
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label class="block">首页推荐</label>
<label class="am-block">首页推荐</label>
<input name="is_home_recommended" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if !empty($data) and $data['is_home_recommended'] eq 1}}checked="true"{{/if}} />
</div>
</div>

View File

@ -46,7 +46,7 @@
<div class="am-cf">
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group am-form-file">
<label class="block">LOGO<span class="am-form-group-label-tips">建议150*50px</span></label>
<label class="am-block">LOGO<span class="am-form-group-label-tips">建议150*50px</span></label>
<ul class="plug-file-upload-view brand-logo-images-view" data-form-name="logo" data-max-number="1" data-dialog-type="images">
{{if !empty($data['logo'])}}
<li>
@ -69,7 +69,7 @@
</div>
<div class="am-u-md-6 am-padding-horizontal-0">
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_enable']) and $data['is_enable'] eq 1) or !isset($data['is_enable'])}}checked="true"{{/if}} />
</div>
</div>

View File

@ -19,7 +19,7 @@
<input type="text" name="{{$data.common_customer_store_address.only_tag}}" placeholder="{{$data.common_customer_store_address.name}}" data-validation-message="{{$data.common_customer_store_address.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_customer_store_address.value}}"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">{{$data.common_customer_store_qrcode.name}}<span class="am-form-group-label-tips">{{$data.common_customer_store_qrcode.describe}}</span></label>
<label class="am-block">{{$data.common_customer_store_qrcode.name}}<span class="am-form-group-label-tips">{{$data.common_customer_store_qrcode.describe}}</span></label>
<ul class="plug-file-upload-view common_customer_store_qrcode-images-view" data-form-name="common_customer_store_qrcode" data-max-number="1" data-dialog-type="images">
{{if !empty($data['common_customer_store_qrcode']['value'])}}
<li>

View File

@ -11,7 +11,7 @@
</div>
<div class="am-panel-bd am-padding-vertical-xs">
<div class="am-form-group am-form-file">
<label class="block">logo<span class="am-form-group-label-tips">选传</span><span class="am-form-group-label-tips">建议大小300*300px</span></label>
<label class="am-block">logo<span class="am-form-group-label-tips">选传</span><span class="am-form-group-label-tips">建议大小300*300px</span></label>
<ul class="plug-file-upload-view shop-logo-images-view" data-form-name="logo" data-max-number="1" data-dialog-type="images">
{{if !empty($data['logo'])}}
<li>
@ -30,16 +30,16 @@
</div>
<div class="am-form-group">
<label class="block">是否启用<span class="am-form-group-label-tips">可选、默认是</span></label>
<label class="am-block">是否启用<span class="am-form-group-label-tips">可选、默认是</span></label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_enable']) and $data['is_enable'] eq 1) or !isset($data['is_enable'])}}checked="true"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">是否含头部<span class="am-form-group-label-tips">可选、默认是</span></label>
<label class="am-block">是否含头部<span class="am-form-group-label-tips">可选、默认是</span></label>
<input name="is_header" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_header']) and $data['is_header'] eq 1) or !isset($data['is_header'])}}checked="true"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">是否含尾部<span class="am-form-group-label-tips">可选、默认是</span></label>
<label class="am-block">是否含尾部<span class="am-form-group-label-tips">可选、默认是</span></label>
<input name="is_footer" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_footer']) and $data['is_footer'] eq 1) or !isset($data['is_footer'])}}checked="true"{{/if}} />
</div>
</div>

View File

@ -20,7 +20,7 @@
<!-- form start -->
<form class="am-form form-validation am-form-popup-fixed" action="{{:MyUrl('admin/express/save')}}" method="POST" request-type="ajax-fun" request-value="TreeFormSaveBack">
<div class="am-form-group am-form-file">
<label class="block">icon图标</label>
<label class="am-block">icon图标</label>
<ul class="plug-file-upload-view express-icon-images-view" data-form-name="icon" data-max-number="1" data-dialog-type="images">
<li>
<input type="hidden" name="icon" value="" />

View File

@ -195,7 +195,7 @@
<div class="am-cf">
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group am-form-file">
<label class="block">封面图片<a href="javascript:;" class="am-icon-question-circle am-text-warning am-margin-left-sm" data-am-popover="{content: '留空则取相册第一张图、建议800*800px', trigger: 'hover focus', theme: 'sm'}"></a></label>
<label class="am-block">封面图片<a href="javascript:;" class="am-icon-question-circle am-text-warning am-margin-left-sm" data-am-popover="{content: '留空则取相册第一张图、建议800*800px', trigger: 'hover focus', theme: 'sm'}"></a></label>
<ul class="plug-file-upload-view goods-recommended-images-view" data-form-name="images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['images'])}}
<li>
@ -210,11 +210,11 @@
</div>
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label class="block">扣减库存<a href="javascript:;" class="am-icon-question-circle am-text-warning am-margin-left-sm" data-am-popover="{content: '扣除规则根据后台配置->扣除库存规则而定', trigger: 'hover focus', theme: 'sm'}"></a></label>
<label class="am-block">扣减库存<a href="javascript:;" class="am-icon-question-circle am-text-warning am-margin-left-sm" data-am-popover="{content: '扣除规则根据后台配置->扣除库存规则而定', trigger: 'hover focus', theme: 'sm'}"></a></label>
<input name="is_deduction_inventory" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_deduction_inventory']) and $data['is_deduction_inventory'] eq 1) or empty($data)}}checked="true"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">上下架<a href="javascript:;" class="am-icon-question-circle am-text-warning am-margin-left-sm" data-am-popover="{content: '下架后用户不可见', trigger: 'hover focus', theme: 'sm'}"></a></label>
<label class="am-block">上下架<a href="javascript:;" class="am-icon-question-circle am-text-warning am-margin-left-sm" data-am-popover="{content: '下架后用户不可见', trigger: 'hover focus', theme: 'sm'}"></a></label>
<input name="is_shelves" value="1" type="checkbox" data-off-text="下架" data-on-text="上架" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_shelves']) and $data['is_shelves'] eq 1) or empty($data)}}checked="true"{{/if}} />
</div>
</div>
@ -361,7 +361,7 @@
<li>
<div>
<div class="content-app-left">
<label class="block">图片</label>
<label class="am-block">图片</label>
<ul class="plug-file-upload-view goods-content-app-images-view-{{$v.id}}" data-form-name="content_app_images_{{$v.id}}" data-max-number="1" data-dialog-type="images">
{{if !empty($v['images'])}}
<li>

View File

@ -259,27 +259,27 @@
<div class="am-popup-bd">
<div class="am-alert am-alert-secondary spec-title-container"></div>
<div class="am-form-group">
<label class="block">销售价(元)</label>
<label class="am-block">销售价(元)</label>
<input type="text" placeholder="价格" class="am-radius popup_all_price" pattern="{{$default_price_regex}}" data-validation-message="请填写有效的销售金额" />
</div>
<div class="am-form-group">
<label class="block">原价(元)</label>
<label class="am-block">原价(元)</label>
<input type="text" placeholder="原价" class="am-radius popup_all_original_price" pattern="{{$default_price_regex}}" data-validation-message="请填写有效的原价" />
</div>
<div class="am-form-group">
<label class="block">重量(kg)</label>
<label class="am-block">重量(kg)</label>
<input type="number" placeholder="重量" class="am-radius popup_all_weight" maxlength="80" min="0.00" max="100000000.00" step="0.01" data-validation-message="规格重量 0.00~100000000.00" />
</div>
<div class="am-form-group">
<label class="block">体积(m³)</label>
<label class="am-block">体积(m³)</label>
<input type="number" placeholder="体积" class="am-radius popup_all_volume" maxlength="80" min="0.00" max="100000000.00" step="0.01" data-validation-message="规格体积 0.00~100000000.00" />
</div>
<div class="am-form-group">
<label class="block">编码</label>
<label class="am-block">编码</label>
<input type="text" placeholder="编码" class="am-radius popup_all_coding" maxlength="80" data-validation-message="规格编码最多80个字符" />
</div>
<div class="am-form-group">
<label class="block">条形码</label>
<label class="am-block">条形码</label>
<input type="text" placeholder="条形码" class="am-radius popup_all_barcode" maxlength="80" data-validation-message="条形码最多80个字符" />
</div>
<div class="am-form-group am-form-group-refreshing am-text-center">

View File

@ -24,7 +24,7 @@
{{if !empty($element['name'])}}
<div class="am-form-group">
{{if !empty($element['title']) or !empty($element['desc'])}}
<label class="block">
<label class="am-block">
{{if !empty($element['title'])}}
{{$element.title}}
{{/if}}

View File

@ -22,7 +22,7 @@
<div class="am-cf">
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group am-form-file">
<label class="block">icon图标<span class="am-form-group-label-tips">建议100*100px</span></label>
<label class="am-block">icon图标<span class="am-form-group-label-tips">建议100*100px</span></label>
<ul class="plug-file-upload-view goods-category-icon-images-view" data-form-name="icon" data-max-number="1" data-dialog-type="images">
<li>
<input type="hidden" name="icon" value="" />
@ -35,7 +35,7 @@
</div>
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group am-form-file">
<label class="block">大图片<span class="am-form-group-label-tips">建议360*360px</span></label>
<label class="am-block">大图片<span class="am-form-group-label-tips">建议360*360px</span></label>
<ul class="plug-file-upload-view goods-category-big_images-images-view" data-form-name="big_images" data-max-number="1" data-dialog-type="images">
<li>
<input type="hidden" name="big_images" value="" />

View File

@ -95,7 +95,7 @@
</div>
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label class="block">是否已回复</label>
<label class="am-block">是否已回复</label>
<input name="is_reply" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if isset($data['is_reply']) and $data['is_reply'] eq 1}}checked="true"{{/if}} />
</div>
</div>

View File

@ -28,7 +28,7 @@
</div>
<div class="business-form-group">
<label class="block">参数配置<span class="am-form-group-label-tips-must">*</span></label>
<label class="am-block">参数配置<span class="am-form-group-label-tips-must">*</span></label>
{{include file="public/goodsparamstemplate/tips" /}}
<!-- 通过配置生成商品参数 -->
<div class="am-dropdown" id="parameters-quick-container" data-am-dropdown>
@ -55,7 +55,7 @@
{{include file="public/goodsparamstemplate/table" /}}
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_enable']) and $data['is_enable'] eq 1) or !isset($data['is_enable'])}}checked="true"{{/if}} />
</div>

View File

@ -32,7 +32,7 @@
<input type="text" name="content" placeholder="规格值(输入回车可实现多个)" minlength="1" maxlength="1000" data-validation-message="规格值格式1~1000个字符" class="am-radius" {{if !empty($data['content'])}} value="{{$data.content}}"{{/if}} required data-am-tagsinput />
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_enable']) and $data['is_enable'] eq 1) or !isset($data['is_enable'])}}checked="true"{{/if}} />
</div>

View File

@ -1,5 +1,14 @@
<div class="am-form-group region-linkage" data-url="{{:MyUrl('admin/region/node')}}">
<label class="block">省市区{{if isset($is_force_region_choice) and $is_force_region_choice eq 1}}<span class="am-form-group-label-tips-must">*</span>{{/if}}</label>
<div class="am-form-group region-linkage" data-url="{{:MyUrl('admin/region/node')}}" data-code-url="{{:MyUrl('admin/region/codedata')}}">
<label class="am-block">
<span>省市区</span>
{{if isset($is_force_region_choice) and $is_force_region_choice eq 1}}<span class="am-form-group-label-tips-must">*</span>{{/if}}
<div class="am-input-group am-input-group-sm am-fr region-linkage-code">
<input type="text" class="am-form-field am-radius" placeholder="地区编号" />
<span class="am-input-group-btn">
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius">搜索</button>
</span>
</div>
</label>
<select name="province" data-next="city" class="am-radius chosen-select" data-placeholder="省份" data-validation-message="请选择省份" data-value="{{if isset($data['province'])}}{{$data.province}}{{else /}}0{{/if}}" {{if isset($is_force_region_choice) and $is_force_region_choice eq 1}}required{{/if}}>
<option value="">省份</option>
</select>

View File

@ -28,7 +28,7 @@
</div>
<div class="am-form-group am-form-file">
<label class="block">LOGO</label>
<label class="am-block">LOGO</label>
<ul class="plug-file-upload-view logo-images-view" data-form-name="logo" data-max-number="1" data-dialog-type="images">
{{if !empty($data['logo'])}}
<li>
@ -48,7 +48,7 @@
{{foreach $data.element as $element}}
<div class="am-form-group">
{{if !empty($element['title'])}}
<label class="block">{{$element.title}}{{if !empty($element['desc'])}}<span class="am-form-group-label-tips">{{$element.desc}}</span>{{/if}}</label>
<label class="am-block">{{$element.title}}{{if !empty($element['desc'])}}<span class="am-form-group-label-tips">{{$element.desc}}</span>{{/if}}</label>
{{/if}}
{{switch element.element}}
{{case input}}
@ -154,12 +154,12 @@
</div>
<div class="am-form-group">
<label class="block">用户开放</label>
<label class="am-block">用户开放</label>
<input name="is_open_user" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_open_user']) and $data['is_open_user'] eq 1) or !isset($data['is_open_user'])}}checked="true"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_enable']) and $data['is_enable'] eq 1) or !isset($data['is_enable'])}}checked="true"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">

View File

@ -16,7 +16,7 @@
</div>
<div class="am-form-group am-form-file">
<label class="block">LOGO<span class="am-form-group-label-tips">建议600x600px</span></label>
<label class="am-block">LOGO<span class="am-form-group-label-tips">建议600x600px</span></label>
<ul class="plug-file-upload-view plugins-logo-view" data-form-name="logo" data-max-number="1" data-delete="0" data-dialog-type="images">
<li>
<input type="text" name="logo" value="{{if !empty($data['logo_old'])}}{{$data.logo_old}}{{/if}}" data-validation-message="请上传图片" required />
@ -47,7 +47,7 @@
</div>
<div class="am-form-group am-form-file">
<label class="block">描述</label>
<label class="am-block">描述</label>
<textarea rows="3" name="desc" class="am-radius am-field-valid" placeholder="描述" minlength="2" maxlength="60" data-validation-message="描述内容格式 2~60 个字符">{{if !empty($data['desc'])}}{{$data.desc}}{{/if}}</textarea>
</div>
@ -70,7 +70,7 @@
</div>
<div class="am-form-group">
<label class="block">是否有前端入口<span class="am-form-group-label-tips">前端独立页面入口</span></label>
<label class="am-block">是否有前端入口<span class="am-form-group-label-tips">前端独立页面入口</span></label>
<input name="is_home" value="1" type="checkbox" data-off-text="没有" data-on-text="有" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if isset($data['is_home']) and $data['is_home'] eq 1}}checked="true"{{/if}} />
</div>

View File

@ -40,7 +40,7 @@
</div>
<div class="am-form-group am-form-file">
<label class="block">导航图标<span class="am-form-group-label-tips-must">*</span></label>
<label class="am-block">导航图标<span class="am-form-group-label-tips-must">*</span></label>
<ul class="plug-file-upload-view slide-images_url-images-view" data-form-name="images_url" data-max-number="1" data-delete="0" data-dialog-type="images">
<li>
<input type="text" name="images_url" value="{{if !empty($data['images_url'])}}{{$data.images_url}}{{/if}}" data-validation-message="请上传图片" required />
@ -61,7 +61,7 @@
<input type="number" placeholder="顺序" name="sort" min="0" max="255" data-validation-message="顺序 0~255 之间的数值" class="am-radius" value="{{if isset($data['sort'])}}{{$data.sort}}{{else /}}0{{/if}}" required />
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if !empty($data) and $data['is_enable'] eq 1}} checked="true"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">

View File

@ -18,18 +18,52 @@
</div>
<div class="am-popup-bd">
<!-- form start -->
<form class="am-form form-validation am-form-popup-fixed" action="{{:MyUrl('admin/region/save')}}" method="POST" request-type="ajax-fun" request-value="TreeFormSaveBack">
<div class="am-form-group">
<label>名称<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" placeholder="名称" name="name" minlength="2" maxlength="16" data-validation-message="名称格式 2~16 个字符" class="am-radius" required />
<form class="am-form form-validation am-form-pure am-form-full-screen am-form-popup-fixed" action="{{:MyUrl('admin/region/save')}}" method="POST" request-type="ajax-fun" request-value="TreeFormSaveBack">
<div class="am-cf">
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label>唯一编号<a href="javascript:;" class="am-icon-question-circle am-text-warning am-margin-left-sm" data-am-popover="{content: '1. 留空则系统自动生成<br />3. 不要随意修改、避免数据错乱', trigger: 'hover focus', theme: 'sm'}"></a></label>
<input type="text" placeholder="唯一编号" name="id" maxlength="16" data-validation-message="请输入唯一编号" class="am-radius" />
</div>
</div>
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label>名称<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" placeholder="名称" name="name" minlength="2" maxlength="16" data-validation-message="名称格式 2~16 个字符" class="am-radius" required />
</div>
</div>
</div>
<div class="am-form-group">
<label>顺序</label>
<input type="number" placeholder="顺序" name="sort" min="0" max="255" data-validation-message="顺序 0~255 之间的数值" class="am-radius" value="0" required />
<div class="am-cf">
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label>经度</label>
<input type="number" placeholder="经度" name="lng" step="0.01" data-validation-message="请输入经度" class="am-radius" />
</div>
</div>
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label>纬度</label>
<input type="number" placeholder="纬度" name="lat" step="0.01" data-validation-message="请输入纬度" class="am-radius" />
</div>
</div>
</div>
<div class="am-cf">
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label>首字母</label>
<input type="text" placeholder="首字母" name="letters" data-validation-message="请填写首字母" class="am-radius" value="" />
</div>
</div>
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label>顺序</label>
<input type="number" placeholder="顺序" name="sort" min="0" max="255" data-validation-message="顺序 0~255 之间的数值" class="am-radius" value="0" />
</div>
</div>
</div>
{{include file="lib/enable" /}}
<div class="am-form-popup-submit">
<input type="hidden" name="id" />
<input type="hidden" name="pid" value="0" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>

View File

@ -69,7 +69,7 @@
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_enable']) and $data['is_enable'] eq 1) or !isset($data['is_enable'])}}checked="true"{{/if}} />
</div>

View File

@ -20,7 +20,7 @@
<input type="text" name="{{$data.home_site_name.only_tag}}" minlength="1" placeholder="{{$data.home_site_name.name}}" data-validation-message="{{$data.home_site_name.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_name.value}}"{{/if}} required />
</div>
<div class="am-form-group">
<label class="block">{{$data.home_site_logo.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo.describe}}</span></label>
<label class="am-block">{{$data.home_site_logo.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo.describe}}</span></label>
<ul class="plug-file-upload-view home_site_logo-images-view" data-form-name="home_site_logo" data-max-number="1" data-delete="0" data-dialog-type="images">
{{if !empty($data['home_site_logo']['value'])}}
<li>
@ -33,7 +33,7 @@
</div>
<div class="am-form-group">
<label class="block">{{$data.home_site_logo_wap.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo_wap.describe}}</span></label>
<label class="am-block">{{$data.home_site_logo_wap.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo_wap.describe}}</span></label>
<ul class="plug-file-upload-view home_site_logo_wap-images-view" data-form-name="home_site_logo_wap" data-max-number="1" data-delete="0" data-dialog-type="images">
{{if !empty($data['home_site_logo_wap']['value'])}}
<li>
@ -46,7 +46,7 @@
</div>
<div class="am-form-group">
<label class="block">{{$data.home_site_logo_square.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo_square.describe}}</span></label>
<label class="am-block">{{$data.home_site_logo_square.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo_square.describe}}</span></label>
<ul class="plug-file-upload-view home_site_logo_square-images-view" data-form-name="home_site_logo_square" data-max-number="1" data-delete="0" data-dialog-type="images">
{{if !empty($data['home_site_logo_square']['value'])}}
<li>

View File

@ -16,7 +16,7 @@
</div>
<div class="am-panel-bd am-padding-vertical-xs">
<div class="am-form-group">
<label class="block">{{$data.home_site_user_forgetpwd_ad1_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_forgetpwd_ad1_images.describe}}</span></label>
<label class="am-block">{{$data.home_site_user_forgetpwd_ad1_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_forgetpwd_ad1_images.describe}}</span></label>
<ul class="plug-file-upload-view home_site_user_forgetpwd_ad1_images-images-view" data-form-name="home_site_user_forgetpwd_ad1_images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['home_site_user_forgetpwd_ad1_images']['value'])}}
<li>
@ -51,7 +51,7 @@
</div>
<div class="am-panel-bd am-padding-vertical-xs">
<div class="am-form-group">
<label class="block">{{$data.home_site_user_forgetpwd_ad2_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_forgetpwd_ad2_images.describe}}</span></label>
<label class="am-block">{{$data.home_site_user_forgetpwd_ad2_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_forgetpwd_ad2_images.describe}}</span></label>
<ul class="plug-file-upload-view home_site_user_forgetpwd_ad2_images-images-view" data-form-name="home_site_user_forgetpwd_ad2_images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['home_site_user_forgetpwd_ad2_images']['value'])}}
<li>
@ -86,7 +86,7 @@
</div>
<div class="am-panel-bd am-padding-vertical-xs">
<div class="am-form-group">
<label class="block">{{$data.home_site_user_forgetpwd_ad3_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_forgetpwd_ad3_images.describe}}</span></label>
<label class="am-block">{{$data.home_site_user_forgetpwd_ad3_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_forgetpwd_ad3_images.describe}}</span></label>
<ul class="plug-file-upload-view home_site_user_forgetpwd_ad3_images-images-view" data-form-name="home_site_user_forgetpwd_ad3_images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['home_site_user_forgetpwd_ad3_images']['value'])}}
<li>

View File

@ -42,7 +42,7 @@
</div>
<div class="am-panel-bd am-padding-vertical-xs">
<div class="am-form-group">
<label class="block">{{$data.home_site_user_login_ad1_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_login_ad1_images.describe}}</span></label>
<label class="am-block">{{$data.home_site_user_login_ad1_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_login_ad1_images.describe}}</span></label>
<ul class="plug-file-upload-view home_site_user_login_ad1_images-images-view" data-form-name="home_site_user_login_ad1_images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['home_site_user_login_ad1_images']['value'])}}
<li>
@ -77,7 +77,7 @@
</div>
<div class="am-panel-bd am-padding-vertical-xs">
<div class="am-form-group">
<label class="block">{{$data.home_site_user_login_ad2_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_login_ad2_images.describe}}</span></label>
<label class="am-block">{{$data.home_site_user_login_ad2_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_login_ad2_images.describe}}</span></label>
<ul class="plug-file-upload-view home_site_user_login_ad2_images-images-view" data-form-name="home_site_user_login_ad2_images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['home_site_user_login_ad2_images']['value'])}}
<li>
@ -112,7 +112,7 @@
</div>
<div class="am-panel-bd am-padding-vertical-xs">
<div class="am-form-group">
<label class="block">{{$data.home_site_user_login_ad3_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_login_ad3_images.describe}}</span></label>
<label class="am-block">{{$data.home_site_user_login_ad3_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_login_ad3_images.describe}}</span></label>
<ul class="plug-file-upload-view home_site_user_login_ad3_images-images-view" data-form-name="home_site_user_login_ad3_images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['home_site_user_login_ad3_images']['value'])}}
<li>

View File

@ -46,7 +46,7 @@
</div>
<div class="am-form-group">
<label class="block">{{$data.home_site_user_register_bg_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_register_bg_images.describe}}</span></label>
<label class="am-block">{{$data.home_site_user_register_bg_images.name}}<span class="am-form-group-label-tips">{{$data.home_site_user_register_bg_images.describe}}</span></label>
<ul class="plug-file-upload-view home_site_user_register_bg_images-images-view" data-form-name="home_site_user_register_bg_images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['home_site_user_register_bg_images']['value'])}}
<li>

View File

@ -116,7 +116,7 @@
<div class="am-popup-bd">
<form class="am-form form-validation-address" method="post" request-type="sync" request-value="ViewAddressModalBack">
<div class="am-form-group am-form-file">
<label class="block">logo图片<span class="am-form-group-label-tips">选传</span><span class="am-form-group-label-tips">建议300x300px</span></label>
<label class="am-block">logo图片<span class="am-form-group-label-tips">选传</span><span class="am-form-group-label-tips">建议300x300px</span></label>
<ul class="plug-file-upload-view sitetype-logo" data-form-name="logo" data-max-number="1" data-dialog-type="images"></ul>
<div class="plug-file-upload-submit" data-view-tag="ul.sitetype-logo">+上传图片</div>
</div>

View File

@ -40,7 +40,7 @@
</div>
<div class="am-form-group am-form-file">
<label class="block">轮播图片<span class="am-form-group-label-tips-must">*</span></label>
<label class="am-block">轮播图片<span class="am-form-group-label-tips-must">*</span></label>
<ul class="plug-file-upload-view slide-images_url-images-view" data-form-name="images_url" data-max-number="1" data-delete="0" data-dialog-type="images">
<li>
<input type="text" name="images_url" value="{{if !empty($data['images_url'])}}{{$data.images_url}}{{/if}}" data-validation-message="请上传图片" required />
@ -68,7 +68,7 @@
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (!empty($data) and $data['is_enable'] eq 1) or empty($data)}}checked="true"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">

View File

@ -66,7 +66,7 @@
</div>
<div class="am-form-group">
<label class="block">是否默认</label>
<label class="am-block">是否默认</label>
<input name="is_default" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="49" data-am-switch {{if isset($data['is_default']) and $data['is_default'] eq 1}}checked="true"{{/if}} />
</div>
<div class="am-alert am-alert-secondary">

View File

@ -31,13 +31,13 @@
<div class="am-cf">
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label class="block">是否默认</label>
<label class="am-block">是否默认</label>
<input name="is_default" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="49" data-am-switch {{if isset($data['is_default']) and $data['is_default'] eq 1}}checked="true"{{/if}} />
</div>
</div>
<div class="am-u-sm-6 am-padding-horizontal-0">
<div class="am-form-group">
<label class="block">是否启用</label>
<label class="am-block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="49" data-am-switch {{if isset($data['is_enable']) and $data['is_enable'] eq 1}}checked="true"{{/if}} />
</div>
</div>

View File

@ -69,5 +69,18 @@ class Region extends Common
{
return ApiService::ApiDataReturn(RegionService::RegionAll());
}
/**
* 获取地区编号数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-21
* @desc description
*/
public function CodeData()
{
return ApiService::ApiDataReturn(RegionService::RegionCodeData($this->data_post));
}
}
?>

View File

@ -51,7 +51,7 @@ class Region extends Common
['pid', '=', $pid],
],
];
return ApiService::ApiDataReturn(DataReturn('获取成功', 0, RegionService::RegionNode($params)));
return ApiService::ApiDataReturn(DataReturn('success', 0, RegionService::RegionNode($params)));
}
/**
@ -66,5 +66,18 @@ class Region extends Common
{
return ApiService::ApiDataReturn(RegionService::RegionAll());
}
/**
* 获取地区编号数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-21
* @desc description
*/
public function CodeData()
{
return ApiService::ApiDataReturn(RegionService::RegionCodeData($this->data_post));
}
}
?>

View File

@ -1,5 +1,14 @@
<div class="am-form-group region-linkage" data-url="{{:MyUrl('index/region/index')}}">
<label class="block">省市区{{if isset($is_force_region_choice) and $is_force_region_choice eq 1}}<span class="am-form-group-label-tips-must">*</span>{{/if}}</label>
<div class="am-form-group region-linkage" data-url="{{:MyUrl('index/region/index')}}" data-code-url="{{:MyUrl('index/region/codedata')}}">
<label class="am-block">
<span>省市区</span>
{{if isset($is_force_region_choice) and $is_force_region_choice eq 1}}<span class="am-form-group-label-tips-must">*</span>{{/if}}
<div class="am-input-group am-input-group-sm am-fr region-linkage-code">
<input type="text" class="am-form-field am-radius" placeholder="地区编号" />
<span class="am-input-group-btn">
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius">搜索</button>
</span>
</div>
</label>
<select name="province" data-next="city" class="am-radius chosen-select" data-placeholder="省份" data-validation-message="请选择省份" data-value="{{if isset($data['province'])}}{{$data.province}}{{else /}}0{{/if}}" {{if isset($is_force_region_choice) and $is_force_region_choice eq 1}}required{{/if}}>
<option value="">省份</option>
</select>

View File

@ -96,7 +96,7 @@
{{/if}}
<div class="am-form-group business-form-block">
<label class="block">是否匿名<span class="am-form-group-label-tips">开启后你写的评论会以匿名的形式展现</span></label>
<label class="am-block">是否匿名<span class="am-form-group-label-tips">开启后你写的评论会以匿名的形式展现</span></label>
<input name="is_anonymous" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch />
</div>

View File

@ -48,7 +48,7 @@
</div>
<div class="am-form-group">
<label class="block">是否默认</label>
<label class="am-block">是否默认</label>
<input name="is_default" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="49" data-am-switch {{if isset($data['is_default']) and $data['is_default'] eq 1}}checked="true"{{/if}} />
</div>
{{if MyC('home_user_address_idcard_status') eq 1}}

View File

@ -35,6 +35,7 @@ return [
'goods_no_choice_spec_tips' => '请选择规格',
'goods_spec_empty_tips' => '无规格数据',
'goods_id_empty_tips' => '商品ID数据',
'input_empty_tips' => '请输入数据',
'store_enabled_tips' => '您的浏览器不支持本地存储。请禁用“专用模式”,或升级到现代浏览器。',
// 上传下载
'get_loading_tips' => '正在获取中..',
@ -88,6 +89,8 @@ return [
'error' => '异常错误',
'operate_fail' => '操作失败',
'operate_success' => '操作成功',
'get_fail' => '获取失败',
'get_success' => '获取成功',
'update_fail' => '更新失败',
'update_success' => '更新成功',
'insert_fail' => '添加失败',

View File

@ -14,7 +14,7 @@ return [
// 全局请求缓存
// \think\middleware\CheckRequestCache::class,
// 多语言加载
// \think\middleware\LoadLangPack::class,
\think\middleware\LoadLangPack::class,
// Session初始化
\think\middleware\SessionInit::class
];

View File

@ -622,6 +622,7 @@ class GoodsService
$is_category = (isset($params['is_category']) && $params['is_category'] == true) ? true : false;
$is_params = (isset($params['is_params']) && $params['is_params'] == true) ? true : false;
$data_key_field = empty($params['data_key_field']) ? 'id' : $params['data_key_field'];
$goods_ids = array_filter(array_column($data, $data_key_field));
// 字段列表
$keys = ArrayKeys($data);
@ -639,7 +640,13 @@ class GoodsService
}
// 商品分类
$category_group = $is_category ? self::GoodsListCategoryGroupList(array_column($data, $data_key_field)) : [];
$category_group = $is_category ? self::GoodsListCategoryGroupList($goods_ids) : [];
// 规格
$spec_group = $is_spec ? self::GoodsSpecificationsData($goods_ids) : [];
// 参数
$params_group = $is_params ? self::GoodsParametersData($goods_ids) : [];
// 开始处理数据
foreach($data as &$v)
@ -774,13 +781,13 @@ class GoodsService
// 获取规格
if($is_spec && !empty($data_id))
{
$v['specifications'] = self::GoodsSpecificationsData($data_id);
$v['specifications'] = (!empty($spec_group) && array_key_exists($data_id, $spec_group)) ? $spec_group[$data_id] : [];
}
// 获取商品参数
if($is_params && !empty($data_id))
{
$v['parameters'] = self::GoodsParametersData($data_id);
$v['parameters'] = (!empty($params_group) && array_key_exists($data_id, $params_group)) ? $params_group[$data_id] : [];
}
// 获取app内容
@ -959,50 +966,63 @@ class GoodsService
* @version 1.0.0
* @date 2020-07-16
* @desc description
* @param [int] $goods_id [商品id]
* @param [array] $goods_ids [商品id]
*/
public static function GoodsSpecificationsData($goods_id)
public static function GoodsSpecificationsData($goods_ids)
{
// 条件
$where = ['goods_id'=>$goods_id];
// 规格类型
$choose = Db::name('GoodsSpecType')->where($where)->order('id asc')->select()->toArray();
if(!empty($choose))
$group = [];
$data = Db::name('GoodsSpecType')->where(['goods_id'=>$goods_ids])->order('id asc')->select()->toArray();
if(!empty($data))
{
// 数据处理
foreach($choose as &$temp_type)
// 分组
foreach($data as $v)
{
$temp_type_value = json_decode($temp_type['value'], true);
foreach($temp_type_value as &$vs)
if(!array_key_exists($v['goods_id'], $group))
{
$vs['images'] = ResourcesService::AttachmentPathViewHandle($vs['images']);
$group[$v['goods_id']] = ['choose'=>[]];
}
$temp_type['value'] = $temp_type_value;
$temp_type['add_time'] = date('Y-m-d H:i:s');
$group[$v['goods_id']]['choose'][] = $v;
}
// 只有一个规格的时候直接获取规格值的库存数
if(count($choose) == 1)
// 数据处理
foreach($group as $gid=>&$gv)
{
foreach($choose[0]['value'] as &$temp_spec)
if(!empty($gv['choose']))
{
$temp_spec_params = [
'id' => $goods_id,
'spec' => [
['type' => $choose[0]['name'], 'value' => $temp_spec['name']]
],
];
$temp = self::GoodsSpecDetail($temp_spec_params);
if($temp['code'] == 0)
// 基础处理
foreach($gv['choose'] as &$gvs)
{
$temp_spec['is_only_level_one'] = 1;
$temp_spec['inventory'] = $temp['data']['spec_base']['inventory'];
$gvs_value = json_decode($gvs['value'], true);
foreach($gvs_value as &$gvss)
{
$gvss['images'] = ResourcesService::AttachmentPathViewHandle($gvss['images']);
}
$gvs['value'] = $gvs_value;
$gvs['add_time'] = date('Y-m-d H:i:s', $gvs['add_time']);
}
// 只有一个规格的时候直接获取规格值的库存数
if(count($gv['choose']) == 1)
{
foreach($gv['choose'][0]['value'] as &$temp_spec)
{
$temp_spec_params = [
'id' => $gid,
'spec' => [
['type' => $gv['choose'][0]['name'], 'value' => $temp_spec['name']]
],
];
$temp = self::GoodsSpecDetail($temp_spec_params);
if($temp['code'] == 0)
{
$temp_spec['is_only_level_one'] = 1;
$temp_spec['inventory'] = $temp['data']['spec_base']['inventory'];
}
}
}
}
}
}
return ['choose'=>$choose];
return $group;
}
/**
@ -1012,49 +1032,43 @@ class GoodsService
* @version 1.0.0
* @date 2020-08-31
* @desc description
* @param [int] $goods_id [商品id]
* @param [array] $goods_ids [商品id]
*/
public static function GoodsParametersData($goods_id)
public static function GoodsParametersData($goods_ids)
{
$base = [];
$detail = [];
$list = Db::name('GoodsParams')->where(['goods_id'=>$goods_id])->order('id asc')->select()->toArray();
$data = [];
$list = Db::name('GoodsParams')->where(['goods_id'=>$goods_ids])->order('id asc')->select()->toArray();
if(!empty($list))
{
// 分组
foreach($list as $v)
{
$temp = [
'name' => $v['name'],
'value' => $v['value'],
];
if(!array_key_exists($v['goods_id'], $data))
{
$data[$v['goods_id']] = ['base'=>[], 'detail'=>[]];
}
// 基础
if(in_array($v['type'], [0,2]))
{
$base[] = $temp;
$data[$v['goods_id']]['base'][] = $v;
}
// 详情
if(in_array($v['type'], [0,1]))
{
$detail[] = $temp;
$data[$v['goods_id']]['detail'][] = $v;
}
}
}
// 返回的数据
$data = [
'base' => $base,
'detail' => $detail,
];
// 商品参数钩子
$hook_name = 'plugins_service_goods_parameters_data';
MyEventTrigger($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'data' => &$data,
'goods_id' => $goods_id,
'goods_ids' => $goods_ids,
]);
return $data;
@ -2335,56 +2349,72 @@ class GoodsService
// 条件
$goods_id = intval($params['id']);
$where = [
'goods_id' => intval($params['id']),
'goods_id' => $goods_id,
];
// 规格
// 规格数据
// 规格不为数组则为json字符串
$spec = [];
if(!empty($params['spec']))
{
// 规格不为数组则为json字符串
if(!is_array($params['spec']))
{
$params['spec'] = json_decode(htmlspecialchars_decode($params['spec']), true);
$spec = json_decode(htmlspecialchars_decode($params['spec']), true);
}
$where['value'] = array_column($params['spec'], 'value');
$spec = array_column($params['spec'], 'value');
}
// 获取规格基础值id
$ids = Db::name('GoodsSpecValue')->where($where)->column('goods_spec_base_id');
if(!empty($ids))
// 规格基础静态临时存储
static $goods_service_goods_spec_base_static_data = [];
$key = $goods_id.(empty($spec) ? '' : md5(json_encode($spec, JSON_UNESCAPED_UNICODE)));
if(array_key_exists($key, $goods_service_goods_spec_base_static_data))
{
$base = $goods_service_goods_spec_base_static_data[$key];
} else {
// 有规格值
$base = [];
if(!empty($spec))
{
// 根据基础值id获取规格值列表
$temp_data = Db::name('GoodsSpecValue')->where(['goods_spec_base_id'=>$ids])->field('goods_spec_base_id,value')->order('id asc')->select()->toArray();
if(!empty($temp_data))
// 获取规格值基础值id
$where['value'] = $spec;
$ids = Db::name('GoodsSpecValue')->where($where)->column('goods_spec_base_id');
if(!empty($ids))
{
// 根据基础值id分组
$data = [];
foreach($temp_data as $v)
// 根据基础值id获取规格值列表
$temp_data = Db::name('GoodsSpecValue')->where(['goods_spec_base_id'=>$ids])->field('goods_spec_base_id,value')->order('id asc')->select()->toArray();
if(!empty($temp_data))
{
$data[$v['goods_spec_base_id']][] = $v;
}
// 从条件中匹配对应的规格值得到最终的基础值id
$base_id = 0;
$spec_str = implode('', array_column($params['spec'], 'value'));
foreach($data as $value_v)
{
$temp_str = implode('', array_column($value_v, 'value'));
if($temp_str == $spec_str)
// 根据基础值id分组
$data = [];
foreach($temp_data as $v)
{
$base_id = $value_v[0]['goods_spec_base_id'];
break;
$data[$v['goods_spec_base_id']][] = $v;
}
// 从条件中匹配对应的规格值得到最终的基础值id
$base_id = 0;
$spec_str = implode('', array_column($params['spec'], 'value'));
foreach($data as $value_v)
{
$temp_str = implode('', array_column($value_v, 'value'));
if($temp_str == $spec_str)
{
$base_id = $value_v[0]['goods_spec_base_id'];
break;
}
}
// 获取基础值数据
if(!empty($base_id))
{
$base = Db::name('GoodsSpecBase')->find($base_id);
}
}
// 获取基础值数据
if(!empty($base_id))
{
$base = Db::name('GoodsSpecBase')->find($base_id);
}
}
} else {
$base = Db::name('GoodsSpecBase')->where($where)->find();
}
} else {
$base = Db::name('GoodsSpecBase')->where($where)->find();
$goods_service_goods_spec_base_static_data[$key] = $base;
}
// 是否有规格

View File

@ -38,29 +38,37 @@ class PluginsService
*/
public static function PluginsData($plugins, $attachment_field = [], $is_cache = true)
{
// 从缓存获取数据、数据不存在则从数据库读取
$data = ($is_cache === true) ? self::PluginsCacheData($plugins) : [];
if(empty($data) || !$is_cache || MyEnv('app_debug'))
static $static_all_plugins_data = [];
if(array_key_exists($plugins, $static_all_plugins_data))
{
// 获取数据
$ret = self::PluginsField($plugins, 'data');
if(!empty($ret['data']))
$data = $static_all_plugins_data[$plugins];
} else {
// 从缓存获取数据、数据不存在则从数据库读取
$data = ($is_cache === true) ? self::PluginsCacheData($plugins) : [];
if($data === null || !$is_cache || MyEnv('app_debug'))
{
// 获取插件基础字段定义
$field_data = self::PluginsBaseFieldData($plugins);
// 数据处理、未指定附件字段则使用系统获取的附件字段
if(empty($attachment_field) && !empty($field_data['attachment_field']))
// 获取数据
$ret = self::PluginsField($plugins, 'data');
if(!empty($ret['data']))
{
$attachment_field = $field_data['attachment_field'];
}
$data = self::PluginsDataHandle($ret['data'], $attachment_field);
} else {
$data = [];
}
// 获取插件基础字段定义
$field_data = self::PluginsBaseFieldData($plugins);
// 存储缓存
self::PluginsCacheStorage($plugins, $data);
// 数据处理、未指定附件字段则使用系统获取的附件字段
if(empty($attachment_field) && !empty($field_data['attachment_field']))
{
$attachment_field = $field_data['attachment_field'];
}
$data = self::PluginsDataHandle($ret['data'], $attachment_field);
} else {
$data = [];
}
// 存储缓存
self::PluginsCacheStorage($plugins, $data);
}
// 加入静态记录
$static_all_plugins_data[$plugins] = $data;
}
return DataReturn(MyLang('common.handle_success'), 0, $data);
}

View File

@ -84,7 +84,7 @@ class RegionService
public static function RegionNode($params = [])
{
// 数据参数
$field = empty($params['field']) ? 'id,name,level,letters' : $params['field'];
$field = empty($params['field']) ? 'id,pid,name,level,letters,lng,lat,sort,is_enable' : $params['field'];
$where = empty($params['where']) ? [] : $params['where'];
$order_by = empty($params['order_by']) ? 'sort asc,id asc' : trim($params['order_by']);
@ -107,14 +107,14 @@ class RegionService
$id = isset($params['id']) ? intval($params['id']) : 0;
// 获取数据
$field = 'id,pid,name,sort,is_enable';
$field = 'id,pid,name,level,letters,lng,lat,sort,is_enable';
$data = Db::name('Region')->field($field)->where(['pid'=>$id])->order('sort asc,id asc')->select()->toArray();
if(!empty($data))
{
foreach($data as &$v)
{
$v['is_son'] = (Db::name('Region')->where(['pid'=>$v['id']])->count() > 0) ? 'ok' : 'no';
$v['json'] = json_encode($v);
$v['is_son'] = (Db::name('Region')->where(['pid'=>$v['id']])->count() > 0) ? 'ok' : 'no';
$v['json'] = json_encode($v);
}
return DataReturn(MyLang('common.operate_success'), 0, $data);
}
@ -148,14 +148,21 @@ class RegionService
// 数据
$data = [
'name' => $params['name'],
'pid' => isset($params['pid']) ? intval($params['pid']) : 0,
'sort' => isset($params['sort']) ? intval($params['sort']) : 0,
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
'name' => $params['name'],
'pid' => isset($params['pid']) ? intval($params['pid']) : 0,
'lng' => isset($params['lng']) ? floatval($params['lng']) : 0,
'lat' => isset($params['lat']) ? floatval($params['lat']) : 0,
'letters' => empty($params['letters']) ? '' : $params['letters'],
'sort' => isset($params['sort']) ? intval($params['sort']) : 0,
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
];
// 得到level风车车
$data['level'] = ($data['pid'] > 0) ? (Db::name('Region')->where(['id'=>$data['pid']])->value('level')+1) : 0;
if(!empty($params['id']))
{
$params['id'] = intval($params['id']);
}
// 得到level
$data['level'] = ($data['pid'] > 0) ? (Db::name('Region')->where(['id'=>$data['pid']])->value('level')+1) : 1;
// 添加
if(empty($params['id']))
@ -322,8 +329,75 @@ class RegionService
MyCache($key, $data, 60);
}
}
return DataReturn('success', 0, $data);
}
/**
* 根据编号获取地区数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2023-01-16
* @desc description
* @param [array] $params [输入参数]
*/
public static function RegionCodeData($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'code',
'error_msg' => '请输入地区编号',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 获取地区
$result = ['province'=>'', 'city'=>'', 'county'=>''];
$field = 'id,pid,level';
$region = self::RegionNode(['field'=>$field, 'where'=>[['id', '=', $params['code']]]]);
if(!empty($region) && !empty($region[0]))
{
$arr = [1=>'province', 2=>'city', 3=>'county'];
if(array_key_exists($region[0]['level'], $arr))
{
$result[$arr[$region[0]['level']]] = $region[0]['id'];
// 上一级
if($region[0]['level'] > 1)
{
$region = self::RegionNode(['field'=>$field, 'where'=>[['id', '=', $region[0]['pid']]]]);
if(!empty($region) && !empty($region[0]))
{
if(array_key_exists($region[0]['level'], $arr))
{
$result[$arr[$region[0]['level']]] = $region[0]['id'];
// 上一级
if($region[0]['level'] > 1)
{
$region = self::RegionNode(['field'=>$field, 'where'=>[['id', '=', $region[0]['pid']]]]);
if(!empty($region) && !empty($region[0]))
{
if(array_key_exists($region[0]['level'], $arr))
{
$result[$arr[$region[0]['level']]] = $region[0]['id'];
}
}
}
}
}
}
}
}
if(empty($result) || count(array_filter(array_values($result))) == 0)
{
return DataReturn('无相关地区', -1);
}
return DataReturn(MyLang('common.get_success'), 0, $result);
}
}
?>

View File

@ -421,7 +421,15 @@ class SystemBaseService
case 'plugins_service_goods_handle_end' :
if(!empty($params['goods']) && !empty($params['goods']['id']))
{
$old = Db::name('Goods')->field('price,min_price,max_price')->find($params['goods']['id']);
// 静态类似存储数据避免重复读取浪费mysql
static $system_base_service_goods_handle_info_static_data = [];
if(array_key_exists($params['goods']['id'], $system_base_service_goods_handle_info_static_data))
{
$old = $system_base_service_goods_handle_info_static_data[$params['goods']['id']];
} else {
$old = Db::name('Goods')->field('price,min_price,max_price')->find($params['goods']['id']);
$system_base_service_goods_handle_info_static_data[$params['goods']['id']] = $old;
}
if(!empty($old))
{
// 展示销售价格
@ -463,7 +471,17 @@ class SystemBaseService
{
// key字段
$key_field = empty($params['params']['data_key_field']) ? 'id' : $params['params']['data_key_field'];
$old = Db::name('Goods')->where(['id'=>array_column($params['data'], $key_field)])->column('id,price,min_price,max_price', 'id');
$goods_ids = array_column($params['data'], $key_field);
// 静态类似存储数据避免重复读取浪费mysql
$key = md5(implode('', $goods_ids));
static $system_base_service_goods_list_handle_column_static_data = [];
if(array_key_exists($key, $system_base_service_goods_list_handle_column_static_data))
{
$old = $system_base_service_goods_list_handle_column_static_data[$key];
} else {
$old = Db::name('Goods')->where(['id'=>$goods_ids])->column('id,price,min_price,max_price', 'id');
$system_base_service_goods_list_handle_column_static_data[$key] = $old;
}
if(!empty($old))
{
foreach($params['data'] as $goods)
@ -513,8 +531,17 @@ class SystemBaseService
case 'plugins_service_goods_spec_base' :
if(!empty($params['data']) && !empty($params['data']['spec_base']) && !empty($params['data']['spec_base']['id']) && !empty($params['data']['spec_base']['goods_id']) && isset($params['data']['spec_base']['price']))
{
$price_old = Db::name('GoodsSpecBase')->where(['id'=>$params['data']['spec_base']['id']])->value('price');
if($status == 1 && $params['data']['spec_base']['price'] < $price_old)
$base_id = $params['data']['spec_base']['id'];
// 静态类似存储数据避免重复读取浪费mysql
static $system_base_service_goods_spec_base_price_static_data = [];
if(array_key_exists($base_id, $system_base_service_goods_spec_base_price_static_data))
{
$price_old = $system_base_service_goods_spec_base_price_static_data[$base_id];
} else {
$price_old = Db::name('GoodsSpecBase')->where(['id'=>$base_id])->value('price');
$system_base_service_goods_spec_base_price_static_data[$base_id] = $price_old;
}
if($params['data']['spec_base']['price'] < $price_old)
{
$status = 0;
}

View File

@ -351,7 +351,7 @@ class UserAddressService
'county' => isset($params['county']) ? intval($params['county']) : 0,
'address' => $params['address'],
'lng' => isset($params['lng']) ? floatval($params['lng']) : 0,
'lat' => isset($params['lat']) ? floatval($params['lat']) : 0 ,
'lat' => isset($params['lat']) ? floatval($params['lat']) : 0,
'idcard_name' => empty($params['idcard_name']) ? '' : $params['idcard_name'],
'idcard_number' => empty($params['idcard_number']) ? '' : $params['idcard_number'],
'idcard_front' => $attachment['data']['idcard_front'],

View File

@ -1377,17 +1377,31 @@ button.colorpicker-submit img {
padding-left: 80px;
}
/**
* 公共联动地区组件样式
*/
.region-linkage .chosen-select {
display: -webkit-inline-box;
width: calc(33.3% - 3px) !important;
width: calc(33.33% - 3px) !important;
}
.region-linkage .chosen-select .chosen-single {
width: 100%;
}
.region-linkage .chosen-select.chosen-container:last-child {
float: right;
}
.region-linkage-code {
width: 150px;
}
.region-linkage-code input {
padding: 2px 5px !important;
height: 20px !important;
}
.region-linkage-code button {
line-height: 20px !important;
height: 20px !important;
padding: 0 10px !important;
}
/**
* 小微章-镂空

View File

@ -1838,7 +1838,17 @@ function TreeFormInit()
$title.text($title.attr('data-add-title'));
// 填充数据
var data = {id:"", pid:0, name:"", vice_name: "", describe: "", sort:0, is_enable:1, icon:"", big_images: "", seo_title:"", seo_keywords:"", seo_desc:""};
var data = {id:'', pid:0, name:'', vice_name:'', describe:'', letters:'', lng:'', lat:'', sort:0, is_enable:1, icon:'', big_images:'', seo_title:'', seo_keywords:'', seo_desc:''};
// 指定字段
var fields = $popup.data('fields') || null;
if(fields != null)
{
var arr = fields.split(',');
for(var i in arr)
{
data[arr[i]] = '';
}
}
// 额外处理数据
data = FunSaveWinAdditional(data, 'init');
@ -3602,6 +3612,56 @@ $(function()
// 地址初始化
RegionLinkageInit();
// 地址编号搜索
$('.region-linkage-code button').on('click', function()
{
var code = $(this).parents('.region-linkage-code').find('input').val() || null;
if(code == null)
{
Prompt(window['lang_input_empty_tips'] || '请输入数据');
return false;
}
var $this = $(this);
var $parent = $this.parents('.region-linkage');
$this.attr('disabled', true);
$.ajax({
url: RequestUrlHandle($parent.data('code-url')),
type: 'POST',
dataType: 'json',
timeout: 30000,
data: {code: code},
success: function(result)
{
$this.attr('disabled', false);
if(result.code == 0)
{
// 更新选中值
$parent.find('select[name="province"]').attr('data-value', result.data.province);
$parent.find('select[name="city"]').attr('data-value', result.data.city);
$parent.find('select[name="county"]').attr('data-value', result.data.county);
// 地址初始化
RegionLinkageInit();
Prompt(result.msg, 'success');
} else {
Prompt(result.msg);
}
},
error: function(xhr, type)
{
$this.attr('disabled', false);
Prompt(HtmlToString(xhr.responseText) || (window['lang_error_text'] || '异常错误'));
}
});
});
$('.region-linkage-code input').on('keydown', function()
{
if(event.keyCode == 13)
{
$(this).parents('.region-linkage-code').find('button').trigger('click');
return false;
}
});
// 根据字符串地址获取坐标位置
$('#map-location-submit').on('click', function()
{