From ed1b5aad3efd389dd4ccb71b7f303e569c69af1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=BC=E5=AD=90=E6=98=8E?= <2513889970@qq.com> Date: Sun, 30 Mar 2025 23:48:44 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E5=89=8D=E5=8F=B0=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E3=80=81=E5=90=8E=E5=8F=B0=E6=9D=83=E9=99=90=E3=80=81=E6=9B=B4?= =?UTF-8?q?=E6=8D=A2cms=E6=B8=B2=E6=9F=93=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/cms/sql/jfinal_project_center.sql | 40 +-- .../fuck/sm/plugins/cms/CommonAttribute.java | 4 +- .../sm/plugins/cms/config/CmsEnjoyRender.java | 147 +++++++++++ .../fuck/sm/plugins/cms/config/Configxv.java | 15 +- .../cms/controller/admin/BaseController.java | 17 +- .../cms/controller/admin/IndexController.java | 3 + .../cms/controller/admin/LoginController.java | 7 +- .../cms/controller/front/BaseController.java | 2 +- .../plugins/cms/filter/PageCacheFilter.java | 140 ++++++---- .../plugins/cms/filter/PermissionFilter.java | 246 +++++++++--------- .../sm/plugins/cms/handler/SiteHandler.java | 2 +- .../sm/plugins/cms/handler/UrlHandler.java | 6 +- .../vip/fuck/sm/plugins/cms/util/JFinal.java | 2 +- .../cms/templates/default/case_detail.shtm | 4 +- .../cms/templates/default/job_detail.shtm | 4 +- .../cms/templates/default/news_detail.shtm | 4 +- .../cms/templates/default/product_detail.shtm | 4 +- .../cms/templates/moban2/case_detail.shtm | 4 +- .../cms/templates/moban2/news_detail.shtm | 4 +- .../cms/templates/moban2/product_detail.shtm | 4 +- .../cms/templates/moban3/case_detail.shtm | 4 +- .../cms/templates/moban3/jd_detail.shtm | 4 +- .../cms/templates/moban3/job_detail.shtm | 4 +- .../cms/templates/moban3/news_detail.shtm | 4 +- .../cms/templates/moban3/product_detail.shtm | 4 +- .../cms/templates/moban4/case_detail.shtm | 4 +- .../cms/templates/moban4/news_detail.shtm | 4 +- .../cms/templates/moban4/product_detail.shtm | 4 +- .../cms/templates/moban5/case_detail.shtm | 4 +- .../cms/templates/moban5/news_detail.shtm | 4 +- .../cms/templates/moban5/product_detail.shtm | 4 +- .../cms/templates/moban6/case_detail.shtm | 4 +- .../cms/templates/moban6/news_detail.shtm | 4 +- .../cms/templates/moban6/product_detail.shtm | 4 +- .../cms/templates/moban7/case_detail.shtm | 4 +- .../cms/templates/moban7/job_detail.shtm | 4 +- .../cms/templates/moban7/news_detail.shtm | 4 +- .../cms/templates/moban7/product_detail.shtm | 4 +- .../templates/moban9_mobile/case_detail.shtm | 4 +- .../templates/moban9_mobile/news_detail.shtm | 4 +- .../moban9_mobile/product_detail.shtm | 4 +- .../cms/templates/moban9_pc/case_detail.shtm | 4 +- .../cms/templates/moban9_pc/news_detail.shtm | 4 +- .../templates/moban9_pc/product_detail.shtm | 4 +- 44 files changed, 476 insertions(+), 279 deletions(-) create mode 100644 plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/CmsEnjoyRender.java diff --git a/doc/cms/sql/jfinal_project_center.sql b/doc/cms/sql/jfinal_project_center.sql index 903e2b9..892015c 100644 --- a/doc/cms/sql/jfinal_project_center.sql +++ b/doc/cms/sql/jfinal_project_center.sql @@ -11,7 +11,7 @@ Target Server Version : 80017 File Encoding : 65001 - Date: 30/03/2025 15:49:13 + Date: 30/03/2025 23:47:20 */ SET NAMES utf8mb4; @@ -296,18 +296,18 @@ CREATE TABLE `cms_company` ( -- ---------------------------- -- Records of cms_company -- ---------------------------- -INSERT INTO `cms_company` VALUES (1, '江苏省交通节能减排中心', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 1); -INSERT INTO `cms_company` VALUES (2, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 2); -INSERT INTO `cms_company` VALUES (10, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 10); -INSERT INTO `cms_company` VALUES (11, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 11); -INSERT INTO `cms_company` VALUES (12, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 12); -INSERT INTO `cms_company` VALUES (13, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 13); -INSERT INTO `cms_company` VALUES (14, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 14); -INSERT INTO `cms_company` VALUES (15, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 15); -INSERT INTO `cms_company` VALUES (16, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 16); -INSERT INTO `cms_company` VALUES (17, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 17); -INSERT INTO `cms_company` VALUES (18, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 18); -INSERT INTO `cms_company` VALUES (20, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, '644080923@qq.com', '644080923', '/static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 20); +INSERT INTO `cms_company` VALUES (1, '江苏省交通节能减排中心', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 1); +INSERT INTO `cms_company` VALUES (2, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 2); +INSERT INTO `cms_company` VALUES (10, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 10); +INSERT INTO `cms_company` VALUES (11, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 11); +INSERT INTO `cms_company` VALUES (12, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 12); +INSERT INTO `cms_company` VALUES (13, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 13); +INSERT INTO `cms_company` VALUES (14, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 14); +INSERT INTO `cms_company` VALUES (15, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 15); +INSERT INTO `cms_company` VALUES (16, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 16); +INSERT INTO `cms_company` VALUES (17, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 17); +INSERT INTO `cms_company` VALUES (18, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 18); +INSERT INTO `cms_company` VALUES (20, '长沙XXX网络科技有限公司', '长沙市XXX区XXX号', '410000', 'XXX', '11111111111', '11111111111', NULL, 'xian.zi.ming@qq.com', '2513889970', '/cms//static/upload/image/20180531/1527705737340857.png', NULL, NULL, NULL, NULL, 20); -- ---------------------------- -- Table structure for cms_content @@ -413,20 +413,20 @@ INSERT INTO `cms_content` VALUES (72, '2018-12-18 14:42:01', '2018-12-18 14:42:0 INSERT INTO `cms_content` VALUES (73, '2018-12-18 14:42:01', '2018-12-18 14:42:01', '2018-12-18 14:41:50', 1, NULL, NULL, NULL, '/cms/static/upload/news.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 21, NULL, NULL, NULL, NULL, NULL, 'Article14', NULL, NULL, '

Article14

', 12, NULL, '{}', NULL, 2); INSERT INTO `cms_content` VALUES (74, '2018-12-18 14:42:01', '2018-12-18 14:42:01', '2018-12-18 14:41:50', 1, NULL, NULL, NULL, '/cms/static/upload/news.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 20, NULL, NULL, NULL, NULL, NULL, 'Article15', NULL, NULL, '

Article15

', 12, NULL, '{}', NULL, 2); INSERT INTO `cms_content` VALUES (75, '2019-02-23 11:56:18', '2019-02-23 11:56:18', '2019-02-23 11:55:37', 1, NULL, NULL, NULL, '/cms/static/upload/video.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 52, NULL, NULL, NULL, NULL, NULL, 'Video1', NULL, NULL, '

The brightest star in the night sky

', 13, NULL, '{\"videoFile\":\"/static/upload/video.mp4\",\"videoPic\":\"/static/upload/video.png\"}', NULL, 2); -INSERT INTO `cms_content` VALUES (103, '2019-12-26 19:31:17', '2019-12-26 19:31:14', '2019-12-26 19:33:40', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499864406172.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 224, NULL, NULL, NULL, NULL, NULL, 'JreCms正式发布', NULL, NULL, '

\r\n     JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。\r\n

\r\n

\r\n     1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;\r\n

\r\n

\r\n     2、系统采用JAVA语言开发,使用EhCache缓存技术;\r\n

\r\n

\r\n     3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;\r\n

\r\n

\r\n     4、系统采用响应式管理后台,满足各类设备随时管理的需要;\r\n

\r\n

\r\n     5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;\r\n

\r\n

\r\n     6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。
\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 源码托管地址:\r\n

\r\n

\r\n GitHub:-
\r\n

\r\n

\r\n Gitee:https://gitee.com/heyewei/JFinalcms\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 简单到想哭的标签:\r\n

\r\n
1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)\r\n    <p><a href="#(content.path)">#(content.title)</a></p>\r\n#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 102, NULL, '{}', NULL, 10); +INSERT INTO `cms_content` VALUES (103, '2019-12-26 19:31:17', '2019-12-26 19:31:14', '2019-12-26 19:33:40', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499864406172.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 225, NULL, NULL, NULL, NULL, NULL, 'JreCms正式发布', NULL, NULL, '

\r\n     JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。\r\n

\r\n

\r\n     1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;\r\n

\r\n

\r\n     2、系统采用JAVA语言开发,使用EhCache缓存技术;\r\n

\r\n

\r\n     3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;\r\n

\r\n

\r\n     4、系统采用响应式管理后台,满足各类设备随时管理的需要;\r\n

\r\n

\r\n     5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;\r\n

\r\n

\r\n     6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。
\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 源码托管地址:\r\n

\r\n

\r\n GitHub:-
\r\n

\r\n

\r\n Gitee:https://gitee.com/heyewei/JFinalcms\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 简单到想哭的标签:\r\n

\r\n
1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)\r\n    <p><a href="#(content.path)">#(content.title)</a></p>\r\n#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 102, NULL, '{}', NULL, 10); INSERT INTO `cms_content` VALUES (104, '2019-12-26 19:33:36', '2019-12-26 19:33:38', '2019-12-26 19:33:42', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 81, NULL, NULL, NULL, NULL, NULL, '华为云:打造游戏创新智能世界的“黑土地”', NULL, NULL, '

PConline资讯】2018年4月2日,在GMGC北京2018第七届全球游戏大会现场,记者有幸采访到了华为消费互联网解决方案总经理聂颂,他分享了游戏行业创新发展的技术基石,以及作为游戏创新要素的AI、5G、区块链等技术会为创新者带来哪些价值。

华为消费互联网解决方案总经理聂颂

对于游戏创新,聂颂特别强调了技术这块“黑土地”的重要性:单机版扫雷游戏盛行的背后是IntelCPU和Windows操作系统的支撑;PC互联、线下支付以及IDC技术的成熟让游戏“传奇”的时代来临;2017年中国游戏2189亿人民币收入的背后,是4G、Wifi网络、移动支付、智能手机和云计算的成熟。而2018年,5G、区块链、AI、AR/VR的普及会给游戏行业带来玩法、服务以及场景上的多维度创新。

对此,聂颂首先表示,在游戏解决方案上,华为云不做游戏产品,不与游戏企业争利,坚持做游戏企业的发动机和生产力。华为云游戏解决方案目前已经构建了游戏研发、游戏部署、游戏运营、游戏创新等全产业链条的能力。未来华为云将在游戏行业发力的几大方向:

第一,是基础设施层面,过去几年游戏行业使用最多的产品是云主机虚拟机,华为云主机的性能优异,裸金属服务被第三方机构评为年度影响力产品。

第二,是云容器产品方面,由于容器对于游戏部署来说意义重大,能够支撑游戏产品架构的演进。游戏企业通过使用容器,服务器部署的弹性速度提高10倍以上,并将扩展区服的时间降低到分钟级,整个运营成本降低超过50%。

第三,在AI能力层面,华为作为业界在“云+终”端同时具有芯片级别研发的公司,在终端侧,可以进行人脸识别;在云端可以进行大数据分析、视频分析、视觉认知;在架构底层,华为云使用了Atlas、GPU、FPGA等硬件为AI定制算力,从而可以在性能、延迟等方面满足游戏公司的需求。

第四,华为的云游戏实现了即看即玩。游戏免修改、多个用户一起玩直播的游戏社交游戏让客户体验大幅提升。

第五,在区块链层面,华为在十分钟之内就可以部署完整的区块链系统,每秒运算能力高达2000TPS,轻松帮助游戏客户实现不同游戏道具类的自由交换。

最后,聂颂特别强调了华为终端的优势:超过3亿的注册手机用户,华为开发者联盟超过37万的用户,应用市场下载量450亿+以及华为云100+的服务。在此次大会上,华为还发布了与消费者云的端云联合计划,已注册认证的消费者云开发者可以获得端云协同大礼包,后续针对开发者创新等,华为云也会陆续推出更大更好的扶持计划。

随着游戏用户规模逐渐从增量市场转向存量市场,游戏市场正从买量用户数转向追求极致体验,以华为打造智能世界的“黑土地”为沃土,2018年中国游戏市场创新会有哪些改变,让我们拭目以待!



', 103, NULL, '{}', NULL, 10); INSERT INTO `cms_content` VALUES (105, '2019-12-27 10:46:33', '2019-12-27 10:46:34', '2019-12-27 10:46:36', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499864406172.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 112, NULL, NULL, NULL, NULL, NULL, '锤子6年了 我们找到了它没有死的秘密', NULL, NULL, '

他有些戏谑意味地取了“锤子”这个名字。此前抡锤砸西门子冰箱的“壮举”让他一举成名,他想在手机圈里也搞出类似的动静来。这似乎预兆了他此后几年的命运:刺激。

另一个预兆发生在那年夏天。锤子办公室从中关村搬去望京,装车时突然电闪雷鸣暴雨如注。罗永浩站在旧办公室的窗边,念叨着“好了好了,我都知道了”,没多久,雷声停了雨也小了,似乎是天气与他达成了和解。

“和解”是老罗锤子六年的另一个主题。从某种程度上说,这是他得以从手机死亡谷幸存的秘诀,但所有的得到都有代价,老罗祭出的牺牲品之一,就是曾经那个“罗永浩可爱多”。

锤子4月9日在北工大举办的发布会没有形成刷屏之势。

有锤粉觉得意外,场内人看来却是正常。除了性价比,当天发布的坚果3实在乏善可陈,就连素来精彩的老罗演讲,也如同这个季节开败了的玉兰花,蔫蔫的让人打不起精神。散场之后,有锤粉在微信群里讨论,比刚才谁睡着的时间更长。

罗永浩选择了“怼”。发布会结束他就发了条微博:“回来看了一下网上的反馈,很多用翔的人都说丑,嗯,肯定会卖得很好,放心睡了。”第二天他又在微信公众号里称,那些骂坚果3丑的人是笨蛋。

依然是天生骄傲的语气,但配方似乎与6年前已经不一样了。

那时他讨伐的对象是小米。2012年是小米模式突飞猛进备受赞誉的一年,截至11月底,小米销售额已经突破100亿人民币——华为和酷派实现这个数字都花了6年,而此时距离雷军喝下那碗小米汤不过短短2年。

但罗永浩不服。

他很快展示他过人的毒舌功力,嘲讽小米是“手机期货”、“耍猴式营销”……他甚至为自己的犀利洋洋得意,“雷军确实被我们逼得重视设计和假装有人文情怀了”。

但出来混总是要还的,“产能”在此后几年成为罗永浩的紧箍咒,感受到切肤之痛后,他向雷军转达了歉意、感慨做产品不容易。

不过那都是后话了,回到2012年,毫无疑问,罗永浩赶上了智能手机的大风口。

热潮之中,很多巨变已经初见端倪。

小米自然是最炙手可热的明星,锤子就直接复制了它的早期模式:先做ROM再做手机。更多的大厂商还没反应过来,华为要在2013年才推出互联网品牌“荣耀”,魅族要在更晚的2014年才有“魅蓝”,至于联想的ZUK,那就是2015年迟到的故事了。

更多关于颠覆的故事在苹果之外的手机厂商间上演:

诺基亚连续14年手机老大的位置被三星替代,铁娘子王雪红带领HTC完成精品战略转型,坐上手机老二的位置。黑莓生厂商RIM\r\n 选择了一条危险的道路:黑莓10成为放手一搏的产品,但它从2012年拖到2013年才面世,不情不愿发布触屏版的同时,还傲娇地保留了物理键盘板。

当时RIM还是很乐观的。时任CEO托斯滕·海因斯在谈及诺基亚的衰落时曾说,“我们现在拥有大约8000万名用户——这是诺基亚所不具备的。”但现实却是,尽管黑莓手机有奥巴马、Lady\r\n Gaga等一众粉丝,但随着黑莓公司在今年愚人节关闭BB OS 服务,最终,黑莓与诺基亚一样,把辉煌留给了历史。

风起云涌间,罗永浩掀起的波澜似乎多少带着点玩闹的成分。本来就有很多人抱着看笑话的心态,准备围观这位相声演员、英语老师如何玩砸,偏偏老罗还献上了料:

原先定在2012年年底发布的ROM跳票到次年3月,又因为工程师严重不足导致很多功能无法实现,加上发布会现场拖堂严重、网络瘫痪等原因,总之,那成为一场堪称“糟糕”的亮相,网络里几乎全是骂声。

有媒体称,那晚罗永浩失眠了,第二天,他在微博里亦保持了沉寂。

做锤子的前几年,罗永浩一直没能甩掉“不靠谱”的标签。

他狂妄。在手机影子都没有的2013年,他就在微博发布文章:《为什么看起来只有锤子科技最可能成为下一个索尼(盛田时代的索尼)或下一个苹果(乔布斯时代的苹果)?》——而那一年,国内手机市场最活跃的角色是799元的红米手机,它直接拉动了小米销量,当年“双十一”,小米三分钟售出一亿元。

他随性,即使在投资人面前也不改本色。“他甚至聊一聊,就看手机,不搭理投资人”,媒体人黄章晋曾经这样评价。在演讲台上口舌生莲的罗永浩,其实有点社交恐惧症,谈合作时不知道怎么说半真半假的话。

2013年那场“糟糕”的ROM发布会没多久,罗永浩就烧光了陌陌唐岩给的900万。他第一次面临钱的难题。但很多投资人对这位曾经怒砸冰箱的狂人有所忌讳,一位知名基金的风投曾表示,“我非常欣赏老罗”,但他转头告诉同事的却是:“我们是一分钱也不会给他的。”

锤子在生产线上遇到的麻烦,狠狠给了罗永浩一“锤子”。

2014年5月,锤子T1 发布。对于从未涉足过硬件生产的罗永浩,这无疑是历史性的一步。在产品宣传图里,他高调称之为“东半球最好用的智能手机”。或许是担心触及新的《广告法》条例,没多久,宣传语又变成了“全球第二好用的智能手机”。

那场发布会上,罗永浩扬眉吐气,挺直了腰板,痛快嘲笑着整个手机行业,尽管T1首发只有3G版。

供应链反手给了他一巴掌。由于良品率过低等原因——有媒体援引业内人士的判断,锤子手机良品率不会超过50%,而正常数值应该在93%以上——T1 在发布后的几个月里都无法正常供货,急得罗永浩跑到富士康去蹲守。

发布会造起的声势,在订购用户漫长的等待中变凉了。随后3-4个月,T1逃单率从最初的2%一路飙升到接近90%。那些通过员工渠道才搞到购买码的人也跑了,理由很简单:过去几个月,天天看锤子的负面新闻看怕了。

罗永浩扛到10月,不得不宣布锤子降价,降幅在1000元左右。降价后,最便宜的16G 3G版售价1980元。

这又激怒了不少锤粉。5个月前,老罗说“我特别反感有的手机厂商在新品上市时定一个高价,之后很快又会降价的做法”,他降价的唯一可能是:新一代产品上市,前一代需要清理库存。为了显得有信服力,他还撂下狠话:如果低于2500,我是你孙子。

最终,T1在2014年的总销量是25万多台。那年,中国智能手机出货量为4.207亿台,其中,小米出货量为6112万台。

这样的结果无疑是让人沮丧的。罗永浩认为自己的口无遮拦把企业连累了。

那年12月,他在北展做了最后一场个人演讲《一个理想主义者的创业故事》,现场哽咽鞠躬,表示要认真学做企业家,并宣布个人微博号密码交给了公司公关部,将来所说的每一句话,要经过公司审核过再发布。

自此,“罗永浩可爱多”的微博昵称消失了。

事实证明,罗永浩选择低姿态进入2015年,实在是个明智的选择。

那年手机行业的主题是:无人幸免。

险象在2014年已经初显。工信部监测报告显示,2014年前10个月智能手机出货量同比降幅达到10.4%,其中,国产手机出货量共2.86亿部,同比下降25.4%。显然,这是一个日趋饱和的市场。

于是,对于赶在风口成立的小手机厂商,2015年就是死亡谷。头一年还连发三款手机的大可乐在这年保持了寂静,次年三月宣布破产。

行业不景气之下,上游企业随之受到牵连,珠三角多家手机代工厂出现倒闭、老板跳楼等悲剧。

大公司的日子也不好过,随着增速放缓,唱衰小米的声音此起彼伏。

那年年初,华为的余承东判断局势之残酷:未来3-5年国内只剩下三大手机厂商。当然,他不忘给自己打气,“其中就包括华为”。这位靠P6一战成名的CEO 曾经自嘲是华为的CHO(首席吹牛官)——“我学会了吹牛、打赌和应付口水战。”

8月,联想的杨元庆也在微博中写道:联想此刻正面临着严峻的挑战。头一年,联想以29.1亿美元收购摩托诺拉手机品牌,直接导致了2015年Q1财报里的2.92亿美元亏损。从后面的故事来看,此举也未能阻止联想手机业务的颓势。

如此局势之下,锤子的日子也不好过。

那年锤子先后发布了坚果手机和T2,都没能打出翻身仗。最终,锤子科技在2015年亏损了4.62亿。

钱成了大问题。天生骄傲的情怀在现实面前似乎不堪一击。到2016年,锤子对外公布的融资仅有AB两轮,融资金额最高的也就是2014年4月那笔1.8亿元人民币。于是,当锤子在2016年发不出工资时,罗永浩只能编了个理由:银行系统出了问题,过几天再发。

一年后,当危机化解,罗永浩把此事当做段子在极客公园大会上分享,逗得台下观众哈哈大笑。他闭口未谈期间的辛酸,包括为了钱去找小米谈收购、跟阿里质押股权,最后都没成,不得已,他跑到得到开专栏,去陌陌做直播,“卖身”换钱。

后来他说:真正的猛男,敢于直视惨淡的人生。猛男另一个特征,哭的时候要躲起来。

期间也有援手。锤子科技早期投资人、紫辉创投创始合伙人郑刚称,在锤子资金危机中,贾跃亭曾经借给罗永浩1个亿。贾跃亭在2015年开始做手机,一度计划投资锤子,但考虑到交易需要时间,锤子又急需用钱,最后在没有质押股权的情况下,直接借出1个亿。

后来罗永浩用一组数据复盘了2016年:被传倒闭6次,被传收购5次,被曝资金链困境3次,被用户起诉1次。

类似的滋味雷军在这一年也品尝到了。小米在2015年开始遭遇出货量和市场份额双跌,到2016年春节时,雷军宣布取消KPI,随后,补课成为这一年的主题,他请回了黎万强,整顿供应链,找明星代言,布局线下和海外。

两家公司的体量相差迥异,但在生死攸关之时,活下去的欲望足以让他们放下过往,甚至引入自己曾经鄙夷的模式。毕竟,在生意场上,生存就是最大的挑战。

他们都熬出来了。

2017年,小米出货量重回世界前五,IPO 进入流程。罗永浩也宣布锤子获得新一轮10亿融资。令人意外的是,其中6亿来自成都市政府。

也是在这一年,锤子总部搬迁至成都,坚果Pro发布——这款中端机型是锤子首款产量过百万的产品。当罗永浩在发布会上哽咽:如果将来傻*都在用锤子手机,你们一定要记得,这手机是为你们做的,你似乎又能看到他昔日狂妄又感性的影子。

做高性价比手机、出空气净化器、布局生态链……锤子幸存之后的诸多举动被业内评价:越来越像小米。

事实上,自从办完2014年那场最后的个人演讲,罗永浩就在努力把自己变成正常的企业家,把锤子变成正常的公司。去年8月宣布那笔10亿融资时,他笑眯眯地谈到:

“没意外的话,从秋天开始,我们手里会有大约 19 个亿的运作现金。这意味着我们从明年开始会像一个正规的手机厂商一样,以高、中、低三个段位,每年推出 5~6 款产品。”

言语间全然不见当年愤怒、自傲、聛睨一切的姿态。

而正是这些特质,当初让很多追随“罗胖”的粉丝变身锤粉。作为好友的冯唐曾经分析过,为什么锤子的开局那么糟糕却没有夭折,其中一个重要理由恐怕就是粉丝,“换另一个疯子和偏执狂去做,没有老罗的粉丝群,可能一年都活不下去。”

在不同的锤粉看来,锤子的六年有着不同的意味。

有人为这家公司熬过难关挺到现在而开心,即使中间有过口碑糟糕的M系列手机,塑料手感让他们不敢相信“这是老罗的审美”;有人已经转身离去,因为老罗曾经的骄傲不复存在,锤子已经成为泯然众人的大路货。

比如坚果Pro ,这款定价在1499、1799、2299 的手机,出货量是锤子科技过去五年所有手机产品的总和。

这是属于商业的成功,但文艺青年们更在乎直观感受。知乎用户 Slender Man 这样写道:

“一个公司需要在第三方购物网站上刷评论,一个公司需要大费笔墨来夸赞作为手机配件的钢化膜,一个公司在类似于‘虚拟来电’这样的不实用功能上吹嘘所谓工匠精神而不是改善被人诟病依旧的系统时,这大概就是对‘情怀’最大的玷污。”

但熬过生死关头的罗永浩显然已经超越了这些。他在去年感慨,“你知道我这5年是怎么挺过来的吗?每次就是厚着脸皮再坚持一下。”

他的变化显而易见。

他鲜少露面,曾经那些标签,比如彪悍、情怀、工匠精神,也不再一遍遍被强化。在与罗振宇那场8个半小时的《长谈》中,他谈到自己很庆幸,因为现在不需要用讲故事来融资了,“他们(投资人)不用看我罗永浩怎么样,我也不想和他们谈,大家直接看业绩”。

他开始理解很多以前看不上的行为。“过去,我要是在机场看到一个衣冠楚楚的家伙拿着一本《赢:韦尔奇一生的管理智慧》,就会觉得这个笨蛋没救了,但现在我也会拿着这样的书硬着头皮读完。”

而4月9日北工大的这场发布会上,罗永浩的表现也越发像一位成熟的商人。

他意外地只迟到了5分钟,随后用1个小时匆匆展示了千元机坚果3;

他否定了自己以前一些过于偏执的说法——谈到“为何整天发平价机”时,他说:“设计很重要,但它只是一部分……漂亮很重要,但科技行业漂亮也没那么必要。”

在这场可能是锤子有史以来最冷清的发布会上,他也老老实实解释了坚果3此时推出的理由:在做旗舰机产品的路上走得非常艰难,不得不做中档的产品,更高性价比的产品。

只有在谈到5月15日将在鸟巢举办的那场发布会时,罗永浩又显得很兴奋。

他喜欢用“尿裤子”这个粗俗的词语形容好产品带来的震撼,于是,那天下午他说道:我曾经想过,给每一个入场(鸟巢)的人发一个纸尿裤。

在这样天马行空的瞬间,企业家罗永浩,似乎又跟那个满身是刺却内心脆弱的老罗重逢了。

这是属于幸存者的幸福瞬间,即使罗永浩为此付出了“杀死老罗”的代价。但商业就是如此,正如他那天下午感慨的——科技行业没有百年老店的。“只要你干不过别人,无论有什么理由,都是没什么用的。”


', 103, NULL, '{}', NULL, 10); -INSERT INTO `cms_content` VALUES (106, '2019-12-27 10:55:00', '2019-12-27 10:55:02', '2019-12-27 10:55:04', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499864406172.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 217, NULL, NULL, NULL, NULL, NULL, '大获全胜 扎克伯格如何赢得与议员的当面对峙', NULL, NULL, '

腾讯《深网》 纪振宇 4月11日发自硅谷

并不是扎克伯格表现地多好,而是议员们的表现太差了。

在经历了连续两天马拉松式的国会议员“拷问”后,Facebook创始人兼首席执行官扎克伯格给外界留下了表现“超出预期”的印象,Facebook的股价甚至在第一天出现了过去两年来最大的单日涨幅,扎克伯格个人身家也在当天结束后暴涨近30亿美元。

国会会议厅自然不是让扎克伯格感到舒适的场所,为了准备这两场听证会,扎克伯格提前一天便来到了华盛顿特区,4月初的华盛顿依然春寒料峭,这里的人们大多身着深灰色大衣,神情肃穆,行色匆匆,这里与明媚温暖的加州完全是两个世界,这并不是他能够穿着T恤短裤,和妻子孩子在自家后院烧烤做线上视频直播,与成百上千万Facebook用户轻松聊天的时刻。

他不得不穿上为他量身定做的深蓝色修身西装、系上领带,端坐在摆放着名牌“Mr. Zuckberg”的桌子后面,与几十名参议员,上百名媒体记者共处一室,熬过接下来长达5个半小时的听证会。

“他很紧张,但他显得信心十足,”现场的一名人员这样描述,“他是一个聪明人。”

还未落座,扎克伯格就被数十名现场摄影记者围成的人墙所包围,他全身上下的各个角度,动作神情的每一个细节,都被无情地暴露在冰冷的镜头前。

但扎克伯格显然是有备而来,坐在听证席上的他保持上身挺直,对每一个问题都认真倾听,与提问的议员进行眼神接触,他改掉了过去回答问题时都先加上“so”语气词的习惯,而是先以“Senator”(参议员),“Congressman”或“Congresswoman”(议员)来称呼向他提问的对方,然后再作答。

他的桌上摆放着他的团队为他提前准备好的应答提纲,在听证会中场休息的间隙,现场媒体拍到了其中一页内容,厚厚的一叠纸上基本涉及到了所有他们能事先想到的议员们可能问到的问题,他的座椅放上了厚厚的垫子,或许也是团队为他精心准备的,为了让他在镜头面前显得更高大,更符合在危机时刻的领导者形象。

尽管时不时咽下口水,表情尴尬或频繁举起水杯,但出现在国会的扎克伯格,并不是我们过去所熟悉的那个穿着灰色帽衫,语速飞快,说着“快速行动,打破一切”的年轻创业者形象,而是一位训练有素,应对自如的CEO,这是一家正处在危机中的公司所需要的领导者的形象。

反观听证会上坐在扎克伯格对面的数十名国会议员,他们的表现却让人大失所望,或者说,人们从来就没有对这次听证抱太大期望,数十个问题暴露出了这些政治圈人士与21世纪科技圈完全的隔阂,他们与扎克伯格之间的许多问答,双方仿佛是在各自语境体系下的自说自话,出现了许多难以言状的尴尬时刻。

例如,一名议员问“如果用户不用支付你提供的服务的话,你如何维持你的公司经营?”

扎克伯格停顿片刻,说,“参议员,我们卖广告。”

“哦,是这样啊。”这位参议员说。

有一位议员说,“我13岁的儿子查理是个活跃的Instagram(Facebook旗下图片分享应用)用户,他让我确保今天提到他。”

另一位议员说,“如果我通过Whatsapp(Facebook旗下即时通讯应用)发邮件,这会让广告主知道里面的信息吗?”

议员们的许多问题,暴露了他们对一些最基本互联网常识或Facebook这家公司的无知,Twitter上的一名用户甚至嘲讽说,“这些议员的平均年龄已经100岁了。”

整场听证会,议员们的问题还缺乏重点,往往漫无边际,围绕着一些无关痛痒的问题兜圈子。

在议员们“不给力”的问题下,扎克伯格也得以完全依照此前团队所设计的策略,有条不紊地完成这两天的既定任务:承认错误,道歉,具体问题不做肯定或否定的回答,交给团队后续跟进,不做承诺,不否定目前的商业模式,不表现地过于贪婪。

Open MIC组织执行总监Michael Connor评价称,扎克伯格的听证会表现仅能算“勉强通过”,谈不上“优异”。这家代表Facebook投资者的机构在听证会开始前一天公开呼吁扎克伯格辞去Facebook的所有职务。

听证会的发起,源自Facebook大面积用户数据泄漏事件的爆发,由于爆料人称大数据公司Cambridge\r\n \r\nAnalytica利用从Facebook获得的大量用户数据,进行精准政治广告投放,以影响政治活动,事件可能涉及到8700万Facebook用户,其中大多数人位于美国,这些都引起了华盛顿的关注。

这场事件的另几个关键词是“俄罗斯操纵”、“美国总统选举”,这些已经触及到美国国家安全和核心利益。出于对各自选区选民的责任,这场听证会在所难免。

但参加听证会的国会议员的表现,或许连“通过”的标准都达不到。听证会的最终目的,是为了让这些立法者们能够更好地了解情况,最终至少能够形成对于某些现存问题的一致看法,并通过立法程序加以解决,尽管扎克伯格本人在听证会期间也明确表达了愿意接受“正确的监管”的态度,但至少从这两天的听证会现场情况来看,要达成上述目的的希望渺茫。

另一个尴尬的事实是,参与听证会的近百名议员,大多数都直接或间接接受过Facebook的政治捐款。在过去12年中,Facebook总共投入了700万美元用于政治捐款,从2014年至今,对扎克伯格质询的议员总共从Facebook获取了超过64万的政治捐助。

两天的听证会被一名Twitter用户评价为“走过场”,没有“实质意义”,如果说第一天的听证会上,扎克伯格还不时露出紧张的神态,第二天的他则完全神态自若,当主持整场听证会的议员提议休息片刻,扎克伯格回答说,“要不再来几个问题?”美国新闻电视网CNN评价道,两天的听证会,扎克伯格得以全身而退,毫发无伤。


', 103, NULL, '{}', NULL, 10); +INSERT INTO `cms_content` VALUES (106, '2019-12-27 10:55:00', '2019-12-27 10:55:02', '2019-12-27 10:55:04', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499864406172.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 225, NULL, NULL, NULL, NULL, NULL, '大获全胜 扎克伯格如何赢得与议员的当面对峙', NULL, NULL, '

腾讯《深网》 纪振宇 4月11日发自硅谷

并不是扎克伯格表现地多好,而是议员们的表现太差了。

在经历了连续两天马拉松式的国会议员“拷问”后,Facebook创始人兼首席执行官扎克伯格给外界留下了表现“超出预期”的印象,Facebook的股价甚至在第一天出现了过去两年来最大的单日涨幅,扎克伯格个人身家也在当天结束后暴涨近30亿美元。

国会会议厅自然不是让扎克伯格感到舒适的场所,为了准备这两场听证会,扎克伯格提前一天便来到了华盛顿特区,4月初的华盛顿依然春寒料峭,这里的人们大多身着深灰色大衣,神情肃穆,行色匆匆,这里与明媚温暖的加州完全是两个世界,这并不是他能够穿着T恤短裤,和妻子孩子在自家后院烧烤做线上视频直播,与成百上千万Facebook用户轻松聊天的时刻。

他不得不穿上为他量身定做的深蓝色修身西装、系上领带,端坐在摆放着名牌“Mr. Zuckberg”的桌子后面,与几十名参议员,上百名媒体记者共处一室,熬过接下来长达5个半小时的听证会。

“他很紧张,但他显得信心十足,”现场的一名人员这样描述,“他是一个聪明人。”

还未落座,扎克伯格就被数十名现场摄影记者围成的人墙所包围,他全身上下的各个角度,动作神情的每一个细节,都被无情地暴露在冰冷的镜头前。

但扎克伯格显然是有备而来,坐在听证席上的他保持上身挺直,对每一个问题都认真倾听,与提问的议员进行眼神接触,他改掉了过去回答问题时都先加上“so”语气词的习惯,而是先以“Senator”(参议员),“Congressman”或“Congresswoman”(议员)来称呼向他提问的对方,然后再作答。

他的桌上摆放着他的团队为他提前准备好的应答提纲,在听证会中场休息的间隙,现场媒体拍到了其中一页内容,厚厚的一叠纸上基本涉及到了所有他们能事先想到的议员们可能问到的问题,他的座椅放上了厚厚的垫子,或许也是团队为他精心准备的,为了让他在镜头面前显得更高大,更符合在危机时刻的领导者形象。

尽管时不时咽下口水,表情尴尬或频繁举起水杯,但出现在国会的扎克伯格,并不是我们过去所熟悉的那个穿着灰色帽衫,语速飞快,说着“快速行动,打破一切”的年轻创业者形象,而是一位训练有素,应对自如的CEO,这是一家正处在危机中的公司所需要的领导者的形象。

反观听证会上坐在扎克伯格对面的数十名国会议员,他们的表现却让人大失所望,或者说,人们从来就没有对这次听证抱太大期望,数十个问题暴露出了这些政治圈人士与21世纪科技圈完全的隔阂,他们与扎克伯格之间的许多问答,双方仿佛是在各自语境体系下的自说自话,出现了许多难以言状的尴尬时刻。

例如,一名议员问“如果用户不用支付你提供的服务的话,你如何维持你的公司经营?”

扎克伯格停顿片刻,说,“参议员,我们卖广告。”

“哦,是这样啊。”这位参议员说。

有一位议员说,“我13岁的儿子查理是个活跃的Instagram(Facebook旗下图片分享应用)用户,他让我确保今天提到他。”

另一位议员说,“如果我通过Whatsapp(Facebook旗下即时通讯应用)发邮件,这会让广告主知道里面的信息吗?”

议员们的许多问题,暴露了他们对一些最基本互联网常识或Facebook这家公司的无知,Twitter上的一名用户甚至嘲讽说,“这些议员的平均年龄已经100岁了。”

整场听证会,议员们的问题还缺乏重点,往往漫无边际,围绕着一些无关痛痒的问题兜圈子。

在议员们“不给力”的问题下,扎克伯格也得以完全依照此前团队所设计的策略,有条不紊地完成这两天的既定任务:承认错误,道歉,具体问题不做肯定或否定的回答,交给团队后续跟进,不做承诺,不否定目前的商业模式,不表现地过于贪婪。

Open MIC组织执行总监Michael Connor评价称,扎克伯格的听证会表现仅能算“勉强通过”,谈不上“优异”。这家代表Facebook投资者的机构在听证会开始前一天公开呼吁扎克伯格辞去Facebook的所有职务。

听证会的发起,源自Facebook大面积用户数据泄漏事件的爆发,由于爆料人称大数据公司Cambridge\r\n \r\nAnalytica利用从Facebook获得的大量用户数据,进行精准政治广告投放,以影响政治活动,事件可能涉及到8700万Facebook用户,其中大多数人位于美国,这些都引起了华盛顿的关注。

这场事件的另几个关键词是“俄罗斯操纵”、“美国总统选举”,这些已经触及到美国国家安全和核心利益。出于对各自选区选民的责任,这场听证会在所难免。

但参加听证会的国会议员的表现,或许连“通过”的标准都达不到。听证会的最终目的,是为了让这些立法者们能够更好地了解情况,最终至少能够形成对于某些现存问题的一致看法,并通过立法程序加以解决,尽管扎克伯格本人在听证会期间也明确表达了愿意接受“正确的监管”的态度,但至少从这两天的听证会现场情况来看,要达成上述目的的希望渺茫。

另一个尴尬的事实是,参与听证会的近百名议员,大多数都直接或间接接受过Facebook的政治捐款。在过去12年中,Facebook总共投入了700万美元用于政治捐款,从2014年至今,对扎克伯格质询的议员总共从Facebook获取了超过64万的政治捐助。

两天的听证会被一名Twitter用户评价为“走过场”,没有“实质意义”,如果说第一天的听证会上,扎克伯格还不时露出紧张的神态,第二天的他则完全神态自若,当主持整场听证会的议员提议休息片刻,扎克伯格回答说,“要不再来几个问题?”美国新闻电视网CNN评价道,两天的听证会,扎克伯格得以全身而退,毫发无伤。


', 103, NULL, '{}', NULL, 10); INSERT INTO `cms_content` VALUES (107, '2019-12-27 10:56:27', '2021-03-25 10:18:03', '2019-12-27 10:56:30', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499864406172.jpg', NULL, NULL, ',3,', NULL, NULL, NULL, NULL, 635, NULL, NULL, NULL, NULL, NULL, 'JreCms主要功能介绍', NULL, NULL, '

    JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。

    1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;

    2、系统采用JAVA语言开发,使用EhCache缓存技术;

    3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;

    4、系统采用响应式管理后台,满足各类设备随时管理的需要;

    5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;

    6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。


源码托管地址:

GitHub:-

Gitee:https://gitee.com/heyewei/JFinalcms


简单到想哭的标签:

1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)#(content.title)#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 102, '[]', '{}', NULL, 10); INSERT INTO `cms_content` VALUES (108, '2019-12-27 11:01:14', '2019-12-28 16:25:30', '2019-12-27 11:01:09', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499435499884.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 88, NULL, NULL, NULL, NULL, NULL, '域名注册服务', NULL, NULL, '

