初始上传

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

View File

@@ -0,0 +1,63 @@
<div class="layui-form form-wrap">
<label class="layui-form-label"><span class="required">*</span>是否显示:</label>
<div class="layui-input-inline">
<input type="radio" title="显示" name="is_display" value="1" {if($content.is_display eq '1')}checked{/if}>
<input type="radio" title="不显示" name="is_display" value="0" {if($content.is_display eq '0')}checked{/if}>
</div>
<div class="word-aux">
<p>控制手机端、PC端商品详情页是否显示售后保障 。</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>协议内容:</label>
<div class="layui-input-inline">
<script id="editor" type="text/plain" class="special-length" style="height:300px;"></script>
</div>
</div>
<div class="word-aux">售后保障会在商品详情页面售后保障切换卡下方展示内容不超过1000个字符</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
<input type="hidden" name="content" id="setContent" value="{$content.content}" />
</div>
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.config.js?time=20240614"></script>
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.all.js?time=20240614"></script>
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/lang/zh-cn/zh-cn.js"></script>
<script>
var ue = UE.getEditor('editor');
ue.ready(function() {
ue.setContent($('#setContent').val());
});
layui.use('form', function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
// 提交
form.on('submit(save)', function(data) {
var html = '';
ue.ready(function() {
html = ue.getContent();
});
data.field.content = html;
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/config/aftersale"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
layer.msg(res.message);
}
});
});
});
</script>

89
app/shop/view/config/api.html Executable file
View File

@@ -0,0 +1,89 @@
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label">Token加密秘钥</label>
<div class="layui-input-block">
{if condition="$config.value"}
<input type="text" name="private_key" class="layui-input len-long" placeholder="请输入秘钥" value="{$config.value.private_key}">
{else/}
<input type="text" name="private_key" class="layui-input len-long" placeholder="请输入秘钥">
{/if}
</div>
<div class="word-aux">该配置关系到会员token解析请慎重设置注意设置之后对应会员要求重新登录获取token</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>token存储时长 </label>
<div class="layui-input-block">
<div class="layui-input-inline len-short">
{if condition="$config.value"}
<input type="number" name="long_time" value="{$config.value.long_time}" lay-verify="required|num" data-min="0" data-unit="小时" placeholder="登录限制时长" autocomplete="off" class="layui-input len-short">
{else/}
<input type="text" name="long_time" value="" class="layui-input len-long" placeholder="登录限制时长">
{/if}
</div>
<div class="layui-form-mid">小时</div>
</div>
<div class="word-aux">
<p>说明该存储时间为小程序端和公众号端用户从登录开始到设置时间会重新获取登录信息0为不限制</p>
</div>
</div>
<div class="form-row">
<!-- <button class="layui-btn" lay-submit lay-filter="generate">生成秘钥</button>-->
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</div>
<script>
layui.use('form', function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
/**
* 表单验证
*/
form.verify({
num: function(value) {
if (value < 0) {
return '不能小于0';
}
},
});
/**
* 监听提交
*/
form.on('submit(save)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: ns.url("shop/config/api"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(data){
layer.msg(data.message);
repeat_flag = false;
}
});
});
form.on('submit(generate)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: ns.url("shop/config/generateRSA"),
dataType: 'JSON',
type: 'POST',
success: function(res){
$("textarea[name='public_key']").val(res.data.public_key.replace(/(\n$)/g,""));
$("textarea[name='private_key']").val(res.data.private_key.replace(/(\n$)/g,""));
repeat_flag = false;
}
});
});
});
</script>

View File

