From d021962d0a320e4f54571e2ddd3614ad9c4b83da Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 09:51:23 +0800 Subject: [PATCH 01/25] =?UTF-8?q?refactor:=20=E5=90=8E=E9=9D=A2=E6=A8=AA?= =?UTF-8?q?=E5=B9=85=E5=88=86=E9=A1=B5=E6=8E=A5=E5=8F=A3=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E4=BF=AE=E6=94=B9=E4=B8=BA=E7=BC=A9=E7=95=A5?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/BannerItem.php | 3 ++- app/common.php | 30 +++++++++++++++++++++++ app/index/common.php | 33 ++------------------------ 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/app/admin/controller/v1/BannerItem.php b/app/admin/controller/v1/BannerItem.php index d949bcd9..17243489 100644 --- a/app/admin/controller/v1/BannerItem.php +++ b/app/admin/controller/v1/BannerItem.php @@ -60,7 +60,8 @@ class BannerItem ->paginate([ 'list_rows' => $param['size'], 'page' => $param['page'] - ]); + ]) + ->each(fn($item) => $item->image = thumb($item->image)); return success('获取成功', $banner_items); } diff --git a/app/common.php b/app/common.php index ae91895a..37309be1 100644 --- a/app/common.php +++ b/app/common.php @@ -102,4 +102,34 @@ if (!function_exists('array_to_tree')) { } return $ret; } +} + +if (!function_exists('thumb')) { + /** + * 获取缩略图 + * @param string $url 图片地址 + * @return string + */ + function thumb(?string $url): string + { + if (empty($url)) { + return ''; + } + if ( + str_contains($url, '_thumb') || + \think\helper\Str::startsWith($url, ['http://', 'https://']) || + !\think\helper\Str::endsWith($url, ['.png', '.jpg', '.jpeg', '.gif', '.tif', '.svg', '.webp', '.bmp']) + ) { + return $url; + } + + $idx = mb_strripos($url, '.', 0, 'utf-8'); + if ($idx === false) { + return $url; + } + + $len = mb_strlen($url, 'utf-8'); + + return mb_substr($url, 0, $idx, 'utf-8') . '_thumb' . mb_substr($url, $idx, $len - $idx, 'utf-8'); + } } \ No newline at end of file diff --git a/app/index/common.php b/app/index/common.php index 35395eec..7e901805 100644 --- a/app/index/common.php +++ b/app/index/common.php @@ -71,36 +71,6 @@ if (!function_exists('style')) { } } -if (!function_exists('thumb')) { - /** - * 获取缩略图 - * @param string $url 图片地址 - * @return string - */ - function thumb(string $url): string - { - if (empty($url)) { - return ''; - } - if ( - str_contains($url, '_thumb') || - \think\helper\Str::startsWith($url, ['http://', 'https://']) || - !\think\helper\Str::endsWith($url, ['.png', '.jpg', '.jpeg', '.gif', '.tif', '.svg', '.webp', '.bmp']) - ) { - return $url; - } - - $idx = mb_strripos($url, '.', 0, 'utf-8'); - if ($idx === false) { - return $url; - } - - $len = mb_strlen($url, 'utf-8'); - - return mb_substr($url, 0, $idx, 'utf-8') . '_thumb' . mb_substr($url, $idx, $len - $idx, 'utf-8'); - } -} - if (!function_exists('get_path_from_img_tag')) { /** * 从img标签中获取图片路径 @@ -128,7 +98,8 @@ if (!function_exists('lang_i18n')) { * @param string $lang 语言标识 * @return string */ - function lang_i18n(string $name, array $vars = [], string $lang = '') { + function lang_i18n(string $name, array $vars = [], string $lang = ''): string + { if (is_null($name)) { return ''; } From eb8f11519077270d59d7b3bf7c4eaf0c37aeecd7 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 10:34:48 +0800 Subject: [PATCH 02/25] =?UTF-8?q?chore:=20=E9=85=8D=E7=BD=AE=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.local | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.env.local b/.env.local index 2341dadf..dab1f91e 100644 --- a/.env.local +++ b/.env.local @@ -11,6 +11,9 @@ DB_PREFIX = ow_ DEFAULT_LANG = zh-cn +# 前端代理服务器ip(影响使用代理访问情况下的客户端ip获取) +PROXY_SERVER_IP[] = 120.79.27.160 + [JWT] TTL=3600 REFRESH_TTL=20160 @@ -23,4 +26,12 @@ WHITE_LIST[] = v1/user/captcha # 不需记录日志的接口 [ADMIN_API] -IGNORE_LOGGING_LIST[] = v1/OperateLog/index \ No newline at end of file +IGNORE_LOGGING_LIST[] = v1/OperateLog/index +MAX_IMAGE_SIZE = 5mb; # 图片上传最大限制 +MAX_VIDEO_SIZE = 150mb; # 视频上传最大限制 +MAX_ATTACHMENT_SIZE = 100mb; # 附件上传最大限制 + +# 开放API +[OPENAPI] +RESOURCE_IMAGES_DOMAIN = http://local.orico.com; # 图片资源服务器地址 +RESOURCE_VIDEOS_DOMAIN = http://local.orico.com; # 视频资源服务器地址 \ No newline at end of file From 4ed3aface4a9eb575726ef4eda0394e581e00ad2 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 10:35:21 +0800 Subject: [PATCH 03/25] =?UTF-8?q?feat:=20mobile=E8=81=94=E7=B3=BB=E6=88=91?= =?UTF-8?q?=E4=BB=AC=20-=20=E5=93=81=E7=89=8C=E4=BB=8B=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/controller/AboutUs.php | 1 + app/index/lang/en-us/mobile.php | 8 + .../view/mobile/about_us/introduction.html | 55 +++- .../index/mobile/css/aboutus_introduction.css | 289 ++++++++++++++++++ 4 files changed, 351 insertions(+), 2 deletions(-) create mode 100755 public/static/index/mobile/css/aboutus_introduction.css diff --git a/app/index/controller/AboutUs.php b/app/index/controller/AboutUs.php index bd9e7ea9..12789f06 100644 --- a/app/index/controller/AboutUs.php +++ b/app/index/controller/AboutUs.php @@ -27,6 +27,7 @@ class AboutUs extends Common ->where('status', '=', 1) ->order(['sort' => 'asc', 'id' => 'desc']); }]) + ->atPlatform(request()->from) ->uniqueLabel([ "BANNER_680744b1d0000", "BANNER_680744e7cacb3", diff --git a/app/index/lang/en-us/mobile.php b/app/index/lang/en-us/mobile.php index 288f2120..4301e618 100644 --- a/app/index/lang/en-us/mobile.php +++ b/app/index/lang/en-us/mobile.php @@ -121,4 +121,12 @@ return [ '发送' => 'SEND', '成为经销商' => 'Become a Distributor', ], + + // 关于我们 - 品牌介绍 + 'aboutus/introduction' => [ + '品牌介绍' => 'Introduction of the Brand', + '选择我们的理由' => 'Why Choose Us', + '为您提供专属定制服务' => 'How We Can Help with Customization', + '对于不同的情况' => 'For Different Situation', + ], ]; \ No newline at end of file diff --git a/app/index/view/mobile/about_us/introduction.html b/app/index/view/mobile/about_us/introduction.html index b2e756c6..603a1a34 100644 --- a/app/index/view/mobile/about_us/introduction.html +++ b/app/index/view/mobile/about_us/introduction.html @@ -1,7 +1,58 @@ {extend name="public/base" /} +{block name="title"} +{notempty name=":lang_i18n('品牌介绍')"}{:lang_i18n('品牌介绍')}{else/}{__BLOCK__}{/notempty} +{/block} {block name="style"} - + {/block} {block name="main"} - +
+
+ {notempty name="focus_image"} + + {/notempty} + {notempty name="why"} +
+

{:lang_i18n('选择我们的理由')}

+
+ {volist name="why" id="wh"} +
+ +

{$wh.title}

+ {$wh.desc|raw} +
+ {/volist} +
+
+ {/notempty} + {notempty name="service"} +
+

{:lang_i18n('为您提供专属定制服务')}

+
+ {assign name="flat_service" value=":\think\helper\Arr::flatMap(fn($item) => $item, $service)" /} + {volist name="flat_service" id="fs"} +
+ + {$fs.title} +
+ {/volist} +
+
+ {/notempty} + {notempty name="difference"} +
+

{:lang_i18n('对于不同的情况')}

+
+ {assign name="flat_difference" value=":\think\helper\Arr::flatMap(fn($item) => $item, $difference)" /} + {volist name="flat_difference" id="di"} +
+ + {$di.title} +
+ {/volist} +
+
+ {/notempty} +
+
{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/aboutus_introduction.css b/public/static/index/mobile/css/aboutus_introduction.css new file mode 100755 index 00000000..0d33e751 --- /dev/null +++ b/public/static/index/mobile/css/aboutus_introduction.css @@ -0,0 +1,289 @@ +.iotbpage { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + position: relative; + overflow: auto; + padding-top: 50px; +} + +.iotb_bgw { + width: 100%; + background-color: #fff; + display: flex; + flex-direction: column; + align-items: center; +} + +.bdimg1 { + width: 100%; +} + +.iotbt1 { + font-size: 18px; + font-family: Montserrat-Bold, Montserrat; + padding-bottom: 24px; + padding-top: 40px; + font-weight: 700; + color: #000; +} + +.iotb_part1 { + padding: 0 20px; + display: flex; + flex-direction: row; + justify-content: space-between; + flex-wrap: wrap; + padding-bottom: 40px; + align-items: baseline; +} + +.iotb_p1_item { + width: 45%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.iotb_p1_item img { + width: 72px; + height: 72px; +} + +.iotbic1 { + width: 120px; + height: 120px; +} + +.iotbtp1 { + font-size: 14px; + font-family: Montserrat-Bold, Montserrat; + font-weight: bold; + padding-bottom: 11px; + word-break: break-word; +} + +.iotbts1 { + text-align: center; + font-size: 12px; + font-family: Montserrat-Medium, Montserrat; + color: #9e9e9f; + word-break: break-word; +} + +.iotb_part2 { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.fdimgs { + padding-bottom: 60px; + margin: 0 auto; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; +} + +.iotb_part3 { + width: 100%; + padding-bottom: 81px; + display: flex; + background-color: #fff; + flex-direction: column; +} + +.odmmain { + width: 70%; + margin: 0 auto; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} + +.odmconten { + width: 81%; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: space-between; + flex-wrap: wrap; +} + +.odmitem { + width: 41%; + display: flex; + flex-direction: column; + align-items: center; + padding-bottom: 24px; +} + +.appodmimg { + width: 72px; + height: 72px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + box-shadow: 0px 2px 5px rgba(124, 162, 207, 0.2); +} + +.odms1 { + color: #202020; + font-size: 14px; + padding-top: 12px; + text-align: center; + font-family: Montserrat-Medium, Montserrat; + overflow-wrap: break-word; + word-break: break-word; +} + +.appcoofootimg { + width: 100%; +} + +.sfbt1 { + text-align: center; + font-size: 18px; + font-family: Montserrat-Bold, Montserrat; + font-weight: bold; + padding-bottom: 24px; + padding-top: 24px; + color: #000; +} + +.sfbchecks { + display: flex; + flex-direction: column; +} + +.sfbcheckboxlist { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; +} + +.sfbcheckboxit { + margin: 0 !important; + border: 1px solid #ccc; + width: 16px !important; + height: 16px !important; + border-radius: 2px !important; + margin-right: 10px !important; +} + +.cit { + width: 100%; + font-size: 14px; + font-family: Montserrat-Regular, Montserrat; + color: #000; + display: flex; + flex-direction: row; + align-items: center; + margin-bottom: 12px; + font-weight: 400; +} + +.bd_main1 { + max-height: none; +} + +.ittextarea2 { + height: 200px; +} + +.bditem select { + border: 1px solid #f2f2f2; +} + +.bd_from .form-control { + display: block; + /*width: 100%;*/ + padding: 2px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.wcu_list { + display: flex; + flex-direction: column; + padding: 0 20px; +} + +.wcu_ltem { + width: 100%; + margin-bottom: 12px; + background: #fff; + border-radius: 8px; + display: flex; + flex-direction: column; + /*padding: 0 20px;*/ +} + +.wcu_ltem .fbit { + width: 100%; +} + +.wcu_s1 { + color: #000; + font: 16px; + font-family: Montserrat-Medium, Montserrat; + font-weight: 500; + padding: 20px 24px; +} + +.bd_main2 { + padding-bottom: 75px; +} + +.iotbtp1 { + text-align: center; +} + +.iotb_p1_item img { + width: 60px; + height: 60px; + margin-bottom: 8px; +} + +.iotb_part22 { + padding-bottom: 50px; + background: #fff; +} + +.iotb_part22 .wcu_list { + flex-direction: row; + flex-wrap: wrap; +} + +.iotb_part22 .wcu_ltem { + width: 49% !important; + position: relative; + margin-bottom: 8px; +} + +.iotb_part22 .wcu_s1 { + font-size: 12px; + color: #fff; + position: absolute; + padding: 0; + background: rgba(0, 0, 0, 0.4); + width: -webkit-fill-available; + height: 35px; + text-align: center; + line-height: 35px; + bottom: 0; + font-weight: bold; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; +} From 6d16d18ba72b9bf56e3d0fa5f50f31155a6164d1 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 11:44:53 +0800 Subject: [PATCH 04/25] =?UTF-8?q?refactor:=20pc=E8=81=94=E7=B3=BB=E6=88=91?= =?UTF-8?q?=E4=BB=AC=20-=20=E6=96=87=E5=8C=96=E4=BB=8B=E7=BB=8D=E9=A1=B5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/view/pc/about_us/culture.html | 131 ++- .../static/index/pc/css/aboutus_culture.css | 817 +++--------------- 2 files changed, 167 insertions(+), 781 deletions(-) diff --git a/app/index/view/pc/about_us/culture.html b/app/index/view/pc/about_us/culture.html index ee165929..2cf47b9b 100644 --- a/app/index/view/pc/about_us/culture.html +++ b/app/index/view/pc/about_us/culture.html @@ -8,92 +8,63 @@ {/block} {block name="main"} -
- {notempty name="focus_image"} - {notempty name="focus_image.link"} - - - - {else/} - - {/notempty} - {notempty name="culture"} -
- {volist name="culture" id="cul" offset="0" length="3"} -
-
-
-

{$cul.title}

-
-
{$cul.desc|raw}
-
- {/volist} -
- {/notempty} -
-{notempty name="culture"} -
-
-
- -
- {volist name="culture" id="cul" key="k" offset="3" mod="2"} - {eq name="mod" value="1"} -
-
-
-
-
-

{$cul.title}

-

{$cul.desc|raw}

+
+ +
+
+ {notempty name="focus_image"} + + + + {/notempty} + {notempty name="culture"} +
+ {volist name="culture" id="cul" offset="0" length="3"} +
+
+
+

{$cul.title}

+
+
{$cul.desc|raw}
+ {/volist}
+ {/notempty}
- {else /} -
-
-
-

{$cul.title}

-

{$cul.desc|raw}

+ {notempty name="culture"} +
+
+
+
-
-
+ {volist name="culture" id="cul" key="k" offset="3" mod="2"} + {eq name="mod" value="1"} +
+
+
+

{$cul.title}

+
{$cul.desc|raw}
+
+
+
+
+
+ {else /} +
+
+
+
+
+

{$cul.title}

+
{$cul.desc|raw}
+
+
+
+ {/eq} + {/volist}
- {/eq} - {/volist} + {/notempty}
-{/notempty} -{/block} -{block name="script"} - {/block} \ No newline at end of file diff --git a/public/static/index/pc/css/aboutus_culture.css b/public/static/index/pc/css/aboutus_culture.css index f9ed3ee0..d90d50ef 100755 --- a/public/static/index/pc/css/aboutus_culture.css +++ b/public/static/index/pc/css/aboutus_culture.css @@ -1,148 +1,95 @@ -.culture-Menu { - background-color: #f1f1f1; - overflow: hidden; +.orico_Page_productxc { + width: 100%; + position: relative; + min-height: 100vh; + overflow-y: auto; + overflow-x: hidden; + background: #f2f2f2; } -.culture { - background-color: #e8eef0; - overflow: hidden; +.orico_Page_productxc .productxcMain { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; } -.culture .title { - color: #002855; +.orico_Page_productxc .productxcMain p { + font-family: inherit; +} +.orico_Page_productxc .productxcMain .culture_top { + background: #f2f2f2; + display: flex; + flex-direction: column; +} +.orico_Page_productxc .productxcMain .culture_top img { + height: auto; + max-width: 100%; +} +.orico_Page_productxc .productxcMain .culture_top .culture_bril_con { + max-width: 101.25rem; + width: 80%; + background: #f2f2f2; + overflow: hidden; + display: flex; + margin: 0 auto; +} +.orico_Page_productxc .productxcMain .culture_top .culture_bril_con .culture_bril_div { + width: 29%; + height: 597px; + background: #fff; + overflow: hidden; + text-align: center; + margin-left: 6%; + margin-top: 5rem; + margin-bottom: 5rem; + border-radius: 1rem; +} +.orico_Page_productxc .productxcMain .culture_top .culture_bril_con .culture_bril_div .iconimg { + display: flex; + justify-content: center; + margin-top: 3.125rem; +} +.orico_Page_productxc .productxcMain .culture_top .culture_bril_con .culture_bril_div .iconimg img { + height: auto; + max-width: 100%; +} +.orico_Page_productxc .productxcMain .culture_top .culture_bril_con .culture_bril_div .title { + font-size: 1.125rem; font-weight: 600; - padding: 5% 0 3%; -} -.culture_top{ - background: #F2F2F2; -} -.culture_top img{ - height: auto; - max-width: 100%; -} -.culture_bril_con {background: #F2F2F2; overflow: hidden; display:flex} -.culture_bril_div {width:29%;height:597px;background: #fff; overflow: hidden;text-align:center;margin-left:6%;margin-top:80px;margin-bottom:80px;border-radius:16px} -.culture_bril_div:first-child{margin-left:0;} -.culture_bril_div .iconimg{margin:0 auto;margin-top:50px;} -.culture_bril_div .title{font-size:18px;font-weight:600;font-family: Montserrat-Bold, Montserrat;margin-top:32px;width: 90%;margin-left: 5%;} -.culture_bril_div .subtitle{width:80%;font-size:14px;color: #707070;font-family: Montserrat-Medium, Montserrat;margin-top:22px;margin-left:10%} -@media screen and (min-width:1461px) and (max-width:1720px){ - .culture_bril_div .iconimg{margin:0 auto;margin-top:36px;} - .culture_bril_div .iconimg img{margin:0 auto;width:323px;height:178px} - -} -@media screen and (max-width:1459px){ - .culture_bril_div {width:29%;height:450px;background: #fff; overflow: hidden;text-align:center;margin-left:6%;margin-top:80px;margin-bottom:80px;border-radius:16px} - - .culture_bril_div .iconimg{margin:0 auto;margin-top:36px;} - .culture_bril_div .iconimg img{margin:0 auto;width:283px;height:138px} - .culture_bril_div .title{font-size:14px;font-weight:600;font-family: Montserrat-Bold, Montserrat;margin-top:25px;} - .culture_bril_div .subtitle{width:80%;font-size:10px;color: #707070;font-family: Montserrat-Medium, Montserrat;margin-top:15px;margin-left:10%;padding-bottom:5%} -} - -.culture .punctuation { - color: #ff9800; - margin-left: 8px; - font-size: 1.25em; -} -@media screen and (min-width: 1440px) { - .culture-Menu img { - margin: auto; - } - .culture .Container { - width: 1440px; - margin: auto; - } -} -@media screen and (max-width: 1339px) { - .culture-Menu img { - margin: auto; - width: 27%; - } - .culture .Container { - width: 96%; - margin: auto; - } -} -.culture .des { + font-family: Montserrat-Bold, Montserrat; + margin-top: 2rem; width: 90%; - margin: 0 auto 2%; - color: #002855; - line-height: 2em; + margin-left: 5%; } -.culture .line { - width: 4.25%; - height: 5px; - background-color: #002855; - overflow: hidden; - margin: 0 auto 2%; +.orico_Page_productxc .productxcMain .culture_top .culture_bril_con .culture_bril_div .subtitle { + width: 80%; + font-size: 0.875rem; + color: #707070; + font-family: Montserrat-Medium, Montserrat; + margin-top: 1.375rem; + margin-left: 10%; } -.culture-l { - width: 12%; - float: left; - text-align: right; - padding-right: 2%; - line-height: 2em; - padding-top: 2em; - font-family: 'SourceHanSans-Light'; - font-weight: bold; - color: #002855; +.orico_Page_productxc .productxcMain .culture_top .culture_bril_con .culture_bril_div:first-child { + margin-left: 0; } -.culture-l span { - display: block; - position: absolute; - width: 10px; - height: 10px; - border-radius: 5px; - background-color: #002855; - right: -5px; - top: 2.5em; -} -.culture-r { - border-left: 1px solid #b0bbc7; - width: 72%; - float: left; - padding-left: 7%; - line-height: 2em; - padding-top: 2em; - font-family: 'SourceHanSans-Light'; -} -.culture-Menu .Menu { - margin-bottom: 3%; - overflow: hidden; -} -.culture-Menu a { - display: inline-block; - border-radius: 2em; - margin-left: 1%; - color: #009fdf; - text-decoration: none; - cursor: pointer; -} -.culture-Menu .active { - background-color: #002855; - border: 2px solid #002855; - color: #fff; -} -@media screen and (min-width: 480px) { - .culture-Menu a { - padding: 0.5% 2%; - margin-right: 1%; - border: 2px solid #009fdf; - } -} -@media screen and (max-width: 479px) { - .culture-Menu a { - padding: 0.5% 1.5%; - margin-right: 0.5%; - border: 1px solid #009fdf; - } -} - -/*愿景与使命*/ -.culture_vision { +.orico_Page_productxc .productxcMain .culture_vision { background-color: #fff; overflow: hidden; + width: 100%; } -.culture_vision .title { +.orico_Page_productxc .productxcMain .culture_vision .subtitle { + font-size: 1.25rem; + color: #101010; + line-height: 2em; + margin-bottom: 2%; + font-weight: 600; + font-family: Montserrat-Bold, Montserrat; +} +.orico_Page_productxc .productxcMain .culture_vision .swt-Container { + width: 80%; + margin: 0 auto; + max-width: 101.25rem; +} +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .title { font-size: 3em; font-weight: 600; color: #101010; @@ -150,595 +97,63 @@ padding-top: 2.3%; padding-bottom: 2%; line-height: 2em; - font-family: 'LATO-MEDIUM'; + font-family: "LATO-MEDIUM"; } -.culture_vision .left { +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table { + margin-bottom: 4%; +} +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row { + display: table-row; +} +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .left { width: 46.7%; text-align: center; vertical-align: middle; } -.culture_vision .left img,.culture_vision .right img{ - border-radius: 16px; +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .left img { + border-radius: 1rem; } -.culture_vision .center { - width: 6.6%; -} -.culture_vision .right { +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .right { width: 46.7%; text-align: center; vertical-align: middle; } -.culture_vision .subtitle { - font-size: 20px; - color: #101010; - line-height: 2em; - margin-bottom: 2%; - font-weight: 600; - font-family: Montserrat-Bold, Montserrat; -} - -.culture_vision .left p { - text-align: left; - display: inline-block; - width: 90%; -} -.culture_vision .right p { - margin-left: 5%; - text-align: left; +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .right > p { + margin-left: 5%; + text-align: left; display: inline-block; width: 90%; + font-size: 1.25rem; + color: #101010; + line-height: 2em; + margin-bottom: 2%; + font-family: Montserrat-Bold, Montserrat; margin-right: 10%; } -.culture_vision .des { +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .right .des { font-size: 16px; color: #737373; line-height: 1.6rem; - font-family: Montserrat-Medium, Montserrat; + font-family: Montserrat-Medium, Montserrat; } -.culture_vision .swt-Table { - margin-bottom: 4%; -} -@media screen and (max-width: 768px) { - .culture_vision .left, - .culture_vision .right { - width: 100%; - } - .culture_vision p { - width: 90%; - margin-left: 5%; - margin-right: 5%; - } - .culture_vision .subtitle { - margin-top: 5%; - } - .culture_vision_02 { - display: none; - } - .culture_vision_view { - display: block; - } - .culture_vision .left p { - margin-left: 5%; - } -} -@media screen and (min-width: 769px) { - .culture_vision_02 { - display: block; - } - .culture_vision_view { - display: none; - } -} -/*文化与价值观*/ -.culture_new_banner { - width: 100%; - position: absolute; - color: #fff; - bottom: 32vw; - text-align: center; -} -.culture_new_banner .title { - font-size: 3em; - line-height: 2em; -} -.culture_new_banner .des { - font-size: 1em; - line-height: 1.6em; -} -@media screen and (max-width: 1440px) { - .culture_new_banner .title { - font-size: 2em; - line-height: 2em; - } - .culture_new_banner .des { - font-size: 1em; - line-height: 1.6em; - } - .culture_vision .subtitle { - color: #101010; - line-height: 2em; - margin-bottom: 2%; - font-weight: 600; - } - .culture_vision .des { - color: #737373; - line-height: 1.6em; - } - .culture_vision .right p { - margin-left: 0; - - } - .culture_vision .left p { - margin-left: -10%; - } -} -@media screen and (max-width: 768px) { - .culture_new_banner .des { - display: none; - } -} -@media screen and (max-width: 480px) { - .culture_new_banner { - bottom: 30vw; - } - .culture_new_banner .title { - font-size: 1.5em; - } -} - -.culture_new { - width: 100%; -} -.culture_new .title { - font-size: 2em; - color: #101010; - padding: 4.5% 0 0.6%; - font-weight: 600; - line-height: 1.8em; - font-family: 'LATO-MEDIUM'; -} -.culture_new .des { - font-size: 1em; - color: #737373; - width: 70%; - margin: auto; - line-height: 1.6em; -} -.culture_new ul { - margin-top: 3%; - margin-bottom: 3%; -} -.culture_new li { - width: 29.4%; - padding: 1.5%; - box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.1); - margin-bottom: 4%; -} -.culture_new li .list-title { - color: #333333; - font-size: 1em; - text-align: center; - padding-top: 5%; - padding-bottom: 3.5%; - font-weight: 600; -} -.culture_new li .list-des { - color: #737373; - text-align: left; - font-size: 1em; - width: 92%; - line-height: 1.6em; - margin-bottom: 3%; - margin-left: auto; - margin-right: auto; -} -.culture_new .R-margin { - width: 1.4%; - box-shadow: none; +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .Table-Cell { + display: table-cell; + margin: 0; padding: 0; } -.culture_new_gray { - width: 100%; - background-color: #f5f5f5; - padding: 2.8% 0; - overflow: hidden; +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .center { + width: 6.6%; } -.culture_new_gray .center_bg { - background-color: #fff; - overflow: hidden; -} -.culture_new_gray .left { - width: 50.3%; - float: left; -} -.culture_new_gray .right { - width: 49.7%; - float: right; -} -.culture_new_gray .content { - width: 95%; - margin: 3% 2% 3% 3%; -} -.culture_new_gray p { - display: inline-block; - width: 100%; - margin: auto; -} -.culture_new_gray p span { - border-bottom: 2px solid #101010; - display: inline-block; -} -.culture_new_gray .title { - font-size: 1.5em; - color: #101010; - line-height: 1.8em; - margin-bottom: 2.8%; - font-weight: 600; -} -.culture_new_gray .subtitle { - font-size: 1em; +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .culture_vision_02 .des { + font-size: 1rem; color: #737373; - margin-bottom: 2.7%; - line-height: 1.6em; + line-height: 1.6rem; + font-family: Montserrat-Medium, Montserrat; } -.culture_new_gray .des { - font-size: 0.875em; - color: 737373; - line-height: 1.8em; -} - -@media screen and (min-width: 540px) { - .culture_new .swt-Table { - display: table; - width: 100%; - margin-top: 3.4%; - margin-bottom: 4.5%; - } - .culture_new .swt-Table .Table-Row { - display: table-row; - } - .culture_new .swt-Table .Table-Row .Table-Cell { - display: table-cell; - text-align: center; - padding-top: 1.3%; - padding-bottom: 1.3%; - } -} -@media screen and (max-width: 539px) { - .culture_new li { - width: 92%; - text-align: center; - padding-top: 5%; - padding-bottom: 5%; - margin-left: auto; - margin-right: auto; - } - .culture_new .title { - padding: 3% 0 2% 0; - } -} -@media screen and (max-width: 768px) { - .culture_new_gray .right { - width: 100%; - text-align: center; - margin-top: 2%; - } - .culture_new_gray .left { - width: 96%; - margin: auto; - } -} -@media screen and (max-width: 742px) { - .culture_new_gray .right { - margin-top: 0; - } - .culture_new_gray .right img { - width: 100%; - } -} - -/*我们会*/ -.wewill_title { - font-size: 2em; - font-family: 'LATO-MEDIUM'; - font-weight: 600; - color: #101010; -} -.wewill_des { - font-size: 1em; - color: #737373; - line-height: 1.6em; -} -.wewill_des_text { - font-size: 0.875em; - line-height: 1.5em; -} -@media screen and (max-width: 960px) { - .wewill_title { - font-size: 1.5em; - } - .wewill_des { - line-height: 1.4em; - } - .wewill_des_text { - font-size: 1em; - } -} -.cul_line { - width: 40px; - height: 3px; - background: #0e0e0e; - margin: 2% 0; -} - -.wewill_01 { - padding: 3.2% 0; - background-image: url(../../images/culture/wewill_bg.jpg); - overflow: hidden; - background-repeat: no-repeat; -} -.wewill_01 .left { - width: 32.5%; - float: left; -} -.wewill_01 .right { - width: 55%; - float: left; - padding-top: 5%; - padding-left: 6%; -} -.wewill_01 .wewill_des { - margin-top: 4%; -} -@media screen and (max-width: 1280px) { - .wewill_01 .right { - padding-top: 3%; - width: 60%; - } -} -@media screen and (max-width: 960px) { - .wewill_01 .right { - padding-top: 0; - width: 60%; - } - .wewill_01 .wewill_des { - margin-top: 2%; - } -} - -@media screen and (max-width: 480px) { - .wewill_01 .left { - width: 100%; - } - .wewill_01 .wewill_title { - margin-top: 4%; - } - .wewill_01 .right { - width: 100%; - padding: 2% 0 3%; - } - .wewill_01 .wewill_des { - margin-top: 3%; - } -} - -.wewill_bg { - background: #f1f1f1; - padding: 3% 0; -} -.wewill_02 .wewill_title { - text-align: center; - margin-bottom: 2.5%; -} -.wewill_02 .wewill_des { - text-align: center; - font-weight: 600; - color: #333333; - margin-top: 5%; - margin-bottom: 3%; -} -.wewill_02 .text_width { - width: 32.4%; - background-color: #ffffff; - overflow: hidden; - box-shadow: 0px 5px 15px #e6e6e6; -} -.wewill_02 .spacing { - width: 1.4%; -} -.wewill_02 .text_all { - width: 88%; - margin: 6% auto; -} -.wewill_02 .wewill_des_text { +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .culture_vision_02 .des, +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .culture_vision_02 .subtitle { text-align: left; } -.wewill_02 .sub_title { - font-size: 1em; - color: #737373; - width: 70%; - margin: auto; - text-align: center; - margin-bottom: 3%; -} - -.wewill_03 { - background-color: #fff; - overflow: hidden; -} -.wewill_03 .wewill_title { - text-align: center; - margin-bottom: 2.5%; -} -.wewill_03 .wewill_des { - width: 70%; - margin: auto; - text-align: center; -} -.wewill_03 ul { - width: 100%; - margin-top: 3%; -} -.wewill_03 li { - width: 31%; - margin-right: 3.5%; - float: left; -} -.wewill_03 li:last-child { - margin-right: 0; -} -.wewill_03 .wewill_des_text { - font-size: 1.25em; - font-family: 'LATO-MEDIUM'; - color: #333333; - text-align: left; - margin-top: 5%; -} -@media screen and (max-width: 768px) { - .wewill_02 .text_width { - width: 100%; - margin-bottom: 3%; - } - .wewill_02 .spacing { - display: none; - } - .wewill_02 .text_all { - width: 80%; - margin: 6% auto; - text-align: center; - } - .wewill_03 li { - width: 100%; - text-align: center; - overflow: hidden; - } - .wewill_03 li:last-child { - margin-bottom: 0; - } - .wewill_03 .wewill_des_text { - margin-top: 2%; - margin-bottom: 5%; - } - .wewill_03 .wewill_des { - width: 80%; - } -} - -@media screen and (min-width:769px){ - .swt-Table{display: table; width:100%;} - .swt-Table .Table-Row{display: table-row;} - .swt-Table .Table-Row .Table-Cell{display: table-cell; margin:0; padding:0;} -} - -/*我们是*/ -.weare_bg { - background: #f5f5f5; - padding: 3vw 0; - overflow: hidden; -} -.weare_bg_white { - background-color: #fff; -} -.weare_idea .left { - width: 70%; -} -.weare_idea .right { - width: 20%; - vertical-align: middle; - line-height: 1.4em; -} -.weare_idea_all { - width: 90%; - padding: 5%; -} -.weare_idea_all .wewill_title { - margin-bottom: 4%; -} -.weare_idea p { - margin-bottom: 2%; -} -.weare_idea .margin-top { - margin-top: 3.5%; -} - -.weare_03 { - margin-top: 5%; - margin-bottom: 5%; - overflow: hidden; -} -.weare_03 li { - width: 31%; - float: left; - margin-right: 3.5%; - text-align: center; -} -.weare_03 li:last-child { - margin-right: 0; -} -.weare_03 .wewill_des { - font-weight: 600; - margin-top: 3%; - color: #333333; -} -.weare_03 .wewill_des_text { - margin-top: 3%; - overflow: hidden; -} - -.weare_04 .wewill_title { - text-align: center; -} -.weare_04 .wewill_des { - text-align: center; - color: #333333; - margin-top: 1.5%; - font-weight: 600; - font-size: 1.5em; -} -.weare_04 .wewill_des_text { - text-align: center; - margin-top: 1%; - width: 76%; - margin-left: auto; - margin-right: auto; - font-size: 1em; -} -.weare_04 ul { - margin-top: 2%; - overflow: hidden; -} -.weare_04 li { - width: 32%; - margin-right: 2%; - float: left; -} -.weare_04 li:last-child { - margin-right: 0; -} - -@media screen and (max-width: 768px) { - .weare_idea .left { - width: 100%; - text-align: center; - } - .weare_idea .right { - width: 100%; - text-align: center; - padding-bottom: 7%; - overflow: hidden; - } - .weare_idea .right img { - max-width: 100%; - display: block; - } - .weare_03 li { - width: 100%; - margin-top: 3%; - margin-right: 0; - } - .weare_04 li { - width: 100%; - text-align: center; - margin-bottom: 2%; - } +.orico_Page_productxc .productxcMain .culture_vision .swt-Container .culture_vision_02 img { + border-radius: 1rem; } From 8c998eaef164dcce08d19353e16d3864246b7779 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 11:59:16 +0800 Subject: [PATCH 05/25] =?UTF-8?q?feat:=20mobile=E8=81=94=E7=B3=BB=E6=88=91?= =?UTF-8?q?=E4=BB=AC=20-=20=E6=96=87=E5=8C=96=E4=BB=8B=E7=BB=8D=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/view/mobile/about_us/culture.html | 38 +++++++++++++++++++ .../index/mobile/css/aboutus_culture.css | 10 +++++ 2 files changed, 48 insertions(+) create mode 100644 app/index/view/mobile/about_us/culture.html create mode 100644 public/static/index/mobile/css/aboutus_culture.css diff --git a/app/index/view/mobile/about_us/culture.html b/app/index/view/mobile/about_us/culture.html new file mode 100644 index 00000000..2e20214a --- /dev/null +++ b/app/index/view/mobile/about_us/culture.html @@ -0,0 +1,38 @@ +{extend name="public/base" /} +{block name="title"} +{notempty name=":lang_i18n('文化介绍')"}{:lang_i18n('文化介绍')}{else/}{__BLOCK__}{/notempty} +{/block} +{block name="style"} + +{/block} +{block name="main"} +
+ +
+ {notempty name="focus_image"} +
+ + + +
+ {/notempty} + + {notempty name="culture"} + {volist name="culture" id="cul" offset="0" length="3"} +
+
+
{$cul.title}
+
{$cul.desc|raw}
+
+ {/volist} +
+ {volist name="culture" id="cul" offset="3"} +
+
{$cul.title}
+
{$cul.desc|raw}
+ {/volist} +
+ {/notempty} +
+
+{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/aboutus_culture.css b/public/static/index/mobile/css/aboutus_culture.css new file mode 100644 index 00000000..f418b18f --- /dev/null +++ b/public/static/index/mobile/css/aboutus_culture.css @@ -0,0 +1,10 @@ +.oricoEGapp-product { + position: relative; + } + .oricoEGapp-product .img-responsive img { + margin-top: 3.3rem; + } + .oricoEGapp-product .m_vision:last-child { + margin-bottom: 1.875rem; + } + \ No newline at end of file From 20d2b346019278b0b1bae43d8e2043c3c9e3d085 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 15:01:24 +0800 Subject: [PATCH 06/25] =?UTF-8?q?feat:=20mobile=E8=81=94=E7=B3=BB=E6=88=91?= =?UTF-8?q?=E4=BB=AC=20-=20=E5=93=81=E7=89=8C=E9=87=8C=E7=A8=8B=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/controller/AboutUs.php | 1 + app/index/lang/en-us/mobile.php | 12 + app/index/view/mobile/about_us/mileage.html | 106 +++ .../index/mobile/css/aboutus_mileage.css | 709 ++++++++++++++++++ .../static/index/mobile/images/ach-icon.png | Bin 0 -> 520 bytes .../static/index/mobile/images/ach-left.webp | Bin 0 -> 246 bytes .../static/index/mobile/images/ach-right.webp | Bin 0 -> 258 bytes .../index/mobile/images/achievement.jpg | Bin 0 -> 13667 bytes 8 files changed, 828 insertions(+) create mode 100644 app/index/view/mobile/about_us/mileage.html create mode 100644 public/static/index/mobile/css/aboutus_mileage.css create mode 100644 public/static/index/mobile/images/ach-icon.png create mode 100644 public/static/index/mobile/images/ach-left.webp create mode 100644 public/static/index/mobile/images/ach-right.webp create mode 100644 public/static/index/mobile/images/achievement.jpg diff --git a/app/index/controller/AboutUs.php b/app/index/controller/AboutUs.php index 12789f06..0a567d7d 100644 --- a/app/index/controller/AboutUs.php +++ b/app/index/controller/AboutUs.php @@ -88,6 +88,7 @@ class AboutUs extends Common $banner = SysBannerModel::with(['items' => function($query) { $query->where('status', '=', 1)->order(['sort' => 'asc', 'id' => 'desc']); }]) + ->atPlatform(request()->from) ->uniqueLabel([ 'BANNER_67ff786dc9c8d', 'BANNER_67ff7ef1354cf', diff --git a/app/index/lang/en-us/mobile.php b/app/index/lang/en-us/mobile.php index 4301e618..3ad65a6f 100644 --- a/app/index/lang/en-us/mobile.php +++ b/app/index/lang/en-us/mobile.php @@ -129,4 +129,16 @@ return [ '为您提供专属定制服务' => 'How We Can Help with Customization', '对于不同的情况' => 'For Different Situation', ], + + // 关于我们 - 文化介绍 + 'aboutus/culture' => [ + '文化介绍' => 'Culture Introduction', + ], + + // 关于我们 - 品牌历程 + 'aboutus/mileage' => [ + 'ORICO荣耀' => 'Our Achievement', + '品牌里程' => 'Brand Events', + '品牌活动' => 'Tech Development', + ], ]; \ No newline at end of file diff --git a/app/index/view/mobile/about_us/mileage.html b/app/index/view/mobile/about_us/mileage.html new file mode 100644 index 00000000..06c58a3e --- /dev/null +++ b/app/index/view/mobile/about_us/mileage.html @@ -0,0 +1,106 @@ +{extend name="public/base"/} +{block name="style"} + +{/block} +{block name="main"} +
+ +
+
+
+
+ +
+
{:lang_i18n('ORICO荣耀')}
+
+ {notempty name="achievement"} +
    + {volist name="achievement" id="ac"} +
  • +

    $ac['desc_txt_color']])}>{$ac.desc|raw}

    +

    $ac['title_txt_color']])}>{$ac.title}

    +
  • + {/volist} +
+ {/notempty} +
+
+ {notempty name="events"} +
+
{:lang_i18n('品牌里程')}
+
+
+ + + + +
+ {/notempty} + {notempty name="development"} +
+
+
{:lang_i18n('品牌活动')}
+
+ {volist name="development" id="de"} +
+
+ +
+
+ {$de.title} +
+
{$de.desc|raw}
+
+ {/volist} +
+ {/notempty} +
+
+{/block} +{block name="script"} + +{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/aboutus_mileage.css b/public/static/index/mobile/css/aboutus_mileage.css new file mode 100644 index 00000000..4ff5c5a6 --- /dev/null +++ b/public/static/index/mobile/css/aboutus_mileage.css @@ -0,0 +1,709 @@ +.oricoCnLc .swiper-container { + margin-left: auto; + margin-right: auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + z-index: 1; +} + +.oricoCnLc .swiper-wrapper { + position: relative; + width: 90%; + z-index: 1; + display: flex; + transition-property: transform; + box-sizing: content-box; +} + +.oricoCnLc .swiper-container-android .swiper-slide, +.oricoCnLc .swiper-wrapper { + transform: translate3d(0px, 0, 0); +} + +.oricoCnLc .swiper-container-multirow>.swiper-wrapper { + flex-wrap: wrap; +} + +.oricoCnLc .swiper-container-multirow-column>.swiper-wrapper { + flex-wrap: wrap; + flex-direction: column; +} + +.oricoCnLc .swiper-container-free-mode>.swiper-wrapper { + transition-timing-function: ease-out; + margin: 0 auto; +} + +.oricoCnLc .swiper-container-pointer-events { + touch-action: pan-y; +} + +.oricoCnLc .swiper-container-pointer-events.swiper-container-vertical { + touch-action: pan-x; +} + +.oricoCnLc .swiper-slide { + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; + transition-property: transform; +} + +.oricoCnLc .swiper-slide-invisible-blank { + visibility: hidden; +} + +.oricoCnLc .swiper-container-autoheight, +.oricoCnLc .swiper-container-autoheight .swiper-slide { + height: auto; +} + +.oricoCnLc .swiper-container-autoheight .swiper-wrapper { + align-items: flex-start; + transition-property: transform, height; +} + +.oricoCnLc .swiper-container-3d { + perspective: 1200px; +} + +.oricoCnLc .swiper-container-3d .swiper-cube-shadow, +.oricoCnLc .swiper-container-3d .swiper-slide, +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-bottom, +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-left, +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-right, +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-top, +.oricoCnLc .swiper-container-3d .swiper-wrapper { + transform-style: preserve-3d; +} + +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-bottom, +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-left, +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-right, +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-top { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; +} + +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-left { + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} + +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-right { + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} + +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-top { + background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} + +.oricoCnLc .swiper-container-3d .swiper-slide-shadow-bottom { + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} + +.oricoCnLc .swiper-container-css-mode>.swiper-wrapper { + overflow: auto; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.oricoCnLc .swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar { + display: none; +} + +.oricoCnLc .swiper-container-css-mode>.swiper-wrapper>.swiper-slide { + scroll-snap-align: start start; +} + +.oricoCnLc .swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper { + scroll-snap-type: x mandatory; +} + +.oricoCnLc .swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper { + scroll-snap-type: y mandatory; +} + +.oricoCnLc :root { + --swiper-navigation-size: 44px; +} + +.oricoCnLc .swiper-button-next, +.oricoCnLc .swiper-button-prev { + position: absolute; + top: 55%; + width: calc(var(--swiper-navigation-size) / 44 * 27); + height: var(--swiper-navigation-size); + margin-top: calc(0px - var(--swiper-navigation-size) / 2); + z-index: 10; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + color: var(--swiper-navigation-color, var(--swiper-theme-color)); +} + +.oricoCnLc .swiper-button-next.swiper-button-disabled, +.oricoCnLc .swiper-button-prev.swiper-button-disabled { + opacity: 0.35; + cursor: auto; + pointer-events: none; +} + +.oricoCnLc .swiper-button-next:after, +.oricoCnLc .swiper-button-prev:after { + font-family: swiper-icons; + font-size: var(--swiper-navigation-size); + text-transform: none !important; + letter-spacing: 0; + text-transform: none; + font-variant: initial; + line-height: 1; + display: none; +} + +.oricoCnLc .swiper-button-prev, +.oricoCnLc .swiper-container-rtl .swiper-button-next { + left: 0; + right: auto; +} + +.oricoCnLc .swiper-button-next, +.oricoCnLc .swiper-container-rtl .swiper-button-prev { + right: -5px; + left: auto; +} + +.oricoCnLc .swiper-button-next.swiper-button-white, +.oricoCnLc .swiper-button-prev.swiper-button-white { + --swiper-navigation-color: #ffffff; +} + +.oricoCnLc .swiper-button-next.swiper-button-black, +.oricoCnLc .swiper-button-prev.swiper-button-black { + --swiper-navigation-color: #000000; +} + +.oricoCnLc .swiper-button-lock { + display: none; +} + +.oricoCnLc .swiper-pagination { + position: absolute; + text-align: center; + transition: 0.3s opacity; + transform: translate3d(0, 0, 0); + z-index: 10; +} + +.oricoCnLc .swiper-pagination.swiper-pagination-hidden { + opacity: 0; +} + +.oricoCnLc .swiper-container-horizontal>.swiper-pagination-bullets, +.oricoCnLc .swiper-pagination-custom, +.oricoCnLc .swiper-pagination-fraction { + bottom: 10px; + left: 0; + width: 100%; +} + +.oricoCnLc .swiper-pagination-bullets-dynamic { + overflow: hidden; + font-size: 0; +} + +.oricoCnLc .swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transform: scale(0.33); + position: relative; +} + +.oricoCnLc .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { + transform: scale(1); +} + +.oricoCnLc .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main { + transform: scale(1); +} + +.oricoCnLc .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { + transform: scale(0.66); +} + +.oricoCnLc .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { + transform: scale(0.33); +} + +.oricoCnLc .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { + transform: scale(0.66); +} + +.oricoCnLc .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { + transform: scale(0.33); +} + +.oricoCnLc .swiper-pagination-bullet { + width: 8px; + height: 8px; + display: inline-block; + border-radius: 50%; + background: #000; + opacity: 0.2; +} + +.oricoCnLc button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + box-shadow: none; + -webkit-appearance: none; + appearance: none; +} + +.oricoCnLc .swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; +} + +.oricoCnLc .swiper-pagination-bullet-active { + opacity: 1; + background: var(--swiper-pagination-color, var(--swiper-theme-color)); +} + +.oricoCnLc .swiper-container-vertical>.swiper-pagination-bullets { + right: 10px; + top: 50%; + transform: translate3d(0px, -50%, 0); +} + +.oricoCnLc .swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet { + margin: 6px 0; + display: block; +} + +.oricoCnLc .swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + top: 50%; + transform: translateY(-50%); + width: 8px; +} + +.oricoCnLc .swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + display: inline-block; + transition: 0.2s transform, 0.2s top; +} + +.oricoCnLc .swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 4px; +} + +.oricoCnLc .swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + left: 50%; + transform: translateX(-50%); + white-space: nowrap; +} + +.oricoCnLc .swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transition: 0.2s transform, 0.2s left; +} + +.oricoCnLc .swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transition: 0.2s transform, 0.2s right; +} + +.oricoCnLc .swiper-pagination-progressbar { + background: rgba(0, 0, 0, 0.25); + position: absolute; +} + +.oricoCnLc .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: var(--swiper-pagination-color, var(--swiper-theme-color)); + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + transform: scale(0); + transform-origin: left top; +} + +.oricoCnLc .swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + transform-origin: right top; +} + +.oricoCnLc .swiper-container-horizontal>.swiper-pagination-progressbar, +.oricoCnLc .swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { + width: 100%; + height: 4px; + left: 0; + top: 0; +} + +.oricoCnLc .swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite, +.oricoCnLc .swiper-container-vertical>.swiper-pagination-progressbar { + width: 4px; + height: 100%; + left: 0; + top: 0; +} + +.oricoCnLc .swiper-pagination-white { + --swiper-pagination-color: #ffffff; +} + +.oricoCnLc .swiper-pagination-black { + --swiper-pagination-color: #000000; +} + +.oricoCnLc .swiper-pagination-lock { + display: none; +} + +.oricoCnLc .swiper-scrollbar { + border-radius: 10px; + position: relative; + -ms-touch-action: none; + background: rgba(0, 0, 0, 0.1); +} + +.oricoCnLc .swiper-container-horizontal>.swiper-scrollbar { + position: absolute; + left: 1%; + bottom: 3px; + z-index: 50; + height: 5px; + width: 98%; +} + +.oricoCnLc .swiper-container-vertical>.swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; +} + +.oricoCnLc .swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: rgba(0, 0, 0, 0.5); + border-radius: 10px; + left: 0; + top: 0; +} + +.oricoCnLc .swiper-scrollbar-cursor-drag { + cursor: move; +} + +.oricoCnLc .swiper-scrollbar-lock { + display: none; +} + +.oricoCnLc .swiper-zoom-container { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} + +.oricoCnLc .swiper-zoom-container>canvas, +.oricoCnLc .swiper-zoom-container>img, +.oricoCnLc .swiper-zoom-container>svg { + max-width: 100%; + max-height: 100%; + object-fit: contain; +} + +.oricoCnLc .swiper-slide-zoomed { + cursor: move; +} + +.oricoCnLc .swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + transform-origin: 50%; + animation: swiper-preloader-spin 1s infinite linear; + box-sizing: border-box; + border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color)); + border-radius: 50%; + border-top-color: transparent; +} + +.oricoCnLc .swiper-lazy-preloader-white { + --swiper-preloader-color: #fff; +} + +.oricoCnLc .swiper-lazy-preloader-black { + --swiper-preloader-color: #000; +} + +@keyframes swiper-preloader-spin { + 100% { + transform: rotate(360deg); + } +} + +.oricoCnLc .swiper-container .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; +} + +.oricoCnLc .swiper-container-fade.swiper-container-free-mode .swiper-slide { + transition-timing-function: ease-out; +} + +.oricoCnLc .swiper-container-fade .swiper-slide { + pointer-events: none; + transition-property: opacity; +} + +.oricoCnLc .swiper-container-fade .swiper-slide .swiper-slide { + pointer-events: none; +} + +.oricoCnLc .swiper-container-fade .swiper-slide-active, +.oricoCnLc .swiper-container-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} + +.oricoCnLc .swiper-container-cube { + overflow: visible; +} + +.oricoCnLc .swiper-container-cube .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; + visibility: hidden; + transform-origin: 0 0; + width: 100%; + height: 100%; +} + +.oricoCnLc .swiper-container-cube .swiper-slide .swiper-slide { + pointer-events: none; +} + +.oricoCnLc .swiper-container-cube.swiper-container-rtl .swiper-slide { + transform-origin: 100% 0; +} + +.oricoCnLc .swiper-container-cube .swiper-slide-active, +.oricoCnLc .swiper-container-cube .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} + +.oricoCnLc .swiper-container-cube .swiper-slide-active, +.oricoCnLc .swiper-container-cube .swiper-slide-next, +.oricoCnLc .swiper-container-cube .swiper-slide-next+.swiper-slide, +.oricoCnLc .swiper-container-cube .swiper-slide-prev { + pointer-events: auto; + visibility: visible; +} + +.oricoCnLc .swiper-container-cube .swiper-slide-shadow-bottom, +.oricoCnLc .swiper-container-cube .swiper-slide-shadow-left, +.oricoCnLc .swiper-container-cube .swiper-slide-shadow-right, +.oricoCnLc .swiper-container-cube .swiper-slide-shadow-top { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.oricoCnLc .swiper-container-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0px; + width: 100%; + height: 100%; + opacity: 0.6; + z-index: 0; +} + +.oricoCnLc .swiper-container-cube .swiper-cube-shadow:before { + content: ""; + background: #000; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + filter: blur(50px); +} + +.oricoCnLc .swiper-container-flip { + overflow: visible; +} + +.oricoCnLc .swiper-container-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; +} + +.oricoCnLc .swiper-container-flip .swiper-slide .swiper-slide { + pointer-events: none; +} + +.oricoCnLc .swiper-container-flip .swiper-slide-active, +.oricoCnLc .swiper-container-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} + +.oricoCnLc .swiper-container-flip .swiper-slide-shadow-bottom, +.oricoCnLc .swiper-container-flip .swiper-slide-shadow-left, +.oricoCnLc .swiper-container-flip .swiper-slide-shadow-right, +.oricoCnLc .swiper-container-flip .swiper-slide-shadow-top { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.oricoCnLc .gallery-thumbs { + text-align: center; + line-height: 50px; + box-sizing: border-box; + width: 90%; + border-bottom: 1px solid #d4d4d4; + margin-bottom: 1.5rem; +} + +.oricoCnLc .gallery-thumbs .swiper-slide { + width: 4.2rem !important; + height: 90%; + margin-right: 0 !important; + text-align: center; + margin: auto; + font-size: 1rem; + color: #707070; + font-family: "Montserrat-Medium"; +} + +.oricoCnLc .gallery-thumbs .swiper-slide-thumb-active { + border-bottom: 3px solid #004bfa; + border-radius: 0px 0px 0px 0px; + opacity: 1; + color: #004bfa; +} + +.oricoCnLc .nav { + width: 96%; + margin: 0 auto; + position: relative; +} + +.oricoCnLc .gallery-top { + width: 84%; + background: #fff; + border-radius: 1rem; + -webkit-border-radius: 1rem; + -moz-border-radius: 1rem; + -ms-border-radius: 1rem; + -o-border-radius: 1rem; +} + +.oricoCnLc .info { + text-align: left; + font-size: 1rem; +} + +.oricoCnLc .info h5 { + font-size: #000; + font-size: 1rem; + font-family: "Montserrat-Bold"; + padding: 2rem 2rem 0 1rem; + margin: 0; +} + +.oricoCnLc .info p { + color: #707070; + font-family: "Montserrat-Regular"; + padding: 1rem; +} + +.oricoCnLc .m_ach-b { + width: 100%; + margin: auto; + text-align: center; +} + +.oricoCnLc .m_ach-b .title { + font-size: 1.125rem; + font-family: "Montserrat-Bold"; + width: 98%; + margin: auto; + position: relative; + padding: 2rem 0 1.5rem; +} + +.oricoCnLc .m_ach-b .chtitle { + font-size: 1.125rem; + font-family: "Montserrat-Bold"; + width: 98%; + margin: auto; + position: relative; + padding: 1rem 0 1.5rem; +} + +.oricoCnLc .m_ch { + width: 90%; + margin: 1.5rem auto 0; + text-align: center; + background: #fff; + padding: 2rem 1rem; +} + +.oricoCnLc .m_ch-title { + font-size: 1rem; + font-family: "Montserrat-Bold"; + width: 98%; + margin: 1rem auto 0; + padding: 1rem 0 0; + display: flex; + flex-direction: row; + align-items: center; +} + +.oricoCnLc .m_ch-con { + font-size: 0.875; + line-height: 1.5rem; + color: #707070; + font-family: "Montserrat-Regular"; + width: 98%; + margin: 1rem auto; + padding: 0; +} + +.oricoCnLc .ach-bg { + background: #f8f8f8; + width: 80%; + margin: 0 auto 1rem; + padding: 2rem; + border-radius: 1rem; + -webkit-border-radius: 1rem; + -moz-border-radius: 1rem; + -ms-border-radius: 1rem; + -o-border-radius: 1rem; +} \ No newline at end of file diff --git a/public/static/index/mobile/images/ach-icon.png b/public/static/index/mobile/images/ach-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..564bd8156648b1107ab0236eb86c4ea36b8ede30 GIT binary patch literal 520 zcmV+j0{8uiP)Px$!bwCyR5(wqls#({Q5c1vGau`Af|4H)M2nC@1hG*>3~}9Q6cn+t(#|ee+vgYf z2NVKgVOEqxSOhBzZQ=(pt|CUFqQ9Ra< ze#3hF8fo89!0au(N-fpbSmv?Twx4kTlTV0|;RgB)!SPg2=rT9FPZw|FKf_;73!$SY9q-?PIFPyX0Twfe;gRCoj<+g+PQn(7t+s1MA5_#8WrWi}3wczhR4}Hj05!=NQ-{C$Q(8$MY9b-{T#3^{WKf zji5JM0KA0fKj}AoPg6fjMvgBc-E;%FiWfdi{rKB5^LtiH8YWkO8&06<8Va%r+I*y` z?`1oj0-G)XUPr-9>UUY;fxd19p0*L_Oe5RfHx3|eUf%6w<0axlCR>b=T^rLXK{zF% z&MC0_gPiq$BFcG{f4w|?5LQhv;}e~oz?AcLor4b>vJDz{=Kla=K#Z?t`#{wI0000< KMNUMnLSTZj)8~Ky literal 0 HcmV?d00001 diff --git a/public/static/index/mobile/images/ach-left.webp b/public/static/index/mobile/images/ach-left.webp new file mode 100644 index 0000000000000000000000000000000000000000..3473e1b82208dcd60e98386ea7b2243f4b0dc2c3 GIT binary patch literal 246 zcmWIYbaQ*hz`zjh>J$(bU=hIuWD5YXFc>-d1b9>cd5i@ix36t_@b27+tz3>85A0MA zUT2)nW>q3T@#&-Qiyd7w3U0fd{2@`d@Q3EcHGz&t4V?QHy=18EVpx{f6vUuyefstR zs}pP3a-7a+9WXqn!+*y}g?meb_1mxJb`y0}+CB7CK8G=O1u=L_`?DGpdj1W3-@kv# zuVPl9ixdJtE@Ebw%cv#7Ai`i*Ycj=s$zml%^A`*g_&YNhm>;k;C0a0CS;LwAa1VDp s>s^_L9hK4iyv$#D>aEx7J$(bU=hIuWD5YXFc>-d1bCDId5i_px3{hO^Z(-s)8gD#Cx!Cf zOopn0)dx6jFU9fIoeywy(I~j>Ci$7KZsDGbllZia(hST`8!%W^3C;;#psW3wEn}t9 z&+QJuX3W+Lw1U5|OiA^c+bA<}4|AzLGq3#P0M#oBuh#A`|9klM_m%dilD_@cUuhrC z0CbN+9MJXvW`?I9lseEuKiJeu;SLO z`}Ol!Bd6-lzTD3IE?Syl?+&H+ms~u=bOjbqW6b~4o&Nui!L9vk=9Wj+vaY-=|KSkO FbO1^xWN!cf literal 0 HcmV?d00001 diff --git a/public/static/index/mobile/images/achievement.jpg b/public/static/index/mobile/images/achievement.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3403eae8475d9393b4f0f88f255fda8b6cd3092 GIT binary patch literal 13667 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 literal 0 HcmV?d00001 From 11a1450ad580fb2012b9490bfa22d236e21a8c8d Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 15:26:24 +0800 Subject: [PATCH 07/25] =?UTF-8?q?feat:=20mobile=E8=81=94=E7=B3=BB=E6=88=91?= =?UTF-8?q?=E4=BB=AC=20-=20=E5=93=81=E7=89=8C=E6=95=85=E4=BA=8B=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/controller/AboutUs.php | 5 ++- app/index/view/mobile/about_us/story.html | 32 ++++++++++++++++++ .../static/index/mobile/css/aboutus_story.css | 16 +++++++++ .../index/mobile/images/brand-banner.webp | Bin 0 -> 54192 bytes 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 app/index/view/mobile/about_us/story.html create mode 100644 public/static/index/mobile/css/aboutus_story.css create mode 100644 public/static/index/mobile/images/brand-banner.webp diff --git a/app/index/controller/AboutUs.php b/app/index/controller/AboutUs.php index 0a567d7d..69adbb48 100644 --- a/app/index/controller/AboutUs.php +++ b/app/index/controller/AboutUs.php @@ -63,7 +63,8 @@ class AboutUs extends Common // 获取品牌故事banner $banners = SysBannerItemModel::hasWhere('banner', [ 'language_id' => $this->lang_id, - 'unique_label' => 'BANNER_67ff632a5f7aa' + 'unique_label' => 'BANNER_67ff632a5f7aa', + 'at_platform' => request()->from, ]) ->type('image') ->enabled(true) @@ -126,6 +127,7 @@ class AboutUs extends Common ->where('status', '=', 1) ->order(['sort' => 'asc', 'id' => 'desc']); }]) + ->atPlatform(request()->from) ->uniqueLabel([ "BANNER_68075a636e648", "BANNER_68075bf4dd0f5", @@ -159,6 +161,7 @@ class AboutUs extends Common ->where('status', '=', 1) ->order(['sort' => 'asc', 'id' => 'desc']); }]) + ->atPlatform(request()->from) ->uniqueLabel([ "BANNER_6806f5f19c3d6", "BANNER_6806f609b9fe9", diff --git a/app/index/view/mobile/about_us/story.html b/app/index/view/mobile/about_us/story.html new file mode 100644 index 00000000..506c801f --- /dev/null +++ b/app/index/view/mobile/about_us/story.html @@ -0,0 +1,32 @@ +{extend name="public/base" /} +{block name="style"} + +{/block} +{block name="main"} +
+ +
+
+ +
+ {notempty name="banners"} +
+ {volist name="banners" id="ba" offset="0" length="2"} +
{$ba.title}
+
{$ba.desc|raw}
+
+ +
+ {/volist} + {volist name="banners" id="ba" offset="2" length="3"} +
+ +
+
{$ba.title}
+
{$ba.desc|raw}
+ {/volist} +
+ {/notempty} +
+
+{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/aboutus_story.css b/public/static/index/mobile/css/aboutus_story.css new file mode 100644 index 00000000..aed6a043 --- /dev/null +++ b/public/static/index/mobile/css/aboutus_story.css @@ -0,0 +1,16 @@ +.oricoEGapp { + background: #fff; +} + +.oricoEGapp .oricoEGapp-brand { + background: #fff; + position: relative; +} + +.oricoEGapp .oricoEGapp-brand .video-right img { + margin-top: 3.3rem; +} + +.oricoEGapp .oricoEGapp-brand .text-center img { + margin: 0 auto; +} \ No newline at end of file diff --git a/public/static/index/mobile/images/brand-banner.webp b/public/static/index/mobile/images/brand-banner.webp new file mode 100644 index 0000000000000000000000000000000000000000..20af36b7e65e140c3e6c7878ddc4ae186d27f226 GIT binary patch literal 54192 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

!ZNDUbwB0@o2Kyr$SwDswjkX*5{+j_sONG-XFYv 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 Date: Thu, 5 Jun 2025 15:34:26 +0800 Subject: [PATCH 08/25] =?UTF-8?q?fix:=20pc=E4=BA=A7=E5=93=81=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E9=9D=A2=E2=80=9C=E9=A6=96=E9=A1=B5=E2=80=9D?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E5=A4=9A=E8=AF=AD=E8=A8=80=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/lang/en-us/pc.php | 1 + app/index/view/pc/product/detail.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/index/lang/en-us/pc.php b/app/index/lang/en-us/pc.php index 344f4b85..15b56888 100644 --- a/app/index/lang/en-us/pc.php +++ b/app/index/lang/en-us/pc.php @@ -153,6 +153,7 @@ return [ // 产品 - 产品详情页 'product/detail' => [ + '首页' => 'Home', '产品详情' => 'Product Description', '相关产品' => 'Related Products', '发送查询' => 'Send Inquiry', diff --git a/app/index/view/pc/product/detail.html b/app/index/view/pc/product/detail.html index 15b90567..1a696642 100644 --- a/app/index/view/pc/product/detail.html +++ b/app/index/view/pc/product/detail.html @@ -19,7 +19,7 @@

- 首页 + {:lang_i18n('首页')} {volist name="product_categorys" id="ca"}
{$ca.name} From 2ce5ef51698430b08d2adb66133309b7999d54d6 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 15:54:09 +0800 Subject: [PATCH 09/25] =?UTF-8?q?feat:=20mobile=E8=81=94=E7=B3=BB=E6=88=91?= =?UTF-8?q?=E4=BB=AC=20-=20=E5=94=AE=E5=90=8E=E6=94=BF=E7=AD=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/lang/en-us/mobile.php | 10 +++ app/index/view/mobile/about_us/policy.html | 84 +++++++++++++++++++ .../index/mobile/css/aboutus_policy.css | 42 ++++++++++ 3 files changed, 136 insertions(+) create mode 100644 app/index/view/mobile/about_us/policy.html create mode 100644 public/static/index/mobile/css/aboutus_policy.css diff --git a/app/index/lang/en-us/mobile.php b/app/index/lang/en-us/mobile.php index 3ad65a6f..b7e110f2 100644 --- a/app/index/lang/en-us/mobile.php +++ b/app/index/lang/en-us/mobile.php @@ -141,4 +141,14 @@ return [ '品牌里程' => 'Brand Events', '品牌活动' => 'Tech Development', ], + + // 关于我们 - 售后政策 + 'aboutus/policy' => [ + '售后政策_注意事项' => 'After-Sales Policy', + '售后政策' => 'After-sale Policy', + 'ORICO/奥睿科商城为您提供七天包退、15天换新、1年保修、终身维护的服务承诺' => 'ORICO commits to provide 7-day Refund, 15-day Exchange, 1-year Quality Warranty. ', + '为了保障您的合法权益,敬请关注以下信息' => 'For your own benefits, please mind the following information', + '为了得到深圳市元创时代科技有限公司给予您的“包修、包换、包退”的权益,请您:' => 'For a smooth return and refund, quality warranty, please follow these steps:', + '特别说明' => 'ORICO is not liable for:' + ], ]; \ No newline at end of file diff --git a/app/index/view/mobile/about_us/policy.html b/app/index/view/mobile/about_us/policy.html new file mode 100644 index 00000000..543c6b40 --- /dev/null +++ b/app/index/view/mobile/about_us/policy.html @@ -0,0 +1,84 @@ +{extend name="public/base"/} +{block name="title"} +{:lang_i18n('售后政策_注意事项')} +{/block} +{block name="style"} + +{/block} +{block name="main"} +
+ +
+ {notempty name="policy.focus_image"} + + + + {/notempty} +
+ {:lang_i18n('售后政策')} +

{:lang_i18n('ORICO/奥睿科商城为您提供七天包退、15天换新、1年保修、终身维护的服务承诺')}

+
+ {notempty name="policy.banner_1"} + {volist name="policy.banner_1" id="b1"} +
+ {$b1.title} +
{$b1.desc|raw}
+
+ {/volist} + {/notempty} + + {notempty name="policy.banner_2"} + {volist name="policy.banner_2" id="b2"} + +
+ {$b2.title} +
{$b2.desc|raw}
+
+ {/volist} + {/notempty} + + {notempty name="policy.banner_3"} +
+ {:lang_i18n('为了保障您的合法权益,敬请关注以下信息')} +

{:lang_i18n('为了得到深圳市元创时代科技有限公司给予您的“包修、包换、包退”的权益,请您:')}

+
+ {volist name="policy.banner_3" id="b3"} + {$b3.title}
+ {/volist} +
+
+ {/notempty} + + {notempty name="policy.banner_4"} + {volist name="policy.banner_4" id="b4"} + +
+ {$b4.title} +
{$b4.desc|raw}
+
+ {/volist} + {/notempty} + + {notempty name="policy.banner_5"} +
+ {:lang_i18n('特别说明')} +

+ {volist name="policy.banner_5" id="b5" key="k"} + {$k+1}、{$b5.title}
+ {/volist} +

+
+ {/notempty} + + {notempty name="policy.banner_6"} + {volist name="policy.banner_6" id="b6"} + +
+ {$b6.title} +
{$b6.desc|raw}
+
+ {/volist} + {/notempty} +
+
+{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/aboutus_policy.css b/public/static/index/mobile/css/aboutus_policy.css new file mode 100644 index 00000000..0a1193a1 --- /dev/null +++ b/public/static/index/mobile/css/aboutus_policy.css @@ -0,0 +1,42 @@ +.oricoEGapp-policy { + display: flex; + flex-direction: column; + margin-top: 3.3rem; + background: #fff; + padding-bottom: 1rem; +} + +.oricoEGapp-policy .pl-img { + width: 100%; +} + +.oricoEGapp-policy .m_Container { + display: flex; + flex-direction: column; + margin: 0 1rem; + margin-top: 0.5rem; +} + +.oricoEGapp-policy .m_Container .textpoint { + margin-top: 1.12rem; + text-align: center; + color: #333; + font-size: 0.85rem; +} + +.oricoEGapp-policy .m_Container .decs { + margin-top: 0.68rem; + color: #666; + font-size: 0.64rem; + line-height: 1.07rem; + text-align: center; + width: 100%; +} + +.oricoEGapp-policy .m_Container .decs-left { + text-align: left; +} + +.oricoEGapp-policy .m-t { + margin: 0.5rem 0; +} \ No newline at end of file From cd549aa32b83e4513701345eabf9a2fec83a1330 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 16:34:23 +0800 Subject: [PATCH 10/25] =?UTF-8?q?feat:=20mobile=E6=96=87=E7=AB=A0=E9=A6=96?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/controller/Article.php | 12 +++- app/index/view/mobile/article/index.html | 62 +++++++++++++++++++ .../static/index/mobile/css/article_index.css | 7 +++ 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 app/index/view/mobile/article/index.html create mode 100644 public/static/index/mobile/css/article_index.css diff --git a/app/index/controller/Article.php b/app/index/controller/Article.php index 367444cb..23660acc 100644 --- a/app/index/controller/Article.php +++ b/app/index/controller/Article.php @@ -32,7 +32,8 @@ class Article extends Common // 获取banner焦点图 $banner = SysBannerItemModel::hasWhere('banner', [ 'language_id' => $this->lang_id, - 'unique_label' => 'BANNER_67f9fc71e27db' + 'unique_label' => 'BANNER_67f9fc71e27db', + 'at_platform' => request()->from ]) ->type('image') ->visible(['id', 'title', 'image', 'link']) @@ -58,7 +59,8 @@ class Article extends Common 'id', 'title', 'desc', - 'image' + 'image', + 'release_time' ]) ->withSearch(['title'], ['title' => $param['keywords']??null]) ->category($param['cid']??$categorys[0]['id']) @@ -67,8 +69,12 @@ class Article extends Common ->paginate([ 'list_rows' => $param['size'], 'page' => $param['page'], + 'query' => request()->param([ + 'cid', + 'keywords', + ]) // 保留查询参数,防止分页丢失 ]); - } + } View::assign('articles', $articles??[]); return View::fetch('index'); diff --git a/app/index/view/mobile/article/index.html b/app/index/view/mobile/article/index.html new file mode 100644 index 00000000..676293f2 --- /dev/null +++ b/app/index/view/mobile/article/index.html @@ -0,0 +1,62 @@ +{extend name="public/base" /} +{block name="style"} + +{/block} +{block name="main"} +
+ +
+ + {notempty name="banner.image"} + + {/notempty} + +
+
+
+ {volist name="categorys" id="ca"} + {if condition="$Request.get.cid == $ca.id || (!$Request.has.cid && $key == 0)"} + + {else/} + + {/if} + {$ca.name} + + {/volist} +
+
+ + + {notempty name="articles"} +
+ +
+ +
{$articles|raw}
+ + {/notempty} +
+
+
+
+
+{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/article_index.css b/public/static/index/mobile/css/article_index.css new file mode 100644 index 00000000..be7b1a94 --- /dev/null +++ b/public/static/index/mobile/css/article_index.css @@ -0,0 +1,7 @@ +.oricoEGapp-article { + position: relative; +} + +.oricoEGapp-article .img-responsive img { + margin-top: 3.3rem; +} \ No newline at end of file From d7d8a9cfbf7c2aa94e646659e82f86ce74a28833 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 16:50:19 +0800 Subject: [PATCH 11/25] =?UTF-8?q?refactor:=20=E5=90=8E=E5=8F=B0=E6=96=87?= =?UTF-8?q?=E7=AB=A0=E5=88=97=E8=A1=A8=E5=9B=BE=E7=89=87=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E7=BC=A9=E7=95=A5=E5=9B=BE=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/Article.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/admin/controller/v1/Article.php b/app/admin/controller/v1/Article.php index ba60d6b7..bcd1d5e2 100644 --- a/app/admin/controller/v1/Article.php +++ b/app/admin/controller/v1/Article.php @@ -55,7 +55,8 @@ class Article 'category', 'category_id' ]) - ->bindAttr('category', ['category_name' => 'name']); + ->bindAttr('category', ['category_name' => 'name']) + ->each(fn($item) => $item->image = thumb($item->image)); return success('获取成功', $article); } From 6b4049ca62c2718af9964f3bcb377aa237b6184b Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 16:52:55 +0800 Subject: [PATCH 12/25] =?UTF-8?q?refactor:=20=E5=90=8E=E5=8F=B0=E9=99=84?= =?UTF-8?q?=E4=BB=B6=E5=88=86=E9=A1=B5=E5=88=97=E8=A1=A8=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E6=94=B9=E7=BC=A9=E7=95=A5=E5=9B=BE=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/Attachment.php | 3 ++- app/admin/controller/v1/AttachmentTrash.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/admin/controller/v1/Attachment.php b/app/admin/controller/v1/Attachment.php index ba51b77b..08c27a7d 100644 --- a/app/admin/controller/v1/Attachment.php +++ b/app/admin/controller/v1/Attachment.php @@ -48,7 +48,8 @@ class Attachment 'page' => $params['page'] ]) ->bindAttr('category', ['category_name']) - ->hidden(['category_id', 'category']); + ->hidden(['category_id', 'category']) + ?->each(fn($item) => $item->image = thumb($item->image)); return success('获取成功', $attachments); } diff --git a/app/admin/controller/v1/AttachmentTrash.php b/app/admin/controller/v1/AttachmentTrash.php index bbe40647..59c1515e 100644 --- a/app/admin/controller/v1/AttachmentTrash.php +++ b/app/admin/controller/v1/AttachmentTrash.php @@ -46,7 +46,8 @@ class AttachmentTrash 'page' => $params['page'] ]) ->bindAttr('category', ['category_name']) - ->hidden(['category_id', 'category']); + ->hidden(['category_id', 'category']) + ?->each(fn($item) => $item->image = thumb($item->image)); return success('获取成功', $attachments); } From f51f39c8930ab31fa59f1049b7dfdbec7f5fcfe5 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 16:57:50 +0800 Subject: [PATCH 13/25] =?UTF-8?q?refactor:=20=E5=90=8E=E5=8F=B0=E6=96=87?= =?UTF-8?q?=E7=AB=A0=E5=9B=9E=E6=94=B6=E7=AB=99=E5=88=86=E9=A1=B5=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=94=B9=E4=B8=BA=E7=BC=A9=E7=95=A5=E5=9B=BE=E8=BE=93?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/ArticleTrash.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/admin/controller/v1/ArticleTrash.php b/app/admin/controller/v1/ArticleTrash.php index daef9ecc..349b5b50 100644 --- a/app/admin/controller/v1/ArticleTrash.php +++ b/app/admin/controller/v1/ArticleTrash.php @@ -39,7 +39,8 @@ class ArticleTrash 'list_rows' => $param['size'] ]) ->hidden(['category_id', 'category']) - ->bindAttr('category', ['category_name' => 'name']); + ->bindAttr('category', ['category_name' => 'name']) + ?->each(fn($item) => $item->image = thumb($item->image)); return success('获取成功', $data); } From f8d884b408525e639c864c4f384db0a46aa5cfda Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 16:59:47 +0800 Subject: [PATCH 14/25] =?UTF-8?q?refactor:=20=E5=90=8E=E5=8F=B0=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=88=86=E9=A1=B5=E5=9B=BE=E7=89=87=E6=94=B9=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/Product.php | 3 ++- app/admin/controller/v1/ProductTrash.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/admin/controller/v1/Product.php b/app/admin/controller/v1/Product.php index 98e1080e..74ffbafa 100644 --- a/app/admin/controller/v1/Product.php +++ b/app/admin/controller/v1/Product.php @@ -63,7 +63,8 @@ class Product 'page' => $param['page'], ]) ->bindAttr('category', ['category_name' => 'name']) - ->hidden(['category_id', 'category']); + ->hidden(['category_id', 'category']) + ?->each(fn($item) => $item->cover_image = thumb($item->cover_image)); return success('获取成功', $products); } diff --git a/app/admin/controller/v1/ProductTrash.php b/app/admin/controller/v1/ProductTrash.php index 85cab381..456e624d 100644 --- a/app/admin/controller/v1/ProductTrash.php +++ b/app/admin/controller/v1/ProductTrash.php @@ -55,7 +55,8 @@ class ProductTrash 'page' => $param['page'], ]) ->bindAttr('category', ['category_name' => 'name']) - ->hidden(['category_id', 'category']); + ->hidden(['category_id', 'category']) + ?->each(fn($item) => $item->cover_image = thumb($item->cover_image)); return success('获取成功', $products); } From 5a4897ebb2e0ac41a4fb313289c5d88c662cf336 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 5 Jun 2025 17:01:48 +0800 Subject: [PATCH 15/25] =?UTF-8?q?refactor:=20=E5=90=8E=E5=8F=B0=E9=97=AE?= =?UTF-8?q?=E7=AD=94=E5=88=86=E9=A1=B5=E5=9B=BE=E7=89=87=E6=94=B9=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/Faq.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/admin/controller/v1/Faq.php b/app/admin/controller/v1/Faq.php index 741c749c..b9a30934 100644 --- a/app/admin/controller/v1/Faq.php +++ b/app/admin/controller/v1/Faq.php @@ -38,7 +38,8 @@ class Faq ->paginate([ 'list_rows' => $param['size'], 'page' => $param['page'], - ]); + ]) + ?->each(fn($item) => $item->image = thumb($item->image)); return success('获取成功', $faqs); } From d1711389dc244656742db4c5674e564d7de4e18e Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Fri, 6 Jun 2025 10:29:53 +0800 Subject: [PATCH 16/25] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/OperateLog.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/admin/controller/v1/OperateLog.php b/app/admin/controller/v1/OperateLog.php index 7134827d..219cfdb2 100644 --- a/app/admin/controller/v1/OperateLog.php +++ b/app/admin/controller/v1/OperateLog.php @@ -4,6 +4,7 @@ declare (strict_types = 1); namespace app\admin\controller\v1; use app\admin\model\v1\SysOperateLog; +use app\admin\model\v1\SysUserModel; /** * 操作日志控制器 @@ -21,11 +22,15 @@ class OperateLog 'size/d' ]); - $logs = SysOperateLog::hasWhere('user', function($query) use($param) { + $logs = SysOperateLog::field([ + 'SysOperateLog.*', + 'SysUserModel.username' + ]) + ->hasWhere('user', function($query) use($param) { if (!empty($param['operator'])) { - $query->where('username', 'like', "{$param['operator']}"); + $query->where('username', 'like', "%{$param['operator']}%"); } - $query->field(['id', 'username']); + $query->withTrashed()->field(['id', 'username']); }) ->withSearch(['title', 'created_at'], [ 'title' => $param['title'] ?? null, @@ -36,7 +41,6 @@ class OperateLog 'list_rows' => $param['size'] ?? 10, 'page' => $param['page'] ?? 1, ]) - ->bindAttr('user', ['username']) ->hidden(['user_id', 'user']); return success('获取成功', $logs); From 732132f2871fcf7b5304f5c320912c83b34f742c Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Fri, 6 Jun 2025 11:05:55 +0800 Subject: [PATCH 17/25] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=A8=AA?= =?UTF-8?q?=E5=B9=85=E5=88=86=E9=A1=B5=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/BannerItem.php | 7 ++++--- app/admin/model/v1/SysBannerItemModel.php | 4 +--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/admin/controller/v1/BannerItem.php b/app/admin/controller/v1/BannerItem.php index 17243489..85f2d0c2 100644 --- a/app/admin/controller/v1/BannerItem.php +++ b/app/admin/controller/v1/BannerItem.php @@ -33,10 +33,10 @@ class BannerItem 'item.sort', 'item.status', 'item.created_at', - 'banner.name' => 'banner_name' + 'bnr.name' => 'banner_name' ]) - ->join('sys_banner banner', 'banner.id = item.banner_id') - ->where('banner.language_id', '=', request()->lang_id) + ->join('sys_banner bnr', 'bnr.id = item.banner_id') + ->where('bnr.language_id', '=', request()->lang_id) ->where(function($query) use($param){ if (!empty($param['banner_id'])) { $query->where('item.banner_id', '=', $param['banner_id']); @@ -77,6 +77,7 @@ class BannerItem 'updated_at', 'deleted_at' ]) + ->append(['rel_prod_cate_id', 'rel_prod_cate_name']) // 绑定产品分类关联模型中字段到父模型中 ->find($id); if (empty($banner_item)) { return error('横幅不存在'); diff --git a/app/admin/model/v1/SysBannerItemModel.php b/app/admin/model/v1/SysBannerItemModel.php index e06dd586..abcd7f61 100644 --- a/app/admin/model/v1/SysBannerItemModel.php +++ b/app/admin/model/v1/SysBannerItemModel.php @@ -17,8 +17,6 @@ class SysBannerItemModel extends SysBannerItemBaseModel // 软删除字段 protected $deleteTime = 'deleted_at'; - // 绑定产品分类关联模型中字段到父模型 - protected $append = ['rel_prod_cate_id', 'rel_prod_cate_name']; // 要隐藏的字段或关联模型数据字段 protected $hidden = ['prodMapping']; @@ -62,7 +60,7 @@ class SysBannerItemModel extends SysBannerItemBaseModel } if (is_array($value)) { if (count($value) > 1) { - $query->whereBetweenTime ('created_at', $value[0], $value[1]); + $query->whereBetweenTime('created_at', $value[0], $value[1]); } else { $query->whereTime('created_at', '>=', $value[0]); } From a8211560770b109aaae7e0aa50095bd1494abcc6 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Fri, 6 Jun 2025 11:24:58 +0800 Subject: [PATCH 18/25] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9=E5=87=A0?= =?UTF-8?q?=E5=9C=A8=E6=A8=A1=E5=9D=97=E6=94=AF=E6=8C=81=E5=A4=9A=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/Article.php | 6 +++++- app/admin/controller/v1/BannerItem.php | 12 ++++++++++-- app/admin/model/v1/ArticleModel.php | 8 ++++++++ app/admin/model/v1/AttachmentModel.php | 4 ++++ app/admin/model/v1/ProductModel.php | 8 ++++++++ app/admin/model/v1/SysBannerItemModel.php | 4 ++++ app/admin/model/v1/VideoModel.php | 4 ++++ 7 files changed, 43 insertions(+), 3 deletions(-) diff --git a/app/admin/controller/v1/Article.php b/app/admin/controller/v1/Article.php index bcd1d5e2..4c4adf55 100644 --- a/app/admin/controller/v1/Article.php +++ b/app/admin/controller/v1/Article.php @@ -39,7 +39,11 @@ class Article ->language(request()->lang_id) ->where(function($query) use($param) { if (isset($param['category_id'])) { - $query->where('category_id', '=', $param['category_id']); + if (str_contains($param['category_id'], ',') || is_array($param['category_id'])) { + $query->whereIn('category_id', $param['category_id']); + } else { + $query->where('category_id', '=', $param['category_id']); + } } }) ->withSearch(['title', 'release_time'], [ diff --git a/app/admin/controller/v1/BannerItem.php b/app/admin/controller/v1/BannerItem.php index 85f2d0c2..7844309e 100644 --- a/app/admin/controller/v1/BannerItem.php +++ b/app/admin/controller/v1/BannerItem.php @@ -39,7 +39,11 @@ class BannerItem ->where('bnr.language_id', '=', request()->lang_id) ->where(function($query) use($param){ if (!empty($param['banner_id'])) { - $query->where('item.banner_id', '=', $param['banner_id']); + if (is_array($param['banner_id']) || str_contains($param['banner_id'], ',')) { + $query->whereIn('item.banner_id', $param['banner_id']); + } else { + $query->where('item.banner_id', '=', $param['banner_id']); + } } if (!empty($param['title'])) { $query->where('item.title', 'like', "%{$param['title']}%"); @@ -284,7 +288,11 @@ class BannerItem ->where('banner.language_id', '=', request()->lang_id) ->where(function($query) use($param){ if (!empty($param['banner_id'])) { - $query->where('item.banner_id', '=', $param['banner_id']); + if (is_array($param['banner_id']) || str_contains($param['banner_id'], ',')) { + $query->whereIn('item.banner_id', $param['banner_id']); + } else { + $query->where('item.banner_id', '=', $param['banner_id']); + } } if (!empty($param['title'])) { $query->where('item.title', 'like', "%{$param['title']}%"); diff --git a/app/admin/model/v1/ArticleModel.php b/app/admin/model/v1/ArticleModel.php index 9d20a662..763f1a74 100644 --- a/app/admin/model/v1/ArticleModel.php +++ b/app/admin/model/v1/ArticleModel.php @@ -85,6 +85,10 @@ class ArticleModel extends ArticleBaseModel // 分类查询 public function scopeCategory($query, $value) { + if (is_array($value) || str_contains($value, ',')) { + $query->whereIn('category_id', $value); + return; + } $query->where('category_id', '=', $value); } public function scopeCategoryNullable($query, $value) @@ -92,6 +96,10 @@ class ArticleModel extends ArticleBaseModel if (is_null($value)) { return; } + if (is_array($value) || str_contains($value, ',')) { + $query->whereIn('category_id', $value); + return; + } $query->where('category_id', '=', $value); } } diff --git a/app/admin/model/v1/AttachmentModel.php b/app/admin/model/v1/AttachmentModel.php index 21a6006d..f2dc1c6a 100644 --- a/app/admin/model/v1/AttachmentModel.php +++ b/app/admin/model/v1/AttachmentModel.php @@ -58,6 +58,10 @@ class AttachmentModel extends AttachmentBaseModel public function scopeCategoryId($query, $value) { if (empty($value)) return; + if (is_array($value) || str_contains($value, ',')) { + $query->whereIn('category_id', $value); + return; + } $query->where('category_id', '=', $value); } } diff --git a/app/admin/model/v1/ProductModel.php b/app/admin/model/v1/ProductModel.php index e73fe5e5..8f970687 100644 --- a/app/admin/model/v1/ProductModel.php +++ b/app/admin/model/v1/ProductModel.php @@ -65,10 +65,18 @@ class ProductModel extends ProductBaseModel if (is_null($value)) { return; } + if (is_array($value) || str_contains($value, ',')) { + $query->whereIn('category_id', $value); + return; + } $query->where('category_id', '=', $value); } public function scopeCategory($query, $value) { + if (is_array($value) || str_contains($value, ',')) { + $query->whereIn('category_id', $value); + return; + } $query->where('category_id', '=', $value); } diff --git a/app/admin/model/v1/SysBannerItemModel.php b/app/admin/model/v1/SysBannerItemModel.php index abcd7f61..884efe77 100644 --- a/app/admin/model/v1/SysBannerItemModel.php +++ b/app/admin/model/v1/SysBannerItemModel.php @@ -71,6 +71,10 @@ class SysBannerItemModel extends SysBannerItemBaseModel public function scopeBannerId($query, $value) { if (is_null($value)) return; + if (is_array($value) || str_contains($value, ',')) { + $query->whereIn('banner_id', $value); + return; + } $query->where('banner_id', '=', $value); } } diff --git a/app/admin/model/v1/VideoModel.php b/app/admin/model/v1/VideoModel.php index 9f029c9c..08d1bfc3 100644 --- a/app/admin/model/v1/VideoModel.php +++ b/app/admin/model/v1/VideoModel.php @@ -62,6 +62,10 @@ class VideoModel extends VideoBaseModel if (empty($value)) { return; } + if (is_array($value) || str_contains($value, ',')) { + $query->whereIn('category_id', $value); + return; + } $query->where('category_id', '=', $value); } } From e844cc31664d1144a0dc1a7de05ead5d38ea11cf Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Fri, 6 Jun 2025 15:10:27 +0800 Subject: [PATCH 19/25] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=AE=B0=E5=BD=95=E8=A1=A8=E8=BF=81=E7=A7=BB=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=8F=8A=E6=9B=B4=E6=96=B0=E5=85=B6=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20250315083649_create_sys_restful_api.php | 171 +++++++++++++++ database/seeds/SysRestfulApiDataInit.php | 195 ++++++++++++++++++ 2 files changed, 366 insertions(+) create mode 100644 database/seeds/SysRestfulApiDataInit.php diff --git a/database/migrations/20250315083649_create_sys_restful_api.php b/database/migrations/20250315083649_create_sys_restful_api.php index 8520d7bf..f72d97e6 100644 --- a/database/migrations/20250315083649_create_sys_restful_api.php +++ b/database/migrations/20250315083649_create_sys_restful_api.php @@ -40,5 +40,176 @@ class CreateSysRestfulApi extends Migrator ->addColumn('created_at', 'timestamp', ['null' => false,'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间']) ->addColumn('updated_at', 'timestamp', ['null' => true,'default' => 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP', 'comment' => '更新时间']) ->create(); + + // 初始化数据 + $table->insert([ + ['name' => '登录接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'UserCenter', 'action' => 'login', 'rule' => 'v1/user/login', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '获取验证码', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Captcha', 'action' => 'index', 'rule' => 'v1/user/captcha', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '获取用户菜单权限', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'menu', 'rule' => 'v1/user/:id/menu', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '退出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'UserCenter', 'action' => 'logout', 'rule' => 'v1/user/logout', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '语言列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Language', 'action' => 'list', 'rule' => 'v1/language/list', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '语言切换接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Language', 'action' => 'cutover', 'rule' => 'v1/language/cutover/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '国家列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Country', 'action' => 'list', 'rule' => 'v1/country/list', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '获取系统信息接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'System', 'action' => 'info', 'rule' => 'v1/system/info', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '获取系统前台各模块url', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'System', 'action' => 'urls', 'rule' => 'v1/system/urls', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '文章分类分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'index', 'rule' => 'v1/article/category/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类列表数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'list', 'rule' => 'v1/article/categorys', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类数据新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'save', 'rule' => 'v1/article/category/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类数据更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'update', 'rule' => 'v1/article/category/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类数据删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'delete', 'rule' => 'v1/article/category/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类数据详细接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'read', 'rule' => 'v1/article/category/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'sort', 'rule' => 'v1/article/category/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '评论分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleLeaveMessage', 'action' => 'index', 'rule' => 'v1/article/message/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '评论审核/反审核接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleLeaveMessage', 'action' => 'audit', 'rule' => 'v1/article/message/audit/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '评论删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleLeaveMessage', 'action' => 'delete', 'rule' => 'v1/article/message/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '评论导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleLeaveMessage', 'action' => 'export', 'rule' => 'v1/article/message/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章回收站分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleTrash', 'action' => 'index', 'rule' => 'v1/article/trash/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章恢复接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleTrash', 'action' => 'restore', 'rule' => 'v1/article/trash/restore/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleTrash', 'action' => 'delete', 'rule' => 'v1/article/trash/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'index', 'rule' => 'v1/article/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '文章详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'read', 'rule' => 'v1/article/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '文章新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'save', 'rule' => 'v1/article/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '文章更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'update', 'rule' => 'v1/article/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'delete', 'rule' => 'v1/article/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'export', 'rule' => 'v1/article/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'sort', 'rule' => 'v1/article/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)列表接口(下拉框场景)', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'list', 'rule' => 'v1/banner/list', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'index', 'rule' => 'v1/banner/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'read', 'rule' => 'v1/banner/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'save', 'rule' => 'v1/banner/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'update', 'rule' => 'v1/banner/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'delete', 'rule' => 'v1/banner/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅项分页列表', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'index', 'rule' => 'v1/banner/items/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅项详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'read', 'rule' => 'v1/banner/items/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'save', 'rule' => 'v1/banner/items/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'update', 'rule' => 'v1/banner/items/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'delete', 'rule' => 'v1/banner/items/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'sort', 'rule' => 'v1/banner/items/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'export', 'rule' => 'v1/banner/items/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '图片上传接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Upload', 'action' => 'image', 'rule' => 'v1/images/:module/upload', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'index', 'rule' => 'v1/video/category/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'list', 'rule' => 'v1/video/categorys', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'read', 'rule' => 'v1/video/category/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'save', 'rule' => 'v1/video/category/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'update', 'rule' => 'v1/video/category/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'sort', 'rule' => 'v1/video/category/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'delete', 'rule' => 'v1/video/category/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频回收站分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoTrash', 'action' => 'index', 'rule' => 'v1/video/trash/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频回收站恢复操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoTrash', 'action' => 'restore', 'rule' => 'v1/video/trash/restore/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频回收站删除操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoTrash', 'action' => 'delete', 'rule' => 'v1/video/trash/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频上传接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Upload', 'action' => 'video', 'rule' => 'v1/video/:module/upload', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'index', 'rule' => 'v1/video/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'read', 'rule' => 'v1/video/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'save', 'rule' => 'v1/video/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'update', 'rule' => 'v1/video/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'delete', 'rule' => 'v1/video/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'export', 'rule' => 'v1/video/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '产品分类树接口(下拉框场景)', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'categorys', 'rule' => 'v1/product/categorys', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品分类树接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'index', 'rule' => 'v1/product/category/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品分类详细接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'read', 'rule' => 'v1/product/category/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品分类更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'update', 'rule' => 'v1/product/category/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品分类新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'save', 'rule' => 'v1/product/category/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品分类删除操作', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'delete', 'rule' => 'v1/product/category/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'sort', 'rule' => 'v1/product/category/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '设置是否显示接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'show', 'rule' => 'v1/product/category/show/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '成本系统分类树接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductTcoCategory', 'action' => 'tree', 'rule' => 'v1/product/category/tco/tree', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'index', 'rule' => 'v1/product/attr/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性详细接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'read', 'rule' => 'v1/product/attr/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'save', 'rule' => 'v1/product/attr/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性更新操作', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'update', 'rule' => 'v1/product/attr/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'delete', 'rule' => 'v1/product/attr/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品回收站分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductTrash', 'action' => 'index', 'rule' => 'v1/product/trash/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品回收站复恢操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductTrash', 'action' => 'restore', 'rule' => 'v1/product/trash/restore/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品回收站删除操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductTrash', 'action' => 'delete', 'rule' => 'v1/product/trash/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '购买平台列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'platforms', 'rule' => 'v1/product/buypass/platforms', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '购买链接分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'index', 'rule' => 'v1/product/buypass/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '添加产品购买链接接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'save', 'rule' => 'v1/product/buypass/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '更新产品购买链接接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'update', 'rule' => 'v1/product/buypass/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '购买链接导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'export', 'rule' => 'v1/product/buypass/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '购买链接导入接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'import', 'rule' => 'v1/product/buypass/import', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'index', 'rule' => 'v1/product/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品数据详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'read', 'rule' => 'v1/product/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '删除产品数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'delete', 'rule' => 'v1/product/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '上/下架操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'updownShelves', 'rule' => 'v1/product/updown_shelves/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '更新产品数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'update', 'rule' => 'v1/product/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性特征列表', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'index', 'rule' => 'v1/product/attrs', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品数据导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'export', 'rule' => 'v1/product/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'sort', 'rule' => 'v1/product/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '附件(下载管理)分类树接口(下拉框场景)', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'tree', 'rule' => 'v1/attachment/tree', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类树接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'index', 'rule' => 'v1/attachment/category/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)分类详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'read', 'rule' => 'v1/attachment/category/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'save', 'rule' => 'v1/attachment/category/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'update', 'rule' => 'v1/attachment/category/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'sort', 'rule' => 'v1/attachment/category/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'delete', 'rule' => 'v1/attachment/category/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)回收站分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentTrash', 'action' => 'index', 'rule' => 'v1/attachment/trash/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)回收站恢复操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentTrash', 'action' => 'restore', 'rule' => 'v1/attachment/trash/restore/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)回收站删除操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentTrash', 'action' => 'delete', 'rule' => 'v1/attachment/trash/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'index', 'rule' => 'v1/attachment/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件上传接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Upload', 'action' => 'attachment', 'rule' => 'v1/attachment/upload', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'read', 'rule' => 'v1/attachment/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'save', 'rule' => 'v1/attachment/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'update', 'rule' => 'v1/attachment/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'sort', 'rule' => 'v1/attachment/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'delete', 'rule' => 'v1/attachment/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)禁/启用操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'enable', 'rule' => 'v1/attachment/enable/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '角色分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'index', 'rule' => 'v1/role/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'save', 'rule' => 'v1/role/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'read', 'rule' => 'v1/role/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'update', 'rule' => 'v1/role/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'delete', 'rule' => 'v1/role/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'index', 'rule' => 'v1/roles', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'index', 'rule' => 'v1/user/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'read', 'rule' => 'v1/user/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'save', 'rule' => 'v1/user/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'update', 'rule' => 'v1/user/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'delete', 'rule' => 'v1/user/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '问答分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'index', 'rule' => 'v1/faq/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '问答详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'read', 'rule' => 'v1/faq/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '问答新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'save', 'rule' => 'v1/faq/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '问答更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'update', 'rule' => 'v1/faq/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '问答设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'sort', 'rule' => 'v1/faq/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '问答删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'delete', 'rule' => 'v1/faq/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '留言记录(联系我们)分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'LeaveMessage', 'action' => 'index', 'rule' => 'v1/leavemsg/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '留言记录(联系我们)导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'LeaveMessage', 'action' => 'export', 'rule' => 'v1/leavemsg/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '批量采购询盘分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BulkPurchaseInquiry', 'action' => 'index', 'rule' => 'v1/bp/inquiry/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '批量采购询盘导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BulkPurchaseInquiry', 'action' => 'export', 'rule' => 'v1/bp/inquiry/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '批量采购询盘可选品类列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BulkPurchaseInquiry', 'action' => 'interested', 'rule' => 'v1/bp/inquiry/interested', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '代理商企业规模类型接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Agent', 'action' => 'enterpriseSizeTypes', 'rule' => 'v1/agent/enterprise_size_types', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '代理商分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Agent', 'action' => 'index', 'rule' => 'v1/agent/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '代理商导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Agent', 'action' => 'export', 'rule' => 'v1/agent/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '产品询盘分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductInquiry', 'action' => 'index', 'rule' => 'v1/product/inquiry/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '菜单树形结构接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'index', 'rule' => 'v1/menu/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '菜单树形结构(选项框/权限分配场景)接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'list', 'rule' => 'v1/menus', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '菜单详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'read', 'rule' => 'v1/menu/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'save', 'rule' => 'v1/menu/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'update', 'rule' => 'v1/menu/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'delete', 'rule' => 'v1/menu/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'export', 'rule' => 'v1/menu/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单导入接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'import', 'rule' => 'v1/menu/import', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'sort', 'rule' => 'v1/menu/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'index', 'rule' => 'v1/navigation/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'read', 'rule' => 'v1/navigation/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'save', 'rule' => 'v1/navigation/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'update', 'rule' => 'v1/navigation/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'delete', 'rule' => 'v1/navigation/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类列表(选项框场景使用)接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'list', 'rule' => 'v1/navigation/list', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航列表树接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'index', 'rule' => 'v1/navigation/items/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'read', 'rule' => 'v1/navigation/items/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'save', 'rule' => 'v1/navigation/items/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'update', 'rule' => 'v1/navigation/items/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'sort', 'rule' => 'v1/navigation/items/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'delete', 'rule' => 'v1/navigation/items/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '获取配置内容接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SiteConfig', 'action' => 'index', 'rule' => 'v1/site/config/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '站点配置更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SiteConfig', 'action' => 'update', 'rule' => 'v1/site/config/update', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'index', 'rule' => 'v1/config/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项分组接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'groups', 'rule' => 'v1/config/groups', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项类型接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'types', 'rule' => 'v1/config/types', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'read', 'rule' => 'v1/config/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'save', 'rule' => 'v1/config/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'update', 'rule' => 'v1/config/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'delete', 'rule' => 'v1/config/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项导入接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'import', 'rule' => 'v1/config/import', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'] + ]); } } diff --git a/database/seeds/SysRestfulApiDataInit.php b/database/seeds/SysRestfulApiDataInit.php new file mode 100644 index 00000000..6ea933b8 --- /dev/null +++ b/database/seeds/SysRestfulApiDataInit.php @@ -0,0 +1,195 @@ + '登录接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'UserCenter', 'action' => 'login', 'rule' => 'v1/user/login', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '获取验证码', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Captcha', 'action' => 'index', 'rule' => 'v1/user/captcha', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '获取用户菜单权限', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'menu', 'rule' => 'v1/user/:id/menu', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '退出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'UserCenter', 'action' => 'logout', 'rule' => 'v1/user/logout', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '语言列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Language', 'action' => 'list', 'rule' => 'v1/language/list', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '语言切换接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Language', 'action' => 'cutover', 'rule' => 'v1/language/cutover/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:16', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '国家列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Country', 'action' => 'list', 'rule' => 'v1/country/list', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '获取系统信息接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'System', 'action' => 'info', 'rule' => 'v1/system/info', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '获取系统前台各模块url', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'System', 'action' => 'urls', 'rule' => 'v1/system/urls', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:02'], + ['name' => '文章分类分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'index', 'rule' => 'v1/article/category/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类列表数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'list', 'rule' => 'v1/article/categorys', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类数据新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'save', 'rule' => 'v1/article/category/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类数据更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'update', 'rule' => 'v1/article/category/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类数据删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'delete', 'rule' => 'v1/article/category/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分类数据详细接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'read', 'rule' => 'v1/article/category/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleCategory', 'action' => 'sort', 'rule' => 'v1/article/category/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '评论分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleLeaveMessage', 'action' => 'index', 'rule' => 'v1/article/message/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '评论审核/反审核接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleLeaveMessage', 'action' => 'audit', 'rule' => 'v1/article/message/audit/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '评论删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleLeaveMessage', 'action' => 'delete', 'rule' => 'v1/article/message/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '评论导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleLeaveMessage', 'action' => 'export', 'rule' => 'v1/article/message/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章回收站分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleTrash', 'action' => 'index', 'rule' => 'v1/article/trash/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:17', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章恢复接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleTrash', 'action' => 'restore', 'rule' => 'v1/article/trash/restore/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ArticleTrash', 'action' => 'delete', 'rule' => 'v1/article/trash/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'index', 'rule' => 'v1/article/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '文章详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'read', 'rule' => 'v1/article/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '文章新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'save', 'rule' => 'v1/article/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '文章更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'update', 'rule' => 'v1/article/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'delete', 'rule' => 'v1/article/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '文章导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'export', 'rule' => 'v1/article/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Article', 'action' => 'sort', 'rule' => 'v1/article/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)列表接口(下拉框场景)', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'list', 'rule' => 'v1/banner/list', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'index', 'rule' => 'v1/banner/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'read', 'rule' => 'v1/banner/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'save', 'rule' => 'v1/banner/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'update', 'rule' => 'v1/banner/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅(分类)删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Banner', 'action' => 'delete', 'rule' => 'v1/banner/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:18', 'updated_at' => '2025-03-18 14:24:04'], + ['name' => '横幅项分页列表', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'index', 'rule' => 'v1/banner/items/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅项详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'read', 'rule' => 'v1/banner/items/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'save', 'rule' => 'v1/banner/items/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'update', 'rule' => 'v1/banner/items/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'delete', 'rule' => 'v1/banner/items/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'sort', 'rule' => 'v1/banner/items/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '横幅导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BannerItem', 'action' => 'export', 'rule' => 'v1/banner/items/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '图片上传接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Upload', 'action' => 'image', 'rule' => 'v1/images/:module/upload', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'index', 'rule' => 'v1/video/category/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'list', 'rule' => 'v1/video/categorys', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'read', 'rule' => 'v1/video/category/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'save', 'rule' => 'v1/video/category/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'update', 'rule' => 'v1/video/category/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'sort', 'rule' => 'v1/video/category/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分类删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoCategory', 'action' => 'delete', 'rule' => 'v1/video/category/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:19', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频回收站分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoTrash', 'action' => 'index', 'rule' => 'v1/video/trash/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频回收站恢复操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoTrash', 'action' => 'restore', 'rule' => 'v1/video/trash/restore/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频回收站删除操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'VideoTrash', 'action' => 'delete', 'rule' => 'v1/video/trash/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频上传接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Upload', 'action' => 'video', 'rule' => 'v1/video/:module/upload', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'index', 'rule' => 'v1/video/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'read', 'rule' => 'v1/video/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'save', 'rule' => 'v1/video/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'update', 'rule' => 'v1/video/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'delete', 'rule' => 'v1/video/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '视频信息导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Video', 'action' => 'export', 'rule' => 'v1/video/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:03'], + ['name' => '产品分类树接口(下拉框场景)', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'categorys', 'rule' => 'v1/product/categorys', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品分类树接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'index', 'rule' => 'v1/product/category/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品分类详细接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'read', 'rule' => 'v1/product/category/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品分类更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'update', 'rule' => 'v1/product/category/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品分类新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'save', 'rule' => 'v1/product/category/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:20', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品分类删除操作', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'delete', 'rule' => 'v1/product/category/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'sort', 'rule' => 'v1/product/category/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '设置是否显示接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductCategory', 'action' => 'show', 'rule' => 'v1/product/category/show/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '成本系统分类树接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductTcoCategory', 'action' => 'tree', 'rule' => 'v1/product/category/tco/tree', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'index', 'rule' => 'v1/product/attr/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性详细接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'read', 'rule' => 'v1/product/attr/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'save', 'rule' => 'v1/product/attr/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性更新操作', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'update', 'rule' => 'v1/product/attr/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'delete', 'rule' => 'v1/product/attr/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品回收站分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductTrash', 'action' => 'index', 'rule' => 'v1/product/trash/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品回收站复恢操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductTrash', 'action' => 'restore', 'rule' => 'v1/product/trash/restore/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品回收站删除操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductTrash', 'action' => 'delete', 'rule' => 'v1/product/trash/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '购买平台列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'platforms', 'rule' => 'v1/product/buypass/platforms', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '购买链接分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'index', 'rule' => 'v1/product/buypass/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '添加产品购买链接接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'save', 'rule' => 'v1/product/buypass/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '更新产品购买链接接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'update', 'rule' => 'v1/product/buypass/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:21', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '购买链接导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'export', 'rule' => 'v1/product/buypass/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '购买链接导入接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductPurchaseLink', 'action' => 'import', 'rule' => 'v1/product/buypass/import', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '产品分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'index', 'rule' => 'v1/product/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品数据详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'read', 'rule' => 'v1/product/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '删除产品数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'delete', 'rule' => 'v1/product/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '上/下架操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'updownShelves', 'rule' => 'v1/product/updown_shelves/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '更新产品数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'update', 'rule' => 'v1/product/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品属性特征列表', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductAttr', 'action' => 'index', 'rule' => 'v1/product/attrs', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '产品数据导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'export', 'rule' => 'v1/product/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Product', 'action' => 'sort', 'rule' => 'v1/product/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:05'], + ['name' => '附件(下载管理)分类树接口(下拉框场景)', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'tree', 'rule' => 'v1/attachment/tree', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类树接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'index', 'rule' => 'v1/attachment/category/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)分类详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'read', 'rule' => 'v1/attachment/category/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'save', 'rule' => 'v1/attachment/category/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:22', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'update', 'rule' => 'v1/attachment/category/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'sort', 'rule' => 'v1/attachment/category/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分类删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentCategory', 'action' => 'delete', 'rule' => 'v1/attachment/category/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)回收站分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentTrash', 'action' => 'index', 'rule' => 'v1/attachment/trash/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)回收站恢复操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentTrash', 'action' => 'restore', 'rule' => 'v1/attachment/trash/restore/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)回收站删除操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'AttachmentTrash', 'action' => 'delete', 'rule' => 'v1/attachment/trash/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '附件(下载管理)分页数据接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'index', 'rule' => 'v1/attachment/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件上传接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Upload', 'action' => 'attachment', 'rule' => 'v1/attachment/upload', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'read', 'rule' => 'v1/attachment/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'save', 'rule' => 'v1/attachment/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'update', 'rule' => 'v1/attachment/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'sort', 'rule' => 'v1/attachment/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'delete', 'rule' => 'v1/attachment/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '附件(下载管理)禁/启用操作接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Attachment', 'action' => 'enable', 'rule' => 'v1/attachment/enable/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:06'], + ['name' => '角色分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'index', 'rule' => 'v1/role/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:23', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'save', 'rule' => 'v1/role/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'read', 'rule' => 'v1/role/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'update', 'rule' => 'v1/role/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'delete', 'rule' => 'v1/role/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '角色列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Role', 'action' => 'index', 'rule' => 'v1/roles', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'index', 'rule' => 'v1/user/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'read', 'rule' => 'v1/user/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'save', 'rule' => 'v1/user/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'update', 'rule' => 'v1/user/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '用户删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'User', 'action' => 'delete', 'rule' => 'v1/user/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '问答分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'index', 'rule' => 'v1/faq/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '问答详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'read', 'rule' => 'v1/faq/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '问答新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'save', 'rule' => 'v1/faq/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '问答更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'update', 'rule' => 'v1/faq/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:24', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '问答设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'sort', 'rule' => 'v1/faq/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '问答删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Faq', 'action' => 'delete', 'rule' => 'v1/faq/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '留言记录(联系我们)分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'LeaveMessage', 'action' => 'index', 'rule' => 'v1/leavemsg/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '留言记录(联系我们)导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'LeaveMessage', 'action' => 'export', 'rule' => 'v1/leavemsg/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '批量采购询盘分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BulkPurchaseInquiry', 'action' => 'index', 'rule' => 'v1/bp/inquiry/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '批量采购询盘导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BulkPurchaseInquiry', 'action' => 'export', 'rule' => 'v1/bp/inquiry/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '批量采购询盘可选品类列表接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'BulkPurchaseInquiry', 'action' => 'interested', 'rule' => 'v1/bp/inquiry/interested', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '代理商企业规模类型接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Agent', 'action' => 'enterpriseSizeTypes', 'rule' => 'v1/agent/enterprise_size_types', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '代理商分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Agent', 'action' => 'index', 'rule' => 'v1/agent/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '代理商导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Agent', 'action' => 'export', 'rule' => 'v1/agent/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '产品询盘分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'ProductInquiry', 'action' => 'index', 'rule' => 'v1/product/inquiry/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '菜单树形结构接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'index', 'rule' => 'v1/menu/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '菜单树形结构(选项框/权限分配场景)接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'list', 'rule' => 'v1/menus', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:07'], + ['name' => '菜单详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'read', 'rule' => 'v1/menu/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'save', 'rule' => 'v1/menu/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:25', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'update', 'rule' => 'v1/menu/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'delete', 'rule' => 'v1/menu/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单导出接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'export', 'rule' => 'v1/menu/export', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单导入接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'import', 'rule' => 'v1/menu/import', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '菜单设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Menu', 'action' => 'sort', 'rule' => 'v1/menu/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'index', 'rule' => 'v1/navigation/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'read', 'rule' => 'v1/navigation/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'save', 'rule' => 'v1/navigation/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'update', 'rule' => 'v1/navigation/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'delete', 'rule' => 'v1/navigation/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航分类列表(选项框场景使用)接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'Navigation', 'action' => 'list', 'rule' => 'v1/navigation/list', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航列表树接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'index', 'rule' => 'v1/navigation/items/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'read', 'rule' => 'v1/navigation/items/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'save', 'rule' => 'v1/navigation/items/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:26', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'update', 'rule' => 'v1/navigation/items/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航设置排序值接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'sort', 'rule' => 'v1/navigation/items/sort/:id', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '导航删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'NavigationItem', 'action' => 'delete', 'rule' => 'v1/navigation/items/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:08'], + ['name' => '获取配置内容接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SiteConfig', 'action' => 'index', 'rule' => 'v1/site/config/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '站点配置更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SiteConfig', 'action' => 'update', 'rule' => 'v1/site/config/update', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项分页接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'index', 'rule' => 'v1/config/index', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项分组接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'groups', 'rule' => 'v1/config/groups', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项类型接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'types', 'rule' => 'v1/config/types', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项详情接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'read', 'rule' => 'v1/config/read/:id', 'method' => 'GET', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项新增接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'save', 'rule' => 'v1/config/save', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项更新接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'update', 'rule' => 'v1/config/update/:id', 'method' => 'PUT', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项删除接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'delete', 'rule' => 'v1/config/delete/:id', 'method' => 'DELETE', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'], + ['name' => '配置项导入接口', 'module' => 'admin', 'layer' => 'v1', 'controller' => 'SysConfig', 'action' => 'import', 'rule' => 'v1/config/import', 'method' => 'POST', 'desc' => '', 'created_at' => '2025-03-18 10:54:27', 'updated_at' => '2025-03-18 14:24:09'] + ]; + + $table = $this->table('sys_restful_api'); + + // empty the table + $table->truncate(); + + // insert data + $table->insert($data)->saveData(); + } +} \ No newline at end of file From 5277af0f533a14fdebb69926b2aaed1cfa4ec523 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Fri, 6 Jun 2025 16:10:51 +0800 Subject: [PATCH 20/25] =?UTF-8?q?feat:=20mobile=E6=96=87=E7=AB=A0=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/controller/Article.php | 14 +- app/index/lang/en-us/mobile.php | 15 ++ app/index/view/mobile/article/detail.html | 149 ++++++++++++++ .../index/mobile/css/article_detail.css | 189 ++++++++++++++++++ public/static/index/mobile/images/1line.webp | Bin 0 -> 202 bytes 5 files changed, 361 insertions(+), 6 deletions(-) create mode 100644 app/index/view/mobile/article/detail.html create mode 100644 public/static/index/mobile/css/article_detail.css create mode 100644 public/static/index/mobile/images/1line.webp diff --git a/app/index/controller/Article.php b/app/index/controller/Article.php index 23660acc..7ed9fe64 100644 --- a/app/index/controller/Article.php +++ b/app/index/controller/Article.php @@ -129,12 +129,14 @@ class Article extends Common // 验证字段 $validate = Validate::rule([ - 'name' => 'max:64', - 'email' => 'email' + 'name' => 'require|max:64', + 'email' => 'require|email' ]) ->message([ - 'name.max' => '姓名不能超过64个字符', - 'email' => '请输入正确的邮箱' + 'name.require' => '姓名不能为空', + 'name.max' => '姓名不能超过:rule个字符', + 'email.require' => '邮箱不能为空', + 'email.email' => '邮箱格式不正确' ]); if (!$validate->check($post)) { return error($validate->getError()); @@ -148,9 +150,9 @@ class Article extends Common ]); $ret = ArticleLeaveMessageModel::create($data); if ($ret->isEmpty()) { - return error('留言提交失败'); + return error(lang('留言提交失败')); } - return success('留言提交成功'); + return success(lang('留言提交成功')); } } diff --git a/app/index/lang/en-us/mobile.php b/app/index/lang/en-us/mobile.php index b7e110f2..9701e9fe 100644 --- a/app/index/lang/en-us/mobile.php +++ b/app/index/lang/en-us/mobile.php @@ -15,6 +15,8 @@ return [ '提交失败' => 'fail', '信息已成功提交!' => 'Add Success!', '信息提交失败!' => 'Add Fail!', + '留言提交失败' => 'Message submit failed', + '留言提交成功' => 'Message submit success', '当前选定语言的采购可选品类配置出错' => 'Current language configuration of purchase optional categories is incorrect', // 首页 @@ -29,6 +31,19 @@ return [ '客服团队的工作时间:周一到周五,早9点到晚6点 平均应答时间:24小时内' => 'Our customer support is available Monday to Friday: 9am-6:00pm. Average answer time: 24h', ], + // 文章详情页 + 'article/detail' => [ + '分享' => 'SHARE', + '留言' => 'Leave a Reply', + '名称' => 'Name', + '电子邮箱' => 'Email', + '您的电子邮件地址不会被公开' => 'Your email address will not be pulished.', + '留言内容' => 'Comment', + '提交留言' => 'POST COMMENT', + '你可能还喜欢' => 'Recommended for you', + '链接复制成功' => 'Link copied successfully', + ], + // 产品分类 'product/category' => [ '查看全部' => 'View All', diff --git a/app/index/view/mobile/article/detail.html b/app/index/view/mobile/article/detail.html new file mode 100644 index 00000000..1decf523 --- /dev/null +++ b/app/index/view/mobile/article/detail.html @@ -0,0 +1,149 @@ +{extend name="public/base" /} +{block name="title"} + {notempty name="detail.seo_title"}{$detail.seo_title}{else /}{__BLOCK__}{/notempty} +{/block} +{block name="seo"} + {notempty name="detail.seo_keywords"} + + + {else /} + {__BLOCK__} + {/notempty} +{/block} +{block name="style"} + +{/block} +{block name="main"} +
+ +
+
+
+
+

{$detail.title}

+

{$detail.release_time}

+
+
{$detail.content|raw}
+
+ +
+
+
+{/block} +{block name="script"} + +{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/article_detail.css b/public/static/index/mobile/css/article_detail.css new file mode 100644 index 00000000..3e0ac54e --- /dev/null +++ b/public/static/index/mobile/css/article_detail.css @@ -0,0 +1,189 @@ +.oricoEGapp-articledetail { + display: flex; + flex-direction: column; + background: #fff; +} + +.oricoEGapp-articledetail .content { + margin-top: 3.75rem; + width: 90%; + margin: 2.5rem auto; + margin-top: 4.6rem; +} + +.oricoEGapp-articledetail .content .blog_detail { + height: auto; + background: #ffffff; + border: 1px solid #e8e8e8; +} + +.oricoEGapp-articledetail .content .blog_detail .blog_title { + margin: 1rem; + border-bottom: 1px solid #e8e8e8; + padding-bottom: 1rem; +} + +.oricoEGapp-articledetail .content .blog_detail .blog_content { + margin: 1rem; +} + +.oricoEGapp-articledetail .content .blog_detail .blog_content img { + max-width: 100%; +} + +.oricoEGapp-articledetail .content .blog_detail .blog_content p { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5rem; + color: #252525; + margin-bottom: 0.625rem; + overflow: hidden; + max-width: 100%; + text-indent: 0 !important; +} + +.oricoEGapp-articledetail .content .blog_detail .blog_content p span { + font-size: 0.875rem; + line-height: 1rem; +} + +.oricoEGapp-articledetail .content .blog_detail .blog_content p img { + width: 100%; + height: auto; + margin-bottom: 0.5rem; +} + +.oricoEGapp-articledetail .content .share_box { + width: 100%; +} + +.oricoEGapp-articledetail .content .share_box .blog_share { + width: 100%; + height: auto; + background: #ffffff; + border: 1px solid #e8e8e8; + margin: 1rem 0; +} + +.oricoEGapp-articledetail .content .share_box .blog_share h3 { + font-size: 1rem; + line-height: 2.125rem; + color: #959595; + font-weight: bold; + padding: 0.25rem 1.875rem 0.75rem; + border-bottom: 1px solid #e8e8e8; +} + +.oricoEGapp-articledetail .content .share_box .blog_share .share_list { + padding: 1.875rem; +} + +.oricoEGapp-articledetail .content .share_box .blog_share .share_list::after { + content: ""; + display: block; + clear: both; +} + +.oricoEGapp-articledetail .content .share_box .blog_share .share_list li { + position: relative; + width: 21%; + height: auto; + margin-right: 0.5rem; + float: left; +} + +.oricoEGapp-articledetail .content .share_box .blog_share .share_list .wechat .wechat_code { + display: none; + left: 3.8rem; + margin-top: 10px; + background-color: #fff; + color: #fff; + box-shadow: 0px 5px 20px 0px rgba(119, 123, 128, 0.5); + line-height: 24px; + padding: 20px 25px; + z-index: 999; + position: absolute; + font-size: 14px; + color: #333; +} + +.oricoEGapp-articledetail .content .share_box .blog_share .share_list .wechat img { + vertical-align: middle; +} + +.oricoEGapp-articledetail .content .share_box .comment { + background: #ffffff; + width: 100%; + padding-bottom: 1.875rem; + border: 1px solid #e8e8e8; +} + +.oricoEGapp-articledetail .content .share_box .comment h3 { + font-size: 1rem; + line-height: 1rem; + color: #959595; + font-weight: bold; + padding: 1rem 1.25rem; + border-bottom: 1px solid #e8e8e8; +} + +.oricoEGapp-articledetail .content .share_box .comment .comment_form { + padding: 1rem 1.25rem; +} + +.oricoEGapp-articledetail .content .share_box .comment .comment_form .comment_form div { + font-size: 0.825rem; + color: #252525; + float: left; + width: 100%; +} + +.oricoEGapp-articledetail .content .share_box .comment .itinp { + background: #f2f2f2; + /* border: none !important; */ + border-radius: 8px; + height: 48px; + box-shadow: none; + font-family: Montserrat-Regular, Montserrat; +} + +.oricoEGapp-articledetail .content .share_box .comment .comment_form>div input { + width: 100%; + height: 1.75rem; + border: 1px solid #dbdbdb; + margin-top: 0.5rem; +} + +.oricoEGapp-articledetail .mblove { + width: 100%; + background: #f1f1f1; +} + +.oricoEGapp-articledetail .mblove .mianct { + margin-top: 5%; +} + +.oricoEGapp-articledetail .mblove .mianct .thtitle, +.oricoEGapp-articledetail .mblove .mianct p { + font-size: 1.5em; + color: #333; + font-weight: bold; + text-align: center; +} + +.oricoEGapp-articledetail .mblove .mianct .thtitle img, +.oricoEGapp-articledetail .mblove .mianct p img { + width: 100%; + display: block; +} + +.oricoEGapp-articledetail .mblove .mianct p:nth-child(2) { + margin-top: 2.4%; +} + +.oricoEGapp-articledetail .share_list .triggered_qrcode { + display: none; + position: absolute; + left: 50%; + transform: translateX(-50%); +} \ No newline at end of file diff --git a/public/static/index/mobile/images/1line.webp b/public/static/index/mobile/images/1line.webp new file mode 100644 index 0000000000000000000000000000000000000000..99bdc98208d28ba2acb473726c4404452c341a0c GIT binary patch literal 202 zcmWIYbaOkzz`zjh>J$(bU=hIuWD5ZCdKLy&1_no;01smzk5ODfz@zC_d~R{*Wz^ch z!p2}X(PN>{(k04DiXIFbgg7(v9u^cZ95+fiIa$qTCY0h0ysWp6a|!3oaAqBt7)VNv lf#KhuRShgAu7 Date: Fri, 6 Jun 2025 16:28:01 +0800 Subject: [PATCH 21/25] =?UTF-8?q?feat:=20mobile=E9=97=AE=E7=AD=94=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/controller/Faq.php | 3 ++- app/index/lang/en-us/mobile.php | 6 +++++ app/index/lang/en-us/pc.php | 5 ++++ app/index/view/mobile/faq/index.html | 34 ++++++++++++++++++++++++++ public/static/index/mobile/css/faq.css | 10 ++++++++ 5 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 app/index/view/mobile/faq/index.html create mode 100644 public/static/index/mobile/css/faq.css diff --git a/app/index/controller/Faq.php b/app/index/controller/Faq.php index 91d4774a..c9b3a6eb 100644 --- a/app/index/controller/Faq.php +++ b/app/index/controller/Faq.php @@ -25,7 +25,8 @@ class Faq extends Common // 获取banner焦点图 $banner = SysBannerItemModel::hasWhere('banner', [ 'language_id' => $this->lang_id, - 'unique_label' => 'BANNER_67fa37f30e151' + 'unique_label' => 'BANNER_67fa37f30e151', + 'at_platform' => request()->from ]) ->type('image') ->visible(['id', 'title', 'image', 'link']) diff --git a/app/index/lang/en-us/mobile.php b/app/index/lang/en-us/mobile.php index 9701e9fe..a631377d 100644 --- a/app/index/lang/en-us/mobile.php +++ b/app/index/lang/en-us/mobile.php @@ -73,6 +73,12 @@ return [ '提交' => 'SUBMIT', ], + // 常见问题 + 'faq/index' => [ + '常见FQ_下载与服务_中文官网帮助信息_ORICO/奥睿科官网' => 'FAQ', + '常见问题解答' => 'Frequently asked questions', + ], + // 附件下载 'attachment/index' => [ '软件下载' => 'Software download', diff --git a/app/index/lang/en-us/pc.php b/app/index/lang/en-us/pc.php index 15b56888..80e2ee36 100644 --- a/app/index/lang/en-us/pc.php +++ b/app/index/lang/en-us/pc.php @@ -40,6 +40,11 @@ return [ '链接复制成功' => 'Link copied successfully', ], + // 常见问题 + 'faq/index' => [ + '常见FQ_下载与服务_中文官网帮助信息_ORICO/奥睿科官网' => 'FAQ', + ], + // 附件页 - 软件下载 'attachment/index' => [ '软件和驱动程序' => 'Software and Drivers', diff --git a/app/index/view/mobile/faq/index.html b/app/index/view/mobile/faq/index.html new file mode 100644 index 00000000..5be280b1 --- /dev/null +++ b/app/index/view/mobile/faq/index.html @@ -0,0 +1,34 @@ +{extend name="public/base" /} +{block name="title"} +{:lang_i18n('常见FQ_下载与服务_中文官网帮助信息_ORICO/奥睿科官网')} +{/block} +{block name="style"} + +{/block} +{block name="main"} +
+ +
+ + {notempty name="banner.image"} + + {/notempty} + + {notempty name="faq"} +
+
{:lang_i18n('常见问题解答')} +
+ {volist name="faq" id="vo"} +
+
{$vo.question}
+
{$vo.answer|raw}
+ {/volist} +
+ +
{$faq|raw}
+ {/notempty} +
+
+{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/faq.css b/public/static/index/mobile/css/faq.css new file mode 100644 index 00000000..2933b6e7 --- /dev/null +++ b/public/static/index/mobile/css/faq.css @@ -0,0 +1,10 @@ +.oricoEGapp-fq { + position: relative; + } + .oricoEGapp-fq .banner { + margin-top: 3.3rem; + } + .oricoEGapp-fq .banner img { + max-width: 100%; + } + \ No newline at end of file From 6c5f66ef5405e83ba7b96d8fe6154cf3058d831c Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Sat, 7 Jun 2025 13:54:34 +0800 Subject: [PATCH 22/25] =?UTF-8?q?feat:=20mobile=20nas=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index/common.php | 12 + app/index/controller/TopicNas.php | 8 +- app/index/lang/en-us/mobile.php | 6 + app/index/view/mobile/topic_nas/index.html | 150 +++++++ .../index/mobile/css/topic_nas_index.css | 368 ++++++++++++++++++ 5 files changed, 543 insertions(+), 1 deletion(-) create mode 100644 app/index/view/mobile/topic_nas/index.html create mode 100644 public/static/index/mobile/css/topic_nas_index.css diff --git a/app/index/common.php b/app/index/common.php index 7e901805..7fc6e0a6 100644 --- a/app/index/common.php +++ b/app/index/common.php @@ -111,3 +111,15 @@ if (!function_exists('lang_i18n')) { return Lang::get($lang_key, $vars, $lang); } } + +if (!function_exists('array_flatten')) { + /** + * 将多维数组转换为一维数组 + * @param array $array + * @return array + */ + function array_flatten(array $array, int $depth = 1): array + { + return \think\helper\Arr::flatten($array, $depth); + } +} diff --git a/app/index/controller/TopicNas.php b/app/index/controller/TopicNas.php index 4ad0a561..a96d0649 100644 --- a/app/index/controller/TopicNas.php +++ b/app/index/controller/TopicNas.php @@ -20,6 +20,10 @@ class TopicNas extends Common { // 获取国家/语言列表 $languages = $this->getLanguages(); + // 输出国家/语言列表 + if (request()->isMobile()) { + View::assign('header_languages', $languages); + } // 获取当前语言 $current_language = $this->getCurrentLanguage($languages); @@ -61,8 +65,10 @@ class TopicNas extends Common $nas_software = []; // 获取banner数据 $banners = SysBannerModel::with(['items' => function($query) { - $query->withoutField(['sort', 'created_at', 'updated_at', 'deleted_at']); + $query->withoutField(['sort', 'created_at', 'updated_at', 'deleted_at']) + ->order(['sort' => 'asc', 'id' => 'desc']); }]) + ->atPlatform(request()->from) ->uniqueLabel([ 'BANNER_680f156a805a8', 'BANNER_680f15ca5482f', diff --git a/app/index/lang/en-us/mobile.php b/app/index/lang/en-us/mobile.php index a631377d..6bc8a5f1 100644 --- a/app/index/lang/en-us/mobile.php +++ b/app/index/lang/en-us/mobile.php @@ -172,4 +172,10 @@ return [ '为了得到深圳市元创时代科技有限公司给予您的“包修、包换、包退”的权益,请您:' => 'For a smooth return and refund, quality warranty, please follow these steps:', '特别说明' => 'ORICO is not liable for:' ], + + // nas主题 - 首页 + 'topicnas/index' => [ + '网络存储解决方案' => 'Network Storage Solutions', + '配套软件' => 'Software', + ], ]; \ No newline at end of file diff --git a/app/index/view/mobile/topic_nas/index.html b/app/index/view/mobile/topic_nas/index.html new file mode 100644 index 00000000..de30245e --- /dev/null +++ b/app/index/view/mobile/topic_nas/index.html @@ -0,0 +1,150 @@ +{extend name="public/base"/} +{block name="style"} + +{/block} +{block name="main"} +
+ +
+
+ + {notempty name="focus_image"} +
+
+
+ {volist name="focus_image" id="fo"} +
+
+

+ +
+ +
+ {/volist} +
+ +
+
+
+ {/notempty} + + {notempty name="nas_category"} + {assign name="categories" value=":array_flatten($nas_category)"/} +
+ {assign name="categories_idx1" value=":array_shift($categories)"/} + {notempty name="categories_idx1"} + + + + {/notempty} + {assign name="categories_chunk" value=":array_chunk($categories, 2)"/} + {volist name="categories_chunk" id="chunk"} +
+ {volist name="chunk" id="cc"} + + + + {/volist} +
+ {/volist} +
+ {/notempty} + + {notempty name="nas_video"} +
+ +
+ {/notempty} + + {notempty name="nas_solution"} +
+ ORICO{:lang_i18n('网络存储解决方案')} +
+
+ {volist name="nas_solution" id="so"} +
+
$so.title_txt_color])}>{$so.title}
+ + +
+
+