\r\n     JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。\r\n

\r\n

\r\n     1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;\r\n

\r\n

\r\n     2、系统采用JAVA语言开发,使用EhCache缓存技术;\r\n

\r\n

\r\n     3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;\r\n

\r\n

\r\n     4、系统采用响应式管理后台,满足各类设备随时管理的需要;\r\n

\r\n

\r\n     5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;\r\n

\r\n

\r\n     6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。
\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 源码托管地址:\r\n

\r\n

\r\n GitHub:-
\r\n

\r\n

\r\n Gitee:https://gitee.com/heyewei/JFinalcms\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 简单到想哭的标签:\r\n

\r\n
1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)\r\n    <p><a href="#(content.path)">#(content.title)</a></p>\r\n#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 106, NULL, '{\"leixing\":\"基础版\",\"jiage\":\"0\",\"yanse\":\"红色\"}', NULL, 10); INSERT INTO `cms_content` VALUES (109, '2019-12-27 11:03:15', '2020-11-08 00:02:00', '2019-12-27 11:03:18', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499813391526.jpg', NULL, NULL, NULL, NULL, NULL, NULL, b'0', 281, NULL, NULL, NULL, NULL, NULL, '网站建设极速版', NULL, NULL, '

    JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。

    1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;

    2、系统采用JAVA语言开发,使用EhCache缓存技术;

    3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;

    4、系统采用响应式管理后台,满足各类设备随时管理的需要;

    5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;

    6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。