@@ -0,0 +1,70 @@
<style>
.examples {cursor: pointer; margin-left: 15px;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label">后台登录验证码:</label>
<div class="layui-input-block">
<input type="checkbox" name="shop_login" value="1" lay-skin="switch" {if condition="$config_info.shop_login == 1" }checked {/if} lay-title="启用|关闭"/>
</div>
<div class="word-aux">设置后台登录验证码是否开启<a onclick="showDemo()" class="examples text-color">查看示例</a></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">前台登录验证码:</label>
<div class="layui-input-block">
<input type="checkbox" name="shop_reception_login" value="1" lay-skin="switch" {if condition="$config_info.shop_reception_login == 1" }checked {/if} lay-title="启用|关闭"/>
</div>
<div class="word-aux">设置前台登录验证码是否开启<a onclick="showDemo2()" class="examples text-color">查看示例</a></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">前台注册验证码:</label>
<div class="layui-input-block">
<input type="checkbox" name="shop_reception_register" value="1" lay-skin="switch" {if condition="$config_info.shop_reception_register == 1" }checked {/if} lay-title="启用|关闭"/>
</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</div>
<script>
layui.use('form', function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
form.on('submit(save)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("shop/config/captcha"),
data: data.field,
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
});
});
function showDemo(){
layer.open({
title: '查看示例',
type: 1,
area: ['600px', '660px'],
content: '<img style="margin: 70px 30px;" src="SHOP_IMG/id_code1.png">'
})
}
function showDemo2(){
layer.open({
title: '查看示例',
type: 1,
area: ['600px', '660px'],
content: '<img style="margin: 20px 40px;" src="SHOP_IMG/id_code2.png">'
})
}
</script>

View File

@@ -0,0 +1,163 @@
<style type="text/css">
.no-auth{ padding: 50px 0;text-align: center; }
</style>
<div class="layui-form">
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">版权设置 </span>
</div>
<div class="layui-card-body">
{if $is_auth}
<div class="layui-form-item">
<label class="layui-form-label">版权logo</label>
<div class="layui-input-block">
<div class="upload-img-block icon">
<div class="upload-img-box {if condition="!empty($copyright_config.logo)"} hover {/if}" >
<div class="upload-default" id="webLogoUpload">
{if condition="!empty($copyright_config.logo)"}
<div id="preview_webLogoUpload" class="preview_img">
<img layer-src src="{:img($copyright_config.logo)}" class="img_prev"/>
</div>
{else/}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{/if}
</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">点击替换</div>
</div>
<input type="hidden" name="logo" value="{$copyright_config.logo ?? ''}" />
</div>
<!-- <p id="webLogoUpload" class="{if condition="$copyright_config.logo"} replace {else/} no-replace{/if}">替换</p>
<i class="del {if condition="!empty($copyright_config.logo)"}show{/if}">x</i> -->
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">公司名称:</label>
<div class="layui-input-block">
<input type="text" name="company_name" value="{$copyright_config.company_name ?? ''}" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">版权链接:</label>
<div class="layui-input-block">
<input type="text" name="copyright_link" value="{$copyright_config.copyright_link ?? ''}" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">版权信息:</label>
<div class="layui-input-block">
<textarea name="copyright_desc" class="layui-textarea len-long" maxlength="150">{$copyright_config.copyright_desc ?? ''}</textarea>
</div>
</div>
{else/}
<div class="no-auth">授权之后才可修改版权信息,<a href="https://www.niushop.com" class="text-color" target="_blank">去授权</a></div>
{/if}
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">备案设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">网站ICP备案号</label>
<div class="layui-input-block">
<input type="text" name="icp" value="{$copyright_config.icp}" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">网站公安备案:</label>
<div class="layui-input-block">
<input type="text" name="gov_record" value="{$copyright_config.gov_record}" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">网站公安链接:</label>
<div class="layui-input-block">
<input type="text" name="gov_url" value="{$copyright_config.gov_url}" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">市场监督管理局链接:</label>
<div class="layui-input-block">
<input type="text" name="market_supervision_url" value="{$copyright_config.market_supervision_url ?? ''}" autocomplete="off" class="layui-input len-long" style="display: inline-block;">
</div>
</div>
</div>
</div>
<div class="layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">营业执照设置</span>
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">亮照链接:</label>
<div class="layui-input-block">
<input type="text" name="business_show_link" value="{$copyright_config.business_show_link ?? ''}" autocomplete="off" class="layui-input len-long">
</div>
</div>
<div class="word-aux">亮照链接获取请前往<a class="text-color" href="https://zzlz.gsxt.gov.cn/businessShow" target="_blank">电子营业执照照亮系统</a>设置后在PC和H5前台网站底部会显示亮照图标点击可以查看营业执照信息。</div>
</div>
</div>
<div class="single-filter-box">
<div class="form-row">
<button type="button" class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</div>
</div>
<script>
layui.use(['form',], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
var upload = new Upload({
elem: '#webLogoUpload'
});
//保存配置
form.on('submit(save)', function(data) {
if(repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("shop/config/copyright"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
repeat_flag = false;
}
});
});
});
function showDemo(){
layer.open({
title: '查看示例',
type: 1,
area: ['600px', '660px'],
content: '<img style="margin:100px 30px;" src="SHOP_IMG/copyright.png">'
})
}
</script>

