From efe7c29363ee9fbb2736c8850a8351ffc9268374 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 ++
.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 ++
76 files changed, 2157 insertions(+)
create mode 100644 .env.local
create mode 100644 .example.env
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/.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
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
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