源码托管地址:

GitHub:-

Gitee:https://gitee.com/heyewei/JFinalcms


简单到想哭的标签:

1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)#(content.title)#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 105, NULL, '{\"leixing\":\"旗舰版\",\"jiage\":\"99999\",\"yanse\":\"绿色\"}', NULL, 10); INSERT INTO `cms_content` VALUES (110, '2019-12-27 11:05:56', '2019-12-27 11:05:54', '2019-12-27 11:05:52', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523501297516241.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 409, NULL, NULL, NULL, NULL, NULL, '网站建设全能版', NULL, NULL, '

\r\n     JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。\r\n

\r\n

\r\n     1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;\r\n

\r\n

\r\n     2、系统采用JAVA语言开发,使用EhCache缓存技术;\r\n

\r\n

\r\n     3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;\r\n

\r\n

\r\n     4、系统采用响应式管理后台,满足各类设备随时管理的需要;\r\n

\r\n

\r\n     5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;\r\n

\r\n

\r\n     6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。
\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 源码托管地址:\r\n

\r\n

\r\n GitHub:-
\r\n

\r\n

\r\n Gitee:https://gitee.com/heyewei/JFinalcms\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 简单到想哭的标签:\r\n

\r\n
1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)\r\n    <p><a href="#(content.path)">#(content.title)</a></p>\r\n#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 105, NULL, '{}', NULL, 10); INSERT INTO `cms_content` VALUES (111, '2019-12-27 11:07:21', '2022-03-06 08:07:46', '2019-12-27 11:07:16', 1, '', '', '', '/cms/static/upload/image/20180412/1523499864406172.jpg', '', '', '', '', NULL, NULL, NULL, 640, NULL, NULL, NULL, '', '', '网站建设商城版', '', '', '

    JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。

    1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;

    2、系统采用JAVA语言开发,使用EhCache缓存技术;

    3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;

    4、系统采用响应式管理后台,满足各类设备随时管理的需要;

    5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;

    6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。


