问答系统

This commit is contained in:
devil_gong 2019-03-06 18:34:55 +08:00
parent fff524bda1
commit 1a3d87af9a
155 changed files with 1254 additions and 26 deletions

0
README.md Normal file → Executable file
View File

0
application/admin/controller/Plugins.php Normal file → Executable file
View File

0
application/admin/controller/Pluginsadmin.php Normal file → Executable file
View File

0
application/admin/controller/Sqlconsole.php Normal file → Executable file
View File

View File

0
application/admin/view/default/pluginsadmin/index.html Normal file → Executable file
View File

0
application/admin/view/default/pluginsadmin/nav.html Normal file → Executable file
View File

View File

View File

0
application/admin/view/default/public/error.html Normal file → Executable file
View File

0
application/admin/view/default/sqlconsole/index.html Normal file → Executable file
View File

0
application/common/Http.php Normal file → Executable file
View File

0
application/http/middleware/SystemEnvCheck.php Normal file → Executable file
View File

0
application/index/controller/Plugins.php Normal file → Executable file
View File

0
application/install/config/template.php Normal file → Executable file
View File

0
application/install/controller/Common.php Normal file → Executable file
View File

0
application/install/controller/Error.php Normal file → Executable file
View File

0
application/install/controller/Index.php Normal file → Executable file
View File

0
application/install/view/index/check.html Normal file → Executable file
View File

0
application/install/view/index/create.html Normal file → Executable file
View File

0
application/install/view/index/index.html Normal file → Executable file
View File

0
application/install/view/index/successful.html Normal file → Executable file
View File

0
application/middleware.php Normal file → Executable file
View File

View File

@ -0,0 +1,198 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\plugins\answers;
use think\Controller;
use app\service\PluginsService;
use app\plugins\answers\Service;
/**
* 问答 - 后台管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Admin extends Controller
{
/**
* 首页
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function index($params = [])
{
// 基础数据
$base = PluginsService::PluginsData('answers', ['images']);
$this->assign('data', isset($base['data']) ? $base['data'] : []);
// 幻灯片
$data_params = array(
'where' => ['is_enable'=>1],
);
$slider = Service::SlideList($data_params);
$this->assign('slider', isset($slider['data']) ? $slider['data'] : []);
return $this->fetch('../../../plugins/view/answers/admin/index');
}
/**
* 基础信息编辑页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function baseinfo($params = [])
{
$ret = PluginsService::PluginsData('answers', ['images']);
if($ret['code'] == 0)
{
// 是否
$is_whether_list = [
0 => array('id' => 0, 'name' => '否', 'checked' => true),
1 => array('id' => 1, 'name' => '是'),
];
$this->assign('is_whether_list', $is_whether_list);
$this->assign('data', $ret['data']);
return $this->fetch('../../../plugins/view/answers/admin/baseinfo');
} else {
return $ret['msg'];
}
}
/**
* 基础数据保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function basesave($params = [])
{
return PluginsService::PluginsDataSave(['plugins'=>'answers', 'data'=>$params], ['images']);
}
/**
* 幻灯片页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function slider($params = [])
{
$ret = Service::SlideList();
if($ret['code'] == 0)
{
$this->assign('data_list', $ret['data']);
return $this->fetch('../../../plugins/view/answers/admin/slider');
} else {
return $ret['msg'];
}
}
/**
* 幻灯片编辑
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function sliderinfo($params = [])
{
// 参数
$params = input();
// 数据
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/sliderinfo');
}
/**
* 幻灯片保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function slidersave($params = [])
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始处理
$params = input();
return Service::SlideSave($params);
}
/**
* 幻灯片删除
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-15T11:03:30+0800
*/
public function sliderdelete()
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始处理
$params = input();
return Service::SlideDelete($params);
}
/**
* 幻灯片状态更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-12T22:23:06+0800
*/
public function sliderstatusupdate()
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始处理
$params = input();
return Service::SlideStatusUpdate($params);
}
}
?>

View File