$so.title_txt_color])}>{$so.title}

+
$so.desc_txt_color])}>{$so.desc|raw}
+
+
+
+ {/volist} +
+
+
+ {/notempty} + + {notempty name="nas_software"} +
+ NAS {:lang_i18n('配套软件')} + {volist name="nas_software" id="soft" offset="0" length="3"} +
+
+ +
+
+ $soft.title_txt_color])}>{$soft.title} + $soft.desc_txt_color])}>{$soft.desc|raw} +
+
+ {/volist} + {volist name="nas_software" id="soft" offset="3"} +
+ + + +
+ {/volist} +
+ {/notempty} +
+
+
+{/block} +{block name="script"} + +{/block} \ No newline at end of file diff --git a/public/static/index/mobile/css/topic_nas_index.css b/public/static/index/mobile/css/topic_nas_index.css new file mode 100644 index 00000000..fc1b1d84 --- /dev/null +++ b/public/static/index/mobile/css/topic_nas_index.css @@ -0,0 +1,368 @@ +@charset "UTF-8"; + +.oricoCN-nasindex { + /* 针对小屏幕平板电脑的样式 */ +} + +.oricoCN-nasindex .header { + color: #000; +} + +.oricoCN-nasindex .narsMBpage { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + position: relative; + overflow-x: hidden; +} + +.oricoCN-nasindex .narsMBpage .narsMB-banner { + width: 100%; +} + +.oricoCN-nasindex .narsMBpage .narsmb-img { + max-width: 100%; + height: auto; + display: block; + margin-top: 13%; +} + +.oricoCN-nasindex .narsMBpage .narsmb-cate { + margin-top: 2.8125rem; + margin: 0 0.4375rem; + display: flex; + flex-direction: column; +} + +.oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcatetop, +.oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcate-it { + background: transparent; + color: #000; + border-radius: 0.3125rem; + /*height: 6.8rem;*/ + width: 100%; + line-height: 1rem; + font-size: 0.75rem; + font-weight: bold; + /*margin-top: 2.8125rem; + display: flex;*/ + align-items: center; +} + +.oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcatetop, +.oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcate-it .narsmbcate-sp span:last-child { + font-size: 0.5625rem; + padding-top: 5px; + font-weight: 500; +} + +.oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcateits { + /*height: 5.8125rem;*/ + display: flex; + flex-direction: row; + justify-content: space-between; + /*margin-bottom: 0.4375rem;*/ +} + +.oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcateits .narsmbcate-it { + width: 49%; + margin-top: 0.4375rem; +} + +.oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcate-sp { + margin: 0 0.75rem; +} + +.oricoCN-nasindex .narsMBpage .narsmbvd { + width: 100%; + /*height: 14.5625rem;*/ + margin-top: 2.5rem; +} + +.oricoCN-nasindex .narsMBpage .narsmbvd .narsmbvideo { + height: 100%; + width: 100%; + object-fit: fill; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa { + width: 100%; + display: flex; + flex-direction: column; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-title { + text-align: center; + font-size: 1.6875rem; + font-weight: bold; + padding-top: 2.0625rem; + padding-bottom: 1.3125rem; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfaSwiper { + margin-left: 0.4375rem; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-slide { + width: 10rem; + height: 18.375rem; + border-radius: 0.125rem; + position: relative; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-slide .narsmb-jjfa-ct { + color: #fff; + text-align: center; + font-size: 1rem; + font-weight: bold; + line-height: 2.5rem; + height: 2.5rem; + background: #004bfa; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-slide .narsmb-jjfa-info { + position: absolute; + top: 0; + height: 18.375rem; + padding: 0 1.3rem; + display: none; + flex-direction: column; + justify-content: center; + border-radius: 0.125rem; + z-index: 11; + background: linear-gradient(90deg, #cdd9f1 0%, #ecf2fe 100%); + overflow-y: hidden; + color: #9196a5; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-slide .narsmb-jjfa-info .box { + width:100%; + display:flex; + flex-direction:column; + height:95%; + overflow-y:auto; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-slide .narsmb-jjfa-info .box > p { + font-size: 1rem; + padding-bottom:5px; + font-weight:bold; + padding-top: 1.4rem; + color: #000; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-slide .narsmb-jjfa-info .box > div { + font-size:0.625rem; + color: #000; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-slide .narsmb-jjfa-info .narsmbjjfatt { + width: 100%; + font-weight: bold; + text-align: center; + font-size: 0.875rem; + margin-bottom: 1.6875rem; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmbjjfa-slide .narsmb-jjfa-info .narsmbjjfa-txt { + font-size: 0.75rem; + line-height: 1rem; + text-indent: 2em; +} + +.oricoCN-nasindex .narsMBpage .narsmb-jjfa .narsmb-jjfabgimg { + width: 100%; + height: 18.375rem; + position: absolute; + top: 0; + z-index: -1; +} + +.oricoCN-nasindex .narsmb-wlj { + width: 100%; + display: flex; + flex-direction: column; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwlj-title { + text-align: center; + font-size: 1.6875rem; + font-weight: bold; + padding-top: 2.0625rem; + padding-bottom: 1.3125rem; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem { + margin: 0 0.4375rem; + /*height: 9.0625rem;*/ + background: #ecf2fe; + display: flex; + flex-direction: row; + justify-content: space-between; + margin-bottom: 0.5rem; + overflow: hidden; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcp { + display: flex; + flex-direction: row; + align-items: center; + /*justify-content: center;*/ + height: inherit; + width: 50%; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcp .narsmbtt { + font-size: 1.0625rem; + font-weight: bold; + color: #fff; + width: 35.5rem; + text-align: center; + margin-left: 35%; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcp .narsmbwljimg { + height: inherit; + width: 100%; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcpinfo { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + color: #fff; + flex: 1; + margin: 0 1.25rem; + padding: 0 0.75rem; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcpinfo .narsmbif-title { + font-weight: bold; + font-size: 1.0625rem; + color:#000; + padding-bottom: 0.5rem; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcpinfo .narsmbif-info { + font-size: 0.625rem; + white-space:pre-line; + color:#a2a7ba; + line-height: 1rem; + text-align: center; +} + +@media only screen and (min-width: 640px) { + .oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcpinfo .narsmbif-title { + font-weight: bold; + font-size: 1.25rem; + padding-bottom: 0.25rem; + } + + .oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcpinfo .narsmbif-info { + font-size: 0.65rem; + line-height: 0.875rem; + text-align: center; + } +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcpinfo .narsmbwlj-xzbt { + width: 7.25rem; + height: 2.1875rem; + border-radius: 3.25rem; + line-height: 2.1875rem; + border: 1px solid #ffffff; + font-size: 0.875rem; + text-align: center; + cursor: pointer; + margin: 0 1.25rem; +} + +.oricoCN-nasindex .narsmb-wlj .narsmbwltitem .narsmbwljcpinfo .narsmbtt { + font-size: 1.0625rem; + font-weight: bold; + color: #fff; + text-align: center; +} + +.oricoCN-nasindex .narsMBbannerSwiper { + padding-top: 0px; +} + +.oricoCN-nasindex .narsMB-banner .swiper-slide { + position: relative; +} + +.oricoCN-nasindex .narsMB-banner-st { + position: absolute; + margin: 0 auto; + text-align: center; + width: 100%; + color: #07111c; +} + +.oricoCN-nasindex .narsMB-banner-st h2 { + margin: 0 auto; + font-size: 1.4rem; + padding-top: 2.8rem; + padding-bottom: 0.75rem; +} + +.oricoCN-nasindex .narsMB-banner-st .narsMB-bannersm { + font-size: 1rem; + font-size: 0.875rem; + color: #82898f; +} + +.oricoCN-nasindex .narsMB-banner .swiper-container-horizontal>.swiper-pagination-bullets { + bottom: 50px; +} + +.oricoCN-nasindex .narsMB-banner .swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet { + width: 10px; + height: 10px; + margin: 0 5px; + outline: 0; +} + +.oricoCN-nasindex .narsMB-banner .swiper-pagination-bullet-active { + background: #004bfa !important; + width: 20px !important; + height: 10px !important; + border-radius: 5px !important; +} + +@media screen and (min-width: 400px) and (max-width: 660px) { + + .oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcatetop, + .oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcate-it { + /*height: 8.8rem;*/ + } + + .oricoCN-nasindex .narsmbcate-sp span:first-child { + font-size: 1.125rem !important; + padding-bottom: 0.3125rem; + } + + .oricoCN-nasindex .narsmbcate-sp span:last-child { + font-size: 0.875rem !important; + } +} + +@media screen and (min-width: 661px) and (max-width: 991px) { + + .oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcatetop, + .oricoCN-nasindex .narsMBpage .narsmb-cate .narsmbcate-it { + /*height: 10.8rem;*/ + } + + .oricoCN-nasindex .narsmbcate-sp span:first-child { + font-size: 1rem !important; + padding-bottom: 0.3125rem; + } + + .oricoCN-nasindex .narsmbcate-sp span:last-child { + font-size: 0.75rem !important; + } +} \ No newline at end of file From 09943775fd9d597914bf3da6be99cafff83785cf Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Sat, 7 Jun 2025 14:03:47 +0800 Subject: [PATCH 23/25] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9array=5Ffla?= =?UTF-8?q?tten=E5=87=BD=E6=95=B0=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common.php | 12 ++++++++++++ app/index/common.php | 12 ------------ app/index/view/mobile/about_us/introduction.html | 4 ++-- app/index/view/mobile/attachment/video.html | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/common.php b/app/common.php index 37309be1..1fa13ee4 100644 --- a/app/common.php +++ b/app/common.php @@ -104,6 +104,18 @@ if (!function_exists('array_to_tree')) { } } +if (!function_exists('array_flatten')) { + /** + * 将多维数组转换为一维数组 + * @param array $array + * @return array + */ + function array_flatten(array $array, int $depth = 1): array + { + return \think\helper\Arr::flatten($array, $depth); + } +} + if (!function_exists('thumb')) { /** * 获取缩略图 diff --git a/app/index/common.php b/app/index/common.php index 7fc6e0a6..7e901805 100644 --- a/app/index/common.php +++ b/app/index/common.php @@ -111,15 +111,3 @@ if (!function_exists('lang_i18n')) { return Lang::get($lang_key, $vars, $lang); } } - -if (!function_exists('array_flatten')) { - /** - * 将多维数组转换为一维数组 - * @param array $array - * @return array - */ - function array_flatten(array $array, int $depth = 1): array - { - return \think\helper\Arr::flatten($array, $depth); - } -} diff --git a/app/index/view/mobile/about_us/introduction.html b/app/index/view/mobile/about_us/introduction.html index 603a1a34..b401bce3 100644 --- a/app/index/view/mobile/about_us/introduction.html +++ b/app/index/view/mobile/about_us/introduction.html @@ -29,7 +29,7 @@

{:lang_i18n('为您提供专属定制服务')}

- {assign name="flat_service" value=":\think\helper\Arr::flatMap(fn($item) => $item, $service)" /} + {assign name="flat_service" value=":array_flatten($service)" /} {volist name="flat_service" id="fs"}
@@ -43,7 +43,7 @@

{:lang_i18n('对于不同的情况')}

- {assign name="flat_difference" value=":\think\helper\Arr::flatMap(fn($item) => $item, $difference)" /} + {assign name="flat_difference" value=":array_flatten($difference)" /} {volist name="flat_difference" id="di"}
diff --git a/app/index/view/mobile/attachment/video.html b/app/index/view/mobile/attachment/video.html index 19d18ea6..71f4704d 100644 --- a/app/index/view/mobile/attachment/video.html +++ b/app/index/view/mobile/attachment/video.html @@ -20,7 +20,7 @@
{notempty name="videos"} - {assign name="flat_videos" value=":\think\helper\Arr::flatMap(fn($item) => $item->toArray(), $videos->items())" /} + {assign name="flat_videos" value=":array_flatten($videos->items())" /} {volist name="flat_videos" id="vo"}