源码托管地址:

GitHub:-

Gitee:https://gitee.com/heyewei/JFinalcms


简单到想哭的标签:

1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)#(content.title)#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 105, '[]', '{\"leixing\":\"基础版\",\"jiage\":\"\",\"yanse\":\"橙色\"}', '', 10); -INSERT INTO `cms_content` VALUES (112, '2019-12-27 11:09:27', '2019-12-27 11:09:29', '2019-12-27 11:09:32', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499979727269.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 539, NULL, NULL, NULL, NULL, NULL, '网站空间', NULL, NULL, '

\r\n     JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。\r\n

\r\n

\r\n     1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;\r\n

\r\n

\r\n     2、系统采用JAVA语言开发,使用EhCache缓存技术;\r\n

\r\n

\r\n     3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;\r\n

\r\n

\r\n     4、系统采用响应式管理后台,满足各类设备随时管理的需要;\r\n

\r\n

\r\n     5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;\r\n

\r\n

\r\n     6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。
\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 源码托管地址:\r\n

\r\n

\r\n GitHub:-
\r\n

\r\n

\r\n Gitee:https://gitee.com/heyewei/JFinalcms\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 简单到想哭的标签:\r\n

\r\n
1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)\r\n    <p><a href="#(content.path)">#(content.title)</a></p>\r\n#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 106, NULL, '{}', NULL, 10); +INSERT INTO `cms_content` VALUES (112, '2019-12-27 11:09:27', '2019-12-27 11:09:29', '2019-12-27 11:09:32', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523499979727269.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 540, NULL, NULL, NULL, NULL, NULL, '网站空间', NULL, NULL, '

\r\n     JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。\r\n

\r\n

\r\n     1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;\r\n

\r\n

\r\n     2、系统采用JAVA语言开发,使用EhCache缓存技术;\r\n

\r\n

\r\n     3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;\r\n

\r\n

\r\n     4、系统采用响应式管理后台,满足各类设备随时管理的需要;\r\n

\r\n

\r\n     5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;\r\n

\r\n

\r\n     6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。
\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 源码托管地址:\r\n

\r\n

\r\n GitHub:-
\r\n

\r\n

\r\n Gitee:https://gitee.com/heyewei/JFinalcms\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 简单到想哭的标签:\r\n

\r\n
1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)\r\n    <p><a href="#(content.path)">#(content.title)</a></p>\r\n#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 106, NULL, '{}', NULL, 10); INSERT INTO `cms_content` VALUES (113, '2019-12-27 11:12:57', '2019-12-27 11:12:55', '2019-12-27 11:12:53', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180412/1523500443228678.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 324, NULL, NULL, NULL, NULL, NULL, '湖南XXXX网络科技有限公司', NULL, NULL, '

\r\n     JreCms是开源免费的JAVA企业网站开发建设管理系统,是一套高效、简洁、\r\n 强悍的可免费商用的JAVA \r\nCMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。\r\n

\r\n

\r\n     1、系统采用高效、简洁、强悍的模板标签,只要懂HTML就可快速开发企业网站;\r\n

\r\n

\r\n     2、系统采用JAVA语言开发,使用EhCache缓存技术;\r\n

\r\n

\r\n     3、系统默认采用Mysql轻型数据库,方便快捷,轻松上手;\r\n

\r\n

\r\n     4、系统采用响应式管理后台,满足各类设备随时管理的需要;\r\n

\r\n

\r\n     5、系统支持内容模型、多语言、自定义表单、筛选、多条件搜索、小程序、APP等功能;\r\n

\r\n

\r\n     6、系统支持多种URL模式及模型、栏目、内容自定义地址名称,满足各类网站推广优化的需要。
\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 源码托管地址:\r\n

\r\n

\r\n GitHub:-
\r\n

\r\n

\r\n Gitee:https://gitee.com/heyewei/JFinalcms\r\n

\r\n

\r\n
\r\n

\r\n

\r\n 简单到想哭的标签:\r\n

\r\n
1、全局标签示意:\r\n#(currentWeb.title) 站点标题 \r\n#(currentWeb.logo) 站点logo\r\n2、内容分页标签示意:\r\n#content_page(pageNumber = 1,pageSize = 8)   \r\n#for(content : contentPage.list)\r\n    <p><a href="#(content.path)">#(content.title)</a></p>\r\n#end\r\n#end\r\n3、内容页标签示意:\r\n#(content.title) 标题\r\n#(content.subtitle)副标题\r\n#(content.author) 作者\r\n#(content.source) 来源\r\n更多简单到想哭的标签请参考开发手册...
', 107, NULL, '{}', NULL, 10); -INSERT INTO `cms_content` VALUES (114, '2019-12-27 11:15:12', '2019-12-27 11:15:10', '2019-12-27 11:15:07', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 141, NULL, NULL, NULL, NULL, NULL, '信息审核专员', NULL, NULL, '