@ -0,0 +1,34 @@
<?php
namespace app\plugins\answers;
use think\Controller;
/**
* 问答 - 钩子入口
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Hook extends Controller
{
// 应用响应入口
public function run($params = [])
{
// 是否控制器钩子
// is_backend 当前为后端业务处理
// hook_name 钩子名称
if(isset($params['is_backend']) && $params['is_backend'] === true && !empty($params['hook_name']))
{
// 参数一 描述
// 参数二 0 为处理成功, 负数为失败
// 参数三 返回数据
return DataReturn('返回描述', 0);
// 默认返回视图
} else {
return 'hello world!';
}
}
}
?>

View File

@ -0,0 +1,24 @@
<?php
namespace app\plugins\answers;
use think\Controller;
/**
* 问答 - 前端独立页面入口
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Index extends Controller
{
// 前端页面入口
public function index($params = [])
{
// 数组组装
$this->assign('data', ['hello', 'world!']);
$this->assign('msg', 'hello world! index');
return $this->fetch('../../../plugins/view/answers/index/index');
}
}
?>

View File

@ -0,0 +1,208 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\plugins\answers;
use think\Db;
use app\service\GoodsService;
use app\service\ResourcesService;
/**
* 问答系统服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Service
{
/**
* 幻灯片数据列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-29
* @desc description
* @param [array] $params [输入参数]
*/
public static function SlideList($params = [])
{
$where = empty($params['where']) ? [] : $params['where'];
$data = Db::name('PluginsAnswersSlide')->where($where)->order('sort asc')->select();
if(!empty($data))
{
$common_is_enable_tips = lang('common_is_enable_tips');
foreach($data as &$v)
{
// 是否启用
$v['is_enable_text'] = $common_is_enable_tips[$v['is_enable']]['name'];
// 图片地址
$v['images_url_old'] = $v['images_url'];
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
// 时间
$v['add_time_time'] = date('Y-m-d H:i:s', $v['add_time']);
$v['add_time_date'] = date('Y-m-d', $v['add_time']);
$v['upd_time_time'] = date('Y-m-d H:i:s', $v['upd_time']);
$v['upd_time_date'] = date('Y-m-d', $v['upd_time']);
}
}
return DataReturn('处理成功', 0, $data);
}
/**
* 幻灯片数据保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-12-19
* @desc description
* @param [array] $params [输入参数]
*/
public static function SlideSave($params = [])
{
// 请求类型
$p = [
[
'checked_type' => 'length',
'key_name' => 'name',
'checked_data' => '2,60',
'error_msg' => '名称长度 2~60 个字符',
],
[
'checked_type' => 'empty',
'key_name' => 'images_url',
'checked_data' => '255',
'error_msg' => '请上传图片',
],
[
'checked_type' => 'fun',
'key_name' => 'url',
'checked_data' => 'CheckUrl',
'error_msg' => 'url格式有误',
],
[
'checked_type' => 'length',
'key_name' => 'sort',
'checked_data' => '3',
'error_msg' => '顺序 0~255 之间的数值',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 附件
$data_fields = ['images_url'];
$attachment = ResourcesService::AttachmentParams($params, $data_fields);
// 数据
$data = [
'name' => $params['name'],
'url' => $params['url'],
'images_url' => $attachment['data']['images_url'],
'sort' => intval($params['sort']),
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
];
if(empty($params['id']))
{
$data['add_time'] = time();
if(Db::name('PluginsAnswersSlide')->insertGetId($data) > 0)
{
return DataReturn('添加成功', 0);
}
return DataReturn('添加失败', -100);
} else {
$data['upd_time'] = time();
if(Db::name('PluginsAnswersSlide')->where(['id'=>intval($params['id'])])->update($data))
{
return DataReturn('编辑成功', 0);
}
return DataReturn('编辑失败', -100);
}
}
/**
* 幻灯片删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-12-18
* @desc description
* @param [array] $params [输入参数]
*/
public static function SlideDelete($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '操作id有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 删除操作
if(Db::name('PluginsAnswersSlide')->where(['id'=>$params['id']])->delete())
{
return DataReturn('删除成功');
}
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 SlideStatusUpdate($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '操作id有误',
],
[
'checked_type' => 'in',
'key_name' => 'state',
'checked_data' => [0,1],
'error_msg' => '状态有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 数据更新
if(Db::name('PluginsAnswersSlide')->where(['id'=>intval($params['id'])])->update(['is_enable'=>intval($params['state'])]))
{
return DataReturn('编辑成功');
}
return DataReturn('编辑失败或数据未改变', -100);
}
}
?>

View File

@ -0,0 +1,22 @@
{
"base":{
"plugins":"answers",
"name":"问答",
"logo":"\/static\/upload\/images\/plugins_answers\/2019\/03\/06\/1551853529634743.png",
"author":"Devil",
"author_url":"https:\/\/shopxo.net\/",
"version":"1.0.0",
"desc":"问答系统",
"apply_terminal":[
"pc",
"h5"
],
"apply_version":[
"1.4.0"
],
"is_home":true
},
"hook":{
}
}

0
application/plugins/commonrightnavigation/Index.php Normal file → Executable file
View File

View File

View File

View File

View File

@ -0,0 +1,54 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:PluginsAdminUrl('answers', 'admin', 'basesave')}}" method="POST" request-type="ajax-url" request-value="{{:PluginsAdminUrl('answers', 'admin', 'index')}}" enctype="multipart/form-data">
<legend>
<span class="fs-16">问答系统</span>
<a href="{{:PluginsAdminUrl('answers', 'admin', 'index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
</legend>
<div class="am-form-group am-form-file">
<label class="block">中间横幅<span class="fs-12 fw-100 cr-999">建议1200像数X80像数</span></label>
<ul class="plug-file-upload-view plugins-images-view" data-form-name="images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['images_old'])}}
<li>
<input type="text" name="images" value="{{$data.images_old}}" data-validation-message="请上传图片" required />
<img src="{{$data.images}}" />
<i>×</i>
</li>
{{/if}}
</ul>
<div class="plug-file-upload-submit" data-view-tag="ul.plugins-images-view">+上传图片</div>
</div>
<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}} />
</div>
<div class="am-form-group">
<label>是否新窗口打开</label>
<div>
{{foreach $is_whether_list as $v}}
<label class="am-radio-inline m-r-10">
<input type="radio" name="is_new_window_open" value="{{$v.id}}" {{if isset($data['is_new_window_open']) and $data['is_new_window_open'] eq $v['id']}}checked="checked"{{else /}}{{if !isset($data['is_new_window_open']) and isset($v['checked']) and $v['checked'] eq true}}checked="checked"{{/if}}{{/if}} data-am-ucheck /> {{$v.name}}
</label>
{{/foreach}}
</div>
</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>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -0,0 +1,143 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<legend>
<span class="fs-16">问答系统</span>
<a href="{{:MyUrl('admin/pluginsadmin/index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
</legend>
<div class="answers-content">
<!-- 基础数据 -->
<div class="am-panel am-panel-secondary answers-middle-banner">
<div class="am-panel-hd">
<span class="am-panel-title">基础数据</span>
<a class="am-fr" href="{{:PluginsAdminUrl('answers', 'admin', 'baseinfo')}}">编辑</a>
</div>
<div class="am-panel-bd">
<div class="items">
<label>中间横幅</label>
<div class="immages-tag">
<a href="{{if empty($data['url'])}}javascript:;{{else /}}{{$data.url}}{{/if}}" {{if isset($data['is_new_window_open']) and $data['is_new_window_open'] eq 1}} target="_blank"{{/if}}>
<img src="{{if !empty($data['images'])}}{{$data.images}}{{else /}}{{$attachment_host}}/static/plugins/images/answers/default-images.png{{/if}}" />
</a>
</div>
</div>
<div class="items">
<label>右侧热门问答名称</label>
<div>
{{if empty($data['right_top_hot_name'])}}
热门问答
{{else /}}
{{$data.right_top_hot_name}}
{{/if}}
</div>
</div>
<div class="items">
<label>中间最新问答名称</label>
<div>
{{if empty($data['right_middle_new_name'])}}
最新问答
{{else /}}
{{$data.right_middle_new_name}}
{{/if}}
</div>
</div>
<div class="items">
<label>右侧推荐商品名称</label>
<div>
{{if empty($data['right_top_goods_name'])}}
推荐商品
{{else /}}
{{$data.right_top_goods_name}}
{{/if}}
</div>
</div>
</div>
</div>
<!-- 幻灯片 -->
<div class="am-panel am-panel-secondary answers-slider">
<div class="am-panel-hd">
<span class="am-panel-title">幻灯片</span>
<a class="am-fr" href="{{:PluginsAdminUrl('answers', 'admin', 'slider')}}">编辑</a>
</div>
<div class="am-panel-bd">
{{if !empty($slider)}}
<div data-am-widget="slider" class="am-slider am-slider-c3" data-am-slider='{"controlNav":false}'>
<ul class="am-slides">
{{foreach $slider as $k=>$v}}
<li>
<a href="{{$v.url}}">
<img src="{{$v.images_url}}">
<div class="am-slider-desc">
<div class="am-slider-counter">
<span class="am-active">{{$k+1}}</span>/{{:count($slider)}}</div>
{{$v.name}}
</div>
</a>
</li>
{{/foreach}}
</ul>
</div>
{{else /}}
没有幻灯片
{{/if}}
</div>
</div>
<!-- 右侧商品 -->
<div class="am-panel am-panel-secondary answers-goods">
<div class="am-panel-hd">
<span class="am-panel-title">右侧商品</span>
<a class="am-fr" href="{{:PluginsAdminUrl('answers', 'admin', 'goodsinfo')}}">编辑</a>
</div>
<div class="am-panel-bd">
<ul data-am-widget="gallery" class="am-gallery am-avg-sm-2 am-avg-md-4 am-avg-lg-8 am-gallery-bordered" data-am-gallery="{ }" >
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-1.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-1.jpg" alt="远方 有一个地方 那里种有我们的梦想"/>
<h3 class="am-gallery-title">远方 有一个地方 那里种有我们的梦想</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-2.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-2.jpg" alt="某天 也许会相遇 相遇在这个好地方"/>
<h3 class="am-gallery-title">某天 也许会相遇 相遇在这个好地方</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-3.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-3.jpg" alt="不要太担心 只因为我相信"/>
<h3 class="am-gallery-title">不要太担心 只因为我相信</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-4.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-4.jpg" alt="终会走过这条遥远的道路"/>
<h3 class="am-gallery-title">终会走过这条遥远的道路</h3>
</a>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -0,0 +1,70 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<legend>
<span class="fs-16">问答系统</span>
<a href="{{:PluginsAdminUrl('answers', 'admin', 'index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
</legend>
<div class="answers-content">
<!-- operation start -->
<div class="am-g m-t-15">
<a href="{{:PluginsAdminUrl('answers', 'admin', 'sliderinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
</div>
<!-- operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle m-t-10">
<thead>
<tr>
<th>名称</th>
<th>图片</th>
<th>url地址</th>
<th>是否启用</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{{if !empty($data_list)}}
{{foreach $data_list as $v}}
<tr id="data-list-{{$v.id}}" {{if $v['is_enable'] eq 0}}class="am-active"{{/if}}>
<td>{{$v.name}}</td>
<td {{if !empty($v['bg_color'])}}style="background-color:{{$v.bg_color}};"{{/if}}>
{{if !empty($v['images_url'])}}
<a href="{{$v['images_url']}}" target="_blank">
<img src="{{$v['images_url']}}" class="am-radius" width="100" height="60" />
</a>
{{else /}}
<span class="cr-ddd">暂无图片</span>
{{/if}}
</td>
<td>{{$v.url}}</td>
<td class="am-hide-sm-only">
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state {{if $v['is_enable'] eq 1}}am-success{{else /}}am-default{{/if}}" data-url="{{:PluginsAdminUrl('answers', 'admin', 'sliderstatusupdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_enable']}}" data-is-update-status="1"></a>
</td>
<td>{{$v.add_time_time}}</td>
<td class="view-operation">
<a href="{{:PluginsAdminUrl('answers', 'admin', 'sliderinfo', ['id'=>$v['id']])}}">
<button class="am-btn am-btn-secondary am-btn-xs am-radius am-icon-edit"> 编辑</button>
</a>
<button class="am-btn am-btn-danger am-btn-xs am-radius am-icon-trash-o submit-delete" data-url="{{:PluginsAdminUrl('answers', 'admin', 'sliderdelete')}}" data-id="{{$v.id}}"> 删除</button>
</td>
</tr>
{{/foreach}}
{{else /}}
<tr><td colspan="5" class="table-no">没有相关数据</td></tr>
{{/if}}
</tbody>
</table>
<!-- list end -->
</div>
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -0,0 +1,64 @@
{{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', 'slider')}}" 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', 'slidersave')}}" method="POST" request-type="ajax-url" request-value="{{:PluginsAdminUrl('answers', 'admin', 'slider')}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>名称</label>
<input type="text" name="name" placeholder="名称" minlength="2" maxlength="60" data-validation-message="名称格式 2~60 个字符" class="am-radius" {{if !empty($data)}} value="{{$data.name}}"{{/if}} required />
</div>
<div class="am-form-group">
<label>url地址<span class="fs-12 fw-100 cr-ccc">带http://或https://</span></label>
<input type="url" placeholder="url地址" name="url" data-validation-message="url格式有误" class="am-radius" {{if !empty($data)}} value="{{$data.url}}"{{/if}} required />
</div>
<div class="am-form-group am-form-file">
<label class="block">图片</label>
<ul class="plug-file-upload-view slide-images_url-images-view" data-form-name="images_url" data-max-number="1" data-delete="0" data-dialog-type="images">
<li>
<input type="text" name="images_url" value="{{if !empty($data['images_url'])}}{{$data.images_url}}{{/if}}" data-validation-message="请上传图片" required />
<img src="{{if !empty($data['images_url'])}}{{$data.images_url}}{{else /}}{{$attachment_host}}/static/plugins/images/answers/default-images.png{{/if}}" />
</li>
</ul>
<div class="plug-file-upload-submit" data-view-tag="ul.slide-images_url-images-view">+上传图片</div>
</div>
<div class="am-form-group">
<label>顺序</label>
<input type="number" placeholder="顺序" name="sort" min="0" max="255" data-validation-message="顺序 0~255 之间的数值" class="am-radius" value="{{if isset($data['sort'])}}{{$data.sort}}{{else /}}0{{/if}}" required />
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (!empty($data) and $data['is_enable'] eq 1) or empty($data)}}checked="true"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="id" {{if !empty($data)}} value="{{$data.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 -->