View File

@@ -0,0 +1,254 @@
<style>
.layui-form-item {
margin: 5px 0 10px 0;
}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label">默认商品图片:</label>
<div class="layui-input-inline">
<div class="upload-img-block">
<div class="upload-img-box {if !empty($default_img.goods)}hover{/if}">
<div class="upload-default" id="imgUploadGoods">
{if empty($default_img.goods)}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{else/}
<div id="preview_imgUploadGoods" class="preview_img">
<img layer-src src="{:img($default_img.goods)}" alt="" class="img_prev">
</div>
{/if}
</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">点击替换</div>
</div>
<input type="hidden" name="goods" {if $default_img} value="{$default_img.goods}" {/if}>
</div>
<!-- <p id="imgUploadGoods" class=" {if condition="$default_img.goods"} replace {else/} no-replace{/if}">替换</p>
<i class="del {if !empty($default_img.goods)}show{/if}">x</i> -->
</div>
</div>
</div>
<div class="word-aux">
<p>说明:默认商品图针对默认商品数据的商品图片。</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label">默认会员头像:</label>
<div class="layui-input-inline">
<div class="upload-img-block">
<div class="upload-img-box {if !empty($default_img.head)}hover{/if}">
<div class="upload-default" id="imgUploadMember">
{if empty($default_img.head)}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{else/}
<div id="preview_imgUploadMember" class="preview_img">
<img layer-src src="{:img($default_img.head)}" alt="" class="img_prev">
</div>
{/if}
</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">点击替换</div>
</div>
<input type="hidden" name="head" {if $default_img} value="{$default_img.head}" {/if}>
</div>
</div>
</div>
</div>
<div class="word-aux">
<p>说明:前后端没有上传头像的会员会展示该默认图。</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label">默认门店图片:</label>
<div class="layui-input-inline">
<div class="upload-img-block">
<div class="upload-img-box {if !empty($default_img.store)}hover{/if}">
<div class="upload-default" id="imgUploadStore">
{if empty($default_img.store)}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{else/}
<div id="preview_imgUploadStore" class="preview_img">
<img layer-src src="{:img($default_img.store)}" alt="" class="img_prev">
</div>
{/if}
</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">点击替换</div>
</div>
<input type="hidden" name="store" {if $default_img} value="{$default_img.store}" {/if}>
</div>
</div>
</div>
</div>
<div class="word-aux">
<p>说明如果门店未上传门店logo那么前后端都默认展示该图片。</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label">默认文章图片:</label>
<div class="layui-input-inline">
<div class="upload-img-block">
<div class="upload-img-box {if !empty($default_img.article)}hover{/if}">
<div class="upload-default" id="imgUploadArticle">
{if empty($default_img.article)}
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>点击上传</p>
</div>
{else/}
<div id="preview_imgUploadArticle" class="preview_img">
<img layer-src src="{:img($default_img.article)}" alt="" class="img_prev">
</div>
{/if}
</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">点击替换</div>
</div>
<input type="hidden" name="article" {if $default_img} value="{$default_img.article}" {/if}>
</div>
</div>
</div>
</div>
<div class="word-aux">
<p>说明:文章封面图没有或者错误时展示该默认图。</p>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<a id="defaultGoodsImgId"></a>
<a id="defaultHeadimgId"></a>
<a id="defaultStoreimgId"></a>
<a id="defaultArticleimgId"></a>
</div>
</div>
<script>
var saveData = null;
var totalUploadNum = 0;
var completeUploadNum = 0;
var store_upload;
var goods_upload;
var member_upload;
var article_upload;
layui.use(['form'], function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
goods_upload = new Upload({
elem: '#imgUploadGoods',
auto:false,
bindAction:'#defaultGoodsImgId',
callback: function(res) {
uploadComplete('goods', res.data.pic_path);
}
});
member_upload = new Upload({
elem: '#imgUploadMember',
auto:false,
bindAction:'#defaultHeadimgId',
callback: function(res) {
uploadComplete('head', res.data.pic_path);
}
});
store_upload = new Upload({
elem: '#imgUploadStore',
auto:false,
bindAction:'#defaultStoreimgId',
callback: function(res) {
uploadComplete('store', res.data.pic_path);
}
});
article_upload = new Upload({
elem: '#imgUploadArticle',
auto:false,
bindAction:'#defaultArticleimgId',
callback: function(res) {
uploadComplete('article', res.data.pic_path);
}
});
function uploadComplete(field, pic_path) {
saveData.field[field] = pic_path;
completeUploadNum += 1;
if(completeUploadNum == totalUploadNum){
saveFunc();
}
}
function saveFunc(){
var data = saveData;
$.ajax({
type: "POST",
url: ns.url("shop/config/defaultpicture"),
data: data.field,
dataType: 'JSON',
success: function(res) {
repeat_flag = false;
layer.msg(res.message);
}
});
}
form.on('submit(save)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
// 删除图片
if (!data.field.goods && goods_upload.path != 'public/static/img/default_img/square.png') goods_upload.delete();
if (!data.field.head && member_upload.path != 'public/static/img/default_img/head.png') member_upload.delete();
if (!data.field.store && store_upload.path != 'public/static/img/default_img/square.png') store_upload.delete();
if (!data.field.article && article_upload.path != 'public/static/img/default_img/article.png') article_upload.delete();
saveData = data;
var obj = $("img.img_prev[data-prev='1']");
totalUploadNum = obj.length;
if(totalUploadNum > 0){
obj.each(function(){
var actionId = $(this).attr('data-action-id');
$(actionId).click();
})
}else{
saveFunc();
}
});
});
</script>

