From ec7b29a4fc29b207fec8ad0dad76daf1bdab6d7e Mon Sep 17 00:00:00 2001
From: jsasg <735273025@qq.com>
Date: Fri, 20 Dec 2024 18:03:35 +0800
Subject: [PATCH] feat: init
---
.env.local | 12 +++
.example.env | 11 ++
.gitattributes | 5 +
.gitignore | 12 +++
.travis.yml | 42 ++++++++
LICENSE.txt | 32 ++++++
README.md | 76 ++++++++++++++
app/.htaccess | 1 +
app/AppService.php | 22 ++++
app/BaseController.php | 94 ++++++++++++++++++
app/ExceptionHandle.php | 58 +++++++++++
app/Request.php | 8 ++
app/admin/common.php | 2 +
app/admin/controller/Index.php | 14 +++
app/admin/event.php | 5 +
app/admin/middleware.php | 5 +
app/common.php | 2 +
app/event.php | 17 ++++
app/home/common.php | 2 +
app/home/controller/Index.php | 12 +++
app/home/event.php | 5 +
app/home/middleware.php | 5 +
app/middleware.php | 10 ++
app/provider.php | 9 ++
app/service.php | 9 ++
composer.json | 52 ++++++++++
config/app.php | 30 ++++++
config/cache.php | 29 ++++++
config/console.php | 9 ++
config/cookie.php | 20 ++++
config/database.php | 63 ++++++++++++
config/filesystem.php | 24 +++++
config/lang.php | 27 +++++
config/log.php | 45 +++++++++
config/middleware.php | 8 ++
config/route.php | 51 ++++++++++
config/session.php | 19 ++++
config/trace.php | 10 ++
config/view.php | 25 +++++
.../20241218064708_create_product.php | 54 ++++++++++
.../20241218083326_create_product_params.php | 38 +++++++
.../20241218083951_create_product_sku.php | 40 ++++++++
.../20241218094653_create_product_related.php | 39 ++++++++
.../20241218095340_create_sys_language.php | 43 ++++++++
.../20241218095839_create_sys_country.php | 40 ++++++++
.../20241219033236_create_product_attr.php | 39 ++++++++
...0241219054243_create_product_attr_prop.php | 38 +++++++
...20241219074458_create_product_sku_attr.php | 37 +++++++
...20241219090629_create_product_category.php | 50 ++++++++++
...1220021543_create_product_tco_category.php | 46 +++++++++
...24047_create_product_purchase_platform.php | 38 +++++++
...220024058_create_product_purchase_link.php | 39 ++++++++
...20241220062425_create_article_category.php | 49 +++++++++
.../20241220062631_create_article.php | 53 ++++++++++
...220062635_create_article_leave_message.php | 41 ++++++++
.../20241220072120_create_sys_image.php | 43 ++++++++
.../20241220072926_create_video.php | 47 +++++++++
.../20241220073105_create_video_category.php | 37 +++++++
.../20241220094223_create_attachment.php | 49 +++++++++
...41220094245_create_attachment_category.php | 40 ++++++++
.../migrations/20241224013949_create_faq.php | 42 ++++++++
.../20241224025811_create_contact_us.php | 40 ++++++++
...224032339_create_bulk_purchase_inquiry.php | 47 +++++++++
.../20241224034202_create_agent.php | 46 +++++++++
...41224035530_create_agent_business_type.php | 38 +++++++
...5543_create_agent_entryprice_size_type.php | 38 +++++++
.../20241224080720_create_product_inquiry.php | 43 ++++++++
extend/.gitignore | 2 +
public/.htaccess | 8 ++
public/favicon.ico | Bin 0 -> 5434 bytes
public/index.php | 24 +++++
public/robots.txt | 2 +
public/router.php | 19 ++++
public/static/.gitignore | 2 +
route/app.php | 17 ++++
runtime/.gitignore | 2 +
think | 10 ++
77 files changed, 2162 insertions(+)
create mode 100644 .env.local
create mode 100644 .example.env
create mode 100644 .gitattributes
create mode 100644 .gitignore
create mode 100644 .travis.yml
create mode 100644 LICENSE.txt
create mode 100644 README.md
create mode 100644 app/.htaccess
create mode 100644 app/AppService.php
create mode 100644 app/BaseController.php
create mode 100644 app/ExceptionHandle.php
create mode 100644 app/Request.php
create mode 100644 app/admin/common.php
create mode 100644 app/admin/controller/Index.php
create mode 100644 app/admin/event.php
create mode 100644 app/admin/middleware.php
create mode 100644 app/common.php
create mode 100644 app/event.php
create mode 100644 app/home/common.php
create mode 100644 app/home/controller/Index.php
create mode 100644 app/home/event.php
create mode 100644 app/home/middleware.php
create mode 100644 app/middleware.php
create mode 100644 app/provider.php
create mode 100644 app/service.php
create mode 100644 composer.json
create mode 100644 config/app.php
create mode 100644 config/cache.php
create mode 100644 config/console.php
create mode 100644 config/cookie.php
create mode 100644 config/database.php
create mode 100644 config/filesystem.php
create mode 100644 config/lang.php
create mode 100644 config/log.php
create mode 100644 config/middleware.php
create mode 100644 config/route.php
create mode 100644 config/session.php
create mode 100644 config/trace.php
create mode 100644 config/view.php
create mode 100644 database/migrations/20241218064708_create_product.php
create mode 100644 database/migrations/20241218083326_create_product_params.php
create mode 100644 database/migrations/20241218083951_create_product_sku.php
create mode 100644 database/migrations/20241218094653_create_product_related.php
create mode 100644 database/migrations/20241218095340_create_sys_language.php
create mode 100644 database/migrations/20241218095839_create_sys_country.php
create mode 100644 database/migrations/20241219033236_create_product_attr.php
create mode 100644 database/migrations/20241219054243_create_product_attr_prop.php
create mode 100644 database/migrations/20241219074458_create_product_sku_attr.php
create mode 100644 database/migrations/20241219090629_create_product_category.php
create mode 100644 database/migrations/20241220021543_create_product_tco_category.php
create mode 100644 database/migrations/20241220024047_create_product_purchase_platform.php
create mode 100644 database/migrations/20241220024058_create_product_purchase_link.php
create mode 100644 database/migrations/20241220062425_create_article_category.php
create mode 100644 database/migrations/20241220062631_create_article.php
create mode 100644 database/migrations/20241220062635_create_article_leave_message.php
create mode 100644 database/migrations/20241220072120_create_sys_image.php
create mode 100644 database/migrations/20241220072926_create_video.php
create mode 100644 database/migrations/20241220073105_create_video_category.php
create mode 100644 database/migrations/20241220094223_create_attachment.php
create mode 100644 database/migrations/20241220094245_create_attachment_category.php
create mode 100644 database/migrations/20241224013949_create_faq.php
create mode 100644 database/migrations/20241224025811_create_contact_us.php
create mode 100644 database/migrations/20241224032339_create_bulk_purchase_inquiry.php
create mode 100644 database/migrations/20241224034202_create_agent.php
create mode 100644 database/migrations/20241224035530_create_agent_business_type.php
create mode 100644 database/migrations/20241224035543_create_agent_entryprice_size_type.php
create mode 100644 database/migrations/20241224080720_create_product_inquiry.php
create mode 100644 extend/.gitignore
create mode 100644 public/.htaccess
create mode 100644 public/favicon.ico
create mode 100644 public/index.php
create mode 100644 public/robots.txt
create mode 100644 public/router.php
create mode 100644 public/static/.gitignore
create mode 100644 route/app.php
create mode 100644 runtime/.gitignore
create mode 100644 think
diff --git a/.env.local b/.env.local
new file mode 100644
index 00000000..8abefefd
--- /dev/null
+++ b/.env.local
@@ -0,0 +1,12 @@
+APP_DEBUG = true
+
+DB_TYPE = mysql
+DB_HOST = 127.0.0.1
+DB_NAME = orico-official-website
+DB_USER = orico-official-website
+DB_PASS = 14Xi17NIK8V2qAXE8oMataHEsaR8lE
+DB_PORT = 3306
+DB_CHARSET = utf8mb4
+DB_PREFIX = ow_
+
+DEFAULT_LANG = zh-cn
diff --git a/.example.env b/.example.env
new file mode 100644
index 00000000..c457fe52
--- /dev/null
+++ b/.example.env
@@ -0,0 +1,11 @@
+APP_DEBUG = true
+
+DB_TYPE = mysql
+DB_HOST = 127.0.0.1
+DB_NAME = test
+DB_USER = username
+DB_PASS = password
+DB_PORT = 3306
+DB_CHARSET = utf8
+
+DEFAULT_LANG = zh-cn
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..f541ffe3
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,5 @@
+*.eot filter=lfs diff=lfs merge=lfs -text
+*.ttf filter=lfs diff=lfs merge=lfs -text
+*.woff filter=lfs diff=lfs merge=lfs -text
+*.woff2 filter=lfs diff=lfs merge=lfs -text
+*.svg filter=lfs diff=lfs merge=lfs -text
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..5054a67e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+*.log
+.env
+composer.phar
+composer.lock
+.DS_Store
+Thumbs.db
+/.idea
+/.vscode
+/vendor
+/.settings
+/.buildpath
+/.project
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..36f7b6f9
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,42 @@
+sudo: false
+
+language: php
+
+branches:
+ only:
+ - stable
+
+cache:
+ directories:
+ - $HOME/.composer/cache
+
+before_install:
+ - composer self-update
+
+install:
+ - composer install --no-dev --no-interaction --ignore-platform-reqs
+ - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip .
+ - composer require --update-no-dev --no-interaction "topthink/think-image:^1.0"
+ - composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0"
+ - composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0"
+ - composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0"
+ - composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0"
+ - composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0"
+ - composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0"
+ - composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0"
+ - composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0"
+ - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip .
+
+script:
+ - php think unit
+
+deploy:
+ provider: releases
+ api_key:
+ secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw=
+ file:
+ - ThinkPHP_Core.zip
+ - ThinkPHP_Full.zip
+ skip_cleanup: true
+ on:
+ tags: true
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 00000000..3dcd79ff
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,32 @@
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+版权所有Copyright © 2006-2023 by ThinkPHP (http://thinkphp.cn)
+All rights reserved。
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
+
+Apache Licence是著名的非盈利开源组织Apache采用的协议。
+该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,
+允许代码修改,再作为开源或商业软件发布。需要满足
+的条件:
+1. 需要给代码的用户一份Apache Licence ;
+2. 如果你修改了代码,需要在被修改的文件中说明;
+3. 在延伸的代码中(修改和有源代码衍生的代码中)需要
+带有原来代码中的协议,商标,专利声明和其他原来作者规
+定需要包含的说明;
+4. 如果再发布的产品中包含一个Notice文件,则在Notice文
+件中需要带有本协议内容。你可以在Notice中增加自己的
+许可,但不可以表现为对Apache Licence构成更改。
+具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..41d3e17c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,76 @@
+
+
+ThinkPHP 8
+===============
+
+## 特性
+
+* 基于PHP`8.0+`重构
+* 升级`PSR`依赖
+* 依赖`think-orm`3.0版本
+* `6.0`/`6.1`无缝升级
+
+> ThinkPHP8的运行环境要求PHP8.0+
+
+现在开始,你可以使用官方提供的[ThinkChat](https://chat.topthink.com/),让你在学习ThinkPHP的旅途中享受私人AI助理服务!
+
+
+
+ThinkPHP生态服务由[顶想云](https://www.topthink.com)(TOPThink Cloud)提供,为生态提供专业的开发者服务和价值之选。
+
+## 文档
+
+[完全开发手册](https://doc.thinkphp.cn)
+
+
+## 赞助
+
+全新的[赞助计划](https://www.thinkphp.cn/sponsor)可以让你通过我们的网站、手册、欢迎页及GIT仓库获得巨大曝光,同时提升企业的品牌声誉,也更好保障ThinkPHP的可持续发展。
+
+[](https://www.thinkphp.cn/sponsor/special)
+
+[](https://www.thinkphp.cn/sponsor)
+
+## 安装
+
+~~~
+composer create-project topthink/think tp
+~~~
+
+启动服务
+
+~~~
+cd tp
+php think run
+~~~
+
+然后就可以在浏览器中访问
+
+~~~
+http://localhost:8000
+~~~
+
+如果需要更新框架使用
+~~~
+composer update topthink/framework
+~~~
+
+## 命名规范
+
+`ThinkPHP`遵循PSR-2命名规范和PSR-4自动加载规范。
+
+## 参与开发
+
+直接提交PR或者Issue即可
+
+## 版权信息
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+
+本项目包含的第三方源码和二进制文件之版权信息另行标注。
+
+版权所有Copyright © 2006-2024 by ThinkPHP (http://thinkphp.cn) All rights reserved。
+
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
+
+更多细节参阅 [LICENSE.txt](LICENSE.txt)
diff --git a/app/.htaccess b/app/.htaccess
new file mode 100644
index 00000000..3418e55a
--- /dev/null
+++ b/app/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/app/AppService.php b/app/AppService.php
new file mode 100644
index 00000000..96556e88
--- /dev/null
+++ b/app/AppService.php
@@ -0,0 +1,22 @@
+app = $app;
+ $this->request = $this->app->request;
+
+ // 控制器初始化
+ $this->initialize();
+ }
+
+ // 初始化
+ protected function initialize()
+ {}
+
+ /**
+ * 验证数据
+ * @access protected
+ * @param array $data 数据
+ * @param string|array $validate 验证器名或者验证规则数组
+ * @param array $message 提示信息
+ * @param bool $batch 是否批量验证
+ * @return array|string|true
+ * @throws ValidateException
+ */
+ protected function validate(array $data, string|array $validate, array $message = [], bool $batch = false)
+ {
+ if (is_array($validate)) {
+ $v = new Validate();
+ $v->rule($validate);
+ } else {
+ if (strpos($validate, '.')) {
+ // 支持场景
+ [$validate, $scene] = explode('.', $validate);
+ }
+ $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
+ $v = new $class();
+ if (!empty($scene)) {
+ $v->scene($scene);
+ }
+ }
+
+ $v->message($message);
+
+ // 是否批量验证
+ if ($batch || $this->batchValidate) {
+ $v->batch(true);
+ }
+
+ return $v->failException(true)->check($data);
+ }
+
+}
diff --git a/app/ExceptionHandle.php b/app/ExceptionHandle.php
new file mode 100644
index 00000000..453d1260
--- /dev/null
+++ b/app/ExceptionHandle.php
@@ -0,0 +1,58 @@
+ [
+ ],
+
+ 'listen' => [
+ 'AppInit' => [],
+ 'HttpRun' => [],
+ 'HttpEnd' => [],
+ 'LogLevel' => [],
+ 'LogWrite' => [],
+ ],
+
+ 'subscribe' => [
+ ],
+];
diff --git a/app/home/common.php b/app/home/common.php
new file mode 100644
index 00000000..12436156
--- /dev/null
+++ b/app/home/common.php
@@ -0,0 +1,2 @@
+ Request::class,
+ 'think\exception\Handle' => ExceptionHandle::class,
+];
diff --git a/app/service.php b/app/service.php
new file mode 100644
index 00000000..db1ee6a8
--- /dev/null
+++ b/app/service.php
@@ -0,0 +1,9 @@
+=8.0.0",
+ "topthink/framework": "^8.0",
+ "topthink/think-orm": "^3.0|^4.0",
+ "topthink/think-filesystem": "^2.0",
+ "topthink/think-multi-app": "^1.1",
+ "topthink/think-migration": "^3.1",
+ "topthink/think-view": "^2.0"
+ },
+ "require-dev": {
+ "symfony/var-dumper": ">=4.2",
+ "topthink/think-trace": "^1.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "app\\": "app"
+ },
+ "psr-0": {
+ "": "extend/"
+ }
+ },
+ "config": {
+ "preferred-install": "dist"
+ },
+ "scripts": {
+ "post-autoload-dump": [
+ "@php think service:discover",
+ "@php think vendor:publish"
+ ]
+ }
+}
diff --git a/config/app.php b/config/app.php
new file mode 100644
index 00000000..63285d28
--- /dev/null
+++ b/config/app.php
@@ -0,0 +1,30 @@
+ '',
+ // 是否启用路由
+ 'with_route' => true,
+ // 默认应用
+ 'default_app' => 'index',
+ // 默认时区
+ 'default_timezone' => 'Asia/Shanghai',
+
+ // 应用映射(自动多应用模式有效)
+ 'app_map' => [],
+ // 域名绑定(自动多应用模式有效)
+ 'domain_bind' => [],
+ // 禁止URL访问的应用列表(自动多应用模式有效)
+ 'deny_app_list' => [],
+
+ // 异常页面的模板文件
+ 'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl',
+
+ // 错误显示信息,非调试模式有效
+ 'error_message' => '页面错误!请稍后再试~',
+ // 显示错误信息
+ 'show_error_msg' => false,
+];
diff --git a/config/cache.php b/config/cache.php
new file mode 100644
index 00000000..6b72dc89
--- /dev/null
+++ b/config/cache.php
@@ -0,0 +1,29 @@
+ 'file',
+
+ // 缓存连接方式配置
+ 'stores' => [
+ 'file' => [
+ // 驱动方式
+ 'type' => 'File',
+ // 缓存保存目录
+ 'path' => '',
+ // 缓存前缀
+ 'prefix' => '',
+ // 缓存有效期 0表示永久缓存
+ 'expire' => 0,
+ // 缓存标签前缀
+ 'tag_prefix' => 'tag:',
+ // 序列化机制 例如 ['serialize', 'unserialize']
+ 'serialize' => [],
+ ],
+ // 更多的缓存连接
+ ],
+];
diff --git a/config/console.php b/config/console.php
new file mode 100644
index 00000000..a818a980
--- /dev/null
+++ b/config/console.php
@@ -0,0 +1,9 @@
+ [
+ ],
+];
diff --git a/config/cookie.php b/config/cookie.php
new file mode 100644
index 00000000..d3b3aab9
--- /dev/null
+++ b/config/cookie.php
@@ -0,0 +1,20 @@
+ 0,
+ // cookie 保存路径
+ 'path' => '/',
+ // cookie 有效域名
+ 'domain' => '',
+ // cookie 启用安全传输
+ 'secure' => false,
+ // httponly设置
+ 'httponly' => false,
+ // 是否使用 setcookie
+ 'setcookie' => true,
+ // samesite 设置,支持 'strict' 'lax'
+ 'samesite' => '',
+];
diff --git a/config/database.php b/config/database.php
new file mode 100644
index 00000000..bd5ab81b
--- /dev/null
+++ b/config/database.php
@@ -0,0 +1,63 @@
+ env('DB_DRIVER', 'mysql'),
+
+ // 自定义时间查询规则
+ 'time_query_rule' => [],
+
+ // 自动写入时间戳字段
+ // true为自动识别类型 false关闭
+ // 字符串则明确指定时间字段类型 支持 int timestamp datetime date
+ 'auto_timestamp' => true,
+
+ // 时间字段取出后的默认时间格式
+ 'datetime_format' => 'Y-m-d H:i:s',
+
+ // 时间字段配置 配置格式:create_time,update_time
+ 'datetime_field' => '',
+
+ // 数据库连接配置信息
+ 'connections' => [
+ 'mysql' => [
+ // 数据库类型
+ 'type' => env('DB_TYPE', 'mysql'),
+ // 服务器地址
+ 'hostname' => env('DB_HOST', '127.0.0.1'),
+ // 数据库名
+ 'database' => env('DB_NAME', ''),
+ // 用户名
+ 'username' => env('DB_USER', 'root'),
+ // 密码
+ 'password' => env('DB_PASS', ''),
+ // 端口
+ 'hostport' => env('DB_PORT', '3306'),
+ // 数据库连接参数
+ 'params' => [],
+ // 数据库编码默认采用utf8
+ 'charset' => env('DB_CHARSET', 'utf8'),
+ // 数据库表前缀
+ 'prefix' => env('DB_PREFIX', ''),
+
+ // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
+ 'deploy' => 0,
+ // 数据库读写是否分离 主从式有效
+ 'rw_separate' => false,
+ // 读写分离后 主服务器数量
+ 'master_num' => 1,
+ // 指定从服务器序号
+ 'slave_no' => '',
+ // 是否严格检查字段是否存在
+ 'fields_strict' => true,
+ // 是否需要断线重连
+ 'break_reconnect' => false,
+ // 监听SQL
+ 'trigger_sql' => env('APP_DEBUG', true),
+ // 开启字段缓存
+ 'fields_cache' => false,
+ ],
+
+ // 更多的数据库配置信息
+ ],
+];
diff --git a/config/filesystem.php b/config/filesystem.php
new file mode 100644
index 00000000..582a8f81
--- /dev/null
+++ b/config/filesystem.php
@@ -0,0 +1,24 @@
+ 'local',
+ // 磁盘列表
+ 'disks' => [
+ 'local' => [
+ 'type' => 'local',
+ 'root' => app()->getRuntimePath() . 'storage',
+ ],
+ 'public' => [
+ // 磁盘类型
+ 'type' => 'local',
+ // 磁盘路径
+ 'root' => app()->getRootPath() . 'public/storage',
+ // 磁盘路径对应的外部URL路径
+ 'url' => '/storage',
+ // 可见性
+ 'visibility' => 'public',
+ ],
+ // 更多的磁盘配置信息
+ ],
+];
diff --git a/config/lang.php b/config/lang.php
new file mode 100644
index 00000000..0d8b693a
--- /dev/null
+++ b/config/lang.php
@@ -0,0 +1,27 @@
+ env('DEFAULT_LANG', 'zh-cn'),
+ // 允许的语言列表
+ 'allow_lang_list' => [],
+ // 多语言自动侦测变量名
+ 'detect_var' => 'lang',
+ // 是否使用Cookie记录
+ 'use_cookie' => true,
+ // 多语言cookie变量
+ 'cookie_var' => 'think_lang',
+ // 多语言header变量
+ 'header_var' => 'think-lang',
+ // 扩展语言包
+ 'extend_list' => [],
+ // Accept-Language转义为对应语言包名称
+ 'accept_language' => [
+ 'zh-hans-cn' => 'zh-cn',
+ ],
+ // 是否支持语言分组
+ 'allow_group' => false,
+];
diff --git a/config/log.php b/config/log.php
new file mode 100644
index 00000000..0d406f84
--- /dev/null
+++ b/config/log.php
@@ -0,0 +1,45 @@
+ 'file',
+ // 日志记录级别
+ 'level' => [],
+ // 日志类型记录的通道 ['error'=>'email',...]
+ 'type_channel' => [],
+ // 关闭全局日志写入
+ 'close' => false,
+ // 全局日志处理 支持闭包
+ 'processor' => null,
+
+ // 日志通道列表
+ 'channels' => [
+ 'file' => [
+ // 日志记录方式
+ 'type' => 'File',
+ // 日志保存目录
+ 'path' => '',
+ // 单文件日志写入
+ 'single' => false,
+ // 独立日志级别
+ 'apart_level' => [],
+ // 最大日志文件数量
+ 'max_files' => 0,
+ // 使用JSON格式记录
+ 'json' => false,
+ // 日志处理
+ 'processor' => null,
+ // 关闭通道日志写入
+ 'close' => false,
+ // 日志输出格式化
+ 'format' => '[%s][%s] %s',
+ // 是否实时写入
+ 'realtime_write' => false,
+ ],
+ // 其它日志通道配置
+ ],
+
+];
diff --git a/config/middleware.php b/config/middleware.php
new file mode 100644
index 00000000..7e1972f5
--- /dev/null
+++ b/config/middleware.php
@@ -0,0 +1,8 @@
+ [],
+ // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
+ 'priority' => [],
+];
diff --git a/config/route.php b/config/route.php
new file mode 100644
index 00000000..8ff5eeca
--- /dev/null
+++ b/config/route.php
@@ -0,0 +1,51 @@
+ '/',
+ // 是否开启路由延迟解析
+ 'url_lazy_route' => false,
+ // 是否强制使用路由
+ 'url_route_must' => false,
+ // 是否区分大小写
+ 'url_case_sensitive' => false,
+ // 合并路由规则
+ 'route_rule_merge' => false,
+ // 路由是否完全匹配
+ 'route_complete_match' => false,
+ // 去除斜杠
+ 'remove_slash' => false,
+ // 默认的路由变量规则
+ 'default_route_pattern' => '[\w\.]+',
+ // URL伪静态后缀
+ 'url_html_suffix' => 'html',
+ // 访问控制器层名称
+ 'controller_layer' => 'controller',
+ // 空控制器名
+ 'empty_controller' => 'Error',
+ // 是否使用控制器后缀
+ 'controller_suffix' => false,
+ // 默认模块名(开启自动多模块有效)
+ 'default_module' => 'home',
+ // 默认控制器名
+ 'default_controller' => 'Index',
+ // 默认操作名
+ 'default_action' => 'index',
+ // 操作方法后缀
+ 'action_suffix' => '',
+ // 非路由变量是否使用普通参数方式(用于URL生成)
+ 'url_common_param' => true,
+ // 操作方法的参数绑定方式 route get param
+ 'action_bind_param' => 'get',
+ // 请求缓存规则 true为自动规则
+ 'request_cache_key' => true,
+ // 请求缓存有效期
+ 'request_cache_expire' => null,
+ // 全局请求缓存排除规则
+ 'request_cache_except' => [],
+ // 请求缓存的Tag
+ 'request_cache_tag' => '',
+];
diff --git a/config/session.php b/config/session.php
new file mode 100644
index 00000000..c1ef6e16
--- /dev/null
+++ b/config/session.php
@@ -0,0 +1,19 @@
+ 'PHPSESSID',
+ // SESSION_ID的提交变量,解决flash上传跨域
+ 'var_session_id' => '',
+ // 驱动方式 支持file cache
+ 'type' => 'file',
+ // 存储连接标识 当type使用cache的时候有效
+ 'store' => null,
+ // 过期时间
+ 'expire' => 1440,
+ // 前缀
+ 'prefix' => '',
+];
diff --git a/config/trace.php b/config/trace.php
new file mode 100644
index 00000000..fad2392d
--- /dev/null
+++ b/config/trace.php
@@ -0,0 +1,10 @@
+ 'Html',
+ // 读取的日志通道名
+ 'channel' => '',
+];
diff --git a/config/view.php b/config/view.php
new file mode 100644
index 00000000..01259a0e
--- /dev/null
+++ b/config/view.php
@@ -0,0 +1,25 @@
+ 'Think',
+ // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法
+ 'auto_rule' => 1,
+ // 模板目录名
+ 'view_dir_name' => 'view',
+ // 模板后缀
+ 'view_suffix' => 'html',
+ // 模板文件名分隔符
+ 'view_depr' => DIRECTORY_SEPARATOR,
+ // 模板引擎普通标签开始标记
+ 'tpl_begin' => '{',
+ // 模板引擎普通标签结束标记
+ 'tpl_end' => '}',
+ // 标签库标签开始标记
+ 'taglib_begin' => '{',
+ // 标签库标签结束标记
+ 'taglib_end' => '}',
+];
diff --git a/database/migrations/20241218064708_create_product.php b/database/migrations/20241218064708_create_product.php
new file mode 100644
index 00000000..e6b8234d
--- /dev/null
+++ b/database/migrations/20241218064708_create_product.php
@@ -0,0 +1,54 @@
+table('product', ['engine' => 'InnoDB', 'comment' => '产品表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('category_id', 'integer', ['signed' => false , 'null' => true, 'comment' => '分类ID'])
+ ->addColumn('spu', 'string', ['limit' => 255, 'null' => false, 'default' => '', 'comment' => '产品规格'])
+ ->addColumn('name', 'string', ['limit' => 125, 'null' => false, 'default' => '', 'comment' => '产品名称'])
+ ->addColumn('short_name', 'string', ['limit' => 64, 'null' => false, 'default' => '', 'comment' => '产品简称'])
+ ->addColumn('cover_image', 'string', ['limit' => 255, 'null' => false, 'default' => '', 'comment' => '产品封面图片'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'null' => false, 'default' => '', 'comment' => '产品描述'])
+ ->addColumn('video_img', 'string', ['limit' => 255, 'null' => false, 'default' => '', 'comment' => '产品视频封面'])
+ ->addColumn('video_url', 'string', ['limit' => 255, 'null' => false, 'default' => '', 'comment' => '产品视频'])
+ ->addColumn('is_sale', 'boolean', ['default' => 1, 'null' => false, 'comment' => '是否上架:1上架,0下架'])
+ ->addColumn('is_new', 'boolean', ['default' => 0, 'null' => false, 'comment' => '是否新品:1新品,0非新品'])
+ ->addColumn('is_hot', 'boolean', ['default' => 0, 'null' => false, 'comment' => '是否热销:1热销,0非热销'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('detail', 'text', ['null' => true, 'comment' => '产品详情'])
+ ->addColumn('status', 'boolean', ['null' => false, 'default' => 1, 'comment' => '状态:1启用,-1禁用'])
+ ->addColumn('seo_title', 'string', ['limit' => 255, 'default' => null, 'comment' => 'seo标题'])
+ ->addColumn('seo_keyword', 'string', ['limit' => 255, 'default' => null, 'comment' => 'seo关建词'])
+ ->addColumn('seo_desc', 'string', ['limit' => 255, 'default' => null, 'comment' => 'seo描述'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241218083326_create_product_params.php b/database/migrations/20241218083326_create_product_params.php
new file mode 100644
index 00000000..ba79599c
--- /dev/null
+++ b/database/migrations/20241218083326_create_product_params.php
@@ -0,0 +1,38 @@
+table('product_params', ['engine' => 'InnoDB', 'comment' => '产品参数表']);
+ $table->addColumn('product_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '产品ID'])
+ ->addColumn('name', 'string', ['limit' => 125, 'null' => false, 'default' => '', 'comment' => '参数名'])
+ ->addColumn('value', 'string', ['limit' => 125, 'null' => false, 'default' => '', 'comment' => '参数值'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241218083951_create_product_sku.php b/database/migrations/20241218083951_create_product_sku.php
new file mode 100644
index 00000000..f64ad35d
--- /dev/null
+++ b/database/migrations/20241218083951_create_product_sku.php
@@ -0,0 +1,40 @@
+table('product_sku', ['engine' => 'InnoDB', 'comment' => '产品SKU表']);
+ $table->addColumn('product_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '产品ID'])
+ ->addColumn('sku', 'string', ['limit' => 125, 'null' => false, 'default' => '', 'comment' => 'SKU名称'])
+ ->addColumn('main_image', 'string', ['limit' => 255, 'null' => false, 'default' => '', 'comment' => '主图'])
+ ->addColumn('photo_album', 'json', ['null' => true, 'default'=> null, 'comment' => '相册'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->create();
+ }
+}
\ No newline at end of file
diff --git a/database/migrations/20241218094653_create_product_related.php b/database/migrations/20241218094653_create_product_related.php
new file mode 100644
index 00000000..450db3db
--- /dev/null
+++ b/database/migrations/20241218094653_create_product_related.php
@@ -0,0 +1,39 @@
+table('product_related', ['engine' => 'InnoDB', 'comment' => '产品关联表']);
+ $table->addColumn('product_id', 'integer', ['signed' => true , 'null' => false, 'comment' => '产品ID'])
+ ->addColumn('related_product_id', 'integer', ['signed' => true , 'null' => false, 'comment' => '关联的产品ID'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'default' => null, 'comment' => '描述信息'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241218095340_create_sys_language.php b/database/migrations/20241218095340_create_sys_language.php
new file mode 100644
index 00000000..2c88185b
--- /dev/null
+++ b/database/migrations/20241218095340_create_sys_language.php
@@ -0,0 +1,43 @@
+table('sys_language', ['engine' => 'MyISAM', 'comment' => '语言表']);
+ $table->addColumn('country_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '国家ID'])
+ ->addColumn('name', 'string', ['limit' => 64, 'null' => false, 'default' => '', 'comment' => '语言名称'])
+ ->addColumn('code', 'string', ['limit' => 64, 'null' => false, 'default' => '', 'comment' => '语言编码'])
+ ->addColumn('icon', 'string', ['limit' => 64, 'default' => null, 'comment' => '语言图标'])
+ ->addColumn('url', 'string', ['limit' => 125, 'default' => null, 'comment' => '切换后访问的url'])
+ ->addColumn('status', 'boolean', ['null' => false,'default' => 1, 'comment' => '状态:1启用,0禁用'])
+ ->addColumn('is_default', 'boolean', ['null' => false, 'default' => 0, 'comment' => '是否默认:1是,0否'])
+ ->addColumn('sort', 'integer', ['default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241218095839_create_sys_country.php b/database/migrations/20241218095839_create_sys_country.php
new file mode 100644
index 00000000..f49aa520
--- /dev/null
+++ b/database/migrations/20241218095839_create_sys_country.php
@@ -0,0 +1,40 @@
+table('sys_country', ['engine' => 'MyISAM', 'comment' => '国家表']);
+ $table->addColumn('name', 'string', ['limit' => 120, 'null' => false, 'default' => '', 'comment' => '国家名称'])
+ ->addColumn('code', 'string', ['limit' => 64, 'null' => false, 'default' => '', 'comment' => '国家代码'])
+ ->addColumn('icon', 'string', ['limit' => 64, 'default' => null, 'comment' => '国家图标'])
+ ->addColumn('status', 'boolean', ['default' => 1, 'comment' => '状态:1启用,0禁用'])
+ ->addColumn('sort', 'integer', ['default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241219033236_create_product_attr.php b/database/migrations/20241219033236_create_product_attr.php
new file mode 100644
index 00000000..f8dd0f9d
--- /dev/null
+++ b/database/migrations/20241219033236_create_product_attr.php
@@ -0,0 +1,39 @@
+table('product_attr', ['engine' => 'InnoDB', 'comment' => '商品属性表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('attr_name', 'string', ['limit' => 64, 'signed' => false, 'null' => false, 'comment' => '属性ID'])
+ ->addColumn('is_system', 'boolean', ['null' => false, 'default' => 0, 'comment' => '是否系统属性:1是,0否'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '新增时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241219054243_create_product_attr_prop.php b/database/migrations/20241219054243_create_product_attr_prop.php
new file mode 100644
index 00000000..e730b8fe
--- /dev/null
+++ b/database/migrations/20241219054243_create_product_attr_prop.php
@@ -0,0 +1,38 @@
+table('product_attr_prop', ['id' => false, 'engine' => 'InnoDB', 'comment' => '商品属性特征表']);
+ $table->addColumn('attr_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '属性ID'])
+ ->addColumn('prop_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '特征名'])
+ ->addColumn('prop_value', 'string', ['limit' => 64, 'null' => false, 'comment' => '特征值'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '新增时间'])
+ ->addForeignKey('attr_id', 'product_attr', 'id', ['update' => 'CASCADE', 'delete' => 'CASCADE'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241219074458_create_product_sku_attr.php b/database/migrations/20241219074458_create_product_sku_attr.php
new file mode 100644
index 00000000..70d01c4b
--- /dev/null
+++ b/database/migrations/20241219074458_create_product_sku_attr.php
@@ -0,0 +1,37 @@
+table('product_sku_attr', ['id' => false,'engine' => 'InnoDB', 'comment' => '产品SKU属性表']);
+ $table->addColumn('sku_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '产品SKU ID'])
+ ->addColumn('attr_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '属性ID'])
+ ->addColumn('prop_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '属性特征ID'])
+ ->addForeignKey('sku_id', 'product_sku', 'id', ['update' => 'CASCADE', 'delete' => 'CASCADE'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241219090629_create_product_category.php b/database/migrations/20241219090629_create_product_category.php
new file mode 100644
index 00000000..2bc76010
--- /dev/null
+++ b/database/migrations/20241219090629_create_product_category.php
@@ -0,0 +1,50 @@
+table('product_category', ['engine' => 'InnoDB', 'comment' => '商品分类表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('unique_id', 'string', ['limit' => 64, 'null' => false, 'comment' => '唯一ID'])
+ ->addColumn('pid', 'integer', ['signed' => false, 'null' => false, 'default' => 0, 'comment' => '父级ID'])
+ ->addColumn('name', 'string', ['limit' => 64, 'null' => false, 'comment' => '分类名称'])
+ ->addColumn('icon', 'string', ['limit' => 125, 'default' => null, 'comment' => '图标'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'default' => null, 'comment' => '描述信息'])
+ ->addColumn('related_tco_category', 'string', ['limit' => 64, 'default' => null, 'comment' => '关联 tco(产品目录) 商品分类ID,多个用英文逗号分隔'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('level', 'integer', ['limit' => MysqlAdapter::INT_TINY,'null' => false, 'default' => 1, 'comment' => '层级'])
+ ->addColumn('is_show', 'boolean', ['null' => false, 'default' => 1, 'comment' => '是否显示:1是,0否'])
+ ->addColumn('seo_title', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO标题'])
+ ->addColumn('seo_keywords', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO关键字'])
+ ->addColumn('seo_desc', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO描述'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '新增时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220021543_create_product_tco_category.php b/database/migrations/20241220021543_create_product_tco_category.php
new file mode 100644
index 00000000..352c77f4
--- /dev/null
+++ b/database/migrations/20241220021543_create_product_tco_category.php
@@ -0,0 +1,46 @@
+table('product_tco_category', ['engine' => 'InnoDB', 'comment' => '产品目录分类同步记录表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('name', 'string', ['limit' => 64, 'null' => false, 'comment' => '分类名称'])
+ ->addColumn('tco_id', 'integer', ['default' => null, 'comment' => '产品目录分类ID'])
+ ->addColumn('tco_pid', 'integer', ['default' => null, 'comment' => '产品目录分类父级ID'])
+ ->addColumn('tco_path', 'string', ['limit' => 120, 'default' => null, 'comment' => '产品目录分类上下级关联路径'])
+ ->addColumn('erp_id', 'integer', ['default' => null, 'comment' => '分类在ERP中的ID'])
+ ->addColumn('erp_pid', 'integer', ['default' => null, 'comment' => '分类在ERP中的父级ID'])
+ ->addColumn('erp_path', 'string', ['limit' => 120, 'default' => null, 'comment' => '分类在ERP中的上下级关联路径'])
+ ->addColumn('disabled', 'boolean', ['null' => false, 'default' => 0, 'comment' => '0为启用, 1为禁用'])
+ ->addColumn('sync_time', 'integer', ['null' => false, 'default' => 0, 'comment' => '同步时间'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '新增时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
\ No newline at end of file
diff --git a/database/migrations/20241220024047_create_product_purchase_platform.php b/database/migrations/20241220024047_create_product_purchase_platform.php
new file mode 100644
index 00000000..07410477
--- /dev/null
+++ b/database/migrations/20241220024047_create_product_purchase_platform.php
@@ -0,0 +1,38 @@
+table('product_purchase_platform', ['engine' => 'InnoDB', 'comment' => '产品购买平台表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('platform', 'string', ['limit' => 64 , 'null' => false, 'comment' => '平台'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'default' => null, 'comment' => '描述'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220024058_create_product_purchase_link.php b/database/migrations/20241220024058_create_product_purchase_link.php
new file mode 100644
index 00000000..6a7f43cd
--- /dev/null
+++ b/database/migrations/20241220024058_create_product_purchase_link.php
@@ -0,0 +1,39 @@
+table('product_purchase_link', ['engine' => 'InnoDB', 'comment' => '产品购买链接表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('product_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '产品ID'])
+ ->addColumn('platform_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '平台ID'])
+ ->addColumn('link', 'string', ['limit' => 255, 'null' => false, 'default' => '', 'comment' => '链接'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220062425_create_article_category.php b/database/migrations/20241220062425_create_article_category.php
new file mode 100644
index 00000000..fe1e707c
--- /dev/null
+++ b/database/migrations/20241220062425_create_article_category.php
@@ -0,0 +1,49 @@
+table('article_category', ['engine' => 'MyISAM', 'comment' => '文章分类表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('pid', 'integer', ['signed' => false, 'null' => false, 'default' => 0, 'comment' => '父级ID'])
+ ->addColumn('name', 'string', ['limit' => 64, 'null' => false, 'comment' => '分类名称'])
+ ->addColumn('short_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '分类简称'])
+ ->addColumn('icon', 'string', ['limit' => 125, 'default' => null, 'comment' => '图标'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'default' => null, 'comment' => '描述信息'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('level', 'integer', ['limit' => MysqlAdapter::INT_TINY,'null' => false, 'default' => 1, 'comment' => '层级'])
+ ->addColumn('is_show', 'boolean', ['null' => false, 'default' => 1, 'comment' => '是否显示:1是,0否'])
+ ->addColumn('seo_title', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO标题'])
+ ->addColumn('seo_keywords', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO关键字'])
+ ->addColumn('seo_desc', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO描述'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '新增时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220062631_create_article.php b/database/migrations/20241220062631_create_article.php
new file mode 100644
index 00000000..5c461413
--- /dev/null
+++ b/database/migrations/20241220062631_create_article.php
@@ -0,0 +1,53 @@
+table('article', ['engine' => 'MyISAM', 'comment' => '文章表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('category_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '分类ID'])
+ ->addColumn('title', 'string', ['limit' => 64, 'null' => false, 'comment' => '标题'])
+ ->addColumn('author', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '作者'])
+ ->addColumn('source', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '来源'])
+ ->addColumn('image', 'string', ['limit' => 125, 'null' => true, 'default' => null, 'comment' => '封面图片'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '描述信息'])
+ ->addColumn('recommend', 'boolean', ['null' => false, 'default' => 0, 'comment' => '是否推荐:1是,0否'])
+ ->addColumn('release_time', 'integer', ['null' => false, 'comment' => '发布时间'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('link', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '外链'])
+ ->addColumn('content', 'text', ['null' => false, 'comment' => '内容'])
+ ->addColumn('view_count', 'integer', ['null' => false, 'default' => 0, 'comment' => '浏览量'])
+ ->addColumn('praise_count', 'integer', ['null' => false, 'default' => 0, 'comment' => '点赞量'])
+ ->addColumn('seo_title', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => 'SEO标题'])
+ ->addColumn('seo_keywords', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => 'SEO关键字'])
+ ->addColumn('seo_desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => 'SEO描述'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220062635_create_article_leave_message.php b/database/migrations/20241220062635_create_article_leave_message.php
new file mode 100644
index 00000000..65eab248
--- /dev/null
+++ b/database/migrations/20241220062635_create_article_leave_message.php
@@ -0,0 +1,41 @@
+table('article_leave_message', ['engine' => 'MyISAM', 'comment' => '文章留言表']);
+ $table->addColumn('article_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '文章ID'])
+ ->addColumn('name', 'string', ['limit' => 64, 'null' => false, 'comment' => '姓名'])
+ ->addColumn('email', 'string', ['limit' => 128, 'null' => false, 'comment' => '邮箱'])
+ ->addColumn('content', 'text', ['null' => false, 'comment' => '内容'])
+ ->addColumn('ip', 'string', ['limit' => 64, 'null' => false, 'comment' => 'IP'])
+ ->addColumn('user_agent', 'string', ['limit' => 255, 'null' => false, 'comment' => 'UserAgent'])
+ ->addColumn('is_audited', 'boolean', ['null' => false, 'default' => 0, 'comment' => '0待审核,1已审核'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220072120_create_sys_image.php b/database/migrations/20241220072120_create_sys_image.php
new file mode 100644
index 00000000..536d3519
--- /dev/null
+++ b/database/migrations/20241220072120_create_sys_image.php
@@ -0,0 +1,43 @@
+table('sys_image', ['engine' => 'MyISAM', 'comment' => '图片表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('image_name', 'string', ['limit' => 125, 'null' => false, 'comment' => '图片名称'])
+ ->addColumn('image_path', 'string', ['limit' => 125, 'null' => false, 'comment' => '图片路径'])
+ ->addColumn('image_thumb', 'string', ['limit' => 125, 'null' => false, 'comment' => '缩略图路径'])
+ ->addColumn('image_size', 'integer', ['null' => false, 'comment' => '图片大小'])
+ ->addColumn('image_type', 'string', ['limit' => 125, 'null' => false, 'comment' => '图片类型'])
+ ->addColumn('image_md5', 'string', ['limit' => 32, 'null' => false, 'comment' => '图片md5值'])
+ ->addColumn('image_sha1', 'string', ['limit' => 40, 'null' => false, 'comment' => '图片sha1值'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220072926_create_video.php b/database/migrations/20241220072926_create_video.php
new file mode 100644
index 00000000..4e3e8f26
--- /dev/null
+++ b/database/migrations/20241220072926_create_video.php
@@ -0,0 +1,47 @@
+table('video', ['engine' => 'MyISAM', 'comment' => '视频表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('category_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '分类ID'])
+ ->addColumn('name', 'string', ['limit' => 64 , 'null' => false, 'comment' => '名称'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '描述信息'])
+ ->addColumn('image', 'string', ['limit' => 125, 'null' => false, 'comment' => '封面图片'])
+ ->addColumn('video', 'string', ['limit' => 125, 'null' => false, 'comment' => '视频地址'])
+ ->addColumn('link', 'string', ['limit' => 125, 'null' => true, 'default' => null, 'comment' => '外链地址'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('recommend', 'boolean', ['null' => false, 'default' => 1, 'comment' => '是否推荐:1是,0否'])
+ ->addColumn('seo_title', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO标题'])
+ ->addColumn('seo_keywords', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO关键字'])
+ ->addColumn('seo_desc', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO描述'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220073105_create_video_category.php b/database/migrations/20241220073105_create_video_category.php
new file mode 100644
index 00000000..7f1f4a73
--- /dev/null
+++ b/database/migrations/20241220073105_create_video_category.php
@@ -0,0 +1,37 @@
+table('video_category', ['engine' => 'MyISAM', 'comment' => '视频分类表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('name', 'string', ['limit' => 64 , 'null' => false, 'comment' => '分类名称'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('is_show', 'boolean', ['null' => false, 'default' => 1, 'comment' => '是否显示:1是,0否'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220094223_create_attachment.php b/database/migrations/20241220094223_create_attachment.php
new file mode 100644
index 00000000..be37bc88
--- /dev/null
+++ b/database/migrations/20241220094223_create_attachment.php
@@ -0,0 +1,49 @@
+table('attachment', ['engine' => 'MyISAM', 'comment' => '附件表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('category_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '分类ID'])
+ ->addColumn('name', 'string', ['limit' => 64 , 'null' => false, 'comment' => '名称'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'default' => null, 'comment' => '描述信息'])
+ ->addColumn('image', 'string', ['limit' => 255, 'default' => null, 'comment' => '图片地址'])
+ ->addColumn('applicable_to', 'string', ['limit' => 255, 'default' => null, 'comment' => '适用于(型号),多个以英文逗号分隔'])
+ ->addColumn('support_platform', 'string', ['limit' => 255, 'default' => null, 'comment' => '支持平台,多个以英文逗号分隔'])
+ ->addColumn('attach', 'json', ['null' => false, 'comment' => '附件地址: $[*].url为附件地址, $[*].ext为文件格式, $[*].btn_name为下载按钮名称'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('recommend', 'boolean', ['null' => false, 'default' => 0, 'comment' => '是否推荐:1是,0否'])
+ ->addColumn('seo_title', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO标题'])
+ ->addColumn('seo_keywords', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO关键字'])
+ ->addColumn('seo_desc', 'string', ['limit' => 255, 'default' => null, 'comment' => 'SEO描述'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241220094245_create_attachment_category.php b/database/migrations/20241220094245_create_attachment_category.php
new file mode 100644
index 00000000..9318a367
--- /dev/null
+++ b/database/migrations/20241220094245_create_attachment_category.php
@@ -0,0 +1,40 @@
+table('attachment_category', ['engine' => 'MyISAM', 'comment' => '附件分类表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('name', 'string', ['limit' => 64 , 'null' => false, 'comment' => '分类名称'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('is_show', 'boolean', ['null' => false, 'default' => 1, 'comment' => '是否显示:1是,0否'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241224013949_create_faq.php b/database/migrations/20241224013949_create_faq.php
new file mode 100644
index 00000000..85e27a81
--- /dev/null
+++ b/database/migrations/20241224013949_create_faq.php
@@ -0,0 +1,42 @@
+table('faq', ['engine' => 'MyISAM', 'comment' => '常见问题表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('image', 'string', ['limit' => 125, 'null' => true, 'default' => null, 'comment' => '图片地址'])
+ ->addColumn('question', 'string', ['limit' => 255, 'null' => false, 'comment' => '问题内容'])
+ ->addColumn('answer', 'text', ['null' => true, 'default' => null, 'comment' => '回答内容'])
+ ->addColumn('recommend', 'boolean', ['null' => false, 'default' => 0, 'comment' => '是否推荐:1是,0否'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->addColumn('updated_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'update' => 'CURRENT_TIMESTAMP', 'comment' => '更新时间'])
+ ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241224025811_create_contact_us.php b/database/migrations/20241224025811_create_contact_us.php
new file mode 100644
index 00000000..e012df32
--- /dev/null
+++ b/database/migrations/20241224025811_create_contact_us.php
@@ -0,0 +1,40 @@
+table('contact_us', ['engine' => 'MyISAM', 'comment' => '联系我们表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('name', 'string', ['limit' => 64, 'null' => false, 'comment' => '姓名'])
+ ->addColumn('email', 'string', ['limit' => 128, 'null' => false, 'comment' => '邮箱'])
+ ->addColumn('content', 'text', ['null' => false, 'comment' => '内容'])
+ ->addColumn('ip', 'string', ['limit' => 64, 'null' => false, 'comment' => 'IP'])
+ ->addColumn('user_agent', 'string', ['limit' => 255, 'null' => false, 'comment' => 'UserAgent'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241224032339_create_bulk_purchase_inquiry.php b/database/migrations/20241224032339_create_bulk_purchase_inquiry.php
new file mode 100644
index 00000000..e62bcf43
--- /dev/null
+++ b/database/migrations/20241224032339_create_bulk_purchase_inquiry.php
@@ -0,0 +1,47 @@
+table('bulk_purchase_inquiry', ['engine' => 'MyISAM', 'comment' => '批量采购询盘表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('corp_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '公司名称'])
+ ->addColumn('first_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '姓'])
+ ->addColumn('last_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '名'])
+ ->addColumn('email', 'string', ['limit' => 128, 'null' => false, 'comment' => '邮箱'])
+ ->addColumn('phone', 'string', ['limit' => 32, 'null' => false, 'comment' => '电话'])
+ ->addColumn('province', 'string', ['limit' => 64, 'null' => false, 'comment' => '省'])
+ ->addColumn('city', 'string', ['limit' => 64, 'null' => false, 'comment' => '市'])
+ ->addColumn('district', 'string', ['limit' => 64, 'null' => false, 'comment' => '区'])
+ ->addColumn('address', 'string', ['limit' => 255, 'null' => false, 'comment' => '地址'])
+ ->addColumn('interest', 'string', ['limit' => 255, 'null' => false, 'comment' => '兴趣(感兴趣的产品品类)'])
+ ->addColumn('message', 'text', ['null' => false, 'comment' => '留言内容'])
+ ->addColumn('ip', 'string', ['limit' => 64, 'null' => false, 'comment' => 'IP'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241224034202_create_agent.php b/database/migrations/20241224034202_create_agent.php
new file mode 100644
index 00000000..c5cae676
--- /dev/null
+++ b/database/migrations/20241224034202_create_agent.php
@@ -0,0 +1,46 @@
+table('agent', ['engine' => 'MyISAM', 'comment' => '代理商表']);
+ $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID'])
+ ->addColumn('corp_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '公司名称'])
+ ->addColumn('email', 'string', ['limit' => 64, 'null' => false, 'comment' => '邮箱'])
+ ->addColumn('phone', 'string', ['limit' => 64, 'null' => false, 'comment' => '电话'])
+ ->addColumn('website_url', 'string', ['limit' => 128, 'null' => false, 'comment' => '网站地址'])
+ ->addColumn('business_type', 'integer', ['null' => false, 'comment' => '业务类型'])
+ ->addColumn('enterprise_size', 'integer', ['null' => false, 'comment' => '企业规模'])
+ ->addColumn('province', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '省'])
+ ->addColumn('city', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '市'])
+ ->addColumn('district', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '区/县'])
+ ->addColumn('address', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '地址'])
+ ->addColumn('message', 'text', ['null' => true, 'default' => null, 'comment' => '留言'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241224035530_create_agent_business_type.php b/database/migrations/20241224035530_create_agent_business_type.php
new file mode 100644
index 00000000..85f5bdb7
--- /dev/null
+++ b/database/migrations/20241224035530_create_agent_business_type.php
@@ -0,0 +1,38 @@
+table('agent_business_type', ['engine' => 'MyISAM', 'comment' => '代理商业务类型表']);
+ $table->addColumn('cn_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '业务类型名称'])
+ ->addColumn('en_name', 'string', ['limit' => 128, 'null' => false, 'comment' => '英文名称'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '业务类型描述'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241224035543_create_agent_entryprice_size_type.php b/database/migrations/20241224035543_create_agent_entryprice_size_type.php
new file mode 100644
index 00000000..ad77df8a
--- /dev/null
+++ b/database/migrations/20241224035543_create_agent_entryprice_size_type.php
@@ -0,0 +1,38 @@
+table('agent_entryprice_size_type', ['engine' => 'MyISAM', 'comment' => '代理商企业规模类型表']);
+ $table->addColumn('cn_name', 'integer', ['signed' => false, 'null' => false, 'comment' => '中文类型名'])
+ ->addColumn('en_name', 'integer', ['signed' => false, 'null' => false, 'comment' => '英文类型名'])
+ ->addColumn('desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '描述信息'])
+ ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/database/migrations/20241224080720_create_product_inquiry.php b/database/migrations/20241224080720_create_product_inquiry.php
new file mode 100644
index 00000000..ba64faa1
--- /dev/null
+++ b/database/migrations/20241224080720_create_product_inquiry.php
@@ -0,0 +1,43 @@
+table('product_inquiry', ['engine' => 'MyISAM', 'comment' => '产品询盘表']);
+ $table->addColumn('language_id', 'integer', ['null' => false, 'comment' => '语言ID'])
+ ->addColumn('corp_name', 'string', ['limit' => 128, 'null' => false, 'comment' => '公司名称'])
+ ->addColumn('first_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '姓'])
+ ->addColumn('last_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '名'])
+ ->addColumn('email', 'string', ['limit' => 128, 'null' => false, 'comment' => '邮箱'])
+ ->addColumn('phone', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '电话'])
+ ->addColumn('country_name', 'string', ['limit' => 128, 'null' => true, 'default' => null, 'comment' => '所在国家名称'])
+ ->addColumn('industry', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '所属行业'])
+ ->addColumn('message', 'text', ['null' => true, 'default' => null, 'comment' => '留言内容'])
+ ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
+ ->create();
+ }
+}
diff --git a/extend/.gitignore b/extend/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/extend/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100644
index 00000000..cbc78689
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,8 @@
+
+ Options +FollowSymlinks -Multiviews
+ RewriteEngine On
+
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
+
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..3f2817f0665b40973f7004ea31b223e3a685c668
GIT binary patch
literal 5434
zcmV-A6~*d_P)S}tzNYP79-gNL_t6i1tCE;*#d+>
zX68Kij}S;gmN_$L&NBJE|7pma=Xrj-`t{+Nvph#3qBncw8AMXfLz!owReu!y(fV|h
zJ_D^z26_TPpf_LuUpm^d9%yX(QP+X01HBuJFVK27ify1aq4g$$k-;e+U%*-7~
zFr0%{BSB{a!+?O>WwjAOvlgg8scN*jn1af!ZWraY?it{@w*@$`Z6pTcFu4xJ#cr1r
zqgB8gDBhs4p^_;pLT(r2wC)q&qTC<@Bi|&zcr@37KE>^lY_`$>@iIZp!-)Kx$yFQNF2*W<1$fRiJqaCp0L4@w&FylMObB?IP>+Y1@@Ade
z#YD>=0oEu=vcHePG&KF)E+@(D1od1N7Nk-NyN
zUgvfpo$+pfi*kbu4o?Ms38cDRPB(P~tskZLzUkb)w$bfk+T+at&&;`ifSwKda<@wn
z0IVURCU9r@2W}VAmbbpaYZRr~_Y*MRlkj@VMFey;C8K_T_SU55onlIJPeMm#gTB%2
zQbeczk2LOJLd9OU3jwbLxHNM(+ISHd>UJq2Dm5tcR`RNryIqL;ONf$Dg=nK139p|F
zMjLNaoIT0yLfpG=K%+P_dm1pErsv3nzoekJg_{QV<Jd6cs6jm
zE8`2hy+o*CB2!iza(ZCr16(rdG|;aAS2{knNTj6%%^R6iwbRK#oel8JoU;g+i;(qh
zvRX$Zcr|yHZE&8HA0OL7$zF{)L~MLm=ff
z=3LV=5uMu~;29%Q2&T_R&hv`nMi4pl0!6vDUvafRz^Um^qqx@geuckj#xXeZC%e0~
zH^8OYKSWbtYo8*C=zA$0b*G&@+IJSBICCV*C_^6q5uFQRsIN1*ywZ-&>5tq|=C5}||{BP=gRt%tCF`wu}~YPp>dol#s&YWk0?H?v~q6{izOSqGeCbs!<4
zupbpXkG!(&(KfI)0|$bSA>kE?(+4yB8!HW>pMjgcxGlBRMhNRnOyjH3zPBU#8CV;?
zMZzl*&p?^Ki}v8?0$Gxi38pP~4+#+!(-=+Rk|kXo7Uc|VJ`!&|LRex%m$|M3T$-H=
zd_B%`gs^H9B{|>d>YylQVEt=5su996r626_kWN2+Cg)NNGpXNpEPM;XCbXay
z0?J^)Hy?LuI7hA9x0!q2>3B1mQ_{Y~)0sbUu%aeMA|Vci53~D79X0hkSzlMf$~~X5
z=g5A?Yl)gN3V?-ee|=(rXN<@IZg8L^01RbtRsRuA4dkowd@^^Q>)0iO;8J>eO!F9!>_(>v7K+rHSp+m4i%zPX@L~x
zZ4amIs-HMF(Bg<&h9fX?wT&?do~XY8_%Pw=EU7slm=6hGl={p
zwM_vw7>;&o?AAZ6y~+jzjX+B&852%z@p62chn%&5X^HXYo~6CcfI*gx-}uyQ)P
z4%fxh&q=AhcwpFgo2%=D=3;1G18aSWb0Z5c3Y!s%*T2f8ujH{}cWf`1zx(`~=@D@1
zEo*uh91Acq0}BAQ)PKR~*Y9Q77av(}dva=TZXBGQfU4SYYzCe?G987(=Rt&*)rSvr
z)4!)uTfftC+et$mddsllZ2mGf&ESAB7zj8ss_={L4STq&^7oe8ePh67qy-!~rDl+^
zZ;(O2i2po_NJ?*fzLYn&zH6yXdLWG}PWwuNDrzHOoMjM^hc`vXo?7>k_rW#M59K3~S6@L@}BoV)Q|4Ka|%=S3$Dg%7i2$0|#091F10{R~hNV9}`!`#-mI
zeBZP_T_0ozlT!@PeVrLi_|=ZXdo3N`yNm4vY@;~UK;zJ8!mm<|_V>T(NJK{xRLKcW
zHIRomMHj5x6a{b~bSOcUoS?UXk{MWZ?%Y1sz9#K+5P0RLu#}3?SX9(S-lpJa`mA!`ht&AJ^3+sG1X`89gY$2;{K(PnBXz9ayD>o(ogi!gj(uem{&CqU=knhprdV$GYHby!
zHWN@$yBZCk!Ku-NKb+lXAg_#>Mn=&38P?}FEJ{E{9cq*rShRBWfXi8W{S3~?IL&g~
z&kk&3@wOESsHy{sBSAC`p4j?TxN1PgsXRPM9B=?
zU7eiTo2v$l;D$k2+&UyTrX@qOn))4-e)77F)kS4*5QyzLYT=5K?5WgSyg#?CUcqz*
z_UuQ`I0D<&{mcH!;fT{GwA8*J=-RGcnJl~`p3O%R<+a*s=5Ko2g^~3x0}RKm`-$YU
zqhSw)mDAiBzSd}(frYT{NF>B2)d=ruG(-G(?L3O!FQFlF#O-p9
zQXfO}4((dMk5ad|T95D?jpmh_N*;XoX(w+|kJc(^4zN=8?yWC;ZGWhq7dMsh_?j13
zyYDl%%W0ox1vCdZ5?o0j>}oy2T_4xg@b>nVEZVx9*J`Uhv{dMTj=T%a0lu?r3nkfK
z0M_rJ6OMXn-AmLQjPKf2bEJHKS
zwUR_sp4+g{)|b5alBS~h#};qu)Ni^{j1X2SwWRsS;{guf=(8X~#LUp`1bA}gTEN;i
zghDuP4;lSeHvhqB{h5+wgz&lr+&=Hv?t!fXtW8-)2yavTtK}bC2RKD90vy{LQwWPp
z0_K92zi1ucNmV<6#ZFcvMAVe7IGWL8jCKzDyF=v&VU1>9+h3g+;MCB3WVasSJtms}
zZTrg;13Yo*erUZ=7QzFTP*AzG?JwI~LI6sZ5yD#(Gu!)h`vF#gR{?9UrV%1x)NTl#
zuzY}y0-RTN7^R;{XiY*yOY7O>m9@JaQ3p#1AflfHN8SFg3lglenEVH#BA)@yQwUrAxJD~Fb18DuY
zZRH4Ih2qZ?(dmxaT?aU?axQ3jYFRjKCyfoWx;m)q04p@6@k=`@5+Z7vKQ-+d)w$^R
zLo3NH14hSDlA|s^^#V>x?G^R$n-6Yh{eEZnIqVTgCHwS?Ewx#`>m%wK>l0LwXVjsB
zL&z)J*VTd12e>qA6#DqXbV4N1Bji^^^{;-{ONeH9mF1uue~X9ccJ`4*)F%$24=_ML
z-v`9^h7ln;rGL+aim30yu@>MvD%PXaA1v1-M09qddBREqYXJrz@H^lW>+OW-ivBGH
zl?SY}upZ#Nvco9u0<`6}LUe2$p~Ew*Hi}^e2J$M(Q0i|nwH2a0O8XfqC475F#XYZI*32OQ&xm9%n88$xcd^_i>dBm(!#iI?1(?W
z0F$dW0CywnVG%8*o~N+1
ze}`BlKEMD4Rn?$w01i4bp74spX#H)blqKxDkTU@W$S;2zt-p@kg4um&eJ=%-?5+Q28!~nFZ=oN5>T|P)|@$S)AxmoDDEE-8W%|uK=nXA6qzO0X2d9oERwjjZN$}
z=bD~G4!wY8oNG0RL|9E~DEsKkf)dX88MxV`h4u98e-rQsau-{&*otZ1;8b|Q%^A3*
z(yZ&y>RF(#+ogz@)uGH>@~T#LeW-ohn}J)(t9%`d;mDI6e${}|H#i+$@JfII@|VZM
z&@kXHkeEx5B5o$A$!>-hygCE7RGM`)TFnH`bh{LBjEPnS6qL_$yAW^Az%AufE<)>J
zz;tA5S1$;o^&~HZ7yK{-w^Wid2yH%!Vj_O4JvlU@)%PeUpYL`d&HNdHS);Ph`f)U0
zbGwvoha<@ydOL8nBW@Qe=G}e<$|DxC{1Uyc!y$^Hy+D5mFu~Tx)z*~;!SG~^dLK4CMGw|FCQ#p8YEzr;HQanYm4U?(lS3K*NixRQ$|EyJi@~udC
zTWSRUNJ{8@3M%F#b9f;cmJph|-7djHUd4>umkehYqUG-;L}|`2wE2PCWq3dZN6Jc0pd}#~FAk
z$rs*_K+Qs%&rwjZ)$L;Z#9uRTan^Y#wVLEuK5PbFMl+B6ic0xX78`%fz)C%af5WRm
zuLSivrZKi*!G?e
z_CVVOstRqsg`vyXT=hYs-VrRC_+trCzdhfB;jIH!gI+=8jC~V4y#m0iXw9sQ#eO
zK+_*(^h4`jKpK!v(T|TY6GMHDskc$z
kXA?jE*Ad76z9MS>4;eE
+// +----------------------------------------------------------------------
+
+// [ 应用入口文件 ]
+namespace think;
+
+require __DIR__ . '/../vendor/autoload.php';
+
+// 执行HTTP应用并响应
+$http = (new App())->setEnvName('local')->http;
+
+$response = $http->run();
+
+$response->send();
+
+$http->end($response);
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 00000000..eb053628
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/public/router.php b/public/router.php
new file mode 100644
index 00000000..9b39a62c
--- /dev/null
+++ b/public/router.php
@@ -0,0 +1,19 @@
+
+// +----------------------------------------------------------------------
+// $Id$
+
+if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SCRIPT_NAME"])) {
+ return false;
+} else {
+ $_SERVER["SCRIPT_FILENAME"] = __DIR__ . '/index.php';
+
+ require __DIR__ . "/index.php";
+}
diff --git a/public/static/.gitignore b/public/static/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/public/static/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/route/app.php b/route/app.php
new file mode 100644
index 00000000..69071f77
--- /dev/null
+++ b/route/app.php
@@ -0,0 +1,17 @@
+
+// +----------------------------------------------------------------------
+use think\facade\Route;
+
+Route::get('think', function () {
+ return 'hello,ThinkPHP8!';
+});
+
+Route::get('hello/:name', 'index/hello');
diff --git a/runtime/.gitignore b/runtime/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/runtime/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/think b/think
new file mode 100644
index 00000000..a42350f1
--- /dev/null
+++ b/think
@@ -0,0 +1,10 @@
+#!/usr/bin/env php
+setEnvName('local')->console->run();
\ No newline at end of file