View File

@ -0,0 +1,224 @@
{{include file="public/header" /}}
<!-- nav start -->
{{include file="public/nav" /}}
<!-- nav end -->
<!-- header top nav -->
{{include file="public/header_top_nav" /}}
<!-- search -->
{{include file="public/nav_search" /}}
<!-- header nav -->
{{include file="public/header_nav" /}}
<!-- goods category -->
{{include file="public/goods_category" /}}
<!-- content start -->
<div class="am-g am-container plugins-answers">
<div class="answers-top">
<!-- 幻灯片 -->
<div class="am-u-md-8 answers-slider">
<div data-am-widget="slider" class="am-slider am-slider-c3" data-am-slider='{"controlNav":false}' >
<ul class="am-slides">
<li>
<img src="http://s.amazeui.org/media/i/demos/bing-1.jpg">
<div class="am-slider-desc"><div class="am-slider-counter"><span class="am-active">1</span>/4</div>远方 有一个地方 那里种有我们的梦想</div>
</li>
<li>
<img src="http://s.amazeui.org/media/i/demos/bing-2.jpg">
<div class="am-slider-desc"><div class="am-slider-counter"><span class="am-active">2</span>/4</div>某天 也许会相遇 相遇在这个好地方</div>
</li>
<li>
<img src="http://s.amazeui.org/media/i/demos/bing-3.jpg">
<div class="am-slider-desc"><div class="am-slider-counter"><span class="am-active">3</span>/4</div>不要太担心 只因为我相信 终会走过这条遥远的道路</div>
</li>
<li>
<img src="http://s.amazeui.org/media/i/demos/bing-4.jpg">
<div class="am-slider-desc"><div class="am-slider-counter"><span class="am-active">4</span>/4</div>OH PARA PARADISE 是否那么重要 你是否那么地遥远</div>
</li>
</ul>
</div>
</div>
<!-- 右侧列表 -->
<div class="am-u-md-4 answers-sidebar">
<div data-am-widget="list_news" class="am-list-news am-list-news-default" >
<!--列表标题-->
<div class="am-list-news-hd am-cf">
<!--带更多链接-->
<a href="##" class="">
<h2>热门问答</h2>
</a>
</div>
<div class="am-list-news-bd">
<ul class="am-list">
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">我很囧,你保重....晒晒旅行中的那些囧!</a>
<span class="am-list-date">2013-09-18</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">我最喜欢的一张画</a>
<span class="am-list-date">2013-10-14</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">“你的旅行,是什么颜色?” 晒照片,换北欧梦幻极光之旅!</a>
<span class="am-list-date">2013-11-18</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">我很囧,你保重....晒晒旅行中的那些囧!</a>
<span class="am-list-date">2013-09-18</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">我最喜欢的一张画</a>
<span class="am-list-date">2013-10-14</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">“你的旅行,是什么颜色?” 晒照片,换北欧梦幻极光之旅!</a>
<span class="am-list-date">2013-11-18</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">我很囧,你保重....晒晒旅行中的那些囧!</a>
<span class="am-list-date">2013-09-18</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">我最喜欢的一张画</a>
<span class="am-list-date">2013-10-14</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">“你的旅行,是什么颜色?” 晒照片,换北欧梦幻极光之旅!</a>
<span class="am-list-date">2013-11-18</span>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="answers-middle-banner">
<img src="http://tp5-dev.com/static/upload/images/plugins_commontopmaxpicture/2019/02/09/1549671733978860.jpg" />
</div>
<div class="am-u-md-8 answers-middle-list">
<div data-am-widget="list_news" class="am-list-news am-list-news-default" >
<div class="am-list-news-hd am-cf">
<!--带更多链接-->
<a href="##" class="">
<h2>最新问答</h2>
</a>
</div>
<div class="am-list-news-bd">
<ul class="am-list">
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">我很囧,你保重....晒晒旅行中的那些囧!</a>
<span class="am-list-date">2013-09-18</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">我最喜欢的一张画</a>
<span class="am-list-date">2013-10-14</span>
</li>
<li class="am-g am-list-item-dated">
<a href="##" class="am-list-item-hd ">“你的旅行,是什么颜色?” 晒照片,换北欧梦幻极光之旅!</a>
<span class="am-list-date">2013-11-18</span>
</li>
</ul>
</div>
</div>
</div>
<div class="am-u-md-4 answers-goods">
<div class="am-list-news-hd am-cf">
<!--带更多链接-->
<a href="##" class="">
<h2>推荐商品</h2>
</a>
</div>
<ul data-am-widget="gallery" class="am-gallery am-avg-sm-2 am-avg-md-2 am-avg-lg-2 am-gallery-bordered" data-am-gallery="{ }" >
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-1.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-1.jpg" alt="远方 有一个地方 那里种有我们的梦想"/>
<h3 class="am-gallery-title">远方 有一个地方 那里种有我们的梦想</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-2.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-2.jpg" alt="某天 也许会相遇 相遇在这个好地方"/>
<h3 class="am-gallery-title">某天 也许会相遇 相遇在这个好地方</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-3.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-3.jpg" alt="不要太担心 只因为我相信"/>
<h3 class="am-gallery-title">不要太担心 只因为我相信</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-4.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-4.jpg" alt="终会走过这条遥远的道路"/>
<h3 class="am-gallery-title">终会走过这条遥远的道路</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-2.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-2.jpg" alt="某天 也许会相遇 相遇在这个好地方"/>
<h3 class="am-gallery-title">某天 也许会相遇 相遇在这个好地方</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-3.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-3.jpg" alt="不要太担心 只因为我相信"/>
<h3 class="am-gallery-title">不要太担心 只因为我相信</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-4.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-4.jpg" alt="终会走过这条遥远的道路"/>
<h3 class="am-gallery-title">终会走过这条遥远的道路</h3>
</a>
</div>
</li>
<li>
<div class="am-gallery-item">
<a href="http://s.amazeui.org/media/i/demos/bing-4.jpg" class="">
<img src="http://s.amazeui.org/media/i/demos/bing-4.jpg" alt="终会走过这条遥远的道路"/>
<h3 class="am-gallery-title">终会走过这条遥远的道路</h3>
</a>
</div>
</li>
</ul>
</div>
</div>
<!-- content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

