Compare commits
61 Commits
cssupdate
...
d3268334ea
| Author | SHA1 | Date | |
|---|---|---|---|
| d3268334ea | |||
| e5228429ec | |||
| fdb673d174 | |||
| 6daac314dd | |||
|
|
9d8e22d270 | ||
|
|
f154f3ddf6 | ||
|
|
2073a27ef7 | ||
|
|
e301fc7e94 | ||
|
|
f9251d944e | ||
|
|
1e6187801d | ||
|
|
346dcebba3 | ||
| ab7b23e5d1 | |||
| 325221bd67 | |||
|
|
721e91dc31 | ||
|
|
12e51c6f46 | ||
|
|
8ba9006173 | ||
|
|
a7d413871b | ||
|
|
ce6a882c17 | ||
|
|
7e7cfeacbc | ||
|
|
e1961d2a83 | ||
|
|
d313617e2b | ||
|
|
f0c82c848f | ||
|
|
f606dc64a5 | ||
|
|
39dc3c4e1a | ||
|
|
52b265f36e | ||
|
|
5f9fb74696 | ||
|
|
b251c78b2f | ||
|
|
2e1c83d46d | ||
|
|
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 |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -7,11 +7,18 @@ Thumbs.db
|
|||||||
.env.dev
|
.env.dev
|
||||||
.env.local
|
.env.local
|
||||||
.env.prod
|
.env.prod
|
||||||
|
.htaccess
|
||||||
|
.user.ini
|
||||||
|
404.html
|
||||||
|
index.html
|
||||||
|
|
||||||
public/dist
|
public/dist*
|
||||||
public/opendoc
|
public/opendoc
|
||||||
|
public/logo.png
|
||||||
|
public/.well-known
|
||||||
/.idea
|
/.idea
|
||||||
/.vscode
|
/.vscode
|
||||||
|
/.zed
|
||||||
/vendor
|
/vendor
|
||||||
/.settings
|
/.settings
|
||||||
/.buildpath
|
/.buildpath
|
||||||
|
|||||||
208
LICENSE
Normal file
208
LICENSE
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
Apache License
|
||||||
|
|
||||||
|
Version 2.0, January 2004
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION,
|
||||||
|
AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction, and distribution
|
||||||
|
as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by the copyright
|
||||||
|
owner that is granting the License.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all other entities
|
||||||
|
that control, are controlled by, or are under common control with that entity.
|
||||||
|
For the purposes of this definition, "control" means (i) the power, direct
|
||||||
|
or indirect, to cause the direction or management of such entity, whether
|
||||||
|
by contract or otherwise, or (ii) ownership of fifty percent (50%) or more
|
||||||
|
of the outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions
|
||||||
|
granted by this License.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications, including
|
||||||
|
but not limited to software source code, documentation source, and configuration
|
||||||
|
files.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical transformation
|
||||||
|
or translation of a Source form, including but not limited to compiled object
|
||||||
|
code, generated documentation, and conversions to other media types.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or Object form,
|
||||||
|
made available under the License, as indicated by a copyright notice that
|
||||||
|
is included in or attached to the work (an example is provided in the Appendix
|
||||||
|
below).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object form,
|
||||||
|
that is based on (or derived from) the Work and for which the editorial revisions,
|
||||||
|
annotations, elaborations, or other modifications represent, as a whole, an
|
||||||
|
original work of authorship. For the purposes of this License, Derivative
|
||||||
|
Works shall not include works that remain separable from, or merely link (or
|
||||||
|
bind by name) to the interfaces of, the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including the original version
|
||||||
|
of the Work and any modifications or additions to that Work or Derivative
|
||||||
|
Works thereof, that is intentionally submitted to Licensor for inclusion in
|
||||||
|
the Work by the copyright owner or by an individual or Legal Entity authorized
|
||||||
|
to submit on behalf of the copyright owner. For the purposes of this definition,
|
||||||
|
"submitted" means any form of electronic, verbal, or written communication
|
||||||
|
sent to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems, and
|
||||||
|
issue tracking systems that are managed by, or on behalf of, the Licensor
|
||||||
|
for the purpose of discussing and improving the Work, but excluding communication
|
||||||
|
that is conspicuously marked or otherwise designated in writing by the copyright
|
||||||
|
owner as "Not a Contribution."
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
|
||||||
|
of whom a Contribution has been received by Licensor and subsequently incorporated
|
||||||
|
within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of this
|
||||||
|
License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
|
||||||
|
no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
|
||||||
|
Derivative Works of, publicly display, publicly perform, sublicense, and distribute
|
||||||
|
the Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of this License,
|
||||||
|
each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
|
||||||
|
no-charge, royalty-free, irrevocable (except as stated in this section) patent
|
||||||
|
license to make, have made, use, offer to sell, sell, import, and otherwise
|
||||||
|
transfer the Work, where such license applies only to those patent claims
|
||||||
|
licensable by such Contributor that are necessarily infringed by their Contribution(s)
|
||||||
|
alone or by combination of their Contribution(s) with the Work to which such
|
||||||
|
Contribution(s) was submitted. If You institute patent litigation against
|
||||||
|
any entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
||||||
|
that the Work or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses granted to You
|
||||||
|
under this License for that Work shall terminate as of the date such litigation
|
||||||
|
is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the Work or
|
||||||
|
Derivative Works thereof in any medium, with or without modifications, and
|
||||||
|
in Source or Object form, provided that You meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or Derivative Works a copy
|
||||||
|
of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices stating that
|
||||||
|
You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works that You distribute,
|
||||||
|
all copyright, patent, trademark, and attribution notices from the Source
|
||||||
|
form of the Work, excluding those notices that do not pertain to any part
|
||||||
|
of the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its distribution,
|
||||||
|
then any Derivative Works that You distribute must include a readable copy
|
||||||
|
of the attribution notices contained within such NOTICE file, excluding those
|
||||||
|
notices that do not pertain to any part of the Derivative Works, in at least
|
||||||
|
one of the following places: within a NOTICE text file distributed as part
|
||||||
|
of the Derivative Works; within the Source form or documentation, if provided
|
||||||
|
along with the Derivative Works; or, within a display generated by the Derivative
|
||||||
|
Works, if and wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and do not modify the
|
||||||
|
License. You may add Your own attribution notices within Derivative Works
|
||||||
|
that You distribute, alongside or as an addendum to the NOTICE text from the
|
||||||
|
Work, provided that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and may provide
|
||||||
|
additional or different license terms and conditions for use, reproduction,
|
||||||
|
or distribution of Your modifications, or for any such Derivative Works as
|
||||||
|
a whole, provided Your use, reproduction, and distribution of the Work otherwise
|
||||||
|
complies with the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise, any
|
||||||
|
Contribution intentionally submitted for inclusion in the Work by You to the
|
||||||
|
Licensor shall be under the terms and conditions of this License, without
|
||||||
|
any additional terms or conditions. Notwithstanding the above, nothing herein
|
||||||
|
shall supersede or modify the terms of any separate license agreement you
|
||||||
|
may have executed with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade names,
|
||||||
|
trademarks, service marks, or product names of the Licensor, except as required
|
||||||
|
for reasonable and customary use in describing the origin of the Work and
|
||||||
|
reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or agreed to
|
||||||
|
in writing, Licensor provides the Work (and each Contributor provides its
|
||||||
|
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied, including, without limitation, any warranties
|
||||||
|
or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness
|
||||||
|
of using or redistributing the Work and assume any risks associated with Your
|
||||||
|
exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory, whether
|
||||||
|
in tort (including negligence), contract, or otherwise, unless required by
|
||||||
|
applicable law (such as deliberate and grossly negligent acts) or agreed to
|
||||||
|
in writing, shall any Contributor be liable to You for damages, including
|
||||||
|
any direct, indirect, special, incidental, or consequential damages of any
|
||||||
|
character arising as a result of this License or out of the use or inability
|
||||||
|
to use the Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all other commercial
|
||||||
|
damages or losses), even if such Contributor has been advised of the possibility
|
||||||
|
of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing the Work
|
||||||
|
or Derivative Works thereof, You may choose to offer, and charge a fee for,
|
||||||
|
acceptance of support, warranty, indemnity, or other liability obligations
|
||||||
|
and/or rights consistent with this License. However, in accepting such obligations,
|
||||||
|
You may act only on Your own behalf and on Your sole responsibility, not on
|
||||||
|
behalf of any other Contributor, and only if You agree to indemnify, defend,
|
||||||
|
and hold each Contributor harmless for any liability incurred by, or claims
|
||||||
|
asserted against, such Contributor by reason of your accepting any such warranty
|
||||||
|
or additional liability. END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following boilerplate
|
||||||
|
notice, with the fields enclosed by brackets "[]" replaced with your own identifying
|
||||||
|
information. (Don't include the brackets!) The text should be enclosed in
|
||||||
|
the appropriate comment syntax for the file format. We also recommend that
|
||||||
|
a file or class name and description of purpose be included on the same "printed
|
||||||
|
page" as the copyright notice for easier identification within third-party
|
||||||
|
archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
|
||||||
|
limitations under the License.
|
||||||
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -192,6 +192,8 @@ 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'])
|
$query->field(['id', 'title', 'category_id'])
|
||||||
->order(['sort' => 'asc', 'id' => 'desc'])
|
->order(['sort' => 'asc', 'id' => 'desc'])
|
||||||
@@ -199,15 +201,48 @@ class TopicNas extends Common
|
|||||||
}])
|
}])
|
||||||
->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);
|
//查询三级分类
|
||||||
|
$article_categorys_new = [];
|
||||||
|
$article_categorys_two = [];
|
||||||
|
// dump($article_categorys->toArray());exit;
|
||||||
|
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) {
|
||||||
|
$articles = $vvv['article'];
|
||||||
|
if ( isset($article_categorys_two[$vvv['id']]) ) {
|
||||||
|
foreach ($article_categorys_two[$vvv['id']] as $v) {
|
||||||
|
foreach ($v['article'] as $av) {
|
||||||
|
if ( count($articles) < 3 ) {
|
||||||
|
array_push($articles,$av);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$vvv['article'] = $articles;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
View::assign('article_categorys', $article_categorys_new);
|
||||||
|
// View::assign('article_categorys', $article_categorys);
|
||||||
|
|
||||||
$contacts = [];
|
$contacts = [];
|
||||||
// 获取banner数据
|
// 获取banner数据
|
||||||
@@ -246,20 +281,46 @@ 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'] ) {
|
||||||
|
$vv['child'] = '';
|
||||||
|
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');
|
||||||
}
|
}
|
||||||
@@ -317,8 +378,18 @@ class TopicNas extends Common
|
|||||||
->language($this->lang_id)
|
->language($this->lang_id)
|
||||||
->where('category_id', 'IN', array_column($categorys, 'id'))
|
->where('category_id', 'IN', array_column($categorys, 'id'))
|
||||||
->select();
|
->select();
|
||||||
|
//查询上级id
|
||||||
|
$parent_two = ArticleCategoryModel::parentColumn(array_column($categorys, 'id'))->language($this->lang_id)->column('pid','id');//二级分类id
|
||||||
|
$articles_data = $articles->toArray();
|
||||||
|
foreach ($articles_data as &$v) {
|
||||||
|
$v['pid'] = 0;
|
||||||
|
if ( $parent_two[$v['category_id']] !== $parent ) {
|
||||||
|
$v['pid'] = $v['category_id'];
|
||||||
|
$v['category_id'] = $parent_two[$v['category_id']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return success('success', $articles->toArray());
|
return success('success', $articles_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -46,6 +46,27 @@ 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 scopeParentColumn($query, $parent)
|
||||||
|
{
|
||||||
|
if (is_array($parent)) {
|
||||||
|
$query->where('id', 'IN', $parent);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$query->where('id', '=', $parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 所属子分类范围查询
|
// 所属子分类范围查询
|
||||||
public function scopeChild($query, $id, $merge_self = false)
|
public function scopeChild($query, $id, $merge_self = false)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -57,6 +57,8 @@
|
|||||||
<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">
|
||||||
|
|
||||||
|
|
||||||
{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">
|
||||||
@@ -67,6 +69,24 @@
|
|||||||
<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}>
|
<ul class="sub-list" {if condition='$ac.id == $Request.get.cid' }style="display: block;" {/if}>
|
||||||
|
{volist name="ac.child" id="ad"}
|
||||||
|
<li class="two-mues">
|
||||||
|
<a href="#" class="two-a">
|
||||||
|
<div><img src="__IMAGES__/nars-jt.png"
|
||||||
|
class="arrow {if condition='$ad.id == $Request.get.pid'}rotate{/if}">
|
||||||
|
</div>
|
||||||
|
<span>{$ad.name}</span>
|
||||||
|
</a>
|
||||||
|
<ul class="thress-mues" {if condition='$ad.id == $Request.get.pid' }style="display: block;" {/if}>
|
||||||
|
{volist name="ad.article" id="ae"}
|
||||||
|
<li>
|
||||||
|
<a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id ,'pid' => $ad.id, 'id' => $ae.id])}"
|
||||||
|
style="margin-left:18%;padding: 0.4rem;">{$ae.title}</a>
|
||||||
|
</li>
|
||||||
|
{/volist}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{/volist}
|
||||||
{volist name="ac.article" id="ar"}
|
{volist name="ac.article" id="ar"}
|
||||||
<li>
|
<li>
|
||||||
<a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id , 'id' => $ar.id])}"
|
<a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id , 'id' => $ar.id])}"
|
||||||
@@ -78,6 +98,9 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{/volist}
|
{/volist}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{/notempty}
|
{/notempty}
|
||||||
</div>
|
</div>
|
||||||
@@ -128,6 +151,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();
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="nhlp-tx-list">
|
<div class="nhlp-tx-list">
|
||||||
{volist name="vo.article" id="va" key="index"}
|
{volist name="vo.article" id="va" key="index"}
|
||||||
<a class="txrow" href="{:url('/index/topic/nas/help_detail', ['cid' => $vo.id, 'id' => $va.id])}">
|
<a class="txrow" href="{:url('/index/topic/nas/help_detail', ['pid' => $va.category_id,'cid' => $vo.id, 'id' => $va.id])}">
|
||||||
<div class="nhlp-point"></div>
|
<div class="nhlp-point"></div>
|
||||||
<span class="nhlpsp">{$va.title}</span>
|
<span class="nhlpsp">{$va.title}</span>
|
||||||
<span class="narhelpgoimg">
|
<span class="narhelpgoimg">
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
</a>
|
</a>
|
||||||
{/volist}
|
{/volist}
|
||||||
{if condition="count($vo.article) >= 3"}
|
{if condition="count($vo.article) >= 3"}
|
||||||
<a class="ckgdbt" href="{:url('/index/topic/nas/help_detail', ['cid' => $vo.id, 'id' => isset($vo.article[0])?$vo.article[0]['id']:0])}">
|
<a class="ckgdbt" href="{:url('/index/topic/nas/help_detail', ['cid' => $vo.id, 'id' => isset($vo.article[0])?$vo.article[0]['id']:0,'pid' => isset($vo.article[0])?$vo.article[0]['category_id']:0])}">
|
||||||
{:lang_i18n('查看更多')} >
|
{:lang_i18n('查看更多')} >
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -32,28 +32,42 @@
|
|||||||
<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}>
|
<ul class="sub-list" {if condition='$ac.id == $Request.get.cid' }style="display: block;" {/if}>
|
||||||
{volist name="ac.article" id="ar"}
|
{volist name="ac.child" id="ad"}
|
||||||
<li>
|
<li class="two-mues">
|
||||||
<a
|
<a href="#" class="two-a">
|
||||||
href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id, 'id' => $ar.id])}"
|
<div class="arrow {if condition='$ad.id == $Request.get.pid'}rotate{/if}"><img src="__IMAGES__/nas-jt.png" class="arrow {if condition='$ad.id == $Request.get.pid'}rotate{/if}" /></div>
|
||||||
{eq name="ar.id" value="$Request.get.id"}class="active"{/eq}
|
<span>{$ad.name}</span>
|
||||||
>
|
|
||||||
{$ar.title}
|
|
||||||
</a>
|
</a>
|
||||||
|
<ul class="thress-mues" {if condition='$ad.id == $Request.get.pid' }style="display: block;" {/if}>
|
||||||
|
{volist name="ad.article" id="ae"}
|
||||||
|
<li style="margin-left: 30px;"><a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id,'pid' => $ad.id, 'id' => $ae.id])}" style="padding-top: 6px;" {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}
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{/volist}
|
{/volist}
|
||||||
|
<!-- end 三级菜单 -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{/notempty}
|
{/notempty}
|
||||||
</div>
|
</div>
|
||||||
@@ -75,10 +89,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);
|
||||||
@@ -109,7 +135,7 @@
|
|||||||
html = '<ul>'
|
html = '<ul>'
|
||||||
$.each(r.data, function (k, v) {
|
$.each(r.data, function (k, v) {
|
||||||
html +=
|
html +=
|
||||||
'<li><a href="{:url(\'/index/topic/nas/help_detail\')}?cid=' + v.category_id + '&id=' + v.id + '">' + v.title + '</a></li>'
|
'<li><a href="{:url(\'/index/topic/nas/help_detail\')}?cid=' + v.category_id + '&id=' + v.id + '&pid=' + v.pid + '">' + v.title + '</a></li>'
|
||||||
})
|
})
|
||||||
html += '</ul>'
|
html += '</ul>'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -135,6 +135,7 @@
|
|||||||
transform: rotate(0deg);
|
transform: rotate(0deg);
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
flex-direction: column-reverse;
|
||||||
}
|
}
|
||||||
|
|
||||||
.narshelpdetailPc .nars-help-content .nars-hlpdt-ml .arrow .nars-jt {
|
.narshelpdetailPc .nars-help-content .nars-hlpdt-ml .arrow .nars-jt {
|
||||||
@@ -215,7 +216,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 +259,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