岗位职责:

1、根据业务规范对全平台音视图文内容进行审核、筛选及处理;

2、对平台内容进行监管处理和备案,维持网络秩序;

3、为用户提供平台业务咨询服务,保障产品活动顺利进行;

4、受理客户投诉,在授权范围内予以解决;

5、参与修订审核标准,优化审核流程与规范。

 

岗位要求:

1、大专以上学历,专业不限,有视频网站内容审核经验者优先;

2、熟悉互联网信息安全,有敏感的风险意识,针对突发热点话题具备一定的判断处理能力;

3、耐心、细致、踏实、严谨,具备高度的责任心和团队合作精神;

4、有一定沟通协调能力及组织领导力,能够承担一定的压力与挑战。

说明:上班时间遵从部门内部排班安排,能适应夜班。

岗位升值空间:组长、主管、平台运营专员、网络推广、音乐编辑…


工作地址:\r\n                        

北京市朝阳区


', 108, NULL, '{}', NULL, 10); -INSERT INTO `cms_content` VALUES (115, '2019-12-27 11:16:02', '2019-12-27 11:15:58', '2019-12-27 11:15:56', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 169, NULL, NULL, NULL, NULL, NULL, '平台运营', NULL, NULL, '

岗位职责:

1、 负责平台运营的业务支撑工作,保证平台业务稳定发展;

2、 参与和优化部门业务操作流程,保证团队协同工作;

3、 为用户提供平台业务咨询服务;

4、 受理客户投诉,在授权范围内予以解决;

5、 网络活动视频录像与剪辑,挖掘优秀作品,后台信息简单编辑处理;

6、 与公司其他部门配合工作。


任职要求:

1、 专科及以上学历,热爱互联网行业;

2、 较强的工作责任心,踏实勤恳,积极向上,性格开朗;

3、 形象佳,口齿伶俐,普通话标准;

4、 熟练使用电脑,经常上网,会使用office等相关办公软件;

5、 能适应白班、夜班倒班工作制;

注:根据个人能力和特长,公司给予更多的发展及晋升空间。


工作地址:\r\n                        

北京市朝阳区北苑路


', 108, NULL, '{}', NULL, 10); -INSERT INTO `cms_content` VALUES (116, '2019-12-27 11:20:07', '2019-12-28 16:25:54', '2019-12-27 11:20:03', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 224, NULL, NULL, NULL, NULL, NULL, '高级Linux运维工程师', NULL, NULL, '

岗位职责:

1、负责公司服务器基础环境的部署、配置、日常巡检、维护、故障的应急响应和问题处理;

2、负责公司kvm虚拟化平台的管理工作,基础环境部署,性能容量管理,漏洞扫描、安全加固,保证其稳定、高效运行;

3、负责维护公司集中监控系统,根据业务需求调整监控策略、告警阀值,处理告警信息和问题跟踪;

4、编写系统维护文档,完善并更新运维流程文档;

 

任职要求:

1、计算机等相关专业,本科以上学历,2年以上linux系统管理工作经验,经验丰富可适当放宽学历条件;

2、熟悉基础网络知识,熟悉TCP/IP协议工作原理,有大流量网站服务器管理经验者优先,熟悉自动化运维工具(三选一puppet/saltstack/ansible)优先;

3、熟悉linux系统高可用技术和负载均衡技术,熟悉WEB相关技术,包括Apache/Nginx/tomcat/squid 等应用程序的安装、配置和维护;

4、熟悉服务器硬件,具备排错及故障定位、处理的能力;熟练使用各种工具进行系统状态监控(cacti、Nagios、ganglia等),有虚拟化平台相关经验者优先(vmware/kvm/docker);

5、有良好的沟通能力和团队合作精神,有强烈的事业心和责任感,工作细心,热爱学习和分享,具有RHCE、RHCA认证者优先;

6、熟练撑握shell/python/perl等1至2种语言。


工作地址:\r\n                        

北京市朝阳区


', 108, NULL, '{}', NULL, 10); +INSERT INTO `cms_content` VALUES (114, '2019-12-27 11:15:12', '2019-12-27 11:15:10', '2019-12-27 11:15:07', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 143, NULL, NULL, NULL, NULL, NULL, '信息审核专员', NULL, NULL, '

岗位职责:

1、根据业务规范对全平台音视图文内容进行审核、筛选及处理;

2、对平台内容进行监管处理和备案,维持网络秩序;

3、为用户提供平台业务咨询服务,保障产品活动顺利进行;

4、受理客户投诉,在授权范围内予以解决;

5、参与修订审核标准,优化审核流程与规范。

 

岗位要求:

1、大专以上学历,专业不限,有视频网站内容审核经验者优先;

2、熟悉互联网信息安全,有敏感的风险意识,针对突发热点话题具备一定的判断处理能力;

3、耐心、细致、踏实、严谨,具备高度的责任心和团队合作精神;

4、有一定沟通协调能力及组织领导力,能够承担一定的压力与挑战。

说明:上班时间遵从部门内部排班安排,能适应夜班。

岗位升值空间:组长、主管、平台运营专员、网络推广、音乐编辑…


工作地址:\r\n                        

北京市朝阳区


', 108, NULL, '{}', NULL, 10); +INSERT INTO `cms_content` VALUES (115, '2019-12-27 11:16:02', '2019-12-27 11:15:58', '2019-12-27 11:15:56', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 171, NULL, NULL, NULL, NULL, NULL, '平台运营', NULL, NULL, '

岗位职责:

1、 负责平台运营的业务支撑工作,保证平台业务稳定发展;

2、 参与和优化部门业务操作流程,保证团队协同工作;

3、 为用户提供平台业务咨询服务;

4、 受理客户投诉,在授权范围内予以解决;

5、 网络活动视频录像与剪辑,挖掘优秀作品,后台信息简单编辑处理;

6、 与公司其他部门配合工作。


任职要求:

1、 专科及以上学历,热爱互联网行业;

2、 较强的工作责任心,踏实勤恳,积极向上,性格开朗;

3、 形象佳,口齿伶俐,普通话标准;

4、 熟练使用电脑,经常上网,会使用office等相关办公软件;

5、 能适应白班、夜班倒班工作制;

注:根据个人能力和特长,公司给予更多的发展及晋升空间。


工作地址:\r\n                        

北京市朝阳区北苑路


', 108, NULL, '{}', NULL, 10); +INSERT INTO `cms_content` VALUES (116, '2019-12-27 11:20:07', '2019-12-28 16:25:54', '2019-12-27 11:20:03', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 226, NULL, NULL, NULL, NULL, NULL, '高级Linux运维工程师', NULL, NULL, '

岗位职责:

1、负责公司服务器基础环境的部署、配置、日常巡检、维护、故障的应急响应和问题处理;

2、负责公司kvm虚拟化平台的管理工作,基础环境部署,性能容量管理,漏洞扫描、安全加固,保证其稳定、高效运行;

3、负责维护公司集中监控系统,根据业务需求调整监控策略、告警阀值,处理告警信息和问题跟踪;

4、编写系统维护文档,完善并更新运维流程文档;

 

任职要求:

1、计算机等相关专业,本科以上学历,2年以上linux系统管理工作经验,经验丰富可适当放宽学历条件;

2、熟悉基础网络知识,熟悉TCP/IP协议工作原理,有大流量网站服务器管理经验者优先,熟悉自动化运维工具(三选一puppet/saltstack/ansible)优先;

3、熟悉linux系统高可用技术和负载均衡技术,熟悉WEB相关技术,包括Apache/Nginx/tomcat/squid 等应用程序的安装、配置和维护;

4、熟悉服务器硬件,具备排错及故障定位、处理的能力;熟练使用各种工具进行系统状态监控(cacti、Nagios、ganglia等),有虚拟化平台相关经验者优先(vmware/kvm/docker);

5、有良好的沟通能力和团队合作精神,有强烈的事业心和责任感,工作细心,热爱学习和分享,具有RHCE、RHCA认证者优先;

6、熟练撑握shell/python/perl等1至2种语言。


工作地址:\r\n                        

北京市朝阳区


', 108, NULL, '{}', NULL, 10); INSERT INTO `cms_content` VALUES (207, '2020-03-20 11:17:42', '2020-03-20 11:17:44', '2020-03-20 11:17:46', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180524/1527130507157868.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, '浅谈采购桥架选择的要点', NULL, NULL, '

  1.电缆桥架结构类型选择
  在工程设计文件中通常笼统地将电缆桥架称呼为“桥架”,并未指出具体的结构特征,不同类型、不同制作材料的电缆桥架价格相差较大,且结构类型的混乱会带来工作现场散热、机械防护方面的问题。故在设计阶段应要求设计人员根据工程环境特征和技术要求,合理选择电缆桥架的结构特征,并在平面图的型号标注和材料表中进行清晰地表达。

  2.电缆桥架材质选择
  电缆桥架的材质是电缆桥架工程设计常见的另外一个问题。按照材料划分,电缆桥架主要有钢制、玻璃钢和铝合金几种。玻璃钢电缆桥架的特点是质量轻,比重仅为碳钢的1/4;耐水性和耐腐蚀性好,适合化工厂。不易燃烧,难燃型玻璃钢电缆桥架的氧指数≥32。使用寿命长,一般设计寿命为20年,但价格是钢制电缆桥架的3倍。施工的优越性在于切割方便、组装灵活,安装无需动火,这对于爆炸危险环境并且工程工期紧张的化工厂工程意义尤其重大,因为在爆炸危险环境,工程动火安装时化工厂必须停产,经济效益必受影响。铝合金电缆桥架重量也很轻,由于铝、钢比重不同(Al=2.7,Fe=7.86),按重量计算,铝钢之比约为1:3。铝合金电缆桥架外形尺寸、荷载特性均与钢质桥架基本相近。就费用而言,铝合金桥架的造价比镀锌钢制电缆桥架要高20%,使用寿命是钢制电缆桥架的5倍以上。

  3.电缆桥架表面防腐层类别选择
  工程设计中常见的第三个问题是电缆桥架型号没有标注防腐层的类别,也没有统一的文字说明。此问题在现实中有教训,如我国承担总承包的印尼某工程,钢制电缆桥架的表面防腐处理没有进行盐雾试验,完工不久桥架就锈蚀得相当严重,不得不更换。电缆桥架的表面防腐层类别主要有热浸锌、镀锌镍、冷镀锌、粉末静电喷涂等方式,生产厂家资料显示:热浸锌工艺寿命不小于40年,适用于室外重腐蚀环境,造价高;镀锌镍工艺寿命不小于30年,也适用于室外重腐蚀环境,造价高;冷镀锌工艺寿命不小于12年,适用于室外轻腐蚀环境,造价一般;粉末静电喷涂工艺寿命不小于12年,适用于室内常温干燥环境,价格一般。设计人员应该根据工程环境条件合理选择电缆桥架的表面防腐层类别,并在设计文件中清晰地表达。

  4.电缆桥架防火等级选择
  电缆桥架在有防火要求的区段内,可在电缆梯架、托盘内添加具有耐火或难燃性能的板、网等材料构成封闭或半封闭式结构,并采取在桥架及其支吊架表面涂刷防火涂层等措施,其整体耐火性能应满足国家有关规范或标准的要求。在工程防火要求较高的场所,不宜采用铝合金电缆桥架。
  在相同规格下,阻燃型电缆桥架比钢制电缆桥架贵2.2倍,使用寿命是钢制电缆桥架的5倍以上,重量比钢制电缆桥架重30%。防火型电缆桥架比钢制电缆桥架稍贵,使用寿命是钢制电缆桥架的3倍以上,重量与钢制电缆桥架基本相同。

  5.电缆桥架填充率的选择
  电缆梯架、托盘宽度和高度的选择应符合填充率的要求,电缆的梯架和托盘内的填充率在一般情况下,电力电缆可取40%~50%,控制电缆可取50%~70%,且宜预留10%~25%工程发展余量。

  6.电缆桥架载荷等级的选择
  在选择电缆桥架的荷载等级时,电缆桥架的工作均布荷载不应大于所选电缆桥架荷载等级的额定均布荷载,如果电缆桥架的支吊架的实际跨距不等于2m时,则工作均布荷载应满足要求。各种组件及支吊架在满足相应荷载的条件下,其规格尺寸应与托盘、梯架的直线段、弯通系列相匹配。

  7.电缆桥架的规格尺寸选择
  工程实际中,在电缆桥架的规格尺寸选择方面的问题是要么偏大,要么偏紧张。如何合理地选择电缆桥架的规格尺寸呢?《民用建筑电气设计规范》(JGJ16-2008)中8、10、7条规定:“电缆总截面积与托盘内横断面积的比值,电力电缆不应大于40%;控制电缆不应大于50%。”

  8.根据电缆弯曲半径选择电缆桥架
  在选择电缆桥架的弯通或引上、引下装置时,不应小于电缆桥架内电缆最小允许弯曲半径。

  9.材料统计方面的问题
  设计图纸在材料统计方面存在的主要问题:
  1)漏项。有的统计托架材料时仅仅统计直通部分,弯通部分不统计;有的材料表干脆没有支吊架一项。对于工程总承包公司而言,漏项带来的后果是在项目报价阶段导致报价偏低,而在项目执行阶段采购部门老是和供货商签订增补合同,从而导致总承包公司利润的降低。
  2)错项。原因在于很多设计人员对于一些概念不清,有的把弯通、支吊架算作附件,有的把盖板当成主材。实际上,电缆桥架的“托架”包括直通和弯通两部分。电缆桥架的“附件”包括各种连接板、盖板、隔板、压板、终端板、引下件、紧固件等。附件在材料表中不开列,由供货商随货配套供应,成本打入托架的单价部分,工程中不需要供货商单独报价。而“支吊架”包括托臂、立柱、吊架等,需要单独开列,工程中供货商需要单独报价。
  3)统计量偏差大,通常是数量偏少。那么工程报价中如何比较准确地统计电缆桥架的材料呢?一般而言,托架的直通部分可考虑1%~2%的裕量,弯通部分则直接统计数量。桥架全长除以平均立柱间距(户外立柱跨距一般采取6m,室内立柱跨距一般采取3m),得到立柱数,增加2%~4%裕量。而桥架全长除以支吊架平均间距,得到支吊架数,再考虑1%~2%裕量。至于支吊架的间距,户内直线段支吊架间距一般取1.5~3m,垂直安装的支架间距不大于2m。非直线段的支吊架配置应当遵守规范规定:当弯通弯曲半径小于300mm时,应在距非直线段与直线结合处300~600mm的直线段侧设置一个支吊架;当弯通弯曲半径不小于300mm时,除在距非直线段与直线结合处300~600mm的直线段侧设置一个支吊架外,在非直线段中部应增设一个支吊架。

  电缆桥架的选型设计
  1、确定环境条件环境条件一般有三种:腐蚀环境、正常环境、特殊环境。
  2、根据多数电缆走向,在室内可沿着、柱、梁、楼板走,在室外尽可能沿工艺管道走。
  3、计算荷重计算在电缆桥架走向断面上的单位长度电缆的重量q及总荷载G
  G总=n1q1+n2q2……nnqn式中:q1·q2·q3……qn为每根电缆单位重量(kg/m)
  n1·n2·n3……nn为相同电缆根数
  G总<G允(电缆侨架的允许荷载参照荷载曲线图表)
  4、选择桥架根据电缆荷载及桥架安装处的环境,以桥架的载荷曲线为依据,来确定桥架的类型和规格及立柱的间距、托臂的长度、桥架的层次,立柱的长度等。
  5、根据电缆走向及安装的环境确定桥架的固定方式;悬挂式、直立式,(这两种形式均可采用单侧固定或双侧固定)、壁侧式等。
  6、各种电缆在电缆桥架上的层次安排与层间距离。
  电缆桥架层次的排列是:弱电控制电缆在最上层,接着一般控制电缆、低压动力电缆、高压动力电缆依次在下排列:如下表:这样排列有利于屏蔽干扰通风、散热等。

