问答应用开发
parent
1a3d87af9a
commit
1664facd9f
|
|
@ -13,6 +13,7 @@ namespace app\plugins\answers;
|
|||
use think\Controller;
|
||||
use app\service\PluginsService;
|
||||
use app\plugins\answers\Service;
|
||||
use app\service\SearchService;
|
||||
|
||||
/**
|
||||
* 问答 - 后台管理
|
||||
|
|
@ -118,9 +119,6 @@ class Admin extends Controller
|
|||
*/
|
||||
public function sliderinfo($params = [])
|
||||
{
|
||||
// 参数
|
||||
$params = input();
|
||||
|
||||
// 数据
|
||||
if(!empty($params['id']))
|
||||
{
|
||||
|
|
@ -151,7 +149,6 @@ class Admin extends Controller
|
|||
}
|
||||
|
||||
// 开始处理
|
||||
$params = input();
|
||||
return Service::SlideSave($params);
|
||||
}
|
||||
|
||||
|
|
@ -161,8 +158,9 @@ class Admin extends Controller
|
|||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-15T11:03:30+0800
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public function sliderdelete()
|
||||
public function sliderdelete($params = [])
|
||||
{
|
||||
// 是否ajax请求
|
||||
if(!IS_AJAX)
|
||||
|
|
@ -171,7 +169,6 @@ class Admin extends Controller
|
|||
}
|
||||
|
||||
// 开始处理
|
||||
$params = input();
|
||||
return Service::SlideDelete($params);
|
||||
}
|
||||
|
||||
|
|
@ -181,8 +178,9 @@ class Admin extends Controller
|
|||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2017-01-12T22:23:06+0800
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public function sliderstatusupdate()
|
||||
public function sliderstatusupdate($params = [])
|
||||
{
|
||||
// 是否ajax请求
|
||||
if(!IS_AJAX)
|
||||
|
|
@ -191,8 +189,70 @@ class Admin extends Controller
|
|||
}
|
||||
|
||||
// 开始处理
|
||||
$params = input();
|
||||
return Service::SlideStatusUpdate($params);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 推荐商品编辑编辑
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @datetime 2019-02-07T08:21:54+0800
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public function goodsinfo($params = [])
|
||||
{
|
||||
// 数据
|
||||
if(!empty($params['id']))
|
||||
{
|
||||
$data_params = array(
|
||||
'where' => ['id'=>intval($params['id'])],
|
||||
);
|
||||
$ret = Service::SlideList($data_params);
|
||||
$this->assign('data', empty($ret['data'][0]) ? [] : $ret['data'][0]);
|
||||
}
|
||||
|
||||
return $this->fetch('../../../plugins/view/answers/admin/goodsinfo');
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品搜索
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @datetime 2019-02-07T08:21:54+0800
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public function goodssearch($params = [])
|
||||
{
|
||||
// 是否ajax请求
|
||||
if(!IS_AJAX)
|
||||
{
|
||||
return $this->error('非法访问');
|
||||
}
|
||||
|
||||
// 搜索数据
|
||||
return Service::GoodsSearchList($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品保存
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @datetime 2019-02-07T08:21:54+0800
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public function goodssave($params = [])
|
||||
{
|
||||
// 是否ajax请求
|
||||
if(!IS_AJAX)
|
||||
{
|
||||
return $this->error('非法访问');
|
||||
}
|
||||
|
||||
print_r($params);die;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -204,5 +204,42 @@ class Service
|
|||
}
|
||||
return DataReturn('编辑失败或数据未改变', -100);
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品搜索
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-06T21:31:53+0800
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function GoodsSearchList($params = [])
|
||||
{
|
||||
// 条件
|
||||
$where = [
|
||||
['g.is_delete_time', '=', 0],
|
||||
['g.is_shelves', '=', 1]
|
||||
];
|
||||
|
||||
// 关键字
|
||||
if(!empty($params['keywords']))
|
||||
{
|
||||
$where[] = ['g.title', 'like', '%'.$params['keywords'].'%'];
|
||||
}
|
||||
|
||||
// 分类id
|
||||
if(!empty($params['category_id']))
|
||||
{
|
||||
$category_ids = GoodsService::GoodsCategoryItemsIds([$params['category_id']], 1);
|
||||
$category_ids[] = $params['category_id'];
|
||||
$where[] = ['gci.category_id', 'in', $category_ids];
|
||||
}
|
||||
|
||||
// 指定字段
|
||||
$field = 'g.id,g.title';
|
||||
|
||||
// 获取数据
|
||||
return GoodsService::CategoryGoodsList(['where'=>$where, 'm'=>0, 'n'=>100, 'field'=>$field]);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<div class="am-form-group">
|
||||
<label>链接地址<span class="fs-12 fw-100 cr-999">(带http://或https://)</span></label>
|
||||
<input type="url" placeholder="链接地址" name="url" data-validation-message="链接地址格式有误" class="am-radius" {{if !empty($data)}} value="{{$data.url}}"{{/if}} />
|
||||
<input type="url" placeholder="链接地址" name="url" data-validation-message="链接地址格式有误" class="am-radius" {{if !empty($data['url'])}} value="{{$data.url}}"{{/if}} />
|
||||
</div>
|
||||
|
||||
<div class="am-form-group">
|
||||
|
|
@ -40,6 +40,21 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="am-form-group">
|
||||
<label>右侧热门问答名称<span class="fs-12 fw-100 cr-999">(默认 热门问答)</span></label>
|
||||
<input type="text" name="right_top_hot_name" placeholder="右侧热门问答名称" maxlength="30" data-validation-message="右侧热门问答名称格式最多 30 个字符" class="am-radius" {{if !empty($data['right_top_hot_name'])}} value="{{$data.right_top_hot_name}}"{{/if}} />
|
||||
</div>
|
||||
|
||||
<div class="am-form-group">
|
||||
<label>中间最新问答名称<span class="fs-12 fw-100 cr-999">(默认 最新问答)</span></label>
|
||||
<input type="text" name="right_middle_new_name" placeholder="中间最新问答名称" maxlength="30" data-validation-message="中间最新问答名称格式最多 30 个字符" class="am-radius" {{if !empty($data['right_middle_new_name'])}} value="{{$data.right_middle_new_name}}"{{/if}} />
|
||||
</div>
|
||||
|
||||
<div class="am-form-group">
|
||||
<label>右侧推荐商品名称<span class="fs-12 fw-100 cr-999">(默认 推荐商品)</span></label>
|
||||
<input type="text" name="right_top_goods_name" placeholder="右侧推荐商品名称" maxlength="30" data-validation-message="右侧推荐商品名称格式最多 30 个字符" class="am-radius" {{if !empty($data['right_top_goods_name'])}} value="{{$data.right_top_goods_name}}"{{/if}} />
|
||||
</div>
|
||||
|
||||
<div class="am-form-group am-form-group-refreshing">
|
||||
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm w100" data-am-loading="{loadingText:'处理中...'}">保存</button>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
{{include file="public/header" /}}
|
||||
|
||||
<!-- right content start -->
|
||||
<div class="content-right">
|
||||
<div class="content">
|
||||
<legend>
|
||||
<span class="fs-16">
|
||||
{{if empty($data['id'])}}
|
||||
商品添加
|
||||
{{else /}}
|
||||
商品编辑
|
||||
{{/if}}
|
||||
</span>
|
||||
<a href="{{:PluginsAdminUrl('answers', 'admin', 'index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
|
||||
</legend>
|
||||
|
||||
<div class="answers-content">
|
||||
<!-- form start -->
|
||||
<form class="am-form form-validation view-save" action="{{:PluginsAdminUrl('answers', 'admin', 'goodssave')}}" method="POST" request-type="ajax-url" request-value="{{:PluginsAdminUrl('answers', 'admin', 'index')}}" enctype="multipart/form-data">
|
||||
<div class="goods-container">
|
||||
<div class="goods-form" data-search-url="{{:PluginsAdminUrl('answers', 'admin', 'goodssearch')}}">
|
||||
<select class="am-radius c-p chosen-select goods-form-category" data-placeholder="可选择..." data-validation-message="请选择商品分类">
|
||||
<option value="">可选择...</option>
|
||||
{{if !empty($goods_category_list)}}
|
||||
{{foreach $goods_category_list as $v}}
|
||||
<option value="{{$v.id}}">{{$v.name}}</option>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
</select>
|
||||
<input type="text" placeholder="商品名称" class="am-radius goods-form-keywords" />
|
||||
<button type="button" class="am-btn am-btn-secondary am-radius am-btn-sm search-submit">搜索</button>
|
||||
</div>
|
||||
<div class="am-form-group am-form-group-refreshing goods-list">
|
||||
<input type="text" name="goods_category_ids" value="{{if !empty($goods_category_ids)}}{{:implode(',', json_decode($data['goods_category_ids'], true))}}{{/if}}" data-validation-message="请选择商品" required />
|
||||
<div class="goods-items am-fl">
|
||||
<div class="title">可选</div>
|
||||
<ul class="goods-content am-list ul-left">
|
||||
<div class="table-no">没有相关数据</div>
|
||||
</ul>
|
||||
</div>
|
||||
<button type="button" class="am-btn am-btn-default am-btn-xs selected-all">全选 <i class="am-icon-angle-double-right"></i></button>
|
||||
<div class="goods-items am-fr">
|
||||
<div class="title">已选</div>
|
||||
<ul class="goods-content am-list ul-right">
|
||||
<div class="table-no {{if !empty($data)}}none{{/if}}">没有相关数据</div>
|
||||
{{if !empty($goods_list)}}
|
||||
{{foreach $goods_list as $v}}
|
||||
<li class="am-animation-slide-bottom items-li-{{$v.id}}">
|
||||
<span class="name" data-value="{{$v.id}}">{{$v.name}}</span>
|
||||
<i class="am-icon-trash-o am-fr"></i>
|
||||
</li>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="am-form-group am-form-group-refreshing">
|
||||
<input type="hidden" name="id" {{if !empty($params['id'])}} value="{{$params.id}}"{{/if}} />
|
||||
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm w100" data-am-loading="{loadingText:'处理中...'}">保存</button>
|
||||
</div>
|
||||
</form>
|
||||
<!-- form end -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- right content end -->
|
||||
|
||||
<!-- footer start -->
|
||||
{{include file="public/footer" /}}
|
||||
<!-- footer end -->
|
||||
|
|
@ -310,10 +310,16 @@ class GoodsService
|
|||
}
|
||||
|
||||
// 产地
|
||||
$v['place_origin_name'] = empty($v['place_origin']) ? null : RegionService::RegionName($v['place_origin']);
|
||||
if(isset($v['place_origin_name']))
|
||||
{
|
||||
$v['place_origin_name'] = empty($v['place_origin']) ? null : RegionService::RegionName($v['place_origin']);
|
||||
}
|
||||
|
||||
// 品牌
|
||||
$v['brand_name'] = empty($v['brand_id']) ? null : BrandService::BrandName($v['brand_id']);
|
||||
if(isset($v['brand_id']))
|
||||
{
|
||||
$v['brand_name'] = empty($v['brand_id']) ? null : BrandService::BrandName($v['brand_id']);
|
||||
}
|
||||
|
||||
// 时间
|
||||
if(!empty($v['add_time']))
|
||||
|
|
|
|||
|
|
@ -7,11 +7,12 @@
|
|||
padding-bottom: 20px;
|
||||
}
|
||||
.answers-content .items .immages-tag {
|
||||
border: 1px solid #eee;
|
||||
text-align: center;
|
||||
}
|
||||
.answers-content .items .immages-tag img {
|
||||
max-width: 100%;
|
||||
border: 1px dashed #eee;
|
||||
padding: 5px;
|
||||
}
|
||||
.answers-content .edit-submit {
|
||||
margin-bottom: 20px;
|
||||
|
|
@ -35,4 +36,114 @@
|
|||
ul.plugins-images-view li {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 商品推荐编辑
|
||||
*/
|
||||
form.am-form {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
form.am-form .am-form-group {
|
||||
padding: 0;
|
||||
}
|
||||
.goods-container .goods-form-category, .goods-container .chosen-container, .goods-container .goods-form-keywords {
|
||||
width: 30% !important;
|
||||
}
|
||||
.goods-container .chosen-container, .goods-container .goods-form-keywords {
|
||||
display: -webkit-inline-box !important;
|
||||
}
|
||||
.goods-container .chosen-single {
|
||||
width: 100%;
|
||||
}
|
||||
.goods-container .goods-form {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.goods-list {
|
||||
overflow: hidden;
|
||||
margin-bottom: 20px;
|
||||
position: relative;
|
||||
}
|
||||
.goods-list .goods-items {
|
||||
width: calc(50% - 50px);
|
||||
height: 300px;
|
||||
}
|
||||
.goods-list .goods-items .title {
|
||||
text-align: center;
|
||||
}
|
||||
.goods-list .goods-items .goods-content {
|
||||
border: 1px solid #eee;
|
||||
height: calc(100% - 25px);
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.goods-list .goods-items .goods-content li {
|
||||
padding: 5px 45px 5px 5px;
|
||||
border-style: dotted;
|
||||
border-color: #eaeaea;
|
||||
border-width: 1px 0;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
max-width: 100%;
|
||||
color: #666;
|
||||
position: relative;
|
||||
}
|
||||
.goods-list .goods-items .goods-content li:nth-child(2) {
|
||||
border-top: 0;
|
||||
}
|
||||
.goods-list .goods-items .goods-content li i {
|
||||
cursor: pointer;
|
||||
padding: 0 10px 0 5px;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
.goods-list .selected-all {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: calc(50% - 30px);
|
||||
}
|
||||
.goods-container input[name="goods_category_ids"] {
|
||||
position: absolute;
|
||||
left: -1000000px;
|
||||
top: -1000000px;
|
||||
}
|
||||
.goods-list i {
|
||||
color: #888 !important;
|
||||
}
|
||||
.am-form-error .goods-items .goods-content {
|
||||
border-color: #dd514c;
|
||||
}
|
||||
|
||||
.content-view {
|
||||
max-width: 100%;
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
.content-view-win {
|
||||
border: 1px solid #eee;
|
||||
padding: 10px;
|
||||
}
|
||||
.content-view-win img, .content-view img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 641px) {
|
||||
.goods-container .goods-form-category, .goods-container .goods-form-keywords
|
||||
{
|
||||
width: calc(55% - 60px) !important;
|
||||
display: -webkit-inline-box !important;
|
||||
}
|
||||
.goods-container .chosen-container {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.content-view-td {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,107 @@
|
|||
$(function()
|
||||
{
|
||||
// 添加元素到右侧
|
||||
function RightElementAdd(value, name)
|
||||
{
|
||||
if($('ul.ul-right').find('.items-li-'+value).length == 0)
|
||||
{
|
||||
var html = '<li class="am-animation-slide-bottom items-li-'+value+'"><span class="name" data-value="'+value+'">'+name+'</span><i class="am-icon-trash-o am-fr"></i></li>';
|
||||
$('ul.ul-right').append(html);
|
||||
}
|
||||
|
||||
// 右侧数据同步
|
||||
RightElementGoods();
|
||||
|
||||
// 左侧是否还有内容
|
||||
if($('ul.ul-left li').length == 0)
|
||||
{
|
||||
$('ul.ul-left .table-no').removeClass('none');
|
||||
} else {
|
||||
$('ul.ul-left .table-no').addClass('none');
|
||||
}
|
||||
}
|
||||
|
||||
// 批量-商品id同步
|
||||
function RightElementGoods()
|
||||
{
|
||||
var value_all = [];
|
||||
$('ul.ul-right li').each(function(k, v)
|
||||
{
|
||||
value_all[k] = $(this).find('span.name').data('value');
|
||||
});
|
||||
$('.goods-container input[name="goods_category_ids"]').val(value_all.join(',')).blur();
|
||||
|
||||
// 右侧是否还有数据
|
||||
if($('ul.ul-right li').length == 0)
|
||||
{
|
||||
$('ul.ul-right .table-no').removeClass('none');
|
||||
} else {
|
||||
$('ul.ul-right .table-no').addClass('none');
|
||||
}
|
||||
}
|
||||
// 左侧点击到右侧
|
||||
$('ul.ul-left').on('click', 'i.am-icon-angle-right', function()
|
||||
{
|
||||
var value = $(this).prev().data('value');
|
||||
var name = $(this).prev().text();
|
||||
$(this).parent().remove();
|
||||
RightElementAdd(value, name);
|
||||
});
|
||||
|
||||
// 左侧全部移动到右侧
|
||||
$('.selected-all').on('click', function()
|
||||
{
|
||||
$('ul.ul-left li').each(function(k, v)
|
||||
{
|
||||
var value = $(this).find('span.name').data('value');
|
||||
var name = $(this).find('span.name').text();
|
||||
$(this).remove();
|
||||
RightElementAdd(value, name);
|
||||
});
|
||||
});
|
||||
|
||||
// 右侧删除
|
||||
$('ul.ul-right').on('click', 'i.am-icon-trash-o', function()
|
||||
{
|
||||
$(this).parent().remove();
|
||||
RightElementGoods();
|
||||
});
|
||||
|
||||
// 商品搜索
|
||||
$('.goods-form .search-submit').on('click', function()
|
||||
{
|
||||
var category_id = $('.goods-form .goods-form-category').val();
|
||||
var keywords = $('.goods-form .goods-form-keywords').val();
|
||||
console.log(category_id, keywords)
|
||||
|
||||
// ajax请求
|
||||
$.ajax({
|
||||
url:$('.goods-form').data('search-url'),
|
||||
type:'POST',
|
||||
dataType:"json",
|
||||
timeout:10000,
|
||||
data:{"category_id": category_id, "keywords": keywords},
|
||||
success:function(result)
|
||||
{
|
||||
if(result.code == 0)
|
||||
{
|
||||
var html = '';
|
||||
for(var i in result.data)
|
||||
{
|
||||
html += '<li class="am-animation-slide-bottom"><span class="name" data-value="'+result['data'][i]['id']+'">'+result['data'][i]['title']+'</span><i class="am-icon-angle-right am-fr"></i></li>';
|
||||
}
|
||||
$('ul.ul-left .table-no').addClass('none');
|
||||
$('ul.ul-left li').remove();
|
||||
$('ul.ul-left').append(html);
|
||||
} else {
|
||||
Prompt(result.msg);
|
||||
}
|
||||
},
|
||||
error:function()
|
||||
{
|
||||
Prompt('网络异常错误');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
Loading…
Reference in New Issue