0
application/service/PluginsAdminService.php Normal file → Executable file
View File

0
application/service/PluginsService.php Normal file → Executable file
View File

0
application/service/SqlconsoleService.php Normal file → Executable file
View File

0
application/service/StatisticalService.php Normal file → Executable file
View File

0
config/.gitignore vendored Normal file → Executable file
View File

0
config/shopxo.php Normal file → Executable file
View File

156
config/shopxo.sql Normal file → Executable file

File diff suppressed because one or more lines are too long

0
extend/base/Wechat.php Normal file → Executable file
View File

0
extend/payment/Weixin.php Normal file → Executable file
View File

0
extend/phpmailer/Exception.php Normal file → Executable file
View File

0
extend/phpmailer/PHPMailer.php Normal file → Executable file
View File

0
extend/phpmailer/POP3.php Normal file → Executable file
View File

0
extend/phpmailer/SMTP.php Normal file → Executable file
View File

0
public/appmini/old/.gitignore vendored Normal file → Executable file
View File

0
public/appmini/old/weixin/components/badge/badge.js Normal file → Executable file
View File

0
public/appmini/old/weixin/components/badge/badge.json Normal file → Executable file
View File

0
public/appmini/old/weixin/components/badge/badge.wxml Normal file → Executable file
View File

0
public/appmini/old/weixin/components/badge/badge.wxss Normal file → Executable file
View File