66
app/shop/view/config/map.html Executable file
View File

@@ -0,0 +1,66 @@
<style type="text/css">
.inline-block{display: inline-block;}
</style>
<div class="layui-form form-wrap">
<div class="layui-form-item">
<label class="layui-form-label">腾讯地图KEY</label>
<div class="layui-input-block">
<input type="text" name="tencent_map_key" autocomplete="off" value="{$info.tencent_map_key ?? ''}" class="layui-input len-long inline-block">
<a href="https://lbs.qq.com/dev/console/key/manage" class="text-color" target="_blank" style="margin-left:5px;">获取密钥</a>
</div>
<div class="word-aux">
<p>平台腾讯定位地图应用KEY</p>
<p>使用场景:手机端收货地址选择、查询距离最近的门店,管理端店铺联系地址,管理端-门店地图选择</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">手机端定位:</label>
<div class="layui-input-block">
<input type="checkbox" name="wap_is_open" value="1" lay-skin="switch" {if condition="$info.wap_is_open == 1" }checked {/if} lay-title="启用|关闭"/>
</div>
<div class="word-aux">开启后,进入首页将获取定位信息</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">定位有效期:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" class="layui-input len-short" name="wap_valid_time" value="{$info.wap_valid_time}" />
</div>
<span class="layui-form-mid">分钟</span>
</div>
<div class="word-aux">过期后将重新获取定位信息0为不过期</div>
</div>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</div>
<script>
layui.use('form', function() {
var form = layui.form,
repeat_flag = false; //防重复标识
form.render();
/**
* 监听提交
*/
form.on('submit(save)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: ns.url("shop/config/map"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(data){
layer.msg(data.message);
repeat_flag = false;
}
});
});
});
</script>