', 207, NULL, '{}', NULL, 11); INSERT INTO `cms_content` VALUES (208, '2020-03-20 11:19:01', '2020-03-20 11:19:03', '2020-03-20 11:19:05', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180524/1527130524815864.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, '电缆桥架应有防止电缆刮伤的措施', NULL, NULL, '

  电缆桥架应有防止电缆刮伤的措施,如各种弯通、三通、四通等宜采用圆弧型,电缆引下时宜采用引下装置。电缆桥架由室外进入室内时(如变电所)应密封,可采用防火堵料、沙封等。同时电缆桥架应向室外倾斜,一般可1%坡度,以防雨水倒灌。

  电缆桥架具有机械强度高,它既有金属桥架的刚性又有玻璃钢桥架的韧性,耐腐蚀性能好、抗老化性能强、造型美观、安装方便、使用寿命长。环氧树脂及环氧树脂复合型电缆桥架适合在强腐蚀环境、大跨距、重载荷条件下使用。

', 206, NULL, '{}', NULL, 11); INSERT INTO `cms_content` VALUES (209, '2020-03-20 11:20:26', '2020-03-20 11:20:28', '2020-03-20 11:20:30', 1, NULL, NULL, NULL, '/cms/static/upload/image/20180524/1527130541932713.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, '电镀锌桥架和热镀锌桥架的区别', NULL, NULL, '
  (5)钢结构件热镀锌后,相当于一次退火处理,能有效改善钢基体的机械性能,消除钢件成型焊接时的应力,有利于对钢结构件进行车削加工。
  (6)热镀锌后的件表面光亮美观。
  (7)纯锌层是热镀锌中最富有塑性的一层镀锌层,其性质基本接近于纯锌,具有延展性,所以它富于挠性。