0
public/appmini/old/weixin/components/popup/popup.js Normal file → Executable file
View File

0
public/appmini/old/weixin/components/popup/popup.json Normal file → Executable file
View File

0
public/appmini/old/weixin/components/popup/popup.wxml Normal file → Executable file
View File

0
public/appmini/old/weixin/components/popup/popup.wxss Normal file → Executable file
View File

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

0
public/favicon.ico Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

0
public/htaccess-iis Normal file → Executable file
View File

0
public/htaccess-nginx Normal file → Executable file
View File

0
public/static/admin/default/css/index.init.css Normal file → Executable file
View File

0
public/static/admin/default/css/pluginsadmin.css Normal file → Executable file
View File

View File

0
public/static/common/lib/echarts/echarts.min.js vendored Normal file → Executable file
View File

0
public/static/common/lib/echarts/macarons.js Normal file → Executable file
View File

0
public/static/index/default/images/preview.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

0
public/static/index/default/js/order.qrcodepay.js Normal file → Executable file
View File

View File

@ -0,0 +1,38 @@
/**
* 首页
*/
.answers-content .items {
margin: 10px 0 20px 0;
border-bottom: 1px dashed #f1f1f1;
padding-bottom: 20px;
}
.answers-content .items .immages-tag {
border: 1px solid #eee;
text-align: center;
}
.answers-content .items .immages-tag img {
max-width: 100%;
}
.answers-content .edit-submit {
margin-bottom: 20px;
}
.answers-content img {
max-width: 100%;
}
@media only screen and (min-width:640px) {
.answers-slider .am-slider {
width: 30%;
}
}
@media only screen and (max-width:640px) {
}
/**
* 编辑页面
*/
ul.plugins-images-view li {
width: 100%;
height: auto;
}

