初始上传
This commit is contained in:
688
app/shop/view/store/add_store.html
Executable file
688
app/shop/view/store/add_store.html
Executable file
@@ -0,0 +1,688 @@
|
||||
<style>
|
||||
#container{ width: 650px; height: 500px; }
|
||||
#container > div {z-index: 500!important}
|
||||
.empty-address{ display: none; }
|
||||
.address-content {display: inline-block;vertical-align: top;}
|
||||
.day-wrap {display: flex;align-items: center}
|
||||
.day-input {width: 80px}
|
||||
.day-input[readonly] {background: #f5f5f5}
|
||||
.day-wrap .layui-form-radio:nth-child(4) {margin-right: 0px}
|
||||
.upload-img-block .upload-img-box .preview_img{width: 100%; height: 100%; display: flex; justify-content: center; align-items: center;}
|
||||
.upload-img-block .upload-img-box .preview_img img{max-width: 100%; max-height: 100%;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap" lay-filter="editselffetch">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="store_name" autocomplete="off" lay-verify="store_name" class="layui-input len-long">
|
||||
</div>
|
||||
<div class="word-aux">门店的名称(招牌)</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label img-upload-lable">门店Logo:</label>
|
||||
<div class="layui-input-block img-upload">
|
||||
<div class="upload-img-block icon">
|
||||
<div class="upload-img-box logo-image-box hover"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>门店图片在PC及移动端对应页面及列表作为门店标志出现。</p>
|
||||
<p>建议图片尺寸:100 * 100像素,图片格式:jpg、png、jpeg。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店图片:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="js-store-image"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店电话:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="telphone" autocomplete="off" lay-verify="tel" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">营业状态:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="status" value="1" lay-skin="switch">
|
||||
</div>
|
||||
<div class="word-aux">营业状态关闭时,该门店处于休息状态,用户端门店列表不会展示门店</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否启用自提:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" value="1" name="is_pickup" lay-skin="switch">
|
||||
</div>
|
||||
<div class="word-aux">当启用自提,该门店支持到店自提的配送方式</div>
|
||||
</div>
|
||||
|
||||
<!--自提点地址-->
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店地址:</label>
|
||||
<div class="layui-input-inline len-mid area-select">
|
||||
<select name="province_id" lay-filter="province_id" lay-verify="province_id">
|
||||
<option value="">请选择省份</option>
|
||||
{foreach $province_list as $k => $v}
|
||||
<option value="{$v.id}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline len-mid area-select">
|
||||
<select name="city_id" lay-filter="city_id" lay-verify="city_id">
|
||||
<option value="">请选择城市</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline len-mid area-select">
|
||||
<select name="district_id" lay-filter="district_id" lay-verify="district_id">
|
||||
<option value="">请选择区/县</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="address" placeholder="请填写门店的具体地址" lay-verify="required" autocomplete="off" class="layui-input len-long address-content" value="">
|
||||
<input type = "hidden" name="longitude" lay-verify="required" class="layui-input"/>
|
||||
<input type = "hidden" name="latitude" lay-verify="required" class="layui-input"/>
|
||||
<button class='layui-btn-primary layui-btn' onclick="refreshFrom();">查找地址</button>
|
||||
</div>
|
||||
<div class="word-aux">点击查找地址可在地图上显示输入的地理位置</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">地图定位:</label>
|
||||
<div class="layui-input-block special-length">
|
||||
<div id="container" class="selffetch-map"></div>
|
||||
</div>
|
||||
<div class="word-aux empty-address">请选择地理位置!在地图上点击得到的地理位置会自动填入到对应的输入框中</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-hide">
|
||||
<label class="layui-form-label">是否启用同城配送:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" value="1" name="is_o2o" lay-skin="switch">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">营业时间:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="open_date" class="layui-input len-long">
|
||||
</div>
|
||||
<div class="word-aux ">例:上午9:00-12:00,下午2:00-6:00</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item time-view">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">自提日期:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="time_type" value="0" title="每天" lay-filter="time_type" checked>
|
||||
<input type="radio" name="time_type" value="1" title="自定义" lay-filter="time_type">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="time-view">
|
||||
<div class="layui-form-item time-type-view" lay-verify="time_week">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" value="1" class='time-week' name="time_week[]" title="周一" lay-skin="primary">
|
||||
<input type="checkbox" value="2" class='time-week' name="time_week[]" title="周二" lay-skin="primary">
|
||||
<input type="checkbox" value="3" class='time-week' name="time_week[]" title="周三" lay-skin="primary">
|
||||
<input type="checkbox" value="4" class='time-week' name="time_week[]" title="周四" lay-skin="primary">
|
||||
<input type="checkbox" value="5" class='time-week' name="time_week[]" title="周五" lay-skin="primary">
|
||||
<input type="checkbox" value="6" class='time-week' name="time_week[]" title="周六" lay-skin="primary">
|
||||
<input type="checkbox" value="0" class='time-week' name="time_week[]" title="周日" lay-skin="primary">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="time-type-view-all">
|
||||
<div class="delivery-time">
|
||||
<div class="layui-form-item" >
|
||||
<label class="layui-form-label"><span class="required">*</span>自提时段设置</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="startTime" lay-verify="start_time" placeholder="配送开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="start_time" placeholder="配送开始时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="endTime" lay-verify="end_time" placeholder="配送结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="end_time" placeholder="配送结束时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
<a href="javascript:;" class="text-color add">添加</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">细分时段:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="time_interval" value="30" title="30分钟" checked/>
|
||||
<input type="radio" name="time_interval" value="60" title="一小时"/>
|
||||
<input type="radio" name="time_interval" value="90" title="90分钟" />
|
||||
<input type="radio" name="time_interval" value="120" title="两小时" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">提前预约:</label>
|
||||
<div class="layui-input-block day-wrap">
|
||||
<input type="radio" name="advance_day" value="0" title="无需提前" checked lay-filter="day_select"/>
|
||||
<input type="radio" name="advance_day" value="1" title="提前" lay-filter="day_select"/>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="advance_day_num" lay-verify="advance_day" class="layui-input day-input" readonly>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">天</div>
|
||||
</div>
|
||||
<div class="word-aux">预约提货是否需提前进行预约</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">最长预约:</label>
|
||||
<div class="layui-input-block day-wrap">
|
||||
<input type="radio" name="most_day" value="0" title="仅当日" lay-filter="day_select"/>
|
||||
<input type="radio" name="most_day" value="1" title="可预约" checked lay-filter="day_select"/>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="most_day_num" lay-verify="most_day" class="layui-input day-input" value="7">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">天内</div>
|
||||
</div>
|
||||
<div class="word-aux">预约提货最长可预约多少天内进行提货</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if $is_exit == 1}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店账号:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="username" lay-verify="required" placeholder="请填写门店登录账号" autocomplete="off" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店密码:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" name="password" lay-verify="required" placeholder="请填写门店登录密码" autocomplete="off" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backStoreList()">返回</button>
|
||||
<a id="storeImage"></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="storeLogoImageTpl">
|
||||
{{# if(d.list){ }}
|
||||
<div class="preview_img">
|
||||
<img layer-src src="{{ns.img(d.list)}}" class="img_prev"/>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<div>
|
||||
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" ></i>
|
||||
</div>
|
||||
<div class="replace_img js-replace js-add-logo-image">点击替换</div>
|
||||
</div>
|
||||
<input type="hidden" name="store_image" value="{{d.list}}">
|
||||
{{# }else{ }}
|
||||
<div class="upload-default">
|
||||
<div class="upload js-add-logo-image" >
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/html" id="storeImageTpl">
|
||||
{{# if(d.list.length){ }}
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="item upload_img_square_item" data-index="{{i}}">
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i])}}" layer-src>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" data-index="{{i}}"></i>
|
||||
<!-- <div class="replace_img" data-index="{{i}}">点击替换</div>-->
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.list.length < d.max){ }}
|
||||
<div class="item js-add-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
{{# }else{ }}
|
||||
<div class="item js-add-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<!--<script type="text/javascript" src="{$http_type}://webapi.amap.com/maps?v=1.4.6&key=2df5711d4e2fd9ecd1622b5a53fc6b1d"></script>-->
|
||||
<!--<script type="text/javascript" src="STATIC_JS/map_address.js"></script>-->
|
||||
<script type="text/javascript" src="SHOP_JS/address.js"></script>
|
||||
<script src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key={$tencent_map_key}"></script>
|
||||
<script src="https://map.qq.com/api/js?v=2.exp&key={$tencent_map_key}"></script>
|
||||
<script src="https://mapapi.qq.com/jsapi_v2/2/4/148/main.js"></script>
|
||||
<script type="text/javascript" src="STATIC_JS/qq_map.js?time=20240601"></script>
|
||||
<script src="__STATIC__/ext/drag-arrange.js"></script>
|
||||
<script>
|
||||
var STORE_IMAGE_MAX = 5;
|
||||
var form, laytpl,repeat_flag, map_class;
|
||||
var saveData = null;
|
||||
var storeImage = [];
|
||||
layui.use(['form','laydate','laytpl'], function() {
|
||||
var laydate = layui.laydate;
|
||||
form = layui.form;
|
||||
repeat_flag = false;//防重复标识
|
||||
laytpl = layui.laytpl;
|
||||
if($("#container").length) {
|
||||
setTimeout(function () {
|
||||
map_class = new mapClass("container", {lat: '', lng: ''});
|
||||
map_class.mpKey = '{$tencent_map_key}';
|
||||
},200);
|
||||
}
|
||||
form.render();
|
||||
|
||||
function fetchTimeSelect(){
|
||||
$('.delivery-time .layui-form-item').each(function (index, item) {
|
||||
//时间选择器
|
||||
var startTime = $(item).find("input[name=start_time]").val(), endTime = $(item).find("input[name=end_time]").val(), initTime = parseInt({:strtotime(date('Y-m-d'))});
|
||||
laydate.render({
|
||||
elem: '#startTime' + (index ? index : '')
|
||||
,type: 'time'
|
||||
,value: startTime ? ns.time_to_date((initTime + parseInt(startTime)), 'H:i:s') : ''
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$(item).find("input[name=start_time]").val(time);
|
||||
}
|
||||
});
|
||||
//时间选择器
|
||||
laydate.render({
|
||||
elem: '#endTime' + (index ? index : '')
|
||||
,type: 'time'
|
||||
,value: startTime ? ns.time_to_date((initTime + parseInt(endTime)), 'H:i:s') : ''
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$(item).find("input[name=end_time]").val(time);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
fetchTimeSelect();
|
||||
|
||||
$('body').off('click', '.delivery-time .delete').on('click', '.delivery-time .delete', function () {
|
||||
$(this).parents('.layui-form-item').remove()
|
||||
});
|
||||
|
||||
$('body').off('click', '.delivery-time .add').on('click', '.delivery-time .add', function () {
|
||||
var length = $('.delivery-time .layui-form-item').length;
|
||||
if (length >= 3) { layer.msg('最多添加三个时段'); return;}
|
||||
var h = `<div class="layui-form-item" >
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="startTime`+ length +`" lay-verify="start_time" placeholder="配送开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="start_time" placeholder="配送开始时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="endTime`+ length +`" lay-verify="end_time" placeholder="配送结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="end_time" placeholder="配送结束时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
<a href="javascript:;" class="text-color delete">删除</a>
|
||||
</div>
|
||||
</div>`;
|
||||
$('.delivery-time').append(h);
|
||||
fetchTimeSelect();
|
||||
});
|
||||
|
||||
$('.time-type-view').hide();
|
||||
|
||||
form.on('radio(time_type)', function(data){
|
||||
timeTypeChange(data.value);
|
||||
});
|
||||
|
||||
form.on('radio(day_select)', function (data){
|
||||
if (data.value == 1) {
|
||||
$(data.elem).parents('.day-wrap').find('input[type="number"]').prop('readonly', false);
|
||||
} else {
|
||||
$(data.elem).parents('.day-wrap').find('input[type="number"]').prop('readonly', true);
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
form.verify({
|
||||
required : function(value, item){
|
||||
var msg = $(item).attr("placeholder") != undefined ? $(item).attr("placeholder") : '';
|
||||
if(value == '') return msg;
|
||||
},
|
||||
province_id : function(value, item){
|
||||
if(value == ''){
|
||||
return '请选择省份';
|
||||
}
|
||||
},
|
||||
city_id : function(value, item){
|
||||
if(value == ''){
|
||||
return '请选择城市';
|
||||
}
|
||||
},
|
||||
// district_id : function(value, item){
|
||||
// if(value == ''){
|
||||
// return '请选择区/县';
|
||||
// }
|
||||
// },
|
||||
tel : function(value, item) {
|
||||
if (value != '') {
|
||||
if (!ns.parse_telephone(value) && !ns.parse_mobile(value)) {
|
||||
return '请输入正确的电话号码或手机号!';
|
||||
}
|
||||
}
|
||||
},
|
||||
store_name : function (value,item) {
|
||||
if(value == ""){
|
||||
return '请输入门店名称';
|
||||
}
|
||||
},
|
||||
time_week: function(){
|
||||
if ($('[name="time_type"]:checked').val() == 1 && !$('.time-week:checked').length)
|
||||
return '请选择可配送日期';
|
||||
},
|
||||
start_time: function(value, item){
|
||||
var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
|
||||
var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
|
||||
if(parseInt(start_time) > parseInt(end_time)){
|
||||
return '开始时间不能大于结束时间';
|
||||
}
|
||||
var prev_endtime = $(item).parents('.layui-form-item').prev('.layui-form-item').find("input[name=end_time]").val();
|
||||
if (prev_endtime && parseInt(prev_endtime) > parseInt(start_time)) return '开始时间不能小于上一阶段结束时间';
|
||||
},
|
||||
end_time: function(value, item){
|
||||
var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
|
||||
var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
|
||||
var time_interval = $('[name="time_interval"]:checked').val();
|
||||
if (parseInt(end_time) < parseInt(start_time)) {
|
||||
return '结束时间不能小于开始时间';
|
||||
}
|
||||
if ((parseInt(end_time) - parseInt(start_time)) / 60 < parseInt(time_interval)) {
|
||||
return '时间间隔不能小于' + time_interval + '分钟';
|
||||
}
|
||||
},
|
||||
advance_day: function (value){
|
||||
if ($('[name="advance_day"]:checked').val() == 1) {
|
||||
if (value == '' || value == 0) return '请输入提前预约时间';
|
||||
if (value < 0) return '提前预约时间不能为负数';
|
||||
}
|
||||
},
|
||||
most_day: function (value){
|
||||
if ($('[name="most_day"]:checked').val() == 1) {
|
||||
if (value == '' || value == 0) return '请输入最长可预约时间';
|
||||
if (value < 0) return '最长可预约时间不能为负数';
|
||||
if (value > 15) return '最长可预约时间不能超过15天';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 添加logo图片
|
||||
var storeLogoImage = '';
|
||||
$("body").off("click", ".js-add-logo-image").on("click", ".js-add-logo-image", function () {
|
||||
openAlbum(function (data) {
|
||||
storeLogoImage = data[0].pic_path;
|
||||
refreshLogoStoreImage();
|
||||
}, 1, 1);
|
||||
});
|
||||
|
||||
//渲染logo图片
|
||||
function refreshLogoStoreImage() {
|
||||
var store_image_template = $("#storeLogoImageTpl").html();
|
||||
var data = {
|
||||
list: storeLogoImage
|
||||
};
|
||||
|
||||
laytpl(store_image_template).render(data, function (html) {
|
||||
|
||||
$(".logo-image-box").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (storeLogoImage.length) {
|
||||
//预览
|
||||
$(".logo-image-box .js-preview").click(function () {
|
||||
$(this).parent().parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".logo-image-box .js-delete").click(function () {
|
||||
storeLogoImage = '';
|
||||
refreshLogoStoreImage();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshLogoStoreImage();
|
||||
|
||||
function saveFunc(){
|
||||
var data = saveData;
|
||||
var full_address = [];
|
||||
full_address.push($("select[name=province_id] option:selected").text());
|
||||
full_address.push($("select[name=city_id] option:selected").text());
|
||||
full_address.push($("select[name=district_id] option:selected").text());
|
||||
|
||||
data.field.full_address = full_address.toString();
|
||||
|
||||
data.field.delivery_time = [];
|
||||
$('.delivery-time .layui-form-item').each(function (index, item) {
|
||||
data.field.delivery_time.push({
|
||||
start_time: $(item).find("input[name=start_time]").val(),
|
||||
end_time: $(item).find("input[name=end_time]").val()
|
||||
})
|
||||
});
|
||||
data.field.delivery_time = JSON.stringify(data.field.delivery_time);
|
||||
data.field.advance_day = $('[name="advance_day"]:checked').val() == 0 ? 0 : $('[name="advance_day_num"]').val();
|
||||
data.field.most_day = $('[name="most_day"]:checked').val() == 0 ? 0 : $('[name="most_day_num"]').val();
|
||||
data.field.store_images = storeImage.toString();
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("shop/store/addStore"),
|
||||
async : true,
|
||||
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("shop/store/lists")
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
saveData = data;
|
||||
|
||||
if( data.field.longitude == "" || data.field.latitude == ""){
|
||||
layer.msg('请确认地理位置!');
|
||||
$(".empty-address").show();
|
||||
return;
|
||||
}else{
|
||||
$(".empty-address").hide();
|
||||
}
|
||||
|
||||
saveFunc();
|
||||
});
|
||||
|
||||
$("body").off("click", ".js-add-image").on("click", ".js-add-image", function () {
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (storeImage.length < STORE_IMAGE_MAX) storeImage.push(data[i].pic_path);
|
||||
}
|
||||
refreshStoreImage();
|
||||
}, 5, 1);
|
||||
});
|
||||
function refreshStoreImage() {
|
||||
var store_image_template = $("#storeImageTpl").html();
|
||||
var data = {
|
||||
list: storeImage,
|
||||
max: STORE_IMAGE_MAX
|
||||
};
|
||||
|
||||
laytpl(store_image_template).render(data, function (html) {
|
||||
|
||||
$(".js-store-image").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (storeImage.length) {
|
||||
|
||||
//预览
|
||||
$(".js-store-image .js-preview").click(function () {
|
||||
$(this).parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".js-store-image .js-delete").click(function () {
|
||||
var index = $(this).attr("data-index");
|
||||
storeImage.splice(index, 1);
|
||||
refreshStoreImage();
|
||||
});
|
||||
|
||||
// 拖拽
|
||||
$('.js-store-image .upload_img_square_item').arrangeable({
|
||||
//拖拽结束后执行回调
|
||||
callback: function (e) {
|
||||
var indexBefore = $(e).attr("data-index");//拖拽前的原始位置
|
||||
var indexAfter = $(e).index();//拖拽后的位置
|
||||
var temp = storeImage[indexBefore];
|
||||
storeImage[indexBefore] = storeImage[indexAfter];
|
||||
storeImage[indexAfter] = temp;
|
||||
refreshStoreImage();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//最多传十张图
|
||||
if (storeImage.length < STORE_IMAGE_MAX) {
|
||||
$(".js-add-image").show();
|
||||
} else {
|
||||
$(".js-add-image").hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshStoreImage();
|
||||
});
|
||||
|
||||
function backStoreList() {
|
||||
location.hash = ns.hash("shop/store/lists");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新渲染表单
|
||||
*/
|
||||
function refreshFrom(){
|
||||
form.render();
|
||||
orderAddressChange();//改变地址
|
||||
map_class.mapChange();
|
||||
}
|
||||
|
||||
//动态改变订单地址赋值
|
||||
function orderAddressChange(){
|
||||
map_class.address.province = $("select[name=province_id]").val();
|
||||
map_class.address.province_name = $("select[name=province_id] option:selected").text();
|
||||
map_class.address.city = $("select[name=city_id]").val();
|
||||
map_class.address.city_name = $("select[name=city_id] option:selected").text();
|
||||
map_class.address.district = $("select[name=district_id]").val();
|
||||
map_class.address.district_name = $("select[name=district_id] option:selected").text();
|
||||
map_class.address.detail_address = $("input[name=address]").val()
|
||||
}
|
||||
|
||||
/**
|
||||
* 地址下拉框(主要用于坐标记录)
|
||||
*/
|
||||
function selectCallBack(){
|
||||
$("input[name=longitude]").val(map_class.address.longitude);//坐标
|
||||
$("input[name=latitude]").val(map_class.address.latitude);//坐标
|
||||
}
|
||||
|
||||
//地图点击回调事件
|
||||
function mapChangeCallBack(){
|
||||
$("input[name=address]").val(map_class.address.address);//详细地址
|
||||
$("input[name=longitude]").val(map_class.address.longitude);//坐标
|
||||
$("input[name=latitude]").val(map_class.address.latitude);//坐标
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("shop/address/getGeographicId"),
|
||||
async : true,
|
||||
data : {
|
||||
"address" : map_class.address.area
|
||||
},
|
||||
success : function(data) {
|
||||
map_class.address.province = data.province_id;
|
||||
map_class.address.city = data.city_id;
|
||||
map_class.address.district = data.district_id;
|
||||
map_class.address.township = data.subdistrict_id;
|
||||
map_class.map_change = false;
|
||||
form.val("editselffetch", {
|
||||
"province_id": data.province_id
|
||||
});
|
||||
$("select[name=province_id]").change();
|
||||
form.val("editselffetch", {
|
||||
"city_id": data.city_id
|
||||
});
|
||||
$("select[name=city_id]").change();
|
||||
form.val("editselffetch", {
|
||||
"district_id": data.district_id
|
||||
});
|
||||
refreshFrom();//重新渲染form
|
||||
map_class.map_change = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function timeTypeChange(type){
|
||||
if(type == 1){
|
||||
$('.time-type-view').show();
|
||||
}else{
|
||||
$('.time-type-view').hide();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
157
app/shop/view/store/deliverlists.html
Executable file
157
app/shop/view/store/deliverlists.html
Executable file
@@ -0,0 +1,157 @@
|
||||
<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_text" placeholder="请输入配送员名称" class="layui-input">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="deliverLists" lay-filter="deliverLists"></table>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var form, table;
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
var repeat_flag = false; //防重复标识
|
||||
|
||||
table = new Table({
|
||||
elem: '#deliverLists',
|
||||
url: ns.url("shop/store/deliverlists"),
|
||||
where:{'store_id':"{$store_id}"},
|
||||
cols: [
|
||||
[{
|
||||
title: '配送员名称',
|
||||
unresize: 'false',
|
||||
field: 'deliver_name',
|
||||
width: '40%'
|
||||
}, {
|
||||
field:'deliver_mobile',
|
||||
title: '配送员电话',
|
||||
unresize: 'false',
|
||||
width: '40%'
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
],
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit': //编辑
|
||||
location.hash = ns.hash("shop/store/editDeliver?store_id={$store_id}&deliver_id=" + data.deliver_id);
|
||||
break;
|
||||
case 'delete': //删除
|
||||
deleteDeliver(data.deliver_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteDeliver(deliver_ids) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要删除该配送员吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/local/deleteDeliver"),
|
||||
data: {deliver_ids},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload(
|
||||
{
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.close();
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.bottomToolbar(function(obj) {
|
||||
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "del":
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].company_id);
|
||||
deleteCompany(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.toolbar(function(obj) {
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "del":
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].company_id);
|
||||
deleteCompany(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("shop/store/addDeliver?store_id={$store_id}");
|
||||
}
|
||||
</script>
|
||||
722
app/shop/view/store/edit_store.html
Executable file
722
app/shop/view/store/edit_store.html
Executable file
@@ -0,0 +1,722 @@
|
||||
<style>
|
||||
#container{ width: 650px; height: 500px; }
|
||||
#container > div {z-index: 500!important}
|
||||
.empty-address{ display: none; }
|
||||
.address-content {display: inline-block;vertical-align: top;}
|
||||
.day-wrap {display: flex;align-items: center}
|
||||
.day-input {width: 80px}
|
||||
.day-input[readonly] {background: #f5f5f5}
|
||||
.day-wrap .layui-form-radio:nth-child(4) {margin-right: 0px}
|
||||
.upload-img-block .upload-img-box .preview_img{width: 100%; height: 100%; display: flex; justify-content: center; align-items: center;}
|
||||
.upload-img-block .upload-img-box .preview_img img{max-width: 100%; max-height: 100%;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap" lay-filter="storeform" >
|
||||
<input type="hidden" name="store_id" value="{$store_id}"/>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="store_name" autocomplete="off" lay-verify="store_name" class="layui-input len-mid" value="{$info.store_name}">
|
||||
</div>
|
||||
<div class="word-aux">门店的名称(招牌)</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label img-upload-lable">门店Logo:</label>
|
||||
<div class="layui-input-block img-upload">
|
||||
<div class="upload-img-block icon">
|
||||
<div class="upload-img-box logo-image-box {if !empty($info.store_image)}hover{/if}" >
|
||||
<input type="hidden" name="store_image" value="{$info.store_image}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<p>门店图片在PC及移动端对应页面及列表作为门店标志出现。</p>
|
||||
<p>建议图片尺寸:100 * 100像素,图片格式:jpg、png、jpeg。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店图片:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="js-store-image"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店电话:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="telphone" value="{$info.telphone}" lay-verify="tel" autocomplete="off" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">营业状态:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="status" value="1" lay-skin="switch" {if !empty($info) && $info.status==1 }checked{/if}>
|
||||
</div>
|
||||
<div class="word-aux">营业状态关闭时,该门店处于休息状态,用户端门店列表不会展示门店</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否启用自提:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" value="1" name="is_pickup" lay-skin="switch" {if !empty($info) && $info.is_pickup==1 }checked{/if}>
|
||||
</div>
|
||||
<div class="word-aux">当启用自提,该门店支持到店自提的配送方式</div>
|
||||
</div>
|
||||
|
||||
<!--自提点地址-->
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">* </span>门店地址:</label>
|
||||
<div class="layui-input-inline area-select">
|
||||
<select name="province_id" lay-filter="province_id" lay-verify="province_id">
|
||||
{foreach $province_list as $k => $v}
|
||||
<option value="{$v.id}" {if $info.province_id == $v.id}select{/if}>{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline area-select">
|
||||
<select name="city_id" lay-filter="city_id" lay-verify="city_id">
|
||||
<option value="">请选择城市</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-inline area-select">
|
||||
<select name="district_id" lay-filter="district_id" lay-verify="district_id">
|
||||
<option value="">请选择区/县</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="address" placeholder="请填写门店的具体地址" value="{$info.address}" lay-verify="required" autocomplete="off" class="layui-input len-long address-content">
|
||||
<input type = "hidden" name="longitude" lay-verify="required" class="layui-input" value="{$info.longitude}"/>
|
||||
<input type = "hidden" name="latitude" lay-verify="required" class="layui-input" value="{$info.latitude}"/>
|
||||
<button class='layui-btn-primary layui-btn' onclick="refreshFrom();">查找地址</button>
|
||||
</div>
|
||||
<div class="word-aux">点击查找地址可在地图上显示输入的地理位置</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">地图定位:</label>
|
||||
<div class="layui-input-block">
|
||||
<div id="container" class="selffetch-map"></div>
|
||||
</div>
|
||||
<span class="layui-word-aux empty-address">请选择地理位置!在地图上点击得到的地理位置会自动填入到对应的输入框中</span>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-hide">
|
||||
<label class="layui-form-label">是否启用同城配送:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" value="1" name="is_o2o" lay-skin="switch" {if !empty($info) && $info.is_o2o==1 }checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">营业时间:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="open_date" value="{$info.open_date}" class="layui-input len-long">
|
||||
</div>
|
||||
<div class="word-aux ">例:上午9:00-12:00,下午2:00-6:00</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item time-view">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">自提日期:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="time_type" value="0" title="每天" lay-filter="time_type" {if $info.time_type == 0 || !isset($info.time_type)}checked{/if}/>
|
||||
<input type="radio" name="time_type" value="1" title="自定义" lay-filter="time_type" {if $info.time_type == 1 }checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="time-view">
|
||||
<div class="layui-form-item time-type-view" lay-verify="time_week">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" value="1" class='time-week' name="time_week[]" title="周一" lay-skin="primary" {if !empty($info.time_week) && in_array(1,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="2" class='time-week' name="time_week[]" title="周二" lay-skin="primary" {if !empty($info.time_week) && in_array(2,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="3" class='time-week' name="time_week[]" title="周三" lay-skin="primary" {if !empty($info.time_week) && in_array(3,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="4" class='time-week' name="time_week[]" title="周四" lay-skin="primary" {if !empty($info.time_week) && in_array(4,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="5" class='time-week' name="time_week[]" title="周五" lay-skin="primary" {if !empty($info.time_week) && in_array(5,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="6" class='time-week' name="time_week[]" title="周六" lay-skin="primary" {if !empty($info.time_week) && in_array(6,$info.time_week)} checked {/if}>
|
||||
<input type="checkbox" value="0" class='time-week' name="time_week[]" title="周日" lay-skin="primary" {if !empty($info.time_week) && in_array(0,$info.time_week)} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="time-type-view-all">
|
||||
<div class="delivery-time">
|
||||
{foreach name="$info.delivery_time" key="k" item="item"}
|
||||
<div class="layui-form-item" >
|
||||
<label class="layui-form-label">{$k == 0 ? '自提时段设置:' : ''}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="startTime{$k == 0 ? '' : $k}" lay-verify="start_time" placeholder="配送开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="start_time" placeholder="配送开始时间" value="{$item.start_time}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="endTime{$k == 0 ? '' : $k}" lay-verify="end_time" placeholder="配送结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="end_time" placeholder="配送结束时间" value="{$item.end_time}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
{if $k eq 0}
|
||||
<a href="javascript:;" class="text-color add">添加</a>
|
||||
{else/}
|
||||
<a href="javascript:;" class="text-color delete">删除</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">细分时段:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="time_interval" value="30" title="30分钟" {if $info.time_interval == 30}checked{/if}/>
|
||||
<input type="radio" name="time_interval" value="60" title="一小时" {if $info.time_interval == 60}checked{/if}/>
|
||||
<input type="radio" name="time_interval" value="90" title="90分钟" {if $info.time_interval == 90}checked{/if}/>
|
||||
<input type="radio" name="time_interval" value="120" title="两小时" {if $info.time_interval == 120}checked{/if}/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">提前预约:</label>
|
||||
<div class="layui-input-block day-wrap">
|
||||
<input type="radio" name="advance_day" value="0" title="无需提前" {if $info.advance_day == 0}checked{/if} lay-filter="day_select"/>
|
||||
<input type="radio" name="advance_day" value="1" title="提前" {if $info.advance_day != 0}checked{/if} lay-filter="day_select"/>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="advance_day_num" lay-verify="advance_day" class="layui-input day-input" {if $info.advance_day == 0}readonly{else/}value="{$info.advance_day}"{/if}>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">天</div>
|
||||
</div>
|
||||
<div class="word-aux">预约提货是否需提前进行预约</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">最长预约:</label>
|
||||
<div class="layui-input-block day-wrap">
|
||||
<input type="radio" name="most_day" value="0" title="仅当日" {if $info.most_day == 0}checked{/if} lay-filter="day_select"/>
|
||||
<input type="radio" name="most_day" value="1" title="可预约" {if $info.most_day != 0}checked{/if} lay-filter="day_select"/>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="most_day_num" lay-verify="most_day" class="layui-input day-input" {if $info.most_day == 0}readonly{else/}value="{$info.most_day}"{/if}>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">天内</div>
|
||||
</div>
|
||||
<div class="word-aux">预约提货最长可预约多少天内进行提货</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if $is_exit == 1}
|
||||
{if $info.username}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">门店账号:</label>
|
||||
<div class="layui-input-block">
|
||||
<p class="input-text">{$info.username}</p>
|
||||
<input type="hidden" name="user_type" value="1"/>
|
||||
</div>
|
||||
</div>
|
||||
{else/}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店账号:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="username" lay-verify="required" placeholder="请填写门店登录账号" autocomplete="off" class="layui-input len-mid">
|
||||
<input type="hidden" name="user_type" value="0"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>门店密码:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" name="password" lay-verify="required" placeholder="请填写门店登录密码" autocomplete="off" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backStoreList()">返回</button>
|
||||
<a id="storeImage"></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="storeLogoImageTpl">
|
||||
{{# if(d.list){ }}
|
||||
<div class="preview_img">
|
||||
<img layer-src src="{{ns.img(d.list)}}" class="img_prev"/>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<div>
|
||||
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" ></i>
|
||||
</div>
|
||||
<div class="replace_img js-replace js-add-logo-image">点击替换</div>
|
||||
</div>
|
||||
<input type="hidden" name="store_image" value="{{d.list}}">
|
||||
{{# }else{ }}
|
||||
<div class="upload-default">
|
||||
<div class="upload js-add-logo-image" >
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script type="text/html" id="storeImageTpl">
|
||||
{{# if(d.list.length){ }}
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="item upload_img_square_item" data-index="{{i}}">
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i])}}" layer-src>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" data-index="{{i}}"></i>
|
||||
<!-- <div class="replace_img" data-index="{{i}}">点击替换</div>-->
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.list.length < d.max){ }}
|
||||
<div class="item js-add-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
{{# }else{ }}
|
||||
<div class="item js-add-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<!--<script type="text/javascript" src="{$http_type}://webapi.amap.com/maps?v=1.4.6&key=2df5711d4e2fd9ecd1622b5a53fc6b1d"></script>-->
|
||||
<!--<script type="text/javascript" src="STATIC_JS/map_address.js"></script>-->
|
||||
<script type="text/javascript" src="SHOP_JS/address.js"></script>
|
||||
<script src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key={$tencent_map_key}"></script>
|
||||
<script src="https://map.qq.com/api/js?v=2.exp&key={$tencent_map_key}"></script>
|
||||
<script src="https://mapapi.qq.com/jsapi_v2/2/4/148/main.js"></script>
|
||||
<script type="text/javascript" src="STATIC_JS/qq_map.js?time=20240601"></script>
|
||||
<script src="__STATIC__/ext/drag-arrange.js"></script>
|
||||
<script>
|
||||
var form,laytpl, repeat_flag, map_class;
|
||||
var saveData = null;
|
||||
var STORE_IMAGE_MAX = 5;
|
||||
var storeImage = [];
|
||||
{notempty name="$info.store_images"}
|
||||
storeImage = '{$info.store_images}'.split(',');
|
||||
{/notempty}
|
||||
|
||||
layui.use(['form','laydate','laytpl'], function() {
|
||||
var laydate = layui.laydate;
|
||||
form = layui.form;
|
||||
repeat_flag = false;//防重复标识
|
||||
laytpl = layui.laytpl;
|
||||
form.render();
|
||||
|
||||
function fetchTimeSelect(){
|
||||
$('.delivery-time .layui-form-item').each(function (index, item) {
|
||||
//时间选择器
|
||||
var startTime = $(item).find("input[name=start_time]").val(), endTime = $(item).find("input[name=end_time]").val(), initTime = parseInt({:strtotime(date('Y-m-d'))});
|
||||
laydate.render({
|
||||
elem: '#startTime' + (index ? index : '')
|
||||
,type: 'time'
|
||||
,value: startTime ? ns.time_to_date((initTime + parseInt(startTime)), 'H:i:s') : ''
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$(item).find("input[name=start_time]").val(time);
|
||||
}
|
||||
});
|
||||
//时间选择器
|
||||
laydate.render({
|
||||
elem: '#endTime' + (index ? index : '')
|
||||
,type: 'time'
|
||||
,value: startTime ? ns.time_to_date((initTime + parseInt(endTime)), 'H:i:s') : ''
|
||||
,done: function(value, date, endDate){
|
||||
var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
|
||||
$(item).find("input[name=end_time]").val(time);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
fetchTimeSelect();
|
||||
|
||||
$('body').off('click', '.delivery-time .delete').on('click', '.delivery-time .delete', function () {
|
||||
$(this).parents('.layui-form-item').remove()
|
||||
});
|
||||
|
||||
$('body').off('click', '.delivery-time .add').on('click', '.delivery-time .add', function () {
|
||||
var length = $('.delivery-time .layui-form-item').length;
|
||||
if (length >= 3) { layer.msg('最多添加三个时段'); return;}
|
||||
var h = `<div class="layui-form-item" >
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="startTime`+ length +`" lay-verify="start_time" placeholder="配送开始时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="start_time" placeholder="配送开始时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">~</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" id="endTime`+ length +`" lay-verify="end_time" placeholder="配送结束时间" value="" readonly >
|
||||
<input type="hidden" class="layui-input" name="end_time" placeholder="配送结束时间" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
<a href="javascript:;" class="text-color delete">删除</a>
|
||||
</div>
|
||||
</div>`;
|
||||
$('.delivery-time').append(h);
|
||||
fetchTimeSelect();
|
||||
});
|
||||
|
||||
form.on('radio(day_select)', function (data){
|
||||
if (data.value == 1) {
|
||||
$(data.elem).parents('.day-wrap').find('input[type="number"]').prop('readonly', false);
|
||||
} else {
|
||||
$(data.elem).parents('.day-wrap').find('input[type="number"]').prop('readonly', true);
|
||||
}
|
||||
})
|
||||
|
||||
timeTypeChange($("input[name=time_type]:checked").val());
|
||||
|
||||
form.on('radio(time_type)', function(data){
|
||||
timeTypeChange(data.value);
|
||||
});
|
||||
|
||||
var initdata = {province_id : '{$info.province_id}', city_id : '{$info.city_id}', district_id : '{$info.district_id}'};
|
||||
initAddress(initdata, "storeform");
|
||||
|
||||
if('{$info.latitude}' == "" || '{$info.longitude}' == ""){
|
||||
var latlng = {lat:'',lng:''};
|
||||
}else{
|
||||
var latlng = {lat:'{$info.latitude}',lng:'{$info.longitude}'};
|
||||
}
|
||||
|
||||
//地图展示
|
||||
if($("#container").length) {
|
||||
setTimeout(function () {
|
||||
map_class = new mapClass("container", latlng);
|
||||
},200);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
form.verify({
|
||||
required : function(value, item){
|
||||
var msg = $(item).attr("placeholder") != undefined ? $(item).attr("placeholder") : '';
|
||||
if(value == '') return msg;
|
||||
},
|
||||
province_id : function(value, item){
|
||||
if(value == ''){
|
||||
return '请选择省份';
|
||||
}
|
||||
},
|
||||
city_id : function(value, item){
|
||||
if(value == ''){
|
||||
return '请选择城市';
|
||||
}
|
||||
},
|
||||
// district_id : function(value, item){
|
||||
// if(value == ''){
|
||||
// return '请选择区/县';
|
||||
// }
|
||||
// },
|
||||
tel : function(value, item) {
|
||||
if (value != '') {
|
||||
if (!ns.parse_telephone(value) && !ns.parse_mobile(value)) {
|
||||
return '请输入正确的电话号码或手机号!';
|
||||
}
|
||||
}
|
||||
},
|
||||
store_name : function (value,item) {
|
||||
if(value == ""){
|
||||
return '请输入门店名称';
|
||||
}
|
||||
},
|
||||
time_week: function(){
|
||||
if ($('[name="time_type"]:checked').val() == 1 && !$('.time-week:checked').length)
|
||||
return '请选择可配送日期';
|
||||
},
|
||||
start_time: function(value, item){
|
||||
var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
|
||||
var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
|
||||
if(parseInt(start_time) > parseInt(end_time)){
|
||||
return '开始时间不能大于结束时间';
|
||||
}
|
||||
var prev_endtime = $(item).parents('.layui-form-item').prev('.layui-form-item').find("input[name=end_time]").val();
|
||||
if (prev_endtime && parseInt(prev_endtime) > parseInt(start_time)) return '开始时间不能小于上一阶段结束时间';
|
||||
},
|
||||
end_time: function(value, item){
|
||||
var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
|
||||
var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
|
||||
var time_interval = $('[name="time_interval"]:checked').val();
|
||||
if (parseInt(end_time) < parseInt(start_time)) {
|
||||
return '结束时间不能小于开始时间';
|
||||
}
|
||||
if ((parseInt(end_time) - parseInt(start_time)) / 60 < parseInt(time_interval)) {
|
||||
return '时间间隔不能小于' + time_interval + '分钟';
|
||||
}
|
||||
},
|
||||
advance_day: function (value){
|
||||
if ($('[name="advance_day"]:checked').val() == 1) {
|
||||
if (value == '' || value == 0) return '请输入提前预约时间';
|
||||
if (value < 0) return '提前预约时间不能为负数';
|
||||
}
|
||||
},
|
||||
most_day: function (value){
|
||||
if ($('[name="most_day"]:checked').val() == 1) {
|
||||
if (value == '' || value == 0) return '请输入最长可预约时间';
|
||||
if (value < 0) return '最长可预约时间不能为负数';
|
||||
if (value > 15) return '最长可预约时间不能超过15天';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 添加logo图片
|
||||
var storeLogoImage = '{$info.store_image}';
|
||||
$("body").off("click", ".js-add-logo-image").on("click", ".js-add-logo-image", function () {
|
||||
openAlbum(function (data) {
|
||||
storeLogoImage = data[0].pic_path;
|
||||
refreshLogoStoreImage();
|
||||
}, 1, 1);
|
||||
});
|
||||
|
||||
//渲染logo图片
|
||||
function refreshLogoStoreImage() {
|
||||
|
||||
var store_image_template = $("#storeLogoImageTpl").html();
|
||||
var data = {
|
||||
list: storeLogoImage
|
||||
};
|
||||
|
||||
laytpl(store_image_template).render(data, function (html) {
|
||||
|
||||
$(".logo-image-box").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (storeLogoImage.length) {
|
||||
//预览
|
||||
$(".logo-image-box .js-preview").click(function () {
|
||||
$(this).parent().parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".logo-image-box .js-delete").click(function () {
|
||||
storeLogoImage = '';
|
||||
refreshLogoStoreImage();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshLogoStoreImage();
|
||||
|
||||
function saveFunc(){
|
||||
var data = saveData;
|
||||
|
||||
var full_address = [];
|
||||
full_address.push($("select[name=province_id] option:selected").text());
|
||||
full_address.push($("select[name=city_id] option:selected").text());
|
||||
full_address.push($("select[name=district_id] option:selected").text());
|
||||
|
||||
data.field.full_address = full_address.toString();
|
||||
|
||||
data.field.delivery_time = [];
|
||||
$('.delivery-time .layui-form-item').each(function (index, item) {
|
||||
data.field.delivery_time.push({
|
||||
start_time: $(item).find("input[name=start_time]").val(),
|
||||
end_time: $(item).find("input[name=end_time]").val()
|
||||
})
|
||||
});
|
||||
data.field.delivery_time = JSON.stringify(data.field.delivery_time);
|
||||
data.field.advance_day = $('[name="advance_day"]:checked').val() == 0 ? 0 : $('[name="advance_day_num"]').val();
|
||||
data.field.most_day = $('[name="most_day"]:checked').val() == 0 ? 0 : $('[name="most_day_num"]').val();
|
||||
data.field.store_images = storeImage.toString();
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("shop/store/editStore"),
|
||||
async : true,
|
||||
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("shop/store/lists")
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
saveData = data;
|
||||
|
||||
if( data.field.longitude == "" || data.field.latitude == ""){
|
||||
layer.msg('请确认地理位置!');
|
||||
$(".empty-address").show();
|
||||
return;
|
||||
}else{
|
||||
$(".empty-address").hide();
|
||||
}
|
||||
|
||||
saveFunc();
|
||||
});
|
||||
|
||||
$("body").off("click", ".js-add-image").on("click", ".js-add-image", function () {
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (storeImage.length < STORE_IMAGE_MAX) storeImage.push(data[i].pic_path);
|
||||
}
|
||||
refreshStoreImage();
|
||||
}, 5, 1);
|
||||
});
|
||||
function refreshStoreImage() {
|
||||
var store_image_template = $("#storeImageTpl").html();
|
||||
var data = {
|
||||
list: storeImage,
|
||||
max: STORE_IMAGE_MAX
|
||||
};
|
||||
|
||||
laytpl(store_image_template).render(data, function (html) {
|
||||
|
||||
$(".js-store-image").html(html);
|
||||
|
||||
//加载图片放大
|
||||
loadImgMagnify();
|
||||
|
||||
if (storeImage.length) {
|
||||
|
||||
//预览
|
||||
$(".js-store-image .js-preview").click(function () {
|
||||
$(this).parent().prev().find("img").click();
|
||||
});
|
||||
|
||||
//图片删除
|
||||
$(".js-store-image .js-delete").click(function () {
|
||||
var index = $(this).attr("data-index");
|
||||
storeImage.splice(index, 1);
|
||||
refreshStoreImage();
|
||||
});
|
||||
|
||||
// 拖拽
|
||||
$('.js-store-image .upload_img_square_item').arrangeable({
|
||||
//拖拽结束后执行回调
|
||||
callback: function (e) {
|
||||
var indexBefore = $(e).attr("data-index");//拖拽前的原始位置
|
||||
var indexAfter = $(e).index();//拖拽后的位置
|
||||
var temp = storeImage[indexBefore];
|
||||
storeImage[indexBefore] = storeImage[indexAfter];
|
||||
storeImage[indexAfter] = temp;
|
||||
refreshStoreImage();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//最多传十张图
|
||||
if (storeImage.length < STORE_IMAGE_MAX) {
|
||||
$(".js-add-image").show();
|
||||
} else {
|
||||
$(".js-add-image").hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
refreshStoreImage();
|
||||
|
||||
});
|
||||
|
||||
function backStoreList() {
|
||||
location.hash = ns.hash("shop/store/lists");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新渲染表单
|
||||
*/
|
||||
function refreshFrom(){
|
||||
form.render();
|
||||
orderAddressChange();//改变地址
|
||||
map_class.mapChange();
|
||||
}
|
||||
|
||||
//动态改变订单地址赋值
|
||||
function orderAddressChange(){
|
||||
map_class.address.province = $("select[name=province_id]").val();
|
||||
map_class.address.province_name = $("select[name=province_id] option:selected").text();
|
||||
map_class.address.city = $("select[name=city_id]").val();
|
||||
map_class.address.city_name = $("select[name=city_id] option:selected").text();
|
||||
map_class.address.district = $("select[name=district_id]").val();
|
||||
map_class.address.district_name = $("select[name=district_id] option:selected").text();
|
||||
map_class.address.detail_address = $("input[name='address']").val();
|
||||
}
|
||||
|
||||
/**
|
||||
* 地址下拉框(主要用于坐标记录)
|
||||
*/
|
||||
function selectCallBack(){
|
||||
$("input[name=longitude]").val(map_class.address.longitude);//坐标
|
||||
$("input[name=latitude]").val(map_class.address.latitude);//坐标
|
||||
}
|
||||
|
||||
//地图点击回调事件
|
||||
function mapChangeCallBack(){
|
||||
$("input[name=address]").val(map_class.address.address);//详细地址
|
||||
$("input[name=longitude]").val(map_class.address.longitude);//坐标
|
||||
$("input[name=latitude]").val(map_class.address.latitude);//坐标
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
dataType: 'JSON',
|
||||
url : ns.url("shop/address/getGeographicId"),
|
||||
async : true,
|
||||
data : {
|
||||
"address" : map_class.address.area
|
||||
},
|
||||
success : function(data) {
|
||||
map_class.address.province = data.province_id;
|
||||
map_class.address.city = data.city_id;
|
||||
map_class.address.district = data.district_id;
|
||||
map_class.address.township = data.subdistrict_id;
|
||||
map_class.map_change = false;
|
||||
form.val("storeform", {
|
||||
"province_id": data.province_id
|
||||
});
|
||||
$("select[name=province_id]").change();
|
||||
form.val("storeform", {
|
||||
"city_id": data.city_id
|
||||
});
|
||||
$("select[name=city_id]").change();
|
||||
form.val("storeform", {
|
||||
"district_id": data.district_id
|
||||
});
|
||||
refreshFrom();//重新渲染form
|
||||
map_class.map_change = true;
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
function timeTypeChange(type){
|
||||
if(type == 1){
|
||||
$('.time-type-view').show();
|
||||
}else{
|
||||
$('.time-type-view').hide();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
328
app/shop/view/store/lists.html
Executable file
328
app/shop/view/store/lists.html
Executable file
@@ -0,0 +1,328 @@
|
||||
<link rel="stylesheet" type="text/css" href="SHOP_CSS/store_lists.css" />
|
||||
<style>
|
||||
.table-tab{margin-top: 0;}
|
||||
</style>
|
||||
|
||||
<input id="store_exit" type="hidden" value="{$store_is_exit}"/>
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加{$title}</button>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="keyword" placeholder="请输入{$title}名称" autocomplete="off" class="layui-input">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="store_tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" lay-id="" lay-typer="">全部{$title}</li>
|
||||
<li lay-id="1" lay-type="1">营业中</li>
|
||||
<li lay-id="0" lay-type="1">休息中</li>
|
||||
<li lay-id="1" lay-type="2">已停业</li>
|
||||
</ul>
|
||||
<div id="store-lists"></div>
|
||||
|
||||
<div id="list_page"></div>
|
||||
</div>
|
||||
|
||||
<!-- {$title}详情 -->
|
||||
<script type="text/html" id="store">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.store_image){ }}
|
||||
<img layer-src src={{ns.img(d.store_image)}} alt="" onerror=src='__STATIC__/img/default_shop.png'>
|
||||
{{# }else{ }}
|
||||
<img layer-src src="__STATIC__/img/default_shop.png" alt="">
|
||||
{{# } }}
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<p class="layui-elip">店铺名称:{{d.store_name}}</p>
|
||||
<p class="layui-elip">联系方式:{{d.telphone}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- {$title}管理员 -->
|
||||
<script type="text/html" id="store_admin">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
<span>{{ d.username }}</span>
|
||||
{if $store_is_exit == 1}
|
||||
<a style="cursor: pointer;" class="text-color" onclick="resetStorePassword({{ d.store_id }})" >重置密码</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
{{# if(d.is_frozen) { }}
|
||||
<a class="layui-btn" lay-event="frozen">开启</a>
|
||||
{{# } else{ }}
|
||||
<a class="layui-btn" lay-event="frozen">关闭</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var layer_pass,laytpl,table,form,element, laypage, list_count = 0, limit = 12, search_text = "", curr = 1, status = "", type = "", store_exit = $("#store_exit").val(),store_id="";
|
||||
var repeat_flag = false; //防重复标识
|
||||
layui.use(['form','element','laytpl'], function() {
|
||||
form = layui.form;
|
||||
element = layui.element;
|
||||
laytpl = layui.laytpl;
|
||||
laypage = layui.laypage;
|
||||
|
||||
form.render();
|
||||
|
||||
getStoreLists(search_text, curr, status, type);
|
||||
pageList(list_count, limit, curr, status, type);
|
||||
|
||||
element.on('tab(store_tab)', function(){
|
||||
search_text = "";
|
||||
$("input[name='keyword']").val("");
|
||||
var status = this.getAttribute('lay-id');
|
||||
var type = this.getAttribute('lay-type');
|
||||
getStoreLists(search_text, curr, status, type);
|
||||
pageList(list_count, limit, curr, status, type);
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
/*table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});*/
|
||||
search_text = data.field.keyword;
|
||||
getStoreLists(search_text, curr, status, type);
|
||||
pageList(list_count, limit, curr, status, type);
|
||||
});
|
||||
});
|
||||
|
||||
function getStoreLists(search_text, curr, status, type){
|
||||
$("#store-lists").empty();
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ns.url("shop/store/lists"),
|
||||
data: {
|
||||
"page": curr,
|
||||
"page_size": limit,
|
||||
"search_text": search_text,
|
||||
"status" : status,
|
||||
"type" : type
|
||||
},
|
||||
dataType: 'JSON',
|
||||
async: false,
|
||||
success: function(res) {
|
||||
if (res.code == 0) {
|
||||
var data = res.data.list;
|
||||
list_count = res.data.count;
|
||||
|
||||
if(!data.length){
|
||||
var empty = "<div class='empty' style='text-align: center;margin-top: 30px;color: #999'>无数据!</div>";
|
||||
$("#store-lists").html(empty);
|
||||
}
|
||||
|
||||
var html = "";
|
||||
for (var i=0; i<data.length; i++) {
|
||||
var d = data[i];
|
||||
if (d.is_frozen == 1) {
|
||||
html += '<div class="store-li">';
|
||||
} else {
|
||||
html += '<div class="store-li border-color">';
|
||||
}
|
||||
html += '<p class="store-name"><span class="store-name">'+ d.store_name +'</span>';
|
||||
if(d.is_frozen == 1){
|
||||
html += '<span class="type-name-cloe">停业</span>';
|
||||
}else{
|
||||
if(d.status == 0){
|
||||
html += '<span class="type-name">休息</span>';
|
||||
}else{
|
||||
html += '<span class="type-name">正常</span>';
|
||||
}
|
||||
}
|
||||
var telphone = d.telphone ? d.telphone : "暂无";
|
||||
|
||||
html += '</p>';
|
||||
if(store_exit == 1){
|
||||
html += '<p class="store-time user-name">管理员:'+ d.username +'<a class="edit-password" onclick="resetStorePassword('+ d.store_id +')">重置密码</a></p>';
|
||||
}
|
||||
html += '<p class="store-time">联系方式:'+ telphone +'</p>';
|
||||
html += '<p class="store-time">地址:'+ d.full_address +' '+ d.address +'</p>';
|
||||
html += '<div class="store-operation">';
|
||||
html += '<span class="operation-type" onclick="editStore('+ d.store_id +')">编辑</span>';
|
||||
if(d.is_default != 1) {
|
||||
html += '<span class="operation-type" onclick="deleteStore(' + d.store_id + ')">删除</span>';
|
||||
}
|
||||
if(d.is_frozen == 1){
|
||||
html += '<span class="operation-type" onclick="closeStore('+ d.store_id +', '+ d.is_frozen +')">开启</span>';
|
||||
}else{
|
||||
html += '<span class="operation-type" onclick="closeStore('+ d.store_id +', '+ d.is_frozen +')">停业</span>';
|
||||
}
|
||||
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
$("#store-lists").append(html);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function pageList(count, limit, curr, status, type) {
|
||||
if (!count) return false;
|
||||
page = new Page({
|
||||
elem: 'list_page',
|
||||
count: count,
|
||||
limit: limit,
|
||||
curr: curr,
|
||||
callback: function(obj){
|
||||
getStoreLists(search_text, obj.page, status, type);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("shop/store/addStore");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置密码
|
||||
*/
|
||||
function resetStorePassword(data) {
|
||||
laytpl($("#pass_change").html()).render(data, function(html) {
|
||||
layer_pass = layer.open({
|
||||
title: '重置密码',
|
||||
skin: 'layer-tips-class',
|
||||
type: 1,
|
||||
area: ['550px'],
|
||||
content: html
|
||||
});
|
||||
});
|
||||
store_id=data;
|
||||
}
|
||||
|
||||
function editStore(data) {
|
||||
location.hash = ns.hash("shop/store/editStore",{"store_id":data});
|
||||
}
|
||||
|
||||
function deleteStore(data){
|
||||
layer.confirm('{$title}已开始运营,确认要删除吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/store/deleteStore"),
|
||||
data: { store_id : data},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
var status = $(".layui-tab.table-tab .layui-tab-title .layui-this").attr('lay-id');
|
||||
var type = $(".layui-tab.table-tab .layui-tab-title .layui-this").attr('lay-type');
|
||||
getStoreLists(search_text, curr, status, type);
|
||||
pageList(list_count, limit, curr, status, type);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function closeStore(store_id, is_frozen){
|
||||
var msg = '{$title}已开始运营,确认要关闭吗?';
|
||||
if(is_frozen == 1) {
|
||||
msg = '确定要开启该{$title}吗?';
|
||||
}
|
||||
layer.confirm(msg, function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/store/frozenStore"),
|
||||
data: {store_id:store_id, is_frozen:is_frozen},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
var status = $(".layui-tab.table-tab .layui-tab-title .layui-this").attr('lay-id');
|
||||
var type = $(".layui-tab.table-tab .layui-tab-title .layui-this").attr('lay-type');
|
||||
getStoreLists(search_text, curr, status, type);
|
||||
pageList(list_count, limit, curr, status, type);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function closePass() {
|
||||
layer.close(layer_pass);
|
||||
}
|
||||
|
||||
function determine(){
|
||||
var password=$("#newPassword").val();
|
||||
var newPasswordTow=$("#newPasswordTow").val();
|
||||
if(password!=newPasswordTow){
|
||||
layer.msg("两次输入密码不一致,请重新输入")
|
||||
return false
|
||||
}
|
||||
if(password!="" && newPasswordTow!="" && password==newPasswordTow){
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ns.url("shop/store/modifyPassword"),
|
||||
data: {
|
||||
store_id:store_id,
|
||||
password:password
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message)
|
||||
if(res.code==0){
|
||||
layer.close(layer_pass);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 重置密码弹框html -->
|
||||
<script type="text/html" id="pass_change">
|
||||
<div class="layui-form" id="reset_pass" lay-filter="form">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mid"><span class="required">*</span>新密码:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" id="newPassword" name="password" lay-verify="required" class="layui-input len-mid new_pass" maxlength="18">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mid"><span class="required">*</span>确认新密码:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" id="newPasswordTow" name="password" lay-verify="repass|required" class="layui-input len-mid" maxlength="18">
|
||||
</div>
|
||||
<div class="word-aux mid">请再一次输入密码,两次输入密码须一致</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mid">
|
||||
<button class="layui-btn" lay-submit lay-filter="repass" onclick="determine()">确定</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closePass()">返回</button>
|
||||
</div>
|
||||
|
||||
<input class="reset-pass-id" type="hidden" name="store_id" value="{{d}}"/>
|
||||
</div>
|
||||
</script>
|
||||
60
app/shop/view/store/select.html
Executable file
60
app/shop/view/store/select.html
Executable file
@@ -0,0 +1,60 @@
|
||||
<style>
|
||||
html,body {width: 100%;height: 100%}
|
||||
.store-empty {display: flex;height: 100%; align-items: center;justify-content: center}
|
||||
.store-wrap {display: flex;height: 100%;flex-wrap: wrap;overflow-y: auto;padding: 15px;box-sizing: border-box;align-content: flex-start;}
|
||||
.store-wrap .store-item {box-sizing: border-box;margin: 0 15px 15px 0;border: 1px solid #ccc;width: calc((100% - 30px) / 3);padding: 10px;cursor: pointer;height: fit-content;border-radius: 4px;}
|
||||
.store-wrap .store-item.active {border-color: var(--base-color);}
|
||||
.store-wrap .store-item .name {font-weight: bold;}
|
||||
.store-wrap .store-item .status {margin: 5px 0;line-height: 1;font-size: 12px}
|
||||
.store-wrap .store-item .address {color: #999;font-size: 12px;white-space: nowrap;text-overflow: ellipsis;overflow:hidden;width: 100%;}
|
||||
.store-wrap .store-item:nth-child(3n+3) {margin-right: 0}
|
||||
.open {color: #00A717}
|
||||
.close {color: #ff0000}
|
||||
</style>
|
||||
|
||||
{notempty name="store_list"}
|
||||
<div class="store-wrap">
|
||||
{foreach name="store_list" item="vo"}
|
||||
<div class="store-item {if in_array($vo.store_id, $store_id)}active{/if}" data-store="{$vo.store_id}">
|
||||
<div class="name">{$vo.store_name}</div>
|
||||
<div class="status">
|
||||
{if $vo.is_frozen == 1}
|
||||
<span class="close">已停业</span>
|
||||
{else/}
|
||||
{if $vo.status == 0}
|
||||
<span class="open">休息中</span>
|
||||
{else/}
|
||||
<span class="open">营业中</span>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
<div class="address">{$vo.full_address}{$vo.address}</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{else/}
|
||||
<div class="store-empty">暂无可用门店</div>
|
||||
{/notempty}
|
||||
|
||||
<script>
|
||||
var storeList = {:json_encode($store_list)};
|
||||
var multiple_type = "{$multiple_type ?? 0}"; //0多选 1单选
|
||||
$('.store-item').click(function () {
|
||||
|
||||
if(multiple_type == 1){
|
||||
$(".store-item").removeClass('active')
|
||||
}
|
||||
|
||||
if ($(this).hasClass('active')) $(this).removeClass('active');
|
||||
else $(this).addClass('active');
|
||||
})
|
||||
|
||||
function selectStoreListener(callback) {
|
||||
var store = [];
|
||||
$('.store-item.active').each(function () {
|
||||
var index = $(this).index();
|
||||
store.push(storeList[index])
|
||||
})
|
||||
if (typeof callback == "function") callback(store);
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user