', 207, NULL, '{}', NULL, 11); @@ -803,7 +803,7 @@ CREATE TABLE `cms_role` ( -- ---------------------------- -- Records of cms_role -- ---------------------------- -INSERT INTO `cms_role` VALUES (1, '2019-04-28 15:14:39', '2019-04-28 15:36:46', '管理员', b'1', '系统默认角色', '[]'); +INSERT INTO `cms_role` VALUES (1, '2019-04-28 15:14:39', '2019-04-28 15:36:46', '管理员', b'1', '系统默认角色', '[1]'); -- ---------------------------- -- Table structure for cms_role_site diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/CommonAttribute.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/CommonAttribute.java index 8bbc6fc..9ad9f92 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/CommonAttribute.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/CommonAttribute.java @@ -27,10 +27,10 @@ public final class CommonAttribute { public static final String FRONT_PATH="/cms/"; /** 后台错误页面 */ - public static final String ADMIN_ERROR_VIEW = ADMIN_PATH+"error/500.html"; + public static final String ADMIN_ERROR_VIEW = "error/500.html"; /** 后台权限错误页面 */ - public static final String ADMIN_UNAUTHORIZED_VIEW = ADMIN_PATH+"error/403.html"; + public static final String ADMIN_UNAUTHORIZED_VIEW = "error/403.html"; /** 前台错误页面 */ public static final String FRONT_ERROR_VIEW = "/500.html"; diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/CmsEnjoyRender.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/CmsEnjoyRender.java new file mode 100644 index 0000000..122387d --- /dev/null +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/CmsEnjoyRender.java @@ -0,0 +1,147 @@ +package vip.fuck.sm.plugins.cms.config; + +import cn.hutool.core.util.HashUtil; +import cn.hutool.json.JSONUtil; +import com.jfinal.template.Directive; +import com.jfinal.template.Engine; +import com.jfinal.template.Template; +import org.noear.solon.annotation.Component; +import org.noear.solon.boot.ServerProps; +import org.noear.solon.core.handle.Context; +import org.noear.solon.core.handle.ModelAndView; +import org.noear.solon.core.util.SupplierEx; +import org.noear.solon.data.cache.LocalCacheService; +import org.noear.solon.view.ViewConfig; +import org.noear.solon.view.enjoy.EnjoyDirectiveFactory; +import org.noear.solon.view.enjoy.EnjoyRender; +import vip.fuck.sm.plugins.cms.filter.PageCacheFilter; + +import java.io.BufferedWriter; +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; + + +public class CmsEnjoyRender extends EnjoyRender { + + EnjoyRender enjoyRender; + LocalCacheService localCacheService; + public CmsEnjoyRender(EnjoyRender enjoyRender , LocalCacheService localCacheService) { + this.enjoyRender = enjoyRender; + this.localCacheService = localCacheService; + } + + @Override + public Engine getProvider() { + return enjoyRender.getProvider(); + } + + @Override + public Engine getProviderOfDebug() { + return enjoyRender.getProviderOfDebug(); + } + + public CmsEnjoyRender() { + super(); + } + + public CmsEnjoyRender(ClassLoader classLoader) { + super(classLoader); + } + + public CmsEnjoyRender(ClassLoader classLoader, String viewPrefix) { + super(classLoader, viewPrefix); + } + + @Override + public void putDirective(String name, Class clz) { + enjoyRender.putDirective(name, clz); + } + + @Override + public void putDirective(String name, EnjoyDirectiveFactory directiveFactory) { + enjoyRender.putDirective(name, directiveFactory); + } + + @Override + public void putVariable(String name, Object value) { + enjoyRender.putVariable(name, value); + } + + @Override + public void putFunction(String path) { + enjoyRender.putFunction(path); + } + + @Override + public void render(Object obj, Context ctx) throws Throwable { + if (obj == null) { + return; + } + + if (obj instanceof ModelAndView) { + this.render_mav((ModelAndView) obj, ctx, ctx::outputStream); + } else { + ctx.output(obj.toString()); + } + } + + @Override + public String renderAndReturn(Object obj, Context ctx) throws Throwable { + if (obj == null) { + return null; + } + + if (obj instanceof ModelAndView) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + render_mav((ModelAndView) obj, ctx, () -> outputStream); + return outputStream.toString(); + } else { + return obj.toString(); + } + } + + @Override + public void render_mav(ModelAndView mv, Context ctx, SupplierEx outputStream) throws Throwable { + if (ctx.contentTypeNew() == null) { + ctx.contentType("text/html;charset=utf-8"); + } + + if (ViewConfig.isOutputMeta()) { + ctx.headerSet(ViewConfig.HEADER_VIEW_META, "MyEnjoyRender"); + } + + //添加 context 变量 + mv.putIfAbsent("context", ctx); + + Template template = null; + + if (super.getProviderOfDebug() != null) { + try { + template = super.getProviderOfDebug().getTemplate(mv.view()); + } catch (Exception e) { + //忽略不计 + } + } + + if (template == null) { + template = super.getProvider().getTemplate(mv.view()); + } + + // 输出流 + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream.get(), ServerProps.response_encoding)); + String mvStr = template.renderToString(mv.model()); + if(mvStr!=null && PageCacheFilter.isCache(ctx.pathNew())){ + String jsonStr = JSONUtil.toJsonStr(ctx.paramMap()); + long hash64 = HashUtil.metroHash64(jsonStr.getBytes(StandardCharsets.UTF_8)); + localCacheService.store(PageCacheFilter.CMS_PAGE_CACHE+ctx.pathNew()+"_"+hash64,mvStr,3*60); + } + writer.write(mvStr); +// template.render(mv.model(), writer); + + writer.flush(); + } + + +} diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/Configxv.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/Configxv.java index a8735c2..f606fa5 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/Configxv.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/config/Configxv.java @@ -8,13 +8,17 @@ import com.jfinal.template.ext.spring.JFinalView; import com.zaxxer.hikari.HikariDataSource; import org.noear.solon.Solon; import org.noear.solon.annotation.Bean; +import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Configuration; import org.noear.solon.annotation.Inject; +import org.noear.solon.data.cache.CacheService; +import org.noear.solon.data.cache.LocalCacheService; import org.noear.solon.view.enjoy.EnjoyRender; import vip.fuck.sm.plugins.cms.entity._MappingKit; import vip.fuck.sm.plugins.cms.util.JFinal; import javax.sql.DataSource; +import java.util.Properties; @Configuration public class Configxv { @@ -24,7 +28,10 @@ public class Configxv { return dataSource; } - + @Bean("cmsCacheService") + public CacheService cmsCacheService() { + return new LocalCacheService(); + } @Bean public void cx(@Db("main") ActiveRecordPlugin arp){ @@ -37,9 +44,13 @@ public class Configxv { } } + + @Bean - public void putbase(@Inject EnjoyRender enjoyRender){ + public void putbase(@Inject EnjoyRender enjoyRender , @Inject("cmsCacheService") LocalCacheService localCacheService){ enjoyRender.putVariable("base", JFinal.getContextPath()); + CmsEnjoyRender render = new CmsEnjoyRender(enjoyRender,localCacheService); + Solon.app().renderManager().register(".shtm", render); } } diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/BaseController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/BaseController.java index 76e49e8..5964218 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/BaseController.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/BaseController.java @@ -131,10 +131,13 @@ public class BaseController { } protected Integer getParaToInt(String name){ - if(Context.current().paramNames().contains(name)){ + String v = Context.current().param(name); + if(ObjectUtil.isNull(v)){ + return null; + } else if(NumberUtil.isInteger(v) ){ return Context.current().paramAsInt(name); }else{ - return null; + throw new RuntimeException("参数错误"); } } @@ -254,7 +257,7 @@ public class BaseController { view = fixedSubfix(view); Site currSite = getCurrentSite(); if (ObjectUtil.isEmpty(currSite)) { - Site currentSite = new Site().dao().findById(1); + Site currentSite = new Site().findDefault(); getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite); } return new ModelAndView(CommonAttribute.ADMIN_PATH+view); @@ -289,14 +292,6 @@ public class BaseController { } } Context current = Context.current(); - SessionState s = getSession(); - JSONObject session = JSONUtil.createObj(); - if(ObjectUtil.isNotEmpty(s.sessionKeys())){ - for (String sessionKey : s.sessionKeys()) { - session.set(sessionKey,s.sessionGet(sessionKey)); - } - } - view.put("session",session); if(kv!=null){ for (int i = 0; i < kv.length; i+=2) { diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/IndexController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/IndexController.java index 4f8b78a..6d6ed47 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/IndexController.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/IndexController.java @@ -57,6 +57,9 @@ public class IndexController extends BaseController { } } Site currentSite = new Site().dao().findById(siteId); + if(currentSite==null){ + currentSite = new Site().findDefault(); + } getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite); //统计 setAttr("contentCount", Db.queryInt("select count(*) from cms_content")); diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LoginController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LoginController.java index dea7e8a..a1a2fc6 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LoginController.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/admin/LoginController.java @@ -25,10 +25,7 @@ import vip.fuck.sm.plugins.cms.entity.base.BaseModel; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * Controller - 管理员登录 @@ -97,7 +94,7 @@ public class LoginController extends BaseController { } for (Method f : ms) { if(f.getName().startsWith("get") && f.getReturnType() != Void.class && f.getParameterTypes().length ==0 ){ - System.out.println(m.getClass().getName()+"."+ f.getName()+"();"); +// System.out.println(m.getClass().getName()+"."+ f.getName()+"();"); Object value = ReflectUtil.invoke(m, f); if(value instanceof Model){ value = toJSONObject((Model) value,models); diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/BaseController.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/BaseController.java index ca97d4e..0fe1963 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/BaseController.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/controller/front/BaseController.java @@ -45,7 +45,7 @@ public class BaseController extends vip.fuck.sm.plugins.cms.controller.admin.Ba view = fixedSubfix(view); Site currSite = getCurrentSite(); if (ObjectUtil.isEmpty(currSite)) { - Site currentSite = new Site().dao().findById(1); + Site currentSite = new Site().findDefault(); getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite); } String pcTemplate = currSite.getPcTemplate(); diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/filter/PageCacheFilter.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/filter/PageCacheFilter.java index 0854248..41198d2 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/filter/PageCacheFilter.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/filter/PageCacheFilter.java @@ -1,51 +1,89 @@ -//package vip.fuck.sm.plugins.cms.filter; -// -// -//import net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter; -//import org.apache.commons.lang.BooleanUtils; -//import org.noear.solon.core.handle.FilterChain; -//import org.smartboot.http.server.HttpRequest; -//import org.smartboot.http.server.HttpResponse; -//import vip.fuck.sm.plugins.cms.Config; -//import vip.fuck.sm.plugins.cms.util.SystemUtils; -// -// -// -//public class PageCacheFilter extends SimplePageCachingFilter { -// -// @Override -// protected void doFilter(HttpRequest request, HttpResponse response, FilterChain chain) -// throws Exception { -// // TODO Auto-generated method stub -// Config config = SystemUtils.getConfig(); -// if (BooleanUtils.isTrue(config.getIsCacheEnabled()) -// && isCache(request.getRequestURI())) { -// super.doFilter(request, response, chain); -// } else { -// chain.doFilter(request, response); -// } -// } -// -// private boolean isCache(String requestURI) { -// if (requestURI.startsWith("/api/") -// || requestURI.startsWith("/category/") -// || requestURI.startsWith("/content/") -// ) { -// return false; -// } -// //通过正则表达式判断是否缓存该页面 -// String[] cacheUrl = new String[] { -// "^/$",//首页 -// "^/[A-Za-z0-9_]+$",//栏目页 -// "^/[A-Za-z0-9_]+/\\d+$" //详情页 -// }; -// for (String string : cacheUrl) { -// if (requestURI.matches(string)) { -// return true; -// } -// } -// return false; -// } -// -// -//} +package vip.fuck.sm.plugins.cms.filter; + +import cn.hutool.core.util.HashUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import org.apache.commons.lang.BooleanUtils; +import org.noear.solon.annotation.Component; +import org.noear.solon.annotation.Inject; +import org.noear.solon.core.handle.Context; +import org.noear.solon.core.handle.Handler; +import org.noear.solon.core.handle.SessionState; +import org.noear.solon.core.route.RouterInterceptor; +import org.noear.solon.core.route.RouterInterceptorChain; +import org.noear.solon.core.util.LogUtil; +import org.noear.solon.data.cache.LocalCacheService; +import vip.fuck.sm.plugins.cms.Config; +import vip.fuck.sm.plugins.cms.util.SystemUtils; + +import java.nio.charset.StandardCharsets; + +@Component +public class PageCacheFilter implements RouterInterceptor { + + public static final String CMS_PAGE_CACHE ="cms_page_cache"; + + @Inject("cmsCacheService") + LocalCacheService cmsCacheService; + + public static boolean isCache(String requestURI) { + if (requestURI.startsWith("/api/cms/") + || requestURI.startsWith("/cms/category/") + || requestURI.startsWith("/cms/content/") + || requestURI.startsWith("/cms/admin") + ) { + return false; + } + //通过正则表达式判断是否缓存该页面 + String[] cacheUrl = new String[] { + "^/cms/*$",//首页 + "^/cms/[A-Za-z0-9_]+/*$",//栏目页 + "^/cms/[A-Za-z0-9_]+/\\d+/*$" //详情页 + }; + for (String string : cacheUrl) { + if (requestURI.matches(string)) { + return true; + } + } + return false; + } + + @Override + public void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable { + SessionState s = ctx.sessionState(); + System.out.println(ctx.pathNew()); + LogUtil.global().info("pathNew:"+ctx.pathNew()); + LogUtil.global().info("paramMap:"+ctx.paramMap()); + JSONObject session = JSONUtil.createObj(); + if(ObjectUtil.isNotEmpty(s.sessionKeys())){ + for (String sessionKey : s.sessionKeys()) { + session.set(sessionKey,s.sessionGet(sessionKey)); + } + } + ctx.attrSet("session",session); + String pathNew = ctx.pathNew(); + Config config = SystemUtils.getConfig(); + if ( BooleanUtils.isTrue(config.getIsCacheEnabled()) + && isCache(pathNew)) { + String jsonStr = JSONUtil.toJsonStr(ctx.paramMap()); + long hash64 = HashUtil.metroHash64(jsonStr.getBytes(StandardCharsets.UTF_8)); + String o = cmsCacheService.get(PageCacheFilter.CMS_PAGE_CACHE+ctx.pathNew()+"_"+hash64,String.class); + if(o!=null){ + ctx.outputAsHtml(o); + LogUtil.global().info("pageCache_outputAsHtml:"+ctx.pathNew()); + return; + } + } + chain.doIntercept(ctx, mainHandler); + } + + + + + + + + + +} diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/filter/PermissionFilter.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/filter/PermissionFilter.java index db4e651..fc3793a 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/filter/PermissionFilter.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/filter/PermissionFilter.java @@ -1,121 +1,125 @@ -//package vip.fuck.sm.plugins.cms.filter; -// -//import com.alibaba.fastjson.JSONObject; -//import com.cms.Feedback; -//import com.cms.entity.Admin; -//import com.cms.util.WebUtils; -//import org.apache.commons.lang.BooleanUtils; -// -//import javax.servlet.*; -//import javax.servlet.http.HttpServletRequest; -//import javax.servlet.http.HttpServletResponse; -//import java.io.IOException; -//import java.io.PrintWriter; -//import java.util.ArrayList; -//import java.util.List; -// -//public class PermissionFilter implements Filter{ -// -// /** 不包含 */ -// private List adminExcludes = new ArrayList(){{ -// add("/admin/login"); -// add("/admin/error"); -// add("/admin/static"); -// }}; -// -// /** 不包含 */ -// private List permissionExcludes = new ArrayList(){{ -// add("/admin/logout"); -// add("/admin/index"); -// add("/admin/file"); -// add("/admin/cache"); -// add("/admin/profile"); -// }}; -// -// @Override -// public void init(FilterConfig filterConfig) throws ServletException { -// // TODO Auto-generated method stub -// -// } -// -// @Override -// public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) -// throws IOException, ServletException { -// // TODO Auto-generated method stub -// HttpServletRequest request = (HttpServletRequest)servletRequest; -// HttpServletResponse response = (HttpServletResponse)servletResponse; -// String url = request.getRequestURI().toString(); -// String contextPath = request.getContextPath(); -// url = url.substring(contextPath.length()); -// //匹配admin -// for(String key : adminExcludes){ -// if(url.startsWith(key)){ -// filterChain.doFilter(servletRequest, servletResponse); -// return; -// } -// } -// Admin currentAdmin = (Admin) request.getSession().getAttribute(Admin.SESSION_ADMIN); -// if(currentAdmin!=null){ -// //演示程序不允许修改、新增、删除开始 -// if("read".equals(currentAdmin.getUsername())){ -// String lowerUrl = url.toLowerCase(); -// if(lowerUrl.contains("save") -// || lowerUrl.contains("update") -// || lowerUrl.contains("delete") -// || lowerUrl.contains("backup") -// || lowerUrl.contains("restore") -// || lowerUrl.contains("setDefault".toLowerCase()) -// || lowerUrl.contains("generate") -// ){ -// if(WebUtils.isAjaxRequest(request)){ -// //是ajax操作 -// response.setContentType("application/json;charset=UTF-8"); -// PrintWriter writer = response.getWriter(); -// writer.write(JSONObject.toJSONString(Feedback.error("演示账号不允许操作!"))); -// writer.flush(); -// writer.close(); -// return; -// }else{ -// //是url操作 -// response.setContentType("text/html;charset=utf-8"); -// PrintWriter writer = response.getWriter(); -// writer.write(""); -// writer.flush(); -// writer.close(); -// return; -// } -// } -// } -// //演示程序不允许修改、新增、删除结束 -// //系统内置角色 -// if(currentAdmin.getRole()!=null && BooleanUtils.isTrue(currentAdmin.getRole().getIsSystem())){ -// filterChain.doFilter(servletRequest, servletResponse); -// return; -// } -// for(String key : permissionExcludes){ -// if(url.startsWith(key)){ -// filterChain.doFilter(servletRequest, servletResponse); -// return; -// } -// } -// List permissions = currentAdmin.getPermissions(); -// for(String key : permissions){ -// if(url.startsWith(key)){ -// filterChain.doFilter(servletRequest, servletResponse); -// return; -// } -// } -// response.sendRedirect(contextPath+"/admin/error/unauthorized"); -// return; -// } -// response.sendRedirect(contextPath+"/admin/login"); -// return; -// } -// -// @Override -// public void destroy() { -// // TODO Auto-generated method stub -// -// } -// -//} +package vip.fuck.sm.plugins.cms.filter; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import org.apache.commons.lang.BooleanUtils; +import org.noear.solon.Solon; +import org.noear.solon.annotation.Component; +import org.noear.solon.annotation.Inject; +import org.noear.solon.core.handle.Context; +import org.noear.solon.core.handle.Filter; +import org.noear.solon.core.handle.FilterChain; +import org.noear.solon.core.handle.SessionState; +import org.noear.solon.data.cache.LocalCacheService; +import org.smartboot.http.server.HttpRequest; +import org.smartboot.http.server.HttpResponse; +import vip.fuck.sm.plugins.cms.Feedback; +import vip.fuck.sm.plugins.cms.entity.Admin; +import vip.fuck.sm.plugins.cms.util.JFinal; +import vip.fuck.sm.plugins.cms.util.WebUtils; + + +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +@Component +public class PermissionFilter implements Filter { + + + + /** 不包含 */ + private static List adminExcludes = new ArrayList(){{ + add("/cms/admin/login"); + add("/cms/admin/error"); + add("/cms/admin/static"); + }}; + + /** 不包含 */ + private static List permissionExcludes = new ArrayList(){{ + add("/cms/admin/logout"); + add("/cms/admin/index"); + add("/cms/admin/file"); + add("/cms/admin/cache"); + add("/cms/admin/profile"); + }}; + + + + @Override + public void doFilter(Context ctx, FilterChain filterChain) throws Throwable { + + // TODO Auto-generated method stub + HttpRequest request = (HttpRequest) ctx.request(); + HttpResponse response = (HttpResponse) ctx.response(); + String url = ctx.pathNew(); + //匹配admin + for(String key : adminExcludes){ + if(url.startsWith(key)){ + filterChain.doFilter(ctx); + return; + } + } + if(url.startsWith("/cms/admin")){ + JSONObject currentAdmin = ctx.session(Admin.SESSION_ADMIN, cn.hutool.json.JSONObject.class); + if(currentAdmin!=null){ + //演示程序不允许修改、新增、删除开始 + if("read".equals(currentAdmin.getStr("username"))){ + String lowerUrl = url.toLowerCase(); + if(lowerUrl.contains("save") + || lowerUrl.contains("update") + || lowerUrl.contains("delete") + || lowerUrl.contains("backup") + || lowerUrl.contains("restore") + || lowerUrl.contains("setDefault".toLowerCase()) + || lowerUrl.contains("generate") + ){ + if(WebUtils.isAjaxRequest(request)){ + //是ajax操作 + ctx.renderAndReturn(Feedback.error("演示账号不允许操作!")); + return; + }else{ + //是url操作 + response.setContentType("text/html;charset=utf-8"); + response.write("" + .getBytes(StandardCharsets.UTF_8)); + return; + } + } + } + //演示程序不允许修改、新增、删除结束 + //系统内置角色 + if(currentAdmin.getObj("role")!=null && BooleanUtils.isTrue(currentAdmin.getJSONObject("role") + .getBool("getIsSystem"))){ + filterChain.doFilter(ctx); + return; + } + for(String key : permissionExcludes){ + if(url.startsWith(key)){ + filterChain.doFilter(ctx); + return; + } + } + List permissions = currentAdmin.getBeanList("permissions",String.class); + for(String key : permissions){ + if(url.startsWith(key)){ + filterChain.doFilter(ctx); + return; + } + } + ctx.forward("/cms/admin/error/unauthorized"); + return; + } + ctx.pathNew("/cms/admin/login"); + } + filterChain.doFilter(ctx); + } + + + + +} diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/SiteHandler.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/SiteHandler.java index bd98b0b..66cc293 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/SiteHandler.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/SiteHandler.java @@ -52,7 +52,7 @@ public class SiteHandler String[] urls = target.split("/"); Integer siteNum = Db.queryInt("select count(*) from cms_site where domain=?",domain); if(siteNum == null || siteNum<1){ - if(urls.length<1){ + if(urls.length<=2){ //默认站点 Site site = new Site().dao().findDefault(); wrappedRequest(site,ctx,chain, target); diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/UrlHandler.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/UrlHandler.java index 1d83f69..6d21a35 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/UrlHandler.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/handler/UrlHandler.java @@ -92,7 +92,8 @@ public class UrlHandler implements Filter { Tag tag = new Tag().dao().findByCat(tagCat); if(tag!=null){ ctx.paramMap().put("id",tag.getId()+""); - ctx.forward("/cms/tag"); + ctx.pathNew("/cms/tag"); + chain.doFilter(ctx); } return; } @@ -122,7 +123,8 @@ public class UrlHandler implements Filter { if(StringUtils.isNotBlank(newTarget)){ target = newTarget; } - ctx.forward(target); + ctx.pathNew(target); + chain.doFilter(ctx); } } diff --git a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/util/JFinal.java b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/util/JFinal.java index 0775601..e1b866a 100644 --- a/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/util/JFinal.java +++ b/plugins/cms/src/main/java/vip/fuck/sm/plugins/cms/util/JFinal.java @@ -5,7 +5,7 @@ import org.noear.solon.Solon; public class JFinal { public static String getContextPath() { - String contextPath = Solon.cfg().get("server.contextPath","/"); + String contextPath = Solon.cfg().get("server.contextPath",""); String port = Solon.cfg().get("server.port",""); String schema = Solon.cfg().get("server.schema"); String domain = Solon.cfg().get("server.domain","localhost"); diff --git a/plugins/cms/src/main/resources/templates/cms/templates/default/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/default/case_detail.shtm index 7cef2c3..5edf421 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/default/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/default/case_detail.shtm @@ -38,8 +38,8 @@
#(currentContent.introduction)
-