63
app/shop/view/config/pay.html Executable file
View File

@@ -0,0 +1,63 @@
<!-- 列表 -->
<table id="pay_list" lay-filter="pay_list"></table>
<!-- 支付方式 -->
<script type="text/html" id="payment">
<div class="table-title">
<div class="title-pic">
<img layer-src src="{{ns.img(d.logo.split(',')[0])}}"/>
</div>
<div class="title-content">
{{d.pay_type_name}}
</div>
</div>
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="edit" href="{{ns.href(d.shop_url)}}">配置</a>
</div>
</script>
<script>
var table = new Table({
elem: '#pay_list',
url: ns.url("shop/config/pay"),
page: false,
parseData: function(data) { //res 即为原始返回的数据
return {
"code": data.code,
"msg": data.message,
"data": data.data,
};
},
cols: [
[{
field: 'pay_type_name',
title: '支付方式名称',
width: '30%',
unresize: 'false',
templet: '#payment'
}, {
field: 'desc',
title: '支付方式描述',
width: '45%',
unresize: 'false'
},{
field: 'status',
title: '支付状态',
width: '15%',
unresize: 'false',
templet: function (data){
return data.pay_status == 1 ? '开启' : '关闭';
}
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align:'right'
}]
],
});
</script>

View File

@@ -0,0 +1,304 @@
<style>
.layui-layout-admin .layui-body .body-content{background-color: transparent;padding: 0;}
.input-text span{margin-right: 15px;}
.form-wrap {margin-top: 0; position: relative;background: none;padding: 0}
.form-wrap .top{background: #f5f5f5;margin-top: 10px}
.layui-form-item.top .layui-form-label{text-align: left;font-weight: bold;padding-left: 15px;}
.layui-form-label + .layui-input-block{margin-left: 94px ;}
.layui-unselect.layui-form-radio.layui-form-radioed.layui-radio-disbaled i:after{background:#eee !important;}
.shop-information{width: 100%;background: white;padding: 20px;box-sizing: border-box;margin-bottom: 20px;}
.shop-information .layui-input-block{margin-left: 0 !important;}
.shop-information .main-title{display: flex;align-items: center;justify-content: space-between;margin-bottom: 18px;}
.shop-information .title{color:#333333;margin-bottom: 0;width: 50%;height: 16px;line-height: 16px;padding-left: 10px;border-left: 3px solid var(--base-color);box-sizing: border-box;font-size: 17px;}
.shop-information .main-title span{cursor: pointer;}
.word-aux{margin-left: 100px}
.all-box-left{margin-left: 100px;}
.card-common{margin-top: 0;}
.layui-layout-admin .form-wrap{padding-top: 0;}
.input-text span{margin-right: 15px;}
.layui-form-item.top .layui-form-label{text-align: left;font-weight: bold;padding-left: 15px;}
.layui-unselect.layui-form-radio.layui-form-radioed.layui-radio-disbaled i:after{background:#eee !important;}
.service-box .box .layui-form-label{width: 158px !important;height: 38px;line-height: 38px;}
.service-popup-box .layui-form-label{width: 140px;}
.service-popup-box .layui-form-label + .layui-input-block {margin-left: 140px}
.service-popup-box .word-aux{margin-left: 140px;}
.service-popup-box .all-box-left{margin-left: 140px;}
.service-box .box .top {margin-bottom: 0;}
.service-box{padding-bottom: 40px; width: calc(100% / 3);}
.card-common .layui-card-body{padding: 20px 0 0;}
</style>
<div class="layui-form form-wrap card-common">
<div class="layui-card card-common card-brief shop-information service-box">
<div class="layui-card-header main-title">
<span class="card-title">客服设置</span>
<span class="text-color" onclick="editService()">编辑</span>
</div>
<div class="layui-card-body box">
<div class="layui-form-item">
<label class="layui-form-label">H5/微信公众号端:</label>
<div class="layui-input-block">
{switch name="$config.h5.type"}
{case value="none"}未启用{/case}
{case value="niushop"}Niushop客服{/case}
{case value="wxwork"}企业微信客服{/case}
{case value="third"}第三方客服{/case}
{/switch}
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">微信小程序端:</label>
<div class="layui-input-block">
{switch name="$config.weapp.type"}
{case value="none"}未启用{/case}
{case value="niushop"}Niushop客服{/case}
{case value="wxwork"}企业微信客服{/case}
{case value="weapp"}小程序客服{/case}
{/switch}
</div>
</div>
{if addon_is_exit('pc', request()->siteid()) == 1}
<div class="layui-form-item">
<label class="layui-form-label">PC端</label>
<div class="layui-input-block">
{switch name="$config.pc.type"}
{case value="none"}未启用{/case}
{case value="third"}第三方客服{/case}
{/switch}
</div>
</div>
{/if}
{if addon_is_exit('aliapp', request()->siteid()) == 1 }
<div class="layui-form-item">
<label class="layui-form-label">支付宝小程序:</label>
<div class="layui-input-block">
{switch name="$config.aliapp.type"}
{case value="none"}未启用{/case}
{case value="niushop"}Niushop客服{/case}
{case value="aliapp"}蚂蚁智能客服{/case}
{/switch}
</div>
</div>
{/if}
</div>
</div>
</div>
<script type="text/html" id="contentService">
<div class="layui-form form-wrap service-popup-box layui-card card-common card-brief">
<div class="layui-card-header">
<span class="card-title">H5/微信公众号端</span>
</div>
<div class="layui-form-item">
<label class="layui-form-label">客服类型</label>
<div class="layui-input-block">
<input type="radio" name="h5[type]" lay-filter="serviceType" lay-type="h5" value="none" title="不启用" {if condition="$config.h5.type == 'none'"} checked {/if}>
{if addon_is_exit('servicer')}<input type="radio" name="h5[type]" lay-filter="serviceType" lay-type="h5" value="niushop" title="Niushop客服" {if condition="$config.h5.type == 'niushop'"} checked {/if}>{/if}
<input type="radio" name="h5[type]" lay-filter="serviceType" lay-type="h5" value="wxwork" title="企业微信客服" {if condition="$config.h5.type == 'wxwork'"} checked {/if}>
<input type="radio" name="h5[type]" lay-filter="serviceType" lay-type="h5" value="third" title="第三方客服" {if condition="$config.h5.type == 'third'"} checked {/if}>
</div>
</div>
<div class="h5-wrap wxwork" {if $config.h5.type != 'wxwork'} style="display: none" {/if}>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span></label>
<div class="layui-input-block">
<input type="text" class="layui-input len-mid" name="h5[wxwork_url]" value="{$config.h5.wxwork_url ?? ''}" lay-verify="h5WxworkUrl">
</div>
</div>
<div class="word-aux">H5中如何接入企业微信客服请查看<a href="https://work.weixin.qq.com/nl/act/p/3f8820e724cb44c5" target="_blank" class="text-color">在微信内网页中接入</a></div>
</div>
<div class="h5-wrap third" {if $config.h5.type != 'third'} style="display: none" {/if}>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span></label>
<div class="layui-input-block">
<input type="text" class="layui-input len-mid" name="h5[third_url]" value="{$config.h5.third_url ?? ''}" lay-verify="h5ThirdUrl">
</div>
</div>
<div class="word-aux">请填写客服链接聊天时跳转至第三方聊天窗口例如<a href="https://meiqia.com/zt/livechat?utm_source=tian&amp;utm_medium=baidu&amp;utm_term=pinzhuan" target="_blank" class="text-color">美洽客服</a></div>
</div>
<div class="layui-card-header">
<span class="card-title">微信小程序端</span>
</div>
<div class="layui-form-item">
<label class="layui-form-label">客服类型</label>
<div class="layui-input-block">
<input type="radio" name="weapp[type]" lay-filter="serviceType" lay-type="weapp" value="none" title="不启用" {if condition="$config.weapp.type == 'none'"} checked {/if}>
{if addon_is_exit('servicer')}<input type="radio" name="weapp[type]" lay-filter="serviceType" lay-type="weapp" value="niushop" title="Niushop客服" {if condition="$config.weapp.type == 'niushop'"} checked {/if}>{/if}
<input type="radio" name="weapp[type]" lay-filter="serviceType" lay-type="weapp" value="weapp" title="小程序客服" {if condition="$config.weapp.type == 'weapp'"} checked {/if}>
<input type="radio" name="weapp[type]" lay-filter="serviceType" lay-type="weapp" value="wxwork" title="企业微信客服" {if condition="$config.weapp.type == 'wxwork'"} checked {/if}>
</div>
</div>
<div class="weapp-wrap wxwork" {if $config.weapp.type != 'wxwork'} style="display: none" {/if}>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>ID</label>
<div class="layui-input-block">
<input type="text" class="layui-input len-mid" name="weapp[corpid]" value="{$config.weapp.corpid ?? ''}" lay-verify="weappCorpid">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span></label>
<div class="layui-input-block">
<input type="text" class="layui-input len-mid" name="weapp[wxwork_url]" value="{$config.weapp.wxwork_url ?? ''}" lay-verify="weappWxworkUrl">
</div>
</div>
<div class="word-aux">小程序中如何接入企业微信客服请查看<a href="https://work.weixin.qq.com/nl/act/p/a733314375294bdd" target="_blank" class="text-color">在小程序中接入</a></div>
</div>
{if addon_is_exit('pc', request()->siteid()) == 1}
<div class="layui-card-header">
<span class="card-title">PC端</span>
</div>
<div class="layui-form-item">
<label class="layui-form-label">客服类型</label>
<div class="layui-input-block">
<input type="radio" name="pc[type]" lay-filter="serviceType" lay-type="pc" value="none" title="不启用" {if condition="$config.pc.type == 'none'"} checked {/if}>
<input type="radio" name="pc[type]" lay-filter="serviceType" lay-type="pc" value="third" title="第三方客服" {if condition="$config.pc.type == 'third'"} checked {/if}>
</div>
</div>
<div class="pc-wrap third" {if $config.pc.type != 'third'} style="display: none" {/if}>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span></label>
<div class="layui-input-block">
<input type="text" class="layui-input len-mid" name="pc[third_url]" value="{$config.pc.third_url ?? ''}" lay-verify="pcThirdUrl">
</div>
</div>
<div class="word-aux">请填写客服链接聊天时跳转至第三方聊天窗口例如<a href="https://meiqia.com/zt/livechat?utm_source=tian&amp;utm_medium=baidu&amp;utm_term=pinzhuan" target="_blank" class="text-color">美洽客服</a></div>
</div>
{/if}
{if addon_is_exit('aliapp', request()->siteid()) == 1 }
<div class="layui-card-header">
<span class="card-title">支付宝小程序</span>
</div>
<div class="layui-form-item">
<label class="layui-form-label">客服类型</label>
<div class="layui-input-block">
<input type="radio" name="aliapp[type]" lay-filter="serviceType" lay-type="aliapp" value="none" title="不启用" {if condition="$config.aliapp.type == 'none'"} checked {/if}>
{if addon_is_exit('servicer')}<input type="radio" name="aliapp[type]" lay-filter="serviceType" lay-type="aliapp" value="niushop" title="Niushop客服" {if condition="$config.aliapp.type == 'niushop'"} checked {/if}>{/if}
<input type="radio" name="aliapp[type]" lay-filter="serviceType" lay-type="aliapp" value="aliapp" title="蚂蚁智能客服" {if condition="$config.aliapp.type == 'aliapp'"} checked {/if}>
</div>
</div>
<div class="aliapp-wrap aliapp" {if $config.aliapp.type != 'aliapp'} style="display: none" {/if}>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>ID</label>
<div class="layui-input-block">
<input type="text" class="layui-input len-mid" name="aliapp[instid]" value="{$config.aliapp.instid ?? ''}" lay-verify="aliappInstid">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>ID</label>
<div class="layui-input-block">
<input type="text" class="layui-input len-mid" name="aliapp[scene]" value="{$config.aliapp.scene ?? ''}" lay-verify="aliappScene">
</div>
</div>
<div class="word-aux">小程序中如何接入蚂蚁智能客服请查看<a href="https://opendocs.alipay.com/b/03al9b" target="_blank" class="text-color">在小程序中接入</a></div>
</div>
{/if}
<div class="form-row all-box-left">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
</div>
</div>
</script>
<script>
var repeat_flag = false; //防重复标识
var form,serviceOpen;
layui.use(['form'], function() {
form = layui.form;
form.render();
form.verify({
h5WxworkUrl: function(value){
if ($('[name="h5[type]"]:checked').val() == 'wxwork' && !/[\S]+/.test(value)) {
return '请输入客服链接';
}
},
h5ThirdUrl: function(value){
if ($('[name="h5[type]"]:checked').val() == 'third' && !/[\S]+/.test(value)) {
return '请输入客服链接';
}
},
weappCorpid: function(value){
if ($('[name="weapp[type]"]:checked').val() == 'wxwork' && !/[\S]+/.test(value)) {
return '请输入企业ID';
}
},
weappWxworkUrl: function(value){
if ($('[name="weapp[type]"]:checked').val() == 'wxwork' && !/[\S]+/.test(value)) {
return '请输入客服链接';
}
},
pcThirdUrl: function(value){
if ($('[name="pc[type]"]:checked').val() == 'third' && !/[\S]+/.test(value)) {
return '请输入客服链接';
}
},
aliappInstid: function(value){
if ($('[name="aliapp[type]"]:checked').val() == 'aliapp' && !/[\S]+/.test(value)) {
return '租户ID';
}
},
aliappScene: function(value){
if ($('[name="aliapp[type]"]:checked').val() == 'aliapp' && !/[\S]+/.test(value)) {
return '聊天窗ID';
}
}
})
form.on('radio(serviceType)',function(data){
var type = $(data.elem).attr('lay-type'), value = data.value;
$('.' + type + '-wrap').hide();
$('.' + type + '-wrap.' + value).show();
})
/**
* 监听提交
*/
form.on('submit(save)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: ns.url("shop/config/servicer"),
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(res) {
if (res.code == 0) {
layer.msg('编辑成功');
listenerHash(); // 刷新页面
layer.closeAll();
}else{
repeat_flag = false;
layer.msg(res.message);
}
}
});
});
});
function showDemo(){
layer.open({
title: '查看示例',
type: 1,
area: ['700px', '660px'],
content: '<img style="margin:15px;" src="SHOP_IMG/chat1.png"><img style="margin:15px;" src="SHOP_IMG/chat2.png">'
})
}
function editService(){
serviceOpen= layer.open({
title:'客服设置',
type:1,
area: 'auto',
fixed:true,
maxWidth:1000,
maxHeight:800,
content:$("#contentService").html(),
success:function(layero,index){
form.render();
}
})
}
</script>

File diff suppressed because it is too large Load Diff