View File

@ -0,0 +1,41 @@
@media only screen and (min-width:640px) {
.plugins-answers .answers-top, .plugins-answers .answers-middle-banner, .plugins-answers .answers-goods {
margin-top: 10px;
overflow: hidden;
}
.plugins-answers .answers-slider, .plugins-answers .answers-middle-list, .plugins-answers .answers-goods .am-gallery {
padding: 0;
}
.plugins-answers .answers-sidebar, .plugins-answers .answers-goods {
padding-right: 0;
}
.plugins-answers .am-list-news-default {
margin: 0;
}
.plugins-answers .answers-sidebar .am-list-news-hd, .plugins-answers .answers-goods .am-list-news-hd {
padding-top: 0;
}
.plugins-answers .answers-middle-list .am-list-news-hd {
padding-top: 10px;
}
.plugins-answers .am-list-news-hd {
font-weight: 500;
}
.plugins-answers .answers-sidebar .am-list-news-bd .am-list {
margin-bottom: 10px;
}
.plugins-answers .answers-goods .am-list-news-hd {
padding-bottom: 5px;
}
.am-gallery-bordered > li:nth-of-type(2n + 1) {
padding-left: 0;
}
.am-gallery-bordered > li:nth-of-type(2n + 2) {
padding-right: 0;
}
}
@media only screen and (max-width:640px) {
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1 @@

View File

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

View File

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

View File

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 190 KiB

After

Width:  |  Height:  |  Size: 190 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 119 KiB

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

View File

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 169 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB

View File

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 165 KiB

View File

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 126 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Some files were not shown because too many files have changed in this diff Show More