chore: 重写初始提交(清空历史,整理后全量提交)
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
// 这是系统自动生成的公共文件
|
||||
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use think\Request;
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* About 类
|
||||
*
|
||||
* @author ywxapp <admin@ywxapp.cn>
|
||||
*/
|
||||
class About extends FrontendBase
|
||||
{
|
||||
/**
|
||||
* 显示资源列表
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('index', [
|
||||
'controller' => $this->request->controller(),
|
||||
'email' => $this->request->controller(),
|
||||
'latest_news' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示创建资源表单页.
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存新建的资源
|
||||
*
|
||||
* @param \think\Request $request
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function save(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示指定的资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function read($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示编辑资源表单页.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function edit($id = null)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存更新的资源
|
||||
*
|
||||
* @param \think\Request $request
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* 客户案例
|
||||
*/
|
||||
class Cases extends FrontendBase
|
||||
{
|
||||
protected $noNeedLogin = ['*'];
|
||||
protected $noNeedVerify = ['*'];
|
||||
|
||||
public function index()
|
||||
{
|
||||
$cases = [
|
||||
['title' => '某科技公司', 'brief' => '官网+电商一体化部署,3 天快速上线', 'logo' => '/static/frontend/img/case1.jpg'],
|
||||
['title' => '某制造企业', 'brief' => '会员与订单系统打通,运营效率提升 40%', 'logo' => '/static/frontend/img/case2.jpg'],
|
||||
['title' => '某教育机构', 'brief' => '表单引擎采集学员信息,转化率翻倍', 'logo' => '/static/frontend/img/case3.jpg'],
|
||||
['title' => '某零售连锁', 'brief' => '多门店统一后台,数据实时汇总', 'logo' => '/static/frontend/img/case4.jpg'],
|
||||
['title' => '某医疗平台', 'brief' => '在线预约与会员体系结合,服务更贴心', 'logo' => '/static/frontend/img/case5.jpg'],
|
||||
['title' => '某金融企业', 'brief' => '插件化风控模块,按需启用安全合规', 'logo' => '/static/frontend/img/case6.jpg'],
|
||||
['title' => '某物流公司', 'brief' => '订单追踪与支付打通,全程可视', 'logo' => '/static/frontend/img/case7.jpg'],
|
||||
['title' => '某政务系统', 'brief' => '多应用隔离部署,权限分级清晰', 'logo' => '/static/frontend/img/case8.jpg'],
|
||||
['title' => '某文创品牌', 'brief' => '精美模板 + 营销插件,品牌声量提升', 'logo' => '/static/frontend/img/case9.jpg'],
|
||||
];
|
||||
|
||||
return view('case/index', [
|
||||
'cases' => $cases,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use think\Request;
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* Contact 类
|
||||
*
|
||||
* @author ywxapp <admin@ywxapp.cn>
|
||||
*/
|
||||
class Contact extends FrontendBase
|
||||
{
|
||||
/**
|
||||
* 显示资源列表
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('index', [
|
||||
'controller' => $this->request->controller(),
|
||||
'email' => $this->request->controller(),
|
||||
'latest_news' => [ ],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示创建资源表单页.
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存新建的资源
|
||||
*
|
||||
* @param \think\Request $request
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function save(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示指定的资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function read($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示编辑资源表单页.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function edit($id = null)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存更新的资源
|
||||
*
|
||||
* @param \think\Request $request
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* 文档 / 示例入口(由 app/wxapp 合并至 app/frontend)
|
||||
*/
|
||||
class Doc extends FrontendBase
|
||||
{
|
||||
protected $noNeedLogin = ['index'];
|
||||
protected $noNeedVerify = ['*'];
|
||||
|
||||
public function index()
|
||||
{
|
||||
$docs = [
|
||||
[
|
||||
'title' => 'mqpay 支付钩子机制与时序图',
|
||||
'desc' => '事件系统、订阅器注册、会员开通链路详解',
|
||||
'path' => 'addon/mqpay/docs/payment_hooks.md',
|
||||
'url' => '/addon/mqpay/docs/payment_hooks.md',
|
||||
],
|
||||
[
|
||||
'title' => '安卓到账监听 App 接入指南',
|
||||
'desc' => '免签监听 App 对接 notify-app 接口说明',
|
||||
'path' => 'addon/mqpay/docs/listen_app_guide.md',
|
||||
'url' => '/addon/mqpay/docs/listen_app_guide.md',
|
||||
],
|
||||
[
|
||||
'title' => 'mqpay 插件总览',
|
||||
'desc' => '插件能力、配置项、钩子速查表',
|
||||
'path' => 'addon/mqpay/README.md',
|
||||
'url' => '/addon/mqpay/README.md',
|
||||
],
|
||||
];
|
||||
|
||||
return view('doc/index', [
|
||||
'controller' => $this->request->controller(),
|
||||
'docs' => $docs,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* 特性详情(由 app/wxapp 合并至 app/frontend)
|
||||
*/
|
||||
class Feature extends FrontendBase
|
||||
{
|
||||
protected $noNeedLogin = ['index', 'detail'];
|
||||
protected $noNeedVerify = ['*'];
|
||||
|
||||
// 四大特性元数据
|
||||
private $items = [
|
||||
'plugin' => [
|
||||
'title' => '插件机制',
|
||||
'summary' => '基于 ThinkPHP 事件系统 + 订阅器的热插拔插件架构。',
|
||||
'points' => [
|
||||
'插件在 info.php 的 events.subscribe 声明订阅器类',
|
||||
'AppService 启动时自动 loadEvent 注册,无需手动绑定',
|
||||
'订阅方法 onXxx 自动监听对应事件,与业务完全解耦',
|
||||
'后台可在线安装 / 启用 / 禁用 / 卸载',
|
||||
],
|
||||
'code' => "## 插件订阅器示例(mqpay)
|
||||
class Payment extends \\ywxapp\\addon {
|
||||
// 监听支付方式列表事件
|
||||
public function onPaymentMethods(\$event) {
|
||||
return ['personal' => ['name'=>'免签支付','sort'=>10]];
|
||||
}
|
||||
// 监听支付创建事件,生成收款码
|
||||
public function onPaymentCreate(\$event) { /* ... */ }
|
||||
}",
|
||||
],
|
||||
'multi-app' => [
|
||||
'title' => '多应用架构',
|
||||
'summary' => 'app 目录下按业务域拆分多个独立应用,互不干扰。',
|
||||
'points' => [
|
||||
'api → 对外 JSON 接口(移动端 / 第三方)',
|
||||
'backend → 管理后台(RBAC 权限)',
|
||||
'member → 会员中心(支付 / 订单 / 会员)',
|
||||
'frontend → 标准 Web 前端',
|
||||
'site → 本展示官网',
|
||||
],
|
||||
'code' => "# route/app.php 按应用分组
|
||||
Route::group('api', function () {
|
||||
Route::get('user/info', 'api/v1.user/info');
|
||||
});",
|
||||
],
|
||||
'member-pay' => [
|
||||
'title' => '会员 / 支付',
|
||||
'summary' => 'mqpay 免签支付 + 会员开通事件链,扫码到账自动开通。',
|
||||
'points' => [
|
||||
'免签支付:监听系统通知栏,到账自动确认',
|
||||
'安卓调用 POST /mqpay/pay/notify-app 验签确认',
|
||||
'confirmOrder() 触发 UserMemberActivate 事件',
|
||||
'会员监听器顺延会员期限并写入权益',
|
||||
],
|
||||
'code' => "// confirmOrder 内触发会员开通
|
||||
Event::trigger('UserMemberActivate', [
|
||||
'uid' => \$order['uid'],
|
||||
'plan_id' => \$order['plan_id'],
|
||||
'order' => \$order,
|
||||
'method' => 'personal',
|
||||
]);",
|
||||
],
|
||||
'doc' => [
|
||||
'title' => '文档 / 示例',
|
||||
'summary' => '完善的开发文档、API 示例与快速开始指南。',
|
||||
'points' => [
|
||||
'插件 README + docs 文档体系',
|
||||
'API 示例与请求 / 响应契约',
|
||||
'快速开始指南降低上手成本',
|
||||
'钩子 / 事件速查表一键索引',
|
||||
],
|
||||
'code' => "# 查看支付钩子文档
|
||||
addon/mqpay/docs/payment_hooks.md
|
||||
addon/mqpay/docs/listen_app_guide.md",
|
||||
],
|
||||
];
|
||||
|
||||
public function index()
|
||||
{
|
||||
return view('feature/index', [
|
||||
'controller' => $this->request->controller(),
|
||||
'items' => $this->items,
|
||||
]);
|
||||
}
|
||||
|
||||
public function detail($name = 'plugin')
|
||||
{
|
||||
if (!isset($this->items[$name])) {
|
||||
$name = 'plugin';
|
||||
}
|
||||
$item = $this->items[$name];
|
||||
return view('feature/detail', [
|
||||
'controller' => $this->request->controller(),
|
||||
'name' => $name,
|
||||
'item' => $item,
|
||||
'items' => $this->items,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use think\facade\Db;
|
||||
use ywxapp\controller\FrontendBase;
|
||||
use ywxapp\model\Help as HelpModel;
|
||||
|
||||
/**
|
||||
* 站点帮助中心(前台)
|
||||
*/
|
||||
class Help extends FrontendBase
|
||||
{
|
||||
/**
|
||||
* 帮助中心首页:按分类分组列出所有启用项
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$list = (new HelpModel())
|
||||
->where('status', 1)
|
||||
->order('sort', 'desc')
|
||||
->order('id', 'desc')
|
||||
->field('id,category,title,view_count')
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
$groups = [];
|
||||
foreach ($list as $item) {
|
||||
$cat = $item['category'] ?: '其他';
|
||||
$groups[$cat][] = $item;
|
||||
}
|
||||
|
||||
// 维护分类顺序(按首个条目出现顺序)
|
||||
$categories = [];
|
||||
foreach ($groups as $cat => $items) {
|
||||
$categories[] = ['name' => $cat, 'items' => $items];
|
||||
}
|
||||
|
||||
$this->assign('categories', $categories);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 帮助详情
|
||||
*/
|
||||
public function read($id = null)
|
||||
{
|
||||
if (empty($id)) {
|
||||
$this->error('参数错误');
|
||||
}
|
||||
$info = (new HelpModel())->where('id', $id)->where('status', 1)->find();
|
||||
if (empty($info)) {
|
||||
$this->error('帮助内容不存在或已下架');
|
||||
}
|
||||
// 浏览量自增
|
||||
Db::name('help')->where('id', $id)->inc('view_count')->update();
|
||||
|
||||
$this->assign('info', $info);
|
||||
return $this->fetch('read');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* Index 类
|
||||
*
|
||||
* @author ywxapp <admin@ywxapp.cn>
|
||||
*/
|
||||
class Index extends FrontendBase
|
||||
{
|
||||
|
||||
/**
|
||||
* Summary of needLogin
|
||||
* @var array
|
||||
*/
|
||||
protected $noNeedLogin = ["index", "hello"];
|
||||
/**
|
||||
* Summary of needRight
|
||||
* @var array
|
||||
*/
|
||||
protected $noNeedVerify = [];
|
||||
|
||||
/**
|
||||
* 控制器初始化 initialize
|
||||
* @return void
|
||||
*/
|
||||
protected function initialize()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
public function index()
|
||||
{
|
||||
// 模拟新闻数据(实际从数据库获取)
|
||||
$latest_news = [
|
||||
[
|
||||
'id' => 1,
|
||||
'title' => '公司荣获2023年度创新企业奖',
|
||||
'description' => '在近日举办的行业峰会上...',
|
||||
'create_at' => date('Y-m-d H:i:s'),
|
||||
'views' => 128,
|
||||
],
|
||||
[
|
||||
'id' => 2,
|
||||
'title' => '智创科技发布新一代企业服务平台',
|
||||
'description' => '全新平台整合了...',
|
||||
'create_at' => date('Y-m-d H:i:s',
|
||||
strtotime('-2 days')),
|
||||
'views' => 256,
|
||||
],
|
||||
// ...更多数据
|
||||
];
|
||||
|
||||
return view('index', [
|
||||
'site_name' => '智创科技',
|
||||
'seo_keywords' => '企业服务,数字化转型,软件开发',
|
||||
'seo_description' => '智创科技专注企业数字化解决方案,10年行业经验,服务1000+企业客户',
|
||||
'contact_phone' => '400-888-9999',
|
||||
'contact_email' => 'service@zhichuang.com',
|
||||
'company_address' => '北京市海淀区中关村大厦18层',
|
||||
'icp_number' => '京ICP备12345678号',
|
||||
'controller' => $this->request->controller(),
|
||||
'latest_news' => $latest_news,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function hello($name = 'ThinkPHP8')
|
||||
{
|
||||
return 'hello,' . $name;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use think\Request;
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* News 类
|
||||
*
|
||||
* @author ywxapp <admin@ywxapp.cn>
|
||||
*/
|
||||
class News extends FrontendBase
|
||||
{
|
||||
/**
|
||||
* 显示资源列表
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('index', [
|
||||
'controller' => $this->request->controller(),
|
||||
'email' => $this->request->controller(),
|
||||
'latest_news' => [],
|
||||
'news_list' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示创建资源表单页.
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存新建的资源
|
||||
*
|
||||
* @param \think\Request $request
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function save(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示指定的资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function read($id)
|
||||
{
|
||||
return view('read', [
|
||||
'controller' => $this->request->controller(),
|
||||
'email' => $this->request->controller(),
|
||||
'latest_news' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示编辑资源表单页.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function edit($id = null)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存更新的资源
|
||||
*
|
||||
* @param \think\Request $request
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use think\facade\Db;
|
||||
use think\facade\View;
|
||||
use ywxapp\controller\FrontendBase;
|
||||
use ywxapp\model\Notice as NoticeModel;
|
||||
|
||||
/**
|
||||
* 前台站点公告(方案 B:列表 + 详情)
|
||||
*/
|
||||
class Notice extends FrontendBase
|
||||
{
|
||||
protected $noNeedLogin = ['index', 'read'];
|
||||
|
||||
/**
|
||||
* 公告列表
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$page = $this->request->param('page/d', 1);
|
||||
$type = $this->request->param('type/d', 0);
|
||||
$list = NoticeModel::getList($page, 10, $type);
|
||||
|
||||
// 附加类型文案
|
||||
$typeList = NoticeModel::typeList();
|
||||
$items = $list->items();
|
||||
foreach ($items as &$it) {
|
||||
$it['type_text'] = $typeList[$it['type']] ?? '公告';
|
||||
}
|
||||
unset($it);
|
||||
|
||||
View::assign('title', '站点公告 - YwxApp');
|
||||
return view('index', [
|
||||
'type' => $type,
|
||||
'type_list' => $typeList,
|
||||
'list' => $list,
|
||||
'items' => $items,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 公告详情
|
||||
*/
|
||||
public function read($id = null)
|
||||
{
|
||||
$id = $id ?: $this->request->param('id/d');
|
||||
if (! $id) {
|
||||
$this->redirect('notice/index');
|
||||
}
|
||||
$info = (new NoticeModel())->where('status', 1)->find($id);
|
||||
if (! $info) {
|
||||
$this->redirect('notice/index');
|
||||
}
|
||||
// 浏览量自增(模型 view_count 为 readonly,用 Db 原生 inc 绕过)
|
||||
Db::name('notice')->where('id', $id)->inc('view_count')->update();
|
||||
$info->view_count = ($info->view_count ?? 0) + 1;
|
||||
$typeList = NoticeModel::typeList();
|
||||
$info->type_text = $typeList[$info['type']] ?? '公告';
|
||||
|
||||
View::assign('title', ($info->title ?? '公告详情') . ' - YwxApp');
|
||||
return view('read', [
|
||||
'info' => $info,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* 插件机制展示页(由 app/wxapp 合并至 app/frontend)
|
||||
*/
|
||||
class Plugin extends FrontendBase
|
||||
{
|
||||
protected $noNeedLogin = ['*'];
|
||||
protected $noNeedVerify = ['*'];
|
||||
|
||||
public function index()
|
||||
{
|
||||
// 展示应用市场在线插件列表(中心站读本地库 / 客户机代理中心站 API)
|
||||
$items = [];
|
||||
$categories = [];
|
||||
$errMsg = '';
|
||||
try {
|
||||
if (is_market_client()) {
|
||||
// 客户机:经 RemoteAppmallService 拉取中心站列表
|
||||
$resp = \ywxapp\service\RemoteAppmallService::instance()->lists([
|
||||
'page' => 1,
|
||||
'page_size' => 24,
|
||||
]);
|
||||
if (!empty($resp['success']) && !empty($resp['data']['list'])) {
|
||||
$items = $resp['data']['list'];
|
||||
} else {
|
||||
$errMsg = $resp['message'] ?? '暂无插件';
|
||||
}
|
||||
} else {
|
||||
// 中心站:直接读本地市场库(appmall_addon_list)
|
||||
$catalog = \addon\appmall\service\MarketService::instance()->catalog();
|
||||
$items = $catalog['list'] ?? [];
|
||||
$categories = $catalog['categories'] ?? [];
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$errMsg = '市场列表加载失败:' . $e->getMessage();
|
||||
}
|
||||
|
||||
$plugins = [];
|
||||
foreach ($items as $it) {
|
||||
$price = (float) ($it['price'] ?? 0);
|
||||
$plugins[] = [
|
||||
'id' => $it['id'] ?? 0,
|
||||
'name' => $it['name'] ?? '',
|
||||
'title' => $it['title'] ?? ($it['name'] ?? ''),
|
||||
'desc' => $it['intro'] ?? '',
|
||||
'version' => $it['version'] ?? '',
|
||||
'author' => $it['author'] ?? '',
|
||||
'logo' => $it['logo'] ?? '',
|
||||
'price' => $price,
|
||||
'price_text' => $price > 0 ? '¥' . number_format($price, 2) : '免费',
|
||||
'rating' => (float) ($it['rating'] ?? 0),
|
||||
'downloads' => (int) ($it['download_count'] ?? 0),
|
||||
'category' => $it['category'] ?? '',
|
||||
'type' => $it['type'] ?? 'addon',
|
||||
];
|
||||
}
|
||||
|
||||
return view('plugin/index', [
|
||||
'title' => '插件市场',
|
||||
'controller' => 'Plugin',
|
||||
'plugins' => $plugins,
|
||||
'categories' => $categories,
|
||||
'err_msg' => $errMsg,
|
||||
'hooks' => [],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use think\Request;
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* Product 类
|
||||
*
|
||||
* @author ywxapp <admin@ywxapp.cn>
|
||||
*/
|
||||
class Product extends FrontendBase
|
||||
{
|
||||
/**
|
||||
* 显示资源列表
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示创建资源表单页.
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存新建的资源
|
||||
*
|
||||
* @param \think\Request $request
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function save(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示指定的资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function read($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示编辑资源表单页.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function edit($id = null)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存更新的资源
|
||||
*
|
||||
* @param \think\Request $request
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\frontend\controller;
|
||||
|
||||
use ywxapp\controller\FrontendBase;
|
||||
|
||||
/**
|
||||
* 展示官网首页(由 app/wxapp 合并至 app/frontend)
|
||||
*/
|
||||
class Site extends FrontendBase
|
||||
{
|
||||
protected $noNeedLogin = ['*'];
|
||||
protected $noNeedVerify = ['*'];
|
||||
|
||||
public function index()
|
||||
{
|
||||
// 已启用插件数(扫描 addon 目录 + info.php)
|
||||
$plugins = $this->scanaddon();
|
||||
$pluginCount = count(array_filter($plugins, fn($p) => ($p['state'] ?? 0) == 1));
|
||||
// 应用模块数(app 目录下)
|
||||
$appDir = root_path() . 'app';
|
||||
$apps = array_filter(scandir($appDir), function ($d) use ($appDir) {
|
||||
return $d !== '.' && $d !== '..' && is_dir($appDir . DIRECTORY_SEPARATOR . $d);
|
||||
});
|
||||
|
||||
$features = [
|
||||
[
|
||||
'icon' => 'plugin',
|
||||
'title' => '插件机制',
|
||||
'desc' => '基于事件订阅器的热插拔插件,钩子自动注册,与业务完全解耦。',
|
||||
'url' => url('feature/detail', ['name' => 'plugin']),
|
||||
],
|
||||
[
|
||||
'icon' => 'app',
|
||||
'title' => '多应用架构',
|
||||
'desc' => 'api / backend / member / frontend 多应用隔离,路由分组清晰。',
|
||||
'url' => url('feature/detail', ['name' => 'multi-app']),
|
||||
],
|
||||
[
|
||||
'icon' => 'vip',
|
||||
'title' => '会员 / 支付',
|
||||
'desc' => 'mqpay 免签支付 + 会员开通事件链,扫码即到帐自动开通。',
|
||||
'url' => url('feature/detail', ['name' => 'member-pay']),
|
||||
],
|
||||
[
|
||||
'icon' => 'doc',
|
||||
'title' => '文档 / 示例',
|
||||
'desc' => '完善的开发文档、API 示例与快速开始指南,开箱即用。',
|
||||
'url' => url('feature/detail', ['name' => 'doc']),
|
||||
],
|
||||
];
|
||||
|
||||
return view('site/index', [
|
||||
'controller' => $this->request->controller(),
|
||||
'features' => $features,
|
||||
'pluginCount' => $pluginCount,
|
||||
'appCount' => count($apps),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫描 addon 目录,读取各插件 info.php
|
||||
*/
|
||||
private function scanaddon(): array
|
||||
{
|
||||
$dir = root_path() . 'addon';
|
||||
$list = [];
|
||||
if (!is_dir($dir)) {
|
||||
return $list;
|
||||
}
|
||||
foreach (scandir($dir) as $name) {
|
||||
if ($name === '.' || $name === '..' || !is_dir($dir . DIRECTORY_SEPARATOR . $name)) {
|
||||
continue;
|
||||
}
|
||||
$infoFile = $dir . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'info.php';
|
||||
if (!is_file($infoFile)) {
|
||||
continue;
|
||||
}
|
||||
$info = include $infoFile;
|
||||
if (is_array($info)) {
|
||||
$list[] = $info;
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
// 这是系统自动生成的event定义文件
|
||||
return [
|
||||
|
||||
];
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
// 这是系统自动生成的middleware定义文件
|
||||
return [
|
||||
|
||||
];
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: ywxapp<admin@ywxapp.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
use think\facade\Route;
|
||||
|
||||
///Route::rule('login/index', '\app\member\controller\Login@index');
|
||||
|
||||
Route::rule('login', \app\member\controller\Login::class . '@index');
|
||||
//Route::rule('/', \addon\demo\controller\Index::class . '@index');
|
||||
@@ -0,0 +1,160 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="{:url('index/index')}"><i class="layui-icon layui-icon-home"></i> 首页</a>
|
||||
<a><cite>关于我们</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
<h1 class="page-title">关于我们</h1>
|
||||
<p class="page-desc">了解我们的故事、使命与价值观</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="about-section">
|
||||
<div class="layui-container">
|
||||
<div class="about-intro">
|
||||
<div class="layui-row layui-col-space30">
|
||||
<div class="layui-col-md6">
|
||||
<div class="intro-content">
|
||||
<h2>企业简介</h2>
|
||||
<p class="highlight">{$site_name|default='智创科技'}成立于2010年,是一家专注于企业数字化转型的高新技术企业。</p>
|
||||
<p>我们拥有200+专业团队,服务覆盖全国30+城市,累计为1000+企业提供优质解决方案。公司始终秉持"客户至上、创新驱动、诚信共赢"的核心价值观,致力于成为最受尊敬的企业服务品牌。</p>
|
||||
<p>凭借深厚的技术积累和行业洞察,我们已成功帮助众多企业实现业务增长与效率提升,在金融、制造、零售、政务等多个领域树立了标杆案例。</p>
|
||||
<a href="{:url('page/contact')}" class="layui-btn intro-btn">联系我们 <i class="layui-icon layui-icon-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md6">
|
||||
<div class="intro-image">
|
||||
<img src="/static/images/about-img.jpg" alt="公司环境" loading="lazy">
|
||||
<div class="image-badge">10年行业经验</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stats-section">
|
||||
<div class="layui-row layui-col-space20">
|
||||
<div class="layui-col-md3 layui-col-sm6">
|
||||
<div class="stat-item">
|
||||
<div class="num">10<span>年</span></div>
|
||||
<div class="label">行业经验</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3 layui-col-sm6">
|
||||
<div class="stat-item">
|
||||
<div class="num">1000<span>+</span></div>
|
||||
<div class="label">服务客户</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3 layui-col-sm6">
|
||||
<div class="stat-item">
|
||||
<div class="num">200<span>+</span></div>
|
||||
<div class="label">专业团队</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3 layui-col-sm6">
|
||||
<div class="stat-item">
|
||||
<div class="num">99<span>%</span></div>
|
||||
<div class="label">客户满意度</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="culture-section">
|
||||
<h2 class="section-title">企业文化</h2>
|
||||
<div class="layui-row layui-col-space30">
|
||||
<div class="layui-col-md4">
|
||||
<div class="culture-card">
|
||||
<div class="culture-icon"><i class="layui-icon layui-icon-heart"></i></div>
|
||||
<h3>企业使命</h3>
|
||||
<p>用科技赋能企业,助力客户实现可持续增长</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="culture-card">
|
||||
<div class="culture-icon"><i class="layui-icon layui-icon-auz"></i></div>
|
||||
<h3>企业愿景</h3>
|
||||
<p>成为全球领先的企业数字化服务提供商</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="culture-card">
|
||||
<div class="culture-icon"><i class="layui-icon layui-icon-dialogue"></i></div>
|
||||
<h3>核心价值观</h3>
|
||||
<p>诚信 · 创新 · 协作 · 共赢</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="timeline-section">
|
||||
<h2 class="section-title">发展历程</h2>
|
||||
<div class="timeline">
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-dot"></div>
|
||||
<div class="timeline-content">
|
||||
<h4>2010年</h4>
|
||||
<p>公司成立,专注企业软件定制开发</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-dot"></div>
|
||||
<div class="timeline-content">
|
||||
<h4>2015年</h4>
|
||||
<p>服务客户突破300家,获得国家高新技术企业认证</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-dot"></div>
|
||||
<div class="timeline-content">
|
||||
<h4>2019年</h4>
|
||||
<p>推出企业数字化平台,服务范围扩展至全国</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-dot"></div>
|
||||
<div class="timeline-content">
|
||||
<h4>2023年</h4>
|
||||
<p>客户数量突破1000家,启动国际化战略</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.about-intro { margin: 50px 0; }
|
||||
.intro-content h2 { font-size: 28px; margin-bottom: 20px; color: #333; }
|
||||
.highlight { font-weight: bold; color: #1E9FFF; margin: 15px 0; display: block; }
|
||||
.intro-btn { margin-top: 20px; background: #1E9FFF; border-color: #1E9FFF; }
|
||||
.intro-image { position: relative; border-radius: 8px; overflow: hidden; box-shadow: 0 5px 20px rgba(0,0,0,0.15); }
|
||||
.image-badge { position: absolute; bottom: 20px; right: 20px; background: rgba(30, 159, 255, 0.9); color: #fff; padding: 5px 15px; border-radius: 20px; font-weight: bold; }
|
||||
.stats-section { background: #f9f9f9; padding: 40px 0; margin: 40px 0; border-radius: 8px; }
|
||||
.stat-item { text-align: center; padding: 20px; }
|
||||
.num { font-size: 42px; font-weight: bold; color: #1E9FFF; margin-bottom: 10px; }
|
||||
.num span { font-size: 24px; }
|
||||
.label { font-size: 16px; color: #666; }
|
||||
.culture-card { text-align: center; padding: 30px 20px; border-radius: 8px; background: #fff; box-shadow: 0 3px 10px rgba(0,0,0,0.08); transition: transform 0.3s; margin-bottom: 20px; }
|
||||
.culture-card:hover { transform: translateY(-5px); }
|
||||
.culture-icon { width: 80px; height: 80px; line-height: 80px; margin: 0 auto 20px; border-radius: 50%; background: #e9f7fe; color: #1E9FFF; font-size: 32px; }
|
||||
.timeline { position: relative; padding-left: 30px; margin-top: 30px; }
|
||||
.timeline::before { content: ''; position: absolute; left: 0; top: 10px; bottom: 10px; width: 2px; background: #e9e9e9; }
|
||||
.timeline-item { position: relative; padding-left: 30px; margin-bottom: 30px; }
|
||||
.timeline-dot { position: absolute; left: -9px; top: 5px; width: 16px; height: 16px; border-radius: 50%; background: #1E9FFF; border: 3px solid #fff; box-shadow: 0 0 0 2px #1E9FFF; }
|
||||
.timeline-content { background: #f9f9f9; padding: 15px 20px; border-radius: 6px; position: relative; }
|
||||
.timeline-content::before { content: ''; position: absolute; left: -10px; top: 15px; width: 0; height: 0; border-top: 6px solid transparent; border-bottom: 6px solid transparent; border-right: 10px solid #f9f9f9; }
|
||||
@media (max-width: 768px) {
|
||||
.stats-section .layui-col-sm6 { margin-bottom: 20px; }
|
||||
.timeline { padding-left: 25px; }
|
||||
.timeline::before { left: 5px; }
|
||||
.timeline-item { padding-left: 25px; }
|
||||
.timeline-dot { left: -7px; }
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,32 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<h2>客户案例</h2>
|
||||
<p>已服务数千家企业客户,用实力见证价值</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="layui-container">
|
||||
<div class="card-grid">
|
||||
{notempty name="cases"}
|
||||
{volist name="cases" id="c"}
|
||||
<div class="case-card">
|
||||
<img src="{$c.logo}" style="width:100%;height:180px;object-fit:cover;border-radius:8px;margin-bottom:14px;" alt="{$c.title}">
|
||||
<h4>{$c.title}</h4>
|
||||
<p>{$c.brief}</p>
|
||||
</div>
|
||||
{/volist}
|
||||
{else/}
|
||||
<div class="empty-tip"><i class="layui-icon layui-icon-app"></i>暂无案例</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="home-cta">
|
||||
<div class="layui-container">
|
||||
<h3>想成为下一个成功案例?</h3>
|
||||
<p>立即联系我们,获取专属数字化解决方案</p>
|
||||
<a href="{:url('contact/index')}" class="banner-btn">联系我们</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,9 @@
|
||||
<div class="section" style="text-align:center;padding:80px 0;">
|
||||
<div class="layui-container">
|
||||
<img src="/static/frontend/img/logo.png" style="width:80px;margin-bottom:20px;" alt="404">
|
||||
<h1 style="font-size:120px;color:#1E9FFF;font-weight:bold;line-height:1;margin:0;">404</h1>
|
||||
<p style="font-size:18px;color:#666;margin:20px 0 30px;">抱歉,您访问的页面不存在或已被移除</p>
|
||||
<a href="{:url('index/index')}" class="layui-btn layui-btn-normal" style="height:44px;line-height:44px;padding:0 40px;font-size:16px;">返回首页</a>
|
||||
<a href="{:url('contact/index')}" class="layui-btn layui-btn-primary" style="height:44px;line-height:44px;padding:0 40px;font-size:16px;margin-left:12px;">联系我们</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,29 @@
|
||||
{notempty name="adSlots[$slot]"}
|
||||
<div class="ad-slot ad-slot-{$slot}">
|
||||
{volist name="adSlots[$slot]" id="ad"}
|
||||
<div class="ad-item ad-type-{$ad.type}">
|
||||
{switch name="ad.type"}
|
||||
{case value="1"}
|
||||
{if condition="$ad.url"}
|
||||
<a href="{$ad.url}" target="_blank" rel="nofollow">
|
||||
<img src="{$ad.image}" alt="{$ad.title}" title="{$ad.title}">
|
||||
</a>
|
||||
{else /}
|
||||
<img src="{$ad.image}" alt="{$ad.title}" title="{$ad.title}">
|
||||
{/if}
|
||||
{/case}
|
||||
{case value="2"}
|
||||
{if condition="$ad.url"}
|
||||
<a href="{$ad.url}" target="_blank" rel="nofollow" class="ad-text-link">{$ad.content}</a>
|
||||
{else /}
|
||||
<span class="ad-text">{$ad.content}</span>
|
||||
{/if}
|
||||
{/case}
|
||||
{case value="3"}
|
||||
{$ad.content|raw}
|
||||
{/case}
|
||||
{/switch}
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
{/notempty}
|
||||
@@ -0,0 +1,25 @@
|
||||
<div class="footer">
|
||||
<div class="layui-container">
|
||||
<p class="footer-web">
|
||||
{volist name="links" id="link"}
|
||||
<a href="{$link.url}">{$link.title}</a>
|
||||
{/volist}
|
||||
</p>
|
||||
<div class="layui-row footer-contact">
|
||||
<div class="layui-col-sm2 layui-col-lg1"><img src="/static/frontend/img/erweima.jpg"></div>
|
||||
<div class="layui-col-sm10 layui-col-lg11">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-sm6 layui-col-md8 layui-col-lg9">
|
||||
<p class="contact-top"><i class="layui-icon layui-icon-cellphone"></i>{$siteConf.telephone|default='YwxApp'} (9:00-18:00)</p>
|
||||
<p class="contact-bottom"><i class="layui-icon layui-icon-home"></i>{$siteConf.site_email|default='YwxApp'} </span></p>
|
||||
</div>
|
||||
<div class="layui-col-sm6 layui-col-md4 layui-col-lg3">
|
||||
<p class="contact-top"><span class="right"> © 2023 {$siteConf.site_name|default='YwxApp'} 版权所有</span>
|
||||
<p class="contact-bottom"><span class="right"> <a href="http://beian.miit.gov.cn" target="_blank" class="icp-link">{$siteConf.beian|default='京ICP备12345678号'}</a></span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
<!-- 全站置顶公告条(方案 A) -->
|
||||
{notempty name="topNotices"}
|
||||
<div class="site-notice-bar" id="siteNoticeBar">
|
||||
{volist name="topNotices" id="nt"}
|
||||
<div class="notice-item notice-type-{$nt.type}" data-id="{$nt.id}">
|
||||
<span class="notice-badge">{$nt.type_text|default='公告'}</span>
|
||||
<span class="notice-title">{$nt.title}</span>
|
||||
<a href="{:url('notice/read', ['id'=>$nt.id])}" class="notice-link">查看详情</a>
|
||||
<span class="notice-close" data-id="{$nt.id}" title="关闭">×</span>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
var KEY = 'closed_notices';
|
||||
try {
|
||||
var closed = JSON.parse(localStorage.getItem(KEY) || '[]');
|
||||
document.querySelectorAll('#siteNoticeBar .notice-item').forEach(function (el) {
|
||||
if (closed.indexOf(el.getAttribute('data-id')) > -1) el.style.display = 'none';
|
||||
});
|
||||
document.querySelectorAll('#siteNoticeBar .notice-close').forEach(function (btn) {
|
||||
btn.addEventListener('click', function () {
|
||||
var id = btn.getAttribute('data-id');
|
||||
btn.closest('.notice-item').style.display = 'none';
|
||||
var arr = JSON.parse(localStorage.getItem(KEY) || '[]');
|
||||
if (arr.indexOf(id) === -1) { arr.push(id); localStorage.setItem(KEY, JSON.stringify(arr)); }
|
||||
});
|
||||
});
|
||||
} catch (e) {}
|
||||
})();
|
||||
</script>
|
||||
{/notempty}
|
||||
|
||||
<!-- 重构导航:彻底解决移动端Logo重合 -->
|
||||
<header class="main-header">
|
||||
<div class="layui-container header-container">
|
||||
<div class="header-inner">
|
||||
<div class="logo-box">
|
||||
<a href="{:url('index/index')}" class=" ">
|
||||
<span class="logo-text">{$siteConf.sitename|default='YwxApp'}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="nav-trigger" id="navToggle">
|
||||
<span></span><span></span><span></span>
|
||||
</div>
|
||||
<ul class="nav-menu" id="navMenu">
|
||||
{volist name="navMenus" id="m"}
|
||||
<li class="nav-item {if $m.ctrl == $site.controller}active{/if}{if !empty($m.child)} has-child{/if}">
|
||||
<a href="{if strpos($m.url,'http')===0}{$m.url}{else/}{:url($m.url)}{/if}">
|
||||
{if !empty($m.icon)}<i class="layui-icon {$m.icon}"></i> {/if}{$m.title}
|
||||
</a>
|
||||
{if !empty($m.child)}
|
||||
<ul class="sub-menu">
|
||||
{volist name="m.child" id="c"}
|
||||
<li class="sub-item {if $c.ctrl == $site.controller}active{/if}">
|
||||
<a href="{if strpos($c.url,'http')===0}{$c.url}{else/}{:url($c.url)}{/if}">
|
||||
{if !empty($c.icon)}<i class="layui-icon {$c.icon}"></i> {/if}{$c.title}
|
||||
</a>
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
{/if}
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
@@ -0,0 +1,130 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>{$title|default='YwxApp'}</title>
|
||||
<meta name="keywords" content="{$seo_keywords|default=''}">
|
||||
<meta name="description" content="{$seo_description|default=''}">
|
||||
<link rel="stylesheet" href="/assets/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="/static/frontend/css/responsive.css?v=3.0">
|
||||
<link rel="stylesheet" href="/static/frontend/css/style.css?v=1.2">
|
||||
{block name="style"}{/block}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{include file="common/header" /}
|
||||
|
||||
<main class="main-wrapper">
|
||||
{__CONTENT__}
|
||||
</main>
|
||||
|
||||
{include file="common/footer" /}
|
||||
|
||||
<!-- 首页底部广告位(全站预埋钩子:仅当挂在首页时由 index 页控制,此处留作通用容器) -->
|
||||
{notempty name="adSlots.home_bottom"}
|
||||
<div class="ad-slot ad-slot-home_bottom">
|
||||
{volist name="adSlots.home_bottom" id="ad"}
|
||||
<div class="ad-item ad-type-{$ad.type}">
|
||||
{switch name="ad.type"}
|
||||
{case value="1"}<a href="{$ad.url}" target="_blank" rel="nofollow"><img src="{$ad.image}" alt="{$ad.title}" title="{$ad.title}"></a>{/case}
|
||||
{case value="2"}<a href="{$ad.url}" target="_blank" rel="nofollow" class="ad-text-link">{$ad.content}</a>{/case}
|
||||
{case value="3"}{$ad.content|raw}{/case}
|
||||
{/switch}
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
<!-- 全站悬浮角标广告位(固定右下角,无数据时自动隐藏) -->
|
||||
{notempty name="adSlots.float"}
|
||||
<div class="ad-float" id="adFloat">
|
||||
{volist name="adSlots.float" id="ad"}
|
||||
<div class="ad-float-item ad-type-{$ad.type}">
|
||||
{switch name="ad.type"}
|
||||
{case value="1"}<a href="{$ad.url}" target="_blank" rel="nofollow"><img src="{$ad.image}" alt="{$ad.title}" title="{$ad.title}"></a>{/case}
|
||||
{case value="2"}<a href="{$ad.url}" target="_blank" rel="nofollow" class="ad-text-link">{$ad.content}</a>{/case}
|
||||
{case value="3"}{$ad.content|raw}{/case}
|
||||
{/switch}
|
||||
</div>
|
||||
{/volist}
|
||||
<span class="ad-float-close" id="adFloatClose" title="关闭">×</span>
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
<!-- 全站弹窗广告位 -->
|
||||
{notempty name="adSlots.popup"}
|
||||
<div class="ad-popup-mask" id="adPopupMask">
|
||||
<div class="ad-popup-box">
|
||||
<span class="ad-popup-close" id="adPopupClose" title="关闭">×</span>
|
||||
{volist name="adSlots.popup" id="ad"}
|
||||
<div class="ad-popup-item ad-type-{$ad.type}">
|
||||
{switch name="ad.type"}
|
||||
{case value="1"}
|
||||
{if condition="$ad.url"}<a href="{$ad.url}" target="_blank" rel="nofollow">{/if}
|
||||
<img src="{$ad.image}" alt="{$ad.title}" title="{$ad.title}">
|
||||
{if condition="$ad.url"}</a>{/if}
|
||||
{/case}
|
||||
{case value="2"}
|
||||
{if condition="$ad.url"}<a href="{$ad.url}" target="_blank" rel="nofollow" class="ad-text-link">{/if}{$ad.content}{if condition="$ad.url"}</a>{/if}
|
||||
{/case}
|
||||
{case value="3"}
|
||||
{$ad.content|raw}
|
||||
{/case}
|
||||
{/switch}
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
<script src="/assets/layui/layui.js"></script>
|
||||
<script src="/static/frontend/js/main.js?v=2.1"></script>
|
||||
{block name="script"}{/block}
|
||||
<script>
|
||||
(function () {
|
||||
var mask = document.getElementById('adPopupMask');
|
||||
if (!mask) return;
|
||||
var KEY = 'closed_popup_ads';
|
||||
try {
|
||||
if (localStorage.getItem(KEY) === '1') { mask.style.display = 'none'; return; }
|
||||
} catch (e) {}
|
||||
mask.style.display = 'flex';
|
||||
var closeBtn = document.getElementById('adPopupClose');
|
||||
if (closeBtn) {
|
||||
closeBtn.addEventListener('click', function () {
|
||||
mask.style.display = 'none';
|
||||
try { localStorage.setItem(KEY, '1'); } catch (e) {}
|
||||
});
|
||||
mask.addEventListener('click', function (e) {
|
||||
if (e.target === mask) {
|
||||
mask.style.display = 'none';
|
||||
try { localStorage.setItem(KEY, '1'); } catch (e) {}
|
||||
}
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
||||
// 全站悬浮角标广告:关闭按钮
|
||||
(function () {
|
||||
var box = document.getElementById('adFloat');
|
||||
if (!box) return;
|
||||
var KEY = 'closed_float_ads';
|
||||
try {
|
||||
if (localStorage.getItem(KEY) === '1') { box.style.display = 'none'; return; }
|
||||
} catch (e) {}
|
||||
var closeBtn = document.getElementById('adFloatClose');
|
||||
if (closeBtn) {
|
||||
closeBtn.addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
box.style.display = 'none';
|
||||
try { localStorage.setItem(KEY, '1'); } catch (e2) {}
|
||||
});
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,250 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="{:url('index/index')}"><i class="layui-icon layui-icon-home"></i> 首页</a>
|
||||
<a><cite>联系我们</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
<h1 class="page-title">联系我们</h1>
|
||||
<p class="page-desc">期待与您合作,共创美好未来</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="contact-section">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row layui-col-space30">
|
||||
<div class="layui-col-md6">
|
||||
<div class="contact-info-panel">
|
||||
<h2><i class="layui-icon layui-icon-location"></i> 联系方式</h2>
|
||||
<div class="info-grid">
|
||||
<div class="info-item">
|
||||
<div class="icon"><i class="layui-icon layui-icon-cellphone"></i></div>
|
||||
<div class="content">
|
||||
<h4>联系电话</h4>
|
||||
<p><a href="tel:{$contact_phone|default='4008889999'}" class="phone-link">{$contact_phone|default='400-888-9999'}</a></p>
|
||||
<p class="desc">工作日 9:00-18:00</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<div class="icon"><i class="layui-icon layui-icon-email"></i></div>
|
||||
<div class="content">
|
||||
<h4>电子邮箱</h4>
|
||||
<p><a href="mailto:{$contact_email|default='service@zhichuang.com'}">{$contact_email|default='service@zhichuang.com'}</a></p>
|
||||
<p class="desc">24小时内回复</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<div class="icon"><i class="layui-icon layui-icon-location"></i></div>
|
||||
<div class="content">
|
||||
<h4>公司地址</h4>
|
||||
<p>{$company_address|default='北京市海淀区中关村大厦18层'}</p>
|
||||
<p class="desc">欢迎来访,请提前预约</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<div class="icon"><i class="layui-icon layui-icon-time"></i></div>
|
||||
<div class="content">
|
||||
<h4>工作时间</h4>
|
||||
<p>周一至周五 9:00 - 18:00</p>
|
||||
<p class="desc">节假日除外</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="map-container">
|
||||
<h2><i class="layui-icon layui-icon-map"></i> 公司位置</h2>
|
||||
<div id="baiduMap" style="height: 300px; border-radius: 8px; overflow: hidden; box-shadow: 0 3px 10px rgba(0,0,0,0.1);"></div>
|
||||
<p class="map-tip">* 地图位置仅供参考,具体位置请以实际导航为准</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md6">
|
||||
<div class="message-panel">
|
||||
<h2><i class="layui-icon layui-icon-edit"></i> 在线留言</h2>
|
||||
<form class="layui-form" action="" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">您的姓名</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="name" required lay-verify="required" placeholder="请输入姓名" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">联系电话</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="tel" name="phone" required lay-verify="phone" placeholder="请输入手机号" autocomplete="off" 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" lay-verify="email" placeholder="请输入邮箱" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">留言类型</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="type" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
<option value="1">商务合作</option>
|
||||
<option value="2">技术支持</option>
|
||||
<option value="3">人才招聘</option>
|
||||
<option value="4">其他咨询</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">留言内容</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="content" required lay-verify="required" placeholder="请输入留言内容(至少10字)" class="layui-textarea" lay-verify="content"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">验证码</label>
|
||||
<div class="layui-input-inline" style="width: 150px;">
|
||||
<input type="text" name="captcha" required lay-verify="required" placeholder="请输入验证码" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid">
|
||||
<img src="/static/images/captcha.jpg" alt="验证码" class="captcha-img" id="captchaImg">
|
||||
<a href="javascript:;" id="refreshCaptcha" class="refresh-link">看不清?换一张</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn btn-submit" lay-submit lay-filter="formSubmit">提交留言</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置内容</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-tip">
|
||||
<p><i class="layui-icon layui-icon-dialogue"></i> 我们将在24小时内回复您的留言,请保持电话畅通</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 服务网点 -->
|
||||
<div class="branch-section">
|
||||
<div class="layui-container">
|
||||
<h2 class="section-title">全国服务网点</h2>
|
||||
<div class="branch-grid">
|
||||
<div class="branch-item">
|
||||
<h4>北京总部</h4>
|
||||
<p>北京市海淀区中关村大厦18层</p>
|
||||
<p>010-8888 9999</p>
|
||||
</div>
|
||||
<div class="branch-item">
|
||||
<h4>上海分公司</h4>
|
||||
<p>上海市浦东新区陆家嘴环路1000号</p>
|
||||
<p>021-6666 8888</p>
|
||||
</div>
|
||||
<div class="branch-item">
|
||||
<h4>深圳分公司</h4>
|
||||
<p>深圳市南山区科技园科兴科学园A座</p>
|
||||
<p>0755-2222 6666</p>
|
||||
</div>
|
||||
<div class="branch-item">
|
||||
<h4>成都分公司</h4>
|
||||
<p>成都市高新区天府大道北段1700号</p>
|
||||
<p>028-5555 7777</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://api.map.baidu.com/api?v=3.0&ak=您的百度地图AK"></script>
|
||||
<script>
|
||||
layui.use(['form', 'layer'], function(){
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
|
||||
// 表单验证
|
||||
form.verify({
|
||||
content: function(value){
|
||||
if(value.length < 10){
|
||||
return '留言内容不能少于10个字符';
|
||||
}
|
||||
},
|
||||
phone: [/^1[3-9]\d{9}$/, '手机号格式不正确']
|
||||
});
|
||||
|
||||
// 表单提交
|
||||
form.on('submit(formSubmit)', function(data){
|
||||
// 实际项目中应通过AJAX提交
|
||||
layer.msg('留言提交成功!我们将在24小时内与您联系', {icon: 1, time: 3000});
|
||||
// 清空表单(实际项目中应保留用户输入)
|
||||
// this.reset();
|
||||
return false; // 阻止表单跳转
|
||||
});
|
||||
|
||||
// 刷新验证码
|
||||
document.getElementById('refreshCaptcha').onclick = function(){
|
||||
var img = document.getElementById('captchaImg');
|
||||
img.src = '/static/images/captcha.jpg?t=' + new Date().getTime();
|
||||
};
|
||||
|
||||
// 百度地图初始化
|
||||
function initMap() {
|
||||
var map = new BMap.Map("baiduMap");
|
||||
var point = new BMap.Point(116.331398, 39.897445); // 示例坐标(北京)
|
||||
map.centerAndZoom(point, 16);
|
||||
map.enableScrollWheelZoom(true);
|
||||
|
||||
// 添加标注
|
||||
var marker = new BMap.Marker(point);
|
||||
map.addOverlay(marker);
|
||||
|
||||
// 添加信息窗口
|
||||
var infoWindow = new BMap.InfoWindow("<b>智创科技总部</b><br>北京市海淀区中关村大厦18层");
|
||||
marker.addEventListener("click", function(){
|
||||
this.openInfoWindow(infoWindow);
|
||||
});
|
||||
marker.openInfoWindow(infoWindow);
|
||||
}
|
||||
|
||||
// 延迟初始化地图(确保容器已渲染)
|
||||
setTimeout(initMap, 500);
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.contact-info-panel h2, .message-panel h2, .map-container h2 {
|
||||
border-left: 3px solid #1E9FFF;
|
||||
padding-left: 12px;
|
||||
margin-bottom: 25px;
|
||||
font-size: 20px;
|
||||
}
|
||||
.info-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
|
||||
.info-item { display: flex; padding: 15px; background: #f9f9f9; border-radius: 6px; transition: all 0.3s; }
|
||||
.info-item:hover { background: #e9f7fe; transform: translateX(5px); }
|
||||
.icon { width: 40px; height: 40px; line-height: 40px; text-align: center; border-radius: 50%; background: #1E9FFF; color: #fff; flex-shrink: 0; margin-right: 15px; font-size: 18px; }
|
||||
.content h4 { font-weight: bold; margin-bottom: 5px; color: #333; font-size: 16px; }
|
||||
.content p { margin: 3px 0; color: #666; }
|
||||
.phone-link { color: #1E9FFF; font-weight: bold; font-size: 18px; display: block; margin: 3px 0; }
|
||||
.desc { color: #999; font-size: 13px; }
|
||||
.map-tip { text-align: center; color: #999; font-size: 13px; margin-top: 8px; }
|
||||
.message-panel .layui-form-label { width: 80px; padding-left: 10px; }
|
||||
.message-panel .layui-input-block { margin-left: 100px; }
|
||||
.captcha-img { height: 38px; border-radius: 4px; vertical-align: middle; margin-right: 8px; }
|
||||
.refresh-link { color: #1E9FFF; font-size: 13px; vertical-align: middle; }
|
||||
.form-tip { margin-top: 15px; padding: 12px; background: #e9f7fe; border-radius: 4px; color: #1E9FFF; }
|
||||
.form-tip i { margin-right: 5px; }
|
||||
.branch-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 25px; margin-top: 30px; }
|
||||
.branch-item { text-align: center; padding: 25px 15px; background: #fff; border-radius: 8px; box-shadow: 0 3px 10px rgba(0,0,0,0.08); transition: all 0.3s; }
|
||||
.branch-item:hover { transform: translateY(-5px); box-shadow: 0 5px 15px rgba(0,0,0,0.15); }
|
||||
.branch-item h4 { color: #1E9FFF; font-size: 18px; margin-bottom: 10px; }
|
||||
.branch-item p { color: #666; line-height: 1.6; margin: 5px 0; }
|
||||
@media (max-width: 768px) {
|
||||
.info-grid { grid-template-columns: 1fr; }
|
||||
.message-panel .layui-form-label { width: 70px; }
|
||||
.message-panel .layui-input-block { margin-left: 80px; }
|
||||
.branch-grid { grid-template-columns: 1fr; }
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,25 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<h2>开发文档</h2>
|
||||
<p>完善的文档与示例,助你快速上手 YwxApp</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="layui-container">
|
||||
<div class="doc-list">
|
||||
{notempty name="docs"}
|
||||
{volist name="docs" id="d"}
|
||||
<a class="doc-item" href="{$d.url}" target="_blank">
|
||||
<span class="doc-tag">文档</span>
|
||||
<span class="doc-title">{$d.title}</span>
|
||||
<span class="doc-time" style="flex:1;text-align:left;margin-left:10px;color:#999;">{$d.desc}</span>
|
||||
<span class="doc-arrow">↗</span>
|
||||
</a>
|
||||
{/volist}
|
||||
{else/}
|
||||
<div class="doc-item"><span class="doc-tag">文档</span><span class="doc-title">暂无文档</span></div>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,43 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<h2>{$item.title|default='特性详情'}</h2>
|
||||
<p>功能特性 / 详细说明</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row layui-col-space30">
|
||||
<div class="layui-col-md9">
|
||||
<div class="news-detail">
|
||||
<div class="detail-title">{$item.title|default='特性详情'}</div>
|
||||
<div class="detail-content">
|
||||
<p style="font-size:16px;color:#555;margin-bottom:20px;">{$item.summary|default=''}</p>
|
||||
<h4 style="margin:20px 0 12px;color:#1E9FFF;">核心要点</h4>
|
||||
<ul class="feature-points">
|
||||
{notempty name="item.points"}
|
||||
{volist name="item.points" id="pt"}<li><i class="layui-icon layui-icon-ok-circle"></i> {$pt}</li>{/volist}
|
||||
{/notempty}
|
||||
</ul>
|
||||
<h4 style="margin:24px 0 12px;color:#1E9FFF;">代码示例</h4>
|
||||
<pre class="code-block">{$item.code|default='// 暂无示例'}</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top:24px;">
|
||||
<a href="{:url('feature/index')}" class="layui-btn layui-btn-primary">< 返回特性列表</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="feature-card" style="text-align:left;">
|
||||
<div class="icon"><i class="layui-icon layui-icon-list"></i></div>
|
||||
<h4>全部特性</h4>
|
||||
{notempty name="items"}
|
||||
{volist name="items" id="it"}
|
||||
<p style="margin:6px 0;"><a href="{:url('feature/detail', ['name'=>$key])}" style="color:#666;">• {$it.title}</a></p>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,51 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<h2>功能特性</h2>
|
||||
<p>深入了解 YwxApp 框架的设计理念与核心能力</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="layui-container">
|
||||
<div class="card-grid">
|
||||
{notempty name="items"}
|
||||
{volist name="items" id="it"}
|
||||
<div class="feature-card">
|
||||
<div class="icon"><i class="layui-icon layui-icon-{$it.icon|default='component'}"></i></div>
|
||||
<h4>{$it.title}</h4>
|
||||
<p>{$it.summary}</p>
|
||||
<a href="{:url('feature/detail', ['name'=>$key])}" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">查看详情</a>
|
||||
</div>
|
||||
{/volist}
|
||||
{else/}
|
||||
<div class="feature-card"><div class="icon"><i class="layui-icon layui-icon-plugin"></i></div><h4>插件机制</h4><p>热插拔插件架构</p></div>
|
||||
<div class="feature-card"><div class="icon"><i class="layui-icon layui-icon-app"></i></div><h4>多应用架构</h4><p>多应用隔离</p></div>
|
||||
<div class="feature-card"><div class="icon"><i class="layui-icon layui-icon-vip"></i></div><h4>会员/支付</h4><p>免签支付链路</p></div>
|
||||
<div class="feature-card"><div class="icon"><i class="layui-icon layui-icon-doc"></i></div><h4>文档/示例</h4><p>完善文档体系</p></div>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 详情锚点区 -->
|
||||
<div class="section" style="background:#f7f9fb;">
|
||||
<div class="layui-container">
|
||||
{notempty name="items"}
|
||||
{volist name="items" id="it"}
|
||||
<div class="about-section" id="{$key}" style="margin-bottom:50px;">
|
||||
<div class="about-text">
|
||||
<h3>{$it.title}</h3>
|
||||
<p>{$it.summary}</p>
|
||||
<ul class="feature-points">
|
||||
{volist name="it.points" id="pt"}<li><i class="layui-icon layui-icon-ok-circle"></i> {$pt}</li>{/volist}
|
||||
</ul>
|
||||
<a href="{:url('feature/detail', ['name'=>$key])}" class="layui-btn layui-btn-normal layui-btn-sm">阅读完整说明</a>
|
||||
</div>
|
||||
<div class="about-img">
|
||||
<pre class="code-block">{$it.code|default=''}</pre>
|
||||
</div>
|
||||
</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,90 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="{:url('index/index')}"><i class="layui-icon layui-icon-home"></i> 首页</a>
|
||||
<a><cite>帮助中心</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
<h1 class="page-title">帮助中心</h1>
|
||||
<p class="page-desc">新手指南、常见问题与使用说明,帮你快速上手</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="help-section">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row layui-col-space30">
|
||||
<div class="layui-col-md3">
|
||||
<div class="help-sidemenu">
|
||||
{volist name="categories" id="cat"}
|
||||
<div class="help-sidemenu-group">
|
||||
<div class="help-sidemenu-title">{$cat.name}</div>
|
||||
<ul>
|
||||
{volist name="cat.items" id="item"}
|
||||
<li><a href="{:url('help/read', ['id'=>$item.id])}">{$item.title}</a></li>
|
||||
{/volist}
|
||||
</ul>
|
||||
</div>
|
||||
{/volist}
|
||||
{empty name="categories"}
|
||||
<div class="empty-container">
|
||||
<i class="layui-icon layui-icon-face-smile" style="font-size: 60px; color: #ccc;"></i>
|
||||
<p>暂无帮助内容</p>
|
||||
</div>
|
||||
{/empty}
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md9">
|
||||
<div class="help-content-card">
|
||||
{volist name="categories" id="cat"}
|
||||
<div class="help-block">
|
||||
<h2 class="help-block-title">{$cat.name}</h2>
|
||||
<ul class="help-block-list">
|
||||
{volist name="cat.items" id="item"}
|
||||
<li>
|
||||
<a href="{:url('help/read', ['id'=>$item.id])}" class="help-link">
|
||||
<span class="help-link-title">{$item.title}</span>
|
||||
<span class="help-link-meta"><i class="layui-icon layui-icon-eye"></i> {$item.view_count|default=0}</span>
|
||||
</a>
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
</div>
|
||||
{/volist}
|
||||
{empty name="categories"}
|
||||
<div class="empty-container">
|
||||
<i class="layui-icon layui-icon-face-smile" style="font-size: 60px; color: #ccc;"></i>
|
||||
<p>暂无帮助内容</p>
|
||||
</div>
|
||||
{/empty}
|
||||
</div>
|
||||
<!-- 列表底部广告位 -->
|
||||
{assign name="slot" value="list_bottom" /}{include file="common/adslot" /}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.help-sidemenu { background: #fff; border: 1px solid #eee; border-radius: 8px; padding: 12px 0; position: sticky; top: 20px; }
|
||||
.help-sidemenu-group { padding: 8px 0; }
|
||||
.help-sidemenu-group + .help-sidemenu-group { border-top: 1px solid #f5f5f5; }
|
||||
.help-sidemenu-title { font-weight: 700; color: #333; padding: 6px 18px; font-size: 14px; }
|
||||
.help-sidemenu ul { list-style: none; margin: 0; padding: 0; }
|
||||
.help-sidemenu li a { display: block; padding: 6px 18px 6px 28px; color: #666; text-decoration: none; font-size: 14px; }
|
||||
.help-sidemenu li a:hover { background: #f0f7ff; color: #1E9FFF; }
|
||||
.help-content-card { background: #fff; border: 1px solid #eee; border-radius: 8px; padding: 24px 28px; }
|
||||
.help-block + .help-block { margin-top: 26px; padding-top: 26px; border-top: 1px solid #f0f0f0; }
|
||||
.help-block-title { font-size: 18px; font-weight: 700; color: #222; margin: 0 0 14px; }
|
||||
.help-block-list { list-style: none; margin: 0; padding: 0; }
|
||||
.help-block-list li { border-bottom: 1px solid #f5f5f5; }
|
||||
.help-block-list li:last-child { border-bottom: none; }
|
||||
.help-link { display: flex; align-items: center; justify-content: space-between; padding: 12px 6px; color: #444; text-decoration: none; transition: color .2s; }
|
||||
.help-link:hover { color: #1E9FFF; }
|
||||
.help-link-title { font-size: 15px; }
|
||||
.help-link-meta { color: #999; font-size: 13px; display: inline-flex; align-items: center; gap: 3px; }
|
||||
</style>
|
||||
@@ -0,0 +1,51 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="{:url('index/index')}"><i class="layui-icon layui-icon-home"></i> 首页</a>
|
||||
<a href="{:url('help/index')}">帮助中心</a>
|
||||
<a><cite>{$info.title|default=''}</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="help-detail">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="help-detail-card">
|
||||
<div class="help-detail-head">
|
||||
{notempty name="info.category"}<span class="help-badge">{$info.category}</span>{/notempty}
|
||||
<h1 class="help-detail-title">{$info.title}</h1>
|
||||
<div class="help-detail-meta">
|
||||
<span><i class="layui-icon layui-icon-date"></i> {$info.create_at|substr=0,16}</span>
|
||||
<span><i class="layui-icon layui-icon-eye"></i> {$info.view_count|default=0}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="help-detail-content">
|
||||
{:nl2br(htmlspecialchars($info.content))}
|
||||
</div>
|
||||
<div class="help-detail-back">
|
||||
<a href="{:url('help/index')}" class="layui-btn layui-btn-primary"><i class="layui-icon layui-icon-return"></i> 返回帮助中心</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.help-detail-card { background: #fff; border: 1px solid #eee; border-radius: 8px; padding: 30px 36px; margin-bottom: 30px; }
|
||||
.help-detail-head { border-bottom: 1px solid #f0f0f0; padding-bottom: 18px; margin-bottom: 22px; }
|
||||
.help-badge { display: inline-block; color: #fff; background: #16b8a6; border-radius: 3px; padding: 2px 10px; font-size: 13px; margin-bottom: 10px; }
|
||||
.help-detail-title { font-size: 24px; font-weight: 700; color: #222; margin: 12px 0 14px; line-height: 1.4; }
|
||||
.help-detail-meta { display: flex; flex-wrap: wrap; gap: 18px; color: #999; font-size: 13px; }
|
||||
.help-detail-meta span { display: inline-flex; align-items: center; gap: 3px; }
|
||||
.help-detail-content { font-size: 15px; line-height: 2; color: #444; white-space: pre-wrap; word-break: break-word; }
|
||||
.help-detail-back { margin-top: 30px; }
|
||||
</style>
|
||||
@@ -0,0 +1,125 @@
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="/static/frontend/css/index.css">
|
||||
{/block}
|
||||
|
||||
<!-- banner部分 -->
|
||||
<div>
|
||||
<div class="layui-carousel" id="banner">
|
||||
<div carousel-item>
|
||||
<div>
|
||||
<img src="/static/frontend/img/banner1.jpg">
|
||||
<div class="panel">
|
||||
<p class="title">网络公司</p>
|
||||
<p>完美前端体验</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<img src="/static/frontend/img/banner2.jpg">
|
||||
<div class="panel">
|
||||
<p class="title">网络公司</p>
|
||||
<p>完美前端体验</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 首页顶部横幅广告位 -->
|
||||
{assign name="slot" value="home_top" /}{include file="common/adslot" /}
|
||||
<!-- main部分 -->
|
||||
<div class="main-product">
|
||||
<div class="layui-container">
|
||||
<p class="title">专为前端而研制的<span>核心产品</span></p>
|
||||
<div class="layui-row layui-col-space25">
|
||||
<div class="layui-col-sm6 layui-col-md3">
|
||||
<div class="content">
|
||||
<div><img src="/static/frontend/img/Big_icon1.png"></div>
|
||||
<div>
|
||||
<p class="label">JS基础库</p>
|
||||
<p>从小屏逐步扩展到大屏,最终实现所有屏幕适配,适应移动互联潮流。</p>
|
||||
</div>
|
||||
<a href="javascript:;">查看产品 ></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-sm6 layui-col-md3 ">
|
||||
<div class="content">
|
||||
<div><img src="/static/frontend/img/Big_icon2.png"></div>
|
||||
<div>
|
||||
<p class="label">CSS处理</p>
|
||||
<p>从小屏逐步扩展到大屏,最终实现所有屏幕适配,适应移动互联潮流。</p>
|
||||
</div>
|
||||
<a href="javascript:;">查看产品 ></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-sm6 layui-col-md3 ">
|
||||
<div class="content">
|
||||
<div><img src="/static/frontend/img/Big_icon3.png"></div>
|
||||
<div>
|
||||
<p class="label">兼容性</p>
|
||||
<p>从小屏逐步扩展到大屏,最终实现所有屏幕适配,适应移动互联潮流。</p>
|
||||
</div>
|
||||
<a href="javascript:;">查看产品 ></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-sm6 layui-col-md3 ">
|
||||
<div class="content">
|
||||
<div><img src="/static/frontend/img/Big_icon4.png"></div>
|
||||
<div>
|
||||
<p class="label">响应式</p>
|
||||
<p>从小屏逐步扩展到大屏,最终实现所有屏幕适配,适应移动互联潮流。</p>
|
||||
</div>
|
||||
<a href="javascript:;">查看产品 ></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-service">
|
||||
<div class="layui-container">
|
||||
<!-- 首页侧边广告位(右侧浮层) -->
|
||||
{assign name="slot" value="home_side" /}{include file="common/adslot" /}
|
||||
<p class="title">为客户打造完美的<span>专业服务</span></p>
|
||||
<div class="layui-row layui-col-space25 layui-col-space80">
|
||||
<div class="layui-col-sm6">
|
||||
<div class="content">
|
||||
<div class="content-left"><img src="/static/frontend/img/home_img1.jpg"></div>
|
||||
<div class="content-right">
|
||||
<p class="label">1 对 1 前端指导</p>
|
||||
<span></span>
|
||||
<p>更有多个包含不同主题的Web组件,可快速构建界面出色、体验优秀的跨屏页面,大幅提升开发效率。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-sm6">
|
||||
<div class="content">
|
||||
<div class="content-left"><img src="/static/frontend/img/home_img2.jpg"></div>
|
||||
<div class="content-right">
|
||||
<p class="label">1 对 1 前端指导</p>
|
||||
<span></span>
|
||||
<p>更有多个包含不同主题的Web组件,可快速构建界面出色、体验优秀的跨屏页面,大幅提升开发效率。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-sm6">
|
||||
<div class="content">
|
||||
<div class="content-left"><img src="/static/frontend/img/home_img3.jpg"></div>
|
||||
<div class="content-right">
|
||||
<p class="label">1 对 1 前端指导</p>
|
||||
<span></span>
|
||||
<p>更有多个包含不同主题的Web组件,可快速构建界面出色、体验优秀的跨屏页面,大幅提升开发效率。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-sm6">
|
||||
<div class="content">
|
||||
<div class="content-left"><img src="/static/frontend/img/home_img4.jpg"></div>
|
||||
<div class="content-right">
|
||||
<p class="label">1 对 1 前端指导</p>
|
||||
<span></span>
|
||||
<p>更有多个包含不同主题的Web组件,可快速构建界面出色、体验优秀的跨屏页面,大幅提升开发效率。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="service-more"><a href="">查看更多</a></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,118 @@
|
||||
<div class="page-header detail-header" style="background-image: linear-gradient(rgba(0,0,0,0.7), rgba(0,0,0,0.7)), url('{$news.thumb|default='/static/images/news-banner.jpg'}')">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="{:url('index/index')}"><i class="layui-icon layui-icon-home"></i> 首页</a>
|
||||
<a href="{:url('news/index')}">企业动态</a>
|
||||
<a><cite>{$news.category_name|default='公司新闻'}</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
<h1 class="detail-title">{$news.title}</h1>
|
||||
<div class="detail-meta">
|
||||
<span><i class="layui-icon layui-icon-date"></i> {:date('Y-m-d H:i', strtotime($news.create_time))}</span>
|
||||
<span><i class="layui-icon layui-icon-user"></i> {$news.author|default='智创科技'}</span>
|
||||
<span><i class="layui-icon layui-icon-eye"></i> 浏览 {$news.views|default=0} 次</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row layui-col-space30">
|
||||
<div class="layui-col-md8 layui-col-sm12">
|
||||
<div class="article-content">
|
||||
{:htmlspecialchars_decode($news.content)}
|
||||
</div>
|
||||
|
||||
<div class="article-tags">
|
||||
<span class="label">标签:</span>
|
||||
{volist name=":explode(',', $news.tags)" id="tag"}
|
||||
<span class="tag-item">{$tag}</span>
|
||||
{/volist}
|
||||
</div>
|
||||
|
||||
<div class="article-nav">
|
||||
{if condition="$prev"}
|
||||
<a href="{:url('news/detail', ['id'=>$prev.id])}" class="prev-article">
|
||||
<i class="layui-icon layui-icon-left"></i> 上一篇:{$prev.title|mb_substr=0,25,'utf-8'}
|
||||
</a>
|
||||
{/if}
|
||||
{if condition="$next"}
|
||||
<a href="{:url('news/detail', ['id'=>$next.id])}" class="next-article">
|
||||
下一篇:{$next.title|mb_substr=0,25,'utf-8'} <i class="layui-icon layui-icon-right"></i>
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="related-news">
|
||||
<h3>相关推荐</h3>
|
||||
<div class="news-list">
|
||||
{volist name="related_news" id="vo" length="3"}
|
||||
<div class="news-item simple">
|
||||
<span class="date">{:date('m-d', strtotime($vo.create_time))}</span>
|
||||
<a href="{:url('news/detail', ['id'=>$vo.id])}">{$vo.title|mb_substr=0,30,'utf-8'}</a>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md4 layui-col-sm12">
|
||||
<div class="sidebar-panel">
|
||||
<h3><i class="layui-icon layui-icon-note"></i> 最新动态</h3>
|
||||
<ul class="sidebar-list">
|
||||
{volist name="sidebar_news" id="vo" length="5"}
|
||||
<li>
|
||||
<a href="{:url('news/detail', ['id'=>$vo.id])}">
|
||||
<span class="date">{:date('m-d', strtotime($vo.create_time))}</span>
|
||||
<span class="title">{$vo.title|mb_substr=0,28,'utf-8'}</span>
|
||||
</a>
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sidebar-panel mt20">
|
||||
<h3><i class="layui-icon layui-icon-service"></i> 联系我们</h3>
|
||||
<div class="contact-mini">
|
||||
<p><i class="layui-icon layui-icon-cellphone"></i> {$contact_phone|default='400-888-9999'}</p>
|
||||
<p><i class="layui-icon layui-icon-email"></i> {$contact_email|default='service@zhichuang.com'}</p>
|
||||
<a href="{:url('page/contact')}" class="layui-btn layui-btn-sm layui-btn-fluid">立即咨询</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.detail-header { height: 400px; background-size: cover; background-position: center; color: #fff; text-align: center; padding-top: 100px; }
|
||||
.detail-title { font-size: 36px; margin: 20px 0; text-shadow: 0 2px 5px rgba(0,0,0,0.3); }
|
||||
.detail-meta { font-size: 16px; color: rgba(255,255,255,0.9); margin-top: 15px; }
|
||||
.detail-meta span { margin: 0 15px; }
|
||||
@media (max-width: 768px) {
|
||||
.detail-header { height: 320px; padding-top: 80px; }
|
||||
.detail-title { font-size: 26px; }
|
||||
.detail-meta { font-size: 14px; flex-wrap: wrap; }
|
||||
}
|
||||
.article-content { line-height: 1.8; font-size: 16px; color: #333; margin-bottom: 30px; }
|
||||
.article-content img { max-width: 100%; height: auto; margin: 15px 0; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
|
||||
.article-tags { margin: 25px 0; padding: 15px; background: #f9f9f9; border-radius: 4px; }
|
||||
.tag-item { display: inline-block; padding: 3px 10px; margin: 5px 5px 0 0; background: #e9f7fe; color: #1E9FFF; border-radius: 3px; font-size: 13px; }
|
||||
.article-nav { display: flex; justify-content: space-between; margin: 30px 0; }
|
||||
.article-nav a { display: block; padding: 12px 20px; background: #f5f5f5; border-radius: 4px; color: #333; transition: all 0.3s; width: 48%; }
|
||||
.article-nav a:hover { background: #1E9FFF; color: #fff; transform: translateY(-2px); }
|
||||
@media (max-width: 768px) {
|
||||
.article-nav { flex-direction: column; }
|
||||
.article-nav a { width: 100%; margin-bottom: 10px; }
|
||||
}
|
||||
.related-news h3, .sidebar-panel h3 { border-left: 3px solid #1E9FFF; padding-left: 10px; margin-bottom: 15px; font-size: 18px; }
|
||||
.sidebar-list li { padding: 10px 0; border-bottom: 1px dashed #eee; }
|
||||
.sidebar-list li:last-child { border-bottom: none; }
|
||||
.sidebar-list .date { color: #999; font-size: 13px; margin-right: 8px; display: inline-block; width: 40px; }
|
||||
.contact-mini p { margin: 8px 0; font-size: 14px; }
|
||||
</style>
|
||||
@@ -0,0 +1,93 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="{:url('index/index')}"><i class="layui-icon layui-icon-home"></i> 首页</a>
|
||||
<a><cite>企业动态</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
<h1 class="page-title">企业动态</h1>
|
||||
<p class="page-desc">了解我们的最新动态与行业洞察</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="news-section">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="news-filter">
|
||||
<div class="filter-title">分类筛选:</div>
|
||||
<ul class="filter-list">
|
||||
<li class="active">全部</li>
|
||||
<li>公司新闻</li>
|
||||
<li>行业动态</li>
|
||||
<li>技术分享</li>
|
||||
<li>客户案例</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="news-grid">
|
||||
{volist name="news_list" id="vo"}
|
||||
<div class="news-card">
|
||||
<div class="news-thumb">
|
||||
<a href="{:url('news/detail', ['id'=>$vo.id])}">
|
||||
<img src="{$vo.thumb|default='/static/images/news-default.jpg'}" alt="{$vo.title}" loading="lazy">
|
||||
<div class="overlay"></div>
|
||||
<div class="date-tag">
|
||||
<span class="day">{:date('d', strtotime($vo.create_time))}</span>
|
||||
<span class="month">{:date('m', strtotime($vo.create_time))}月</span>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="news-content">
|
||||
<div class="category-tag">{$vo.category_name|default='公司新闻'}</div>
|
||||
<h3><a href="{:url('news/detail', ['id'=>$vo.id])}">{$vo.title}</a></h3>
|
||||
<p class="summary">{$vo.description|default=mb_substr(strip_tags($vo.content),0,80,'utf-8')}</p>
|
||||
<div class="news-footer">
|
||||
<div class="meta">
|
||||
<span><i class="layui-icon layui-icon-date"></i> {:date('Y-m-d', strtotime($vo.create_time))}</span>
|
||||
<span><i class="layui-icon layui-icon-eye"></i> {$vo.views|default=0}</span>
|
||||
</div>
|
||||
<a href="{:url('news/detail', ['id'=>$vo.id])}" class="read-more">阅读更多 <i class="layui-icon layui-icon-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/volist}
|
||||
|
||||
{empty name="news_list"}
|
||||
<div class="empty-container">
|
||||
<i class="layui-icon layui-icon-face-smile" style="font-size: 60px; color: #ccc;"></i>
|
||||
<p>暂无动态数据,敬请期待</p>
|
||||
</div>
|
||||
{/empty}
|
||||
</div>
|
||||
|
||||
<!-- 分页 -->
|
||||
{notempty name="news_list"}
|
||||
<div class="page-pagination">
|
||||
{$news_list->render()}
|
||||
</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
<!-- 列表底部广告位 -->
|
||||
{assign name="slot" value="list_bottom" /}{include file="common/adslot" /}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.news-filter { margin-bottom: 30px; padding: 15px 0; border-bottom: 1px solid #eee; }
|
||||
.filter-title { display: inline-block; font-weight: bold; margin-right: 15px; color: #333; }
|
||||
.filter-list { display: inline-block; }
|
||||
.filter-list li { display: inline-block; padding: 5px 15px; margin-right: 8px; border-radius: 20px; background: #f5f5f5; cursor: pointer; transition: all 0.3s; }
|
||||
.filter-list li.active, .filter-list li:hover { background: #1E9FFF; color: #fff; }
|
||||
.news-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 25px; }
|
||||
@media (max-width: 768px) {
|
||||
.news-grid { grid-template-columns: 1fr; }
|
||||
.filter-list li { padding: 4px 12px; font-size: 13px; }
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,99 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="{:url('index/index')}"><i class="layui-icon layui-icon-home"></i> 首页</a>
|
||||
<a><cite>站点公告</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
<h1 class="page-title">站点公告</h1>
|
||||
<p class="page-desc">系统维护、活动与版本更新等官方通知</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="news-section">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="news-filter">
|
||||
<div class="filter-title">分类筛选:</div>
|
||||
<ul class="filter-list">
|
||||
<li class="{eq name='type' value='0'}active{/eq}"><a href="{:url('notice/index', ['type'=>0])}">全部</a></li>
|
||||
{volist name="type_list" id="t"}
|
||||
<li class="{eq name='type' value='$key'}active{/eq}"><a href="{:url('notice/index', ['type'=>$key])}">{$t}</a></li>
|
||||
{/volist}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="notice-list">
|
||||
{volist name="items" id="vo"}
|
||||
<div class="notice-row {eq name='vo.is_top' value='1'}is-top{/eq}">
|
||||
<div class="notice-row-head">
|
||||
<span class="notice-badge notice-type-{$vo.type}">{$vo.type_text}</span>
|
||||
{eq name='vo.is_top' value='1'}<span class="top-flag">置顶</span>{/eq}
|
||||
<a href="{:url('notice/read', ['id'=>$vo.id])}" class="notice-row-title">{$vo.title}</a>
|
||||
</div>
|
||||
<div class="notice-row-summary">{:mb_substr(strip_tags($vo.content),0,120,'utf-8')}{:strlen(strip_tags($vo.content))>120?'…':''}</div>
|
||||
<div class="notice-row-meta">
|
||||
<span><i class="layui-icon layui-icon-user"></i> {$vo.author|default='官方'}</span>
|
||||
<span><i class="layui-icon layui-icon-date"></i> {$vo.create_at|substr=0,16}</span>
|
||||
<span><i class="layui-icon layui-icon-eye"></i> {$vo.view_count|default=0}</span>
|
||||
{if condition="$vo.start_time > 0 || $vo.end_time > 0"}
|
||||
<span><i class="layui-icon layui-icon-time"></i>
|
||||
{$vo.start_time>0?date('Y-m-d',$vo.start_time):'长期'} ~
|
||||
{$vo.end_time>0?date('Y-m-d',$vo.end_time):'长期'}
|
||||
</span>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/volist}
|
||||
|
||||
{empty name="items"}
|
||||
<div class="empty-container">
|
||||
<i class="layui-icon layui-icon-face-smile" style="font-size: 60px; color: #ccc;"></i>
|
||||
<p>暂无公告</p>
|
||||
</div>
|
||||
{/empty}
|
||||
</div>
|
||||
|
||||
{notempty name="list"}
|
||||
<div class="page-pagination">
|
||||
{$list->render()}
|
||||
</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
<!-- 列表底部广告位 -->
|
||||
{assign name="slot" value="list_bottom" /}{include file="common/adslot" /}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.notice-list { display: flex; flex-direction: column; gap: 14px; }
|
||||
.notice-row { background: #fff; border: 1px solid #eee; border-radius: 8px; padding: 16px 18px; transition: box-shadow .2s; }
|
||||
.notice-row:hover { box-shadow: 0 4px 16px rgba(0,0,0,.08); }
|
||||
.notice-row.is-top { border-color: #ffe58f; background: #fffdf5; }
|
||||
.notice-row-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
|
||||
.notice-badge { flex: none; color: #fff; border-radius: 3px; padding: 1px 8px; font-size: 12px; background: #8c8c8c; }
|
||||
.notice-type-1 { background: #1890ff; }
|
||||
.notice-type-2 { background: #fa8c16; }
|
||||
.notice-type-3 { background: #52c41a; }
|
||||
.notice-type-4 { background: #8c8c8c; }
|
||||
.top-flag { flex: none; color: #d46b08; font-size: 12px; border: 1px solid #ffd591; border-radius: 3px; padding: 0 6px; }
|
||||
.notice-row-title { font-size: 16px; font-weight: 600; color: #333; text-decoration: none; }
|
||||
.notice-row-title:hover { color: #1E9FFF; }
|
||||
.notice-row-summary { color: #666; font-size: 14px; line-height: 1.7; margin-bottom: 10px; }
|
||||
.notice-row-meta { display: flex; flex-wrap: wrap; gap: 16px; color: #999; font-size: 13px; }
|
||||
.notice-row-meta span { display: inline-flex; align-items: center; gap: 3px; }
|
||||
.news-filter { margin-bottom: 24px; padding: 15px 0; border-bottom: 1px solid #eee; }
|
||||
.filter-title { display: inline-block; font-weight: bold; margin-right: 15px; color: #333; }
|
||||
.filter-list { display: inline-block; }
|
||||
.filter-list li { display: inline-block; padding: 5px 15px; margin-right: 8px; border-radius: 20px; background: #f5f5f5; }
|
||||
.filter-list li.active, .filter-list li:hover { background: #1E9FFF; }
|
||||
.filter-list li.active a, .filter-list li:hover a { color: #fff; }
|
||||
.filter-list li a { color: #555; text-decoration: none; }
|
||||
</style>
|
||||
@@ -0,0 +1,64 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="breadcrumb">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="{:url('index/index')}"><i class="layui-icon layui-icon-home"></i> 首页</a>
|
||||
<a href="{:url('notice/index')}">站点公告</a>
|
||||
<a><cite>{$info.title|default=''}</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="notice-detail">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="notice-detail-card">
|
||||
<div class="notice-detail-head">
|
||||
<span class="notice-badge notice-type-{$info.type}">{$info.type_text}</span>
|
||||
{eq name='info.is_top' value='1'}<span class="top-flag">置顶</span>{/eq}
|
||||
<h1 class="notice-detail-title">{$info.title}</h1>
|
||||
<div class="notice-detail-meta">
|
||||
<span><i class="layui-icon layui-icon-user"></i> {$info.author|default='官方'}</span>
|
||||
<span><i class="layui-icon layui-icon-date"></i> {$info.create_at|substr=0,16}</span>
|
||||
<span><i class="layui-icon layui-icon-eye"></i> {$info.view_count|default=0}</span>
|
||||
{if condition="$info.start_time > 0 || $info.end_time > 0"}
|
||||
<span><i class="layui-icon layui-icon-time"></i>
|
||||
{$info.start_time>0?date('Y-m-d',$info.start_time):'长期'} ~
|
||||
{$info.end_time>0?date('Y-m-d',$info.end_time):'长期'}
|
||||
</span>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="notice-detail-content">
|
||||
{:nl2br(htmlspecialchars($info.content))}
|
||||
</div>
|
||||
<div class="notice-detail-back">
|
||||
<a href="{:url('notice/index')}" class="layui-btn layui-btn-primary"><i class="layui-icon layui-icon-return"></i> 返回公告列表</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.notice-detail-card { background: #fff; border: 1px solid #eee; border-radius: 8px; padding: 30px 36px; margin-bottom: 30px; }
|
||||
.notice-detail-head { border-bottom: 1px solid #f0f0f0; padding-bottom: 18px; margin-bottom: 22px; }
|
||||
.notice-badge { display: inline-block; color: #fff; border-radius: 3px; padding: 2px 10px; font-size: 13px; background: #8c8c8c; }
|
||||
.notice-type-1 { background: #1890ff; }
|
||||
.notice-type-2 { background: #fa8c16; }
|
||||
.notice-type-3 { background: #52c41a; }
|
||||
.notice-type-4 { background: #8c8c8c; }
|
||||
.top-flag { display: inline-block; color: #d46b08; font-size: 12px; border: 1px solid #ffd591; border-radius: 3px; padding: 1px 8px; margin-left: 6px; }
|
||||
.notice-detail-title { font-size: 24px; font-weight: 700; color: #222; margin: 12px 0 14px; line-height: 1.4; }
|
||||
.notice-detail-meta { display: flex; flex-wrap: wrap; gap: 18px; color: #999; font-size: 13px; }
|
||||
.notice-detail-meta span { display: inline-flex; align-items: center; gap: 3px; }
|
||||
.notice-detail-content { font-size: 15px; line-height: 2; color: #444; white-space: pre-wrap; word-break: break-word; }
|
||||
.notice-detail-back { margin-top: 30px; }
|
||||
</style>
|
||||
@@ -0,0 +1,46 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<h2>插件市场</h2>
|
||||
<p>数百款插件与模板,即装即用,快速构建业务</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="layui-container">
|
||||
{notempty name="err_msg"}
|
||||
<div class="layui-bg-red" style="color:#fff;padding:12px 16px;border-radius:6px;margin-bottom:20px;">{$err_msg}</div>
|
||||
{/notempty}
|
||||
|
||||
{notempty name="categories"}
|
||||
<div class="plugin-cats" style="margin-bottom:24px;text-align:center;">
|
||||
{volist name="categories" id="c"}
|
||||
<span class="layui-badge layui-bg-blue" style="margin:4px;padding:6px 14px;">{$c.name}</span>
|
||||
{/volist}
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
<div class="card-grid">
|
||||
{notempty name="plugins"}
|
||||
{volist name="plugins" id="p"}
|
||||
<div class="case-card" style="text-align:left;">
|
||||
<div style="display:flex;align-items:center;margin-bottom:12px;">
|
||||
{notempty name="p.logo"}<img src="{$p.logo}" style="width:48px;height:48px;border-radius:8px;margin-right:12px;">{/notempty}
|
||||
<div>
|
||||
<h4 style="margin:0;">{$p.title}</h4>
|
||||
<span class="layui-badge-rim">{$p.category|default='插件'}</span>
|
||||
</div>
|
||||
</div>
|
||||
<p style="color:#666;font-size:14px;line-height:1.7;min-height:42px;">{$p.desc|default='—'}</p>
|
||||
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:10px;">
|
||||
<span style="color:#ff5722;font-weight:bold;">{$p.price_text}</span>
|
||||
<span style="color:#999;font-size:13px;"><i class="layui-icon layui-icon-download-circle"></i> {$p.downloads}</span>
|
||||
</div>
|
||||
<a href="javascript:;" class="layui-btn layui-btn-normal layui-btn-sm" style="width:100%;margin-top:10px;">查看详情</a>
|
||||
</div>
|
||||
{/volist}
|
||||
{else/}
|
||||
<div class="empty-tip" style="grid-column:1/-1;"><i class="layui-icon layui-icon-app"></i>暂无可展示的插件,请连接应用市场</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,44 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<h2>{$product.name}</h2>
|
||||
<p>产品中心 / 详情</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row layui-col-space30">
|
||||
<div class="layui-col-md8">
|
||||
<div class="news-detail">
|
||||
<div class="about-section" style="margin-bottom:20px;">
|
||||
<div class="about-img" style="flex:0 0 120px;">
|
||||
<div class="icon" style="font-size:60px;color:#1E9FFF;"><i class="layui-icon layui-icon-{$product.icon|default='component'}"></i></div>
|
||||
</div>
|
||||
<div class="about-text">
|
||||
<h3>{$product.name}</h3>
|
||||
<p>{$product.brief}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-content">
|
||||
<p style="font-size:15px;line-height:2;color:#555;">{$product.content}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top:24px;">
|
||||
<a href="{:url('product/index')}" class="layui-btn layui-btn-primary">< 返回产品列表</a>
|
||||
<a href="{:url('contact/index')}" class="layui-btn layui-btn-normal">咨询购买</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="feature-card" style="text-align:left;">
|
||||
<div class="icon"><i class="layui-icon layui-icon-app"></i></div>
|
||||
<h4>相关产品</h4>
|
||||
<p style="margin:6px 0;"><a href="{:url('product/read', ['id'=>2])}" style="color:#666;">• 电商系统</a></p>
|
||||
<p style="margin:6px 0;"><a href="{:url('product/read', ['id'=>3])}" style="color:#666;">• 会员中心</a></p>
|
||||
<p style="margin:6px 0;"><a href="{:url('product/read', ['id'=>4])}" style="color:#666;">• 表单引擎</a></p>
|
||||
<p style="margin:6px 0;"><a href="{:url('product/read', ['id'=>5])}" style="color:#666;">• 数据分析</a></p>
|
||||
<p style="margin:6px 0;"><a href="{:url('product/read', ['id'=>6])}" style="color:#666;">• 应用市场</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,38 @@
|
||||
<div class="page-header">
|
||||
<div class="layui-container">
|
||||
<h2>产品中心</h2>
|
||||
<p>覆盖企业核心场景的完整产品矩阵</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="layui-container">
|
||||
{notempty name="cats"}
|
||||
<div class="plugin-cats" style="margin-bottom:24px;text-align:center;">
|
||||
{volist name="cats" id="c"}
|
||||
<span class="layui-badge layui-bg-blue" style="margin:4px;padding:6px 14px;">{$c.name}</span>
|
||||
{/volist}
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
<div class="card-grid">
|
||||
{notempty name="products"}
|
||||
{volist name="products" id="p"}
|
||||
<div class="product-card">
|
||||
<div class="icon"><i class="layui-icon layui-icon-{$p.icon|default='component'}"></i></div>
|
||||
<h4>{$p.name}</h4>
|
||||
<p>{$p.brief|default='企业级解决方案,助力业务增长'}</p>
|
||||
<a href="{:url('product/read', ['id'=>$p.id])}" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">查看详情</a>
|
||||
</div>
|
||||
{/volist}
|
||||
{else/}
|
||||
<div class="product-card"><div class="icon"><i class="layui-icon layui-icon-template"></i></div><h4>企业官网</h4><p>多套精美模板,可视化建站</p><a href="javascript:;" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">查看详情</a></div>
|
||||
<div class="product-card"><div class="icon"><i class="layui-icon layui-icon-cart"></i></div><h4>电商系统</h4><p>商品、订单、支付一体化</p><a href="javascript:;" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">查看详情</a></div>
|
||||
<div class="product-card"><div class="icon"><i class="layui-icon layui-icon-user"></i></div><h4>会员中心</h4><p>统一账号体系与权限管理</p><a href="javascript:;" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">查看详情</a></div>
|
||||
<div class="product-card"><div class="icon"><i class="layui-icon layui-icon-form"></i></div><h4>表单引擎</h4><p>拖拽式表单,零代码采集</p><a href="javascript:;" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">查看详情</a></div>
|
||||
<div class="product-card"><div class="icon"><i class="layui-icon layui-icon-chart"></i></div><h4>数据分析</h4><p>多维度报表与可视化大屏</p><a href="javascript:;" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">查看详情</a></div>
|
||||
<div class="product-card"><div class="icon"><i class="layui-icon layui-icon-app"></i></div><h4>应用市场</h4><p>海量插件即装即用</p><a href="javascript:;" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">查看详情</a></div>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,55 @@
|
||||
<!-- 框架 Hero -->
|
||||
<div class="home-carousel">
|
||||
<div class="banner-item" style="background:linear-gradient(120deg,#1E9FFF 0%,#16b8a6 100%);">
|
||||
<div class="banner-inner">
|
||||
<h2>YwxApp 企业级开发框架</h2>
|
||||
<p>基于 ThinkPHP6 多应用架构,插件化、模块化,让业务快速落地</p>
|
||||
<a href="{:url('feature/index')}" class="banner-btn">探索特性</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数据概览 -->
|
||||
<div class="section" style="padding:36px 0;">
|
||||
<div class="layui-container">
|
||||
<div class="about-stats" style="justify-content:center;gap:80px;">
|
||||
<div class="stat"><div class="num">{$pluginCount|default=0}</div><div class="label">可用插件</div></div>
|
||||
<div class="stat"><div class="num">{$appCount|default=4}</div><div class="label">应用模块</div></div>
|
||||
<div class="stat"><div class="num">TP6</div><div class="label">底层引擎</div></div>
|
||||
<div class="stat"><div class="num">MIT</div><div class="label">开源协议</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 四大特性 -->
|
||||
<div class="section" style="background:#f7f9fb;">
|
||||
<div class="layui-container">
|
||||
<div class="section-title"><h3>核心特性</h3><p>框架为业务而生</p></div>
|
||||
<div class="card-grid">
|
||||
{notempty name="features"}
|
||||
{volist name="features" id="f"}
|
||||
<div class="feature-card">
|
||||
<div class="icon"><i class="layui-icon layui-icon-{$f.icon|default='component'}"></i></div>
|
||||
<h4>{$f.title}</h4>
|
||||
<p>{$f.desc}</p>
|
||||
<a href="{$f.url}" class="layui-btn layui-btn-primary layui-btn-sm" style="margin-top:12px;">了解更多</a>
|
||||
</div>
|
||||
{/volist}
|
||||
{else/}
|
||||
<div class="feature-card"><div class="icon"><i class="layui-icon layui-icon-plugin"></i></div><h4>插件机制</h4><p>热插拔插件,钩子自动注册,与业务解耦。</p></div>
|
||||
<div class="feature-card"><div class="icon"><i class="layui-icon layui-icon-app"></i></div><h4>多应用架构</h4><p>api/backend/member/frontend 多应用隔离。</p></div>
|
||||
<div class="feature-card"><div class="icon"><i class="layui-icon layui-icon-vip"></i></div><h4>会员/支付</h4><p>免签支付 + 会员开通事件链,到账自动开通。</p></div>
|
||||
<div class="feature-card"><div class="icon"><i class="layui-icon layui-icon-doc"></i></div><h4>文档/示例</h4><p>完善的开发文档与快速开始指南。</p></div>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 行动号召 -->
|
||||
<div class="home-cta">
|
||||
<div class="layui-container">
|
||||
<h3>立即开始构建你的业务</h3>
|
||||
<p>免费使用框架,按需获取插件与模板,快速上线</p>
|
||||
<a href="{:url('plugin/index')}" class="banner-btn">前往插件市场</a>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user