完成导航管理,可用于小程序导航,轮播图

This commit is contained in:
2020-04-17 15:26:51 +08:00
parent d14a506dd4
commit 41308be2a4
8 changed files with 675 additions and 0 deletions

View File

@@ -0,0 +1,129 @@
<?php
declare(strict_types=1);
namespace app\admin\controller;
use app\model\Nav as ModelNav;
use think\facade\View;
use think\Request;
class Nav extends Common
{
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index(Request $request)
{
//
$type = $request->param('type',1);
$list = ModelNav::order('sort asc')->order('id asc')->where('type',$type)->paginate();
View::assign('type', $type);
View::assign('list', $list);
return View::fetch();
}
/**
* 显示创建资源表单页.
*
* @return \think\Response
*/
public function create()
{
//
return View::fetch();
}
/**
* 保存新建的资源
*
* @param \think\Request $request
* @return \think\Response
*/
public function save(Request $request)
{
//
$post_data = $request->post();
ModelNav::create($post_data);
return $this->success('添加成功', url('index',[
'type'=>$request->param('type',1),
'show_img'=>$request->param('show_img'),
'show_target'=>$request->param('show_target'),
'show_xcx'=>$request->param('show_xcx'),
]));
}
/**
* 显示指定的资源
*
* @param int $id
* @return \think\Response
*/
public function read($id)
{
//
}
/**
* 显示编辑资源表单页.
*
* @param int $id
* @return \think\Response
*/
public function edit($id)
{
//
$model_nav = ModelNav::find($id);
View::assign('nav', $model_nav);
return View::fetch();
}
/**
* 保存更新的资源
*
* @param \think\Request $request
* @param int $id
* @return \think\Response
*/
public function update(Request $request, $id)
{
//
$post_data = $request->post();
$model_nav = ModelNav::find($id);
$model_nav->save($post_data);
return $this->success('保存成功', url('index',[
'type'=>$model_nav->getData('type'),
'show_img'=>$request->param('show_img'),
'show_target'=>$request->param('show_target'),
'show_xcx'=>$request->param('show_xcx'),
]));
}
/**
* 删除指定资源
*
* @param int $id
* @return \think\Response
*/
public function delete($id)
{
//
ModelNav::destroy($id);
return $this->success("删除成功");
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace app\common;
use think\migration\db\Column;
class ColumnFormat
{
public static function timestamp($name){
return Column::make($name,'integer')
->setLimit(10)
->setSigned(false);
}
public static function loadDeleteTime(){
return Column::make('delete_time','integer')
->setLimit(10)
->setSigned(false);
}
}

18
app/model/Nav.php Normal file
View File

@@ -0,0 +1,18 @@
<?php
declare (strict_types = 1);
namespace app\model;
use think\Model;
/**
* @mixin think\Model
*/
class Nav extends Model
{
//
public function getImgAttr($value)
{
return get_source_link($value);
}
}

View File

@@ -0,0 +1,51 @@
<?php
use app\admin\controller\Common;
use app\common\ColumnFormat;
use think\migration\Migrator;
use think\migration\db\Column;
class CreateTableNav extends Migrator
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* addForeignKey
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change()
{
$table = $this->table('nav',['comment'=>'多功能导航,可兼容多种类型','sign'=>false]);
$table->addColumn('title','string',['limit'=>100,'comment'=>'名称标题']);
$table->addColumn(Column::make('sort','integer')->setSigned(false)->setComment('排序,越小越靠前'));
$table->addColumn(Column::make('create_time','integer')->setSigned(false)->setLimit(10)->setComment('添加时间'));
$table->addColumn(ColumnFormat::timestamp('update_time'));
$table->addColumn(ColumnFormat::timestamp('delete_time'));
$table->addColumn(Column::make('type','integer')->setLimit(10)->setSigned(false)->setComment('类型,用于区分业务场景:1:PC导航,2:PC轮播图,3:PC友情链接'));
$table->addColumn(Column::make('img','string')->setLimit(100)->setComment('图片'));
$table->addColumn(Column::make('target','string')->setLimit(10)->setSigned(false)->setComment('网页链接打开对象,_BLANK,_SELF,iframe_name'));
$table->addColumn(Column::make('xcx_type','integer')->setLimit(10)->setComment('小程序打开方式,1:小程序导航页面,2:普通页面,3:web-view,4:其他小程序,5:电话'));
$table->addColumn(Column::make('value','string')->setLimit(100)->setComment('对象值,有可能是网页链接,小程序导航页面路径,小程序普通页面路径,电话'));
$table->addColumn(Column::make('xcx_appid','string')->setLimit(30)->setComment('小程序appid,目标是其他小程序是有效'));
$table->addIndex('delete_time');
$table->addIndex('type');
$table->addIndex('sort');
$table->create();
}
}

View File

@@ -12,5 +12,33 @@
<a class="" href="{:url('admin/System/agreement')}">用户协议管理</a>
</li>
</ul>
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item layui-nav-itemed">
<a class="" href="javascript:;">PC管理</a>
<dl class="layui-nav-child">
<dd class="left-nav-item" data-name="pc-nav-1"><a
href="{:url('Nav/index',['type'=>1,'show_target'=>1])}">PC导航管理</a></dd>
<dd class="left-nav-item" data-name="pc-nav-2"><a
href="{:url('Nav/index',['type'=>2,'show_target'=>1])}">友情链接管理</a></dd>
<dd class="left-nav-item" data-name="pc-nav-3"><a
href="{:url('Nav/index',['type'=>3,'show_img'=>1,'show_target'=>1])}">PC轮播图管理</a></dd>
</dl>
</li>
</ul>
<ul class="layui-nav layui-nav-tree" lay-filter="test">
<li class="layui-nav-item layui-nav-itemed">
<a class="" href="javascript:;">小程序</a>
<dl class="layui-nav-child">
<dd class="left-nav-item" data-name="pc-nav-4"><a
href="{:url('Nav/index',['type'=>4,'show_img'=>1,'show_xcx'=>1])}">首页导航管理</a></dd>
<dd class="left-nav-item" data-name="pc-nav-5"><a
href="{:url('Nav/index',['type'=>5,'show_img'=>1,'show_xcx'=>1])}">轮播图管理</a></dd>
</dl>
</li>
</ul>
</div>
</div>

159
view/admin/nav/create.html Normal file
View File

@@ -0,0 +1,159 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>PC导航管理</title>
{include file="common/_require"}
<script>
var currentHeaderNavItem = 'System';
var currentLeftNavItem = 'pc-nav-{$Request.param.type|default="1"}';
</script>
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
{include file="common/_header"}
{include file="common/left_system"}
<div class="layui-body">
<div style="padding:15px">
<div class="main-header">
<span class="layui-breadcrumb">
<a>首页</a>
<a><cite>系统信息</cite></a>
</span>
</div>
<div class="main-container">
<div class="layui-row">
<div class="layui-col-md6">
<fieldset class="layui-elem-field">
<legend>添加</legend>
<div class="layui-field-box">
<form action="{:url('save')}" method="POST" class="layui-form">
<input type="hidden" name="type" value="{$Request.param.type}">
<input type="hidden" name="show_img" value="{$Request.param.show_img|default='0'}">
<input type="hidden" name="show_target" value="{$Request.param.show_target|default='0'}">
<input type="hidden" name="show_xcx" value="{$Request.param.show_xcx|default='0'}">
<div class="layui-form-item">
<div class="layui-form-label">标题</div>
<div class="layui-input-block">
<input type="text" name="title" required lay-verify="required" value="" class="layui-input">
</div>
</div>
{if $Request.param.show_img == 1 }
<div class="layui-form-item">
<div class="layui-form-label">图片</div>
<div class="layui-input-block">
<input type="hidden" name="img">
<div>
<div class="layui-btn upload">上传</div>
</div>
<div>
<img class="nav-img" src="" style="display: none;max-width: 200px;max-height: 200px;" alt="">
</div>
</div>
</div>
{/if}
{if $Request.param.show_target == 1 }
<div class="layui-form-item">
<div class="layui-form-label">打开方式</div>
<div class="layui-input-block">
<input type="radio" name="target" value="1" title="当前页面" checked>
<input type="radio" name="target" value="2" title="新页面">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">链接</div>
<div class="layui-input-block">
<input type="text" name="value" required lay-verify="required" value="" class="layui-input">
</div>
</div>
{/if}
{if $Request.param.show_xcx == 1 }
<div class="layui-form-item">
<div class="layui-form-label">小程序打开类型</div>
<div class="layui-input-block">
<input type="radio" name="xcx_type" value="1" title="导航页面">
<input type="radio" name="xcx_type" value="2" title="普通页面">
<input type="radio" name="xcx_type" value="3" title="web-view">
<input type="radio" name="xcx_type" value="4" title="其他小程序">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">小程序页面</div>
<div class="layui-input-block">
<input type="text" name="value" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">小程序appid</div>
<div class="layui-input-block">
<input type="text" name="xcx_appid" value="" class="layui-input">
<div class="layui-form-mid layui-word-aux">小程序打开类型为其他小程序时生效</div>
</div>
</div>
{/if}
<div class="layui-form-item">
<div class="layui-form-label">排序</div>
<div class="layui-input-block">
<input type="number" name="sort" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid" type="submit">创建</button>
</div>
</form>
</div>
</fieldset>
</div>
</div>
</div>
</div>
{include file="common/_footer"}
</div>
<script>
layui.use(['upload','form'], function () {
var upload = layui.upload
var uploadTitleImg = upload.render({
elem: '.upload',
url: '{:url("api/Files/save")}',
data: {
type: 6,
dir: 'nav'
},
accept: 'images',
acceptMime: 'image/jpg,image/png,image/gif',
done: function (result) {
if (result.code == 0) {
layer.msg('上传成功');
$('input[name="img"]').val(result.data.save_name);
$('.nav-img').attr('src', result.data.src).show();
} else {
layer.msg(result.msg)
}
}
})
})
</script>
</body>
</html>

164
view/admin/nav/edit.html Normal file
View File

@@ -0,0 +1,164 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>PC导航管理</title>
{include file="common/_require"}
<script>
var currentHeaderNavItem = 'System';
var currentLeftNavItem = 'pc-nav-{$nav.type|default="1"}';
</script>
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
{include file="common/_header"}
{include file="common/left_system"}
<div class="layui-body">
<div style="padding:15px">
<div class="main-header">
<span class="layui-breadcrumb">
<a>首页</a>
<a><cite>系统信息</cite></a>
</span>
</div>
<div class="main-container">
<div class="layui-row">
<div class="layui-col-md6">
<fieldset class="layui-elem-field">
<legend>编辑</legend>
<div class="layui-field-box">
<form action="{:url('update')}" method="POST" class="layui-form" lay-filter="*">
<input type="hidden" name="show_img" value="{$Request.param.show_img}">
<input type="hidden" name="show_target" value="{$Request.param.show_target}">
<input type="hidden" name="id" value="{$nav.id}">
<div class="layui-form-item">
<div class="layui-form-label">标题</div>
<div class="layui-input-block">
<input type="text" name="title" required lay-verify="required" value="{$nav.title}"
class="layui-input">
</div>
</div>
{if $Request.param.show_img == 1 }
<div class="layui-form-item">
<div class="layui-form-label">图片</div>
<div class="layui-input-block">
<input type="hidden" name="img" value="{$nav->getData('img')}">
<div>
<div class="layui-btn upload">上传</div>
</div>
<div>
<img class="nav-img" src="{$nav.img}" style="max-width: 200px;max-height: 200px;" alt="">
</div>
</div>
</div>
{/if}
{if $Request.param.show_target == 1 }
<div class="layui-form-item">
<div class="layui-form-label">打开方式</div>
<div class="layui-input-block">
<input type="radio" name="target" value="_self" title="当前页面">
<input type="radio" name="target" value="_blank" title="新页面">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">链接</div>
<div class="layui-input-block">
<input type="text" name="value" required lay-verify="required" value="{$nav.value}"
class="layui-input">
</div>
</div>
{/if}
{if $Request.param.show_xcx == 1 }
<div class="layui-form-item">
<div class="layui-form-label">小程序打开类型</div>
<div class="layui-input-block">
<input type="radio" name="xcx_type" value="1" title="导航页面">
<input type="radio" name="xcx_type" value="2" title="普通页面">
<input type="radio" name="xcx_type" value="3" title="web-view">
<input type="radio" name="xcx_type" value="4" title="其他小程序">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">小程序页面</div>
<div class="layui-input-block">
<input type="text" name="value" value="{$nav.value}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">小程序appid</div>
<div class="layui-input-block">
<input type="text" name="xcx_appid" value="{$nav.xcx_appid}" class="layui-input">
<div class="layui-form-mid layui-word-aux">小程序打开类型为其他小程序时生效</div>
</div>
</div>
{/if}
<div class="layui-form-item">
<div class="layui-form-label">排序</div>
<div class="layui-input-block">
<input type="number" name="sort" value="{$nav.sort}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid" type="submit">保存</button>
</div>
</form>
</div>
</fieldset>
</div>
</div>
</div>
</div>
{include file="common/_footer"}
</div>
<script>
layui.use(['upload','form'], function () {
var upload = layui.upload
var form = layui.form
form.val('*',{
target:'{$nav->getData("target")}',
xcx_type:'{$nav->getData("xcx_type")}',
})
var uploadTitleImg = upload.render({
elem: '.upload',
url: '{:url("api/Files/save")}',
data: {
type: 6,
dir: 'nav'
},
accept: 'images',
acceptMime: 'image/jpg,image/png,image/gif',
done: function (result) {
if (result.code == 0) {
layer.msg('上传成功');
$('input[name="img"]').val(result.data.save_name);
$('.nav-img').attr('src', result.data.src).show();
} else {
layer.msg(result.msg)
}
}
})
})
</script>
</body>
</html>

108
view/admin/nav/index.html Normal file
View File

@@ -0,0 +1,108 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>PC导航管理</title>
{include file="common/_require"}
<script>
var currentHeaderNavItem = 'System';
var currentLeftNavItem = 'pc-nav-{$Request.param.type|default="1"}';
</script>
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
{include file="common/_header"}
{include file="common/left_system"}
<div class="layui-body">
<div style="padding:15px">
<div class="main-header">
<span class="layui-breadcrumb">
<a>首页</a>
<a><cite>系统信息</cite></a>
</span>
</div>
<div class="main-container">
<div>
<a href="{:url('create',['type'=>$type,'show_img'=>$Request.param.show_img,'show_target'=>$Request.param.show_target,'show_xcx'=>$Request.param.show_xcx])}"
class="layui-btn">添加</a>
</div>
<div>
<table class="layui-table" lay-skin="line">
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>链接</th>
<th>排序</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{volist name='list' id='vo'}
<tr class="item" data-id="{$vo.id}">
<td>{$vo.id}</td>
<td>{$vo.title}</td>
<td>{$vo.value}</td>
<td>{$vo.sort}</td>
<td>
<div class="layui-btn-container">
<a class="layui-btn layui-btn-sm"
href="{:url('edit',['id'=>$vo.id,'show_img'=>$Request.param.show_img,'show_target'=>$Request.param.show_target,'show_xcx'=>$Request.param.show_xcx])}">编辑</a>
<div class="layui-btn layui-btn-sm delete">删除</div>
</div>
</td>
</tr>
{/volist}
{if condition="count($list) == 0" }
<tr>
<td colspan="7">暂无数据</td>
</tr>
{/if}
</tbody>
</table>
<div>
{$list|raw}
</div>
</div>
</div>
</div>
</div>
{include file="common/_footer"}
</div>
<script>
$('.delete').click(function () {
var item = this;
layer.confirm('确定要删除吗?', function () {
$.get('{:url("delete")}', {
id: $(item).parents('.item').data('id')
}, function (result) {
layer.msg('删除成功');
$(item).parents('.item').remove();
})
})
})
</script>
</body>
</html>