Compare commits
87 Commits
c2bba7fb56
...
ozq-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | |||
| 5fde7159e0 | |||
| 6068efa03f | |||
| 738b293ea2 | |||
| a1be105c31 | |||
| 03374856e4 | |||
| f07741ff19 | |||
| c64450d74c | |||
| e462b38ff9 | |||
| b96021d21d | |||
| 12d6fdc3a6 | |||
| cd3f651a2a | |||
| 1e4b416cac | |||
| e38446f3fd | |||
| 06b9d42ae4 | |||
| 99d78069d5 | |||
| 342a3754aa | |||
| 51e9c8ced1 | |||
| b13d481e1e | |||
| da8f204167 | |||
| c1979da1af | |||
| 1802f57906 | |||
| 3fa3b8fb63 | |||
| fb2b1455bc | |||
| cc497b2ebc | |||
| 2b450a2e9c | |||
| e266e89a97 | |||
| 2a94a7ecec | |||
| 9137335ce3 | |||
| b8946f223a | |||
| 3a8440c2b9 |
@@ -99,6 +99,7 @@ class ReceiveProductSync
|
||||
}
|
||||
|
||||
$category = ProductCategoryModel::language($lang_id)->tcoId($tco_category['id'])->find();
|
||||
if (!empty($category)) {
|
||||
$tco_parent = ProductTcoCategoryModel::language($lang_id)->tcoId($tco_category['tco_pid'])->find();
|
||||
if (!empty($tco_parent)) {
|
||||
$parent = ProductCategoryModel::language($lang_id)->tcoId($tco_parent['id'])->find();
|
||||
@@ -109,10 +110,11 @@ class ReceiveProductSync
|
||||
$category['path'] = $parent['path'] . $parent['pid'];
|
||||
$category['level'] = $parent['level'] + 1;
|
||||
}
|
||||
if (!$category->save($category)) {
|
||||
if (!$category->save()) {
|
||||
throw new \Exception('产品分类更新失败');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Db::commit();
|
||||
} catch (\Throwable $th) {
|
||||
|
||||
@@ -228,7 +228,7 @@ class Article
|
||||
private function getExportArticleData()
|
||||
{
|
||||
$server = request()->server();
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . config('filesystem.disks.public.url') . '/';
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||
$param = request()->param(['title', 'category_id', 'release_time']);
|
||||
$data = ArticleModel::field([
|
||||
'*',
|
||||
@@ -253,7 +253,7 @@ class Article
|
||||
])
|
||||
->bindAttr('category', ['category_name' => 'name'])
|
||||
->each(function ($item) use($image_host) {
|
||||
$item->image = !empty($item->image) ? $image_host . $item->image : '';
|
||||
$item->image = !empty($item->image) ? url_join($image_host, $item->image) : '';
|
||||
return $item;
|
||||
});
|
||||
|
||||
|
||||
@@ -262,11 +262,9 @@ class BannerItem
|
||||
// 获取导出数据
|
||||
private function getBannerExportData()
|
||||
{
|
||||
$param = request()->param([
|
||||
'title',
|
||||
'banner_id',
|
||||
'created_at'
|
||||
]);
|
||||
$server = request()->server();
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||
$param = request()->param(['title', 'banner_id', 'created_at']);
|
||||
return SysBannerItemModel::alias('item')
|
||||
->field([
|
||||
'item.id',
|
||||
@@ -311,7 +309,13 @@ class BannerItem
|
||||
}
|
||||
})
|
||||
->order(['item.sort' => 'asc', 'item.id' => 'desc'])
|
||||
->select();
|
||||
->select()
|
||||
->each(function($item) use($image_host) {
|
||||
$item->image = !empty($item->image) ? url_join($image_host, $item->image) : '';
|
||||
$item->extra_image = !empty($item->extra_image) ? url_join($image_host, $item->extra_image) : '';
|
||||
$item->video = !empty($item->video) ? url_join($image_host, $item->video) : '';
|
||||
return $item;
|
||||
});
|
||||
}
|
||||
|
||||
// 删除
|
||||
|
||||
@@ -346,7 +346,7 @@ class Product
|
||||
private function getExportProductData()
|
||||
{
|
||||
$server = request()->server();
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . config('filesystem.disks.public.url') . '/';
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||
$param = request()->param([
|
||||
'name',
|
||||
'spu',
|
||||
@@ -360,10 +360,10 @@ class Product
|
||||
'spu',
|
||||
'name',
|
||||
'short_name',
|
||||
'CONCAT("' . $image_host . '", `cover_image`)' => 'cover_image',
|
||||
'cover_image',
|
||||
'desc',
|
||||
'CONCAT("' . $image_host . '", `video_img`)' => 'video_img',
|
||||
'CONCAT("' . $image_host . '", `video_url`)' => 'video_url',
|
||||
'video_img',
|
||||
'video_url',
|
||||
'CASE WHEN is_new = 1 THEN "是" ELSE "否" END' => 'is_new',
|
||||
'CASE WHEN is_hot = 1 THEN "是" ELSE "否" END' => 'is_hot',
|
||||
'CASE WHEN is_sale = 1 THEN "是" ELSE "否" END' => 'is_sale',
|
||||
@@ -390,7 +390,18 @@ class Product
|
||||
->order(['id' => 'asc'])
|
||||
->select()
|
||||
->bindAttr('category', ['category_name' => 'name'])
|
||||
->hidden(['category_id', 'category']);
|
||||
->hidden(['category_id', 'category'])
|
||||
->each(function($item) use($image_host) {
|
||||
if (!empty($item["cover_image"])) {
|
||||
$item["cover_image"] = url_join($image_host, $item["cover_image"]);
|
||||
}
|
||||
if (!empty($item["video_img"])) {
|
||||
$item["video_img"] = url_join($image_host, $item["video_img"]);
|
||||
}
|
||||
if (!empty($item["video_url"])) {
|
||||
$item["video_url"] = url_join($image_host, $item["video_url"]);
|
||||
}
|
||||
});
|
||||
|
||||
if (!$products->isEmpty()) {
|
||||
// 产品参数
|
||||
|
||||
@@ -16,8 +16,9 @@ class ProductTcoCategory
|
||||
$param = request()->param(['name']);
|
||||
|
||||
$categorys = ProductTcoCategoryModel::field([
|
||||
'tco_id' => 'id',
|
||||
'tco_pid' => 'pid',
|
||||
'id',
|
||||
'tco_id',
|
||||
'tco_pid',
|
||||
'name',
|
||||
])
|
||||
->withSearch(['name'], [
|
||||
@@ -25,10 +26,10 @@ class ProductTcoCategory
|
||||
])
|
||||
->language(request()->lang_id)
|
||||
->enabled()
|
||||
->order(['id' => 'asc'])
|
||||
->order(['tco_id' => 'asc'])
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
return success('获取成功', array_to_tree($categorys, 0, 'pid', false));
|
||||
return success('获取成功', array_to_tree($categorys, 0, 'tco_pid', false, true, 'tco_id'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,9 +209,6 @@ class Video
|
||||
]);
|
||||
|
||||
$domain = request()->domain();
|
||||
$image_path = Config::get('filesystem.disks.image.url');
|
||||
$video_path = Config::get('filesystem.disks.video.url');
|
||||
|
||||
return VideoModel::withoutField([
|
||||
'language_id',
|
||||
'updated_at',
|
||||
@@ -230,13 +227,9 @@ class Video
|
||||
->select()
|
||||
->bindAttr('category', ['category_name' => 'name'])
|
||||
->hidden(['category_id', 'category'])
|
||||
->each(function ($item) use($domain, $image_path, $video_path) {
|
||||
if (!empty($item->image)) {
|
||||
$item->image = $domain . $image_path . '/' . $item->image;
|
||||
}
|
||||
if (!empty($item->video)) {
|
||||
$item->video = $domain . $video_path . '/' . $item->video;
|
||||
}
|
||||
->each(function ($item) use($domain) {
|
||||
$item->image = !empty($item->image) ? url_join($domain, $item->image) : '';
|
||||
$item->video = !empty($item->video) ? url_join($domain, $item->video) : '';
|
||||
$item->recommend = $item->recommend == 1 ? '是' : '否';
|
||||
$item->status = $item->status == 1 ? '启用' : '禁用';
|
||||
return $item;
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
@@ -80,7 +80,7 @@ if (!function_exists('array_to_tree')) {
|
||||
* @param bool $keep_pid 是否保留pid
|
||||
* @return array
|
||||
*/
|
||||
function array_to_tree(array $data, int $pid, string $with = 'pid', int|bool $level = 1, bool $keep_pid = true)
|
||||
function array_to_tree(array $data, int $pid, string $with = 'pid', int|bool $level = 1, bool $keep_pid = true, $with_ref = 'id')
|
||||
{
|
||||
$ret = [];
|
||||
foreach ($data as $item) {
|
||||
@@ -93,7 +93,7 @@ if (!function_exists('array_to_tree')) {
|
||||
if ($keep_pid === false) {
|
||||
unset($item[$with]);
|
||||
}
|
||||
$children = array_to_tree($data, $item['id'], $with, $lv, $keep_pid);
|
||||
$children = array_to_tree($data, $item[$with_ref], $with, $lv, $keep_pid, $with_ref);
|
||||
if ($children) {
|
||||
$item['children'] = $children;
|
||||
}
|
||||
@@ -153,9 +153,13 @@ if (!function_exists('get_filesystem_url')) {
|
||||
* @param string $disk 磁盘配置 key
|
||||
* @return string
|
||||
*/
|
||||
function get_filesystem_url(string $url, string $disk): string
|
||||
function get_filesystem_url(string|null $url, string $disk): string
|
||||
{
|
||||
if (\think\helper\Str::startsWith($url, ['http://', 'https://'])) {
|
||||
if (is_null($url)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (\think\helper\Str::startsWith($url, ['http://', 'https://', '//'])) {
|
||||
return $url;
|
||||
}
|
||||
if (empty($disk)) {
|
||||
@@ -171,8 +175,12 @@ if (!function_exists('url_filesystem_detect')) {
|
||||
* @param string $url 文件地址
|
||||
* @return string
|
||||
*/
|
||||
function url_filesystem_detect(string $url): string
|
||||
function url_filesystem_detect(string|null $url): string
|
||||
{
|
||||
if (is_null($url)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$idx = strrpos($url, '.');
|
||||
if ($idx === false) {
|
||||
return $url;
|
||||
@@ -191,3 +199,36 @@ if (!function_exists('url_filesystem_detect')) {
|
||||
return $url;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('url_join')) {
|
||||
/**
|
||||
* 合并URL
|
||||
* @param string $url 基础URL
|
||||
* @param string $path 路径
|
||||
* @param bool $remove_slash 是否移除首尾的斜杠
|
||||
* @return string
|
||||
*/
|
||||
function url_join(string $url, string $path, bool $remove_slash = true): string
|
||||
{
|
||||
if (empty($url)) {
|
||||
return $path;
|
||||
}
|
||||
if (empty($path)) {
|
||||
return $url;
|
||||
}
|
||||
if (\think\helper\Str::startsWith($path, ['http://', 'https://', '//'])) {
|
||||
return $path;
|
||||
}
|
||||
|
||||
if ($remove_slash) {
|
||||
if (str_ends_with($url, '/') && str_starts_with($path, '/')) {
|
||||
return $url . substr($path, 1);
|
||||
}
|
||||
if (!str_ends_with($url, '/') && !str_starts_with($path, '/')) {
|
||||
return $url . '/' . $path;
|
||||
}
|
||||
}
|
||||
|
||||
return $url . $path;
|
||||
}
|
||||
}
|
||||
@@ -192,6 +192,8 @@ class TopicNas extends Common
|
||||
{
|
||||
// 获取文章分类及文章数据
|
||||
$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) {
|
||||
$query->field(['id', 'title', 'category_id'])
|
||||
->order(['sort' => 'asc', 'id' => 'desc'])
|
||||
@@ -199,15 +201,48 @@ class TopicNas extends Common
|
||||
}])
|
||||
->field([
|
||||
'id',
|
||||
'pid',
|
||||
'name',
|
||||
'icon'
|
||||
])
|
||||
->language($this->lang_id)
|
||||
->parent($parent)
|
||||
// ->parent($parent)
|
||||
->parentChild($parent_two)
|
||||
->isShow(true)
|
||||
->order(['sort' => 'asc', 'id' => 'desc'])
|
||||
->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 = [];
|
||||
// 获取banner数据
|
||||
@@ -246,20 +281,46 @@ class TopicNas extends Common
|
||||
|
||||
// 获取文章分类及文章数据
|
||||
$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) {
|
||||
$query->field(['id', 'title', 'category_id'])->order(['sort' => 'asc', 'id' => 'desc']);
|
||||
}])
|
||||
->field([
|
||||
'id',
|
||||
'pid',
|
||||
'name',
|
||||
'icon'
|
||||
])
|
||||
->language($this->lang_id)
|
||||
->parent($parent)
|
||||
// ->parent($parent)
|
||||
->parentChild($parent_two)
|
||||
->isShow(true)
|
||||
->order(['sort' => 'asc', 'id' => 'desc'])
|
||||
->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');
|
||||
}
|
||||
@@ -317,8 +378,18 @@ class TopicNas extends Common
|
||||
->language($this->lang_id)
|
||||
->where('category_id', 'IN', array_column($categorys, 'id'))
|
||||
->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);
|
||||
}
|
||||
|
||||
// 所属上级分类范围查询
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<div class="tabs">
|
||||
{notempty name="video_categorys"}
|
||||
{volist name="video_categorys" id="va"}
|
||||
<a href="{:url('attachment/index', ['id' => $va.id])}"><div class="tabit active">{$va.name}</div></a>
|
||||
<a href="{:url('attachment/video', ['id' => $va.id])}"><div class="tabit active">{$va.name}</div></a>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
|
||||
@@ -29,12 +29,13 @@
|
||||
{/notempty}
|
||||
<li>
|
||||
<h3>{:lang_i18n('联系方式')}</h3>
|
||||
{notempty name="contact_config.website_email"}
|
||||
<p>{$contact_config.website_email.title}: {$contact_config.website_email.value}</p>
|
||||
{/notempty}
|
||||
{notempty name="contact_config.website_hotline_office_hours"}
|
||||
<p>{$contact_config.website_hotline_office_hours.title}: {$contact_config.website_hotline_office_hours.value}</p>
|
||||
{/notempty}
|
||||
{if condition="!empty($contact_config)"}
|
||||
{volist name="contact_config" id="vo"}
|
||||
{if condition="$vo.type != 'image'"}
|
||||
<p>{$vo.value}</p>
|
||||
{/if}
|
||||
{/volist}
|
||||
{/if}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
<div class="nars-hlpdt-ml">
|
||||
{notempty name="article_categorys"}
|
||||
<div class="nav-tree">
|
||||
|
||||
|
||||
{volist name="article_categorys" id="ac" key="idx"}
|
||||
<div class="categoryhelp">
|
||||
<div class="categoryhelp-title">
|
||||
@@ -67,6 +69,24 @@
|
||||
<span>{$ac.name}</span>
|
||||
</div>
|
||||
<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"}
|
||||
<li>
|
||||
<a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id , 'id' => $ar.id])}"
|
||||
@@ -78,6 +98,9 @@
|
||||
</ul>
|
||||
</div>
|
||||
{/volist}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
@@ -128,6 +151,17 @@
|
||||
$(this).next('.sub-list').slideToggle();
|
||||
$(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 () {
|
||||
$('.nhlpapp-pagescate').hide();
|
||||
|
||||
@@ -117,8 +117,8 @@
|
||||
<p class="subtitle" {notempty name="scene.desc_txt_color" }style="color:{$scene.desc_txt_color};" {/notempty}>
|
||||
{$scene.desc|raw}</p>
|
||||
<a class="sceneMore" href="{$scene.link}">{:lang_i18n('了解更多')} ></a> -->
|
||||
</a>
|
||||
<div style="background-image: url('{$scene.image}');" class="sceneimg"></div>
|
||||
</a>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
</div>
|
||||
<div class="nhlp-tx-list">
|
||||
{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>
|
||||
<span class="nhlpsp">{$va.title}</span>
|
||||
<span class="narhelpgoimg">
|
||||
@@ -41,7 +41,7 @@
|
||||
</a>
|
||||
{/volist}
|
||||
{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('查看更多')} >
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
{extend name="public/nas_base" /}
|
||||
{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 name="seo"}
|
||||
{notempty name="article.seo_keywords"}
|
||||
<meta name="keywords" content="{$article.seo_keywords}" />
|
||||
<meta name="description" content="{$article.seo_desc}" />
|
||||
{else /}
|
||||
{__BLOCK__}
|
||||
{/notempty}
|
||||
{notempty name="article.seo_keywords"}
|
||||
<meta name="keywords" content="{$article.seo_keywords}" />
|
||||
<meta name="description" content="{$article.seo_desc}" />
|
||||
{else /}
|
||||
{__BLOCK__}
|
||||
{/notempty}
|
||||
{/block}
|
||||
{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 name="main"}
|
||||
<div class="orico_Page_index">
|
||||
@@ -32,28 +32,42 @@
|
||||
<div class="nars-hlpdt-ml">
|
||||
{notempty name="article_categorys"}
|
||||
<div class="nav-tree">
|
||||
|
||||
<!-- start 三级菜单 -->
|
||||
{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>
|
||||
<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}
|
||||
<!-- 二级-->
|
||||
<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 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>
|
||||
<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="padding-top: 6px;padding-left: 30px;" {eq
|
||||
name="ae.id" value="$Request.get.id" }class="active" {/eq}>{$ae.title}</a></li>
|
||||
{/volist}
|
||||
</ul>
|
||||
<!-- 三级-->
|
||||
</li>
|
||||
{/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>
|
||||
</div>
|
||||
{/volist}
|
||||
<!-- end 三级菜单 -->
|
||||
|
||||
</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
@@ -75,10 +89,22 @@
|
||||
{block name="script"}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
// 一级菜单点击事件
|
||||
$('.category-title').click(function () {
|
||||
$(this).next('.sub-list').slideToggle();
|
||||
$(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) {
|
||||
var target = $(e.target);
|
||||
@@ -109,7 +135,7 @@
|
||||
html = '<ul>'
|
||||
$.each(r.data, function (k, v) {
|
||||
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>'
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ if (!function_exists('image_domain_concat')) {
|
||||
return $path;
|
||||
}
|
||||
|
||||
return rtrim($domain, '/') . '/' . ltrim($path, '/');
|
||||
return url_join($domain, $path);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ if (!function_exists('video_domain_concat')) {
|
||||
return $path;
|
||||
}
|
||||
|
||||
return rtrim($domain, '/') . '/' . ltrim($path, '/');
|
||||
return url_join($domain, $path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
// +----------------------------------------------------------------------
|
||||
// | 控制台配置
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
|
||||
return [
|
||||
// 指令定义
|
||||
'commands' => [
|
||||
'data:migrate' => \app\command\DataMigration::class,
|
||||
'openapi:addclient' => \app\command\OpenApiMgr\AddClient::class,
|
||||
],
|
||||
];
|
||||
|
||||
2
public/migrate_temp_images/.gitignore
vendored
2
public/migrate_temp_images/.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -154,7 +154,7 @@ body {
|
||||
tab-size: 4;
|
||||
-moz-tab-size: 4;
|
||||
text-align: left;
|
||||
/* white-space: pre-wrap; */
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word
|
||||
}
|
||||
|
||||
|
||||
@@ -1278,7 +1278,7 @@ video img {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
.foot-cate li {
|
||||
width: 50%;
|
||||
min-width: 50%;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
color: #fff;
|
||||
|
||||
@@ -220,3 +220,31 @@
|
||||
color: #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;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -135,6 +135,7 @@
|
||||
transform: rotate(0deg);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
|
||||
.narshelpdetailPc .nars-help-content .nars-hlpdt-ml .arrow .nars-jt {
|
||||
@@ -215,7 +216,7 @@
|
||||
}
|
||||
|
||||
.narshelpdetailPc .nars-help-content .nars-hlpdt-mr #title-list .tt {
|
||||
font-size: 14px;
|
||||
font-size: 15px;
|
||||
padding-top: 33px;
|
||||
padding-bottom: 1rem;
|
||||
margin: 0;
|
||||
@@ -258,3 +259,27 @@
|
||||
/* 将所有属性设置为初始值 */
|
||||
/* 或者使用 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