Compare commits
33 Commits
cssupdate
...
0265cb0629
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0265cb0629 | ||
|
|
68d66b2925 | ||
|
|
601403bf3e | ||
|
|
bbe2197b38 | ||
|
|
ee955a3674 | ||
|
|
e45df84312 | ||
|
|
4e0891da97 | ||
|
|
f9b895732e | ||
|
|
e72ecd55f4 | ||
|
|
558b418d18 | ||
|
|
78cbc5de6e | ||
|
|
f7b610df72 | ||
|
|
b1522a365b | ||
|
|
48906ec9cd | ||
|
|
b57cb8dfd6 | ||
|
|
7d70c55557 | ||
|
|
4fdda8435d | ||
|
|
7a96809bfe | ||
|
|
62b3e2798f | ||
|
|
bfeac736ea | ||
|
|
74ea50b7e4 | ||
|
|
8a617c06e9 | ||
|
|
efa8acaf12 | ||
|
|
d3ff726e90 | ||
|
|
7880c18e85 | ||
|
|
e80ba5ac7d | ||
| 20b5fd901b | |||
| e38c00f59c | |||
| a18706f7d4 | |||
| 4ff2ee4a76 | |||
| 2ca708fd4a | |||
| 29761f551d | |||
| fdb75e4888 |
42
app/command/OpenApiMgr/AddClient.php
Normal file
42
app/command/OpenApiMgr/AddClient.php
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
declare (strict_types = 1);
|
||||||
|
|
||||||
|
namespace app\command\OpenApiMgr;
|
||||||
|
|
||||||
|
use oauth\OAuthStorage;
|
||||||
|
use think\console\Command;
|
||||||
|
use think\console\Input;
|
||||||
|
use think\console\input\Argument;
|
||||||
|
use think\console\input\Option;
|
||||||
|
use think\console\Output;
|
||||||
|
|
||||||
|
class AddClient extends Command
|
||||||
|
{
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
// 指令配置
|
||||||
|
$this->setName('OpenApiMgr:AddClient')
|
||||||
|
->addArgument('salt', Argument::OPTIONAL, "开放API的client_secret密钥的盐值")
|
||||||
|
->setDescription('开放API的client管理');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(Input $input, Output $output)
|
||||||
|
{
|
||||||
|
$salt = $input->getArgument('salt');
|
||||||
|
$salt = empty($salt) ? null : trim($salt);
|
||||||
|
|
||||||
|
// 指令输出
|
||||||
|
$oauth = new OAuthStorage($salt);
|
||||||
|
|
||||||
|
$client_id = random_str(13, 'all', 0);
|
||||||
|
$client_secret = random_str(32, 'all', 0);
|
||||||
|
|
||||||
|
$ok = $oauth->addClient($client_id, $client_secret, null);
|
||||||
|
if (!$ok) {
|
||||||
|
$output->writeln("添加失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$output->writeln("添加成功:\nClientID: {$client_id}\nClientSecret: {$client_secret}\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -246,20 +246,45 @@ class TopicNas extends Common
|
|||||||
|
|
||||||
// 获取文章分类及文章数据
|
// 获取文章分类及文章数据
|
||||||
$parent = ArticleCategoryModel::uniqueLabel('CATEGORY_681182e0a4529')->language($this->lang_id)->value('id');
|
$parent = ArticleCategoryModel::uniqueLabel('CATEGORY_681182e0a4529')->language($this->lang_id)->value('id');
|
||||||
|
$parent_two = ArticleCategoryModel::parent($parent)->language($this->lang_id)->column('id');//二级分类id
|
||||||
|
array_push($parent_two,$parent);
|
||||||
$article_categorys = ArticleCategoryModel::with(['article' => function ($query) {
|
$article_categorys = ArticleCategoryModel::with(['article' => function ($query) {
|
||||||
$query->field(['id', 'title', 'category_id'])->order(['sort' => 'asc', 'id' => 'desc']);
|
$query->field(['id', 'title', 'category_id'])->order(['sort' => 'asc', 'id' => 'desc']);
|
||||||
}])
|
}])
|
||||||
->field([
|
->field([
|
||||||
'id',
|
'id',
|
||||||
|
'pid',
|
||||||
'name',
|
'name',
|
||||||
'icon'
|
'icon'
|
||||||
])
|
])
|
||||||
->language($this->lang_id)
|
->language($this->lang_id)
|
||||||
->parent($parent)
|
// ->parent($parent)
|
||||||
|
->parentChild($parent_two)
|
||||||
->isShow(true)
|
->isShow(true)
|
||||||
->order(['sort' => 'asc', 'id' => 'desc'])
|
->order(['sort' => 'asc', 'id' => 'desc'])
|
||||||
->select();
|
->select();
|
||||||
View::assign('article_categorys', $article_categorys);
|
// dump($article_categorys->toArray());exit;
|
||||||
|
//查询三级分类
|
||||||
|
$article_categorys_new = [];
|
||||||
|
$article_categorys_two = [];
|
||||||
|
if (!$article_categorys->isEmpty()) {
|
||||||
|
foreach ($article_categorys->toArray() as $kk=>$vv) {
|
||||||
|
if ( $parent == $vv['pid'] ) {
|
||||||
|
array_push($article_categorys_new,$vv);
|
||||||
|
} else {
|
||||||
|
$article_categorys_two[$vv['pid']][] = $vv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( !empty($article_categorys_two) ) {
|
||||||
|
foreach ($article_categorys_new as &$vvv) {
|
||||||
|
$vvv['child'] = isset($article_categorys_two[$vvv['id']])?$article_categorys_two[$vvv['id']]:'';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// dump($article_categorys_new);exit;
|
||||||
|
// dump($article_categorys_two);exit;
|
||||||
|
|
||||||
|
View::assign('article_categorys', $article_categorys_new);
|
||||||
|
|
||||||
return View::fetch('help_detail');
|
return View::fetch('help_detail');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,17 @@ class ArticleCategoryModel extends ArticleCategoryBaseModel
|
|||||||
$query->where('pid', '=', $parent);
|
$query->where('pid', '=', $parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 所属上级分类范围查询
|
||||||
|
public function scopeParentChild($query, $parent)
|
||||||
|
{
|
||||||
|
if (is_array($parent)) {
|
||||||
|
$query->where('pid', 'IN', $parent);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$query->where('pid', '=', $parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 所属子分类范围查询
|
// 所属子分类范围查询
|
||||||
public function scopeChild($query, $id, $merge_self = false)
|
public function scopeChild($query, $id, $merge_self = false)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -57,6 +57,38 @@
|
|||||||
<div class="nars-hlpdt-ml">
|
<div class="nars-hlpdt-ml">
|
||||||
{notempty name="article_categorys"}
|
{notempty name="article_categorys"}
|
||||||
<div class="nav-tree">
|
<div class="nav-tree">
|
||||||
|
|
||||||
|
<!-- start 三级菜单测试用例 可删-->
|
||||||
|
<div class="categoryhelp">
|
||||||
|
<div class="categoryhelp-title">
|
||||||
|
<div><img src="__IMAGES__/nars-jt.png" class="arrow">
|
||||||
|
</div>
|
||||||
|
<span>初次使用</span>
|
||||||
|
</div>
|
||||||
|
<ul class="sub-list">
|
||||||
|
<li class="two-mues">
|
||||||
|
<a href="/mobile/tops_nas/helper_detail/id/1638.html" class="two-a">
|
||||||
|
<div><img src="__IMAGES__/nars-jt.png"
|
||||||
|
class="arrow">
|
||||||
|
</div>
|
||||||
|
<span>我是2级</span>
|
||||||
|
</a>
|
||||||
|
<ul class="thress-mues">
|
||||||
|
<li>
|
||||||
|
<a href="/mobile/tops_nas/helper_detail/id/1635.html"
|
||||||
|
style="margin-left:18%;padding: 0.4rem;">我是三级</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/mobile/tops_nas/helper_detail/id/1635.html">如何将我的NAS设备分享给他人使用?</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/mobile/tops_nas/helper_detail/id/1639.html">设备安装中常见的问题</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<!-- end 三级菜单测试用例 可删-->
|
||||||
{volist name="article_categorys" id="ac" key="idx"}
|
{volist name="article_categorys" id="ac" key="idx"}
|
||||||
<div class="categoryhelp">
|
<div class="categoryhelp">
|
||||||
<div class="categoryhelp-title">
|
<div class="categoryhelp-title">
|
||||||
@@ -78,6 +110,9 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{/volist}
|
{/volist}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{/notempty}
|
{/notempty}
|
||||||
</div>
|
</div>
|
||||||
@@ -128,6 +163,17 @@
|
|||||||
$(this).next('.sub-list').slideToggle();
|
$(this).next('.sub-list').slideToggle();
|
||||||
$(this).find('.arrow').toggleClass('rotate');
|
$(this).find('.arrow').toggleClass('rotate');
|
||||||
});
|
});
|
||||||
|
//分类二三级交互
|
||||||
|
$('.two-a').click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation(); // 阻止事件冒泡
|
||||||
|
|
||||||
|
// 切换当前二级菜单的箭头方向
|
||||||
|
$(this).find('.arrow').toggleClass('rotate');
|
||||||
|
|
||||||
|
// 切换对应的三级菜单显示/隐藏
|
||||||
|
$(this).siblings('.thress-mues').slideToggle();
|
||||||
|
});
|
||||||
// 点击顶部搜索图标-点击取消关闭
|
// 点击顶部搜索图标-点击取消关闭
|
||||||
$('#ssico').click(function () {
|
$('#ssico').click(function () {
|
||||||
$('.nhlpapp-pagescate').hide();
|
$('.nhlpapp-pagescate').hide();
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
{extend name="public/nas_base" /}
|
{extend name="public/nas_base" /}
|
||||||
{block name="title"}
|
{block name="title"}
|
||||||
{notempty name="article.seo_title"}<title>{$article.seo_title}</title>{else /}{__BLOCK__}{/notempty}
|
{notempty name="article.seo_title"}<title>{$article.seo_title}</title>{else /}{__BLOCK__}{/notempty}
|
||||||
{/block}
|
{/block}
|
||||||
{block name="seo"}
|
{block name="seo"}
|
||||||
{notempty name="article.seo_keywords"}
|
{notempty name="article.seo_keywords"}
|
||||||
<meta name="keywords" content="{$article.seo_keywords}" />
|
<meta name="keywords" content="{$article.seo_keywords}" />
|
||||||
<meta name="description" content="{$article.seo_desc}" />
|
<meta name="description" content="{$article.seo_desc}" />
|
||||||
{else /}
|
{else /}
|
||||||
{__BLOCK__}
|
{__BLOCK__}
|
||||||
{/notempty}
|
{/notempty}
|
||||||
{/block}
|
{/block}
|
||||||
{block name="style"}
|
{block name="style"}
|
||||||
<link rel="stylesheet" href="__CSS__/topic_nas_help-detail.css"/>
|
<link rel="stylesheet" href="__CSS__/topic_nas_help-detail.css" />
|
||||||
{/block}
|
{/block}
|
||||||
{block name="main"}
|
{block name="main"}
|
||||||
<div class="orico_Page_index">
|
<div class="orico_Page_index">
|
||||||
@@ -32,28 +32,63 @@
|
|||||||
<div class="nars-hlpdt-ml">
|
<div class="nars-hlpdt-ml">
|
||||||
{notempty name="article_categorys"}
|
{notempty name="article_categorys"}
|
||||||
<div class="nav-tree">
|
<div class="nav-tree">
|
||||||
|
|
||||||
|
<!-- start 三级菜单的测试代码 可删-->
|
||||||
{volist name="article_categorys" id="ac"}
|
{volist name="article_categorys" id="ac"}
|
||||||
<div class="category">
|
<div class="category">
|
||||||
|
<!-- 一级 -->
|
||||||
<div class="category-title">
|
<div class="category-title">
|
||||||
<div class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}">
|
<div class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}"><img src="__IMAGES__/nas-jt.png" class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}" /></div>
|
||||||
<img src="__IMAGES__/nas-jt.png" class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}" />
|
|
||||||
</div>
|
|
||||||
<span>{$ac.name}</span>
|
<span>{$ac.name}</span>
|
||||||
</div>
|
</div>
|
||||||
<ul class="sub-list" {if condition='$ac.id == $Request.get.cid'}style="display: block;"{/if}>
|
<!-- 二级-->
|
||||||
{volist name="ac.article" id="ar"}
|
<ul class="sub-list" {if condition='$ac.id == $Request.get.cid' }style="display: block;" {/if}>
|
||||||
<li>
|
{volist name="ac.child" id="ad"}
|
||||||
<a
|
<li class="two-mues">
|
||||||
href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id, 'id' => $ar.id])}"
|
<a href="#" class="two-a">
|
||||||
{eq name="ar.id" value="$Request.get.id"}class="active"{/eq}
|
<div class="arrow {if condition='$ad.id == $Request.get.cid'}rotate{/if}"><img src="__IMAGES__/nas-jt.png" class="arrow" /></div>
|
||||||
>
|
<span>{$ad.name}</span>
|
||||||
{$ar.title}
|
|
||||||
</a>
|
</a>
|
||||||
|
<ul class="thress-mues">
|
||||||
|
{volist name="ad.article" id="ae"}
|
||||||
|
<li><a href="{:url('/index/topic/nas/help_detail', ['cid' => $ad.id, 'id' => $ae.id])}" style="padding-top: 6px;padding-left: 30px;" {eq
|
||||||
|
name="ae.id" value="$Request.get.id" }class="active" {/eq}>{$ae.title}</a></li>
|
||||||
|
{/volist}
|
||||||
|
</ul>
|
||||||
|
<!-- 三级-->
|
||||||
</li>
|
</li>
|
||||||
{/volist}
|
{/volist}
|
||||||
|
{volist name="ac.article" id="ar"}
|
||||||
|
<li><a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id, 'id' => $ar.id])}" style="padding-top: 6px;" {eq
|
||||||
|
name="ar.id" value="$Request.get.id" }class="active" {/eq}>{$ar.title}</a></li>
|
||||||
|
{/volist}
|
||||||
|
<!-- <li><a href="#">APP无法下载/下载失败怎么办?</a></li>-->
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{/volist}
|
{/volist}
|
||||||
|
<!-- end 三级菜单的测试代码 可删-->
|
||||||
|
|
||||||
|
<!-- {volist name="article_categorys" id="ac"}-->
|
||||||
|
<!-- <div class="category">-->
|
||||||
|
<!-- <div class="category-title">-->
|
||||||
|
<!-- <div class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}">-->
|
||||||
|
<!-- <img src="__IMAGES__/nas-jt.png"-->
|
||||||
|
<!-- class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}" />-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <span>{$ac.name}</span>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <ul class="sub-list" {if condition='$ac.id == $Request.get.cid' }style="display: block;" {/if}>-->
|
||||||
|
<!-- {volist name="ac.article" id="ar"}-->
|
||||||
|
<!-- <li>-->
|
||||||
|
<!-- <a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id, 'id' => $ar.id])}" {eq-->
|
||||||
|
<!-- name="ar.id" value="$Request.get.id" }class="active" {/eq}>-->
|
||||||
|
<!-- {$ar.title}-->
|
||||||
|
<!-- </a>-->
|
||||||
|
<!-- </li>-->
|
||||||
|
<!-- {/volist}-->
|
||||||
|
<!-- </ul>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- {/volist}-->
|
||||||
</div>
|
</div>
|
||||||
{/notempty}
|
{/notempty}
|
||||||
</div>
|
</div>
|
||||||
@@ -75,10 +110,22 @@
|
|||||||
{block name="script"}
|
{block name="script"}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
// 一级菜单点击事件
|
||||||
$('.category-title').click(function () {
|
$('.category-title').click(function () {
|
||||||
$(this).next('.sub-list').slideToggle();
|
$(this).next('.sub-list').slideToggle();
|
||||||
$(this).find('.arrow').toggleClass('rotate');
|
$(this).find('.arrow').toggleClass('rotate');
|
||||||
});
|
});
|
||||||
|
// 二级菜单点击事件
|
||||||
|
$('.two-a').click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation(); // 阻止事件冒泡
|
||||||
|
|
||||||
|
// 切换当前二级菜单的箭头方向
|
||||||
|
$(this).find('.arrow').toggleClass('rotate');
|
||||||
|
|
||||||
|
// 切换对应的三级菜单显示/隐藏
|
||||||
|
$(this).siblings('.thress-mues').slideToggle();
|
||||||
|
});
|
||||||
// 搜索
|
// 搜索
|
||||||
$(document).on('click', function (e) {
|
$(document).on('click', function (e) {
|
||||||
var target = $(e.target);
|
var target = $(e.target);
|
||||||
|
|||||||
@@ -2,9 +2,12 @@
|
|||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
// | 控制台配置
|
// | 控制台配置
|
||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
// 指令定义
|
// 指令定义
|
||||||
'commands' => [
|
'commands' => [
|
||||||
'data:migrate' => \app\command\DataMigration::class,
|
'data:migrate' => \app\command\DataMigration::class,
|
||||||
|
'openapi:addclient' => \app\command\OpenApiMgr\AddClient::class,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -220,3 +220,31 @@
|
|||||||
color: #1f2635;
|
color: #1f2635;
|
||||||
border-bottom: 1px solid #1f2635;
|
border-bottom: 1px solid #1f2635;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*9.18 添加三级样式*/
|
||||||
|
|
||||||
|
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .two-mues {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .two-mues .two-a {
|
||||||
|
position: relative;
|
||||||
|
padding-top: 6px;
|
||||||
|
display: flex;
|
||||||
|
font-size: 0.95rem !important;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .two-mues .two-a:hover {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .thress-mues {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .thress-mues a {
|
||||||
|
padding-top: 0.375rem;
|
||||||
|
padding-left: 1.875rem;
|
||||||
|
}
|
||||||
@@ -215,7 +215,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.narshelpdetailPc .nars-help-content .nars-hlpdt-mr #title-list .tt {
|
.narshelpdetailPc .nars-help-content .nars-hlpdt-mr #title-list .tt {
|
||||||
font-size: 14px;
|
font-size: 15px;
|
||||||
padding-top: 33px;
|
padding-top: 33px;
|
||||||
padding-bottom: 1rem;
|
padding-bottom: 1rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -258,3 +258,27 @@
|
|||||||
/* 将所有属性设置为初始值 */
|
/* 将所有属性设置为初始值 */
|
||||||
/* 或者使用 all: revert; 恢复到浏览器默认样式,但该属性兼容性不如 initial */
|
/* 或者使用 all: revert; 恢复到浏览器默认样式,但该属性兼容性不如 initial */
|
||||||
}
|
}
|
||||||
|
/*9.18 添加三级样式*/
|
||||||
|
|
||||||
|
.narshelpdetailPc .nars-help-content .nars-hlpdt-ml .sub-list .two-mues{
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
}
|
||||||
|
.narshelpdetailPc .nars-help-content .nars-hlpdt-ml .sub-list .two-mues .two-a{
|
||||||
|
position: relative;
|
||||||
|
padding-top: 6px;
|
||||||
|
padding-bottom: 0.375rem;
|
||||||
|
display: flex;
|
||||||
|
font-size: 14px !important;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
.narshelpdetailPc .nars-help-content .nars-hlpdt-ml .sub-list .two-mues .two-a:hover{
|
||||||
|
border-bottom:none;
|
||||||
|
}
|
||||||
|
.narshelpdetailPc .nars-help-content .nars-hlpdt-ml .sub-list .thress-mues{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.narshelpdetailPc .nars-help-content .nars-hlpdt-ml .sub-list .thress-mues .thress-mues a{
|
||||||
|
padding-top: 0.375rem;
|
||||||
|
padding-left: 1.875rem;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user