diff --git a/c5_ciyon.sql b/c5_ciyon.sql
index d9ba632..d1dbca4 100644
--- a/c5_ciyon.sql
+++ b/c5_ciyon.sql
@@ -1,6 +1,19 @@
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
+-- ----------------------------
+-- Table structure for ap_api
+-- ----------------------------
+DROP TABLE IF EXISTS `ap_api`;
+CREATE TABLE `ap_api` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '|appid|',
+ `apisecret` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',appkey',
+ `ips` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '白名单IP,BR',
+ `addtimes` bigint(20) NOT NULL COMMENT '创建时间,DATE',
+ `pubkey` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '|公钥证书|',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 215696 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API授权管理' ROW_FORMAT = Dynamic;
+
-- ----------------------------
-- Table structure for ap_art_post
-- ----------------------------
@@ -302,6 +315,26 @@ CREATE TABLE `ap_pnt_track` (
-- ----------------------------
INSERT INTO `ap_pnt_track` VALUES (1, '登录签到', 2, 2, 10, 1738132278);
+-- ----------------------------
+-- Table structure for ap_transfer
+-- ----------------------------
+DROP TABLE IF EXISTS `ap_transfer`;
+CREATE TABLE `ap_transfer` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '|流水号|',
+ `orderstatus` int(11) NOT NULL COMMENT '|交易状态|,CATA,orderstatus',
+ `amount` bigint(20) NOT NULL COMMENT '金额|,CNY',
+ `addtimes` bigint(20) NOT NULL COMMENT '创建时间,DATE',
+ `uptimes` bigint(20) NOT NULL COMMENT '完成时间,DATE',
+ `apiid` int(11) NOT NULL COMMENT 'APIID',
+ `thirdno` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用方单号',
+ `notifyurl` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '回调地址',
+ `signature` varchar(600) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',签名',
+ `retimes` bigint(20) NOT NULL COMMENT '回调时间,DATE',
+ `nexttimes` bigint(20) NOT NULL COMMENT '下次回调时间,DATE',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `mo`(`orderstatus`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 54390876 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '交易单' ROW_FORMAT = Dynamic;
+
-- ----------------------------
-- Table structure for ap_user
-- ----------------------------
@@ -552,6 +585,102 @@ CREATE TABLE `ap_usr_suggest` (
-- ----------------------------
INSERT INTO `ap_usr_suggest` VALUES (4, 86, '', '展商查询不方便', '', 1746105322, 10, 1750889230, '感谢反馈,已经提交给技术部处理。');
+-- ----------------------------
+-- Table structure for doc_help
+-- ----------------------------
+DROP TABLE IF EXISTS `doc_help`;
+CREATE TABLE `doc_help` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `upid` int(11) NOT NULL COMMENT ',上级',
+ `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标题',
+ `csort` int(11) NOT NULL DEFAULT 1 COMMENT '排序',
+ `isuse` int(11) NOT NULL DEFAULT 0 COMMENT '|公开|,BOOL',
+ `uptimes` bigint(20) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '菜单表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of doc_help
+-- ----------------------------
+INSERT INTO `doc_help` VALUES (1, 0, '首页', 10, 1, 1751753699);
+INSERT INTO `doc_help` VALUES (10, 0, '快速了解', 10, 1, 1751760694);
+INSERT INTO `doc_help` VALUES (11, 0, '环境部署', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (12, 0, '项目入门', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (20, 0, 'PC 前端手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (21, 0, 'PC PHP8手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (22, 0, 'PC Golang手册', 10, 2, 0);
+INSERT INTO `doc_help` VALUES (23, 0, 'PC Python3手册', 10, 2, 0);
+INSERT INTO `doc_help` VALUES (25, 0, '移动端手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (26, 0, '图表手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (27, 0, '网站手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (30, 0, '区块链研究', 10, 2, 1751753440);
+INSERT INTO `doc_help` VALUES (40, 0, 'AI决策手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (41, 0, 'AI视觉手册', 10, 2, 0);
+INSERT INTO `doc_help` VALUES (42, 0, 'Web3D手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (43, 0, 'UE虚幻手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (44, 0, '数据采集手册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (45, 0, '物联网协议', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (50, 0, '开发约定', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (51, 0, '通用方法论', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (52, 0, '开发自动化', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (53, 0, '开发配套工具', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (60, 0, 'Golang开发', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (61, 0, '集群演进', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (62, 0, '运维优化', 10, 1, 1751759825);
+INSERT INTO `doc_help` VALUES (63, 0, '安全研究', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (80, 0, '.net8桌面开发', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (90, 0, '常见问题', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (100, 11, 'Windows开发环境', 10, 1, 1751920466);
+INSERT INTO `doc_help` VALUES (101, 11, 'Mac开发环境', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (102, 11, 'Linux生产环境部署', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (103, 11, '镜像部署', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (104, 41, 'AIBOX中间件', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (105, 50, '开发原则', 10, 1, 1751754931);
+INSERT INTO `doc_help` VALUES (106, 50, '库表约定', 10, 1, 1751758452);
+INSERT INTO `doc_help` VALUES (107, 50, '字段注解', 10, 1, 1751759052);
+INSERT INTO `doc_help` VALUES (108, 50, '接口约定', 10, 1, 1751759750);
+INSERT INTO `doc_help` VALUES (109, 50, '数据字典', 10, 1, 1751759682);
+INSERT INTO `doc_help` VALUES (110, 50, '文件存储', 10, 1, 1751759709);
+INSERT INTO `doc_help` VALUES (111, 50, '选型原则', 10, 1, 1751759868);
+INSERT INTO `doc_help` VALUES (112, 52, '原型图设计器', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (113, 52, 'AI自动规划器', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (114, 52, '代码生成器', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (115, 53, '离线备份工具', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (116, 53, 'UE实景地编器', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (117, 53, '行政区划字典工具', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (118, 53, '云转储工具', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (119, 53, '文件清理工具', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (120, 53, 'SaaS导出工具', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (121, 60, 'PC端开发', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (122, 60, '服务发现', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (124, 61, '集群日志分析器', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (125, 61, '集群服务注册', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (127, 50, '选型历史', 10, 1, 1751759911);
+INSERT INTO `doc_help` VALUES (128, 51, '登录校验模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (129, 51, '权限单字符串校验模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (130, 51, '服务器安全防护模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (131, 51, 'PC菜单实现思路', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (132, 51, '多语言模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (133, 51, '数据排序存储模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (134, 51, '文件存储模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (135, 51, '文件上传模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (136, 51, '图片懒加载', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (137, 51, '前端防重复请求', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (138, 51, '传统字典模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (139, 51, '租户字典模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (140, 51, '静态字典', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (141, 51, '一对多 所属模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (142, 51, '同时在线并发量定义', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (143, 51, '性能优化指标', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (144, 51, '本地离线备份模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (145, 51, 'HTTP API模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (146, 51, '爬虫开发模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (147, 51, '前端调试方案', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (148, 51, '测试分工模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (149, 51, '代码审查模式', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (150, 51, '分页场景优化方案', 10, 1, 0);
+INSERT INTO `doc_help` VALUES (151, 51, '秒杀场景架构模式', 10, 1, 0);
+
-- ----------------------------
-- Table structure for xa_user
-- ----------------------------
@@ -603,7 +732,7 @@ CREATE TABLE `zc_admin` (
`roleid` int(11) NOT NULL COMMENT '岗位角色,DB,zc_role',
`logintimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '活跃时间,DATE',
`addtimes` bigint(20) NOT NULL COMMENT '注册时间,DATE',
- `password` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT ',密码',
+ `password` varchar(70) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT ',密码',
`trytime` int(11) NOT NULL DEFAULT 0 COMMENT ',连续错误次数',
`power` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT ',权限表',
PRIMARY KEY (`id`) USING BTREE,
@@ -613,8 +742,8 @@ CREATE TABLE `zc_admin` (
-- ----------------------------
-- Records of zc_admin
-- ----------------------------
-INSERT INTO `zc_admin` VALUES (10, '', '超级管理员', 10, '12345678901', 10, 34, 0, 1750891980, 1000000000, '745371a00438ced9c918d3d44b64d4a1', 0, '.*.');
-INSERT INTO `zc_admin` VALUES (18, '', '运营官', 10, '10000452346', 10, 34, 6, 1745062148, 1721153234, '17d73a3b6f9ca783817fc909aad0cfdb', 0, '.p3624.');
+INSERT INTO `zc_admin` VALUES (10, '', '超级管理员', 10, '12345678901', 10, 34, 0, 1750891980, 1000000000, 'fa3046be160f84e79da4a5cf004e367997730a662598082f5181efdb8aa43dc9', 0, '.*.');
+INSERT INTO `zc_admin` VALUES (18, '', '运营官', 10, '10000452346', 10, 34, 6, 1745062148, 1721153234, 'fa3046be160f84e79da4a5cf004e367997730a662598082f5181efdb8aa43dc9', 0, '.p3624.');
-- ----------------------------
-- Table structure for zc_autotask
@@ -704,6 +833,8 @@ INSERT INTO `zc_cata` VALUES (22, 1, 0, 1, 0, 'artsort', '文章排序', '', 'ap
INSERT INTO `zc_cata` VALUES (23, 1, 0, 1, 0, 'artstatus', '文章状态', '', 'ap_art_post');
INSERT INTO `zc_cata` VALUES (100, 2, 0, 1, 0, 'aicapacity', 'AI能力', '', 'zc_ai_key');
INSERT INTO `zc_cata` VALUES (101, 1, 0, 1, 0, 'aidotype', 'AI执行方式', '', 'zc_ai_tsk_run');
+INSERT INTO `zc_cata` VALUES (102, 1, 10, 1, 0, 'education', '学历', '', '');
+INSERT INTO `zc_cata` VALUES (103, 0, 10, 1, 0, 'orderstatus', '订单状态', '', '');
INSERT INTO `zc_cata` VALUES (1000, 0, 10, 1, 10, '10', '男', '', '');
INSERT INTO `zc_cata` VALUES (1001, 0, 20, 1, 10, '20', '女', '', '');
INSERT INTO `zc_cata` VALUES (1002, 0, 90, 1, 10, '90', '其他', '', '');
@@ -757,6 +888,18 @@ INSERT INTO `zc_cata` VALUES (10157, 0, 0, 1, 101, '160', '改后执行', '', ''
INSERT INTO `zc_cata` VALUES (10159, 0, 0, 1, 101, '190', '人类拒绝', '', '');
INSERT INTO `zc_cata` VALUES (10160, 0, 0, 1, 101, '200', 'AI执行已阅', '', '');
INSERT INTO `zc_cata` VALUES (10161, 0, 0, 1, 101, '210', 'AI执行问题', '', '');
+INSERT INTO `zc_cata` VALUES (10200, 0, 10, 1, 102, '10', '小学', '', '');
+INSERT INTO `zc_cata` VALUES (10201, 0, 10, 1, 102, '20', '初中', '', '');
+INSERT INTO `zc_cata` VALUES (10202, 0, 10, 1, 102, '30', '高中', '', '');
+INSERT INTO `zc_cata` VALUES (10203, 0, 10, 1, 102, '40', '大专', '', '');
+INSERT INTO `zc_cata` VALUES (10204, 0, 10, 1, 102, '50', '本科', '', '');
+INSERT INTO `zc_cata` VALUES (10205, 0, 10, 1, 102, '60', '硕士', '', '');
+INSERT INTO `zc_cata` VALUES (10206, 0, 10, 1, 102, '70', '博士', '', '');
+INSERT INTO `zc_cata` VALUES (10250, 0, 10, 1, 103, '10', '等待指令', '', '');
+INSERT INTO `zc_cata` VALUES (10251, 0, 10, 1, 103, '20', '队列中', '', '');
+INSERT INTO `zc_cata` VALUES (10252, 0, 10, 1, 103, '30', '转账中', '', '');
+INSERT INTO `zc_cata` VALUES (10253, 0, 10, 1, 103, '100', '成功', '', '');
+INSERT INTO `zc_cata` VALUES (10254, 0, 10, 1, 103, '90', '失败', '', '');
-- ----------------------------
-- Table structure for zc_cemap_bill
@@ -960,7 +1103,7 @@ INSERT INTO `zc_depart` VALUES (34, 32, '技术部', 19, 1, 10);
DROP TABLE IF EXISTS `zc_dev_dbcode`;
CREATE TABLE `zc_dev_dbcode` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
- `schem` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '库',
+ `dbcid` int(11) NOT NULL COMMENT '生成器,DB,zc_dev_dbsaas',
`tabl` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '表',
`pcjson` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'PC配置',
PRIMARY KEY (`id`) USING BTREE
@@ -969,7 +1112,24 @@ CREATE TABLE `zc_dev_dbcode` (
-- ----------------------------
-- Records of zc_dev_dbcode
-- ----------------------------
-INSERT INTO `zc_dev_dbcode` VALUES (18, 'c5_ciyon', 'ap_usr_real_apply', '{\"bcod\":{\"verifyfunc\":\"verifyfast\",\"titname\":\"\\u5b9e\\u540d\\u8ba4\\u8bc1\\u7533\\u8bf7\",\"uploadpat\":\"usr_real_apply\",\"liiddict\":\"auditstatus\",\"uptabcard\":\"\",\"tabdict\":\"zc_cata\",\"saascode\":\"\",\"selectorder\":\"\",\"newline\":\"\\u5bfc\\u51fa\",\"multibtn\":\"\\u6279\\u91cf\\u5220\\u9664,\\u5ba1\\u6838\\u901a\\u8fc7,\\u9a73\\u56de\",\"btnlist_line\":\"\\u5ba1\\u6838\",\"savepc\":\"web\\\\admin\\\\ap\\\\usr_real_apply\",\"htmllang\":\"js\",\"proglang\":\"php\",\"pctemplate\":\"\",\"mbtemplate\":\"\"},\"col\":{\"id\":{\"bchk\":\",bout,\",\"set\":\"noup=no\"},\"auditstatus\":{\"bchk\":\",bviw,bout,\",\"set\":\"noup=no\"},\"vuser\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"listload=rel\"},\"name\":{\"bchk\":\",bviw,bmin,bout,bqry,bimp,\",\"set\":\"\"},\"idid\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"\"},\"idcard1\":{\"bchk\":\",bviw,bout,\",\"set\":\"ftype=jpg,png\"},\"idcard2\":{\"bchk\":\",bviw,bout,\",\"set\":\"ftype=jpg,png\"},\"addtimes\":{\"bchk\":\",bviw,bout,bqry,\",\"set\":\"noup=now\"},\"audituser\":{\"bchk\":\",bviw,bout,bqry,\",\"set\":\"noup=no\"},\"audittimes\":{\"bchk\":\",bviw,bout,\",\"set\":\"noup=no\"},\"auditmsg\":{\"bchk\":\",bviw,bout,bqry,\",\"set\":\"noup=no\"}}}');
+INSERT INTO `zc_dev_dbcode` VALUES (18, 1, 'ap_demo', '{\"bcod\":{\"verifyfunc\":\"verifyfast\",\"titname\":\"\\u590d\\u6742\\u529f\\u80fd\",\"uploadpat\":\"demo\",\"liiddict\":\"auditstatus\",\"uptabcard\":\"\",\"tabdict\":\"zc_cata\",\"saascode\":\"\",\"selectorder\":\"\",\"newline\":\"\\u6dfb\\u52a0,\\u5bfc\\u5165,\\u5bfc\\u51fa\",\"multibtn\":\"\\u6279\\u91cf\\u5220\\u9664,\\u5ba1\\u6838\\u901a\\u8fc7,\\u9a73\\u56de\",\"btnlist_line\":\"\\u67e5\\u770b,\\u4fee\\u6539,\\u5ba1\\u6838\",\"savepc\":\"web\\\\admin\\\\ap\\\\demo\",\"htmllang\":\"js\",\"proglang\":\"php\",\"pctemplate\":\"\",\"mbtemplate\":\"\"},\"col\":{\"id\":{\"bchk\":\",bout,\",\"set\":\"noup=no\"},\"auditstatus\":{\"bchk\":\",bviw,bout,\",\"set\":\"noup=no|colview=8\"},\"audituser\":{\"bchk\":\",bviw,bout,bqry,\",\"set\":\"noup=no|listload=rel|colview=8\"},\"audittimes\":{\"bchk\":\",bviw,bout,bqry,\",\"set\":\"noup=no|colview=8\"},\"auditmsg\":{\"bchk\":\",bviw,bout,bqry,\",\"set\":\"noup=no\"},\"name\":{\"bchk\":\",bviw,bmin,bout,bqry,bimp,\",\"set\":\"coledit=16|colview=16\"},\"menuid\":{\"bchk\":\",bviw,bmin,bout,bqry,\",\"set\":\"listload=rel|coledit=8|colview=8\"},\"filesize\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=8\"},\"metre\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=8\"},\"bankmoney\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=8\"},\"setdate\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=8\"},\"settimes\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=8\"},\"dayclock\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=8\"},\"downurl\":{\"bchk\":\",bviw,bout,\",\"set\":\"ftype=jpg,png|num=3|coledit=16\"},\"avar\":{\"bchk\":\",bviw,bout,\",\"set\":\"ftype=jpg,png|coledit=8\"},\"isuse\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=6|colview=6\"},\"isopen\":{\"bchk\":\",bviw,bmin,bout,bqry,\",\"set\":\"coledit=6|colview=6\"},\"unit\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=12|colview=12\"},\"sigstatus\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"mauditstatus\":{\"bchk\":\",bviw,bmin,bout,bqry,\",\"set\":\"dbquery=select|coledit=16|colview=6\"},\"prodcata\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"colview=12\"},\"areacode\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"colview=12\"},\"renzheng\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=16|colview=12\"},\"ppint\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"npcyc\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"runsec\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"acttm\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"imgs\":{\"bchk\":\",bviw,bout,\",\"set\":\"ftype=jpg,png|num=3\"},\"ton\":{\"bchk\":\",bviw,bmin,bout,bqry,\",\"set\":\"coledit=8|colview=6\"},\"price\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"lat\":{\"bchk\":\",bout,\",\"set\":\"noup=fow|coledit=8|colview=6\"},\"lng\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"nums\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"pct\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"url\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"weightg\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"eartmpr\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8|colview=6\"},\"qian\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8\"},\"meishi\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8\"},\"weight\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8\"},\"height\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8\"},\"skt\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"coledit=8\"},\"idcard\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"msk=****##|coledit=8|colview=12\"},\"addtimes\":{\"bchk\":\",bviw,bout,\",\"set\":\"noup=now|colview=12\"},\"content\":{\"bchk\":\",bviw,bmin,bout,\",\"set\":\"nocmn=no\"},\"md\":{\"bchk\":\",bviw,\",\"set\":\"nocmn=no\"}}}');
+
+-- ----------------------------
+-- Table structure for zc_dev_dbsaas
+-- ----------------------------
+DROP TABLE IF EXISTS `zc_dev_dbsaas`;
+CREATE TABLE `zc_dev_dbsaas` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
+ `schem` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数据库',
+ `subpath` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '相对路径',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 79 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '代码目录表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of zc_dev_dbsaas
+-- ----------------------------
+INSERT INTO `zc_dev_dbsaas` VALUES (1, '总控', 'c5_ciyon', 'admin\\ap');
-- ----------------------------
-- Table structure for zc_dev_note
@@ -988,7 +1148,7 @@ CREATE TABLE `zc_dev_note` (
-- ----------------------------
INSERT INTO `zc_dev_note` VALUES (1, 10, 1750891369, '==单一机构管理系统==\n用户表,移动端与PC端复用admin\n用online实现多端登录及多设备同时登陆限制\n组织管理、服务器监控、系统管理是标配\n业务功能独立开发\n\n==单一互联网平台==\n前端互联网用户使用ap_user表\n总控后台管理用户使用zc_admin表\n平台端数据表前缀与后台管理区分。\n平台业务一般按客服工作、运营工作、财务工作分组。\n客服工作主要处理注册后的用户遇到的问题。包括工单、意见建议、客户查询及窗口业务处理。\n运营工作主要分析数据,制定获客策略、营收策略、广告等。包括金币模式、充值提现模式、付费会员模式等,设计佣金、多级分享、活跃埋点等。\n财务工作主要对账、开票、支付操作等。\n\n演示版开发一个应用。可扩展成多个应用入口,录入买家版、卖家版等。\n\n==多端SaaS软件==\n以某个行业为切入点开发SaaS功能,表前缀建议xa、xb、xc,未来可扩展上下游产业SaaS应用。\n例如,为农贸批发市场行业开发SaaS软件,启用表前缀xa_user、xz_org。\n随着业务发展,可能配套开发上下游SaaS,例如,食堂SaaS、冷链运输物流企业SaaS、时鲜类仓储企业SaaS、种植户溯源SaaS、团购团长SaaS等等。\n未平台化之前,整合开发低成本满足客户独立部署需求。\n平台化后,方便微服务拆分。\n\n\n==AI辅助决策能力==\n实现算力库、浓缩知识、MCP本地数据函数、AIAgent、AI任务编排、AIGC写作等。\n鉴于RAG、微调效果欠佳,经过这几年摸索,浓缩知识能降低幻觉的产生。\nAI自动调用本地数据函数,实现信息系统到AI的打通。需精心设计函数返回内容。\n通过AI任务编排实现AI分解工作,并行执行,合并结果,并且使用独立提示词或数学函数检验判断置信度。\n以置信度为核心的自动控制指令调用,建立AI从辅助决策到自主决策的工程实现。\n\n==审批事项==\n基于图的可配置审批流程\n通用审批流程给到具体表单,更新表单状态。直至审批成功或返回原点。\n\n==产业官网==\n自研SaaS软件,需要网络推广,做SEO\n通过产业官网及后续的配套文章自动发布模型,实现自动化的更新站点,强化SEO。\n\n==AI私域==\n通过自动操控手机或PC屏幕。实现自动化的操作微信、QQ、抖音、小红书等软件。\n达到AI自动跟客户聊天,自动给客户分类,通知人类集中回复高意向客户。\n\n\n==AI自媒体==\n通过自动操控和API接入,实现自动生成图文及短视频、定时自动发自媒体文章/视频。\n自动回复评论、点赞自动回点、自动回关、自动搜索兴趣话题并自动评论点赞。\n\n\n==各种接入==\n各种常见的功能接入\n例如,短信、收发邮件、区块链上链、公众号推送、AI监控、常见物联网设备等。\n\n==Web3D==\n实现基本的3D数字孪生效果\n实现一个可视化场景编辑器,封装常用的JS函数,便于二次开发。\n常用于数据大屏、场景展示。\n\n==系统管理==\n包括组织管理、管理员管理、用户角色。\n服务器各项指标监控,关键运行指标上报到服务发现网关,用于负载均衡。\n实现业务日志、程序日志、数据库慢请求日志等,用于综合分析运行瓶颈,及时发现异常。\n实现通用配置、数据字典、自动化任务(非实时)、数据计算(耗时)等框架功能。\n\n==开发者==\n隐藏的开发者模式,便于调试,按Ctrl+E 5下切换调试。\n实现菜单配置、扩展权限、mock。\n一些示例代码、原型图、代码生成器、AI辅助规划等。');
INSERT INTO `zc_dev_note` VALUES (2, 11, 1750891424, '\n金币购买记录 pnt_buy\n 所属会员、金币、金额、时间\n\n金币使用记录 pnt_use\n 所属会员、金币、摘要、时间\n\n金币奖励记录 pnt_reward\n 所属会员、金币、摘要、时间\n\n充值套餐表 fina_buy\n 金币、金额\n 功能:添加、修改\n\n财务收入记录 fina_earn\n 所属会员、金额、摘要、时间\n\n财务提现记录 fina_cash\n 所属会员、金额、状态(申请、通过、发放)、时间\n ');
-INSERT INTO `zc_dev_note` VALUES (3, 12, 1750891779, '\n== 未来 ==\n审批事项(老平台移植)\n产业官网(老平台移植)\nAI私域\nAI自媒体\n部分接入(老平台移植)\n\n== 三期 ==\nok AI算力、浓缩知识、决策单元\nok 数据函数MCP\nok AIGC写作\n决策任务、置信度评分、主动决策执行\n\n\n== 二期 ==\nok Web3DJS库封装、Web3D地编器\n\n== 一期 ==\nok 总控菜单\nok 管理员角色组织机构\nok 系统管理\nok 服务监控\nok Mocks、示例代码\nok 充提、金币、付费会员\nok 分享、单页、埋点\nok 提现、开票、收货地址\nok 意见建议、工单');
+INSERT INTO `zc_dev_note` VALUES (3, 12, 1753836209, '\n== 未来 ==\n审批事项(老平台移植)\n产业官网(老平台移植)\nAI私域\nAI自媒体\n部分接入(老平台移植)\n\ndao的建立表\nschema: 项目id、总控、库名、相对路径\ntable: schemaid、表名、英文名、columnjson、pcjson\n基于表,生成代码、生成数据库文档。里程碑文档\n\n建立testyl、testtk,用例/任务。\n基于测试数据,生成测试文档。\n\n== 25.06 ==\n变更开发者菜单:\n软件设置。多端菜单管理、扩展权限、调试登录\n示例代码。前端组件分出交互示例,功能示例增加一些。\n开发工具。统一碎片代码位置,增加众产支持(统管)。\n研发管理。开发记录(统管)、里程碑更新记录(统管)。\n测试工具。测试用例和任务(统管)、mock接口。\n\n平台业务。增加API接口、订单示例。\n\nAI多语言翻译:\n语言库,从js中读取要设置的语言\nlang、name、trans\n以lang=\'\'为核心,新建一个,就自动根据语言建几个。\n列表: 中文、English、日本语、xxxx\n输入一个,就自动更新一个,文本框变化一下\n在头部可以整列AI自动翻译。也可以在文本框旁边点击\"翻译\"\n\n== 25.03 ==\nok AI算力、浓缩知识、决策单元\nok 数据函数MCP\nok AIGC写作\n决策任务、置信度评分、主动决策执行\n\n\n== 24.06 ==\nok Web3DJS库封装、Web3D地编器\n\n== 24.02 ==\nok 总控菜单\nok 管理员角色组织机构\nok 系统管理\nok 服务监控\nok Mocks、示例代码\nok 充提、金币、付费会员\nok 分享、单页、埋点\nok 提现、开票、收货地址\nok 意见建议、工单');
-- ----------------------------
-- Table structure for zc_funcslow
@@ -1067,8 +1227,8 @@ CREATE TABLE `zc_menu` (
`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
`url` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '链接',
`pow` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '权限',
- `csort` int(11) NOT NULL DEFAULT 1 COMMENT '排序',
- `isuse` int(11) NOT NULL DEFAULT 0 COMMENT '|启用|,BOOL',
+ `csort` int(11) NOT NULL DEFAULT 10 COMMENT '排序',
+ `isuse` int(11) NOT NULL DEFAULT 1 COMMENT '|启用|,BOOL',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20003 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '菜单表' ROW_FORMAT = Dynamic;
@@ -1090,9 +1250,6 @@ INSERT INTO `zc_menu` VALUES (80, 0, '组织管理', '', '', 10, 1);
INSERT INTO `zc_menu` VALUES (81, 0, '服务器监控', '', '', 10, 1);
INSERT INTO `zc_menu` VALUES (82, 0, '系统管理', '', '', 10, 1);
INSERT INTO `zc_menu` VALUES (99, 0, '*开发者', '', '', 1, 1);
-INSERT INTO `zc_menu` VALUES (100, 1, '简体中文', 'ciyfn.setlang()', '', 1, 1);
-INSERT INTO `zc_menu` VALUES (101, 1, 'English', 'ciyfn.setlang(\'en\')', '', 1, 1);
-INSERT INTO `zc_menu` VALUES (102, 1, '日本語', 'ciyfn.setlang(\'ja\')', '', 1, 1);
INSERT INTO `zc_menu` VALUES (120, 1, '刷新缓存', 'restorage(true)', '', 1, 1);
INSERT INTO `zc_menu` VALUES (121, 1, '修改密码', 'rigger/chgpass.html', '', 1, 1);
INSERT INTO `zc_menu` VALUES (130, 2, 'SSH', 'setssh(true)', '', 1, 1);
@@ -1168,7 +1325,7 @@ INSERT INTO `zc_menu` VALUES (550, 81, '健康指标', 'rigger/statsfunc.html',
INSERT INTO `zc_menu` VALUES (551, 81, '服务器详情', 'rigger/statssrv.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (552, 81, '数据库详情', 'rigger/statsdb.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (553, 81, '业务日志', 'rigger/logdb.html?liid=1', 's=审阅|d=删除', 10, 1);
-INSERT INTO `zc_menu` VALUES (554, 81, '程序日志', 'rigger/logfile.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (554, 81, '程序日志', 'rigger/logfile.html', 'd=删除', 10, 1);
INSERT INTO `zc_menu` VALUES (555, 81, '慢请求记录', 'rigger/funcslow.html', 'd=删除|e=导出', 10, 1);
INSERT INTO `zc_menu` VALUES (600, 82, '配置管理', 'rigger/config.html', 'u=管理|d=删除', 10, 1);
INSERT INTO `zc_menu` VALUES (601, 82, '数据字典', 'rigger/cataindex.html', 'pi=库管理|pd=字典管理', 10, 1);
@@ -1177,35 +1334,55 @@ INSERT INTO `zc_menu` VALUES (603, 82, '表单设计器', '~:tabbase 字段设
INSERT INTO `zc_menu` VALUES (604, 82, '流程设计器', '~:mattertemplate 流程设置matterflow', '', 10, 1);
INSERT INTO `zc_menu` VALUES (610, 82, '数据计算', 'datasse/index.html', 'r=执行', 10, 1);
INSERT INTO `zc_menu` VALUES (621, 82, '文档短链', '', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (622, 82, '静态字典生成', '', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (900, 99, '用户调试登录', 'rigger/debug_user.html', 'u=管理|n=使用', 10, 1);
-INSERT INTO `zc_menu` VALUES (903, 99, '总控菜单', 'rigger/menu.html', 'u=管理|d=删除', 10, 1);
-INSERT INTO `zc_menu` VALUES (910, 99, '扩展权限', 'rigger/power.html', 'u=设置', 10, 1);
-INSERT INTO `zc_menu` VALUES (911, 99, 'Mocks接口', 'rigger/mock.html', 'u=管理|d=删除', 10, 1);
-INSERT INTO `zc_menu` VALUES (912, 99, '通用事项管理', '~:mattercomm 未送审、未办结', '', 10, 2);
-INSERT INTO `zc_menu` VALUES (920, 99, '示例代码', '', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (925, 99, '原型图', '', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (926, 99, '代码生成器', 'develop/code_list.html', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (927, 99, '开发文档', '', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (930, 920, '小工具', 'https://i.qiboc.cn/tool/', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (931, 920, '增删改查', 'ap/demo.html', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (932, 920, '前端组件', 'demo/index.html', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (933, 920, 'WebSocket示例', 'wsdemo/', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (934, 920, 'SSE示例', 'demo/dyn/sse.html', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (950, 925, '生成源码', '~:选择本地自定义表单生成,原型拉取到自定义表单,远程原型直接生成', '', 10, 0);
-INSERT INTO `zc_menu` VALUES (955, 925, 'PC端原型', '~m4376,key=18679ba2c1fb8749727dae0ce6bde66cbbf00b7ce0', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (956, 925, '移动端原型', '~a4187,tag=me', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (957, 925, '图表原型', '~c836', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (958, 925, '大屏原型', '~c3125,key=18679ba589ab4e057e13b752ebc399a8f3f4ffeaf6', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (959, 925, '原型右键参考', 'rigger/config.html~m4376', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (960, 925, '菜单说明文字', '~:第一行|第二行', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (970, 927, '功能原型', 'develop/note.html?typeid=10', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (971, 927, '数据接口', 'develop/note.html?typeid=11', '', 10, 1);
-INSERT INTO `zc_menu` VALUES (972, 927, '开发计划', 'develop/note.html?typeid=12', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (900, 99, '软件设置', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (901, 99, '示例代码', '', 'u=管理|n=使用', 10, 1);
+INSERT INTO `zc_menu` VALUES (902, 99, '开发工具', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (903, 99, '开发管理', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (904, 99, '测试工具', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (910, 901, '前端组件', 'demo/index.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (911, 901, '交互示例', 'demo/index_fb.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (912, 901, '功能示例', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (920, 902, '碎片试验代码', '/ajax/api/test1.t1', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (921, 902, '共享工具集', 'https://i.qiboc.cn/tool/', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (922, 902, '原型图演示', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (923, 902, '众产支持', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (930, 903, '里程碑更新记录', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (931, 903, '开发记录', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (940, 904, '测试用例', 'dao.ciy.cn/dev', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (941, 904, '测试任务', 'dao.ciy.cn/dev', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (942, 904, 'Bug处置', 'dao.ciy.cn/dev', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (945, 904, 'Mocks接口', 'rigger/mock.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (980, 900, '总控菜单', 'rigger/menu.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (981, 900, 'SaaS菜单', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (990, 900, '调试登录', 'rigger/debug_user.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (991, 900, '扩展权限', 'rigger/power.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (992, 900, '通用事项管理', '~:mattercomm 未送审、未办结', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1120, 912, '常规列表页', 'ap/demo.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1121, 912, '块列表页', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1122, 912, '多层分类', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1123, 912, '行编辑表', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1124, 912, '设置单页', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1125, 912, '安全功能页', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1126, 912, '分类列表页', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1220, 922, 'PC端', '~m4376,key=18679ba2c1fb8749727dae0ce6bde66cbbf00b7ce0', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1221, 922, '移动端', '~a4187,tag=me', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1222, 922, '图表', '~c836', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1223, 922, '大屏', '~c3125,key=18679ba589ab4e057e13b752ebc399a8f3f4ffeaf6', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1224, 922, '菜单说明', '~:第一行|第二行', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1230, 923, '加入指引', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1231, 923, 'AI规划', '!DAO/dev/ciyon/project.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1232, 923, '代码生成器', 'develop/code_saas.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1233, 923, '生成文档', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1234, 923, 'AI多语言翻译', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1235, 923, '工具支持', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1300, 931, '产品规划', 'develop/note.html?typeid=10', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1301, 931, '架构设计', 'develop/note.html?typeid=11', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (1302, 931, '开发计划', 'develop/note.html?typeid=12', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10000, 10, '客服工作', '', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10001, 10, '运营工作', '', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10002, 10, '财务工作', '', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10010, 10, '用户数据', '', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (10011, 10, 'API接口', 'ap/api.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10100, 10000, '工单处理', 'ap/usr_problem.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10101, 10000, '意见建议', 'ap/usr_suggest.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10105, 10000, '用户服务', 'ap/user_service.html', '', 10, 1);
@@ -1220,6 +1397,7 @@ INSERT INTO `zc_menu` VALUES (10222, 10001, '广告图管理', 'ap/banner.html',
INSERT INTO `zc_menu` VALUES (10230, 10001, '金币奖励埋点', 'ap/pnt_track.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10231, 10001, '付费会员定价', 'ap/usr_buy_bundle.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10232, 10001, '金币购买定价', 'ap/pnt_bundle.html', '', 10, 1);
+INSERT INTO `zc_menu` VALUES (10235, 10001, '订单示例', 'ap/transfer.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10300, 10002, '提现支付', 'ap/cash_out_2.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10301, 10002, '发票开票', 'ap/usr_invoicing.html', '', 10, 1);
INSERT INTO `zc_menu` VALUES (10302, 10002, '付费会员流水', 'ap/usr_buy_user.html?liid=2', '', 10, 1);
@@ -1237,6 +1415,7 @@ INSERT INTO `zc_menu` VALUES (10408, 10010, '验证码', 'ap/usr_capcode.html',
DROP TABLE IF EXISTS `zc_mnufav`;
CREATE TABLE `zc_mnufav` (
`id` int(11) NOT NULL AUTO_INCREMENT,
+ `favtarget` int(11) NOT NULL,
`user` int(11) NOT NULL COMMENT '|用户|,CATA,adminuser',
`menuid` int(11) NOT NULL,
`addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE',
@@ -1357,8 +1536,7 @@ DROP TABLE IF EXISTS `zc_ymock`;
CREATE TABLE `zc_ymock` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称备注',
- `upath` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类路径',
- `ufunc` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '函数名',
+ `ufunc` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类.函数',
`mockjson` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT ',mock数据',
`lastrequest` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT ',请求快照',
`lasttimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '请求时间,DATE',
@@ -1369,7 +1547,7 @@ CREATE TABLE `zc_ymock` (
-- ----------------------------
-- Records of zc_ymock
-- ----------------------------
-INSERT INTO `zc_ymock` VALUES (6, '', 'work/art', 'get', '{\"code\":1}', '', 0, 1722713211);
+INSERT INTO `zc_ymock` VALUES (6, '', 'admin/rigger/mock.testmock', '{\"code\":1,\"data\":12344321}', '/z/?func=admin/rigger/mock.testmock {\"abc\":\"def\",\"_pf\":\"PC\"}', 1754001371, 1722713211);
-- ----------------------------
-- Table structure for zc_zmem_var
@@ -1385,9 +1563,10 @@ CREATE TABLE `zc_zmem_var` (
-- ----------------------------
-- Records of zc_zmem_var
-- ----------------------------
-INSERT INTO `zc_zmem_var` VALUES (1, 'func_runms', 4332);
-INSERT INTO `zc_zmem_var` VALUES (2, 'func_succ', 154);
-INSERT INTO `zc_zmem_var` VALUES (3, 'func_fail', 8);
-INSERT INTO `zc_zmem_var` VALUES (4, 'func_commit', 31);
+INSERT INTO `zc_zmem_var` VALUES (1, 'func_runms', 0);
+INSERT INTO `zc_zmem_var` VALUES (2, 'func_succ', 0);
+INSERT INTO `zc_zmem_var` VALUES (3, 'func_fail', 0);
+INSERT INTO `zc_zmem_var` VALUES (4, 'func_commit', 0);
+INSERT INTO `zc_zmem_var` VALUES (5, 'func_rollback', 0);
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/web/admin/ap/api.html b/web/admin/ap/api.html
new file mode 100644
index 0000000..93d0a45
--- /dev/null
+++ b/web/admin/ap/api.html
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/admin/ap/api.php b/web/admin/ap/api.php
new file mode 100644
index 0000000..6c2d33e
--- /dev/null
+++ b/web/admin/ap/api.php
@@ -0,0 +1,244 @@
+get('query');
+ $csql = new \ciy\sql('ap_api');
+ $order = objstr($query, 'order', 'id desc');
+ $csql->order($order);
+ $query['order'] = $order;
+ return [$query, $csql];
+ }
+
+ public static function json_list() {
+ global $db;
+ $rsuser = verifyfast();
+ $post = new \ciy\post();
+ list($where, $csql) = self::setwhere($db, $post);
+ $pageno = $post->getint('pageno', 1);
+ $pagecount = $post->getint('pagecount', 10);
+ $csql->limit($pageno, $pagecount);
+ $mainrowcount = $post->getint('count');
+ $rows = $db->get($csql, $mainrowcount);
+ if ($rows === false)
+ return errjson($db->error);
+ $ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
+ if ($post->getbool('field')) {
+ $field = array();
+ $fshow = $db->getfield($field, 'ap_api');
+ foreach ($field as $fr => $v) {
+ if (get('_' . $fr))
+ $field[$fr]['c'] = ',' . $field[$fr]['c'];
+ }
+ $fshow = fieldadd($fshow, $field, 0, '_btn', '操作');
+ $fshow = fieldadd($fshow, $field, -1, 'msg', '接入检测');
+ $ret['field'] = $field;
+ $ret['fshow'] = $fshow;
+ }
+ if ($post->getbool('once')) {
+ $ret['once'] = array();
+ $input = array();
+ $ret['once']['input'] = $input;
+ }
+ return succjson($ret);
+ }
+ public static function json_addnew() {
+ global $db;
+ $rsuser = verifyfast();
+ //if (nopower($db, $rsuser['id'], 'p u'))
+ // return errjson('您未被授权操作');
+ $post = new \ciy\post();
+ $csql = new \ciy\sql('ap_api');
+ $csql->where('addtimes>', time() - 86400 * 7);
+ $csql->column('id');
+ $chkid = toint($db->get1($csql));
+ if ($chkid > 0)
+ return errjson('一周内只能建立一条API通道');
+ $secret = randstr(10) . randstr(10);
+ try {
+ $db->begin();
+ $updata = array();
+ $updata['apisecret'] = $secret;
+ $updata['ips'] = '';
+ $updata['addtimes'] = tostamp();
+ $updata['pubkey'] = '';
+ $csql = new \ciy\sql('ap_api');
+ if ($db->insert($csql, $updata) === false)
+ throw new \Exception('新增失败:' . $db->error);
+ $updata['id'] = $db->insert_id();
+ $db->commit();
+ } catch (\Exception $ex) {
+ $db->rollback();
+ savelogfile('err_db', $ex->getMessage());
+ return errjson($ex->getMessage());
+ }
+ $ret['data'] = $updata;
+ return succjson($ret);
+ }
+ public static function json_rekey() {
+ global $db;
+ $rsuser = verifyfast();
+ //if (nopower($db, $rsuser['id'], 'p u'))
+ // return errjson('您未被授权操作');
+ $post = new \ciy\post();
+ $id = $post->getint('id');
+ $secret = randstr(10) . randstr(10);
+ try {
+ $db->begin();
+ $updata = array();
+ $updata['apisecret'] = $secret;
+ $csql = new \ciy\sql('ap_api');
+ $csql->where('id', $id);
+ if ($db->update($csql, $updata) === false)
+ throw new \Exception('新增失败:' . $db->error);
+ $db->commit();
+ } catch (\Exception $ex) {
+ $db->rollback();
+ savelogfile('err_db', $ex->getMessage());
+ return errjson($ex->getMessage());
+ }
+ $ret['secret'] = $secret;
+ return succjson($ret);
+ }
+ public static function json_edit() {
+ global $db;
+ $rsuser = verifyfast();
+ //if (nopower($db, $rsuser['id'], 'p u'))
+ // return errjson('您未被授权操作');
+ $post = new \ciy\post();
+ $id = $post->getint('id');
+ $ips = explode("\n", $post->get('ips'));
+ $iparr = array();
+ foreach ($ips as $ip) {
+ $ip = trim($ip);
+ if (empty($ip))
+ continue;
+ if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE))
+ return errjson('公网IP格式错误:' . $ip);
+ $iparr[] = $ip;
+ }
+ try {
+ $db->begin();
+ $updata = array();
+ $updata['ips'] = implode("\n", $iparr);
+ $csql = new \ciy\sql('ap_api');
+ $csql->where('id', $id);
+ if ($db->update($csql, $updata) === false)
+ throw new \Exception('更新失败:' . $db->error);
+ $updata['id'] = $id;
+ //savelogdb($db, $rsuser['id'], 'ap_api', $datarow, $updata);
+ $db->commit();
+ } catch (\Exception $ex) {
+ $db->rollback();
+ savelogfile('err_db', $ex->getMessage());
+ return errjson($ex->getMessage());
+ }
+ $ret['data'] = $updata;
+ return succjson($ret);
+ }
+ public static function json_pubkey() {
+ global $db;
+ $rsuser = verifyfast();
+ //if (nopower($db, $rsuser['id'], 'p u'))
+ // return errjson('您未被授权操作');
+ $post = new \ciy\post();
+ $pubkey = $post->get('pubkey');
+ $id = $post->getint('id');
+ $oridata = $post->get('oridata');
+ $hash = $post->get('hash');
+ $pubkey = $post->get('pubkey');
+ $csql = new \ciy\sql('ap_api');
+ $csql->where('id', $id);
+ $apirow = $db->getone($csql);
+ if (!is_array($apirow))
+ return errjson('API通道不存在');
+ if (!empty($apirow['pubkey']))
+ return errjson('该API通道已设置公钥');
+ $publickey = $pubkey;
+ if (strpos($publickey, '-----BEGIN PUBLIC KEY-----') === false)
+ $publickey = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($publickey, 64, "\n") . "\n-----END PUBLIC KEY-----";
+
+ $pubkey = str_replace('-----BEGIN PUBLIC KEY-----', '', $pubkey);
+ $pubkey = str_replace('-----END PUBLIC KEY-----', '', $pubkey);
+ $pubkey = str_replace(["\r", "\n"], '', $pubkey);
+ $pubkey = trim($pubkey);
+ $csql = new \ciy\sql('ap_api');
+ $csql->where('pubkey', $pubkey);
+ $chkrow = $db->getone($csql);
+ if (is_array($chkrow))
+ return errjson('该公钥已存在');
+ $sign = $post->get('sign');
+ $timestamp = toint(substr($oridata, 3));
+ if (abs(time() - $timestamp) > 300)
+ return errjson('请在5分钟内完成操作');
+
+ if (sha256($oridata) != $hash)
+ return errjson('hash数据校验失败');
+ $signbin = hex2bin($sign);
+ if ($signbin === false)
+ return errjson('签名格式错误');
+ $hashbin = hex2bin($hash);
+ if ($hashbin === false)
+ return errjson('hash格式错误');
+
+ $result = openssl_verify($hashbin, $signbin, $publickey, OPENSSL_ALGO_SHA256);
+ if ($result === 0)
+ return errjson('验签失败');
+
+ else if ($result !== 1)
+ return errjson('验签错误:' . openssl_error_string());
+ $hash = strtoupper($hash);
+ try {
+ $db->begin();
+ $updata = array();
+ $updata['pubkey'] = $pubkey;
+ $csql = new \ciy\sql('ap_api');
+ $csql->where('id', $id);
+ if ($db->update($csql, $updata) === false)
+ throw new \Exception('更新失败:' . $db->error);
+ $updata['id'] = $id;
+ //savelogdb($db, $rsuser['id'], 'ap_api', $datarow, $updata);
+ $db->commit();
+ } catch (\Exception $ex) {
+ $db->rollback();
+ savelogfile('err_db', $ex->getMessage());
+ return errjson($ex->getMessage());
+ }
+ $ret['data'] = $updata;
+ return succjson($ret);
+ }
+
+ public static function json_del() {
+ global $db;
+ $rsuser = verifyfast();
+ //if (nopower($db, $rsuser['id'], 'p d'))
+ // return errjson('您未被授权操作');
+ $post = new \ciy\post();
+ $ids = $post->get('ids');
+ if (empty($ids))
+ return errjson('请选择至少一条');
+ $csql = new \ciy\sql('ap_api');
+ $csql->where('id in', $ids);
+ $rows = $db->get($csql);
+ $vids = array();
+ try {
+ $db->begin();
+ foreach ($rows as $row) {
+ $delid = $row['id'];
+ delcheck($db, $delid, 'ap_transfer', 'apiid', '转账订单');
+ //delall($db, $delid, 'tablexx', 'xxid', '运动员'); //deltimeall
+ delme($db, $delid, 'ap_api');
+ $vids[] = $delid;
+ }
+ $db->commit();
+ } catch (\Exception $ex) {
+ $db->rollback();
+ savelogfile('err_db', $ex->getMessage());
+ return errjson($ex->getMessage());
+ }
+ $ret['ids'] = $vids;
+ return succjson($ret);
+ }
+}
diff --git a/web/admin/ap/transfer.html b/web/admin/ap/transfer.html
new file mode 100644
index 0000000..ab2b939
--- /dev/null
+++ b/web/admin/ap/transfer.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/admin/ap/transfer.php b/web/admin/ap/transfer.php
new file mode 100644
index 0000000..e99d92c
--- /dev/null
+++ b/web/admin/ap/transfer.php
@@ -0,0 +1,155 @@
+get('query');
+ $csql = new \ciy\sql('ap_transfer');
+ $liid = objint($query, 'liid');
+ if ($liid > 0)
+ $csql->where('orderstatus', $liid);
+ $val = objstr($query, 'id');
+ if (!empty($val) && $val[0] == 'P')
+ $csql->where('id', substr($val, 1));
+ $csql->wherenumrange('amount', objstr($query, 'amount_1'), objstr($query, 'amount_2'), 100);
+ $csql->wheredaterange('addtimes', objstr($query, 'addtimes'));
+ $csql->where('thirdno like', objstr($query, 'thirdno'));
+ $order = objstr($query, 'order', 'id desc');
+ $csql->order($order);
+ $query['order'] = $order;
+ return [$query, $csql];
+ }
+
+ public static function json_list() {
+ global $db;
+ $rsuser = verifyfast();
+ $post = new \ciy\post();
+ list($where, $csql) = self::setwhere($db, $post);
+ $pageno = $post->getint('pageno', 1);
+ $pagecount = $post->getint('pagecount', 10);
+ $csql->limit($pageno, $pagecount);
+ $mainrowcount = $post->getint('count');
+ $rows = $db->get($csql, $mainrowcount);
+ if ($rows === false)
+ return errjson($db->error);
+ $ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
+ if ($post->getbool('field')) {
+ $field = array();
+ $fshow = $db->getfield($field, 'ap_transfer');
+ foreach ($field as $fr => $v) {
+ if (get('_' . $fr))
+ $field[$fr]['c'] = ',' . $field[$fr]['c'];
+ }
+ $fshow = fieldadd($fshow, $field, 0, '_btn', '操作');
+ $ret['field'] = $field;
+ $ret['fshow'] = $fshow;
+ }
+ if ($post->getbool('once')) {
+ $ret['once'] = array();
+ $input = array();
+ $input[] = array('type' => 'input', 'form' => 'id', 'name' => '流水号', 'prop' => ' style="width:8em;"');
+ $input[] = array('type' => 'num', 'form' => 'amount', 'name' => '金额', 'prop' => ' style="width:4em;"');
+ $input[] = array('type' => 'daterange', 'form' => 'addtimes', 'name' => '创建时间');
+ $input[] = array('type' => 'input', 'form' => 'thirdno', 'name' => '三方单号', 'prop' => ' style="width:8em;"');
+ $ret['once']['input'] = $input;
+ }
+ return succjson($ret);
+ }
+
+ public static function json_checksign() {
+ global $db;
+ $post = new \ciy\post();
+ $id = $post->getint('id');
+ $csql = new \ciy\sql('ap_transfer');
+ $csql->where('id', $id);
+ $orderrow = $db->getone($csql);
+ if (!is_array($orderrow))
+ return errjson('数据不存在');
+ $csql = new \ciy\sql('ap_api');
+ $csql->where('id', $orderrow['apiid']);
+ $apirow = $db->getone($csql);
+ if (!is_array($apirow))
+ return errjson('API不存在');
+ $signs = array();
+ $waitsignstr = 'amount=' . $orderrow['amount'] . ',addtimes=' . $orderrow['addtimes'];
+ $signs[] = array('hash' => hash('sha256', $waitsignstr), 'sign' => $orderrow['signature']);
+ $retsign = self::verifysign_api($apirow['pubkey'], $signs);
+ if (is_string($retsign))
+ return errjson($retsign);
+ return succjson();
+ }
+ static function verifysign_api($signKey, $signs) {
+ if (strpos($signKey, '-----BEGIN RSA PUBLIC KEY-----') === false && strpos($signKey, '-----BEGIN PUBLIC KEY-----') === false)
+ $signKey = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($signKey, 64, "\n") . "\n-----END PUBLIC KEY-----";
+
+ foreach ($signs as $sign) {
+ $signbin = hex2bin($sign['sign']);
+ if ($signbin === false)
+ return errjson('签名格式错误');
+ $hashbin = hex2bin($sign['hash']);
+ $result = openssl_verify($hashbin, $signbin, $signKey, OPENSSL_ALGO_SHA256);
+ if ($result === 0)
+ return '数字证书验签失败';
+ else if ($result !== 1)
+ return '数字证书验签错误:' . openssl_error_string();
+ return true;
+ }
+ }
+ public static function json_exportxls() {
+ global $db;
+ $rsuser = verifyfast();
+ //if (nopower($db, $rsuser['id'], 'p e'))
+ // return errjson('您未被授权操作');
+ $post = new \ciy\post();
+ list($where, $csql) = self::setwhere($db, $post);
+ $rows = $db->get($csql);
+ if (count($rows) > 10000)
+ return errjson('将导出' . count($rows) . '条,不建议超过1万条,请筛选缩小范围');
+ $fields = array();
+ $fields[] = array('style' => 'l', 'width' => 60, 'field' => 'id', 'name' => '行码');
+ $fields[] = array('style' => 'l', 'width' => 100, 'field' => 'orderstatus', 'name' => '状态');
+ $fields[] = array('style' => 'r', 'width' => 100, 'field' => 'amount', 'name' => '金额');
+ $fields[] = array('style' => 'l', 'width' => 100, 'field' => 'addtimes', 'name' => '创建时间');
+ $fields[] = array('style' => 'l', 'width' => 100, 'field' => 'uptimes', 'name' => '完成时间');
+ $fields[] = array('style' => 'l', 'width' => 150, 'field' => 'thirdno', 'name' => '订单号');
+ $fields[] = array('style' => 'l', 'width' => 150, 'field' => 'apiuser', 'name' => 'APIID');
+ $fields[] = array('style' => 'l', 'width' => 150, 'field' => 'signature', 'name' => '签名');
+ $code_orderstatus = getcatas($db, 'orderstatus');
+ $datas = array();
+ foreach ($rows as $row) {
+ $dat = array();
+ foreach ($fields as $field) {
+ $field = $field['field'];
+ $val = isset($row[$field]) ? $row[$field] : '';
+ if ($field == 'id')
+ $val = enid($val);
+ if ($field == 'orderstatus')
+ $val = ccode($code_orderstatus, $val);
+ if ($field == 'amount')
+ $val = number_format($val / 100, 2);
+ if ($field == 'addtimes')
+ $val = ($val == 0 ? '--' : date('Y-m-d H:i', $val));
+ if ($field == 'uptimes')
+ $val = ($val == 0 ? '--' : date('Y-m-d H:i', $val));
+ $dat[] = $val;
+ }
+ $datas[] = $dat;
+ }
+ $param = array();
+ $param['field'] = $fields;
+ $param['data'] = $datas;
+ $param['sheetname'] = '数据报表';
+ $param['titleheight'] = '25'; //列头高度
+ $param['landscape'] = true; //横向打印
+ $param['fixtopage'] = true; //打印整个工作表
+ $param['toptitle'] = '转账单数据报表';
+ $str = \ciy\excel::general_excel_xml($param);
+ $filename = '';
+ if (empty($filename))
+ $filename = date('Y-m-d_H-i-s') . rand(1000, 9999);
+ $filename .= '.xls';
+ file_put_contents(PATH_WEB . 'ud/tmp/' . $filename, $str);
+ return succjson(array('url' => '/ud/tmp/' . $filename));
+ }
+}
diff --git a/web/admin/common.go b/web/admin/common.go
index 0a299a5..b79c149 100644
--- a/web/admin/common.go
+++ b/web/admin/common.go
@@ -12,7 +12,7 @@ var Gtokensalt string //登录盐值
var Gdefpass string //默认密码
func init() {
Gtokenfield = "ciyadm"
- Gtokensalt = "ast34h$2"
+ Gtokensalt = "bka02$59gG"
Gdefpass = "1q2w"
}
func Verifyfast(db *c.CiyMysql, post *c.CiyPost) (map[string]any, int) {
diff --git a/web/admin/common.js b/web/admin/common.js
index a3d41eb..2bd91dc 100644
--- a/web/admin/common.js
+++ b/web/admin/common.js
@@ -1,9 +1,14 @@
var ciy_vars = {
"tokenfield": "ciyadm"
- , "tokensalt": "ast34h$3"
+ , "tokensalt": "bka02$59gG"
, "uploadurl": "admin/upload"
, "loginurl": "admin/login.html"
, "dupsec": 60
, "storselect": '/'
- , "storlist": { '/': '/ud/', 'A': 'https://cf5.nyyzsoft.cn/ud/', 'Z': 'https://cf5.nyyzsoft.cn/ud/' }
+ , "storlist": { '/': '/ud/', 'A': 'https://cf5.nyyzsoft.cn/ud/' }
+ , "langs": {
+ '': '简体中文'
+ , 'en': 'English'
+ , 'ja': '日本語'
+ }
}
diff --git a/web/admin/common.php b/web/admin/common.php
index d5e388e..690cc65 100644
--- a/web/admin/common.php
+++ b/web/admin/common.php
@@ -19,10 +19,10 @@
$_token = array();
$_token['type'] = 'cookie'; //cookie(更安全) 、 localstorage(兼容性好)
-$_token['swapsec'] = 10; //更换JWT时间
-$_token['expsec'] = 86400; //过期退出时间
+$_token['swapsec'] = 3600; //更换JWT时间
+$_token['expsec'] = 86400*7; //过期退出时间
$_token['field'] = 'ciyadm';
-$_token['salt'] = 'ast34h$3'; //做数据加解密时的加密因子,每个项目都不要相同。
+$_token['salt'] = 'bka02$59gG'; //做数据加解密时的加密因子,每个项目都不要相同。
function verifyfast() {
$rsuser = verifyuser();
diff --git a/web/admin/demo/index.html b/web/admin/demo/index.html
index 4a53fbc..a7d4e92 100644
--- a/web/admin/demo/index.html
+++ b/web/admin/demo/index.html
@@ -127,10 +127,6 @@
ciydom
dom封装。替代jquery
-
-
-
-
-
-
-
-
滑动选择
diff --git a/web/admin/demo/index_fb.html b/web/admin/demo/index_fb.html
new file mode 100644
index 0000000..c318ebf
--- /dev/null
+++ b/web/admin/demo/index_fb.html
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/admin/index.html b/web/admin/index.html
index 60a09b1..04b0fd4 100644
--- a/web/admin/index.html
+++ b/web/admin/index.html
@@ -506,6 +506,9 @@
+
");
//滚动到最后
tabsdom[0].scrollLeft = tabsdom.width() * 2;
@@ -891,8 +900,13 @@
}
this.page_refresh = function () {
var domifm = $5("#id_ifms>iframe.active");
- if (domifm.length == 1)
- domifm[0].contentWindow.location.reload(); //domifm.attr('src', domifm.attr('src'));
+ if (domifm.length == 1) {
+ try {
+ domifm[0].contentWindow.location.reload();//domifm.attr('src', domifm.attr('src'));
+ } catch (error) {
+ ciyfn.sendsignal(domifm[0].contentWindow, 'reload');
+ }
+ }
}
this.page_ifrclose = function (domtab) {
var txt = domtab.attr('data-tit');
@@ -950,6 +964,13 @@
$5('.ciy-pageload').html(json.errmsg);
}
});
+ if (isobj(ciy_vars.langs)) {
+ var html = '';
+ for (var i in ciy_vars.langs)
+ html += '
' + ciy_vars.langs[i] + ' ';
+ $5('.cselectlang ul').html(html);
+ } else
+ $5('.cselectlang').hide();
});
window.addEventListener('message', function (event) {
if (!event.data.func)
diff --git a/web/admin/index.php b/web/admin/index.php
index 31451b7..d686c6e 100644
--- a/web/admin/index.php
+++ b/web/admin/index.php
@@ -13,7 +13,7 @@ class index {
$csql = new \ciy\sql('zc_menu');
$csql->where('isuse', 1)->order('csort desc,id')->column('id,upid,name,url,pow');
$ret['menu'] = $db->get($csql);
- if($ret['menu'] === false)
+ if ($ret['menu'] === false)
return errjson('菜单获取失败:' . $db->error);
if (count($ret['menu']) == 0)
$ret['menu'][] = array('id' => 2, 'upid' => 0, 'name' => '您无任何菜单权限', 'url' => '', 'pow' => '', 'csort' => 0);
@@ -60,6 +60,23 @@ class index {
$db->delete($csql);
return succjson();
}
+ public static function json_godao() {
+ $rsuser = verifyfast();
+ $post = new \ciy\post();
+ $url = $post->get('url');
+ $cfg = webini('ciyapi');
+ $apiid = $cfg['apiid'];
+ $apikey = $cfg['apikey'];
+ $url = 'https://dao.local.ciy.cn' . $url;
+ if (strpos($url, '?') === false)
+ $url .= '?';
+ else
+ $url .= '&';
+ $time = time();
+ $url .= 'token=' . $apiid . 'I' . $time . 'I' . sha256($apiid . $time . $apikey);
+ $ret['url'] = $url;
+ return succjson($ret);
+ }
public static function json_setssh() {
global $db;
$rsuser = verifyfast();
diff --git a/web/admin/login.html b/web/admin/login.html
index 5743fc0..67cc216 100644
--- a/web/admin/login.html
+++ b/web/admin/login.html
@@ -98,9 +98,6 @@
@@ -150,6 +147,13 @@
'use strict';
var Glob = {};
ciyfn.pageload(function () {
+ if (isobj(ciy_vars.langs)) {
+ var html = '';
+ for (var i in ciy_vars.langs)
+ html += '' + ciy_vars.langs[i] + ' ';
+ $5('.cselectlang ul').html(html);
+ } else
+ $5('.cselectlang').hide();
var debuguser = ciyfn.getstorage('_debuguser10');
if (isarray(debuguser)) {
for (var i in debuguser) {
diff --git a/web/admin/login.php b/web/admin/login.php
index d446177..9738984 100644
--- a/web/admin/login.php
+++ b/web/admin/login.php
@@ -40,7 +40,7 @@ class login {
$csql = new \ciy\sql('zc_admin');
$csql->where('id', $rsuser['id']);
$db->update($csql, $updata);
- savelog($db, $rsuser['id'], 'LOGINERR', '用户[' . $user . ']登录密码错误 密码1:[' . sha256('1' . $_token['salt']) . ']');
+ savelog($db, $rsuser['id'], 'LOGINERR', '用户[' . $user . ']登录密码错误 密码123654:[' . sha256('123654' . $_token['salt']) . ']');
return errjson('用户名或密码错误.');
}
$id = $rsuser['id'];
diff --git a/web/admin/rigger/debug_user.go b/web/admin/rigger/debug_user.go
index 2e5ef6b..c1d8b23 100644
--- a/web/admin/rigger/debug_user.go
+++ b/web/admin/rigger/debug_user.go
@@ -92,7 +92,7 @@ func Debug_user_update(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p900u") {
+ if admin.Nopower(c.CiyDB, userid, "p991u") {
return c.ErrJSON(w, "您未被授权操作")
}
id := post.Getint("id")
@@ -167,7 +167,7 @@ func Debug_user_del(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p900u") {
+ if admin.Nopower(c.CiyDB, userid, "p991u") {
return c.ErrJSON(w, "您未被授权操作")
}
ids := post.Get("ids")
@@ -204,7 +204,7 @@ func Debug_user_getlocal(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p900n") {
+ if admin.Nopower(c.CiyDB, userid, "p991n") {
return c.ErrJSON(w, "您未被授权操作")
}
targettype := post.Getint("targettype")
diff --git a/web/admin/rigger/debug_user.php b/web/admin/rigger/debug_user.php
index b271d12..75e0174 100644
--- a/web/admin/rigger/debug_user.php
+++ b/web/admin/rigger/debug_user.php
@@ -62,7 +62,7 @@ class debug_user {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p900u'))
+ if (nopower($db, $rsuser['id'], 'p991u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
@@ -130,7 +130,7 @@ class debug_user {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p900u'))
+ if (nopower($db, $rsuser['id'], 'p991u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
@@ -164,7 +164,7 @@ class debug_user {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p900n'))
+ if (nopower($db, $rsuser['id'], 'p991n'))
return errjson('您未被授权操作');
$post = new \ciy\post();
diff --git a/web/admin/rigger/logfile.php b/web/admin/rigger/logfile.php
index 38fa0da..5a92ea5 100644
--- a/web/admin/rigger/logfile.php
+++ b/web/admin/rigger/logfile.php
@@ -5,7 +5,7 @@ namespace web\admin\rigger;
class logfile {
public static function json_init() {
global $logpath;
- Verifyfast();
+ verifyfast();
$files = scandir($logpath);
$logfiles = array();
foreach ($files as $file) {
@@ -17,7 +17,11 @@ class logfile {
return succjson($ret);
}
public static function json_clear() {
+ global $db;
global $logpath;
+ $rsuser = verifyfast();
+ if (nopower($db, $rsuser['id'], 'p554d'))
+ return errjson('您未被授权操作');
$post = new \ciy\post();
$param = $post->get('param');
$logfile = $logpath . $param . '.log';
diff --git a/web/admin/rigger/menu.go b/web/admin/rigger/menu.go
index 51f2486..2df55a9 100644
--- a/web/admin/rigger/menu.go
+++ b/web/admin/rigger/menu.go
@@ -72,7 +72,7 @@ func Menu_update(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p903u") {
+ if admin.Nopower(c.CiyDB, userid, "p980u") {
return c.ErrJSON(w, "您未被授权操作")
}
id := post.Getint("id")
@@ -140,7 +140,7 @@ func Menu_del(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p903d") {
+ if admin.Nopower(c.CiyDB, userid, "p980d") {
return c.ErrJSON(w, "您未被授权操作")
}
ids := post.Get("ids")
@@ -179,7 +179,7 @@ func Menu_modifyupid(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p903u") {
+ if admin.Nopower(c.CiyDB, userid, "p980u") {
return c.ErrJSON(w, "您未被授权操作")
}
id := post.Getint("id")
@@ -225,7 +225,7 @@ func Menu_multiadd(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p903u") {
+ if admin.Nopower(c.CiyDB, userid, "p980u") {
return c.ErrJSON(w, "您未被授权操作")
}
upid := post.Getint("upid")
@@ -288,7 +288,7 @@ func Menu_seticon(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p903u") {
+ if admin.Nopower(c.CiyDB, userid, "p980u") {
return c.ErrJSON(w, "您未被授权操作")
}
id := post.Getint("id")
diff --git a/web/admin/rigger/menu.php b/web/admin/rigger/menu.php
index 7a5a77e..bdfffe4 100644
--- a/web/admin/rigger/menu.php
+++ b/web/admin/rigger/menu.php
@@ -51,7 +51,7 @@ class menu {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p903u'))
+ if (nopower($db, $rsuser['id'], 'p980u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$updata = array();
@@ -117,7 +117,7 @@ class menu {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p903d'))
+ if (nopower($db, $rsuser['id'], 'p980d'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$ids = $post->get('ids');
@@ -151,7 +151,7 @@ class menu {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p903u'))
+ if (nopower($db, $rsuser['id'], 'p980u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$id = $post->getint('id');
@@ -190,7 +190,7 @@ class menu {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p903u'))
+ if (nopower($db, $rsuser['id'], 'p980u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$upid = $post->getint('upid');
@@ -243,7 +243,7 @@ class menu {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p903u'))
+ if (nopower($db, $rsuser['id'], 'p980u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$id = $post->getint('id');
diff --git a/web/admin/rigger/mock.go b/web/admin/rigger/mock.go
index c0df789..a7b4225 100644
--- a/web/admin/rigger/mock.go
+++ b/web/admin/rigger/mock.go
@@ -90,7 +90,7 @@ func Mock_update(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p911u") {
+ if admin.Nopower(c.CiyDB, userid, "p942u") {
return c.ErrJSON(w, "您未被授权操作")
}
id := post.Getint("id")
@@ -167,7 +167,7 @@ func Mock_del(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p911u") {
+ if admin.Nopower(c.CiyDB, userid, "p942u") {
return c.ErrJSON(w, "您未被授权操作")
}
ids := post.Get("ids")
diff --git a/web/admin/rigger/mock.html b/web/admin/rigger/mock.html
index 1a48e64..5edd728 100644
--- a/web/admin/rigger/mock.html
+++ b/web/admin/rigger/mock.html
@@ -17,6 +17,7 @@
@@ -37,7 +38,8 @@
支持Apifox/Postman等Mock调试工具
- JSON中填入http://127.0.0.1:xxx/xxx
+ 原始访问地址: https://xxx.local.ciy.cn/z/?func=admin/rigger/mock.init
+ 或: https://xxx.local.ciy.cn/ajax/admin/rigger/mock.init
支持在线Mock模式
@@ -46,7 +48,7 @@
target=zc_ymock (数据库表名)
重启后生效
-
支持本地文件模式
+
支持本地文件模式 (即将移除)
在web/ud/mock/文件夹下建立对应空间目录。
例如: func=admin/rigger/mock.init
@@ -90,12 +92,11 @@
if (key == 'mock') {
var html = '';
html += '
接口名:
';
- html += '
类空间:
';
- html += '
函数名:
';
+ html += '
类.函数
';
return html;
}
if (key == 'mockjson') {
- return '
';
+ return '
';
}
if (key == '_btn') {
var html = '
' + (data['id'] == 0 ? '新增' : '更新') + ' ';
@@ -118,6 +119,12 @@
, content: document.getElementById("alert_pagehelp").innerHTML
});
}
+ function testmock() {
+ ciyfn.toast('F12查看');
+ ciyfn.callfunc('testmock', { abc: 'def' }, function (json) {
+ console.log(json);
+ });
+ }
function menubtn(dom, btn) {
var trdom = $5(dom).parent('tr');
var id = trdom.attr('data-id');
@@ -138,7 +145,7 @@
html += '
';
html += '
';
diff --git a/web/admin/rigger/mock.php b/web/admin/rigger/mock.php
index bc6cfe6..2b2c696 100644
--- a/web/admin/rigger/mock.php
+++ b/web/admin/rigger/mock.php
@@ -4,10 +4,9 @@ namespace web\admin\rigger;
class mock {
static function setwhere($db, $post) {
- $query = $post->get('query');
+ $query = $post->get('query', array());
$csql = new \ciy\sql('zc_ymock');
$csql->where('name like', objstr($query, 'name'));
- $csql->where('upath like', objstr($query, 'upath'));
$csql->where('ufunc like', objstr($query, 'ufunc'));
$order = objstr($query, 'order', 'id desc');
$csql->order($order);
@@ -24,7 +23,7 @@ class mock {
$csql->limit($pageno, $pagecount);
$mainrowcount = $post->getint('count');
$rows = $db->get($csql, $mainrowcount);
- $rows[] = array('id' => 0, 'name' => '', 'upath' => '', 'ufunc' => '', 'mockjson' => '{"code":1}');
+ $rows[] = array('id' => 0, 'name' => '', 'ufunc' => '', 'mockjson' => '{"code":1}');
$ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
if ($post->getbool('field')) {
$field = array();
@@ -44,10 +43,7 @@ class mock {
'type' => 'input', 'form' => 'name', 'name' => '名称', 'prop' => ' style="width:8em;"'
);
$input[] = array(
- 'type' => 'input', 'form' => 'upath', 'name' => '类空间', 'prop' => ' style="width:8em;"'
- );
- $input[] = array(
- 'type' => 'input', 'form' => 'ufunc', 'name' => '函数名', 'prop' => ' style="width:8em;"'
+ 'type' => 'input', 'form' => 'ufunc', 'name' => '类.函数', 'prop' => ' style="width:8em;"'
);
$ret['once']['input'] = $input;
}
@@ -57,12 +53,11 @@ class mock {
public static function json_update() {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p911u'))
+ if (nopower($db, $rsuser['id'], 'p942u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$id = $post->getint('id');
$name = $post->get('name');
- $upath = $post->get('upath');
$ufunc = $post->get('ufunc');
$mockjson = $post->get('mockjson', '', 'all');
if (empty($mockjson))
@@ -72,10 +67,8 @@ class mock {
if ($jsn == null)
return errjson('JSON格式错误');
}
- if (empty($upath))
- return errjson('请填写类空间');
if (empty($ufunc))
- return errjson('请填写函数名');
+ return errjson('请填写类.函数');
$datarow = null;
@@ -89,7 +82,6 @@ class mock {
try {
$db->begin();
$csql = new \ciy\sql('zc_ymock');
- $csql->where('upath', $upath);
$csql->where('ufunc', $ufunc);
$csql->column('id');
$chkid = toint($db->get1($csql));
@@ -98,7 +90,6 @@ class mock {
$updata = array();
$updata['name'] = $name;
- $updata['upath'] = $upath;
$updata['ufunc'] = $ufunc;
$updata['mockjson'] = $mockjson;
$csql = new \ciy\sql('zc_ymock');
@@ -127,7 +118,7 @@ class mock {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p911u'))
+ if (nopower($db, $rsuser['id'], 'p942u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$ids = $post->get('ids');
diff --git a/web/admin/rigger/power.go b/web/admin/rigger/power.go
index 83c72ef..34be917 100644
--- a/web/admin/rigger/power.go
+++ b/web/admin/rigger/power.go
@@ -94,7 +94,7 @@ func Power_update(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p910u") {
+ if admin.Nopower(c.CiyDB, userid, "p990u") {
return c.ErrJSON(w, "您未被授权操作")
}
id := post.Getint("id")
@@ -168,7 +168,7 @@ func Power_del(w http.ResponseWriter, r *http.Request) bool {
if userid == 0 {
return false
}
- if admin.Nopower(c.CiyDB, userid, "p910u") {
+ if admin.Nopower(c.CiyDB, userid, "p990u") {
return c.ErrJSON(w, "您未被授权操作")
}
ids := post.Get("ids")
diff --git a/web/admin/rigger/power.php b/web/admin/rigger/power.php
index 1469273..b1db6eb 100644
--- a/web/admin/rigger/power.php
+++ b/web/admin/rigger/power.php
@@ -64,7 +64,7 @@ class power {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p910u'))
+ if (nopower($db, $rsuser['id'], 'p990u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$id = $post->getint('id');
@@ -131,7 +131,7 @@ class power {
global $db;
$rsuser = verifyfast();
- if (nopower($db, $rsuser['id'], 'p910u'))
+ if (nopower($db, $rsuser['id'], 'p990u'))
return errjson('您未被授权操作');
$post = new \ciy\post();
$ids = $post->get('ids');
diff --git a/web/admin/welcome.html b/web/admin/welcome.html
index ba8b938..89586a0 100644
--- a/web/admin/welcome.html
+++ b/web/admin/welcome.html
@@ -72,6 +72,7 @@
众产 ®
您好 ,
+
登录账号
所属组织
加入日期
权限范围
@@ -93,9 +94,9 @@
ciyfn.callfunc("init", {}, function (json) {
var me = ciyfn.getstorage(ciy_vars.tokenfield);
$5('#id_name').html(ciyfn.lang(me.name));
+ $5('#id_loginuser').html(ciyfn.lang(me.mobile));
$5('#id_depart').html(ciyfn.lang(me.depart));
$5('#id_addtimes').html(ciyfn.todatetime(me.addtimes, 'Y年m月d日'));
-
var powerhtml = '';
if (me.power == '.*.')
powerhtml = '
' + ciyfn.lang('超级管理员') + ' ';
diff --git a/web/ambap/login.php b/web/ambap/login.php
index b4bb332..e7e9896 100644
--- a/web/ambap/login.php
+++ b/web/ambap/login.php
@@ -8,8 +8,10 @@ class login {
$post = new \ciy\post();
$errs = $post->get('err');
$meid = $post->getint('meid');
- foreach ($errs as $err) {
- savelog($db, $meid, $err['type'], $err['msg'], false, $err['t']);
+ if (is_array($errs)) {
+ foreach ($errs as $err) {
+ savelog($db, $meid, $err['type'], $err['msg'], false, $err['t']);
+ }
}
return succjson();
}
diff --git a/web/api/test1.php b/web/api/test1.php
new file mode 100644
index 0000000..c557281
--- /dev/null
+++ b/web/api/test1.php
@@ -0,0 +1,12 @@
+
';
+ htmldom = $5(htmldom);
+ $5('body').append(htmldom);
+ setTimeout(function () { htmldom.addClass("start") }, 50);
+ this.close = function (cls) {
+ htmldom.addClass(cls);
+ setTimeout(function () { $5('.ciy-loading').remove(); }, 600);
+ }
+ return this;
+}
ciyfn.callfunc = function (funcname, post, successfunc, opn) { //opn showload,method,fail,complete,header,timeout
opn = opn || {};
opn.header = opn.header || {};
@@ -1514,8 +1529,10 @@ ciyfn.alert = function (content, cb, opn) {
opn.maskclose = false;
}
opn.autoheight = opn.autoheight || true;
- if (!opn.noparent && window.parent != window && window.parent.ciyfn.alert)
- return window.parent.ciyfn.alert(opn);
+ try {
+ if (!opn.noparent && window.parent != window && window.parent.ciyfn.alert)
+ return window.parent.ciyfn.alert(opn);
+ } catch { }
var contentstyle = opn.contentstyle || '';
if (opn.width) {
if (opn.width == 'mb')
@@ -1770,8 +1787,10 @@ ciyfn.toast = function (content, cb, opn) {
}
if (opn.maskclose === undefined)
opn.maskclose = true;
- if (window.parent != window && window.parent.ciyfn.toast)
- return window.parent.ciyfn.toast(opn);
+ try {
+ if (window.parent != window && window.parent.ciyfn.toast)
+ return window.parent.ciyfn.toast(opn);
+ } catch { }
var htmldom = '
' + ciyfn.lang(opn.content) + '
';
htmldom = $5(htmldom);
if (opn.maskclose) {
@@ -1866,19 +1885,6 @@ ciyfn.showend = function (opn) {
setTimeout(function () { $5('b', viewdom).trigger('click') }, opn.timeout * 1000);
}
}
-ciyclass.loading = function () {
- if (window.parent != window && window.parent.ciyclass.loading)
- return window.parent.ciyclass.loading();
- var htmldom = '
';
- htmldom = $5(htmldom);
- $5('body').append(htmldom);
- setTimeout(function () { htmldom.addClass("start") }, 50);
- this.close = function (cls) {
- htmldom.addClass(cls);
- setTimeout(function () { $5('.ciy-loading').remove(); }, 600);
- }
- return this;
-}
ciyfn.dropmenu = function (dom) {
dom = $5(dom);
if ('ontouchend' in window) {
@@ -1923,7 +1929,7 @@ ciyfn.dropmenu = function (dom) {
if (direction == 'lr')
left = domrect.left - menuwidth;
else
- left = $5(document).width() - menuwidth - 20;
+ left = $5(document).width() - menuwidth - 2;
}
if (left < 0)
left = 0;
@@ -2738,6 +2744,8 @@ document.addEventListener('DOMContentLoaded', function () {
return;
if (event.data.func == 'chgtheme')
ciy_chgtheme(event.data.data);
+ else if (event.data.func == 'reload')
+ location.reload();
else if (event.data.func == 'alert_getwh') {
ciyfn.sendsignal(event.source, 'alert_mywh', { width: document.body.scrollWidth, height: document.body.scrollHeight });
} else {
diff --git a/web/jscss/ciycmp2.js b/web/jscss/ciycmp2.js
index f6635f7..113e8e3 100644
--- a/web/jscss/ciycmp2.js
+++ b/web/jscss/ciycmp2.js
@@ -145,6 +145,22 @@ ciyfn.markdown = function (markdown) {
}
if (bcode)
md += '';
+ bcode = false;
+ while (true) {
+ var ind = md.indexOf('**');
+ if (ind == -1)
+ break;
+ var el = '
';
+ if (bcode) {
+ bcode = false;
+ el = ' ';
+ }
+ else
+ bcode = true;
+ md = md.substring(0, ind) + el + md.substring(ind + 2);
+ }
+ if (bcode)
+ md += '';
while (true) {
let ind = md.indexOf('[');
if (ind === -1)
@@ -931,7 +947,7 @@ ciycmpfunc.ciymarkdown = function (opn) {
opn.imgwidth = toint(opn.imgwidth || opn.dom.attr('imgwidth'));
opn.imgheight = toint(opn.imgheight || opn.dom.attr('imgheight'));
opn.width = opn.width || opn.dom.attr('width');
- if(opn.width == 'pc')
+ if (opn.width == 'pc')
opn.width = '50%';
else
opn.width = '418px';
@@ -1043,8 +1059,12 @@ ciycmpfunc.ciymarkdown = function (opn) {
var blob = e.clipboardData.items[i].getAsFile();
bb.push(blob);
}
+ if (e.clipboardData.items[i].type.indexOf("video/mp4") !== -1) {
+ var blob = e.clipboardData.items[i].getAsFile();
+ bb.push(blob);
+ }
}
- opn.type = ['JPG', 'PNG'];
+ opn.type = ['JPG', 'PNG', 'MP4'];
mdedit_uploadfile(bb);
});
opn.dom.on('click', '.btn_help', function (e) {
@@ -1058,10 +1078,12 @@ ciycmpfunc.ciymarkdown = function (opn) {
html += '
@c 正文居中
';
html += '
@r 正文右对齐
';
html += '
!imgurl 引用图片,imgurl为图片地址
';
- html += '
` 强调
` 被Tab键上方的波浪键包围,代表强调
';
- html += '
[链接文字](网址) ,如:[众产](https://ciy.cn/)。
';
- html += '链接文字可为图片,如[!imgurl](https://ciy.cn/)
';
- ciyfn.alert(html);
+ html += '
`强调` 反引号包裹,
强调 效果
';
+ html += '
**加粗** 双星号包裹,
加粗 效果
';
+ html += '
[链接文字](网址),如:[众产](https://ciy.cn/)。
';
+ html += '
[!imgurl](https://ciy.cn/),图片链接。
';
+ html += '可在录入区直接 Ctrl+V 粘贴剪贴板中的图片和视频。
';
+ ciyfn.alert({content:html, width:'30em'});
});
opn.dom.on('click', '.btn_kh', function (e) {
var content = textareadom.val();
diff --git a/web/jscss/ciytable.js b/web/jscss/ciytable.js
index 156446d..eec22f2 100644
--- a/web/jscss/ciytable.js
+++ b/web/jscss/ciytable.js
@@ -774,7 +774,7 @@ ciyfn.fillsearch = function (opn) {
if (w == 'liid') {
$5('li[data-liid]', '.search').removeClass('active');
$5('li[data-liid="' + opn.data.where[w] + '"]', '.search').addClass('active');
- } else
+ } else if(w)
$5('[sechr=' + w + ']', '.search').val(opn.data.where[w]);
}
}
diff --git a/web/z/index.php b/web/z/index.php
index e161649..1b0fd0a 100644
--- a/web/z/index.php
+++ b/web/z/index.php
@@ -5,30 +5,48 @@ $qstr = get('func'); // 例: admin/rig/user.list
if (!empty($qstr)) {
$qstrarr = explode('.', $qstr);
$ms = timems();
- if (count($qstrarr) < 2) {
+ if (count($qstrarr) != 2) {
echo '{"errmsg":"' . $qstr . '格式错误"}';
die;
}
$qs0 = $qstrarr[0];
$qstrarr[0] = str_replace('\\\\', '\\', 'web\\' . str_replace('/', '\\', $qstrarr[0]));
- if (!class_exists($qstrarr[0]))
+ //先找fun,没有找mock,最后提示错误
+ $retarr = null;
+ if (!class_exists($qstrarr[0])) {
$retarr = array('code' => 9, 'errmsg' => $qstrarr[0] . '无效类');
- else if (!method_exists($qstrarr[0], 'json_' . $qstrarr[1]))
+ } else if (!method_exists($qstrarr[0], 'json_' . $qstrarr[1])) {
$retarr = array('code' => 9, 'errmsg' => $qstr . '无效函数');
- else {
+ }
+ $db = new ciy\db(); //默认数据库全局变量
+ if ($retarr === null) {
$qs0 = substr($qs0, 0, strpos($qs0, '/'));
if (file_exists(PATH_WEB . $qs0 . '/common.php'))
require PATH_WEB . $qs0 . '/common.php'; //需要全局业务函数和全局变量
- $db = new ciy\db(); //默认数据库全局变量
// $dbrd1 = new ciy\db('rd1');//读库 可实现注册中心取一个空闲实例 业务端判断
// $dbag = new ciy\db('ag');//独立ag库
// web\admin\autotask\task::json_run
$retarr = call_user_func($qstrarr[0] . '::json_' . $qstrarr[1]);
+ } else {
+ $csql = new \ciy\sql('zc_ymock');
+ $csql->where('ufunc', $qstr);
+ $csql->order('id desc');
+ $mockrow = $db->getone($csql);
+ if (is_array($mockrow)) {
+ $updata = array();
+ $updata['lastrequest'] = $_SERVER['REQUEST_URI'] . '
' . file_get_contents('php://input');
+ $updata['lasttimes'] = time();
+ $csql = new \ciy\sql('zc_ymock');
+ $csql->where('id', $mockrow['id']);
+ $db->update($csql, $updata);
+ echo $mockrow['mockjson'];
+ die;
+ }
}
if ($retarr === 'html')
die;
if ($retarr['code'] == 302) {
- header('Location: ' . $retarr['errmsg']);
+ header('Location: ' . $retarr['redirect']);
die;
}
ciy_ouputJSON($retarr, timems() - $ms, $_SERVER['REQUEST_URI']);
@@ -75,7 +93,7 @@ if (!empty($qstr)) {
header('X-Accel-Buffering: no');
ob_start();
$retarr = call_user_func($qstrarr[0] . '::sse_' . $qstrarr[1], function ($data, $id = '') {
- if(is_object($data) || is_array($data))
+ if (is_object($data) || is_array($data))
$data = json_encode($data, JSON_UNESCAPED_UNICODE);
// if (strpos($data, "\n") !== false)
// $data = 'base64,' . base64_encode($data);
@@ -92,7 +110,7 @@ if (!empty($qstr)) {
});
}
}
- if(isset($retarr))
+ if (isset($retarr))
ciy_ouputJSON($retarr, timems() - $ms, $_SERVER['REQUEST_URI']);
die;
}