上一篇:#if(currentContent.lastContent??)#(abbreviate(currentContent.lastContent.title,15,''))#else无#end

-

下一篇:#if(currentContent.nextContent??)#(abbreviate(currentContent.nextContent.title,15,''))#else无#end

+

上一篇:#if(currentContent.lastContent??)#(abbreviate(currentContent.lastContent.title,15,''))#else 无 #end

+

下一篇:#if(currentContent.nextContent??)#(abbreviate(currentContent.nextContent.title,15,''))#else 无 #end

diff --git a/plugins/cms/src/main/resources/templates/cms/templates/default/job_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/default/job_detail.shtm index bff701a..d920359 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/default/job_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/default/job_detail.shtm @@ -37,8 +37,8 @@
#(currentContent.introduction)
-

上一篇:#if(currentContent.lastContent??)#(abbreviate(currentContent.lastContent.title,15,''))#else无#end

-

下一篇:#if(currentContent.nextContent??)#(abbreviate(currentContent.nextContent.title,15,''))#else无#end

+

上一篇:#if(currentContent.lastContent??)#(abbreviate(currentContent.lastContent.title,15,''))#else 无 #end

+

下一篇:#if(currentContent.nextContent??)#(abbreviate(currentContent.nextContent.title,15,''))#else 无 #end

diff --git a/plugins/cms/src/main/resources/templates/cms/templates/default/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/default/news_detail.shtm index cc4392e..ed2293f 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/default/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/default/news_detail.shtm @@ -37,8 +37,8 @@
#(currentContent.introduction)
-

上一篇:#if(currentContent.lastContent??)#(abbreviate(currentContent.lastContent.title,15,''))#else无#end

-

下一篇:#if(currentContent.nextContent??)#(abbreviate(currentContent.nextContent.title,15,''))#else无#end

+

上一篇:#if(currentContent.lastContent??)#(abbreviate(currentContent.lastContent.title,15,''))#else 无 #end

+

下一篇:#if(currentContent.nextContent??)#(abbreviate(currentContent.nextContent.title,15,''))#else 无 #end

diff --git a/plugins/cms/src/main/resources/templates/cms/templates/default/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/default/product_detail.shtm index aa010d5..cf73911 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/default/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/default/product_detail.shtm @@ -101,8 +101,8 @@
#(currentContent.introduction)
-

上一篇:#if(currentContent.lastContent??)#(abbreviate(currentContent.lastContent.title,15,''))#else无#end

-

下一篇:#if(currentContent.nextContent??)#(abbreviate(currentContent.nextContent.title,15,''))#else无#end

+

上一篇:#if(currentContent.lastContent??)#(abbreviate(currentContent.lastContent.title,15,''))#else 无 #end

+

下一篇:#if(currentContent.nextContent??)#(abbreviate(currentContent.nextContent.title,15,''))#else 无 #end

diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban2/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban2/case_detail.shtm index c64171e..dfb3338 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban2/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban2/case_detail.shtm @@ -62,8 +62,8 @@
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban2/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban2/news_detail.shtm index 82deab1..094671e 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban2/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban2/news_detail.shtm @@ -66,8 +66,8 @@
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban2/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban2/product_detail.shtm index d93123c..833e180 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban2/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban2/product_detail.shtm @@ -62,8 +62,8 @@
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban3/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban3/case_detail.shtm index f2d88fa..e93f044 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban3/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban3/case_detail.shtm @@ -63,8 +63,8 @@
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban3/jd_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban3/jd_detail.shtm index f2d88fa..e93f044 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban3/jd_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban3/jd_detail.shtm @@ -63,8 +63,8 @@ diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban3/job_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban3/job_detail.shtm index f2d88fa..e93f044 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban3/job_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban3/job_detail.shtm @@ -63,8 +63,8 @@ diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban3/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban3/news_detail.shtm index 51e3880..9a84145 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban3/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban3/news_detail.shtm @@ -36,8 +36,8 @@
#(currentContent.introduction)
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban3/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban3/product_detail.shtm index ef10f0e..01c5f06 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban3/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban3/product_detail.shtm @@ -62,8 +62,8 @@ diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban4/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban4/case_detail.shtm index 12b64d2..af22fd2 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban4/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban4/case_detail.shtm @@ -45,8 +45,8 @@
#(currentContent.introduction)
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban4/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban4/news_detail.shtm index 3260107..3d1b9a5 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban4/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban4/news_detail.shtm @@ -59,8 +59,8 @@
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban4/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban4/product_detail.shtm index 76ed544..03002a7 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban4/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban4/product_detail.shtm @@ -75,8 +75,8 @@
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban5/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban5/case_detail.shtm index 93d070f..1eabc94 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban5/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban5/case_detail.shtm @@ -62,8 +62,8 @@
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban5/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban5/news_detail.shtm index 5654a8e..79edf07 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban5/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban5/news_detail.shtm @@ -36,8 +36,8 @@
#(currentContent.introduction)
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban5/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban5/product_detail.shtm index 67847ff..1aca60c 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban5/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban5/product_detail.shtm @@ -62,8 +62,8 @@ diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban6/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban6/case_detail.shtm index 82d1ae2..7fb75c5 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban6/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban6/case_detail.shtm @@ -65,8 +65,8 @@ diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban6/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban6/news_detail.shtm index cc7a470..691bdb5 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban6/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban6/news_detail.shtm @@ -39,8 +39,8 @@
#(currentContent.introduction)
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban6/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban6/product_detail.shtm index 82d1ae2..7fb75c5 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban6/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban6/product_detail.shtm @@ -65,8 +65,8 @@ diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban7/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban7/case_detail.shtm index ee82472..ce1073e 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban7/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban7/case_detail.shtm @@ -76,8 +76,8 @@ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static
相关推荐
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban7/job_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban7/job_detail.shtm index c535ee3..961cb56 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban7/job_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban7/job_detail.shtm @@ -76,8 +76,8 @@ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static
相关推荐
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban7/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban7/news_detail.shtm index 950b9fd..be38dec 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban7/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban7/news_detail.shtm @@ -75,8 +75,8 @@ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static
相关推荐
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban7/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban7/product_detail.shtm index a6b24ea..7b54d1f 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban7/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban7/product_detail.shtm @@ -84,8 +84,8 @@ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static
相关推荐
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/case_detail.shtm index 63847d9..6f1229a 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/case_detail.shtm @@ -44,8 +44,8 @@ #(currentContent.introduction)
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/news_detail.shtm index 33369e3..4fe0d21 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/news_detail.shtm @@ -44,8 +44,8 @@ #(currentContent.introduction) diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/product_detail.shtm index fc1b80f..8d61777 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban9_mobile/product_detail.shtm @@ -58,8 +58,8 @@
diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/case_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/case_detail.shtm index 8c20fb0..4074648 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/case_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/case_detail.shtm @@ -89,8 +89,8 @@

推荐资讯

diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/news_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/news_detail.shtm index adc019b..dc003cd 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/news_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/news_detail.shtm @@ -89,8 +89,8 @@

推荐资讯

diff --git a/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/product_detail.shtm b/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/product_detail.shtm index 8ab4d68..1722fc5 100644 --- a/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/product_detail.shtm +++ b/plugins/cms/src/main/resources/templates/cms/templates/moban9_pc/product_detail.shtm @@ -229,8 +229,8 @@

推荐资讯