fix: 修正打包脚本插件目录名(addon)、重建框架文件清单、修复 install.sql(sms 表冲突/菜单归属/权限名拼写)

This commit is contained in:
ywxapp
2026-08-16 17:42:18 +08:00
parent aded1c718b
commit 303f548664
24 changed files with 1614 additions and 882 deletions
+2 -2
View File
@@ -13,7 +13,7 @@ namespace addon\appmall;
use think\facade\Config;
use think\facade\Db;
use ywxapp\AddonBase;
use ywxapp\Addons;
use ywxapp\model\BaseModel;
/**
@@ -23,7 +23,7 @@ use ywxapp\model\BaseModel;
* 安装时由框架自动导入 install.sql 建表(appmall_addon_list / appmall_addon_submissions / appmall_developers);
* 卸载时清理这些服务端表。
*/
class Addon extends addon
class Addon extends Addons
{
public function install(): bool
+1 -1
View File
@@ -15,7 +15,7 @@ use addon\appmall\library\AppmallSchema;
* 开发者自助注册 / 查询令牌 / 收益查询 / 提现;完全公开(noNeedLogin=*),
* 以开发者令牌(token)而非会员登录态认证。
* 路由前缀:/appmall/developer/*(由 AppService::loadAddonRoutes 在 boot 阶段包 Route::group('appmall') 注册到全局路由表,不隶属于任何 thinkphp 应用)。
* 视图:addon/appmall/view/frontend/developer/。
* 视图:addons/appmall/view/frontend/developer/。
*
* 注:AddonFrontend 基类 _initialize 把 view_path 设成【主应用】view/frontend/(与插件目录不符),
* 故此处必须在 initialize() 显式把 view_path 锁回插件目录,否则 fetch 找不到模板。
+1 -1
View File
@@ -20,7 +20,7 @@ use ywxapp\controller\FrontendBase;
* 列出已发布的主框架版本,提供「整包 / 增量补丁 / 完整安装包」下载入口。
* 下载走对外 API /appmall/api/framework/download(无需登录,可选签名)。
* 路由前缀:/appmall/framework/*(由 AppService::loadAddonRoutes 外层包 Route::group('appmall'))。
* 视图:addon/appmall/view/frontend/framework/。
* 视图:addons/appmall/view/frontend/framework/。
*/
class Framework extends FrontendBase
{
+1 -1
View File
@@ -20,7 +20,7 @@ use addon\appmall\service\MarketService;
* 列出应用市场上线的插件 / 模板,卡片展示 logo、价格、评分、下载量等。
* 数据来自中心站本地库(appmall_addon_list),复用 MarketService::catalog()。
* 路由前缀:/appmall/store/*(由 AppService::loadAddonRoutes 外层包 Route::group('appmall'))。
* 视图:addon/appmall/view/frontend/store/。
* 视图:addons/appmall/view/frontend/store/。
*/
class Store extends FrontendBase
{
+1 -1
View File
@@ -21,7 +21,7 @@ use ywxapp\library\StreamZipResponse;
*
* 由原核心 app/api/controller/Market.php 剥离而来,部署在「插件服务器(中心站)」的 market 插件内。
* 接口契约对齐 ywxapp 客户端 ywxapp\service\AddonService
* - GET /api/addon/lists 插件列表(addon::market 使用)
* - GET /api/addon/lists 插件列表(Addons::market 使用)
* - POST /api/addon/valid 安装前授权校验(AddonService::valid 使用,multipart
* - GET /api/index 下载插件 zipAddonService::download 使用,/api/index/index 规范化)
* - POST /api/addon/submit 开发者提交插件(待审核)
+4 -3
View File
@@ -2,11 +2,11 @@
return [
'name' => 'appmall',
'title' => '插件应用市场(服务端)',
'title' => '应用市场',
'intro' => '应用服务中心(插件商店 + 主框架在线升级)服务端:插件市场列表 / 下载 / 授权校验 / 开发者提交与审核,以及主框架核心包版本发布与升级。部署在「中心站」,客户端通过 config ywxapp.api_url 连接。',
'author' => 'YwxApp',
'website' => 'https://www.ywxapp.cn',
'version' => '1.0.19',
'version' => '1.0.20',
'state' => 1,
'license' => false,
'events' => [
@@ -15,5 +15,6 @@ return [
],
'services' => [
],
'install_time' => 1785173040,
'install_time' => 1786292662,
'update_time' => 1786808656,
];
+216 -197
View File
@@ -1,215 +1,234 @@
-- ============================================================
-- 应用市场(appmall)插件安装表结构
-- 事实源:addon/appmall/library/AppmallSchema.php::ensure()
-- 与运行时自愈 DDL 一致;扩展列已合并进建表,全新安装即完整
-- 插件应用市场(服务端)建表脚本
-- 由框架插件安装流程(AddonService::executeInstall)自动导入。
-- 部署「插件服务器(中心站)」并启用 market 插件后即生效
-- 接口契约见 addons/appmall/controller/api/Market.php
-- ============================================================
CREATE TABLE IF NOT EXISTS `appmall_addon_orders` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL DEFAULT 0,
`aid` int unsigned NOT NULL DEFAULT 0 COMMENT 'appmall_addon_list.id',
`site_id` int unsigned NOT NULL DEFAULT 0 COMMENT '下单站点',
`amount` decimal(10,2) NOT NULL DEFAULT 0,
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0=待支付 1=已支付 2=已退款',
`trade_no` varchar(64) NOT NULL DEFAULT '' COMMENT '商户订单号',
`pay_time` int unsigned DEFAULT 0,
`create_at` int unsigned DEFAULT 0,
`update_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_uid` (`uid`),
KEY `idx_trade` (`trade_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件购买订单表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_list` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '插件标识符,如 mqttbroker',
`type` varchar(20) NOT NULL DEFAULT 'addon' COMMENT '商品类型:addon=插件 template=模板',
`developer_id` int unsigned DEFAULT '0' COMMENT '发布者(wxapp_appmall_developers.id),用于收益归属',
`title` varchar(100) NOT NULL COMMENT '插件名称',
`version` varchar(20) NOT NULL COMMENT '版本号',
`price` decimal(10,2) NOT NULL DEFAULT 0 COMMENT '价格,0 为免费',
`author` varchar(100) DEFAULT '' COMMENT '作者',
`description` text COMMENT '简介/描述',
`changelog` text COMMENT '更新日志',
`require_framework` varchar(20) DEFAULT '' COMMENT '最低兼容框架版本,如 1.2.0',
`logo` varchar(255) DEFAULT '' COMMENT '封面图 URL',
`category` varchar(50) DEFAULT '' COMMENT '分类(如:工具/电商/社交)',
`tags` varchar(255) DEFAULT '' COMMENT '标签(逗号分隔)',
`screenshots` text COMMENT '截图 URL(逗号分隔或 JSON 数组)',
`rating` decimal(2,1) DEFAULT '0.0' COMMENT '评分(0.0~5.0',
`file_path` varchar(255) NOT NULL COMMENT 'zip 物理路径(非 Web 可访问目录)',
`file_hash` varchar(64) NOT NULL COMMENT 'SHA256 校验值',
`status` tinyint DEFAULT 1 COMMENT '1=上架 0=下架',
`download_count` int DEFAULT 0 COMMENT '下载次数',
`create_at` int DEFAULT 0 COMMENT '创建时间',
`update_at` int DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name_version` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件市场商品表';
CREATE TABLE IF NOT EXISTS `appmall_addon_licenses` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL,
`aid` int unsigned NOT NULL,
`license_key` varchar(64) NOT NULL COMMENT '授权码',
`site_id` int unsigned NOT NULL DEFAULT 0 COMMENT '绑定站点',
`domain` varchar(255) DEFAULT NULL COMMENT '绑定域名(站点授权)',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1=有效 0=已吊销',
`expire_time` int unsigned DEFAULT 0 COMMENT '0为永久',
`download_count` int DEFAULT 0 COMMENT '下载次数限制',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `license_key` (`license_key`),
UNIQUE KEY `uk_uid_aid` (`uid`, `aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件授权表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_submissions` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned DEFAULT '0' COMMENT '提交者(wxapp_appmall_developers.id',
`name` varchar(50) NOT NULL COMMENT '插件标识符',
`type` varchar(20) NOT NULL DEFAULT 'addon' COMMENT '商品类型:addon=插件 template=模板',
`title` varchar(100) NOT NULL COMMENT '插件名称',
`author` varchar(100) DEFAULT '' COMMENT '作者',
`description` text COMMENT '简介/描述',
`changelog` text COMMENT '更新日志',
`require_framework` varchar(20) DEFAULT '' COMMENT '最低兼容框架版本,如 1.2.0',
`version` varchar(20) NOT NULL COMMENT '版本号',
`price` decimal(10,2) NOT NULL DEFAULT 0 COMMENT '价格',
`category` varchar(50) DEFAULT '' COMMENT '分类',
`tags` varchar(255) DEFAULT '' COMMENT '标签(逗号分隔)',
`logo` varchar(255) DEFAULT '' COMMENT '封面图',
`file_path` varchar(255) NOT NULL COMMENT '待审 zip 物理路径',
`file_hash` varchar(64) NOT NULL COMMENT 'SHA256',
`status` tinyint DEFAULT 0 COMMENT '0=待审核 1=已通过 2=已驳回',
`reject_reason` varchar(255) DEFAULT '' COMMENT '驳回原因',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name_version` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件市场提交审核表';
CREATE TABLE IF NOT EXISTS `appmall_addon_download_logs` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`license_id` int unsigned NOT NULL DEFAULT 0,
`uid` int unsigned NOT NULL DEFAULT 0,
`aid` int unsigned NOT NULL DEFAULT 0,
`operator_id` int unsigned NOT NULL DEFAULT 0 COMMENT '运营后台安装者(特权放行审计)',
`ip` varchar(45) DEFAULT '',
`create_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_license` (`license_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件下载日志表';
CREATE TABLE IF NOT EXISTS `appmall_throttle` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`action` varchar(30) NOT NULL COMMENT '限流动作(buy/notify/download/submit',
`ident` varchar(80) NOT NULL COMMENT '限流标识(uid 或 IP',
`count` int unsigned NOT NULL DEFAULT 0 COMMENT '窗口内已请求次数',
`expire_at` int unsigned NOT NULL DEFAULT 0 COMMENT '窗口过期时间戳',
`create_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_action_ident` (`action`, `ident`),
KEY `idx_expire` (`expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='接口频率限制表';
CREATE TABLE IF NOT EXISTS `appmall_addon_review_log` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`submission_id` int unsigned NOT NULL DEFAULT 0 COMMENT 'appmall_addon_submissions.id',
`operator_id` int unsigned NOT NULL DEFAULT 0 COMMENT '操作管理员ID',
`action` varchar(20) NOT NULL COMMENT '操作:submit/approve/reject',
`from_status` tinyint NOT NULL DEFAULT 0 COMMENT '变更前状态',
`to_status` tinyint NOT NULL DEFAULT 0 COMMENT '变更后状态',
`reason` varchar(255) NOT NULL DEFAULT '' COMMENT '审核意见/驳回理由',
`create_at` int unsigned NOT NULL DEFAULT 0 COMMENT '操作时间',
PRIMARY KEY (`id`),
KEY `idx_submission` (`submission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件审核历史日志(可视化时间线数据源)';
CREATE TABLE IF NOT EXISTS `appmall_developers` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL COMMENT '开发者名称',
`email` varchar(120) NOT NULL COMMENT '邮箱(接收令牌/通知)',
`token` varchar(64) NOT NULL COMMENT '开发者令牌(发布插件时校验)',
`status` tinyint DEFAULT 0 COMMENT '0=待审核 1=正常 -1=禁用',
`balance` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '可提现余额',
`frozen_balance` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '待结算/冻结金额',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_email` (`email`),
UNIQUE KEY `uk_token` (`token`)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_developers` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL COMMENT '开发者名称',
`email` varchar(120) NOT NULL COMMENT '邮箱(接收令牌/通知)',
`token` varchar(64) NOT NULL COMMENT '开发者令牌(发布插件时校验)',
`status` tinyint DEFAULT 0 COMMENT '0=待审核 1=正常 -1=禁用',
`balance` decimal(10,2) DEFAULT '0.00' COMMENT '可提现余额',
`frozen_balance` decimal(10,2) DEFAULT '0.00' COMMENT '待结算/冻结金额',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_email` (`email`),
UNIQUE KEY `uk_token` (`token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='市场开发者表';
CREATE TABLE IF NOT EXISTS `appmall_addon_revenues` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned NOT NULL DEFAULT '0' COMMENT '受益开发者',
`order_id` int unsigned NOT NULL DEFAULT '0' COMMENT 'appmall_addon_orders.id',
`aid` int unsigned NOT NULL DEFAULT '0' COMMENT 'appmall_addon_list.id',
`uid` int unsigned NOT NULL DEFAULT '0' COMMENT '购买用户',
`amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单金额',
`commission` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '平台抽成',
`income` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '开发者应得',
`status` tinyint DEFAULT 0 COMMENT '0=待结算 1=已结算',
`create_at` int DEFAULT 0,
`settle_at` int DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_developer` (`developer_id`),
KEY `idx_order` (`order_id`)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_revenues` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned NOT NULL DEFAULT '0' COMMENT '受益开发者',
`order_id` int unsigned NOT NULL DEFAULT '0' COMMENT 'wxapp_appmall_addon_orders.id',
`aid` int unsigned NOT NULL DEFAULT '0' COMMENT 'wxapp_appmall_addon_list.id',
`uid` int unsigned NOT NULL DEFAULT '0' COMMENT '购买用户',
`amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单金额',
`commission` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '平台抽成',
`income` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '开发者应得',
`status` tinyint DEFAULT 0 COMMENT '0=待结算 1=已结算',
`create_at` int DEFAULT 0,
`settle_at` int DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_developer` (`developer_id`),
KEY `idx_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件销售收益账本';
CREATE TABLE IF NOT EXISTS `appmall_addon_withdrawals` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned NOT NULL DEFAULT '0',
`amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现金额',
`channel` varchar(20) DEFAULT 'alipay' COMMENT '提现渠道',
`account` varchar(100) DEFAULT '' COMMENT '收款账号',
`status` tinyint DEFAULT 0 COMMENT '0=待处理 1=已打款 -1=驳回',
`remark` varchar(255) DEFAULT '',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_developer` (`developer_id`)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_withdrawals` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned NOT NULL DEFAULT '0',
`amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现金额',
`channel` varchar(20) DEFAULT 'alipay' COMMENT '提现渠道',
`account` varchar(100) DEFAULT '' COMMENT '收款账号',
`status` tinyint DEFAULT 0 COMMENT '0=待处理 1=已打款 -1=驳回',
`remark` varchar(255) DEFAULT '',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_developer` (`developer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开发者提现单';
CREATE TABLE IF NOT EXISTS `appmall_addon_submissions` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`developer_id` int unsigned NOT NULL DEFAULT 0 COMMENT 'appmall_developers.id',
`name` varchar(50) NOT NULL COMMENT '插件标识符',
`type` varchar(20) NOT NULL DEFAULT 'addon' COMMENT '商品类型:addon=插件 template=模板',
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '名称',
`author` varchar(100) DEFAULT '' COMMENT '作者',
`description` text COMMENT '简介',
`version` varchar(20) NOT NULL COMMENT '版本号',
`price` decimal(10,2) NOT NULL DEFAULT 0 COMMENT '价格',
`logo` varchar(255) DEFAULT '' COMMENT '封面',
`category` varchar(50) DEFAULT '' COMMENT '分类',
`tags` varchar(255) DEFAULT '' COMMENT '标签',
`file_path` varchar(255) NOT NULL COMMENT '待审包路径',
`file_hash` varchar(64) NOT NULL COMMENT 'SHA256',
`changelog` text COMMENT '更新日志',
`require_framework` varchar(20) DEFAULT '' COMMENT '最低兼容框架版本,如 1.2.0',
`status` tinyint DEFAULT 0 COMMENT '0待审 1通过 2驳回',
`reject_reason` varchar(255) DEFAULT '' COMMENT '驳回原因',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name_ver` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件提交审核表';
-- ============================================================
-- 以下三张表是「购买/授权闭环」的运行表(订单 / 授权 / 下载日志)。
-- 旧版 install.sql 漏建,导致新装中心站一调 buy/notify/下载就报「表不存在」。
-- 与 docs/appmall_schema.sql、客户端 app/api/controller/v1/Addon.php::ensureTables() 字段保持一致。
-- ============================================================
CREATE TABLE IF NOT EXISTS `appmall_addon_list` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '标识符',
`type` varchar(20) NOT NULL DEFAULT 'addon' COMMENT '商品类型:addon=插件 template=模板',
`developer_id` int unsigned NOT NULL DEFAULT 0 COMMENT 'appmall_developers.id',
`title` varchar(100) NOT NULL COMMENT '名称',
`version` varchar(20) NOT NULL COMMENT '版本号',
`price` decimal(10,2) NOT NULL DEFAULT 0 COMMENT '价格',
`author` varchar(100) DEFAULT '' COMMENT '作者',
`description` text COMMENT '简介/描述',
`logo` varchar(255) DEFAULT '' COMMENT '封面图 URL',
`file_path` varchar(255) NOT NULL COMMENT '存储路径(非公开)',
`file_hash` varchar(64) NOT NULL COMMENT 'SHA256校验值',
`category` varchar(50) DEFAULT '' COMMENT '分类',
`tags` varchar(255) DEFAULT '' COMMENT '标签(逗号分隔)',
`screenshots` text COMMENT '截图URL(逗号分隔或JSON',
`rating` decimal(2,1) DEFAULT '0.0' COMMENT '评分(0.0~5.0',
`status` tinyint DEFAULT 1 COMMENT '1上架 0下架',
`download_count` int DEFAULT 0 COMMENT '下载次数',
`changelog` text COMMENT '更新日志',
`require_framework` varchar(20) DEFAULT '' COMMENT '最低兼容框架版本,如 1.2.0',
`create_at` int DEFAULT 0 COMMENT '创建时间',
`update_at` int DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='市场插件列表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_licenses` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL COMMENT '用户ID',
`aid` int unsigned NOT NULL COMMENT '对应 appmall_addon_list.id',
`license_key` varchar(64) NOT NULL COMMENT '授权码',
`site_id` int unsigned NOT NULL DEFAULT '0' COMMENT '绑定站点(wxapp_appmall_sites.id)0=未绑定',
`domain` varchar(255) DEFAULT NULL COMMENT '绑定域名(站点授权,对齐 Discuz!)',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '1=有效 0=已吊销(退款)',
`expire_time` int unsigned DEFAULT '0' COMMENT '0 为永久',
`download_count` int DEFAULT '0' COMMENT '下载次数限制',
`create_at` int DEFAULT 0 COMMENT '创建时间',
`update_at` int DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `license_key` (`license_key`),
UNIQUE KEY `uk_uid_aid` (`uid`, `aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件授权表';
CREATE TABLE IF NOT EXISTS `appmall_sites` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`site_token` varchar(64) NOT NULL DEFAULT '' COMMENT '站点令牌(客户端 install 时生成/上报)',
`domain` varchar(255) NOT NULL DEFAULT '' COMMENT '主域名',
`owner_uid` int unsigned NOT NULL DEFAULT '0' COMMENT '站点所有者用户ID',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '1=正常 0=禁用',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_domain` (`domain`),
KEY `idx_token` (`site_token`)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_orders` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL DEFAULT '0',
`aid` int unsigned NOT NULL DEFAULT '0' COMMENT 'appmall_addon_list.id',
`site_id` int unsigned NOT NULL DEFAULT '0' COMMENT '下单站点',
`amount` decimal(10,2) NOT NULL DEFAULT '0' COMMENT '订单金额',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '0=待支付 1=已支付 2=已退款',
`trade_no` varchar(64) NOT NULL DEFAULT '' COMMENT '商户订单号',
`pay_time` int unsigned DEFAULT '0' COMMENT '支付时间',
`create_at` int unsigned DEFAULT 0,
`update_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_uid` (`uid`),
KEY `idx_trade` (`trade_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件购买订单表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_download_logs` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`license_id` int unsigned NOT NULL DEFAULT '0',
`uid` int unsigned NOT NULL DEFAULT '0',
`aid` int unsigned NOT NULL DEFAULT '0',
`operator_id` int unsigned NOT NULL DEFAULT '0' COMMENT '运营后台下载审计(Addons::downloadInstall 透传,0=会员自助下载)',
`ip` varchar(45) DEFAULT '',
`create_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_license` (`license_id`),
KEY `idx_operator` (`operator_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件下载日志表';
-- 市场客户端站点(授权绑定的维度,对齐 Discuz!「授权绑定站点域名」)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_sites` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`site_token` varchar(64) NOT NULL DEFAULT '' COMMENT '站点令牌(客户端 install 时生成/上报)',
`domain` varchar(255) NOT NULL DEFAULT '' COMMENT '主域名',
`owner_uid` int unsigned NOT NULL DEFAULT '0' COMMENT '站点所有者用户ID',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '1=正常 0=禁用',
`create_at` int DEFAULT 0,
`update_at` int DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_domain` (`domain`),
KEY `idx_token` (`site_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='市场客户端站点(授权绑定维度)';
CREATE TABLE IF NOT EXISTS `appmall_framework_list` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`version` varchar(20) NOT NULL COMMENT '框架版本号',
`title` varchar(100) DEFAULT '' COMMENT '版本标题',
`changelog` text COMMENT '更新日志',
`file_path` varchar(255) DEFAULT '' COMMENT '整包 zip 物理路径(非 Web 可访问目录)',
`file_hash` varchar(64) DEFAULT '' COMMENT '整包 SHA256 校验值',
`patch_path` varchar(255) DEFAULT '' COMMENT '增量补丁 zip 物理路径(与整包同版本共存)',
`patch_hash` varchar(64) DEFAULT '' COMMENT '补丁 SHA256 校验值',
`patch_from` varchar(20) DEFAULT '' COMMENT '补丁适用的基础版本',
`type` tinyint DEFAULT 0 COMMENT '兼容旧客户端:0=含整包 1=仅补丁',
`from_version` varchar(20) DEFAULT '' COMMENT '兼容旧客户端:补丁基础版本镜像',
`status` tinyint DEFAULT 0 COMMENT '0=草稿 1=已发布(可下载)',
`download_count` int DEFAULT 0 COMMENT '下载次数',
`create_at` int DEFAULT 0 COMMENT '创建时间',
`update_at` int DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_version` (`version`)
-- ============================================================
-- 主框架升级(原 upgrade 插件,已合并进 market
-- 客户端 ywxapp\service\FrameworkService 经 /api/framework/* 拉取版本与核心包。
-- ============================================================
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_framework_list` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`version` varchar(20) NOT NULL COMMENT '框架版本号',
`title` varchar(100) DEFAULT '' COMMENT '版本标题',
`changelog` text COMMENT '更新日志',
`file_path` varchar(255) DEFAULT '' COMMENT '整包 zip 物理路径(非 Web 可访问目录)',
`file_hash` varchar(64) DEFAULT '' COMMENT '整包 SHA256 校验值',
`patch_path` varchar(255) DEFAULT '' COMMENT '增量补丁 zip 物理路径(与整包同版本共存)',
`patch_hash` varchar(64) DEFAULT '' COMMENT '补丁 SHA256 校验值',
`patch_from` varchar(20) DEFAULT '' COMMENT '补丁适用的基础版本',
`type` tinyint DEFAULT 0 COMMENT '兼容旧客户端:0=含整包 1=仅补丁(逻辑以 patch_path 是否为空为准)',
`from_version` varchar(20) DEFAULT '' COMMENT '兼容旧客户端:补丁基础版本镜像',
`install_path` varchar(255) DEFAULT '' COMMENT '完整安装包 zip 物理路径(全新部署用,含占位符 .env,非 Web 可访问目录)',
`install_hash` varchar(64) DEFAULT '' COMMENT '完整安装包 SHA256 校验值',
`status` tinyint DEFAULT 0 COMMENT '0=草稿 1=已发布(可下载)',
`download_count` int DEFAULT 0 COMMENT '下载次数',
`create_at` int DEFAULT 0 COMMENT '创建时间',
`update_at` int DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_version` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主框架版本表';
CREATE TABLE IF NOT EXISTS `appmall_framework_download_log` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`version` varchar(20) NOT NULL COMMENT '下载的版本号',
`uid` int DEFAULT 0 COMMENT '下载用户ID(来自客户端)',
`ip` varchar(45) DEFAULT '' COMMENT '下载来源IP',
`create_at` int DEFAULT 0 COMMENT '下载时间',
PRIMARY KEY (`id`),
KEY `idx_version` (`version`)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_framework_download_log` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`version` varchar(20) NOT NULL COMMENT '下载的版本号',
`uid` int DEFAULT 0 COMMENT '下载用户ID(来自客户端)',
`ip` varchar(45) DEFAULT '' COMMENT '下载来源IP',
`create_at` int DEFAULT 0 COMMENT '下载时间',
PRIMARY KEY (`id`),
KEY `idx_version` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主框架下载日志表';
-- 接口频率限制(buy/notify/download/submit 等防刷)
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_throttle` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`action` varchar(30) NOT NULL COMMENT '限流动作(buy/notify/download/submit',
`ident` varchar(80) NOT NULL COMMENT '限流标识(uid 或 IP',
`count` int unsigned NOT NULL DEFAULT 0 COMMENT '窗口内已请求次数',
`expire_at` int unsigned NOT NULL DEFAULT 0 COMMENT '窗口过期时间戳',
`create_at` int unsigned DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_action_ident` (`action`, `ident`),
KEY `idx_expire` (`expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='接口频率限制表';
CREATE TABLE IF NOT EXISTS `__PREFIX__appmall_addon_review_log` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`submission_id` int unsigned NOT NULL DEFAULT 0 COMMENT 'appmall_addon_submissions.id',
`operator_id` int unsigned NOT NULL DEFAULT 0 COMMENT '操作管理员ID',
`action` varchar(20) NOT NULL COMMENT '操作:submit/approve/reject',
`from_status` tinyint NOT NULL DEFAULT 0 COMMENT '变更前状态',
`to_status` tinyint NOT NULL DEFAULT 0 COMMENT '变更后状态',
`reason` varchar(255) NOT NULL DEFAULT '' COMMENT '审核意见/驳回理由',
`create_at` int unsigned NOT NULL DEFAULT 0 COMMENT '操作时间',
PRIMARY KEY (`id`),
KEY `idx_submission` (`submission_id`),
KEY `idx_create` (`create_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件审核历史日志(可视化时间线数据源)';
+15 -16
View File
@@ -3,7 +3,7 @@
* @Author: YwxApp <ywx@ywxapp.cn>
* @Date: 2026-07-21 13:36:46
* @LastEditors: YwxApp <ywx@ywxapp.cn>
* @LastEditTime: 2026-08-16 11:31:01
* @LastEditTime: 2026-08-04 22:21:46
* @Description: 应用市场插件统一路由(对外 API + 主应用业务路由)
* @FilePath: \ywxapp_dev\addon\appmall\route\app.php
* @CustomString: Copyright (c) 2026 YwxApp
@@ -70,26 +70,25 @@ Route::group('backend', function () {
Route::post('framework/delete', [Framework::class, 'delete']);
Route::get('framework/download', [Framework::class, 'download']);
});
// ---------- 开发者中心(独立前台应用,公开注册/令牌/收益/提现,非会员中心):统一前缀 /appmall/developer ----------
// 仅【中心站】暴露:开发者自助注册/收益/提现依赖 appmall_developers / appmall_addon_revenues / appmall_addon_withdrawals 等
// 运营表,客户机(ywxapp.api_url 指向其他服务器,见 is_market_client())作为中心站客户端不持有这些表,故不在路由层注册,
// 访问即 404。配合 Developer 控制器 initialize() 的运行时兜底(即便路由缓存陈旧或被直连也能拦截)。
// ---------- 开发者中心(独立前台,令牌认证):/appmall/Developer/* ----------
Route::group('Developer', function () {
Route::get('index', [DeveloperCenter::class, 'index']);
Route::post('save', [DeveloperCenter::class, 'save']);
Route::get('mine', [DeveloperCenter::class, 'mine']);
Route::post('lookup', [DeveloperCenter::class, 'lookup']);
Route::get('dashboard', [DeveloperCenter::class, 'dashboard']);
Route::get('console', [DeveloperCenter::class, 'console']);
Route::post('overview', [DeveloperCenter::class, 'overview']);
Route::post('apps', [DeveloperCenter::class, 'apps']);
Route::post('price', [DeveloperCenter::class, 'price']);
Route::post('earnings', [DeveloperCenter::class, 'earnings']);
Route::post('withdraw', [DeveloperCenter::class, 'withdraw']);
});
Route::get('developer/index', [DeveloperCenter::class, 'index']);
Route::post('developer/save', [DeveloperCenter::class, 'save']);
Route::get('developer/mine', [DeveloperCenter::class, 'mine']);
Route::post('developer/lookup', [DeveloperCenter::class, 'lookup']);
Route::get('developer/dashboard', [DeveloperCenter::class, 'dashboard']);
Route::get('developer/console', [DeveloperCenter::class, 'console']);
Route::post('developer/overview', [DeveloperCenter::class, 'overview']);
Route::post('developer/apps', [DeveloperCenter::class, 'apps']);
Route::post('developer/price', [DeveloperCenter::class, 'price']);
Route::post('developer/earnings', [DeveloperCenter::class, 'earnings']);
Route::post('developer/withdraw', [DeveloperCenter::class, 'withdraw']);
// ---------- 对外 API(统一前缀 /appmall/api):远程客户机经 Remote/Addon/FrameworkService 调用 ----------
// 由 AppService::loadAddonRoutes() 的 Route::group('appmall') 补全插件名前缀 → /appmall/api/*
//(与 /appmall/backend、/appmall/developer 同源同构,均为「插件名开头」约定)。
+23
View File
@@ -0,0 +1,23 @@
-- ============================================================
-- addons/appmall/upgrade.sql
-- 用于已安装插件、但缺少新字段/配置的老库手动升级。
-- 在数据库客户端执行本文件即可。
--
-- 重要说明:
-- 1) 框架「在线升级」(AddonService::onlineUpgrade) 会自动重导 install.sql
-- CREATE TABLE IF NOT EXISTS 全量幂等),已覆盖 appmall 全部表结构;
-- 本文件仅作为 DBA 手动补列 / 历史库修复的参考。
-- 2) 框架插件升级流程的 importsql() 白名单仅允许 CREATE/INSERT,不会自动执行
-- 本文件的 ALTER;如需在升级时自动收敛缺失列,请走插件 Addon::upgrade() 钩子
-- (内部用 SchemaGuard::ensureColumn 先探测后追加,重复执行安全)。
-- 3) 纯 ALTER 语句重复执行可能报「列已存在」,属正常,可忽略。
-- ============================================================
SET NAMES utf8mb4;
-- 1. 下载日志表:运营后台下载审计字段(install.sql 已含,此处供老库补齐)
-- 注意:本文件为 DBA 手动执行脚本,不会被框架自动替换前缀;
-- 执行前请将下方 `__PREFIX__` 替换为当前数据库表前缀(如 wxapp_)。
ALTER TABLE `__PREFIX__appmall_addon_download_logs`
ADD COLUMN `operator_id` int unsigned NOT NULL DEFAULT 0 COMMENT '运营后台下载审计(0=会员自助下载)' AFTER `uid`;
-- 2. 未来新增列在此追加(同样直接 ALTER,重复执行忽略报错即可)
@@ -0,0 +1,139 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>审核详情 - 应用市场管理</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/assets/layui/css/layui.css" rel="stylesheet">
<link href="/assets/ywxapp/css/wxapp.css" rel="stylesheet">
<style>
body { background: #f2f3f5; padding: 15px; }
.info-card { background: #fff; border-radius: 4px; padding: 15px 20px; margin-bottom: 15px; }
.info-card h3 { margin: 0 0 12px; font-size: 15px; border-left: 3px solid #1e9fff; padding-left: 8px; }
.info-row { display: flex; flex-wrap: wrap; }
.info-item { width: 50%; padding: 6px 0; box-sizing: border-box; }
.info-item.full { width: 100%; }
.info-item .label { color: #999; margin-right: 6px; }
.info-item .value { color: #333; }
.step-wrap { background: #fff; border-radius: 4px; padding: 20px; margin-bottom: 15px; }
.timeline-empty { color: #999; text-align: center; padding: 20px 0; }
</style>
</head>
<body>
<div class="info-card">
<h3>提交信息</h3>
<div class="info-row" id="infoRow">
<div class="timeline-empty">加载中…</div>
</div>
</div>
<div class="step-wrap">
<h3 style="margin:0 0 18px;font-size:15px;border-left:3px solid #1e9fff;padding-left:8px;">审核状态流</h3>
<div class="layui-row layui-col-space20" id="stepRow">
<div class="timeline-empty">加载中…</div>
</div>
</div>
<div class="info-card">
<h3>审核历史时间线</h3>
<ul class="layui-timeline" id="timeline">
<li class="layui-timeline-item"><i class="layui-icon layui-timeline-axis layui-icon-loading"></i><div class="layui-timeline-content layui-text"><div class="timeline-empty">加载中…</div></div></li>
</ul>
</div>
<script src="/assets/layui/layui.js"></script>
<script src="/assets/ywxapp/ywxapp.js" module="{$site.app}"></script>
<script>
layui.use(['jquery', 'http', 'util'], function () {
var $ = layui.jquery, http = layui.http, util = layui.util;
var id = {$id};
function statusText(s) {
switch (parseInt(s, 10)) {
case 0: return '待审核';
case 1: return '已通过';
case 2: return '已驳回';
default: return '未知(' + s + ')';
}
}
function actionText(a) {
switch (a) {
case 'submit': return '提交审核';
case 'approve': return '审核通过';
case 'reject': return '审核驳回';
default: return a;
}
}
function fmt(ts) {
if (!ts) return '';
return util.toDateString(ts * 1000, 'yyyy-MM-dd HH:mm:ss');
}
http.get('detail', { id: id }).then(function (r) {
if (r.code !== 0 || !r.data) { $('#infoRow').html('<div class="timeline-empty">加载失败</div>'); return; }
var d = r.data;
var html = ''
+ '<div class="info-item"><span class="label">ID</span><span class="value">' + (d.id || '') + '</span></div>'
+ '<div class="info-item"><span class="label">标识:</span><span class="value">' + (d.name || '') + '</span></div>'
+ '<div class="info-item"><span class="label">名称:</span><span class="value">' + (d.title || '') + '</span></div>'
+ '<div class="info-item"><span class="label">类型:</span><span class="value">' + (d.type === 'template' ? '模板' : '插件') + '</span></div>'
+ '<div class="info-item"><span class="label">作者:</span><span class="value">' + (d.author || '') + '</span></div>'
+ '<div class="info-item"><span class="label">版本:</span><span class="value">' + (d.version || '') + '</span></div>'
+ '<div class="info-item"><span class="label">价格:</span><span class="value">' + (d.price > 0 ? '¥' + d.price : '免费') + '</span></div>'
+ '<div class="info-item"><span class="label">当前状态:</span><span class="value">' + statusText(d.status) + '</span></div>'
+ '<div class="info-item"><span class="label">提交时间:</span><span class="value">' + fmt(d.create_at) + '</span></div>'
+ '<div class="info-item"><span class="label">上架状态:</span><span class="value">' + (d.published ? '已上架' : '未上架') + '</span></div>'
+ '<div class="info-item full"><span class="label">简介:</span><span class="value">' + (d.description || '-') + '</span></div>'
+ '<div class="info-item full"><span class="label">驳回原因:</span><span class="value">' + (d.reject_reason || '-') + '</span></div>';
$('#infoRow').html(html);
// 步骤条:提交 → 审核(通过/驳回)
var steps = [
{ title: '提交审核', done: true },
{ title: '运营审核', done: true, current: d.status != 0, reject: d.status == 2, pass: d.status == 1 }
];
var stepHtml = '';
steps.forEach(function (s) {
var cls = 'layui-bg-blue';
if (s.reject) cls = 'layui-bg-red';
else if (!s.done) cls = 'layui-bg-gray';
var icon = '&#xe605;';
if (s.reject) icon = '&#x1006;';
else if (!s.done) icon = '&#xe615;';
stepHtml += ''
+ '<div class="layui-col-xs6 layui-col-md6" style="text-align:center;">'
+ ' <button class="layui-btn layui-btn-circle ' + cls + '">' + icon + '</button>'
+ ' <div style="margin-top:6px;">' + s.title + '</div>'
+ '</div>';
});
$('#stepRow').html('<div class="layui-col-xs12" style="display:flex;align-items:center;justify-content:center;">' + stepHtml + '</div>');
}).catch(function () { $('#infoRow').html('<div class="timeline-empty">请求失败</div>'); });
http.get('history', { id: id }).then(function (r) {
var arr = (r.code === 0 && r.data) ? r.data : [];
if (!arr.length) {
$('#timeline').html('<li class="layui-timeline-item"><i class="layui-icon layui-timeline-axis layui-icon-face-surprised"></i><div class="layui-timeline-content layui-text"><div class="timeline-empty">暂无审核记录</div></div></li>');
return;
}
var html = '';
arr.forEach(function (item) {
var color = item.action === 'reject' ? '#ff5722' : (item.action === 'approve' ? '#16b777' : '#1e9fff');
html += ''
+ '<li class="layui-timeline-item">'
+ ' <i class="layui-icon layui-timeline-axis" style="color:' + color + ';">&#xe63f;</i>'
+ ' <div class="layui-timeline-content layui-text">'
+ ' <h4>' + actionText(item.action) + ' <span class="layui-badge layui-bg-gray">' + statusText(item.from_status) + ' → ' + statusText(item.to_status) + '</span></h4>'
+ ' <p>操作人ID' + (item.operator_id || 0) + (item.reason ? ';意见:' + item.reason : '') + '</p>'
+ ' <p style="color:#999;">' + fmt(item.create_at) + '</p>'
+ ' </div>'
+ '</li>';
});
$('#timeline').html(html);
}).catch(function () {
$('#timeline').html('<li class="layui-timeline-item"><i class="layui-icon layui-timeline-axis layui-icon-face-surprised"></i><div class="layui-timeline-content layui-text"><div class="timeline-empty">请求失败</div></div></li>');
});
});
</script>
</body>
</html>
+107 -79
View File
@@ -1,93 +1,121 @@
<div class="layui-card" style="margin:20px;">
<div class="layui-card-header">插件审核(开发者上架申请)</div>
<div class="layui-card-body">
<div class="layui-form layui-row" style="margin-bottom:12px;">
<div class="layui-inline">
<select id="statusFilter">
<option value="">全部状态</option>
<option value="0">待审核</option>
<option value="1">已发布</option>
<option value="2">已驳回</option>
</select>
</div>
<div class="layui-inline">
<button class="layui-btn" id="searchBtn">搜索</button>
</div>
</div>
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>插件审核 - 应用市场管理</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/assets/layui/css/layui.css" rel="stylesheet">
<link href="/assets/ywxapp/css/wxapp.css" rel="stylesheet">
<style>body{background:#f2f3f5;padding:15px;}</style>
</head>
<body>
<form class="layui-form" lay-filter="filterForm">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">状态</label>
<div class="layui-input-inline" style="width:140px;">
<select name="status">
<option value="">全部</option>
<option value="0">待审核</option>
<option value="1">已通过</option>
<option value="2">已驳回</option>
</select>
</div>
</div>
<button class="layui-btn" lay-submit lay-filter="search">搜索</button>
</div>
</form>
<script type="text/html" id="toolTpl">
<table id="dataTable" lay-filter="dataTable"></table>
<script type="text/html" id="statusTpl">
{{# if(d.status == 0){ }}<span class="layui-badge layui-bg-orange">待审核</span>
{{# } else if(d.status == 1){ }}<span class="layui-badge layui-bg-green">已通过</span>
{{# } else { }}<span class="layui-badge">已驳回</span>{{# } }}
</script>
<script type="text/html" id="operateTpl">
<a class="layui-btn layui-btn-xs" href="download?id={{ d.id }}" target="_blank">下载包</a>
{{# if(d.status == 0){ }}
<a class="layui-btn layui-btn-xs" lay-event="audit">通过</a>
<a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="approve">通过并发布</a>
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="reject">驳回</a>
{{# } else { }}
<span class="layui-badge {{ d.status == 1 ? 'layui-bg-green' : '' }}">
{{ d.status == 1 ? '已发布' : '已驳回' }}
</span>
{{# } }}
</script>
<a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="price">改价</a>
<a class="layui-btn layui-btn-xs" lay-event="detail">查看详情</a>
</script>
<script>
layui.use(['table', 'jquery', 'layer'], function () {
var table = layui.table, $ = layui.jquery, layer = layui.layer;
table.render({
<script src="/assets/layui/layui.js"></script>
<script src="/assets/ywxapp/ywxapp.js" module="{$site.app}"></script>
<script>
layui.use(['table', 'form', 'layer', 'jquery', 'http'], function () {
var table = layui.table, form = layui.form, layer = layui.layer, $ = layui.jquery, http = layui.http;
table.render({
elem: '#dataTable',
url: '{:url("/appmall/backend/addonreview/index")}',
url: 'index',
page: true,
response: { statusName: 'code', msgName: 'message', countName: 'count', dataName: 'data' },
parseData: function (res) {
return {
code: res.code,
msg: res.message,
count: res.count || 0,
data: res.data || []
};
},
where: { status: $('#statusFilter').val() },
limits: [10, 20, 50],
limit: 10,
cols: [[
{field: 'id', title: 'ID', width: 70},
{field: 'title', title: '插件名称', width: 160},
{field: 'name', title: '标识', width: 140},
{field: 'version', title: '版本', width: 90},
{field: 'developer_id', title: '开发者ID', width: 100},
{field: 'price', title: '价格', width: 90, templet: function(d){return d.price ? d.price : '免费';}},
{field: 'status', title: '状态', width: 90, templet: function(d){
if(d.status==0) return '<span class="layui-badge">待审核</span>';
if(d.status==1) return '<span class="layui-badge layui-bg-green">已发布</span>';
return '<span class="layui-badge layui-bg-red">已驳回</span>';
}},
{field: 'reject_reason', title: '驳回原因', width: 160},
{field: 'create_at', title: '提交时间', width: 170, templet: function(d){return layui.util.toDateString(d.create_at*1000);}},
{title: '操作', width: 160, templet: '#toolTpl', fixed: 'right'}
]]
});
{ field: 'id', title: 'ID', width: 70 },
{ field: 'name', title: '标识', width: 120 },
{ field: 'type', title: '类型', width: 80, templet: function (d) {
return d.type === 'template'
? '<span class="layui-badge" style="background:#722ed1;">模板</span>'
: '<span class="layui-badge layui-bg-blue">插件</span>';
} },
{ field: 'title', title: '名称', minWidth: 140 },
{ field: 'author', title: '作者', width: 120 },
{ field: 'version', title: '版本', width: 90 },
{ field: 'price', title: '价格', width: 90, templet: function (d) { return d.price > 0 ? '¥' + d.price : '免费'; } },
{ field: 'status', title: '状态', width: 90, templet: '#statusTpl' },
{ field: 'reject_reason', title: '驳回原因', minWidth: 160 },
{ field: 'create_at', title: '提交时间', width: 170, templet: function (d) { return d.create_at ? new Date(d.create_at * 1000).toLocaleString() : ''; } },
{ title: '操作', width: 240, toolbar: '#operateTpl', fixed: 'right' }
]],
response: { statusName: 'code', statusCode: 0, msgName: 'message', countName: 'count', dataName: 'data' }
});
$('#searchBtn').on('click', function () {
table.reload('dataTable', { where: { status: $('#statusFilter').val() }, page: { curr: 1 } });
});
form.on('submit(search)', function (data) {
table.reload('dataTable', { where: data.field, page: { curr: 1 } });
return false;
});
table.on('tool(dataTable)', function (obj) {
var d = obj.data;
if (obj.event === 'audit') {
layer.confirm('确认通过该插件上架申请', function (index) {
$.post('{:url("/appmall/backend/addonreview/audit")}', { id: d.id }, function (r) {
layer.msg(r.msg || '操作完成');
if (r.code === 0) { table.reload('dataTable'); }
layer.close(index);
}, 'json');
});
} else if (obj.event === 'reject') {
layer.prompt({ title: '填写驳回原因', formType: 2 }, function (val, index) {
$.post('{:url("/appmall/backend/addonreview/reject")}', { id: d.id, reason: val }, function (r) {
layer.msg(r.msg || '操作完成');
if (r.code === 0) { table.reload('dataTable'); }
layer.close(index);
}, 'json');
});
table.on('tool(dataTable)', function (elem) {
var d = elem.data;
if (elem.event === 'approve') {
layer.confirm('确认通过该插件并发布到市场', function () {
http.post('approve', { id: d.id }).then(function (r) {
if (r.code === 0) { layer.msg('已通过并发布', { icon: 1 }); table.reload('dataTable'); }
else { layer.msg(r.message || '操作失败', { icon: 2 }); }
}).catch(function () { layer.msg('请求失败', { icon: 2 }); });
});
} else if (elem.event === 'reject') {
layer.prompt({ title: '驳回原因', formType: 2 }, function (val, idx) {
http.post('reject', { id: d.id, reason: val }).then(function (r) {
if (r.code === 0) { layer.close(idx); layer.msg('已驳回', { icon: 1 }); table.reload('dataTable'); }
else { layer.msg(r.message || '操作失败', { icon: 2 }); }
}).catch(function () { layer.msg('请求失败', { icon: 2 }); });
});
} else if (elem.event === 'detail') {
layer.open({
type: 2,
title: '审核详情 #' + d.id,
area: ['720px', '80%'],
content: 'detailview?id=' + d.id
});
} else if (elem.event === 'price') {
layer.prompt({ title: '修改「' + d.name + '」价格(0 为免费,同步全部版本)', value: d.price || '0' }, function (val, idx) {
var p = parseFloat(val);
if (isNaN(p) || p < 0) { layer.msg('请输入不小于 0 的价格', { icon: 2 }); return; }
http.post('updatePrice', { name: d.name, price: p }).then(function (r) {
if (r.code === 0) { layer.close(idx); layer.msg(r.message || '价格已更新', { icon: 1 }); table.reload('dataTable'); }
else { layer.msg(r.message || '操作失败', { icon: 2 }); }
}).catch(function () { layer.msg('请求失败', { icon: 2 }); });
});
}
});
});
});
</script>
</script>
</body>
</html>
@@ -0,0 +1,681 @@
<!--
* @Author: YwxApp <ywx@ywxapp.cn>
* @Description: 开发者中心控制台(Discuz! 应用中心风格:顶栏 + 左侧菜单 + 内容区)
-->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>开发者中心 - YwxApp 应用市场</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/assets/layui/css/layui.css" rel="stylesheet">
<link href="/assets/ywxapp/css/wxapp.css" rel="stylesheet">
<style>
:root {
--brand: #1677ff;
--brand-dark: #0e5fd8;
--bg: #f0f2f5;
--card: #fff;
--text: #1f2329;
--muted: #8a919f;
--line: #ebedf0;
--ok: #18a058;
--warn: #d48806;
--danger: #d4380d;
}
* { box-sizing: border-box; }
body { margin: 0; background: var(--bg); color: var(--text); font-family: -apple-system, "Segoe UI", "Microsoft YaHei", sans-serif; font-size: 14px; }
a { color: var(--brand); text-decoration: none; }
/* 顶栏 */
.topbar { height: 56px; background: #fff; border-bottom: 1px solid var(--line); display: flex; align-items: center; padding: 0 22px; position: sticky; top: 0; z-index: 10; }
.topbar .brand { font-size: 17px; font-weight: 700; color: var(--text); display: flex; align-items: center; gap: 8px; }
.topbar .brand .logo { width: 26px; height: 26px; border-radius: 6px; background: linear-gradient(135deg, var(--brand), #36cfc9); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 15px; }
.topbar .brand small { font-weight: 400; color: var(--muted); font-size: 13px; margin-left: 2px; }
.topbar .spacer { flex: 1; }
.topbar .who { color: var(--muted); font-size: 13px; margin-right: 14px; }
.topbar .who b { color: var(--text); }
/* 布局 */
.layout { display: flex; min-height: calc(100vh - 56px); }
.sidebar { width: 210px; background: #fff; border-right: 1px solid var(--line); padding: 14px 0; flex-shrink: 0; }
.sidebar .menu { list-style: none; margin: 0; padding: 0; }
.sidebar .menu li { padding: 12px 22px; cursor: pointer; color: #4e5969; display: flex; align-items: center; gap: 10px; font-size: 14px; border-left: 3px solid transparent; transition: all .15s; }
.sidebar .menu li .ic { font-size: 16px; width: 18px; text-align: center; }
.sidebar .menu li:hover { background: #f7f9fc; color: var(--brand); }
.sidebar .menu li.active { background: #eef4ff; color: var(--brand); border-left-color: var(--brand); font-weight: 600; }
.content { flex: 1; padding: 22px 26px; min-width: 0; }
.panel { display: none; }
.panel.active { display: block; animation: fade .2s; }
@keyframes fade { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
.page-title { font-size: 18px; font-weight: 700; margin: 0 0 4px; }
.page-sub { color: var(--muted); margin: 0 0 18px; font-size: 13px; }
/* 卡片/统计 */
.stat-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 18px; }
.stat-card { background: var(--card); border-radius: 10px; padding: 16px 18px; box-shadow: 0 1px 3px rgba(0,0,0,.04); }
.stat-card .lbl { color: var(--muted); font-size: 13px; }
.stat-card .num { font-size: 26px; font-weight: 700; margin-top: 6px; }
.stat-card .num.ok { color: var(--ok); }
.stat-card .num.brand { color: var(--brand); }
.card { background: var(--card); border-radius: 10px; padding: 18px 20px; box-shadow: 0 1px 3px rgba(0,0,0,.04); margin-bottom: 16px; }
.card h3 { margin: 0 0 14px; font-size: 15px; display: flex; align-items: center; gap: 8px; }
.card h3 .bar { width: 4px; height: 15px; background: var(--brand); border-radius: 2px; display: inline-block; }
/* 表格 */
table.dev-table { width: 100%; border-collapse: collapse; font-size: 13px; }
table.dev-table th, table.dev-table td { text-align: left; padding: 11px 12px; border-bottom: 1px solid var(--line); }
table.dev-table th { color: var(--muted); font-weight: 500; background: #fafbfc; }
table.dev-table tr:hover td { background: #fafcff; }
.app-name { font-weight: 600; }
.app-meta { color: var(--muted); font-size: 12px; margin-top: 2px; }
.tag { display: inline-block; padding: 2px 9px; border-radius: 20px; font-size: 12px; }
.tag.up { background: #e8f7ee; color: var(--ok); }
.tag.down { background: #f1f2f4; color: var(--muted); }
.tag.wait { background: #fff7e6; color: var(--warn); }
.tag.reject { background: #fff1f0; color: var(--danger); }
.tag.free { background: #eef4ff; color: var(--brand); }
.tag.t-addon { background: #eef4ff; color: var(--brand); }
.tag.t-tpl { background: #f4eefe; color: #722ed1; }
.empty { text-align: center; color: var(--muted); padding: 40px 0; }
/* 令牌闸门 */
.gate { max-width: 420px; margin: 12vh auto 0; background: #fff; border-radius: 12px; padding: 34px 36px; box-shadow: 0 4px 20px rgba(0,0,0,.08); }
.gate h2 { margin: 0 0 6px; text-align: center; }
.gate p { text-align: center; color: var(--muted); margin: 0 0 22px; font-size: 13px; }
.btn { display: inline-flex; align-items: center; gap: 6px; }
.layui-btn { border-radius: 6px; }
.toolbar { margin-bottom: 14px; display: flex; justify-content: space-between; align-items: center; }
.copybox { background: #f6f8fa; border: 1px dashed #d0d7de; border-radius: 6px; padding: 10px 12px; font-family: monospace; word-break: break-all; margin: 8px 0; }
.kv { display: flex; padding: 9px 0; border-bottom: 1px solid var(--line); font-size: 14px; }
.kv:last-child { border-bottom: none; }
.kv .k { width: 110px; color: var(--muted); flex-shrink: 0; }
.kv .v { flex: 1; word-break: break-all; }
.hint { color: var(--muted); font-size: 12px; margin-top: 6px; }
.hidden { display: none !important; }
.act-link { color: var(--brand); cursor: pointer; }
@media (max-width: 880px) { .stat-row { grid-template-columns: repeat(2, 1fr); } .sidebar { width: 64px; } .sidebar .menu li span.txt { display: none; } }
</style>
</head>
<body>
<!-- 顶栏 -->
<div class="topbar" id="topbar">
<div class="brand"><span class="logo">Y</span>YwxApp 应用市场<small>开发者中心</small></div>
<div class="spacer"></div>
<div class="who" id="who"></div>
<a href="javascript:;" class="layui-btn layui-btn-sm layui-btn-primary" id="logoutBtn">退出</a>
</div>
<!-- 令牌闸门 -->
<div id="gate" class="gate hidden">
<h2>开发者令牌登录</h2>
<p>请输入你的开发者令牌以进入控制台(可在「查询我的令牌」页取回)</p>
<form class="layui-form" id="gateForm">
<div class="layui-form-item">
<input type="text" name="token" id="gateToken" required lay-verify="required" placeholder="粘贴开发者令牌" class="layui-input">
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid layui-btn-normal" lay-submit lay-filter="gate">进入控制台</button>
</div>
</form>
<p class="hint" style="text-align:center;">
还没有令牌?<a href="{:url('index')}">立即申请入驻</a> ·
<a href="{:url('mine')}">找回令牌</a>
</p>
</div>
<!-- 控制台主体 -->
<div class="layout hidden" id="console">
<div class="sidebar">
<ul class="menu" id="menu">
<li data-tab="overview" class="active"><span class="ic layui-icon layui-icon-console"></span><span class="txt">概览</span></li>
<li data-tab="apps"><span class="ic layui-icon layui-icon-app"></span><span class="txt">我的应用</span></li>
<li data-tab="submit"><span class="ic layui-icon layui-icon-upload"></span><span class="txt">提交应用</span></li>
<li data-tab="earn"><span class="ic layui-icon layui-icon-rmb"></span><span class="txt">收益账单</span></li>
<li data-tab="withdraw"><span class="ic layui-icon layui-icon-transfer"></span><span class="txt">提现</span></li>
<li data-tab="account"><span class="ic layui-icon layui-icon-user"></span><span class="txt">账户设置</span></li>
</ul>
</div>
<div class="content">
<!-- 概览 -->
<section class="panel active" id="panel-overview">
<h2 class="page-title">概览</h2>
<p class="page-sub">你的应用与市场表现一览</p>
<div class="stat-row" id="statRow">
<div class="stat-card"><div class="lbl">已上架应用</div><div class="num brand" id="stApps">-</div></div>
<div class="stat-card"><div class="lbl">待审核提交</div><div class="num warn" id="stPending">-</div></div>
<div class="stat-card"><div class="lbl">总下载量</div><div class="num" id="stDl">-</div></div>
<div class="stat-card"><div class="lbl">可提现余额</div><div class="num ok" id="stBalance">-</div></div>
</div>
<div class="card">
<h3><span class="bar"></span>近期提交</h3>
<table class="dev-table">
<thead><tr><th>应用</th><th>版本</th><th>状态</th><th>时间</th></tr></thead>
<tbody id="recentBody"><tr><td colspan="4" class="empty">加载中…</td></tr></tbody>
</table>
</div>
</section>
<!-- 我的应用 -->
<section class="panel" id="panel-apps">
<h2 class="page-title">我的应用</h2>
<p class="page-sub">查看你已上架/下架的应用,以及待审核的提交记录</p>
<div class="toolbar">
<span class="hint">如需发布新版本,请前往「提交应用」上传 zip 包</span>
<a href="javascript:;" class="layui-btn layui-btn-sm layui-btn-normal" data-goto="submit">+ 提交新应用</a>
</div>
<div class="card">
<h3><span class="bar"></span>已上架 / 下架应用</h3>
<table class="dev-table">
<thead><tr><th>应用</th><th>版本</th><th>价格</th><th>下载</th><th>状态</th><th>更新时间</th><th>操作</th></tr></thead>
<tbody id="listedBody"><tr><td colspan="7" class="empty">加载中…</td></tr></tbody>
</table>
</div>
<div class="card">
<h3><span class="bar"></span>提交记录</h3>
<table class="dev-table">
<thead><tr><th>应用</th><th>版本</th><th>状态</th><th>说明</th><th>更新时间</th></tr></thead>
<tbody id="subBody"><tr><td colspan="5" class="empty">加载中…</td></tr></tbody>
</table>
</div>
</section>
<!-- 提交应用 -->
<section class="panel" id="panel-submit">
<h2 class="page-title">商品提交</h2>
<p class="page-sub" id="submitSub">上传插件 zip 包(根目录需含 info.php),提交后等待官方审核</p>
<div class="card">
<form class="layui-form" id="submitForm">
<div class="layui-form-item">
<label class="layui-form-label">应用类型</label>
<div class="layui-input-inline" style="width:200px;">
<select name="type" id="appType">
<option value="addon">插件</option>
<option value="template">模板</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux">插件含 info.php;模板含 templates/名称/template.json</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件标识</label>
<div class="layui-input-inline" style="width:260px;">
<input type="text" name="name" required lay-verify="required" placeholder="如 mqttbroker(仅字母数字下划线)" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux" id="nameHint">与 info.php 中 name 一致</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">版本号</label>
<div class="layui-input-inline" style="width:200px;">
<input type="text" name="version" required lay-verify="required" placeholder="如 1.0.0" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">格式 x.y.z,且未重复提交</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">应用名称</label>
<div class="layui-input-block">
<input type="text" name="title" required lay-verify="required" placeholder="如 MQTT 消息代理" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">作者</label>
<div class="layui-input-block">
<input type="text" name="author" placeholder="开发者/工作室名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">分类</label>
<div class="layui-input-inline" style="width:200px;">
<select name="category">
<option value="工具">工具</option>
<option value="电商">电商</option>
<option value="社交">社交</option>
<option value="内容">内容</option>
<option value="教育">教育</option>
<option value="其他">其他</option>
</select>
</div>
<label class="layui-form-label">价格(¥)</label>
<div class="layui-input-inline" style="width:140px;">
<input type="number" name="price" value="0" step="0.01" min="0" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">标签</label>
<div class="layui-input-block">
<input type="text" name="tags" placeholder="逗号分隔,如 物联网,通信" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">封面图URL</label>
<div class="layui-input-block">
<input type="text" name="logo" placeholder="可选,应用封面图地址" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">简介</label>
<div class="layui-input-block">
<textarea name="description" placeholder="应用简介/功能描述" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">更新日志</label>
<div class="layui-input-block">
<textarea name="changelog" placeholder="如:1.0.1 修复某某问题;1.0.0 首次发布" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最低框架版本</label>
<div class="layui-input-block">
<input type="text" name="require_framework" placeholder="如 1.2.0(留空表示不限)" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件包</label>
<div class="layui-input-block">
<input type="file" name="file" id="pkgFile" accept=".zip" required lay-verify="required" class="layui-input">
<div class="hint" id="pkgHint">仅支持 .zip,插件包根目录需含 info.php,将进行安全扫描</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="doSubmit">提交审核</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
</div>
</section>
<!-- 收益账单 -->
<section class="panel" id="panel-earn">
<h2 class="page-title">收益账单</h2>
<p class="page-sub">查看销售收益与结算情况</p>
<div class="stat-row">
<div class="stat-card"><div class="lbl">可提现余额</div><div class="num ok" id="eaBalance">¥0.00</div></div>
<div class="stat-card"><div class="lbl">冻结中(提现待打款)</div><div class="num warn" id="eaFrozen">¥0.00</div></div>
</div>
<div class="card">
<h3><span class="bar"></span>收益明细</h3>
<table class="dev-table">
<thead><tr><th>订单号</th><th>销售额</th><th>抽成</th><th>应得</th><th>状态</th><th>时间</th></tr></thead>
<tbody id="revBody"><tr><td colspan="6" class="empty">加载中…</td></tr></tbody>
</table>
</div>
</section>
<!-- 提现 -->
<section class="panel" id="panel-withdraw">
<h2 class="page-title">提现</h2>
<p class="page-sub">将可提现余额提现至你的收款账号</p>
<div class="card" style="max-width:560px;">
<form class="layui-form" id="withdrawForm">
<div class="layui-form-item">
<label class="layui-form-label">提现金额</label>
<div class="layui-input-inline" style="width:200px;">
<input type="number" name="amount" step="0.01" min="0.01" required lay-verify="required" placeholder="0.00" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">不可超过可提现余额</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">提现渠道</label>
<div class="layui-input-inline" style="width:200px;">
<select name="channel">
<option value="alipay">支付宝</option>
<option value="wechat">微信</option>
<option value="bank">银行卡</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收款账号</label>
<div class="layui-input-block">
<input type="text" name="account" required lay-verify="required" placeholder="支付宝/微信账号或银行卡号" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="doWithdraw">提交提现申请</button>
</div>
</div>
</form>
</div>
</section>
<!-- 账户设置 -->
<section class="panel" id="panel-account">
<h2 class="page-title">账户设置</h2>
<p class="page-sub">管理你的开发者身份与令牌</p>
<div class="card" style="max-width:620px;">
<div class="kv"><div class="k">开发者名称</div><div class="v" id="acName">-</div></div>
<div class="kv"><div class="k">邮箱</div><div class="v" id="acEmail">-</div></div>
<div class="kv"><div class="k">账户状态</div><div class="v" id="acStatus">-</div></div>
<div class="kv"><div class="k">开发者令牌</div><div class="v">
<div class="copybox" id="acToken">-</div>
<button class="layui-btn layui-btn-sm layui-btn-normal" id="copyToken">复制令牌</button>
<span class="hint">发布插件到官方市场时需使用此令牌(APPMARKET_DEV_TOKEN)。</span>
</div></div>
<div class="kv"><div class="k">操作</div><div class="v">
<a href="{:url('mine')}">丢失令牌?前往找回</a>
</div></div>
</div>
</section>
</div>
</div>
<script src="/assets/layui/layui.js"></script>
<script src="/assets/ywxapp/ywxapp.js" module="{$site.app}"></script>
<script>
layui.use(['form', 'jquery', 'layer', 'http'], function () {
var form = layui.form, $ = layui.jquery, layer = layui.layer, http = layui.http;
var TOKEN_KEY = 'appmall_dev_token';
var token = '';
// ---- 工具 ----
function getParam(name) {
var m = location.search.match(new RegExp('[?&]' + name + '=([^&]*)'));
return m ? decodeURIComponent(m[1]) : '';
}
function maskToken(t) {
if (!t || t.length < 12) return t;
return t.substr(0, 6) + '****' + t.substr(-4);
}
function money(v) { return '¥' + (parseFloat(v || 0)).toFixed(2); }
function fmtTime(ts) {
if (!ts) return '-';
var d = new Date(ts * 1000);
return d.getFullYear() + '-' + ('0' + (d.getMonth() + 1)).slice(-2) + '-' + ('0' + d.getDate()).slice(-2)
+ ' ' + ('0' + d.getHours()).slice(-2) + ':' + ('0' + d.getMinutes()).slice(-2);
}
// Result 系接口成功 code=0Market::submit 成功 code=1
function req(url, data, successCode) {
successCode = (successCode === undefined) ? 0 : successCode;
return http.post(url, data).then(function (r) {
if (r && r.code === successCode) return r;
return Promise.reject((r && r.message) || (r && r.msg) || '请求失败');
});
}
// ---- 令牌闸门 ----
function showGate() { $('#gate').removeClass('hidden'); $('#console').addClass('hidden'); $('#topbar').addClass('hidden'); }
function enterConsole(tk) {
token = tk;
try { localStorage.setItem(TOKEN_KEY, tk); } catch (e) {}
$('#gate').addClass('hidden');
$('#topbar').removeClass('hidden');
$('#console').removeClass('hidden');
loadOverview();
loadAccount();
}
// 初始化:URL > localStorage
var initToken = getParam('token') || (function () { try { return localStorage.getItem(TOKEN_KEY) || ''; } catch (e) { return ''; } })();
if (!initToken) {
showGate();
} else {
// 校验令牌有效性
req('/appmall/developer/overview', { token: initToken }).then(function (r) {
enterConsole(initToken);
}).catch(function (msg) {
showGate();
layer.msg(msg || '令牌无效', { icon: 2 });
});
}
form.on('submit(gate)', function (data) {
var tk = (data.field.token || '').trim();
if (!tk) { layer.msg('请输入令牌', { icon: 2 }); return false; }
layer.load(1);
req('/appmall/developer/overview', { token: tk }).then(function () {
layer.closeAll();
enterConsole(tk);
}).catch(function (msg) {
layer.closeAll();
layer.msg(msg || '令牌无效', { icon: 2 });
});
return false;
});
$('#logoutBtn').on('click', function () {
try { localStorage.removeItem(TOKEN_KEY); } catch (e) {}
location.href = '{:url("index")}';
});
// ---- 左侧菜单 ----
$('#menu').on('click', 'li', function () {
var tab = $(this).data('tab');
$('#menu li').removeClass('active');
$(this).addClass('active');
$('.panel').removeClass('active');
$('#panel-' + tab).addClass('active');
if (tab === 'overview') loadOverview();
else if (tab === 'apps') loadApps();
else if (tab === 'earn') loadEarnings();
else if (tab === 'account') loadAccount();
});
$('[data-goto]').on('click', function () {
var tab = $(this).data('goto');
$('#menu li[data-tab="' + tab + '"]').click();
});
// ---- 概览 ----
function loadOverview() {
req('/appmall/developer/overview', { token: token }).then(function (r) {
var d = r.data || {};
$('#who').html('欢迎,<b>' + (d.username || '开发者') + '</b>');
$('#stApps').text(d.app_count || 0);
$('#stPending').text(d.pending_count || 0);
$('#stDl').text(d.total_downloads || 0);
$('#stBalance').text(money(d.balance));
var rows = d.recent || [];
if (!rows.length) {
$('#recentBody').html('<tr><td colspan="4" class="empty">暂无提交记录</td></tr>');
return;
}
var html = '';
rows.forEach(function (it) {
var st = subStatus(it.status);
html += '<tr><td class="app-name">' + esc(it.title) + typeTag(it.type) + '</td><td>' + esc(it.version) + '</td><td>' + st + '</td><td>' + fmtTime(it.update_at) + '</td></tr>';
});
$('#recentBody').html(html);
}).catch(function (msg) { layer.msg(msg, { icon: 2 }); });
}
// ---- 我的应用 ----
function loadApps() {
req('/appmall/developer/apps', { token: token }).then(function (r) {
var d = r.data || {};
var listed = d.listed || [], subs = d.submissions || [];
if (!listed.length) {
$('#listedBody').html('<tr><td colspan="7" class="empty">你还没有已上架的应用</td></tr>');
} else {
var h = '';
listed.forEach(function (it) {
var price = (parseFloat(it.price) > 0) ? money(it.price) : '<span class="tag free">免费</span>';
var st = it.status == 1
? '<span class="tag up">上架中</span>'
: '<span class="tag down">已下架</span>';
h += '<tr>'
+ '<td class="app-name">' + esc(it.title) + typeTag(it.type) + '<div class="app-meta">' + esc(it.name) + (it.category ? ' · ' + esc(it.category) : '') + '</div></td>'
+ '<td>' + esc(it.version) + '</td>'
+ '<td>' + price + '</td>'
+ '<td>' + (it.download_count || 0) + '</td>'
+ '<td>' + st + '</td>'
+ '<td>' + fmtTime(it.update_at) + '</td>'
+ '<td><a class="act-link" data-act="price" data-name="' + esc(it.name) + '" data-price="' + (it.price || 0) + '">改价</a></td></tr>';
});
$('#listedBody').html(h);
}
if (!subs.length) {
$('#subBody').html('<tr><td colspan="5" class="empty">暂无提交记录</td></tr>');
} else {
var h2 = '';
subs.forEach(function (it) {
var st = subStatus(it.status);
var note = it.status == 2 ? (it.reject_reason ? esc(it.reject_reason) : '已驳回,可重新提交') : '-';
h2 += '<tr>'
+ '<td class="app-name">' + esc(it.title) + typeTag(it.type) + '<div class="app-meta">' + esc(it.name) + '</div></td>'
+ '<td>' + esc(it.version) + '</td>'
+ '<td>' + st + '</td>'
+ '<td>' + note + '</td>'
+ '<td>' + fmtTime(it.update_at) + '</td></tr>';
});
$('#subBody').html(h2);
}
}).catch(function (msg) { layer.msg(msg, { icon: 2 }); });
}
// 改价(无需重新打包/重新提审,同步该应用全部版本,市场即时生效)
$('#listedBody').on('click', '[data-act="price"]', function () {
var name = $(this).data('name');
var cur = $(this).data('price') || 0;
layer.prompt({ title: '修改「' + name + '」价格(0 为免费,同步全部版本)', value: String(cur) }, function (val, idx) {
var p = parseFloat(val);
if (isNaN(p) || p < 0) { layer.msg('请输入不小于 0 的价格', { icon: 2 }); return; }
req('/appmall/developer/price', { token: token, name: name, price: p }).then(function (r) {
layer.close(idx);
layer.msg(r.message || '价格已更新', { icon: 1 });
loadApps();
}).catch(function (msg) { layer.msg(msg, { icon: 2 }); });
});
});
function subStatus(s) {
if (s == 0) return '<span class="tag wait">待审核</span>';
if (s == 1) return '<span class="tag up">已通过</span>';
if (s == 2) return '<span class="tag reject">已驳回</span>';
return '<span class="tag down">未知</span>';
}
function typeTag(t) {
return t === 'template'
? ' <span class="tag t-tpl">模板</span>'
: ' <span class="tag t-addon">插件</span>';
}
// 提交类型切换:动态改写包要求与标识提示
$('#appType').on('change', function () {
var isTpl = $(this).val() === 'template';
$('#submitSub').text(isTpl
? '上传模板 zip 包(须含 templates/名称/template.json),提交后等待官方审核'
: '上传插件 zip 包(根目录需含 info.php),提交后等待官方审核');
$('#pkgHint').text(isTpl
? '仅支持 .zip,模板包须含 templates/<名称>/template.json,将进行安全扫描(模板包禁含 PHP 文件)'
: '仅支持 .zip,插件包根目录需含 info.php,将进行安全扫描');
$('#nameHint').text(isTpl ? '与 template.json 中标识(文件夹名)一致' : '与 info.php 中 name 一致');
});
// ---- 提交应用 ----
form.on('submit(doSubmit)', function () {
var file = document.getElementById('pkgFile').files[0];
if (!file) { layer.msg('请选择插件 zip 包', { icon: 2 }); return false; }
var fd = new FormData();
fd.append('file', file);
fd.append('token', token);
fd.append('type', $('select[name="type"]').val());
fd.append('name', $('input[name="name"]').val());
fd.append('version', $('input[name="version"]').val());
fd.append('title', $('input[name="title"]').val());
fd.append('author', $('input[name="author"]').val());
fd.append('category', $('select[name="category"]').val());
fd.append('tags', $('input[name="tags"]').val());
fd.append('price', $('input[name="price"]').val());
fd.append('logo', $('input[name="logo"]').val());
fd.append('description', $('textarea[name="description"]').val());
fd.append('changelog', $('textarea[name="changelog"]').val());
fd.append('require_framework', $('input[name="require_framework"]').val());
layer.load(1);
http.upload('/appmall/api/addon/submit', file, {
token: token,
type: $('select[name="type"]').val(),
name: $('input[name="name"]').val(),
version: $('input[name="version"]').val(),
title: $('input[name="title"]').val(),
author: $('input[name="author"]').val(),
category: $('select[name="category"]').val(),
tags: $('input[name="tags"]').val(),
price: $('input[name="price"]').val(),
logo: $('input[name="logo"]').val(),
description: $('textarea[name="description"]').val()
}).then(function (r) {
layer.closeAll();
if (r && r.code === 1) {
layer.msg(r.msg || '提交成功,等待审核', { icon: 1 });
$('#submitForm')[0].reset();
form.render();
} else {
layer.msg((r && (r.msg || r.message)) || '提交失败', { icon: 2 });
}
}).catch(function () { layer.closeAll(); layer.msg('请求失败', { icon: 2 }); });
return false;
});
// ---- 收益 ----
function loadEarnings() {
req('/appmall/developer/earnings', { token: token }).then(function (r) {
var d = r.data || {};
$('#eaBalance').text(money(d.balance));
$('#eaFrozen').text(money(d.frozen_balance));
var list = d.revenues || [];
if (!list.length) {
$('#revBody').html('<tr><td colspan="6" class="empty">暂无收益记录</td></tr>');
return;
}
var html = '';
list.forEach(function (it) {
var st = it.status == 1 ? '<span style="color:#18a058;">已结算</span>' : '<span style="color:#d48806;">待结算</span>';
html += '<tr>'
+ '<td>' + (it.order_id || '-') + '</td>'
+ '<td>' + money(it.amount) + '</td>'
+ '<td>' + money(it.commission) + '</td>'
+ '<td>' + money(it.income) + '</td>'
+ '<td>' + st + '</td>'
+ '<td>' + fmtTime(it.create_at) + '</td></tr>';
});
$('#revBody').html(html);
}).catch(function (msg) { layer.msg(msg, { icon: 2 }); });
}
// ---- 提现 ----
form.on('submit(doWithdraw)', function (data) {
data.field.token = token;
var amt = parseFloat(data.field.amount);
if (!(amt > 0)) { layer.msg('请输入正确的提现金额', { icon: 2 }); return false; }
req('/appmall/developer/withdraw', data.field).then(function (r) {
layer.msg(r.message || '提交成功', { icon: 1 });
$('#withdrawForm')[0].reset(); form.render();
loadEarnings();
}).catch(function (msg) { layer.msg(msg, { icon: 2 }); });
return false;
});
// ---- 账户 ----
function loadAccount() {
req('/appmall/developer/overview', { token: token }).then(function (r) {
var d = r.data || {};
$('#acName').text(d.username || '-');
$('#acEmail').text(d.email || '-');
$('#acStatus').html('<span class="tag up">正常</span>');
$('#acToken').text(token);
}).catch(function () {});
}
$('#copyToken').on('click', function () {
var t = document.getElementById('acToken').innerText;
var ta = $('<textarea>').val(t).appendTo('body').select();
try { document.execCommand('copy'); layer.msg('已复制', { icon: 1 }); } catch (e) { layer.msg('复制失败', { icon: 2 }); }
ta.remove();
});
function esc(s) {
return $('<div>').text(s == null ? '' : s).html();
}
});
</script>
</body>
</html>
@@ -0,0 +1,95 @@
<!--
* @Author: YwxApp <ywx@ywxapp.cn>
* @Date: 2026-07-21 13:40:36
* @LastEditors: YwxApp <ywx@ywxapp.cn>
* @LastEditTime: 2026-07-26 15:36:01
* @Description:
* @FilePath: \ywxapp_dev\addon\appmall\view\frontend\developer\mine.html
* @CustomString: Copyright (c) 2026 YwxApp
-->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>查询我的令牌 - YwxApp 应用市场</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/assets/layui/css/layui.css" rel="stylesheet">
<link href="/assets/ywxapp/css/wxapp.css" rel="stylesheet">
<style>
body { background: #f2f3f5; margin: 0; }
.topbar { height: 52px; background: #fff; border-bottom: 1px solid #ebedf0; display: flex; align-items: center; padding: 0 22px; }
.topbar .brand { font-size: 16px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.topbar .brand .logo { width: 24px; height: 24px; border-radius: 6px; background: linear-gradient(135deg, #1677ff, #36cfc9); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 14px; }
.topbar .brand small { font-weight: 400; color: #8a919f; font-size: 13px; }
.topbar .spacer { flex: 1; }
.dev-box { max-width: 460px; margin: 48px auto; background: #fff; padding: 30px 35px; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,.08); }
.dev-box h2 { text-align: center; margin-bottom: 6px; }
.dev-tip { text-align: center; color: #999; margin-bottom: 22px; font-size: 13px; }
.dev-token { background: #f4f4f4; padding: 12px; border-radius: 6px; word-break: break-all; font-family: monospace; }
</style>
</head>
<body>
<div class="topbar">
<div class="brand"><span class="logo">Y</span>YwxApp 应用市场<small>开发者中心</small></div>
<div class="spacer"></div>
<a href="{:url('console')}" class="layui-btn layui-btn-sm layui-btn-normal">进入开发者中心</a>
</div>
<div class="dev-box">
<h2>查询我的令牌</h2>
<p class="dev-tip">输入注册邮箱,取回你的开发者令牌(若已激活将重新邮件发送)</p>
<form class="layui-form" id="lookupForm">
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="email" name="email" required lay-verify="email" placeholder="注册时填写的邮箱" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-fluid" lay-submit lay-filter="lookup">查询令牌</button>
</div>
</div>
</form>
<div id="result" style="display:none; margin-top:20px;">
<div id="resultMsg" class="layui-bg-blue" style="padding:10px 12px;border-radius:6px;margin-bottom:12px;"></div>
<div id="tokenWrap" style="display:none;">
<label class="layui-form-label" style="text-align:left;padding-left:0;">你的开发者令牌</label>
<div class="dev-token" id="tokenVal"></div>
<button class="layui-btn layui-btn-sm layui-btn-normal" id="copyBtn" style="margin-top:10px;">复制令牌</button>
</div>
</div>
<p class="dev-tip" style="margin-top:18px;"><a href="{:url('index')}">返回开发者注册</a></p>
</div>
<script src="/assets/layui/layui.js"></script>
<script src="/assets/ywxapp/ywxapp.js" module="{$site.app}"></script>
<script>
layui.use(['form', 'jquery', 'layer', 'http'], function () {
var form = layui.form, $ = layui.jquery, layer = layui.layer, http = layui.http;
form.on('submit(lookup)', function (data) {
http.post('{:url("/appmall/developer/lookup")}', data.field).then(function (r) {
$('#result').show();
$('#resultMsg').text(r.message || '查询完成');
if (r.code === 0 && r.data && r.data.token) {
$('#tokenWrap').show();
$('#tokenVal').text(r.data.token);
} else {
$('#tokenWrap').hide();
}
if (r.code !== 0) { layer.msg(r.message || '查询失败', { icon: 2 }); }
}).catch(function () { layer.msg('请求失败', { icon: 2 }); });
return false;
});
$('#copyBtn').on('click', function () {
var t = document.getElementById('tokenVal').innerText;
var dummy = $('<textarea>').val(t).appendTo('body').select();
document.execCommand('copy');
dummy.remove();
layer.msg('已复制', { icon: 1 });
});
});
</script>
</body>
</html>
@@ -0,0 +1,109 @@
<!--
* @Author: YwxApp <ywx@ywxapp.cn>
* @Date: 2026-07-21 13:40:29
* @LastEditors: YwxApp <ywx@ywxapp.cn>
* @LastEditTime: 2026-07-28 12:32:45
* @Description:
* @FilePath: \ywxapp_dev\addon\appmall\view\frontend\developer\register.html
* @CustomString: Copyright (c) 2026 YwxApp
-->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>开发者注册 - YwxApp 应用市场</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/assets/layui/css/layui.css" rel="stylesheet">
<link href="/assets/ywxapp/css/wxapp.css" rel="stylesheet">
<style>
body { background: #f2f3f5; margin: 0; }
.topbar { height: 52px; background: #fff; border-bottom: 1px solid #ebedf0; display: flex; align-items: center; padding: 0 22px; }
.topbar .brand { font-size: 16px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.topbar .brand .logo { width: 24px; height: 24px; border-radius: 6px; background: linear-gradient(135deg, #1677ff, #36cfc9); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 14px; }
.topbar .brand small { font-weight: 400; color: #8a919f; font-size: 13px; }
.topbar .spacer { flex: 1; }
.dev-box { max-width: 460px; margin: 48px auto; background: #fff; padding: 30px 35px; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,.08); }
.dev-box h2 { text-align: center; margin-bottom: 6px; }
.dev-tip { text-align: center; color: #999; margin-bottom: 22px; font-size: 13px; }
.dev-token { background: #f4f4f4; padding: 12px; border-radius: 6px; word-break: break-all; font-family: monospace; }
.closed { text-align:center; color:#c00; padding:30px 0; }
</style>
</head>
<body>
<div class="topbar">
<div class="brand"><span class="logo">Y</span>YwxApp 应用市场<small>开发者中心</small></div>
<div class="spacer"></div>
<a href="{:url('/appmall/Developer/console')}" class="layui-btn layui-btn-sm layui-btn-normal">进入开发者中心</a>
</div>
<div class="dev-box">
<h2>开发者入驻</h2>
<p class="dev-tip">注册后获取开发者令牌,用于在你自己的控制台「发布到官方市场」</p>
{if $register_open}
<form class="layui-form" id="regForm">
<div class="layui-form-item">
<label class="layui-form-label">开发者名称</label>
<div class="layui-input-block">
<input type="text" name="username" required lay-verify="required" placeholder="如:星河工作室" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="email" name="email" required lay-verify="email" placeholder="用于接收令牌/审核通知" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-fluid" lay-submit lay-filter="reg">提交申请</button>
</div>
</div>
<p class="dev-tip" style="margin:0;">
{if $need_approval}提交后需运营审核,令牌将通过邮件下发{else/}提交后令牌立即通过邮件下发{/if}
</p>
</form>
<div id="result" style="display:none; margin-top:20px;">
<div id="resultMsg" class="layui-bg-blue" style="padding:10px 12px;border-radius:6px;margin-bottom:12px;"></div>
<div id="tokenWrap" style="display:none;">
<label class="layui-form-label" style="text-align:left;padding-left:0;">你的开发者令牌</label>
<div class="dev-token" id="tokenVal"></div>
<button class="layui-btn layui-btn-sm layui-btn-normal" id="copyBtn" style="margin-top:10px;">复制令牌</button>
</div>
</div>
<p class="dev-tip" style="margin-top:18px;"><a href="{:url('mine')}">已有账号?查询我的令牌</a></p>
{else/}
<div class="closed">当前未开放自助注册,请联系运营获取开发者令牌。</div>
{/if}
</div>
<script src="/assets/layui/layui.js"></script>
<script src="/assets/ywxapp/ywxapp.js" module="{$site.app}"></script>
<script>
layui.use(['form', 'jquery', 'layer', 'http'], function () {
var form = layui.form, $ = layui.jquery, layer = layui.layer, http = layui.http;
form.on('submit(reg)', function (data) {
http.post('{:url("/appmall/developer/save")}', data.field).then(function (r) {
$('#result').show();
$('#resultMsg').text(r.message || '提交完成');
if (r.code === 0 && r.data && r.data.token) {
$('#tokenWrap').show();
$('#tokenVal').text(r.data.token);
} else {
$('#tokenWrap').hide();
}
if (r.code !== 0) { layer.msg(r.message || '提交失败', { icon: 2 }); }
}).catch(function () { layer.msg('请求失败', { icon: 2 }); });
return false;
});
$('#copyBtn').on('click', function () {
var t = document.getElementById('tokenVal').innerText;
var dummy = $('<textarea>').val(t).appendTo('body').select();
document.execCommand('copy');
dummy.remove();
layer.msg('已复制', { icon: 1 });
});
});
</script>
</body>
</html>
+2 -2
View File
@@ -13,7 +13,7 @@ namespace addon\haonav;
use think\facade\Config;
use think\facade\Db;
use ywxapp\AddonBase;
use ywxapp\Addons;
use ywxapp\model\BaseModel;
/**
@@ -23,7 +23,7 @@ use ywxapp\model\BaseModel;
* favorites / favorite_shares / ads / apply / click_stats);
* 卸载时按统一前缀清理全部表;升级时经 callAddonHook('upgrade') 收敛表结构。
*/
class Addon extends addon
class Addon extends Addons
{
/**
* 安装钩子(框架自动导入 install.sql 后调用)。
+8 -24
View File
@@ -93,18 +93,10 @@ class Index extends FrontendBase
*/
public function index()
{
$data = CategoryModel::with([
'links' => function ($query) {
$query->where('status', 1)->order('click_count', 'desc');
},
'children' => function ($query) {
$query->where('status', 1)->order('sort', 'desc')->with([
'links' => function ($q) {
$q->where('status', 1)->order('click_count', 'desc');
},
]);
},
])->where('status', 1)->order('sort', 'desc')->select();
$data = CategoryModel::with(['links' =>
function ($query) {
$query->where('status', 1)->limit(10)->order('click_count', 'desc');
}])->where('status', 1)->order('sort', 'desc')->select();
$hotspot = LinksModel::where('is_hot', 1)->where('status', 1)->limit(18)->order('click_count', 'desc')->select();
$links = LinksModel::where('is_recommend', 1)->where('status', 1)->limit(10)->order('sort', 'desc')->select();
@@ -449,18 +441,10 @@ class Index extends FrontendBase
*/
public function category($id = 0)
{
$data = CategoryModel::with([
'links' => function ($query) {
$query->where('status', 1)->order('click_count', 'desc');
},
'children' => function ($query) {
$query->where('status', 1)->order('sort', 'desc')->with([
'links' => function ($q) {
$q->where('status', 1)->order('click_count', 'desc');
},
]);
},
])->find($id);
$data = CategoryModel::with(['links' =>
function ($query) {
$query->where('status', 1)->order('click_count', 'desc');
}])->find($id);
$this->view->assign('info', $data);
$this->assignSeo();
return $this->view->fetch();
+186 -244
View File
@@ -1,9 +1,9 @@
-- ============================================================
-- addon/haonav/install.sql —— haonav 插件数据表
-- addons/haonav/install.sql —— haonav 插件数据表
-- 由 docs/split_install_sql.py 从根 install.sql 抽取。
-- 框架约定:插件安装时由 ywxapp\service\AddonService 执行本文件
-- (仅允许 CREATE TABLE / INSERT,见 importsql 白名单)。
-- 表名须为 __PREFIX__<插件名>_*,与 __PREFIX__addon 等核心表命名一致。
-- 表名须为 __PREFIX__<插件名>_*,与 __PREFIX__addons 等核心表命名一致。
-- ============================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
@@ -26,57 +26,20 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_category` (
KEY `idx_pid` (`pid`),
KEY `idx_status` (`status`),
KEY `idx_order` (`sort`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=143 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网址分类表';
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网址分类表';
INSERT INTO `__PREFIX__haonav_category` (`id`, `pid`, `title`, `icon`, `summary`, `keywords`, `description`, `sort`, `status`, `website_count`, `click_count`, `create_at`, `update_at`) VALUES
-- 一级分类
(1, 0, '常用搜索', '🔍', '', '', '搜索引擎与门户入口', 140, 1, 0, 0, NULL, NULL),
(2, 0, '视频娱乐', '📺', '', '', '影视、短视频与音乐平台', 130, 1, 0, 0, NULL, NULL),
(3, 0, '社交沟通', '👥', '', '', '综合与海外社交平台', 120, 1, 0, 0, NULL, NULL),
(4, 0, '新闻资讯', '📰', '', '', '门户新闻与科技资讯', 110, 1, 0, 0, NULL, NULL),
(5, 0, '开发编程', '💻', '', '', '代码托管、技术社区与云服务', 100, 1, 0, 0, NULL, NULL),
(6, 0, '学习教育', '🎓', '', '', '在线课程与资料文库', 90, 1, 0, 0, NULL, NULL),
(7, 0, '购物电商', '🛒', '', '', '综合电商与海淘二手', 80, 1, 0, 0, NULL, NULL),
(8, 0, '办公效率', '📁', '', '', '文档协作、邮箱、云盘与会议', 70, 1, 0, 0, NULL, NULL),
(9, 0, '设计创意', '🎨', '', '', '设计素材与在线设计工具', 60, 1, 0, 0, NULL, NULL),
(10, 0, '实用工具', '🧰', '', '', '生活服务与在线小工具', 50, 1, 0, 0, NULL, NULL),
(11, 0, '财经金融', '💰', '', '', '行情理财与支付银行', 40, 1, 0, 0, NULL, NULL),
(12, 0, '旅游出行', '✈️', '', '', '交通出行与住宿预订', 30, 1, 0, 0, NULL, NULL),
(13, 0, '医疗健康', '🩺', '', '', '在线问诊与健康科普', 20, 1, 0, 0, NULL, NULL),
(14, 0, '政务民生', '🏛️', '', '', '政务服务与生活缴费', 10, 1, 0, 0, NULL, NULL),
-- 二级分类(pid 指向一级)
(11, 1, '综合搜索', '🌐', '', '', '百度、Google 等综合搜索引擎', 140, 1, 0, 0, NULL, NULL),
(12, 1, '学术资源', '📖', '', '', '学术、图书与知识检索', 139, 1, 0, 0, NULL, NULL),
(21, 2, '长视频', '🎬', '', '', '爱奇艺、腾讯视频等长视频', 130, 1, 0, 0, NULL, NULL),
(22, 2, '短视频直播', '📱', '', '', '抖音、快手等短视频平台', 129, 1, 0, 0, NULL, NULL),
(23, 2, '音乐', '🎵', '', '', '在线音乐播放平台', 128, 1, 0, 0, NULL, NULL),
(31, 3, '综合社交', '💬', '', '', '微信、微博等国内社交', 120, 1, 0, 0, NULL, NULL),
(32, 3, '国际社交', '🌍', '', '', 'X、Telegram 等海外社交', 119, 1, 0, 0, NULL, NULL),
(41, 4, '综合门户', '🗞️', '', '', '新浪、网易等综合门户', 110, 1, 0, 0, NULL, NULL),
(42, 4, '科技资讯', '', '', '', '36氪、少数派等科技媒体', 109, 1, 0, 0, NULL, NULL),
(51, 5, '代码托管', '🔧', '', '', 'GitHub、Gitee 等代码平台', 100, 1, 0, 0, NULL, NULL),
(52, 5, '技术社区', '📝', '', '', 'CSDN、掘金等技术社区', 99, 1, 0, 0, NULL, NULL),
(53, 5, '云服务', '☁️', '', '', '阿里云、腾讯云等云服务', 98, 1, 0, 0, NULL, NULL),
(61, 6, '慕课学习', '📚', '', '', '慕课网、Coursera 等课程', 90, 1, 0, 0, NULL, NULL),
(62, 6, '资料文库', '📄', '', '', '百度文库、道客巴巴等', 89, 1, 0, 0, NULL, NULL),
(71, 7, '综合电商', '🛍️', '', '', '淘宝、京东等综合电商', 80, 1, 0, 0, NULL, NULL),
(72, 7, '海淘二手', '♻️', '', '', '亚马逊、闲鱼等海淘二手', 79, 1, 0, 0, NULL, NULL),
(81, 8, '文档协作', '📝', '', '', '腾讯文档、Notion 等协作', 70, 1, 0, 0, NULL, NULL),
(82, 8, '邮箱', '📧', '', '', 'QQ邮箱、Gmail 等邮箱', 69, 1, 0, 0, NULL, NULL),
(83, 8, '云盘', '💾', '', '', '百度网盘、OneDrive 等', 68, 1, 0, 0, NULL, NULL),
(84, 8, '会议办公', '🎥', '', '', '腾讯会议、钉钉等', 67, 1, 0, 0, NULL, NULL),
(91, 9, '设计素材', '🖼️', '', '', '千图网、Unsplash 等素材', 60, 1, 0, 0, NULL, NULL),
(92, 9, '设计工具', '🛠️', '', '', 'Figma、Canva 等设计工具', 59, 1, 0, 0, NULL, NULL),
(101, 10, '生活服务', '🚌', '', '', '快递、地图、出行等', 50, 1, 0, 0, NULL, NULL),
(102, 10, '在线工具', '⚙️', '', '', 'JSON、二维码等在线工具', 49, 1, 0, 0, NULL, NULL),
(111, 11, '行情理财', '📈', '', '', '东方财富、雪球等', 40, 1, 0, 0, NULL, NULL),
(112, 11, '支付银行', '🏦', '', '', '支付宝、网银等', 39, 1, 0, 0, NULL, NULL),
(121, 12, '交通出行', '🚄', '', '', '携程、12306 等出行', 30, 1, 0, 0, NULL, NULL),
(122, 12, '住宿预订', '🏨', '', '', '美团、Booking 等住宿', 29, 1, 0, 0, NULL, NULL),
(131, 13, '在线问诊', '💊', '', '', '丁香医生、好大夫等', 20, 1, 0, 0, NULL, NULL),
(132, 13, '健康科普', '🌿', '', '', '丁香园等健康科普', 19, 1, 0, 0, NULL, NULL),
(141, 14, '政务服务', '📋', '', '', '国家政务平台、粤省事等', 10, 1, 0, 0, NULL, NULL),
(142, 14, '生活缴费', '💡', '', '', '社保、水电网查询', 9, 1, 0, 0, NULL, NULL);
(1, 0, '社交网络', '👥', '', '', '各类社交平台和社区', 100, 1, 0, 0, NULL, 1778989915),
(2, 0, '视频娱乐', '📺', '', '', '视频网站和娱乐平台', 90, 1, 0, 0, NULL, 1778989661),
(3, 0, '生活购物', '🛒', '', '', '电商平台和购物网站', 80, 1, 0, 0, NULL, 1779052923),
(5, 0, '学习教育', '🎓', '', '', '学习资源和教育平台', 60, 1, 0, 0, NULL, NULL),
(6, 0, '新闻资讯', '📰', '', '', '新闻媒体和资讯网站', 50, 1, 0, 0, NULL, NULL),
(7, 0, '游戏娱乐', '🎮', '', '', '游戏平台和娱乐网站', 40, 1, 0, 0, NULL, NULL),
(8, 0, '搜索门户', '🔍', '', '', '搜索引擎与门户网站', 30, 1, 0, 0, 1779009576, 1779009576),
(9, 0, '开发编程', '💻', '', '', '开发者社区与编程资源', 20, 1, 0, 0, 1779019116, 1779019116),
(10, 0, '文学小说', '📚', '', '', '在线阅读与小说网站', 10, 1, 0, 0, 1779026059, 1779026059),
(11, 0, '办公 AI', '🤖', '', '', 'AI 工具与办公效率', 101, 1, 0, 0, 1779047143, 1779052149),
(12, 0, '金融财经', '💰', '', '', '金融资讯与理财平台', 5, 1, 0, 0, 1779049134, 1779049134);
CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_config` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
@@ -91,7 +54,7 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_config` (
`extend` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '扩展属性',
`setting` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '配置',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT COMMENT='系统配置';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT COMMENT='系统配置';
CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_links` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '网址ID',
@@ -127,196 +90,175 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_links` (
KEY `idx_status` (`status`),
KEY `idx_sort_order` (`sort`) USING BTREE,
FULLTEXT KEY `idx_search` (`title`,`description`,`keywords`)
) ENGINE=InnoDB AUTO_INCREMENT=121 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网址信息表';
) ENGINE=InnoDB AUTO_INCREMENT=139 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网址信息表';
INSERT INTO `__PREFIX__haonav_links` (`id`, `cid`, `title`, `url`, `icon`, `description`, `keywords`, `click_count`, `sort`, `is_hot`, `is_recommend`, `status`, `screenshot`, `favicon`, `create_at`, `update_at`, `last_click_at`) VALUES
-- 综合搜索
(1, 11, '百度', 'https://www.baidu.com', '🔍', '全球最大的中文搜索引擎', '百度,搜索,引擎', 45000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(2, 11, 'Google', 'https://www.google.com', '🌐', '全球搜索引擎巨头', 'Google,搜索,英文', 30000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(3, 11, '必应', 'https://www.bing.com', '🔎', '微软旗下搜索引擎', '必应,bing,搜索', 18000, 90, 0, 1, 1, NULL, NULL, NULL, NULL, NULL),
(4, 11, '搜狗', 'https://www.sogou.com', '🐶', '腾讯旗下搜索引擎', '搜狗,搜索,输入法', 12000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(5, 11, '360搜索', 'https://www.so.com', '🛡️', '360安全搜索引擎', '360,搜索,安全', 9000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(6, 11, 'Yahoo', 'https://www.yahoo.com', '🟣', '老牌门户与搜索引擎', '雅虎,yahoo,门户', 7000, 75, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 学术资源
(7, 12, '中国知网', 'https://www.cnki.net', '📚', '中文学术文献数据库', '知网,论文,学术', 8000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(8, 12, '豆瓣', 'https://www.douban.com', '🎞️', '书影音与知识社区', '豆瓣,书影音,社区', 16000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(9, 12, '维基百科', 'https://www.wikipedia.org', '📖', '自由的百科全书', '维基,百科,知识', 14000, 90, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(10, 12, '微信读书', 'https://weread.qq.com', '📕', '腾讯在线阅读平台', '微信读书,电子书,阅读', 9000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(11, 12, '鸠摩搜书', 'https://www.jiumodiary.com', '🔏', '电子书聚合搜索', '鸠摩,电子书,搜书', 5000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 长视频
(12, 21, '爱奇艺', 'https://www.iqiyi.com', '🔴', '悦享品质视频平台', '爱奇艺,视频,会员', 26000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(13, 21, '腾讯视频', 'https://v.qq.com', '🟢', '海量正版高清视频', '腾讯视频,视频,电视剧', 24000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(14, 21, '优酷', 'https://www.youku.com', '🟠', '阿里巴巴视频平台', '优酷,视频,土豆', 20000, 90, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(15, 21, '芒果TV', 'https://www.mgtv.com', '🟡', '湖南卫视官方视频', '芒果TV,视频,综艺', 18000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(16, 21, '哔哩哔哩', 'https://www.bilibili.com', '🔵', '国内知名弹幕视频网', 'B站,视频,弹幕', 32000, 88, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(17, 21, '搜狐视频', 'https://tv.sohu.com', '', '搜狐高清视频平台', '搜狐视频,视频,美剧', 9000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 短视频直播
(18, 22, '抖音', 'https://www.douyin.com', '🎵', '记录美好生活的短视频', '抖音,短视频,直播', 35000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(19, 22, '快手', 'https://www.kuaishou.com', '🎬', '普惠的短视频社区', '快手,短视频,直播', 22000, 95, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(20, 22, '微信视频', 'https://channels.weixin.qq.com', '💬', '微信生态短视频', '视频号,微信,短视频', 14000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 音乐
(21, 23, '网易云音乐', 'https://music.163.com', '🔴', '有态度的音乐平台', '网易云,音乐,歌单', 28000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(22, 23, 'QQ音乐', 'https://y.qq.com', '🟢', '腾讯在线音乐平台', 'QQ音乐,音乐,听歌', 26000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(23, 23, '酷狗音乐', 'https://www.kugou.com', '🟣', '庞大曲库音乐平台', '酷狗,音乐,听歌', 15000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(24, 23, '酷我音乐', 'https://www.kuwo.cn', '🔵', '无损音乐正版试听', '酷我,音乐,无损', 9000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(25, 23, '千千音乐', 'https://music.taihe.com', '🟡', '太合音乐旗下平台', '千千音乐,音乐,在线听', 5000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(26, 23, 'Spotify', 'https://www.spotify.com', '🟢', '全球流媒体音乐服务', 'Spotify,音乐,海外', 8000, 78, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 综合社交
(27, 31, '微信', 'https://weixin.qq.com', '💬', '腾讯即时通讯与社交', '微信,社交,聊天', 40000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(28, 31, 'QQ', 'https://im.qq.com', '🐧', '腾讯即时通讯工具', 'QQ,社交,聊天', 30000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(29, 31, '微博', 'https://www.weibo.com', '🔶', '随时随地发现新鲜事', '微博,社交,微博客', 28000, 90, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(30, 31, '小红书', 'https://www.xiaohongshu.com', '🔴', '标记生活的种草社区', '小红书,社交,种草', 24000, 88, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(31, 31, '知乎', 'https://www.zhihu.com', '🔵', '有问题就会有答案', '知乎,问答,知识', 20000, 85, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
-- 国际社交
(32, 32, 'X (Twitter)', 'https://x.com', '', '马斯卡旗下的社交平台', 'X,Twitter,海外社交', 16000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(33, 32, 'Telegram', 'https://telegram.org', '🔵', '加密即时通讯与频道', 'Telegram,电报,聊天', 12000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(34, 32, 'Facebook', 'https://www.facebook.com', '🔵', '全球最大社交网络', 'Facebook,脸书,海外社交', 14000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(35, 32, 'Instagram', 'https://www.instagram.com', '🔴', '图片与短视频社交', 'Instagram,ins,海外社交', 13000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(36, 32, 'Reddit', 'https://www.reddit.com', '🟠', '全球兴趣社区论坛', 'Reddit,论坛,海外', 9000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(37, 32, 'YouTube', 'https://www.youtube.com', '🔴', '全球最大视频平台', 'YouTube,视频,海外', 30000, 80, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
-- 综合门户
(38, 41, '新浪', 'https://www.sina.com.cn', '🔴', '综合门户与新闻', '新浪,门户,新闻', 22000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(39, 41, '搜狐', 'https://www.sohu.com', '🔵', '综合门户新闻平台', '搜狐,门户,新闻', 16000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(40, 41, '网易', 'https://www.163.com', '🔴', '综合门户与邮箱', '网易,门户,新闻', 18000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(41, 41, '腾讯新闻', 'https://news.qq.com', '🟢', '腾讯新闻资讯平台', '腾讯新闻,新闻,资讯', 14000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(42, 41, '今日头条', 'https://www.toutiao.com', '🔴', '个性化推荐资讯', '今日头条,新闻,资讯', 20000, 85, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(43, 41, '凤凰网', 'https://www.ifeng.com', '🔶', '全球华人资讯门户', '凤凰网,门户,新闻', 9000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 科技资讯
(44, 42, '36氪', 'https://36kr.com', '🔵', '新经济商业媒体', '36氪,科技,创业', 8000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(45, 42, '虎嗅', 'https://www.huxiu.com', '🟠', '有洞察的商业科技媒体', '虎嗅,科技,商业', 7000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(46, 42, '少数派', 'https://sspai.com', '🔵', '效率工具与数字生活', '少数派,科技,效率', 6000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(47, 42, '钛媒体', 'https://www.tmtpost.com', '🔴', '财经科技资讯平台', '钛媒体,科技,财经', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 代码托管
(48, 51, 'GitHub', 'https://github.com', '🐙', '全球最大代码托管平台', 'GitHub,代码,开源', 35000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(49, 51, 'GitLab', 'https://gitlab.com', '🟠', 'DevOps 代码协作平台', 'GitLab,代码,协作', 9000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(50, 51, 'Gitee', 'https://gitee.com', '🔴', '国内代码托管平台', 'Gitee,码云,代码', 12000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(51, 51, 'Coding', 'https://dev.tencent.com', '🔵', '腾讯云代码托管', 'Coding,代码,腾讯云', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 技术社区
(52, 52, 'CSDN', 'https://www.csdn.net', '🔴', '中文IT技术社区', 'CSDN,技术,博客', 20000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(53, 52, '掘金', 'https://juejin.cn', '🔵', '面向开发者的技术社区', '掘金,技术,前端', 14000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(54, 52, '博客园', 'https://www.cnblogs.com', '🔵', '开发者博客社区', '博客园,技术,博客', 8000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(55, 52, 'Stack Overflow', 'https://stackoverflow.com', '🟠', '全球编程问答社区', 'StackOverflow,技术,问答', 16000, 88, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(56, 52, 'V2EX', 'https://www.v2ex.com', '🔵', '创意工作者的社区', 'V2EX,技术,社区', 5000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(57, 52, '开源中国', 'https://www.oschina.net', '🔴', '中文开源技术社区', '开源中国,技术,开源', 6000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 云服务
(58, 53, '阿里云', 'https://www.aliyun.com', '🟠', '阿里云计算平台', '阿里云,云,服务器', 18000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(59, 53, '腾讯云', 'https://cloud.tencent.com', '🔵', '腾讯云计算平台', '腾讯云,云,服务器', 14000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(60, 53, '华为云', 'https://www.huaweicloud.com', '🔴', '华为云计算平台', '华为云,云,服务器', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(61, 53, '百度智能云', 'https://cloud.baidu.com', '🔵', '百度云计算平台', '百度云,云,AI', 5000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(62, 53, 'Cloudflare', 'https://www.cloudflare.com', '🟠', '全球CDN与安全服务', 'Cloudflare,CDN,海外', 8000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(63, 53, '七牛云', 'https://www.qiniu.com', '🟢', '对象存储与CDN', '七牛云,存储,CDN', 4000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 慕课学习
(64, 61, '中国大学MOOC', 'https://www.icourse163.org', '🔴', '国家精品在线课程', '慕课,大学,课程', 9000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(65, 61, '网易云课堂', 'https://study.163.com', '🔴', '实用技能学习平台', '云课堂,课程,学习', 8000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(66, 61, '慕课网', 'https://www.imooc.com', '🟢', 'IT技能学习平台', '慕课网,IT,编程', 10000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(67, 61, 'Coursera', 'https://www.coursera.org', '🔵', '全球在线课程平台', 'Coursera,课程,海外', 7000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(68, 61, '学堂在线', 'https://www.xuetangx.com', '🔵', '清华出品慕课平台', '学堂在线,课程,大学', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(69, 61, 'B站课堂', 'https://www.bilibili.com/v/cheese', '🔵', 'B站知识区课程', 'B站课堂,课程,学习', 5000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 资料文库
(70, 62, '百度文库', 'https://wenku.baidu.com', '🔵', '文档资料分享平台', '百度文库,文档,资料', 9000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(71, 62, '道客巴巴', 'https://www.doc88.com', '🔴', '在线文档分享平台', '道客巴巴,文档,资料', 4000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(72, 62, '原创力文档', 'https://max.book118.com', '🟠', '专业文档下载站', '原创力,文档,下载', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 综合电商
(73, 71, '淘宝', 'https://www.taobao.com', '🔶', '淘!我喜欢', '淘宝,购物,电商', 40000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(74, 71, '京东', 'https://www.jd.com', '🔴', '正品低价品质保障', '京东,购物,自营', 38000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(75, 71, '拼多多', 'https://www.pinduoduo.com', '🔴', '拼着买更便宜', '拼多多,团购,便宜', 32000, 90, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(76, 71, '天猫', 'https://www.tmall.com', '🔴', '品质好物聚集地', '天猫,购物,品牌', 28000, 88, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(77, 71, '苏宁易购', 'https://www.suning.com', '🔵', '家电3C综合电商', '苏宁,购物,家电', 9000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 海淘二手
(78, 72, '亚马逊', 'https://www.amazon.cn', '🔴', '全球综合电商平台', '亚马逊,海淘,电商', 12000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(79, 72, '闲鱼', 'https://www.goofish.com', '🔶', '阿里二手交易社区', '闲鱼,二手,转卖', 16000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(80, 72, '转转', 'https://www.zhuanzhuan.com', '🔵', '二手交易平台', '转转,二手,交易', 7000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(81, 72, 'eBay', 'https://www.ebay.com', '🔴', '全球在线拍卖与购物', 'eBay,海淘,海外', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 文档协作
(82, 81, '腾讯文档', 'https://docs.qq.com', '🔵', '多人实时在线文档', '腾讯文档,在线文档,协作', 14000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(83, 81, '石墨文档', 'https://shimo.im', '🟢', '轻盈的在线协作文档', '石墨文档,协作,文档', 6000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(84, 81, '飞书', 'https://www.feishu.cn', '🔵', '一站式办公协作平台', '飞书,办公,协作', 10000, 92, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(85, 81, '钉钉文档', 'https://www.dingtalk.com', '🔵', '阿里办公协作套件', '钉钉,办公,协作', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(86, 81, 'Notion', 'https://www.notion.so', '', '全能笔记与协作工具', 'Notion,笔记,海外', 8000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(87, 81, 'Google Docs', 'https://docs.google.com', '🔵', '谷歌在线文档套件', 'GoogleDocs,文档,海外', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 邮箱
(88, 82, 'QQ邮箱', 'https://mail.qq.com', '🔵', '腾讯免费邮箱', 'QQ邮箱,邮箱,邮件', 20000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(89, 82, '网易邮箱', 'https://mail.163.com', '🔴', '网易免费邮箱', '网易邮箱,邮箱,邮件', 12000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(90, 82, 'Outlook', 'https://outlook.live.com', '🔵', '微软邮箱服务', 'Outlook,邮箱,微软', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(91, 82, 'Gmail', 'https://mail.google.com', '🔴', '谷歌邮箱服务', 'Gmail,邮箱,谷歌', 11000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(92, 82, 'Foxmail', 'https://www.foxmail.com', '🔵', '腾讯邮箱客户端', 'Foxmail,邮箱,客户端', 3000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 云盘
(93, 83, '百度网盘', 'https://pan.baidu.com', '🔵', '国内最大云存储', '百度网盘,云盘,存储', 26000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(94, 83, '阿里云盘', 'https://www.aliyundrive.com', '🔴', '不限速个人云盘', '阿里云盘,云盘,存储', 14000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(95, 83, 'OneDrive', 'https://onedrive.live.com', '🔵', '微软云存储服务', 'OneDrive,云盘,微软', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(96, 83, '蓝奏云', 'https://www.lanzou.com', '🟢', '不限速文件分享', '蓝奏云,云盘,分享', 5000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(97, 83, '腾讯微云', 'https://www.weiyun.com', '🔵', '腾讯云存储服务', '微云,云盘,腾讯', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 会议办公
(98, 84, '腾讯会议', 'https://meeting.tencent.com', '🔵', '高清流畅视频会议', '腾讯会议,会议,视频', 14000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(99, 84, '钉钉', 'https://www.dingtalk.com', '🔵', '阿里企业办公平台', '钉钉,办公,企业', 12000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(100, 84, '飞书会议', 'https://www.feishu.cn', '🔵', '字节一站式办公', '飞书,会议,办公', 7000, 92, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(101, 84, 'Zoom', 'https://www.zoom.us', '🔵', '国际视频会议工具', 'Zoom,会议,海外', 8000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(102, 84, '企业微信', 'https://work.weixin.qq.com', '🔢', '腾讯企业通讯工具', '企业微信,办公,企业', 9000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 设计素材
(103, 91, '千图网', 'https://www.58pic.com', '🔴', '原创设计素材库', '千图网,素材,设计', 6000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(104, 91, '包图网', 'https://www.ibaotu.com', '🔶', '商业设计素材平台', '包图网,素材,设计', 4000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(105, 91, '我图网', 'https://www.ooopic.com', '🔵', '正版设计素材下载', '我图网,素材,设计', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(106, 91, 'Unsplash', 'https://unsplash.com', '', '免费高清摄影图库', 'Unsplash,图片,海外', 9000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(107, 91, 'Pexels', 'https://www.pexels.com', '🔵', '免费摄影视频素材', 'Pexels,图片,海外', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(108, 91, 'Pixabay', 'https://pixabay.com', '🔵', '免费正版图库与视频', 'Pixabay,图片,海外', 4000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 设计工具
(109, 92, 'Figma', 'https://www.figma.com', '🔴', '协作式UI设计工具', 'Figma,设计,UI', 10000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(110, 92, 'Canva', 'https://www.canva.cn', '🔵', '在线平面设计工具', 'Canva,设计,海报', 8000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(111, 92, '稿定设计', 'https://www.gaoding.com', '🔴', '电商新媒体设计工具', '稿定设计,设计,模板', 4000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(112, 92, '即时设计', 'https://js.design', '🔵', '国产协作式UI工具', '即时设计,UI,设计', 4000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(113, 92, '墨刀', 'https://modao.cc', '🔵', '在线原型设计工具', '墨刀,原型,设计', 3000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 生活服务
(114, 101, '快递100', 'https://www.kuaidi100.com', '🔵', '快递查询与寄件', '快递100,快递,查询', 9000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(115, 101, '12306', 'https://www.12306.cn', '🔴', '中国铁路购票官网', '12306,火车票,铁路', 18000, 95, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(116, 101, '高德地图', 'https://www.amap.com', '🔵', '高德导航与地图', '高德,地图,导航', 16000, 92, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(117, 101, '百度地图', 'https://map.baidu.com', '🔵', '百度地图与导航', '百度地图,地图,导航', 12000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(118, 101, '中国天气', 'https://www.weather.com.cn', '🌤️', '中央气象台天气', '天气,气象,预报', 8000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(119, 101, '美团', 'https://www.meituan.com', '🔶', '本地生活服务平台', '美团,外卖,生活', 20000, 88, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 在线工具
(120, 102, 'JSON在线解析', 'https://www.json.cn', '🔧', 'JSON格式化与校验', 'JSON,工具,格式化', 8000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(121, 102, '草料二维码', 'https://cli.im', '🔲', '二维码生成与解码', '草料,二维码,工具', 5000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(122, 102, 'ProcessOn', 'https://www.processon.com', '🔵', '在线流程图与思维导图', 'ProcessOn,流程图,思维导图', 5000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(123, 102, '站长工具', 'https://tool.chinaz.com', '🔵', 'SEO与建站查询', '站长工具,SEO,查询', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(124, 102, 'Regex101', 'https://regex101.com', '🔴', '正则表达式在线测试', 'Regex,正则,海外', 4000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 行情理财
(125, 111, '东方财富', 'https://www.eastmoney.com', '🔴', '财经金融资讯门户', '东方财富,财经,股票', 16000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(126, 111, '同花顺', 'https://www.10jqka.com.cn', '🔴', '股票行情交易软件', '同花顺,股票,行情', 9000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(127, 111, '雪球', 'https://xueqiu.com', '🔴', '投资者社区与行情', '雪球,股票,投资', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(128, 111, '天天基金', 'https://fund.eastmoney.com', '🔵', '基金净值与申购', '天天基金,基金,理财', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 支付银行
(129, 112, '支付宝', 'https://www.alipay.com', '🔵', '支付就用支付宝', '支付宝,支付,金融', 40000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(130, 112, '微信支付', 'https://pay.weixin.qq.com', '💚', '腾讯移动支付', '微信支付,支付,金融', 30000, 95, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(131, 112, '中国银联', 'https://www.unionpay.com', '🔴', '银行卡联合组织', '银联,银行,支付', 5000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(132, 112, '网银在线', 'https://www.chinabank.com.cn', '🔵', '京东旗下支付', '网银在线,支付,京东', 3000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 交通出行
(133, 121, '携程', 'https://www.ctrip.com', '🔵', '机票酒店预订平台', '携程,旅游,机票', 18000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(134, 121, '去哪儿', 'https://www.qunar.com', '🔶', '旅行预订搜索', '去哪儿,旅游,机票', 9000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(135, 121, '飞猪', 'https://www.fliggy.com', '🔴', '阿里旅行平台', '飞猪,旅游,机票', 8000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(136, 121, '12306', 'https://www.12306.cn', '🔴', '铁路购票官网', '12306,火车票,出行', 18000, 92, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(137, 121, '高德打车', 'https://www.amap.com', '🔵', '一键呼叫网约车', '高德打车,出行,网约车', 6000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 住宿预订
(138, 122, '美团酒店', 'https://hotel.meituan.com', '🔶', '本地酒店预订', '美团,酒店,住宿', 12000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(139, 122, 'Airbnb', 'https://www.airbnb.cn', '🔴', '全球民宿短租', 'Airbnb,民宿,海外', 6000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(140, 122, 'Booking', 'https://www.booking.com', '🔵', '全球酒店预订', 'Booking,酒店,海外', 7000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(141, 122, '途家', 'https://www.tujia.com', '🔵', '国内民宿预订', '途家,民宿,住宿', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 在线问诊
(142, 131, '丁香医生', 'https://dxy.com', '🔴', '专业健康科普与问诊', '丁香医生,健康,问诊', 8000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(143, 131, '好大夫在线', 'https://www.haodf.com', '🔵', '医患对接问诊平台', '好大夫,问诊,医生', 6000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(144, 131, '微医', 'https://www.guahao.com', '🔵', '互联网医疗服务', '微医,挂号,问诊', 4000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(145, 131, '平安健康', 'https://health.pingan.com', '🔴', '平安互联网医疗', '平安健康,问诊,医疗', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 健康科普
(146, 132, '丁香园', 'https://www.dxy.cn', '🔴', '医药健康专业社区', '丁香园,医学,科普', 5000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(147, 132, '腾讯健康', 'https://health.qq.com', '🔵', '腾讯健康科普服务', '腾讯健康,健康,科普', 4000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(148, 132, '39健康网', 'https://www.39.net', '🔵', '大众健康资讯门户', '39健康网,健康,科普', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 政务服务
(149, 141, '国家政务服务平台', 'https://gjzwfw.www.gov.cn', '🔴', '全国一体化政务门户', '国家政务,政务,服务', 6000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(150, 141, '粤省事', 'https://www.gdyxzc.gov.cn', '🔵', '广东政务服务小程序', '粤省事,政务,广东', 4000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(151, 141, '浙里办', 'https://www.zjzwfw.gov.cn', '🔵', '浙江政务服务门户', '浙里办,政务,浙江', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(152, 141, '国务院客户端', 'https://www.gov.cn', '🔴', '中央人民政府门户', '国务院,政务,政策', 3000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 生活缴费
(153, 142, '社保查询', 'http://si.12333.gov.cn', '🔵', '全国社保公共服务', '社保,查询,缴费', 4000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(154, 142, '水电网缴费', 'https://www.95598.cn', '', '国家电网与公共事业', '水电,缴费,电网', 3000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(155, 142, '个人所得税', 'https://etax.chinatax.gov.cn', '🔴', '自然人税务平台', '个税,税务,申报', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL);
(1, 1, '微博', 'https://www.weibo.com', '/static/addons/haonav/img/sina.png', '随时随地发现新鲜事', '微博,社交,微博客', 15200, 100, 1, 1, 1, NULL, NULL, NULL, 1779023098, NULL),
(2, 1, '知乎', 'https://www.zhihu.com', '/static/addons/haonav/img/zhihu.png', '有问题,就会有答案', '知乎,问答,知识', 12800, 90, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(3, 1, '豆瓣', 'https://www.douban.com', '/static/addons/haonav/img/douban.png', '生活需要仪式感', '豆瓣,书影音,社区', 9600, 80, 0, 1, 1, NULL, NULL, NULL, NULL, NULL),
(4, 2, 'Bilibili', 'https://www.bilibili.com', '/static/addons/haonav/img/bilibili.png', '哔哩哔哩 (゜-゜)つロ 干杯~', 'B站,视频,弹幕', 25600, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(5, 2, '优酷', 'https://www.youku.com', '/static/addons/haonav/img/youku.png', '这世界很酷', '优酷,视频,土豆', 18400, 90, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(6, 2, '爱奇艺', 'https://www.iqiyi.com', '/static/addons/haonav/img/iqiyi.png', '悦享品质', '爱奇艺,视频,会员', 20100, 85, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(7, 3, '淘宝', 'https://www.taobao.com', '/static/addons/haonav/img/taobao.png', '淘!我喜欢', '淘宝,购物,电商', 32000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(8, 3, '京东', 'https://www.jd.com', '/static/addons/haonav/img/jingdong.png', '正品低价、品质保障', '京东,购物,自营', 28500, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(9, 3, '拼多多', 'https://www.pinduoduo.com', '/static/addons/haonav/img/pinduoduo.png', '拼着买,更便宜', '拼多多,团购,便宜', 24800, 90, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(10, 8, '百度', 'https://www.baidu.com', '/static/addons/haonav/img/baidu.png', '全球最大的中文搜索引擎', '百度,搜索,引擎', 45000, 100, 1, 1, 1, NULL, NULL, NULL, 1779046757, NULL),
(11, 12, '支付宝', 'https://www.alipay.com', '/static/addons/haonav/img/alipay.png', '支付就用支付宝', '支付宝,支付,金融', 38000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(12, 5, 'Coursera', 'https://www.coursera.org', '/static/addons/haonav/img/coursera.png', '在线课程学习平台', 'Coursera,课程,学习', 8200, 80, 0, 1, 1, NULL, NULL, NULL, NULL, NULL),
(13, 9, 'GitHub', 'https://github.com', '/static/addons/haonav/img/github.png', '全球最大的代码托管平台', 'GitHub,代码,开源', 35000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(14, 8, '360', 'https://www.360.com/', '/static/addons/haonav/img/360safe.png', '360安全中心,提供杀毒、安全防护、浏览器与导航等服务', '360,安全,杀毒,360安全卫士', 3600, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(15, 8, 'google', 'https://www.google.com', '/static/addons/haonav/img/google.png', NULL, '', 0, 0, 0, 0, 1, NULL, NULL, 1779017271, 1779017373, NULL),
(16, 2, '腾讯视频', 'https://v.qq.com/', '/static/addons/haonav/img/qqvideo.png', '腾讯视频官方网站,提供最新热门电视剧、电影、综艺、动漫、纪录片等高清正版视频在线观看。海量独家内容持续更新,涵盖国产剧、美剧、韩剧、院线大片、热门综艺,支持超清流畅播放,尽在腾讯视频,当前热播《主角》《五哈6》《仙逆》,支持高清在线观看。', '腾讯视频,视频,在线观看,高清视频,电视剧,电影,综艺,动漫,纪录片,热门视频,正版视频,流媒体,追剧,免费视频', 0, 0, 0, 0, 1, NULL, NULL, 1779017893, 1779022988, NULL),
(17, 2, 'QQ音乐', 'https://y.qq.com/', '/static/addons/haonav/img/qqyinyue.png', 'QQ音乐是腾讯公司推出的一款网络音乐服务产品,海量音乐在线试听、新歌热歌在线首发、歌词翻译、手机铃声下载、高品质无损音乐试听、海量无损曲库、正版音乐下载、空间背景音乐设置、MV观看等,是互联网音乐播放和下载的优选', '音乐,QQ音乐,在线听歌,音乐下载,音乐播放器,音乐网站,MV,巅峰榜,音乐排行榜,翻译歌曲,热门歌曲,经典老歌,无损音乐,无损曲库', 0, 0, 1, 0, 1, NULL, NULL, 1779019186, 1779124372, NULL),
(18, 2, '酷我音乐', 'http://www.kuwo.cn/', '/static/addons/haonav/img/kuwo.png', '酷我音乐-无损音质正版在线试听网站,酷我音乐为您提供高品质音乐,无损音乐下载,拥有各类音乐榜单,快捷的新歌速递,完善的主题电台,个性化的歌曲推荐,高品质音乐在线听,好音质,用酷我。陪着我,不要停', '音乐,酷我音乐,高品质音乐,无损音乐,音乐在线听,MV,音乐播放器,音乐网站,在线听歌', 0, 0, 0, 0, 1, NULL, NULL, 1779023368, 1779024317, NULL),
(19, 2, '千千静听', 'https://music.taihe.com/', '/static/addons/haonav/img/qianqianjingting.png', '千千音乐致力于提供更专业、更懂你的「场景音乐」,打造一款个性化、智能化的音乐伴侣产品,让你感受音乐本身的魅力。这里有来自不同国家的数百名音乐设计师,为你提供更好的音乐服务。', '千千音乐', 0, 0, 0, 0, 1, NULL, NULL, 1779023429, 1779024330, NULL),
(20, 2, '网易云', 'https://music.163.com/', '/static/addons/haonav/img/wangyiyun.png', '网易云音乐是一款专注于发现与分享的音乐产品,依托专业音乐人、DJ、好友推荐及社交功能,为用户打造全新的音乐生活。', '网易云音乐,网易云,网易云音乐网页版,网易云音乐官网,网易音乐,网易云网页版,网易云音乐网页入口,网易云官网,wangyiyun,wangyiyunyinyue', 0, 0, 0, 0, 1, NULL, NULL, 1779023461, 1779024339, NULL),
(21, 2, '九天音乐', 'http://www.9sky.com/', '/static/addons/haonav/img/qqyinyue.png', '九天音乐网是目前国内最悠久的音乐服务品牌,为用户提供高品质音乐免费试听、正版音乐下载、MV观看、唱片购买。平台汇聚了众多优质音乐人和歌手,拥有流行、民谣、电子、摇滚等十多个流派的原创音乐作品。', '音乐,音乐下载,九天音乐,九天音乐网,免费,下载,播放,歌曲试听,原创音乐,独立音乐,音乐人,高品质音乐,民谣歌曲,最新专辑,MV,9sky,唱片购买', 0, 0, 0, 0, 1, NULL, NULL, 1779023511, 1779024346, NULL),
(22, 2, '抖音视频', 'https://www.douyin.com/', '/static/addons/haonav/img/douyin.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779023751, 1779024358, NULL),
(23, 2, '新浪视频', 'http://video.sina.com.cn/', '/static/addons/haonav/img/sina.png', '新浪视频是新浪旗下的专业视频网站,提供最新、最热的新闻、体育、娱乐、话题、搞笑视频,直播热门体育赛事、明星访谈,汇集海量的电影、电视剧、综艺节目、公开课。', '新浪视频, 新浪视频直播, 高清视频在线观看, 新浪视频', 0, 0, 0, 0, 1, NULL, NULL, 1779023815, 1779023815, NULL),
(24, 2, '芒果视频', 'http://www.mgtv.com/', '/static/addons/haonav/img/douyin.png', '芒果TV-大家都在看的在线视频网站-热门综艺最新电影电视剧在线观看', '', 0, 0, 0, 0, 1, NULL, NULL, 1779023869, 1779023869, NULL),
(25, 2, 'CCTV', 'https://tv.cctv.com/', '/static/addons/haonav/img/douyin.png', 'CCTV节目官网是中央电视台电视节目官方呈现平台,提供央视24个频道的直播、点播、节目预告等服务,集纳央视所有栏目、电影、电视剧、纪录片、动画片、体育赛事、特别节目资源,提供节目搜索、检索、订阅、点赞、分享、收藏等多种功能,用户覆盖210多个国家和地区,是网民了解央视、收看央视、参与央视的最佳渠道。', 'CCTV官网 央视网 中央电视台 央视官网 央视节目 央视直播 央视节目单 央视主持人', 0, 0, 0, 0, 1, NULL, NULL, 1779023893, 1779023893, NULL),
(26, 2, '搜狐视频', 'https://tv.sohu.com/', '/static/addons/haonav/img/souhu.png', '搜狐视频是搜狐旗下专业的综合视频网站,提供正版高清电影、电视剧、综艺、纪录片、动漫等。网罗最新最热新闻、娱乐资讯,同时提供免费视频空间和视频分享服务。', '搜狐视频,媒体平台,在线观看,正版高清视频,自媒体,视频排行榜,卫视直播,热播电视剧,电影,动漫,综艺,明星娱乐,体育赛事,社会新闻,搞笑视频,生活视频,游戏视频,音乐,MV', 0, 0, 0, 0, 1, NULL, NULL, 1779023914, 1779023914, NULL),
(27, 2, '斗鱼直播', 'https://www.douyu.com/', '/static/addons/haonav/img/douyin.png', '斗鱼 - 看见每种热爱 提供高清、快捷、流畅的视频直播和游戏赛事直播服务,包含英雄联盟lol直播、穿越火线cf直播、dota2直播、美女直播等各类热门游戏赛事直播和各种名家大神游戏直播,内容丰富,推送及时,带给你不一样的视听体验,一切尽在斗鱼 - 每个人的直播平台', '斗鱼,dy,douyu,tv,直播,直播平台,游戏,电竞,比赛,LOL,王者,LCK,LPL,KPL,DOTA,DOTA2,联盟,英雄联盟,DNF,炉石,炉石传说,CF,绝地,绝地求生,和平,和平精英,赛事,美女,户外,二次元,2CH,视频,单机,热游,原神,魔兽,魔兽世界,暗黑,暗黑破坏神,三角洲,棋牌', 0, 0, 0, 0, 1, NULL, NULL, 1779023940, 1779023940, NULL),
(29, 10, '番茄小说', 'https://fanqienovel.com/', '/static/addons/haonav/img/fanqienovel.com.png', '番茄小说是抖音旗下免费阅读产品,拥有海量正版小说资源,支持听书畅读,提供书荒广场、优质书圈社区,推广优秀原创网络小说文学,全方位满足读者需求', '番茄小说网,番茄阅读,fanqie,番茄,头条小说,番茄小说,红果小说,小说网,玄幻小说,都市小说,历史小说,网络小说,言情小说,古代言情,现代言情,原创网络文学,首发小说,免费小说,热门小说,精品小说,好看小说,小说连载,小说排行榜,小说在线阅读,小说下载', 0, 0, 0, 0, 1, NULL, NULL, 1779026111, 1779084541, NULL),
(30, 10, '微信阅读', 'https://weread.qq.com/', '/static/addons/haonav/img/weread.qq.com.png', '微信读书提供海量正版书籍、小说、漫画、公众号、听书,多设备同步实现跨屏阅读', '微信读书,微信读书电脑版,小说,小说排行榜,言情小说,玄幻小说,免费小说', 0, 0, 0, 0, 1, NULL, NULL, 1779026160, 1779084522, NULL),
(31, 10, '小说阅读网', 'https://www.readnovel.com/', '/static/addons/haonav/img/www.readnovel.com.png', '小说阅读网是国内知名原创网络文学门户,拥有海量好看的免费全本小说,提供原创小说和畅销出版书籍的在线阅读和下载,每日更新言情、校园、都市、耽美、穿越、官场、重生、玄幻、女尊、仙侠等小说连载,看小说就来小说阅读网!', '小说, 小说网, 小说网站, 免费小说, 小说阅读, 全本小说, 完本小说, 小说下载', 0, 0, 0, 0, 1, NULL, NULL, 1779026180, 1779084506, NULL),
(33, 10, 'QQ阅读', 'https://read.qq.com/', '/static/addons/haonav/img/read.qq.com.png', 'QQ阅读女生网提供最热最好看的原创女生全本小说在线阅读,包括古言、现言、青春、玄幻、游戏、科幻、悬疑等好看的女生小说,想看更多好看的女生小说,尽在QQ阅读女生网!', '女生小说,女生小说推荐,好看的女生小说,好看的女生小说推荐,QQ阅读女生网', 0, 0, 0, 0, 1, NULL, NULL, 1779026201, 1779083562, NULL),
(34, 10, '国家图书馆', 'https://www.nlc.cn/', '/static/addons/haonav/img/www.nlc.cn.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779026240, 1779084478, NULL),
(35, 10, '红袖添香', 'http://www.hongxiu.com/', '/static/addons/haonav/img/www.hongxiu.com.png', '又名"红袖添香",国内知名网络文学原创小说门户', '免费小说, 言情小说, 小说排行榜, 小说阅读网, 全本小说, 完本小说, 小说下载, 红柚读书', 0, 0, 0, 0, 1, NULL, NULL, 1779026258, 1779084470, NULL),
(36, 10, '全历史', 'https://www.allhistory.com/', '/static/addons/haonav/img/allhistory.com.png', '全历史(Allhistory)以AI知识图谱为核心引擎,通过高度时空化、关联化数据的方式构造及展现数字人文内容,尤其是历史知识', '', 0, 0, 0, 0, 1, NULL, NULL, 1779026284, 1779085437, NULL),
(37, 10, '起点中文', 'http://www.qidian.com/', '/static/addons/haonav/img/www.qidian.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779026321, 1779084445, NULL),
(38, 10, '创世中文网', 'https://chuangshi.qq.com/', '/static/addons/haonav/img/chuangshi.qq.com.png', '创世中文网网络各界小说高手,每日更新小说连载,小说排行榜更是提供全网最受欢迎的小说下载', '小说,小说排行榜,免费小说下载,好看的小说,创世,创世中文网', 0, 0, 0, 0, 1, NULL, NULL, 1779026345, 1779084435, NULL),
(39, 10, '七猫中文网', 'https://www.qimao.com/', '/static/addons/haonav/img/www.qimao.com.png', '七猫中文网(免费小说大全)与国内各大小说站合作,为小说爱好者提供更多更全的各类免费小说上百万本。七猫免费小说包括言情小说,穿越小说,玄幻小说,校园小说,都市小说,武侠小说,网游小说等等。七猫中文网只有想不到,没有找不到!', '七猫,七猫中文网,七猫免费小说,阅读王,小说,免费小说,小说全本,小说全本下载,小说大全,好看的小说,全本免费小说,小说排行榜', 0, 0, 0, 0, 1, NULL, NULL, 1779026393, 1779084397, NULL),
(40, 10, '纵横中文网', 'http://www.zongheng.com/', '/static/addons/haonav/img/www.zongheng.com.png', '纵横中文网,最新热门小说网站,提供玄幻奇幻小说、武侠仙侠小说、原创小说、网游小说、都市小说、言情小说、青春小说、科幻小说等首发小说,最新章节在线阅读。大神作品齐聚纵横,最新章节每日更新。', '小说,小说网,小说网站,热门小说,小说在线阅读,纵横中文网,纵横小说网', 0, 0, 0, 0, 1, NULL, NULL, 1779026424, 1779084366, NULL),
(41, 10, '晋江文学', 'http://www.jjwxc.net/', '/static/addons/haonav/img/www.jjwxc.net.png', '晋江文学城(www.jjwxc.net)创立于2003年8月,是具备相当规模女性网络文学原创基地', '小说、言情小说、纯爱小说、百合小说、无CP+小说,原创小说、衍生小说、免费小说、原创网络文学', 0, 0, 0, 0, 1, NULL, NULL, 1779026446, 1779084352, NULL),
(42, 10, '喜马拉雅', 'https://www.ximalaya.com/', '/static/addons/haonav/img/www.ximalaya.com.png', '国内专业音频分享平台,随时随地,听我想听!4亿用户选择的在线音频平台', '有声小说,喜马拉雅,喜马拉雅听书,喜马拉雅电台,喜马拉雅好声音,网络电台,个人电台,音频,有声书,相声,儿童,音乐,情感,郭德纲,罗辑思维,糗事百科', 0, 0, 0, 0, 1, NULL, NULL, 1779026507, 1779084342, NULL),
(43, 10, '懒人听书', 'https://www.lrts.me/', '/static/addons/haonav/img/www.lrts.me.png', '懒人听书是4.8亿用户选择的综合性有声阅读交流平台', '懒人听书,懒人畅听,听书,有声阅读,有声小说,播客,主播,网络电台,收藏,赞,演播,原著,有声书籍,下载,高清,数字音频,社区', 0, 0, 0, 0, 1, NULL, NULL, 1779026529, 1779084310, NULL),
(44, 10, '腾讯动漫', 'https://ac.qq.com/', '/static/addons/haonav/img/ac.qq.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779026552, 1779084275, NULL),
(45, 8, '搜狗', 'https://www.sogou.com/', '/static/addons/haonav/img/sougou.png', '搜狗搜索是全球第三代互动式搜索引擎,支持微信公众号和文章搜索、知乎搜索、英文搜索及翻译等,通过自主研发的人工智能算法为用户提供专业、精准、便捷的搜索服务。', '搜狗搜索,网页搜索,微信搜索,视频搜索,图片搜索,音乐搜索,新闻搜索,软件搜索,问答搜索,百科搜索,购物搜索', 0, 0, 0, 0, 1, NULL, NULL, 1779046804, 1779046804, NULL),
(46, 8, 'Bing', 'https://www.bing.com/', '/static/addons/haonav/img/Bing.png', '使用 Microsoft 必应进行搜索,并利用 AI 的强大功能查找信息、浏览网页、图像、视频、地图等。为永远充满好奇心的人提供的智能搜索引擎。', '', 0, 0, 0, 0, 1, NULL, NULL, 1779046835, 1779046835, NULL),
(47, 8, '好搜', 'https://www.so.com/', '/static/addons/haonav/img/haosou.png', '360搜索是安全、精准、可信赖的新一代搜索引擎,依托于360母品牌的安全优势,全面拦截各类钓鱼欺诈等恶意网站,提供更放心的搜索服务。 360搜索 so靠谱。', '360搜索,360搜索,网页搜索,视频搜索,图片搜索,音乐搜索,新闻搜索,软件搜索,学术搜索', 0, 0, 0, 0, 1, NULL, NULL, 1779046873, 1779046873, NULL),
(48, 8, '腾讯', 'https://www.qq.com/', '/static/addons/haonav/img/tencent.png', '腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚等多个频道,充分满足用户对不同类型资讯的需求。同时专注不同领域内容,打造精品栏目,并顺应技术发展趋势,推出网络直播等创新形式,改变了用户获取资讯的方式和习惯。', '', 0, 0, 0, 0, 1, NULL, NULL, 1779046902, 1779046902, NULL),
(49, 8, '新浪', 'https://www.sina.com.cn/', '/static/addons/haonav/img/sina.png', '新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。', '新浪,新浪网,SINA,sina,sina.com.cn,新浪首页,门户,资讯', 0, 0, 0, 0, 1, NULL, NULL, 1779046976, 1779046976, NULL),
(50, 8, '网易', 'https://www.163.com/', '/static/addons/haonav/img/wangyi.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779047001, 1779047001, NULL),
(51, 8, '搜狐', 'https://www.sohu.com/', '/static/addons/haonav/img/souhu.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779047017, 1779047017, NULL),
(52, 8, '凤凰', 'http://www.ifeng.com/', '/static/addons/haonav/img/fenghuang.png', '凤凰网是中国领先的综合门户网站,提供含文图音视频的全方位综合新闻资讯、深度访谈、观点评论、财经产品、互动应用、分享社区等服务,同时与凤凰无线、凤凰宽频形成三屏联动,为全球主流华人提供互联网、无线通信、电视网三网融合无缝衔接的新媒体优质体验。', '凤凰,凤凰网,凤凰新媒体,凤凰卫视,凤凰卫视中文台,资讯台,电影台,欧洲台,美洲台,凤凰周刊,phoenix,phoenixtv', 0, 0, 0, 0, 1, NULL, NULL, 1779047033, 1779047033, NULL),
(53, 11, '通义千问', 'https://www.qianwen.com/', '/static/addons/haonav/img/qianwen.png', '千问是阿里官方AI助手,提供最强Qwen大模型体验的第一入口,助力你的工作、学习、生活', '千问, Qwen, AI助手, 智能对话, AI办公, 文档处理, 编程助手, 多模态AI', 0, 0, 0, 0, 1, NULL, NULL, 1779047204, 1779051729, NULL),
(54, 11, '讯飞星火', 'https://xinghuo.xfyun.cn/', '/static/addons/haonav/img/xinghuo.png', '讯飞星火大模型,是由科大讯飞推出的新一代认知智能大模型,拥有跨领域的知识和语言理解能力,能够基于自然对话方式理解与执行任务,提供语言理解、知识问答、逻辑推理、数学题解答、代码理解与编写等多种能力', '讯飞星火,星火大模型,讯飞大模型,科大讯飞大语言模型,大语言模型,自然语言处理,人工智能大模型,认知智能大模型,AI聊天机器人,AI创作,知识增强大模型,大语言模型API,国内大模型公司', 0, 0, 0, 0, 1, NULL, NULL, 1779047225, 1779051752, NULL),
(55, 11, '腾讯元宝', 'https://yuanbao.tencent.com/', '/static/addons/haonav/img/yuanbao.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779047278, 1779051769, NULL),
(56, 11, '文心', 'https://chat.baidu.com/', '/static/addons/haonav/img/douyin.png', '百度文心助手,一站式解决复杂问题,激发PC端超级生产力!独有「灵感探索」功能深入剖析问题核心,智能文字创作、图片创作、AI阅读、智能体海量应用启迪无限创意,开启高效智能学习办公新篇章!', '百度文心助手,文心大模型,AI搜索,智能搜索,智能创作,AI助手,AI图片生成,AI图片理解,AI修图,AI阅读,灵感探索', 0, 0, 0, 0, 1, NULL, NULL, 1779047321, 1779047321, NULL),
(57, 11, '既梦AI', 'https://jimeng.jianying.com/ai-tool/home', '/static/addons/haonav/img/jimengai.png', '即梦AI是一个AI创作平台,可激发艺术创意、提升绘画和视频创作体验', '即梦AI,即梦,即梦官方,即梦官网,文生图, AI作画, AI绘画, AI创作图片, AIGC, 一语成画, AI艺术和创意辅助平台, 文生视频, AI生成, 图生视频, 智能创作, 图文生视频', 0, 0, 0, 0, 1, NULL, NULL, 1779047394, 1779051855, NULL),
(58, 11, '智普AI', 'https://open.bigmodel.cn/', '/static/addons/haonav/img/zhipuaiai.png', '智谱大模型开放平台-新一代国产自主通用AI大模型开放平台,是国内大模型排名前列的大模型网站,研发了多款LLM模型,多模态视觉模型产品,致力于将AI产品技术与行业场景双轮驱动的中国先进的认知智能技术和千行百业应用相结合,构建更高精度、高效率、通用化的AI开发新模式和企业级解决方案,实现智谱大模型的产业化,将AI的好处带给每个人', '国内大模型,大模型网站,LLM,视觉大模型,大模型平台,多模态,智谱开放平台', 0, 0, 0, 0, 1, NULL, NULL, 1779047468, 1779051878, NULL),
(59, 11, 'deepseek', 'https://www.deepseek.com/', '/static/addons/haonav/img/deepseek.png', '深度求索(DeepSeek),成立于2023年,专注于研究世界领先的通用人工智能底层模型与技术,挑战人工智能前沿性难题', '深度求索, AGI, 人工智能底层模型, 开源模型, LLM, DeepSeek, DeepSeek Coder, DeepSeek Chat, DeepSeek Platform', 0, 0, 0, 0, 1, NULL, NULL, 1779047490, 1779052027, NULL),
(60, 11, '天工', 'https://www.tiangong.cn/', '/static/addons/haonav/img/douyin.png', '天工Skywork是一款具备超强DeepResearch能力的全新AI Office智能体,通过3个专家agent和1个通用agent,让AI深度研究,一键生成AI文档、AI PPT、AI表格,高效应对各类办公、学习场景;也支持网页html、图像、视频、有声书、绘本等多种形式的创意内容创作,激发无限灵感。 天工Skywork融合先进的多模态理解与深度检索分析技术,一问即得科研级、专业级、咨询级的高质量结果,帮助你摆脱繁琐事务,显著提升效率。 无论你是职场白领、科研人员、大学生、研究生,还是自媒体KOL,天工Skywork都将是你值得信赖的智能伙伴,助你专注思考、释放创造力。', '天工,Skywork,智能体,Agent,AI,办公,Office,微软,Microsoft,WPS,Word,Excel,PPT,文档,幻灯片,演示文稿,网页,html,研究报告,deep research,AI视频,AI音乐,AI写歌,AI绘本,MCP,A2A', 0, 0, 0, 0, 1, NULL, NULL, 1779047507, 1779047507, NULL),
(61, 11, 'Ima', 'https://ima.qq.com/', '/static/addons/haonav/img/ima.qq.com.png', 'ima.copilot(简称ima)是一款以知识库为核心的AI工作台产品,已接入腾讯混元大模型和DeepSeek R1模型满血版', 'ima,ima官网,ima下载,ima.copilot,ima.copilot官网,ima.copilot 官网,ima copilot官网,ima copilot 官网,ima.copilot下载,腾讯AI,AI工作台,AI问答,AI写作,AIGC,AI,DeepSeek R1满血版,deepseek', 0, 0, 0, 0, 1, NULL, NULL, 1779047534, 1779104568, NULL),
(62, 11, '讯飞智作', 'https://peiyin.xunfei.cn/', '/static/addons/haonav/img/zhizuo.png', '讯飞智作是科大讯飞旗下明星配音产品品牌,提供合成配音软件、真人配音、童声配音、广告宣传片、短视频配音、AI虚拟主播、虚拟数字人等一站式配音服务', '讯飞智作,讯飞配音,配音网站,广告配音,语音合成,文字转语音,在线配音,宣传片配音,AI虚拟人', 0, 0, 0, 0, 1, NULL, NULL, 1779047576, 1779052084, NULL),
(63, 11, 'notion', 'https://www.notion.so/product/ai', '/static/addons/haonav/img/notion.png', 'One tool that does it all. Search, generate, analyze, and chat—right inside Notion.', '', 0, 0, 0, 0, 1, NULL, NULL, 1779047595, 1779052112, NULL),
(64, 9, 'oschina', 'https://www.oschina.net/', '/static/addons/haonav/img/oschina.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779047779, 1779047779, NULL),
(65, 9, 'gitee', 'https://gitee.com/', '/static/addons/haonav/img/gitee.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779047839, 1779047839, NULL),
(66, 9, 'stackoverflow', 'https://stackoverflow.com/', '/static/addons/haonav/img/stackoverflow.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779047968, 1779047968, NULL),
(67, 9, 'segmentfault', 'https://segmentfault.com/', '/static/addons/haonav/img/SegmentFault.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779047992, 1779047992, NULL),
(68, 9, 'v2ex', 'https://www.v2ex.com/', '/static/addons/haonav/img/v2ex.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779048047, 1779048047, NULL),
(69, 9, 'CSDN', 'https://www.csdn.net/', '/static/addons/haonav/img/csdn.png', 'CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、精品问答、职业培训、技术论坛、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区.', 'CSDN博客,CSDN学院,CSDN论坛,CSDN直播', 0, 0, 0, 0, 1, NULL, NULL, 1779048071, 1779048071, NULL),
(70, 9, '掘金', 'https://juejin.cn/', '/static/addons/haonav/img/juejin.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779048114, 1779048114, NULL),
(71, 9, '博客园', 'https://www.cnblogs.com/', '/static/addons/haonav/img/cnblogs.png', '博客园是一个面向开发者的知识分享社区。自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益。博客园的使命是帮助开发者用代码改变世界。', '开发者,程序员,博客园,程序猿,程序媛,极客,码农,编程,代码,软件开发,开源,IT网站,技术社区,Developer,Programmer,Coder,Geek,Coding,Code', 0, 0, 0, 0, 1, NULL, NULL, 1779048154, 1779048154, NULL),
(72, 9, '知乎', 'https://www.zhihu.com/', '/static/addons/haonav/img/zhihu.png', '知乎,中文互联网高质量的问答社区和创作者聚集的原创内容平台,于 2011 年 1 月正式上线,以「让人们更好的分享知识、经验和见解,找到自己的解答」为品牌使命。知乎凭借认真、专业、友善的社区氛围、独特的产品机制以及结构化和易获得的优质内容,聚集了中文互联网科技、商业、影视、时尚、文化等领域最具创造力的人群,已成为综合性、全品类、在诸多领域具有关键影响力的知识分享社区和创作者聚集的原创内容平台,建立起了以社区驱动的内容变现商业模式。', '', 0, 0, 0, 0, 1, NULL, NULL, 1779048176, 1779048176, NULL),
(73, 9, '科普中国', 'https://www.kepuchina.cn/', '/static/addons/haonav/img/kepuchina.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779048198, 1779048198, NULL),
(74, 9, '果壳', 'https://www.guokr.com/', '/static/addons/haonav/img/guokr.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779048221, 1779048221, NULL),
(75, 9, '猪八戒', 'https://www.zbj.com/', '/static/addons/haonav/img/zbj.com.png', '找品质企业服务,就上猪八戒网,提供品牌设计、营销策划、网站建设、知识产权、工商财税、数字资产交易等800+种品质服务;18年专业企业服务经验,300+线下服务网络,企业服务放心购,明码实价,不成功退款。', '品牌设计,营销策划,网站建设,知识产权,工商财税,数字资产交易,项目申报,企业服务', 0, 0, 0, 0, 1, NULL, NULL, 1779048245, 1779048245, NULL),
(76, 9, 'w3school', 'https://www.w3school.com.cn/', '/static/addons/haonav/img/w3school.com.cn.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779048301, 1779048301, NULL),
(77, 12, '东方财富', 'https://www.eastmoney.com/', '/static/addons/haonav/img/eastmoney.png', '东方财富网,专业的互联网财经媒体,提供7*24小时财经资讯及全球金融市场报价,汇聚全方位的综合财经资讯和金融市场资讯,覆盖股票、财经、证券、金融、美股、港股、行情、基金、债券、期货、外汇、科创板、保险、信托、黄金、理财、商业、银行、博客、股吧、财迷、论坛等财经综合信息', '股票,财经,证券,金融,港股,行情,基金,债券,期货,外汇,科创板,保险,银行,博客,股吧,财迷,论坛,数据,stock,quote,news,fund,bank,blog,data,bbs', 0, 0, 0, 0, 1, NULL, NULL, 1779049172, 1779049172, NULL),
(78, 12, '中国证券', 'https://www.cnstock.com/', '/static/addons/haonav/img/cnstock.com.png', '上海证券报,中国证券网,新华社主管主办,证监会法定信息披露平台,以权威、专业、价值为宗旨的全媒体财经机构,以开放、分享、共赢为目标的综合性资本市场服务平台', '', 0, 0, 0, 0, 1, NULL, NULL, 1779049191, 1779049191, NULL),
(79, 12, '中国财经', 'https://www.cfi.cn/', '/static/addons/haonav/img/cfi.cn.png', '中国财经信息网络传媒,CFi.CN,24小时提供全面及时的财经新闻、股票、新股发行、数据、统计图表,财经分析软件等', 'CFi.CN,中国财经信息网,股票, 新股发行,基金, 债券, 理财, 宏观经济, 期货, 外汇, 行业产经, 资本, 银行, 保险, 信托, 上市公司, 股市行情, 外汇行情, 期货行情, 基金净值, 股票分析软件', 0, 0, 0, 0, 1, NULL, NULL, 1779049210, 1779049210, NULL),
(80, 12, '中金在线', 'https://cnfol.com/', '/static/addons/haonav/img/cnfol.com.png', '中金在线-中国人的金融门户网站,覆盖财经、股票、 证券、金融、港股、行情、基金、债券、期货、外汇、保险、银行、博客、股票分析软件等多种面向个人和企业的服务。', '财经,股票,证券,金融,港股,行情,基金,债券,期货,外汇,保险,银行,博客,股票分析软件', 0, 0, 0, 0, 1, NULL, NULL, 1779049229, 1779049229, NULL),
(81, 12, '中国银行', 'https://www.boc.cn/', '/static/addons/haonav/img/boc.cn.png', '中国银行是中国国际化和多元化程度最高的银行,在中国内地及六十多个国家和地区为客户提供全面的金融服务。主要经营商业银行业务:公司金融、个人金融和金融市场业务,并通过附属机构开展投资银行、保险、直接投资、投资管理、基金管理和飞机租赁业务。', '中国银行,中行,银行,金融,金融市场,外汇,理财,证券,基金,保险,投资,电子银行,网上银行,网银,手机银行,公司金融,跨境撮合,个人金融,出国金融,私人银行,银行卡,信用卡,飞机租赁,村镇银行,普惠金融,绿色金融,双奥银行', 0, 0, 0, 0, 1, NULL, NULL, 1779049281, 1779049281, NULL),
(82, 12, '工商银行', 'http://www.icbc.com.cn/', '/static/addons/haonav/img/icbc.com.cn.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779049325, 1779049325, NULL),
(83, 12, '农业银行', 'http://www.95599.cn/', '/static/addons/haonav/img/95599.cn.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779049359, 1779049359, NULL),
(84, 12, '建设银行', 'http://www.ccb.com/', '/static/addons/haonav/img/ccb.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779049378, 1779049378, NULL),
(85, 12, '同花顺', 'http://www.10jqka.com.cn/', '/static/addons/haonav/img/10jqka.com.cn.png', '核新同花顺网络信息股份有限公司(同花顺)成立于1995年,是一家专业的互联网金融数据服务商,为您全方位提供财经资讯及全球金融市场行情,覆盖股票、基金、期货、外汇、债券、银行、黄金等多种面向个人和企业的服务', '金融,金融网,金融服务,金融网站,金融信息,金融资讯,金融信息服务,投资,金融投资,投资理财,股票', 0, 0, 0, 0, 1, NULL, NULL, 1779049418, 1779049431, NULL),
(86, 12, '新浪财经', 'https://finance.sina.com.cn/', '/static/addons/haonav/img/sina.com.cn.png', '新浪财经是国内领先的金融信息服务提供平台,以"打破信息不对称"为使命,专注于交易、资讯、数据、服务四大领域。为用户提供7×24小时全球股票、基金、期货、外汇、债券等实时行情与权威资讯。提供全面的金融数据、智能分析工具、资金流向监测、模拟交易及ESG资讯和评级服务。', '新浪财经,金融信息服务,股票行情,A股行情,港股行情,美股行情,基金动态,期货行情,外汇牌价,债券行情,全球股市指数,财经新闻,投资理财资讯,ESG评级,金融数据分析,投资选股工具', 0, 0, 0, 0, 1, NULL, NULL, 1779049477, 1779049477, NULL),
(87, 12, '南方财富', 'http://southmoney.com/', '/static/addons/haonav/img/southmoney.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779049500, 1779049500, NULL),
(88, 12, '证券之星', 'https://www.stockstar.com/', '/static/addons/haonav/img/stockstar.com.png', '证券之星始创于1996年,是中国最早的证券领域门户网站之一,是国内领先的金融信息服务平台。为投资者提供及时、全面、客观、专业的财经资讯和金融信息服务,包括股票、基金、期货、银行、保险、港股、美股、黄金、地产、债券、理财、商业、ESG等。', '股票,投资,交易,行情,上市公司,大盘,上证指数,基金,直播,股评,黄金,期货,港股,美股,财经日历,银行,证券,汽车,白酒,路演,价值投资', 0, 0, 0, 0, 1, NULL, NULL, 1779049525, 1779049525, NULL),
(89, 12, '中国经济', 'http://www.ce.cn/', '/static/addons/haonav/img/ce.cn.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779049547, 1779049547, NULL),
(90, 12, '36氪', 'https://36kr.com/', '/static/addons/haonav/img/36kr.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779049586, 1779049586, NULL),
(91, 1, '世纪佳缘', 'https://www.jiayuan.com/', '/static/addons/haonav/img/shijijiayuan.png', '世纪佳缘交友网——国内在线婚恋交友平台,数百万会员在这里找到对象。现2.2亿注册会员,助您寻觅缘分!', '交友,交友网,征婚交友,网上交友,征婚,征婚网,征婚交友网,交友中心,婚恋交友,同城交友,离异征婚,同城约会吧,约会吧征婚,约会吧交友,北京交友,上海交友,广州交友,深圳交友,重庆交友,沈阳交友,南京交友,找对象,婚介,二婚,再婚', 0, 0, 0, 0, 1, NULL, NULL, 1779052356, 1779052356, NULL),
(92, 1, 'facebook', 'https://www.facebook.com/', '/static/addons/haonav/img/Facebook.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779052422, 1779052422, NULL),
(93, 1, '百度贴吧', 'http://tieba.baidu.com/', '/static/addons/haonav/img/tieba.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779052463, 1779052463, NULL),
(94, 1, '小红书', 'https://www.xiaohongshu.com/', '/static/addons/haonav/img/xiaohongshu.png', '3 亿人的生活经验,都在小红书', '', 0, 0, 0, 0, 1, NULL, NULL, 1779052507, 1779052507, NULL),
(95, 1, '虎扑社区', 'https://bbs.hupu.com/', '/static/addons/haonav/img/hupubbs.jpg', '虎扑是以体育赛事和男性兴趣生活为主的社区网站。专注于NBA赛程、NBA录像、NBA直播、NBA资讯、球员交易、足球、英超、电竞、LPL等全部篮球足球电竞赛事,并提供虎扑步行街社区服务。', '虎扑,社区,NBA,足球,英超,LPL', 0, 0, 0, 0, 1, NULL, NULL, 1779052527, 1779052527, NULL),
(96, 1, '珍爱网', 'http://www.zhenai.com/', '/static/addons/haonav/img/zhenaiwang.jpg', '珍爱网创始于2005年,现拥有海量单身男女征婚交友相亲信息。珍爱网以网络征选红娘婚配的服务模式,为同城单身男女创造一个真实可靠的征婚交友相亲平台。开启真爱趁现在。', '征婚,交友,相亲', 0, 0, 0, 0, 1, NULL, NULL, 1779052558, 1779052558, NULL),
(97, 1, '新浪博客', 'http://blog.sina.com.cn/', '/static/addons/haonav/img/sinablog.jpg', '新浪网博客频道是全中国最主流,最具人气的博客频道。拥有最耀眼的娱乐明星博客、最知性的名人博客、最动人的情感博客,最自我的草根博客!', 'blog,博客,blog博客,blog博客新闻,blog博客资讯,blog博客信息,新浪blog博客', 0, 0, 0, 0, 1, NULL, NULL, 1779052575, 1779052575, NULL),
(98, 1, 'lofter', 'http://www.lofter.com/', '/static/addons/haonav/img/lofter.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779052625, 1779052625, NULL),
(99, 1, 'QQ', 'http://im.qq.com/', '/static/addons/haonav/img/qq.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779052648, 1779052648, NULL),
(100, 3, '苏宁易购', 'https://www.suning.com/', '/static/addons/haonav/img/suning.png', '苏宁易购(Suning.com)-线上线下深度融合的零售平台,商品涵盖家电、手机、电脑、超市、母婴、百货、海外购等品类。换新到苏宁 省钱更省心!五重补贴 买贵就赔 多重保障 一站换新。 正品行货、全国联保、可门店自提,全网更低价,家电家装成套购,专注服务省心购!', '苏宁易购网上商城,苏宁电器,Suning,手机,电脑,冰箱,洗衣机,相机,数码,家居用品,鞋帽,化妆品,母婴用品,图书,食品,正品行货,焕新补贴', 0, 0, 0, 0, 1, NULL, NULL, 1779052698, 1779052698, NULL),
(101, 3, '唯品会', 'https://www.vip.com/', '/static/addons/haonav/img/weipinhui.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779052731, 1779052731, NULL),
(102, 3, '1688', 'https://www.1688.com/', '/static/addons/haonav/img/1688.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779052823, 1779052823, NULL),
(103, 3, '安居客', 'https://anjuke.com/', '/static/addons/haonav/img/anjuke.png', '安居客房产网为用户提供找房信息。包括二手房、新房、租房、商铺、写字楼、海外地产、问答等,挑好房就上安居客', '二手房 新房 租房-最专业的房地产门户网站 - 安居客', 0, 0, 0, 0, 1, NULL, NULL, 1779052887, 1779052887, NULL),
(104, 3, '贝壳找房', 'https://bj.ke.com/', '/static/addons/haonav/img/beike.png', '北京贝壳找房提供真实房源的房产信息平台,为北京买房、北京二手房、北京新房购买以及北京租房需求的用户提供便捷服务.同时有智能找房、VR看房等先进科技找房功能等你来体验,想在北京买房、购买北京二手房、新房、租房,想了解到一手房产资讯、房价行情,就来北京贝壳找房吧!', '北京买房,北京二手房,北京房产网,北京租房,北京房地产', 0, 0, 0, 0, 1, NULL, NULL, 1779052908, 1779052908, NULL),
(105, 3, '下厨房', 'http://www.xiachufang.com/', '/static/addons/haonav/img/xiachufang.png', '下厨房美食菜谱网倡导在家烹饪、健康的生活方式,提供有版权的实用菜谱做法与饮食知识,提供厨师和美食爱好者一个记录、分享的平台。', '菜谱,美食,烹饪,下厨房', 0, 0, 0, 0, 1, NULL, NULL, 1779052945, 1779052945, NULL),
(106, 3, '链家', 'https://lianjia.com/', '/static/addons/haonav/img/lianjia.png', '北京链家网是提供北京二手房买卖、北京新房、北京租房、北京房价查询等业务的专业房产网站,可为您买卖北京二手房提供帮助,链家网北京站同时具有北京二手房、北京租房及购房问答和百科等频道,还可以在线查询北京二手房价格.买房卖房上北京链家网,让房产交易不再难.', '二手房,二手房网,链家,北京二手房网,北京房地产,北京房地产,北京租房,北京房产信息', 0, 0, 0, 0, 1, NULL, NULL, 1779052960, 1779052960, NULL),
(107, 3, '赶集网', 'https://ganji.com/', '/static/addons/haonav/img/ganji.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779052976, 1779052976, NULL),
(108, 3, '58同城', 'https://58.com/', '/static/addons/haonav/img/58.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779053003, 1779053003, NULL),
(109, 6, '中国新闻', 'http://www.chinanews.com/', '/static/addons/haonav/img/chinanews.jpg', '中国新闻网,是知名的中文新闻门户网站,也是全球互联网中文新闻资讯最重要的原创内容供应商之一。依托中新社遍布全球的采编网络,每天24小时面向广大网民和网络媒体,快速、准确地提供文字、图片、视频等多样化的资讯服务。在新闻报道方面,中新网动态新闻及时准确,解释性报道角度独特,稿件被国内外网络媒体大量转载。', '中国新闻网,中新网,新闻,时事,时政,国际,国内,社会,法治,聚焦,评论,文化,教育,新视点,深度,网评,专题,环球,传播,论坛,图片,军事,焦点,排行,环保,校园,法治,奇闻,真情', 0, 0, 0, 0, 1, NULL, NULL, 1779053062, 1779053062, NULL),
(110, 6, '央视网', 'http://www.cntv.cn/', '/static/addons/haonav/img/cctv1.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779053104, 1779053104, NULL),
(111, 6, '光明军事', 'https://mil.gmw.cn/', '/static/addons/haonav/img/gmw.jpg', '军事频道瞰览全球军情,彰显强军担当,传扬强军文化。', '中国军情、国际军情、武器装备、军事视点、军事文化、军事图库', 0, 0, 0, 0, 1, NULL, NULL, 1779053128, 1779053128, NULL),
(112, 6, '央广网', 'http://www.cnr.cn/', '/static/addons/haonav/img/cnr.cn.jpg', '央广网是中央广播电视总台主办的中央重点新闻网站,是中国最具影响力的网络媒体之一,也是国内新闻原创报道生产的核心平台和中文互联网原创内容传播的重要节点。', '时政,新闻,耳闻,眼见,地标中国,财经,科技,消费,健康,中华名医号,教育,文旅,军事,汽车,房产,公益,民生', 0, 0, 0, 0, 1, NULL, NULL, 1779053158, 1779053158, NULL),
(113, 6, '中国教育网', 'https://www.eol.cn/', '/static/addons/haonav/img/eol.cn.png', '"作为中国教育的联结者和赋能者,教育在线致力于成为推动中国教育前行的力量。多年来,教育在线专注教育领域,坚持满足各类教育需求,对接国内外2000余所高校、3000余所高中,覆盖全国30余个省市,发布各类权威的招考、就业、辅导等权威的教育信息,专注于为国内外各大高校、科研院所、教育机构提供从招生服务,到信息化应用服务,以及"智库服务"等为主的多元化教育服务。"', '"教育头条,教育资讯,教育政策法规,教育舆情,招生考试,报考政策,高考,考研,教育门户,教育网,教育在线官网,教育在线首页,教育在线"', 0, 0, 0, 0, 1, NULL, NULL, 1779053193, 1779053193, NULL),
(114, 6, '环球网', 'https://www.huanqiu.com/', '/static/addons/haonav/img/huanqiu.com.jpg', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779053211, 1779053211, NULL),
(115, 6, '米尔军事', 'https://www.miercn.com/', '/static/addons/haonav/img/miercn.com.jpg', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779053232, 1779053232, NULL),
(116, 6, '澎湃新闻', 'https://www.thepaper.cn/', '/static/addons/haonav/img/thepaper.cn.jpg', '澎湃,澎湃新闻,澎湃新闻网,新闻与思想,澎湃是植根于中国上海的时政思想类互联网平台,以最活跃的原创新闻与最冷静的思想分析为两翼,是互联网技术创新与新闻价值传承的结合体,致力于问答式新闻与新闻追踪功能的实践。', '', 0, 0, 0, 0, 1, NULL, NULL, 1779053258, 1779053258, NULL),
(117, 6, '网易新闻', 'https://news.163.com/', '/static/addons/haonav/img/news.163.com.jpg', '新闻,新闻中心,包含有时政新闻,国内新闻,国际新闻,社会新闻,时事评论,新闻图片,新闻专题,新闻论坛,军事,历史,的专业时事报道门户网站', '新闻,新闻中心,新闻频道,时事报道', 0, 0, 0, 0, 1, NULL, NULL, 1779053274, 1779053274, NULL),
(118, 6, '新京报', 'http://www.bjnews.com.cn/', '/static/addons/haonav/img/bjnews.com.cn.jpg', '新京报以文字、图片、视频等全媒体形式,为用户提供全天候热点新闻,涵盖突发新闻、时事、财经、娱乐、体育,以及评论、杂志和博客等,新京报网本着品质源于责任的的信念,致力于成为用户喜爱的精品新闻网站。', '新京报,电子报,报纸,传媒,时政,娱乐,财经,经济,民生,国内,国际,视频,杂志,访谈,评论,投票,专题,周刊,手机报,博客', 0, 0, 0, 0, 1, NULL, NULL, 1779053289, 1779053289, NULL),
(119, 5, '简书', 'http://www.jianshu.com/', '/static/addons/haonav/img/jianshu.com.png', '简书是一个优质的创作社区,在这里,你可以任性地创作,一篇短文、一张照片、一首诗、一幅画……我们相信,每个人都是生活中的艺术家,有着无穷的创造力。', '简书,简书官网,图文编辑软件,简书下载,图文创作,创作软件,原创社区,小说,散文,写作,阅读', 0, 0, 0, 0, 1, NULL, NULL, 1779077215, 1779077215, NULL),
(120, 5, '中知网', 'https://www.cnki.net/', '/static/addons/haonav/img/cnki.net.png', '中国知网知识发现网络平台—面向海内外读者提供中国学术文献、外文文献、学位论文、报纸、会议、年鉴、工具书等各类资源统一检索、统一导航、在线阅读和下载服务。涵盖基础科学、文史哲、工程科技、社会科学、农业、经济与管理科学、医药卫生、信息科技等十大领域。', '中国知网,数字出版,知识发现,知识服务,知识管理,数字出版,增强出版,CAJ-N,网络首发,CNKI首发,数字图书馆,学术文献,期刊,博士论文,硕士论文,会议论文,报纸,年鉴,统计数据,专利,科技成果,标准,法规,古籍,工具书,引文,图片搜索,外文文献', 0, 0, 0, 0, 1, NULL, NULL, 1779077273, 1779077273, NULL),
(121, 5, '网易课程', 'https://open.163.com/', '/static/addons/haonav/img/open.163.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779077302, 1779077302, NULL),
(122, 5, '学堂在线', 'https://www.xuetangx.com/', '/static/addons/haonav/img/xuetangx.com.png', '学堂在线是清华大学于2013年10月发起建立的慕课平台,是教育部在线教育研究中心的研究交流和成果应用平台,是国家2016年首批双创示范基地项目,是中国高等教育学会产教融合研究分会副秘书长单位,也是联合国教科文组织(UNESCO)国际工程教育中心(ICEE)的在线教育平台。目前,学堂在线运行了来自清华大学、北京大学、复旦大学、中国科技大学,以及麻省理工学院、斯坦福大学、加州大学伯克利分校等国内外高校的超过2300门优质课程,覆盖13大学科门类。', '学堂在线 - 国家精品在线课程学习平台,在线学习,在线教育,在线直播,在线课程,网络公开课,视频公开课,大学公开课,计算机、人工智能、数据科学、英语、商业、经济学、训练营、邓俊辉数据结构、清华认证、经济学、同等学历、微学位、名校课程、清华大学,中国慕课,首批国家精品在线开放课程,课程', 0, 0, 0, 0, 1, NULL, NULL, 1779077362, 1779077362, NULL),
(123, 6, '扇贝单词', 'https://web.shanbay.com/web/main', '/static/addons/haonav/img/shanbay.com.png', '扇贝英语,14年词汇记忆研究,200万+注册用户。AI驱动个性化备考路径,覆盖四六级、考研、雅思、托福全线词书。扇贝单词、扇贝阅读、扇贝听力口语、扇贝考研四大APP,一站式英语学习解决方案。', '扇贝单词,扇贝阅读,扇贝听力口语,扇贝考研,AI背单词,英语学习APP,四六级,考研英语,雅思,托福,GRE,CET-4,CET-6,IELTS,TOEFL,英语单词记忆,词汇量测试', 0, 0, 0, 0, 1, NULL, NULL, 1779077385, 1779077385, NULL),
(124, 5, '超星尔雅', 'https://erya.mooc.chaoxing.com/', '/static/addons/haonav/img/chaoxing.com.png', '', '超星尔雅通识教育', 0, 0, 0, 0, 1, NULL, NULL, 1779077966, 1779077966, NULL),
(125, 5, 'Duolingo', 'https://www.duolingo.com/', '/static/addons/haonav/img/duolingo.com.png', 'Duolingo is the world''s most popular way to learn a language. It''s 100% free, fun and science-based. Practice online on duolingo.com or on the apps!', 'learn, spanish, german, french, portuguese, italian, english, free, lessons, course, language, study, flashcards', 0, 0, 0, 0, 1, NULL, NULL, 1779077994, 1779077994, NULL),
(126, 5, '百度学术', 'https://xueshu.baidu.com/', '/static/addons/haonav/img/xueshu.baidu.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779078104, 1779078104, NULL),
(127, 5, '万方数据', 'https://www.wanfangdata.com.cn/', '/static/addons/haonav/img/wanfangdata.com.cn.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779078182, 1779078182, NULL),
(128, 5, '中国大学', 'https://www.imooc.com/', '/static/addons/haonav/img/imooc.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779078206, 1779078206, NULL),
(129, 5, '英语六级', 'https://cet.neea.edu.cn/', '/static/addons/haonav/img/cet.neea.edu.cn.png', '', '全国大学英语四、六级考试(CET) 全国大学英语四、六级考试(CET) - 中国教育考试网', 0, 0, 0, 0, 1, NULL, NULL, 1779078231, 1779078231, NULL),
(130, 5, '学科网', 'https://www.zxxk.com/', '/static/addons/haonav/img/zxxk.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779078257, 1779078257, NULL),
(131, 5, '国图公开课', 'http://open.nlc.cn/', '/static/addons/haonav/img/open.nlc.cn.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779078286, 1779078286, NULL),
(132, 5, '有道翻译', 'http://www.youdao.com/', '/static/addons/haonav/img/youdao.com.png', '网易有道是中国领先的智能学习公司,致力于提供100%以用户为导向的学习产品和服务。有道成立于2006年,打造了一系列深受用户喜欢的口碑型大众学习工具产品,例如:网易有道词典、有道精品课、有道翻译官、有道云笔记等。2014年,网易有道宣布正式进军互联网教育行业。2018å¹´4月,网易有道完成首次战略融资,投后估值11.2亿美金,跻身独角兽阵营。2019å¹´10月,网易有道成功登陆纽交所,股票代码为“DAO”,成为网易集团首个独立上市的公司。', '有道, 搜索, 词典, 翻译, 云笔记, 笔记, 惠惠网, 惠惠购物助手, 购物搜索, 图片搜索, 视频搜索, 新闻搜索, 网易有道, 在线翻译, 专业翻译', 0, 0, 0, 0, 1, NULL, NULL, 1779078313, 1779078313, NULL),
(133, 5, 'TED', 'https://www.ted.com/', '/static/addons/haonav/img/ted.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779078332, 1779078332, NULL),
(134, 5, '粉笔网', 'http://fenbi.com/', '/static/addons/haonav/img/fenbi.com.png', '【粉笔公考】国家公务员、事业单位、研究生、四六级、建造、法考、医疗、军队文职、公安招警、银行等招考信息,岗位查询,备考指导,笔试面试辅导资料,课程培训,历年试题及答案下载,模考大赛', '国家公务员,2027公务员考试,国考,2026省考,事业单位,教师,公考热点,招考资讯,备考资料,免费课程,模考试题,真题题库,视频课程,粉笔官网,公考培训机构', 0, 0, 0, 0, 1, NULL, NULL, 1779078362, 1779078362, NULL),
(135, 5, 'EnglishClub', 'https://www.englishclub.com/', '/static/addons/haonav/img/englishclub.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779078414, 1779078414, NULL),
(136, 5, '牛客网', 'https://www.nowcoder.com/', '/static/addons/haonav/img/nowcoder.com.png', '', '', 0, 0, 0, 0, 1, NULL, NULL, 1779078435, 1779078435, NULL),
(137, 10, '17K小说', 'http://www.17k.com/', '/static/addons/haonav/img/www.17k.com.png', '', '小说,免费小说,最新小说下载,17K小说网,免费小说阅读', 0, 0, 0, 0, 1, NULL, NULL, 1779083979, 1779084204, NULL),
(138, 10, '潇湘书院', 'http://www.xxsy.net/', '/static/addons/haonav/img/www.xxsy.net.png', '潇湘书院是国内知名原创网络文学门户, 拥有海量的女生完结全本小说作品, 提供热门小说排行榜免费在线阅读, 每日更新言情、都市、穿越、青春、悬疑等作品连载', '潇湘书院, 言情小说, 免费小说, 好看的小说, 小说推荐, 小说网站', 0, 0, 0, 0, 1, NULL, NULL, 1779084009, 1779084244, NULL);
-- 用户云端收藏表(登录后「我的导航」跨端同步)
CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_favorites` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` int unsigned NOT NULL COMMENT '用户ID',
`link_id` int unsigned DEFAULT '0' COMMENT '站内链接ID(0=自定义外链)',
`title` varchar(100) COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '标题',
`url` varchar(500) COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '网址',
`icon` varchar(200) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '图标',
`sort` int DEFAULT '0' COMMENT '排序权重,越小越靠前',
`create_at` int DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
UNIQUE KEY `uniq_user_url` (`user_id`,`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户云端收藏表';
-- 用户收藏夹分享配置表(一个用户一条;老库由 FavoriteShare::ensureTable 运行时自愈)
CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_favorite_shares` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` int unsigned NOT NULL COMMENT '用户ID',
`token` varchar(32) COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '分享令牌',
`title` varchar(100) COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '分享页标题',
`enabled` tinyint NOT NULL DEFAULT '0' COMMENT '是否开启分享:1开 0关',
`views` int unsigned NOT NULL DEFAULT '0' COMMENT '被访问次数',
`create_at` int DEFAULT NULL COMMENT '创建时间',
`update_at` int DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_user` (`user_id`),
KEY `idx_token` (`token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户收藏夹分享配置';
-- 导航配置种子(缺失时插入,供后台「导航配置」页管理)
INSERT INTO `__PREFIX__haonav_config` (`id`, `name`, `group`, `title`, `tip`, `type`, `value`, `content`, `rule`, `extend`, `setting`) VALUES
@@ -356,7 +298,7 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_ads` (
PRIMARY KEY (`id`),
KEY `idx_slot` (`slot`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT='网址导航广告位';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网址导航广告位';
-- 自助申请表(友链/广告;首次安装创建;老库由 SchemaGuard 运行时自愈)
CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_apply` (
@@ -376,7 +318,7 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_apply` (
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT='网址导航自助申请(友链/广告)';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网址导航自助申请(友链/广告)';
-- 点击统计聚合表(按链接/日期/小时;后台「点击热力图」数据源;老库由 Index::site 运行时自愈)
CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_click_stats` (
@@ -390,7 +332,7 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_click_stats` (
UNIQUE KEY `uniq_link_date_hour` (`link_id`,`date`,`hour`),
KEY `idx_date` (`date`),
KEY `idx_cid` (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT='点击统计聚合(按链接/日期/小时)';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='点击统计聚合(按链接/日期/小时)';
CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_ratings` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
@@ -401,6 +343,6 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__haonav_ratings` (
`update_at` int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_user_link` (`user_id`,`link_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT='网址评分记录';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网址评分记录';
SET FOREIGN_KEY_CHECKS = 1;
-8
View File
@@ -41,14 +41,6 @@ class Category extends BaseModel
return $this->hasMany(Links::class, 'cid', 'id');
}
/**
* 子分类(二级及更深层次)
*/
public function children()
{
return $this->hasMany(self::class, 'pid', 'id');
}
/**
* 删除前保护:存在子分类或下属链接时禁止删除,避免产生孤儿数据
* @param \think\Model $model
+2 -2
View File
@@ -3,7 +3,7 @@
* @Author: YwxApp <ywx@ywxapp.cn>
* @Date: 2026-07-31 13:28:15
* @LastEditors: YwxApp <ywx@ywxapp.cn>
* @LastEditTime: 2026-08-16 15:16:48
* @LastEditTime: 2026-08-10 23:40:51
* @Description:
* @FilePath: \ywxapp_dev\addon\haonav\route\app.php
* @CustomString: Copyright (c) 2026 YwxApp
@@ -90,5 +90,5 @@ Route::group('backend', function () {
Route::rule('ad/:action', 'Ad/:action');
Route::rule('apply', 'Apply/index');
Route::rule('apply/:action', 'Apply/:action');
})->layer('backend');;
})->prefix('backend/');;
+13 -256
View File
@@ -1,261 +1,18 @@
-- ============================================================
-- addon/haonav/upgrade.sql —— 分类体系重构迁移(一级 + 二级 + 常用网址)
-- 适用场景:已安装 haonav 插件的站点,数据库里还是旧的扁平分类(id 1~12)
-- 作用:清空旧的 haonav_category / haonav_links 种子数据,插入新的
-- 14 个一级 + 30 个二级分类 + 155 条常用网址(国内外混合)。
-- ⚠️ 注意:本脚本会 DELETE 掉 haonav_category 和 haonav_links 的全部数据
-- (含你此前手动添加的分类/网址)。执行前请先备份,或确认可接受重置种子。
-- haonav_config / haonav_ads / haonav_apply 等表不受影响。
-- 执行方式:在 MySQL 客户端用你的库前缀替换 __PREFIX__ 后执行,例如
-- sed 's/__PREFIX__/ywx_/' upgrade.sql | mysql -u用户 -p 数据库
-- 或通过后台「数据库」工具导入(注意前缀替换)。
-- addons/haonav/upgrade.sql
-- 用于已安装插件、但缺少新字段/配置的老库升级
-- 在数据库客户端执行本文件即可(重复执行安全:字段/数据已存在会自动跳过)。
-- ============================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- 1) 清空旧种子(按外键先清子表再清父表)
DELETE FROM `__PREFIX__haonav_links`;
DELETE FROM `__PREFIX__haonav_category`;
-- 1. 链接表新增死链检测字段
ALTER TABLE `__PREFIX__haonav_links`
ADD COLUMN `last_check_at` int DEFAULT NULL COMMENT '最后死链检测时间' AFTER `last_click_at`,
ADD COLUMN `status_code` int DEFAULT NULL COMMENT '最近一次HTTP状态码,NULL表示未检测' AFTER `last_check_at`;
-- 2) 插入新分类体系(一级 + 二级
INSERT INTO `__PREFIX__haonav_category` (`id`, `pid`, `title`, `icon`, `summary`, `keywords`, `description`, `sort`, `status`, `website_count`, `click_count`, `create_at`, `update_at`) VALUES
-- 一级分类
(1, 0, '常用搜索', '🔍', '', '', '搜索引擎与门户入口', 140, 1, 0, 0, NULL, NULL),
(2, 0, '视频娱乐', '📺', '', '', '影视、短视频与音乐平台', 130, 1, 0, 0, NULL, NULL),
(3, 0, '社交沟通', '👥', '', '', '综合与海外社交平台', 120, 1, 0, 0, NULL, NULL),
(4, 0, '新闻资讯', '📰', '', '', '门户新闻与科技资讯', 110, 1, 0, 0, NULL, NULL),
(5, 0, '开发编程', '💻', '', '', '代码托管、技术社区与云服务', 100, 1, 0, 0, NULL, NULL),
(6, 0, '学习教育', '🎓', '', '', '在线课程与资料文库', 90, 1, 0, 0, NULL, NULL),
(7, 0, '购物电商', '🛒', '', '', '综合电商与海淘二手', 80, 1, 0, 0, NULL, NULL),
(8, 0, '办公效率', '📁', '', '', '文档协作、邮箱、云盘与会议', 70, 1, 0, 0, NULL, NULL),
(9, 0, '设计创意', '🎨', '', '', '设计素材与在线设计工具', 60, 1, 0, 0, NULL, NULL),
(10, 0, '实用工具', '🧰', '', '', '生活服务与在线小工具', 50, 1, 0, 0, NULL, NULL),
(11, 0, '财经金融', '💰', '', '', '行情理财与支付银行', 40, 1, 0, 0, NULL, NULL),
(12, 0, '旅游出行', '✈️', '', '', '交通出行与住宿预订', 30, 1, 0, 0, NULL, NULL),
(13, 0, '医疗健康', '🩺', '', '', '在线问诊与健康科普', 20, 1, 0, 0, NULL, NULL),
(14, 0, '政务民生', '🏛️', '', '', '政务服务与生活缴费', 10, 1, 0, 0, NULL, NULL),
-- 二级分类(pid 指向一级)
(15, 1, '综合搜索', '🌐', '', '', '百度、Google 等综合搜索引擎', 140, 1, 0, 0, NULL, NULL),
(16, 1, '学术资源', '📖', '', '', '学术、图书与知识检索', 139, 1, 0, 0, NULL, NULL),
(21, 2, '长视频', '🎬', '', '', '爱奇艺、腾讯视频等长视频', 130, 1, 0, 0, NULL, NULL),
(22, 2, '短视频直播', '📱', '', '', '抖音、快手等短视频平台', 129, 1, 0, 0, NULL, NULL),
(23, 2, '音乐', '🎵', '', '', '在线音乐播放平台', 128, 1, 0, 0, NULL, NULL),
(31, 3, '综合社交', '💬', '', '', '微信、微博等国内社交', 120, 1, 0, 0, NULL, NULL),
(32, 3, '国际社交', '🌍', '', '', 'X、Telegram 等海外社交', 119, 1, 0, 0, NULL, NULL),
(41, 4, '综合门户', '🗞️', '', '', '新浪、网易等综合门户', 110, 1, 0, 0, NULL, NULL),
(42, 4, '科技资讯', '', '', '', '36氪、少数派等科技媒体', 109, 1, 0, 0, NULL, NULL),
(51, 5, '代码托管', '🔧', '', '', 'GitHub、Gitee 等代码平台', 100, 1, 0, 0, NULL, NULL),
(52, 5, '技术社区', '📝', '', '', 'CSDN、掘金等技术社区', 99, 1, 0, 0, NULL, NULL),
(53, 5, '云服务', '☁️', '', '', '阿里云、腾讯云等云服务', 98, 1, 0, 0, NULL, NULL),
(61, 6, '慕课学习', '📚', '', '', '慕课网、Coursera 等课程', 90, 1, 0, 0, NULL, NULL),
(62, 6, '资料文库', '📄', '', '', '百度文库、道客巴巴等', 89, 1, 0, 0, NULL, NULL),
(71, 7, '综合电商', '🛍️', '', '', '淘宝、京东等综合电商', 80, 1, 0, 0, NULL, NULL),
(72, 7, '海淘二手', '♻️', '', '', '亚马逊、闲鱼等海淘二手', 79, 1, 0, 0, NULL, NULL),
(81, 8, '文档协作', '📝', '', '', '腾讯文档、Notion 等协作', 70, 1, 0, 0, NULL, NULL),
(82, 8, '邮箱', '📧', '', '', 'QQ邮箱、Gmail 等邮箱', 69, 1, 0, 0, NULL, NULL),
(83, 8, '云盘', '💾', '', '', '百度网盘、OneDrive 等', 68, 1, 0, 0, NULL, NULL),
(84, 8, '会议办公', '🎥', '', '', '腾讯会议、钉钉等', 67, 1, 0, 0, NULL, NULL),
(91, 9, '设计素材', '🖼️', '', '', '千图网、Unsplash 等素材', 60, 1, 0, 0, NULL, NULL),
(92, 9, '设计工具', '🛠️', '', '', 'Figma、Canva 等设计工具', 59, 1, 0, 0, NULL, NULL),
(101, 10, '生活服务', '🚌', '', '', '快递、地图、出行等', 50, 1, 0, 0, NULL, NULL),
(102, 10, '在线工具', '⚙️', '', '', 'JSON、二维码等在线工具', 49, 1, 0, 0, NULL, NULL),
(111, 11, '行情理财', '📈', '', '', '东方财富、雪球等', 40, 1, 0, 0, NULL, NULL),
(112, 11, '支付银行', '🏦', '', '', '支付宝、网银等', 39, 1, 0, 0, NULL, NULL),
(121, 12, '交通出行', '🚄', '', '', '携程、12306 等出行', 30, 1, 0, 0, NULL, NULL),
(122, 12, '住宿预订', '🏨', '', '', '美团、Booking 等住宿', 29, 1, 0, 0, NULL, NULL),
(131, 13, '在线问诊', '💊', '', '', '丁香医生、好大夫等', 20, 1, 0, 0, NULL, NULL),
(132, 13, '健康科普', '🌿', '', '', '丁香园等健康科普', 19, 1, 0, 0, NULL, NULL),
(141, 14, '政务服务', '📋', '', '', '国家政务平台、粤省事等', 10, 1, 0, 0, NULL, NULL),
(142, 14, '生活缴费', '💡', '', '', '社保、水电网查询', 9, 1, 0, 0, NULL, NULL);
-- 3) 插入常用网址(国内外混合,cid 指向二级分类 id)
INSERT INTO `__PREFIX__haonav_links` (`id`, `cid`, `title`, `url`, `icon`, `description`, `keywords`, `click_count`, `sort`, `is_hot`, `is_recommend`, `status`, `screenshot`, `favicon`, `create_at`, `update_at`, `last_click_at`) VALUES
-- 综合搜索
(1, 11, '百度', 'https://www.baidu.com', '🔍', '全球最大的中文搜索引擎', '百度,搜索,引擎', 45000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(2, 11, 'Google', 'https://www.google.com', '🌐', '全球搜索引擎巨头', 'Google,搜索,英文', 30000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(3, 11, '必应', 'https://www.bing.com', '🔎', '微软旗下搜索引擎', '必应,bing,搜索', 18000, 90, 0, 1, 1, NULL, NULL, NULL, NULL, NULL),
(4, 11, '搜狗', 'https://www.sogou.com', '🐶', '腾讯旗下搜索引擎', '搜狗,搜索,输入法', 12000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(5, 11, '360搜索', 'https://www.so.com', '🛡️', '360安全搜索引擎', '360,搜索,安全', 9000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(6, 11, 'Yahoo', 'https://www.yahoo.com', '🟣', '老牌门户与搜索引擎', '雅虎,yahoo,门户', 7000, 75, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 学术资源
(7, 12, '中国知网', 'https://www.cnki.net', '📚', '中文学术文献数据库', '知网,论文,学术', 8000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(8, 12, '豆瓣', 'https://www.douban.com', '🎞️', '书影音与知识社区', '豆瓣,书影音,社区', 16000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(9, 12, '维基百科', 'https://www.wikipedia.org', '📖', '自由的百科全书', '维基,百科,知识', 14000, 90, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(10, 12, '微信读书', 'https://weread.qq.com', '📕', '腾讯在线阅读平台', '微信读书,电子书,阅读', 9000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(11, 12, '鸠摩搜书', 'https://www.jiumodiary.com', '🔏', '电子书聚合搜索', '鸠摩,电子书,搜书', 5000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 长视频
(12, 21, '爱奇艺', 'https://www.iqiyi.com', '🔴', '悦享品质视频平台', '爱奇艺,视频,会员', 26000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(13, 21, '腾讯视频', 'https://v.qq.com', '🟢', '海量正版高清视频', '腾讯视频,视频,电视剧', 24000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(14, 21, '优酷', 'https://www.youku.com', '🟠', '阿里巴巴视频平台', '优酷,视频,土豆', 20000, 90, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(15, 21, '芒果TV', 'https://www.mgtv.com', '🟡', '湖南卫视官方视频', '芒果TV,视频,综艺', 18000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(16, 21, '哔哩哔哩', 'https://www.bilibili.com', '🔵', '国内知名弹幕视频网', 'B站,视频,弹幕', 32000, 88, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(17, 21, '搜狐视频', 'https://tv.sohu.com', '', '搜狐高清视频平台', '搜狐视频,视频,美剧', 9000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 短视频直播
(18, 22, '抖音', 'https://www.douyin.com', '🎵', '记录美好生活的短视频', '抖音,短视频,直播', 35000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(19, 22, '快手', 'https://www.kuaishou.com', '🎬', '普惠的短视频社区', '快手,短视频,直播', 22000, 95, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(20, 22, '微信视频号', 'https://channels.weixin.qq.com', '💬', '微信生态短视频', '视频号,微信,短视频', 14000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 音乐
(21, 23, '网易云音乐', 'https://music.163.com', '🔴', '有态度的音乐平台', '网易云,音乐,歌单', 28000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(22, 23, 'QQ音乐', 'https://y.qq.com', '🟢', '腾讯在线音乐平台', 'QQ音乐,音乐,听歌', 26000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(23, 23, '酷狗音乐', 'https://www.kugou.com', '🟣', '庞大曲库音乐平台', '酷狗,音乐,听歌', 15000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(24, 23, '酷我音乐', 'https://www.kuwo.cn', '🔵', '无损音乐正版试听', '酷我,音乐,无损', 9000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(25, 23, '千千音乐', 'https://music.taihe.com', '🟡', '太合音乐旗下平台', '千千音乐,音乐,在线听', 5000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(26, 23, 'Spotify', 'https://www.spotify.com', '🟢', '全球流媒体音乐服务', 'Spotify,音乐,海外', 8000, 78, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 综合社交
(27, 31, '微信', 'https://weixin.qq.com', '💬', '腾讯即时通讯与社交', '微信,社交,聊天', 40000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(28, 31, 'QQ', 'https://im.qq.com', '🐧', '腾讯即时通讯工具', 'QQ,社交,聊天', 30000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(29, 31, '微博', 'https://www.weibo.com', '🔶', '随时随地发现新鲜事', '微博,社交,微博客', 28000, 90, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(30, 31, '小红书', 'https://www.xiaohongshu.com', '🔴', '标记生活的种草社区', '小红书,社交,种草', 24000, 88, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(31, 31, '知乎', 'https://www.zhihu.com', '🔵', '有问题就会有答案', '知乎,问答,知识', 20000, 85, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
-- 国际社交
(32, 32, 'X (Twitter)', 'https://x.com', '', '马斯卡旗下的社交平台', 'X,Twitter,海外社交', 16000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(33, 32, 'Telegram', 'https://telegram.org', '🔵', '加密即时通讯与频道', 'Telegram,电报,聊天', 12000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(34, 32, 'Facebook', 'https://www.facebook.com', '🔵', '全球最大社交网络', 'Facebook,脸书,海外社交', 14000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(35, 32, 'Instagram', 'https://www.instagram.com', '🔴', '图片与短视频社交', 'Instagram,ins,海外社交', 13000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(36, 32, 'Reddit', 'https://www.reddit.com', '🟠', '全球兴趣社区论坛', 'Reddit,论坛,海外', 9000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(37, 32, 'YouTube', 'https://www.youtube.com', '🔴', '全球最大视频平台', 'YouTube,视频,海外', 30000, 80, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
-- 综合门户
(38, 41, '新浪', 'https://www.sina.com.cn', '🔴', '综合门户与新闻', '新浪,门户,新闻', 22000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(39, 41, '搜狐', 'https://www.sohu.com', '🔵', '综合门户新闻平台', '搜狐,门户,新闻', 16000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(40, 41, '网易', 'https://www.163.com', '🔴', '综合门户与邮箱', '网易,门户,新闻', 18000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(41, 41, '腾讯新闻', 'https://news.qq.com', '🟢', '腾讯新闻资讯平台', '腾讯新闻,新闻,资讯', 14000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(42, 41, '今日头条', 'https://www.toutiao.com', '🔴', '个性化推荐资讯', '今日头条,新闻,资讯', 20000, 85, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(43, 41, '凤凰网', 'https://www.ifeng.com', '🔶', '全球华人资讯门户', '凤凰网,门户,新闻', 9000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 科技资讯
(44, 42, '36氪', 'https://36kr.com', '🔵', '新经济商业媒体', '36氪,科技,创业', 8000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(45, 42, '虎嗅', 'https://www.huxiu.com', '🟠', '有洞察的商业科技媒体', '虎嗅,科技,商业', 7000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(46, 42, '少数派', 'https://sspai.com', '🔵', '效率工具与数字生活', '少数派,科技,效率', 6000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(47, 42, '钛媒体', 'https://www.tmtpost.com', '🔴', '财经科技资讯平台', '钛媒体,科技,财经', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 代码托管
(48, 51, 'GitHub', 'https://github.com', '🐙', '全球最大代码托管平台', 'GitHub,代码,开源', 35000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(49, 51, 'GitLab', 'https://gitlab.com', '🟠', 'DevOps 代码协作平台', 'GitLab,代码,协作', 9000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(50, 51, 'Gitee', 'https://gitee.com', '🔴', '国内代码托管平台', 'Gitee,码云,代码', 12000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(51, 51, 'Coding', 'https://dev.tencent.com', '🔵', '腾讯云代码托管', 'Coding,代码,腾讯云', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 技术社区
(52, 52, 'CSDN', 'https://www.csdn.net', '🔴', '中文IT技术社区', 'CSDN,技术,博客', 20000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(53, 52, '掘金', 'https://juejin.cn', '🔵', '面向开发者的技术社区', '掘金,技术,前端', 14000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(54, 52, '博客园', 'https://www.cnblogs.com', '🔵', '开发者博客社区', '博客园,技术,博客', 8000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(55, 52, 'Stack Overflow', 'https://stackoverflow.com', '🟠', '全球编程问答社区', 'StackOverflow,技术,问答', 16000, 88, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(56, 52, 'V2EX', 'https://www.v2ex.com', '🔵', '创意工作者的社区', 'V2EX,技术,社区', 5000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(57, 52, '开源中国', 'https://www.oschina.net', '🔴', '中文开源技术社区', '开源中国,技术,开源', 6000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 云服务
(58, 53, '阿里云', 'https://www.aliyun.com', '🟠', '阿里云计算平台', '阿里云,云,服务器', 18000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(59, 53, '腾讯云', 'https://cloud.tencent.com', '🔵', '腾讯云计算平台', '腾讯云,云,服务器', 14000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(60, 53, '华为云', 'https://www.huaweicloud.com', '🔴', '华为云计算平台', '华为云,云,服务器', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(61, 53, '百度智能云', 'https://cloud.baidu.com', '🔵', '百度云计算平台', '百度云,云,AI', 5000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(62, 53, 'Cloudflare', 'https://www.cloudflare.com', '🟠', '全球CDN与安全服务', 'Cloudflare,CDN,海外', 8000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(63, 53, '七牛云', 'https://www.qiniu.com', '🟢', '对象存储与CDN', '七牛云,存储,CDN', 4000, 80, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 慕课学习
(64, 61, '中国大学MOOC', 'https://www.icourse163.org', '🔴', '国家精品在线课程', '慕课,大学,课程', 9000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(65, 61, '网易云课堂', 'https://study.163.com', '🔴', '实用技能学习平台', '云课堂,课程,学习', 8000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(66, 61, '慕课网', 'https://www.imooc.com', '🟢', 'IT技能学习平台', '慕课网,IT,编程', 10000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(67, 61, 'Coursera', 'https://www.coursera.org', '🔵', '全球在线课程平台', 'Coursera,课程,海外', 7000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(68, 61, '学堂在线', 'https://www.xuetangx.com', '🔵', '清华出品慕课平台', '学堂在线,课程,大学', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(69, 61, 'B站课堂', 'https://www.bilibili.com/v/cheese', '🔵', 'B站知识区课程', 'B站课堂,课程,学习', 5000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 资料文库
(70, 62, '百度文库', 'https://wenku.baidu.com', '🔵', '文档资料分享平台', '百度文库,文档,资料', 9000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(71, 62, '道客巴巴', 'https://www.doc88.com', '🔴', '在线文档分享平台', '道客巴巴,文档,资料', 4000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(72, 62, '原创力文档', 'https://max.book118.com', '🟠', '专业文档下载站', '原创力,文档,下载', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 综合电商
(73, 71, '淘宝', 'https://www.taobao.com', '🔶', '淘!我喜欢', '淘宝,购物,电商', 40000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(74, 71, '京东', 'https://www.jd.com', '🔴', '正品低价品质保障', '京东,购物,自营', 38000, 95, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(75, 71, '拼多多', 'https://www.pinduoduo.com', '🔴', '拼着买更便宜', '拼多多,团购,便宜', 32000, 90, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(76, 71, '天猫', 'https://www.tmall.com', '🔴', '品质好物聚集地', '天猫,购物,品牌', 28000, 88, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(77, 71, '苏宁易购', 'https://www.suning.com', '🔵', '家电3C综合电商', '苏宁,购物,家电', 9000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 海淘二手
(78, 72, '亚马逊', 'https://www.amazon.cn', '🔴', '全球综合电商平台', '亚马逊,海淘,电商', 12000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(79, 72, '闲鱼', 'https://www.goofish.com', '🔶', '阿里二手交易社区', '闲鱼,二手,转卖', 16000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(80, 72, '转转', 'https://www.zhuanzhuan.com', '🔵', '二手交易平台', '转转,二手,交易', 7000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(81, 72, 'eBay', 'https://www.ebay.com', '🔴', '全球在线拍卖与购物', 'eBay,海淘,海外', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 文档协作
(82, 81, '腾讯文档', 'https://docs.qq.com', '🔵', '多人实时在线文档', '腾讯文档,在线文档,协作', 14000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(83, 81, '石墨文档', 'https://shimo.im', '🟢', '轻盈的在线协作文档', '石墨文档,协作,文档', 6000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(84, 81, '飞书', 'https://www.feishu.cn', '🔵', '一站式办公协作平台', '飞书,办公,协作', 10000, 92, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(85, 81, '钉钉文档', 'https://www.dingtalk.com', '🔵', '阿里办公协作套件', '钉钉,办公,协作', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(86, 81, 'Notion', 'https://www.notion.so', '', '全能笔记与协作工具', 'Notion,笔记,海外', 8000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(87, 81, 'Google Docs', 'https://docs.google.com', '🔵', '谷歌在线文档套件', 'GoogleDocs,文档,海外', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 邮箱
(88, 82, 'QQ邮箱', 'https://mail.qq.com', '🔵', '腾讯免费邮箱', 'QQ邮箱,邮箱,邮件', 20000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(89, 82, '网易邮箱', 'https://mail.163.com', '🔴', '网易免费邮箱', '网易邮箱,邮箱,邮件', 12000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(90, 82, 'Outlook', 'https://outlook.live.com', '🔵', '微软邮箱服务', 'Outlook,邮箱,微软', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(91, 82, 'Gmail', 'https://mail.google.com', '🔴', '谷歌邮箱服务', 'Gmail,邮箱,谷歌', 11000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(92, 82, 'Foxmail', 'https://www.foxmail.com', '🔵', '腾讯邮箱客户端', 'Foxmail,邮箱,客户端', 3000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 云盘
(93, 83, '百度网盘', 'https://pan.baidu.com', '🔵', '国内最大云存储', '百度网盘,云盘,存储', 26000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(94, 83, '阿里云盘', 'https://www.aliyundrive.com', '🔴', '不限速个人云盘', '阿里云盘,云盘,存储', 14000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(95, 83, 'OneDrive', 'https://onedrive.live.com', '🔵', '微软云存储服务', 'OneDrive,云盘,微软', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(96, 83, '蓝奏云', 'https://www.lanzou.com', '🟢', '不限速文件分享', '蓝奏云,云盘,分享', 5000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(97, 83, '腾讯微云', 'https://www.weiyun.com', '🔵', '腾讯云存储服务', '微云,云盘,腾讯', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 会议办公
(98, 84, '腾讯会议', 'https://meeting.tencent.com', '🔵', '高清流畅视频会议', '腾讯会议,会议,视频', 14000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(99, 84, '钉钉', 'https://www.dingtalk.com', '🔵', '阿里企业办公平台', '钉钉,办公,企业', 12000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(100, 84, '飞书会议', 'https://www.feishu.cn', '🔵', '字节一站式办公', '飞书,会议,办公', 7000, 92, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(101, 84, 'Zoom', 'https://www.zoom.us', '🔵', '国际视频会议工具', 'Zoom,会议,海外', 8000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(102, 84, '企业微信', 'https://work.weixin.qq.com', '🔢', '腾讯企业通讯工具', '企业微信,办公,企业', 9000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 设计素材
(103, 91, '千图网', 'https://www.58pic.com', '🔴', '原创设计素材库', '千图网,素材,设计', 6000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(104, 91, '包图网', 'https://www.ibaotu.com', '🔶', '商业设计素材平台', '包图网,素材,设计', 4000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(105, 91, '我图网', 'https://www.ooopic.com', '🔵', '正版设计素材下载', '我图网,素材,设计', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(106, 91, 'Unsplash', 'https://unsplash.com', '', '免费高清摄影图库', 'Unsplash,图片,海外', 9000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(107, 91, 'Pexels', 'https://www.pexels.com', '🔵', '免费摄影视频素材', 'Pexels,图片,海外', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(108, 91, 'Pixabay', 'https://pixabay.com', '🔵', '免费正版图库与视频', 'Pixabay,图片,海外', 4000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 设计工具
(109, 92, 'Figma', 'https://www.figma.com', '🔴', '协作式UI设计工具', 'Figma,设计,UI', 10000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(110, 92, 'Canva', 'https://www.canva.cn', '🔵', '在线平面设计工具', 'Canva,设计,海报', 8000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(111, 92, '稿定设计', 'https://www.gaoding.com', '🔴', '电商新媒体设计工具', '稿定设计,设计,模板', 4000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(112, 92, '即时设计', 'https://js.design', '🔵', '国产协作式UI工具', '即时设计,UI,设计', 4000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(113, 92, '墨刀', 'https://modao.cc', '🔵', '在线原型设计工具', '墨刀,原型,设计', 3000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 生活服务
(114, 101, '快递100', 'https://www.kuaidi100.com', '🔵', '快递查询与寄件', '快递100,快递,查询', 9000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(115, 101, '12306', 'https://www.12306.cn', '🔴', '中国铁路购票官网', '12306,火车票,铁路', 18000, 95, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(116, 101, '高德地图', 'https://www.amap.com', '🔵', '高德导航与地图', '高德,地图,导航', 16000, 92, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(117, 101, '百度地图', 'https://map.baidu.com', '🔵', '百度地图与导航', '百度地图,地图,导航', 12000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(118, 101, '中国天气', 'https://www.weather.com.cn', '🌤️', '中央气象台天气', '天气,气象,预报', 8000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(119, 101, '美团', 'https://www.meituan.com', '🔶', '本地生活服务平台', '美团,外卖,生活', 20000, 88, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 在线工具
(120, 102, 'JSON在线解析', 'https://www.json.cn', '🔧', 'JSON格式化与校验', 'JSON,工具,格式化', 8000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(121, 102, '草料二维码', 'https://cli.im', '🔲', '二维码生成与解码', '草料,二维码,工具', 5000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(122, 102, 'ProcessOn', 'https://www.processon.com', '🔵', '在线流程图与思维导图', 'ProcessOn,流程图,思维导图', 5000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(123, 102, '站长工具', 'https://tool.chinaz.com', '🔵', 'SEO与建站查询', '站长工具,SEO,查询', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(124, 102, 'Regex101', 'https://regex101.com', '🔴', '正则表达式在线测试', 'Regex,正则,海外', 4000, 82, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 行情理财
(125, 111, '东方财富', 'https://www.eastmoney.com', '🔴', '财经金融资讯门户', '东方财富,财经,股票', 16000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(126, 111, '同花顺', 'https://www.10jqka.com.cn', '🔴', '股票行情交易软件', '同花顺,股票,行情', 9000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(127, 111, '雪球', 'https://xueqiu.com', '🔴', '投资者社区与行情', '雪球,股票,投资', 9000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(128, 111, '天天基金', 'https://fund.eastmoney.com', '🔵', '基金净值与申购', '天天基金,基金,理财', 6000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 支付银行
(129, 112, '支付宝', 'https://www.alipay.com', '🔵', '支付就用支付宝', '支付宝,支付,金融', 40000, 100, 1, 1, 1, NULL, NULL, NULL, NULL, NULL),
(130, 112, '微信支付', 'https://pay.weixin.qq.com', '💚', '腾讯移动支付', '微信支付,支付,金融', 30000, 95, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(131, 112, '中国银联', 'https://www.unionpay.com', '🔴', '银行卡联合组织', '银联,银行,支付', 5000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(132, 112, '网银在线', 'https://www.chinabank.com.cn', '🔵', '京东旗下支付', '网银在线,支付,京东', 3000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 交通出行
(133, 121, '携程', 'https://www.ctrip.com', '🔵', '机票酒店预订平台', '携程,旅游,机票', 18000, 100, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(134, 121, '去哪儿', 'https://www.qunar.com', '🔶', '旅行预订搜索', '去哪儿,旅游,机票', 9000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(135, 121, '飞猪', 'https://www.fliggy.com', '🔴', '阿里旅行平台', '飞猪,旅游,机票', 8000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(136, 121, '12306', 'https://www.12306.cn', '🔴', '铁路购票官网', '12306,火车票,出行', 18000, 92, 1, 0, 1, NULL, NULL, NULL, NULL, NULL),
(137, 121, '高德打车', 'https://www.amap.com', '🔵', '一键呼叫网约车', '高德打车,出行,网约车', 6000, 88, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 住宿预订
(138, 122, '美团酒店', 'https://hotel.meituan.com', '🔶', '本地酒店预订', '美团,酒店,住宿', 12000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(139, 122, 'Airbnb', 'https://www.airbnb.cn', '🔴', '全球民宿短租', 'Airbnb,民宿,海外', 6000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(140, 122, 'Booking', 'https://www.booking.com', '🔵', '全球酒店预订', 'Booking,酒店,海外', 7000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(141, 122, '途家', 'https://www.tujia.com', '🔵', '国内民宿预订', '途家,民宿,住宿', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 在线问诊
(142, 131, '丁香医生', 'https://dxy.com', '🔴', '专业健康科普与问诊', '丁香医生,健康,问诊', 8000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(143, 131, '好大夫在线', 'https://www.haodf.com', '🔵', '医患对接问诊平台', '好大夫,问诊,医生', 6000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(144, 131, '微医', 'https://www.guahao.com', '🔵', '互联网医疗服务', '微医,挂号,问诊', 4000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(145, 131, '平安健康', 'https://health.pingan.com', '🔴', '平安互联网医疗', '平安健康,问诊,医疗', 4000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 健康科普
(146, 132, '丁香园', 'https://www.dxy.cn', '🔴', '医药健康专业社区', '丁香园,医学,科普', 5000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(147, 132, '腾讯健康', 'https://health.qq.com', '🔵', '腾讯健康科普服务', '腾讯健康,健康,科普', 4000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(148, 132, '39健康网', 'https://www.39.net', '🔵', '大众健康资讯门户', '39健康网,健康,科普', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 政务服务
(149, 141, '国家政务服务平台', 'https://gjzwfw.www.gov.cn', '🔴', '全国一体化政务门户', '国家政务,政务,服务', 6000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(150, 141, '粤省事', 'https://www.gdyxzc.gov.cn', '🔵', '广东政务服务小程序', '粤省事,政务,广东', 4000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(151, 141, '浙里办', 'https://www.zjzwfw.gov.cn', '🔵', '浙江政务服务门户', '浙里办,政务,浙江', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(152, 141, '国务院客户端', 'https://www.gov.cn', '🔴', '中央人民政府门户', '国务院,政务,政策', 3000, 85, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
-- 生活缴费
(153, 142, '社保查询', 'http://si.12333.gov.cn', '🔵', '全国社保公共服务', '社保,查询,缴费', 4000, 100, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(154, 142, '水电网缴费', 'https://www.95598.cn', '', '国家电网与公共事业', '水电,缴费,电网', 3000, 95, 0, 0, 1, NULL, NULL, NULL, NULL, NULL),
(155, 142, '个人所得税', 'https://etax.chinatax.gov.cn', '🔴', '自然人税务平台', '个税,税务,申报', 3000, 90, 0, 0, 1, NULL, NULL, NULL, NULL, NULL);
SET FOREIGN_KEY_CHECKS = 1;
-- 2. 写入导航配置项(已存在则忽略
INSERT IGNORE INTO `__PREFIX__haonav_config` (`id`, `name`, `group`, `title`, `tip`, `type`, `value`, `content`, `rule`, `extend`, `setting`) VALUES
(1, 'default_engine', 'site', '默认搜索引擎', '站内搜索框默认使用的搜索引擎', 'string', 'baidu', 'baidu,bing,google,sogou,site', 'required', '', ''),
(2, 'enable_submit', 'site', '开启网址投稿', '关闭后前台投稿将直接上架,无需审核', 'bool', '1', '', '', '', ''),
(3, 'enable_hot_api', 'site', '启用外部热榜', '开启后将尝试聚合外部热搜(可能较慢,失败自动降级)', 'bool', '0', '', '', '', ''),
(4, 'check_token', 'task', '死链检测令牌', 'cron 调用 /haonav/task/checklinks?token= 时校验,留空则拒绝执行', 'string', '', '', '', '', '');
@@ -74,24 +74,6 @@
</a>
{/volist}
</div>
<!-- 二级子分类 -->
{volist name="info.children" id="sub"}
<div class="sub-category" style="margin-top:24px;">
<div class="sub-title"><span>{$sub.icon} {$sub.title}</span></div>
<div class="website-list">
{volist name="sub.links" id="link"}
<a href="/haonav/site/{$link.id}.html" class="website-item">
<span class="website-item-icon"><img src="{$link.show_icon}" loading="lazy" alt="{$link.title}"></span>
<span class="website-item-info">
<h3>{$link.title}</h3>
<p>{$link.description|default='暂无描述'}</p>
</span>
<span class="qr-btn js-qr" data-url="{$link.url}" title="二维码"></span>
</a>
{/volist}
</div>
</div>
{/volist}
</div>
<div class="footer">
@@ -158,25 +158,6 @@
</div>
{/volist}
</div>
<!-- 二级子分类 -->
{volist name="vo.children" id="sub"}
<div class="sub-category">
<div class="sub-title"><span>{$sub.icon} {$sub.title}</span></div>
<div class="website-grid">
{volist name="sub.links" id="site"}
<div class="website-card" data-sid="{$site.id}">
<span class="fav-btn js-fav" data-id="{$site.id}" data-title="{$site.title}" data-url="{$site.url}" data-icon="{$site.show_icon}" title="收藏"></span>
<span class="qr-btn js-qr" data-url="{$site.url}" title="二维码"></span>
<a href="/haonav/site/{$site.id}.html" target="_blank" title="{$site.title}" style="text-decoration:none;color:inherit;display:block;">
<div class="website-icon"><img src="{$site.show_icon}" loading="lazy" alt="{$site.title}"></div>
<div class="website-name">{$site.title}</div>
{if $site.rating_count > 0}<div class="website-rating">⭐ {$site.rating}<span class="rc">({$site.rating_count})</span></div>{/if}
</a>
</div>
{/volist}
</div>
</div>
{/volist}
</div>
{/volist}
+1 -1
View File
@@ -52,7 +52,7 @@ return [
//API是否允许跨域
'api_cross' => false,
//版本号
'version' => '1.0.16',
'version' => '1.0.18',
//API接口地址(本地自测:指向本机;生产部署需改回 https://www.ywxapp.cn,并确保中心站已部署含 framework 路由的新版 market
'api_url' => env('APP_API_URL', 'https://www.ywxapp.cn'),
// 是否开启多语言
+7 -7
View File
@@ -143,7 +143,7 @@ INSERT INTO `__PREFIX__backend_power` (`id`, `pid`, `title`, `name`, `type`, `ro
(34, 11, '创建分组', 'group:create', 3, 'group/create', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(35, 11, '保存分组', 'group:save', 4, 'group/save', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(36, 11, '编辑分组', 'group:edit', 3, 'group/edit', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(37, 11, '更新分组', 'group:updae', 4, 'group/update', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(37, 11, '更新分组', 'group:update', 4, 'group/update', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(38, 11, '删除分组', 'group:delete', 4, 'group/delete', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(39, 12, '创建权限', 'rule:create', 3, 'rule/create', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(40, 12, '保存权限', 'rule:save', 4, 'rule/save', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
@@ -170,10 +170,10 @@ INSERT INTO `__PREFIX__backend_power` (`id`, `pid`, `title`, `name`, `type`, `ro
(61, 53, '电子商务', 'shop:index', 2, 'shop/index', '', 8, NULL, 1, 0, 0, 0),
(62, 53, '充值卡密', 'card:index', 2, 'card/index', '', 10, NULL, 1, 0, 0, 0),
(63, 53, '积分规则', 'score:index', 2, 'score/index', '', 11, NULL, 1, 0, 0, 0),
(64, 53, '主导航菜单', 'nav:index', 2, 'nav/index', 'layui-icon layui-icon-list', 12, NULL, 1, 0, 0, 0),
(65, 64, '添加菜单', 'nav:add', 3, 'nav/save', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(66, 64, '编辑菜单', 'nav:edit', 3, 'nav/edit', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(67, 64, '删除菜单', 'nav:delete', 3, 'nav/delete', 'layui-icon ', 0, NULL, 1, 0, 0, 0);
(64, 3, '主导航菜单', 'navbar:index', 2, 'navbar/index', 'layui-icon layui-icon-list', 12, NULL, 1, 0, 0, 0),
(65, 64, '添加菜单', 'navbar:add', 3, 'navbar/save', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(66, 64, '编辑菜单', 'navbar:edit', 3, 'navbar/edit', 'layui-icon ', 0, NULL, 1, 0, 0, 0),
(67, 64, '删除菜单', 'navbar:delete', 3, 'navbar/delete', 'layui-icon ', 0, NULL, 1, 0, 0, 0);
-- 导出 表 __PREFIX__backend_role 结构
CREATE TABLE IF NOT EXISTS `__PREFIX__backend_role` (
`id` int NOT NULL AUTO_INCREMENT,
@@ -705,7 +705,7 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__member_medal` (
KEY `idx_medal` (`medal_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户拥有勋章';
CREATE TABLE IF NOT EXISTS `__PREFIX__sms` (
CREATE TABLE IF NOT EXISTS `__PREFIX__sms_template` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(200) NOT NULL DEFAULT '' COMMENT '模板名称',
`code` varchar(50) NOT NULL DEFAULT '' COMMENT '模板标识',
@@ -716,7 +716,7 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__sms` (
`update_at` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
`delete_at` int(11) NOT NULL DEFAULT 0 COMMENT '删除时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='短信服务';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='短信模板表';
CREATE TABLE IF NOT EXISTS `__PREFIX__help` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,