commit 4f3da37e060c40cfe7c0e5c609f2f5612ade5f54 Author: LiuZhengYu <2777920394@qq.com> Date: Wed Apr 15 17:28:46 2026 +0800 批量添加 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad26d09 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.out +*.so +*.dylib +*.pem +*.log +*.glb +*.zip +*.rar +*.pdf +*.docx +*.xls +*.doc +*.gltf +*.mp3 +*.mp4 + +# Dependency directories (remove the comment below to include it) +资料/* +web/ud/docs/* +web/ud/2025/* +web/ud/2026/* +web/ud/2027/* +web/ud/2028/* +**/unpackage/ +**/tmp/ +web.ini +gitup.bat diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..9fbb181 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ciyon main", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceRoot}", + "env": {}, + "args": [], + "showLog": true + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..327df4c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.unicodeHighlight.includeComments": false, + "editor.unicodeHighlight.includeStrings": false +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..54bb9d5 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,18 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "刷新CDN缓存", + "type": "shell", + "command": "node ../../nodejs/refreshcdn/refreshcdn.js ${workspaceFolder}", + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "always" + }, + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..17cb286 --- /dev/null +++ b/LICENSE @@ -0,0 +1,117 @@ +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + + c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. + +signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice diff --git a/README.md b/README.md new file mode 100644 index 0000000..c0f916a --- /dev/null +++ b/README.md @@ -0,0 +1,172 @@ +# Ciyon - 众产全栈开发框架 +## 技术特点 +### AI辅助决策 + 基于Function Call和JSON的AI能力,实现了定期AI决策及渐进式主动决策执行能力。 + + 利用置信度缓解AI幻觉难题,基于量化函数可实现专用AI能力。 + +### Web3D地球 + 基于Cesium与ThreeJS,实现了三维场景可视化配置和开发JS独立组件。 + + 支持多种地图源、地形图、GLB模型、光照、无人机建模等。 + +### 原生重构组件 + 内生发展,尽量不引用第三方库,拆解掌握原理后重写。 + + PC端组件20+,移动端组件60+,不断扩展中。 + +### PHP+Golang + PHP在项目原型验证阶段快速开发上线。 + + Golang作为服务器集群降成本的高并发优化。 + +### 免编译模式 + 尽量用免编译模式开发,降低老旧代码维护难度。 + + 是未来演进的重要研究基础。 + +### 代码生成器 + 支持基于数据表的通用功能的代码生成能力。 + + 数据表注解定义,自动生成代码,再利用AI补全微调。 + + 遵循一定的开发规范,能产生90%高质量直接运行代码。 + + +## 软件架构 +### 总控端原生JS + 使用原生JS实现一系列的常用函数封装。 + + 包括websocket、bigscreen、openai、sse、i18n等。 + + 结合Web3D的数据大屏驾驶舱示例代码实现。 + +### 总控端PHP + 原生实现独立开发框架,输入安全校验、唯一访问入口。 + + 拆解吸收多种大型框架源码。本框架结构简单,可读性强。 + +### 总控端Golang + 原生实现独立开发框架,未实现函数自动转至PHP执行。 + + 支持mock、连接池、自更新等。 + +### 移动端Vue3 + 在Vue3基础上极简封装各类常用组件。 + + 统一封装常见函数,页面全面可自定义,多语言。 + + 提供路由工具,一键生成路由代码。 + +### Web站原生JS库 + 让Web呈现扁平的价值传达,减少酷炫效果对阅读的干扰,整站SEO可完整解析。 + +### Web站缓存机制 + 自定义的动态页面缓存模式,结合各类CDN回源策略减轻对源服务器请求。 + + +## 软件工程 +### 项目可行性验证阶段 + 用原生JS+PHP+微信小程序开发。 + + 在数周内完成项目快速开发。 + + 低成本投入市场验证迭代。 + +### 项目快速发展阶段 + Web服务器集群规模或数据库服务器连接数承压后, + + 用Golang重写高并发请求的函数接口,逐步替代。 + +### 项目稳定运营阶段 + Golang将业务侧数据全部重写,完全替换PHP低效代码。 + + 根据业务特点拆分,扩展成多地多中心异构拓扑。 + + +## 未来演进 +### 全量区块链 + 创新的实现区块链底层架构,将上传的文件图片视频资源、数据库资源全部完整上链。 + + 非简单的hash上链。 + +### 后端智能合约化 + 后端研发基于区块链JS智能合约, + + 实现统一的前端JS访问入口,实现区块链级事务。 + +### 大前端上链 + 从区块链上下载前端代码包,加载到用户端(PC/手机/XR眼镜等),任何交互操作均直接请求区块链智能合约。 + +### 代码可审计 + 区块链基于共识算法开放协议,天然可审计。 + + 前端代码及后端智能合约不允许混淆和编译。 + + 用户端可随时调阅源码分析。 + + +# 在线演示 + +https://ciyon.ciy.cn/ +https://ciyon.ciy.cn/admin/ + +# Windows开发环境部署 +[详见教程](https://ciyon.ciy.cn/docs/#100) + +部署软件: Nginx、PHP、MariaDB、Golang +建议安装: Git、python3、node.js +开发IDE: VSCode(Cursor/Claude Code/Antigravity)、UniAPP、微信开发者工具 +开发工具: Navicat、WinSCP5、Google Chrome、S3 Browser、Apifox +效率工具: XMind、WPS Office、Everything、ToDesk +网络工具: SocketTool、MQTT-Explorer + +# Linux生产环境部署 +[详见教程](https://ciyon.ciy.cn/docs/#102) +操作系统: Debian +运维工具: Navicat、WinSCP5+、S3 Browser + +# 重要更新记录 + +## 2026.03.01 +- 升级: 增加总控MCP和用户MCP通用接口 + +## 2026.02.02 +- 升级: 路由重构,支持软路由,需结合Nginx配置 + +## 2025.12.01 +- 里程碑: 众产事业平台上线 + +## 2025.09.06 +- 文档: 编写移动端 Demo代码 + +## 2025.08.25 +- 文档: docs文档整理 + +## 2025.06.12 +- 文档: Ciyon文档上线,文档整理 + +## 2025.05.16 +- 新增: Ciyon官网上线、Git内部公开发布 + +## 2025.04.06 +- 文档: 编写PC Demo代码 + +## 2025.02.20 +- 升级: 移动端Vue3框架所有组件完成去依赖 + +## 2024.12.26 +- 新增: AI辅助决策。支持多轮AI任务 + +## 2024.10.05 +- 新增: Web3D地编器及ciyearth.js组件库 + +## 2024.08.30 +- 新增: Golang语言开发模式 + +## 2024.05.21 +- 升级: 移动端Vue3/Uniapp兼容框架(原Vue2框架废弃) + +## 2024.03.12 +- 里程碑: 基于CIYPHP重写开发SaaS框架 + diff --git a/aiskill/ciyon-PC前端.md b/aiskill/ciyon-PC前端.md new file mode 100644 index 0000000..791cc83 --- /dev/null +++ b/aiskill/ciyon-PC前端.md @@ -0,0 +1,933 @@ +# Ciyon PC前端开发指南 + +## 框架概述 + +Ciyon是一个轻量级、高性能的PC前端开发框架,采用原生JavaScript开发,不依赖第三方库(如Vue、React、jQuery),专注于企业级后台管理系统和SaaS应用的快速开发。 + +### 核心特点 + +- **零依赖**: 纯原生JavaScript,无第三方库依赖 +- **组件化**: 提供丰富的表单组件和业务组件 +- **高性能**: 优化的DOM操作和事件处理 +- **响应式**: 支持多端适配(PC、平板、手机) +- **国际化**: 内置多语言支持 +- **主题系统**: CSS变量实现主题切换 + +--- + +## 框架架构 + +### 核心库文件 + +``` +web/jscss/ +├── ciy.js # 基础工具库和DOM操作 +├── ciycmp.js # 表单组件库 +├── ciycmp2.js # 扩展组件库 +├── ciytable.js # 表格和列表组件 +├── ciybigscreen.js # 数据大屏组件 +├── ciy_websocket.js # WebSocket通信 +├── style.css # 核心样式 +└── theme.js # 暗黑模式 +``` + +### 设计模式 + +#### DOM封装模式 + +框架使用 `$5()` 函数替代jQuery,提供统一的DOM操作接口: + +```javascript +// 选择元素 +var dom = $5('.class-name'); + +// 链式调用 +dom.css({color: 'red'}).addClass('active').show(); + +// 事件绑定 +dom.on('click', function(e) { + console.log('clicked'); +}); +``` + +#### 组件化模式 + +使用自定义标签和 `ciycmp()` 函数初始化组件: + +```html + + + +``` + +#### 面向对象模式 + +使用类封装复杂功能: + +```javascript +var table = new ciyclass.table({ + dom: '.table', + url: 'api/list', + pagecount: 20, + fn_done: function(json) { + console.log('data loaded'); + } +}); +table.callpage(1); +``` + +--- + +## 组件体系 + +### 表单组件 + +#### 日期时间选择器(ciy-datetime) + +```html + + + +``` + +**属性说明**: +- `com`: 组件名称(必填) +- `type`: 类型(date/datetime/month) +- `value`: 初始值(时间戳或日期字符串) +- `mindate`: 最小日期 +- `maxdate`: 最大日期 +- `placeholder`: 占位文本 + +#### 日期范围选择器(ciy-daterange) + +```html + +``` + +**输出格式**:`开始日期~结束日期` + +#### 下拉选择框(ciy-select) + +```html + + + +``` + +#### 多选下拉框(ciy-selmulti) + +```html + +``` + +**输出格式**:`,id1,id2,id3,` + +#### 级联选择框(ciy-selcas) + +```html + +``` + +用于省市区级联选择。 + +#### 开关(ciy-switch) + +```html + +``` + +**输出值**:`1`(开启)/ `2`(关闭) + +#### 单位编辑器(ciy-inputunitedit) + +```html + +``` + +用于三级单位换算,如:1箱=20盒,1盒=24瓶。 + +#### 地图选择器(ciy-map) + +```html + +``` + +输出经纬度:`lng,lat` + +#### 文本编辑器(ciy-textarea) + +```html + +``` + +支持Tab键、字数统计、@用户提示。 + +#### 文件上传(ciy-upload) + +```html + +``` + +**属性说明**: +- `type`: 允许的文件类型 +- `maxcount`: 最大上传数量 +- `maxkb`: 文件大小限制(KB) + +### 列表组件 + +#### 表格组件(ciyclass.table) + +```html +
+
+ +
+
+
+
+
+
+
+
+
+ + +``` + +**功能特性**: +- 动态列配置 +- 列宽调整记忆 +- 列排序 +- 列隐藏 +- 行选择 +- 分页 +- 搜索 +- 顶部选项卡筛选 + +**顶部选项卡筛选**:使用 `fillsearch` 的 `lidata` 参数添加顶部选项卡,`liall` 设置"全部"选项的文本: + +```javascript +table = new ciyclass.table({ + dom: '.table', + url: 'list', + pagecount: 20, + fn_beforedata: function(json) { + ciyfn.fillsearch({ + searchdom: '.search', + data: json, + liall: '全部', + lidata: [ + {id: 1, name: '未使用'}, + {id: 2, name: '已使用'} + ], + //lidata: '【字典代码】', // 引用字典写法 + //lidata: ':全部.1:未使用.2:已使用', //数组简写 + liclick: function(dom) { + table.search(dom, 'li'); + } + }); + return json; + } +}); +``` + +**liid编号**:自定义标识值应从1开始,不要使用0。 + +**后端处理**:在 `setwhere` 函数中根据 `liid` 参数进行筛选。 + +#### 卡片列表(ciyclass.cardtable) + +```html +
+ +
+
+
+
+
+ + +``` + +### 功能组件 + +#### 弹窗(ciyfn.alert) + +```javascript +ciyfn.alert({ + title: '提示', + content: '操作成功', + btn: ['确定', '取消'], + cb: function(opn) { + if (opn.btn == '确定') { + // 确定操作 + } + } +}); +``` + +#### Toast提示(ciyfn.toast) + +```javascript +ciyfn.toast('操作成功'); +ciyfn.toast('操作失败', 'error'); +``` + +#### 选项卡(ciyfn.tabcard) + +```html +
+
+
标签1
+
标签2
+
+
+
内容1
+
内容2
+
+
+``` + +--- + +## 开发规范 + +### HTML结构规范 + +#### 标准页面结构 + +```html + + + + + + + + + +
+ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + +``` + +#### 表单结构 + +```html +
+ +
+ +
+
+``` + +### JavaScript编码规范 + +#### 页面初始化 + +```javascript +'use strict'; + +var table; +ciyfn.pageload(function() { + // 初始化组件 + ciycmp({ + dom: '[com=status]', + range: 'status', + all: '全部' + }); + + // 初始化表格 + table = new ciyclass.table({ + dom: '.table', + url: 'api/list', + pagecount: 20 + }); + table.callpage(1); +}); +``` + +#### 组件初始化 + +```javascript +// 标准初始化 +ciycmp({ + dom: '[com=component]', + range: 'dictionary', + value: '1', + onchange: function(e) { + console.log('changed:', e.value); + } +}); +``` + +#### 事件处理 + +```javascript +// 使用$5绑定事件 +$5('.btn-save').on('click', function(e) { + e.preventDefault(); + // 保存逻辑 +}); + +// 使用原生addEventListener +document.querySelector('.btn-save').addEventListener('click', function(e) { + e.preventDefault(); + // 保存逻辑 +}); +``` + +#### API调用 + +```javascript +ciyfn.callfunc('api/admin.update', { + id: 1, + name: 'test' +}, function(json) { + //返回code:1,成功回调 +}); +``` + +#### 表单获取 + +```javascript +var form = ciyfn.getform('.search'); +console.log(form); +``` + +### 样式规范 + +#### CSS变量 + +```css +:root { + /* 主色 */ + --man3: #d7eeff; + --man4: #80c1f3; + --man5: #1E9FFF; + --man6: #1e89db; + --man7: #8568f7; + --mant: #ffffff; + + /* 成功色 */ + --succ5: #03a547; + --succ6: #048238; + --succt: #ffffff; + + /* 警示色 */ + --warn5: #e39725; + --warn6: #b97a1c; + --warnt: #ffffff; + + /* 失败色 */ + --dag5: #e34242; + --dag6: #bd2525; + --dagt: #ffffff; + + /* 文字色 */ + --txt1: #8c9ba4; + --txt2: #818e97; + --txt3: #738088; + --txt4: #646e76; + --txt5: #576067; + --txt6: #454d52; + --txt7: #2c3236; + --txt8: #060708; + --txt9: #000000; + + /* 背景色 */ + --bg1: #ffffff; + --bg2: #fbfbfc; + --bg3: #f7f8f8; + --bg4: #f0f2f2; + --bg5: #e3e6e7; + --bg6: #cdd2d4; + --bg7: #afb6b9; + --bg8: #939da1; + --bg9: #7e8a8e; + + + /* 其他css变量 */ + --e-scroll: rgba(0, 0, 0, 0.2); + --e-tabselect: #fffec5; + --e-dialog: 2px 2px 20px -10px #000000; + --e-inputbg: #f7f7f7; + --e-inputbr: #ffffff; + --e-switchtxt: #2c3236; + --e-inputshadow: 0 1px 3px 0 #00000042; + --e-menusec: 0.5s; +} +``` + +#### 响应式断点 + +```css +@media (max-width: 767px) { /* 手机 */ } +@media (max-width: 991px) { /* 平板 */ } +@media (min-width: 576px) { /* 平板及以上 */ } +@media (min-width: 992px) { /* PC */ } +``` + +--- + +## 后端交互 + +### API调用规范 + +#### 标准请求格式 + +```javascript +ciyfn.callfunc('/admin/user.update', { + param1: 'value1', + param2: 'value2' +}, function(json) { + // 处理响应 +}); +``` + +#### 标准响应格式 + +```json +{ + "code": 1, + "msg": "成功", + "data": {}, + "list": [], + "count": 100, + "pageno": 1, + "once": {} +} +``` + +### 认证机制 + +框架使用JWT进行用户认证,Token存储在Cookie或LocalStorage中。 +``` +// 获取 +var me = ciyfn.getstorage(ciy_vars.tokenfield); +``` + +### 权限控制 + +``` +// 检查权限 +if (ciyfn.nopower(me.power, 'p1v')) { + ciyfn.alert('未被授权'); +} +``` + +权限格式:`.p1v.p2v.p3v.`(p=父权限,v=查看) + +--- + +## 最佳实践 + +### 组件命名 + +- 使用 `com` 属性标识组件name +- 组件名采用下划线命名法 +- 表单字段使用有意义的名称 + +```html + + +``` + +### 数据字典 + +字典数据通过 `range` 属性引用: + +```javascript +// 字典结构 +[{ + id: 1, + name: '状态1', + upid: 0 +}] + +// 使用 +ciycmp({ + dom: '[com=status]', + range: 'userstatus' // 从localstorage缓存读取 +}); +``` + +### 事件处理 + +- 使用 `onchange` 处理组件值变化 +- 事件回调接收统一的参数对象 + +```javascript +ciycmp({ + dom: '[com=status]', + onchange: function(e) { + console.log(e.name); // 组件名称 + console.log(e.value); // 组件值 + console.log(e.dom); // DOM元素 + console.log(e.from); // 触发来源 + } +}); +``` + +### 国际化 + +使用 `ciyfn.lang()` 函数实现多语言: + +```javascript +console.log(ciyfn.lang('保存')); +console.log(ciyfn.lang('删除')); +``` + +### 性能优化 + +- 使用 `ciyfn.throttle()` 防抖 +- 使用 `ciyfn.lazyimg()` 懒加载图片 +- 列表分页加载 +- 图片URL转换:使用 `ciyfn.file_stor()` 将数据库存储路径转换为云存储绝对URL +- 图片查看:使用 `ciyfn.showimg(index, imagesString)` 查看多张图片,参数为起始索引和用`~`连接的图片路径字符串 + +```javascript +// 图片URL转换 +var imgurl = ciyfn.file_stor('/2024/03/14/image.jpg'); + +// 查看多张图片,用~分隔(数据库中的原始存储) +ciyfn.showimg(1, '/img/1.jpg~/img/2.jpg~/img/3.jpg'); // 从第2张开始查看 +``` + +```javascript +// 防抖示例 +$5('.search-input').on('input', function() { + if (ciyfn.throttle(this)) return; + // 搜索逻辑 +}); +``` + +--- + +## 开发流程 + +### 新建页面 + +1. 在 `web/xxx/` 下创建同名HTML文件和后端文件 +2. 引入必要的JS和CSS文件 +3. 使用组件标签构建页面 +4. 编写初始化逻辑 +5. 实现交互功能 +6. 测试和优化 + +### 示例代码 + +#### 列表页面示例 + +```html + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ + + + + + + + + +``` + +#### 表单页面示例 + +```html + + + + + + + +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+ + + + + + + +``` + +--- + +## 常用API + +### 工具函数 + +```javascript +// 全局函数 +tostr(val, defval) // 转字符串 +toint(val, def) // 转整数 +tofloat(val, def) // 转浮点数 +tostamp(time) // 转时间戳 +isarray(v) // 判断是否Array类型 +isobj(v) // 判断是否Object类型 +iselement(v) // 判断是否Element类型 + +// DOM操作 +$5(selector) // 选择元素 +dom.css('color') // 获取样式 +dom.css()['color'] // 获取计算后样式 +dom.css(name, val) // 设置样式 +dom.css({color:#xxx}) // 批量设置样式 +dom.show() / dom.hide() // 显示/隐藏 +dom.on(event, handler) // 绑定事件 +dom.val(value) // 获取/设置值 + +// 数据处理 +ciyfn.tojson(str) // JSON解析 +ciyfn.jsontostr(obj) // JSON序列化 +ciyfn.tostamp(time) // 转时间戳 +ciyfn.todatetime(stamp, fmt) // 格式化日期 + +// 存储 +ciyfn.getstorage(key) // 读取存储 +ciyfn.setstorage(key, val) // 写入存储 + +// 消息提示 +ciyfn.toast(msg, type) // 提示 +ciyfn.alert(opn) // 弹窗 + +// API调用 +ciyfn.callfunc(url, data, callback, opn) // 调用接口 +``` + +### 表格API + +```javascript +// 分页 +table.callpage(page); // 加载页面 +table.updateline(json); // 更新行 +table.delline(json); // 删除行 + +// 搜索 +table.search(dom, act); // 执行搜索 +``` + +--- + +## 八、注意事项 + +1. **原生开发**: 尽量使用原生开发,已封装$5(jQuery改进版) +1. **严格模式**: 所有JS代码使用 `'use strict'` +3. **引号使用**: 代码中使用单引号 +4. **事件处理**: 使用 `$5().on()` 或原生 `addEventListener` +5. **异步处理**: 使用回调函数处理异步结果 +6. **数据验证**: 后端必须验证数据 +7. **错误处理**: 无需处理API错误,自动弹窗。特殊情况,在opn参数中定义fail函数 +8. **性能优化**: 大数据列表使用分页加载 +9. **兼容性**: 确保IE11+兼容 +10. **安全性**: 防止XSS和CSRF攻击 +11. **菜单结构设计**: PC端菜单应具备清晰的层级结构,二次菜单设计必须有一级菜单。 + +--- + +## 常见问题 + +### Q: 组件不显示? + +A: 检查是否正确引入了组件库文件(ciycmp.js、ciycmp2.js)。 + +### Q: 表格数据不加载? + +A: 检查API返回格式是否符合标准,确认 `url` 参数正确。 + + +## 参考资料 + +- 组件示例:`web/admin/demo/front/` +- API文档:参考各组件的源码注释 +- 设计思路:参考框架注释中的设计说明 + +--- + +**版本**: 1.0.0 +**作者**: Ciyon Team \ No newline at end of file diff --git a/aiskill/ciyon-web3d.md b/aiskill/ciyon-web3d.md new file mode 100644 index 0000000..cd59869 --- /dev/null +++ b/aiskill/ciyon-web3d.md @@ -0,0 +1,1138 @@ +# Ciyon Web3D 应用开发指南 + +## 概述 + +本文档为AI开发3D地图应用提供指导,重点讲解如何基于 `cemap.html` 进行二次开发,实现资产点击交互和统计图表展示等功能。 + +## 技术栈 + +### 前端 +- **核心引擎**: Cesium.js (基于WebGL的3D地球可视化引擎) +- **UI框架**: 自定义框架 (ciy.js, ciycmp.js) +- **图表库**: ECharts (可选,用于统计图表) + +### 数据库 +- MySQL +- **主要数据表**: + - `zc_cemap_data` - 地图配置数据 + - `zc_cemap_bill` - 指示牌资源 + - `zc_cemap_glb` - GLB模型资源 + +--- + +## 资产管理 + +### 资产说明 + +系统提供以下资产类型,可通过后台管理界面进行管理: + +1. **GLB模型资源** - 3D建筑、设施等模型 + - 管理界面: `glb.html` + - 数据表: `zc_cemap_glb` + - 支持路径分类管理 + +2. **指示牌资源** - 平面图片、标识牌等 + - 管理界面: `bill.html` + - 数据表: `zc_cemap_bill` + - 支持路径分类管理 + +3. **3D Tile资源** - 实景航拍、大规模3D场景 + - 管理界面: `ceeditor.html`(地编器) + - 可直接在编辑器中添加和配置 + +### 地图配置 + +地图配置存储在 `zc_cemap_data` 表的 `mapjson` 字段中,包含: +- 地图源设置(天地图、高德、腾讯、百度等) +- 3D Tile列表 +- Entity列表(GLB模型、指示牌等) +- 飞行点列表 +- 地形、遮罩等设置 + +--- + +## 核心API - ciyearth4.js + +### 1. 初始化地图 + +```javascript +var ce = new ciyearth(); +ce.init({ + domid: 'ceContainer', // DOM容器ID或DOM对象 + personheight: 1.8, // 眼睛到地面高度 + timeline: 0, // 1显示时间轴 + ion: 'your-ion-token', // Cesium Ion授权token + sunhourmin: '12:12', // 太阳时间 + setin: 3, // 1地球飞入, 2中国飞入, 3直接进入 + wmts_source: 1, // 地图源: 1默认, 2纯色, 3天地图, 4高德, 5腾讯, 6百度 + wmts_style: 1, // 样式: 1卫星, 2卫星(标注), 3矢量 + tiles: [], // 3DTile数组 + entitys: [], // Entity数组 + flys: [] // 快捷定位点数组 +}); +``` + +### 3. Entity管理 + +#### Entity类型 +- `model` - 3D模型(GLB/GLTF) +- `billboard` - 永正面(始终朝向相机) +- `plane` - 墙面(平面贴图) + +#### 添加Entity + +```javascript +ce.addentity({ + type: 'model', // 类型: model/billboard/plane + name: '建筑名称', + bind: 'building_123', // 资产编号,用于关联业务数据 + lng: 116.39, // 经度 + lat: 39.9, // 纬度 + height: 10, // 高度 + url: '/path/to/model.glb', // 模型URL + w: 10, // 宽度(米) - plane/billboard + h: 10, // 高度(米) - plane/billboard + sc: 1 // 缩放比例 +}); +``` + +#### 添加标记 + +```javascript +ce.addmarker({ + lng: 116.39, + lat: 39.9, + img: '/path/to/icon.png', + width: 20, + height: 27, + autoheight: true +}); +``` + +### 4. 相机控制 + +#### 飞行到指定位置 + +```javascript +ce.flyTo({ + fd: {x, y, z}, // 目标位置 + fo: {h, p, r} // h:heading, p:pitch, r:roll +}, 3); // 时间(秒) +``` + +#### 设置相机位置 + +```javascript +ce.setView({ + fd: {x, y, z}, + fo: {h, p, r} +}); +``` + +#### 获取相机位置 + +```javascript +var camera = ce.getView(); +// 返回: {fd: {x, y, z}, fo: {h, p, r}} +``` + +### 5. 事件系统 + +```javascript +ce.ciyevent = function(type, act, data, data2) { + if (type == 'entity') { + if (act == 'leftclick') { + // 左键点击Entity + var entity = data.entity; + var bindId = entity.ciydata.bind; // 获取资产编号 + console.log('点击了资产:', bindId); + + // 在这里处理资产点击事件 + showAssetInfo(bindId); + } + } else if (type == 'tile') { + if (act == 'leftclick') { + // 左键点击3D Tile + var primitive = data.primitive; + console.log('点击了Tile'); + } + } else if (type == 'control') { + if (act == 'op') { + // 控制操作中(飞行/行走) + // data: Cartographic相机位置 + updateCameraInfo(data); + } + } +}; +``` + +### 6. 飞行/行走模式 + +```javascript +// 开启飞行模式 +ce.control_fly_open(false); // 飞行 +ce.control_fly_open(true); // 行走 + +// 关闭飞行模式 +ce.control_fly_close(); +``` + +**键盘控制**: +- `W` - 前进 +- `S` - 后退 +- `A` - 左移 +- `D` - 右移 +- `Q` - 上升 +- `E` - 下降 +- `Z` - 左转 +- `X` - 右转 +- `空格` - 跳跃(行走模式) +- `F` - 减速 +- `R` - 加速 +- `ESC` - 退出飞行模式 + +### 7. 地形管理 + +```javascript +// 添加地形 +ce.add_terrain('url', { + url: 'https://example.com/terrain', + requestVertexNormals: true, + requestWaterMask: true +}); + +// 获取高度 +var height = await ce.getposheight(cartesian3); +var floorHeight = ce.getfloorheight(); +``` + +--- + +## 地图应用开发 + +### 基础页面结构 + +```html + + + + 3D地图应用 + + + + + +
+ + +
+
+
+
飞行
+
步行
+
+
+ + +
+ + + + + +
+

统计数据

+
+
+ + + + + + + + + + + +``` + +--- + +## 事件交互 + +### Entity点击事件 + +```javascript +ce.ciyevent = function(type, act, data, data2) { + if (type == 'entity' && act == 'leftclick') { + var entity = data.entity; + + // 获取Entity信息 + var entityInfo = { + id: entity.id, + name: entity.name, + type: entity.ciytype, + bind: entity.ciydata.bind, // 资产编号 + position: entity.position._value, + customData: entity.ciydata // 自定义数据 + }; + + console.log('点击Entity:', entityInfo); + + // 处理点击事件 + handleEntityClick(entityInfo); + } +}; +``` + +### Tile点击事件 + +```javascript +if (type == 'tile' && act == 'leftclick') { + var primitive = data.primitive; + console.log('点击3D Tile:', primitive); + + // 可以通过拾取获取Tile中的具体建筑信息 + // 这需要3D Tile数据中包含属性信息 +} +``` + +### 自定义点击事件 + +```javascript +// 添加自定义点击处理器 +var handler = new Cesium.ScreenSpaceEventHandler(ce.viewer.canvas); +handler.setInputAction(function(click) { + var pickedObject = ce.viewer.scene.pick(click.position); + + if (Cesium.defined(pickedObject)) { + if (pickedObject.id) { + // 点击了Entity + var entity = pickedObject.id; + console.log('Entity:', entity.name, entity.ciydata); + } else if (pickedObject.primitive) { + // 点击了Primitive(如3D Tile) + console.log('Primitive:', pickedObject.primitive); + } + } else { + // 点击了空白处 + console.log('点击空白处'); + // 可以关闭浮动面板 + $5('#assetPanel').hide(); + } +}, Cesium.ScreenSpaceEventType.LEFT_CLICK); +``` + +--- + +## 浮动面板 + +### 创建浮动面板 + +```javascript +// 左侧面板 - 资产信息 +var leftPanel = document.createElement('div'); +leftPanel.className = 'float-panel left'; +leftPanel.style.cssText = 'top: 80px; left: 20px; width: 320px;'; +leftPanel.innerHTML = '

资产信息

'; +document.body.appendChild(leftPanel); + +// 右侧面板 - 统计图表 +var rightPanel = document.createElement('div'); +rightPanel.className = 'float-panel right'; +rightPanel.style.cssText = 'top: 80px; right: 20px; width: 380px;'; +rightPanel.innerHTML = '

统计数据

'; +document.body.appendChild(rightPanel); + +// 顶部面板 - 搜索/筛选 +var topPanel = document.createElement('div'); +topPanel.className = 'float-panel top'; +topPanel.innerHTML = ''; +document.body.appendChild(topPanel); + +// 底部面板 - 快捷操作 +var bottomPanel = document.createElement('div'); +bottomPanel.className = 'float-panel bottom'; +bottomPanel.innerHTML = ''; +document.body.appendChild(bottomPanel); +``` + +### 面板样式 + +```css +.float-panel { + position: absolute; + background: rgba(255, 255, 255, 0.95); + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.15); + padding: 15px; + z-index: 1000; + transition: all 0.3s ease; +} + +.float-panel.top { + top: 20px; + left: 50%; + transform: translateX(-50%); +} + +.float-panel.left { + top: 80px; + left: 20px; + width: 320px; + max-height: calc(100vh - 100px); + overflow-y: auto; +} + +.float-panel.right { + top: 80px; + right: 20px; + width: 380px; + max-height: calc(100vh - 100px); + overflow-y: auto; +} + +.float-panel.bottom { + bottom: 20px; + left: 50%; + transform: translateX(-50%); +} + +/* 面板折叠状态 */ +.float-panel.collapsed { + transform: scale(0); + opacity: 0; + pointer-events: none; +} +``` + +### 面板显示/隐藏 + +```javascript +// 显示面板 +function showPanel(selector) { + $5(selector).removeClass('collapsed'); +} + +// 隐藏面板 +function hidePanel(selector) { + $5(selector).addClass('collapsed'); +} + +// 切换面板 +function togglePanel(selector) { + $5(selector).toggleClass('collapsed'); +} +``` + +--- + +## 统计图表 + +### 使用ECharts渲染图表 + +```javascript +// 渲染柱状图 +function renderBarChart(containerId, data) { + var chart = echarts.init(document.getElementById(containerId)); + + var option = { + title: { text: data.title || '柱状图', left: 'center', textStyle: {fontSize: 12} }, + tooltip: { trigger: 'axis' }, + xAxis: { type: 'category', data: data.categories || [] }, + yAxis: { type: 'value' }, + series: [{ + name: data.seriesName || '数值', + type: 'bar', + data: data.values || [], + itemStyle: { color: '#5470c6' } + }] + }; + + chart.setOption(option); + return chart; +} + +// 渲染折线图 +function renderLineChart(containerId, data) { + var chart = echarts.init(document.getElementById(containerId)); + + var option = { + title: { text: data.title || '折线图', left: 'center', textStyle: {fontSize: 12} }, + tooltip: { trigger: 'axis' }, + xAxis: { type: 'category', data: data.categories || [] }, + yAxis: { type: 'value' }, + series: [{ + name: data.seriesName || '数值', + type: 'line', + data: data.values || [], + smooth: true, + areaStyle: { opacity: 0.3 } + }] + }; + + chart.setOption(option); + return chart; +} + +// 渲染饼图 +function renderPieChart(containerId, data) { + var chart = echarts.init(document.getElementById(containerId)); + + var option = { + title: { text: data.title || '饼图', left: 'center', textStyle: {fontSize: 12} }, + tooltip: { trigger: 'item' }, + legend: { bottom: 0 }, + series: [{ + type: 'pie', + radius: '50%', + data: data.values || [], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + }] + }; + + chart.setOption(option); + return chart; +} +``` + +### 响应式图表 + +```javascript +// 监听窗口大小变化 +var charts = []; + +function addChart(chart) { + charts.push(chart); +} + +window.addEventListener('resize', function() { + charts.forEach(function(chart) { + chart.resize(); + }); +}); +``` + +--- + +## 完整示例 + +### 示例:智慧园区管理 + +```javascript +// 资产数据映射 +var assetDataMap = { + 'building_001': { + name: 'A栋办公楼', + type: '办公楼', + floors: 18, + area: 12000, + occupancy: 85, + status: '正常', + energy: { today: 4500, month: 120000 }, + visits: [120, 200, 150, 80, 70, 110, 130], + timeDist: [20, 150, 280, 90] + }, + 'building_002': { + name: 'B栋研发中心', + type: '研发中心', + floors: 12, + area: 8000, + occupancy: 92, + status: '正常', + energy: { today: 3800, month: 98000 }, + visits: [90, 150, 180, 100, 60, 130, 140], + timeDist: [15, 120, 250, 80] + } +}; + +// 处理Entity点击 +function handleEntityClick(entityInfo) { + var assetId = entityInfo.bind; + + if (!assetId || !assetDataMap[assetId]) { + console.log('未知资产:', assetId); + return; + } + + var asset = assetDataMap[assetId]; + + // 显示资产信息面板 + showAssetPanel(asset); + + // 更新统计图表 + updateStatCharts(asset); + + // 飞行到资产位置 + if (entityInfo.position) { + ce.viewer.flyTo(ce.viewer.entities.getById(entityInfo.id), { + offset: new Cesium.HeadingPitchRange(1.57, -0.6, 50) + }); + } +} + +// 显示资产信息面板 +function showAssetPanel(asset) { + var html = '
'; + html += '

' + asset.name + '

'; + html += '
'; + html += '
类型:' + asset.type + '
'; + html += '
楼层:' + asset.floors + '层
'; + html += '
面积:' + asset.area + '㎡
'; + html += '
入住率:' + asset.occupancy + '%
'; + html += '
状态:' + asset.status + '
'; + html += '
'; + html += '
'; + html += '
今日能耗:' + asset.energy.today + ' kWh
'; + html += '
本月能耗:' + asset.energy.month + ' kWh
'; + html += '
'; + html += '
'; + + $5('#assetContent').html(html); +} + +// 更新统计图表 +function updateStatCharts(asset) { + // 更新访问量趋势图 + var visitsChart = echarts.init(document.getElementById('visitsChart')); + visitsChart.setOption({ + series: [{ data: asset.visits }] + }); + + // 更新时段分布图 + var timeDistChart = echarts.init(document.getElementById('timeDistChart')); + timeDistChart.setOption({ + series: [{ data: asset.timeDist }] + }); +} + +// 初始化页面 +function initPage() { + // 初始化地图 + ce.init({ + domid: 'ceContainer', + wmts_source: 4, + wmts_style: 3, + setin: 3, + entitys: [ + { + type: 'model', + name: 'A栋办公楼', + bind: 'building_001', + lng: 116.39, + lat: 39.9, + height: 0, + url: '/models/building_a.glb' + }, + { + type: 'model', + name: 'B栋研发中心', + bind: 'building_002', + lng: 116.40, + lat: 39.9, + height: 0, + url: '/models/building_b.glb' + } + ] + }); + + // 设置事件回调 + ce.ciyevent = function(type, act, data) { + if (type == 'entity' && act == 'leftclick') { + var entity = data.entity; + handleEntityClick({ + id: entity.id, + bind: entity.ciydata.bind, + position: entity.position._value + }); + } + }; +} + +// 页面加载完成后执行 +ciyfn.pageload(initPage); +``` + +--- + +## 最佳实践 + +### 1. 性能优化 + +```javascript +// 使用requestRenderMode按需渲染 +ce.init({ + domid: 'ceContainer', + requestRenderMode: true, + maximumRenderTimeChange: Infinity +}); + +// 距离优化:只加载视野内的Entity +ce.reloadentity(); // 自动优化加载 + +// 减少Entity数量 +// 对于大量相似Entity,考虑使用3D Tile或PrimitiveCollection +``` + +### 2. 事件处理 + +```javascript +// 使用节流防止频繁触发 +function throttle(func, delay) { + var lastTime = 0; + return function() { + var now = Date.now(); + if (now - lastTime >= delay) { + lastTime = now; + func.apply(this, arguments); + } + }; +} + +// 应用节流 +ce.ciyevent = throttle(function(type, act, data) { + // 处理事件 +}, 100); +``` + +### 3. 内存管理 + +```javascript +// 销毁图表实例 +function disposeCharts() { + charts.forEach(function(chart) { + chart.dispose(); + }); + charts = []; +} + +// 页面卸载时清理 +window.addEventListener('beforeunload', function() { + disposeCharts(); + ce.destroy(); +}); +``` + +### 4. 响应式设计 + +```javascript +// 监听窗口大小变化 +window.addEventListener('resize', function() { + // 调整图表大小 + charts.forEach(function(chart) { + chart.resize(); + }); + + // 调整面板位置 + updatePanelPositions(); +}); + +// 移动端适配 +if (ciyfn.inmobile()) { + // 隐藏部分面板 + $5('.control-panel').hide(); + // 调整面板样式 + $5('.float-panel.left').css('width', '80%'); +} +``` + +--- + +## 常见问题 + +### 1. 如何获取点击的Entity详细信息? + +```javascript +ce.ciyevent = function(type, act, data) { + if (type == 'entity' && act == 'leftclick') { + var entity = data.entity; + console.log('Entity ID:', entity.id); + console.log('Entity Name:', entity.name); + console.log('Entity Type:', entity.ciytype); + console.log('Custom Data:', entity.ciydata); + console.log('Position:', entity.position._value); + } +}; +``` + +### 2. 如何在点击时高亮显示Entity? + +```javascript +// 使用轮廓高亮 +ce.silhouette.selected = [entity]; + +// 使用颜色高亮 +entity.model.color = Cesium.Color.fromCssColorString('#ffff00'); + +// 重置高亮 +ce.silhouette.selected = []; +entity.model.color = Cesium.Color.WHITE; +``` + +### 3. 如何加载大量Entity而不影响性能? + +```javascript +// 分批加载 +var batchSize = 100; +var currentIndex = 0; + +function loadBatch() { + var batch = entities.slice(currentIndex, currentIndex + batchSize); + batch.forEach(function(entityData) { + ce.addentity(entityData); + }); + currentIndex += batchSize; + + if (currentIndex < entities.length) { + setTimeout(loadBatch, 100); + } +} + +loadBatch(); +``` + +### 4. 如何实现图层的显示/隐藏? + +```javascript +// 给Entity添加分组属性 +ce.addentity({ + type: 'model', + name: '建筑1', + category: 'building', // 分类 + // ... +}); + +// 控制图层显示 +function toggleLayer(category, visible) { + for (var id in ce.entitys) { + var entity = ce.entitys[id]; + if (entity.ciydata.category === category) { + entity.show = visible; + } + } +} + +// 使用 +toggleLayer('building', false); // 隐藏建筑层 +toggleLayer('building', true); // 显示建筑层 +``` + +### 5. 如何实现搜索定位功能? + +```javascript +// 搜索Entity +function searchEntity(keyword) { + for (var id in ce.entitys) { + var entity = ce.entitys[id]; + if (entity.name && entity.name.indexOf(keyword) > -1) { + // 找到匹配的Entity + flyToEntity(id); + return; + } + } +} + +// 飞行到Entity +function flyToEntity(entityId) { + var entity = ce.entitys[entityId]; + ce.viewer.flyTo(entity, { + offset: new Cesium.HeadingPitchRange(1.57, -0.6, 50) + }); + + // 高亮显示 + ce.silhouette.selected = [entity]; +} +``` + +--- + +## 参考资料 + +- Cesium官方文档: https://cesium.com/docs/ +- Cesium Ion: https://cesium.com/ion/ +- ECharts文档: https://echarts.apache.org/zh/index.html +- 开源作者: 众产® +- 官网: http://ciy.cn/code \ No newline at end of file diff --git a/aiskill/ciyon-后端API.md b/aiskill/ciyon-后端API.md new file mode 100644 index 0000000..11bf561 --- /dev/null +++ b/aiskill/ciyon-后端API.md @@ -0,0 +1,1636 @@ +# Ciyon后台管理系统 - PHP开发框架 Skill文档 + +## 系统概述 + +Ciyon后台管理系统是一个基于PHP8的SaaS平台后台管理框架,采用现代化的Web技术栈,提供完整的用户管理、权限控制、数据管理等核心功能。 + +### 技术特点 +- **PHP命名空间**:采用现代化的命名空间组织代码 +- **MVC架构**:控制器与视图分离,便于维护和扩展 +- **API**:统一POST AJAX接口调用,返回JSON格式数据 +- **安全机制**:完整的用户认证、权限控制、数据加密 +- **数据库抽象**:基于PDO的数据库操作层,支持事务处理 +- **模块化设计**:可插拔的功能模块,便于功能扩展 + +--- + +## 目录结构 + +``` +/web/ +├── ambap/ # 某个移动端的API目录 +├── admin/ # 后台管理主目录 +│ ├── common.php # 后台管理公共函数库 +│ ├── common.js # 前端公共JavaScript +│ ├── index.php # 后台管理主控制器 +│ ├── index.html # 后台管理主页面 +│ ├── login.php # 登录控制器 +│ ├── login.html # 登录页面 +│ ├── welcome.php # 欢迎页控制器 +│ ├── welcome.html # 欢迎页面 +│ ├── upload.php # 文件上传处理 +│ ├── ap/ # 平台用户中心 +│ │ ├── user.html # 平台用户管理前端 +│ │ ├── user.php # 平台用户管理后端 +│ │ └── ... # 其他平台功能模块 +│ ├── saas1/ # SaaS租户管理,可能有多种机构角色,例如卖家/买家/代理等 +│ │ ├── content.html # 内容管理前端 +│ │ ├── content.php # 内容管理后端 +│ │ └── ... # 其他模块 +│ ├── autotask/ # 定时任务目录 +│ │ ├── task.php # crond系统调用入口控制器 +│ │ ├── run.php # 手动运行入口 +│ │ ├── base.php # 定时任务函数库 +│ │ └── ... # 其他定时任务函数库 +│ └── [其他功能目录] # 如:cemap、datasse等 +├── jscss/ # 前端资源 +│ ├── ciy.js # 核心JS库 +│ ├── ciycmp.js # 组件库 +│ ├── ciycmp2.js # 组件库扩展 +│ ├── ciytable.js # 列表组件库(表格、卡片) +│ └── style.css # 样式文件 +└── cwebcomon.php # 公共函数定义类库 + +/zciyphp/ # PHP核心类库 +├── comm.php # 通用公共函数库 +├── db.php # 数据库操作类 +├── sql.php # SQL构建类 +├── post.php # POST参数处理类 +├── web.php # Web工具类 +├── html.php # HTML处理类 +├── http.php # HTTP工具类 +├── upload.php # 文件上传类 +├── excel.php # Excel处理类 +├── openai.php # AI接口类 +├── smtp.php # 邮件发送类 +└── ... # 其他工具类 +``` + +--- + +## 核心架构 + +### 命名空间组织 +系统采用命名空间进行代码组织: +- `web\admin` - 后台管理控制器命名空间 +- `web\cwebcomon` - 公共函数定义类命名空间 +- `ciy` - 核心工具类命名空间 + +### 控制器结构 +控制器类采用静态方法模式,每个功能对应一个静态方法: + +```php +namespace web\admin; + +class index { + // 初始化页面数据 + public static function json_init() { } + + // 添加收藏菜单 + public static function json_favadd() { } + + // 删除收藏菜单 + public static function json_favdel() { } +} +``` + +### 路由机制 +系统通过路由自动调用对应的控制器方法: +- API URL格式:`/admin/index.init` +- 系统自动调用 `web\admin\index::json_init()` +- 所有AJAX接口方法名以 `json_` 开头 + +### 响应格式 +统一使用JSON格式响应: + +```php +// 成功响应 +$ret['data'] = array(); +return succjson($ret); +// 返回:{"code":1, "data":{...}} + +// 错误响应 +return errjson('错误信息', 错误码); +// 返回:{"code":0, "errmsg":"错误信息"} +``` + +--- + +## 开发规范 + +### 文件命名规范 +- 控制器文件:`{功能名}.php` +- 视图文件:`{功能名}.html` +- 类名与文件名保持一致 +- 方法命名:`json_{功能名}`(AJAX接口) +- API路径:/admin/{功能名}.{方法名} +- 所有代码,均被nginx引导至route.php路由。所有函数均为类静态函数。 + +### 代码组织规范 +```php +getint('id'); // 获取整数 +$name = $post->get('name'); // 获取字符串(自动过滤HTML标签) +$html = $post->get('html', '', 'html'); // 获取字符串(自动过滤,但保留HTML标签) +$content = $post->get('content', '', 'all'); // 获取字符串,不做任何过滤 +$price = $post->getfloat('price'); // 获取浮点数 +$date = $post->getdate('date'); // 获取日期(转换为时间戳) +$isenable = $post->getbool('enable');// 获取布尔值 +``` + +### 错误处理规范 +```php +try { + // 业务逻辑 + $db->begin(); + // ... 数据库操作 + $db->commit(); +} catch (\Exception $ex) { + $db->rollback(); + return errjson('操作失败:' . $ex->getMessage()); +} +``` + + +## 移动端API接口 + +### 移动端接口目录定义 +- 每个移动端均指定统一目录实现API接口 + 例如: /web/ambap/ + 一般在前端jsnurl中设置。 + +### 前端函数调用方法 +``` +await this.callfunc({ + func: 'main.index_init', // API函数名,格式:模块.方法 + data: { // 要发送的数据 + id: 123 + }, +}); +``` + +### 后端API接口开发 +- 在/web/ambap/建立 main.php文件 +- 在main.php文件中建立 json_index_init() 静态函数 +- 示例代码:/web/ambap/main.php 文件 +``` +getint('id'); + $csql = new \ciy\sql('ap_art_post'); + $csql->where('id', $id); + $artrow = $db->getone($csql); + if (!is_array($artrow)) + return errjson('文章不存在' . $id); + $ret['data'] = $artrow; + return succjson($ret); + } +} +``` + +## PC端 增删改查完整示例 + +本章节通过一个完整的示例演示如何开发增删改查功能。 + +前端页面参考:/web/admin/demo/normal.html +后端页面参考:/web/admin/demo/normal.php +后端代码如下: + +#### 查询列表接口 +```php +namespace web\admin\demo; + +class normal { + /** + * 查询条件构建(私有方法) + */ + static function setwhere($db, $post, $rsuser) { + $query = $post->get('query', array()); + $csql = new \ciy\sql('demo_normal'); + + // 下拉筛选 + $liid = objint($query, 'liid'); + if ($liid > 0) + $csql->where('auditstatus', $liid); + + // 文本模糊查询(关联字典表) + $val = objstr($query, 'audituser'); + if (!empty($val)) { + $csqlt = new \ciy\sql('zc_cata'); + $csqlt->where('cbid in (select id from zc_cata where cbid=0 and codeid=\'audituser\')'); + $csqlt->where('name like', $val); + $trow = $db->getone($csqlt); + if (is_array($trow)) { + $csql->where('audituser', $trow['codeid']); + $query['audituser'] = $trow['name']; + } else { + $csql->where('audituser=0'); + } + } + + // 日期范围查询。无需判断,objstr返回空字符串则where自动跳过。 + $csql->wheredaterange('audittimes', objstr($query, 'audittimes')); + + // 文本模糊查询。无需判断,objstr返回空字符串则where自动跳过。 + $csql->where('auditmsg like', objstr($query, 'auditmsg')); + $csql->where('name like', objstr($query, 'name')); + + // 关联表查询 + $val = objstr($query, 'menuid'); + if (!empty($val)) { + $csqlt = new \ciy\sql('zc_menu'); + $csqlt->where('name like', $val); + $trow = $db->getone($csqlt); + if (is_array($trow)) { + $csql->where('menuid', $trow['id']); + $query['menuid'] = $trow['name']; + } else { + $csql->where('menuid=0'); + } + } + + // 单选筛选 + $csql->where('isopen', objstr($query, 'isopen')); + + // 多选筛选(存储格式:,1,2,) + $csql->where('mauditstatus like', ',' . objstr($query, 'mauditstatus') . ','); + + // 数值范围查询(带倍数转换) + $csql->wherenumrange('ton', objstr($query, 'ton_1'), objstr($query, 'ton_2'), 1000000); + + // 排序 + $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, $rsuser); + + // 排除大字段内容字段 + $csql->column('!content,md', $db->getraw('show full fields from demo_normal')); + + // 分页 + $pageno = $post->getint('pageno', 1); + $pagecount = $post->getint('pagecount', 10); + $csql->limit($pageno, $pagecount); + + // 查询数据 + $mainrowcount = $post->getint('count'); + $mrows = $db->get($csql, $mainrowcount); + if ($mrows === false) + return errjson($db->error); + + $ret['searchwhere'] = $where; + $ret['pageno'] = $pageno; + $ret['pagecount'] = $pagecount; + $ret['count'] = $mainrowcount; + $ret['list'] = $mrows; + + // 获取字段信息(用于显示配置,字段备注[c]前边有小写逗号,则代表前端不显示该字段) + if ($post->getbool('field')) { + $field = array(); + $fshow = $db->getfield($field, 'demo_normal'); + 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'] = true; + $input = array(); + $input[] = array('type' => 'input', 'form' => 'audituser', 'name' => '审核人', 'prop' => ' style="width:8em;"'); + $input[] = array('type' => 'daterange', 'form' => 'audittimes', 'name' => '审核时间'); + $input[] = array('type' => 'input', 'form' => 'auditmsg', 'name' => '审核理由', 'prop' => ' style="width:8em;"'); + $input[] = array('type' => 'input', 'form' => 'name', 'name' => '默认标题', 'prop' => ' style="width:8em;"'); + $input[] = array('type' => 'input', 'form' => 'menuid', 'name' => '所属菜单', 'prop' => ' style="width:8em;"'); + $input[] = array('type' => 'select', 'form' => 'isopen', 'name' => '是否开启', 'all' => '全部', 'select' => '开启.关闭'); + $input[] = array('type' => 'select', 'form' => 'mauditstatus', 'name' => '多选状态', 'all' => '全部', 'select' => 'auditstatus'); + $input[] = array('type' => 'num', 'form' => 'ton', 'name' => '吨位', 'prop' => ' style="width:4em;"'); + $ret['searchinput'] = $input; + + // 加载全量关联数据 + $csql = (new \ciy\sql('zc_depart'))->column('id,name,upid'); + $ret['zc_depart'] = $db->get($csql); + } + + // 每页增量关联数据(用于表格显示) + $ret['zc_menu'] = getrelation($db, $mrows, 'zc_menu', 'menuid'); + + return succjson($ret); + } +} +``` + +#### 获取数据接口 +```php + /** + * 获取单条数据(用于编辑/查看) + */ + public static function json_getdata() { + global $db; + $rsuser = verifyfast(); + $post = new \ciy\post(); + $id = $post->getint('id'); + $act = $post->get('act'); + + $mrow = array(); + if ($id > 0) { + $csql = new \ciy\sql('demo_normal'); + $csql->where('id', $id); + $mrow = $db->getone($csql); + if (!is_array($mrow)) + return errjson('数据不存在'); + + // 根据操作类型加载该条关联数据 + if ($act == 'view' || $act == 'review') { + $csql = (new \ciy\sql('zc_menu'))->column('id,name'); + $csql->where('id', $mrow['menuid']); + $ret['zc_menu'] = $db->get($csql); + } + } + + $ret['data'] = $mrow; + + // 编辑时加载所有关联数据 + if ($act == 'edit') { + $csql = (new \ciy\sql('zc_menu'))->column('id,name'); + $ret['zc_menu'] = $db->get($csql); + } + + return succjson($ret); + } +``` + +#### 新增/更新接口 +```php + /** + * 新增/更新数据 + */ + public static function json_update() { + global $db; + $rsuser = verifyfast(); + + // 权限检查。权限定义在菜单表zc_menu中 + // if (nopower($db, $rsuser['id'], 'pxxxu')) + // return errjson('您未被授权操作'); + + $post = new \ciy\post(); + + // 获取参数 + $id = $post->getint('id'); + $name = $post->get('name'); + $menuid = $post->getint('menuid'); + $filesize = $post->getint('filesize'); + $content = $post->get('content'); + // ... 其他字段 + + // 参数验证 + if (empty($name)) + return errjson('请填写默认标题'); + + $datarow = null; + if ($id > 0) { + // 更新模式:获取原数据 + $csql = new \ciy\sql('demo_normal'); + $csql->where('id', $id); + $datarow = $db->getone($csql); + if (!is_array($datarow)) + return errjson('数据不存在'); + } + + try { + $db->begin(); + + // 构建更新数据 + $updata = array(); + $updata['name'] = $name; + $updata['menuid'] = $menuid; + $updata['filesize'] = $filesize; + $updata['content'] = $content; + // ... 其他字段 + + $csql = new \ciy\sql('demo_normal'); + + if ($id > 0) { + // 更新 + $csql->where('id', $id); + if ($db->update($csql, $updata) === false) + throw new \Exception('更新失败:' . $db->error); + } else { + // 新增 + $updata['auditstatus'] = 0; + $updata['audituser'] = 0; + $updata['audittimes'] = 0; + $updata['auditmsg'] = ''; + $updata['addtimes'] = tostamp(); + if ($db->insert($csql, $updata) === false) + throw new \Exception('新增失败:' . $db->error); + $id = $db->insert_id(); + } + + $updata['id'] = $id; + + // 记录日志(可选) + // savelogdb($db, $rsuser['id'], 'demo_normal', $datarow, $updata); + + $db->commit(); + } catch (\Exception $ex) { + $db->rollback(); + savelogfile('err_db', $ex->getMessage()); + return errjson($ex->getMessage()); + } + + // 返回更新后的数据 + $ret['data'] = $updata; + $ret['zc_menu'] = getrelation($db, [$updata], 'zc_menu', 'menuid'); + return succjson($ret); + } +``` + +#### 删除接口 +```php + /** + * 删除数据 + */ + public static function json_del() { + global $db; + $rsuser = verifyfast(); + + // 权限检查(可选) + // if (nopower($db, $rsuser['id'], 'pxxxd')) + // return errjson('您未被授权操作'); + + $post = new \ciy\post(); + $ids = $post->get('ids'); + + if (empty($ids)) + return errjson('请选择至少一条'); + + // 查询要删除的数据 + $csql = new \ciy\sql('demo_normal'); + $csql->where('id in', $ids); + $mrows = $db->get($csql); + + $vids = array(); + try { + $db->begin(); + + foreach ($mrows as $mrow) { + //可针对$mrow做是否可删除判断,不可删除用continue跳过 + $delid = $mrow['id']; + + // 检查提示有关联数据(可选) + // delcheck($db, $delid, 'tablexx', 'xxid', '关联数据'); + + // 直接删除关联数据(可选) + // delall($db, $delid, 'tablexx', 'xxid', '关联数据'); + + // 删除主数据 + delme($db, $delid, 'demo_normal'); + + // 记录日志 + savelogdb($db, $rsuser['id'], 'demo_normal', $mrow, null); + + $vids[] = $delid; + } + + $db->commit(); + } catch (\Exception $ex) { + $db->rollback(); + savelogfile('err_db', $ex->getMessage()); + return errjson($ex->getMessage()); + } + + $ret['ids'] = $vids; + return succjson($ret); + } +``` + +#### 审核接口(自定义业务) +```php + /** + * 审核接口 + */ + public static function json_audit() { + global $db; + $rsuser = verifyfast(); + + // 权限检查(可选) + // if (nopower($db, $rsuser['id'], 'p a')) + // return errjson('您未被授权操作'); + + $post = new \ciy\post(); + $ids = $post->get('ids'); + + if (empty($ids)) + return errjson('请选择至少一条'); + + $auditstatus = $post->getint('auditstatus'); + $auditmsg = $post->get('auditmsg'); + + // 驳回时必须填写原因 + if ($auditstatus == 90 && empty($auditmsg)) + return errjson('请填写驳回原因'); + + // 查询数据 + $csql = new \ciy\sql('demo_normal'); + $csql->where('id in', $ids); + $mrows = $db->get($csql); + + $ids = array(); + try { + $db->begin(); + + foreach ($mrows as $mrow) { + if ($auditstatus == 100) { + // 审核通过时的额外处理 + } + + // 更新审核状态 + $updata = array(); + $updata['auditstatus'] = $auditstatus; + $updata['audituser'] = $rsuser['id']; + $updata['audittimes'] = tostamp(); + $updata['auditmsg'] = $auditmsg; + + $csql = new \ciy\sql('demo_normal'); + $csql->where('id', $mrow['id']); + if ($db->update($csql, $updata) === false) + throw new \Exception('审核失败:' . $db->error); + + $ids[] = $mrow['id']; + } + + $db->commit(); + } catch (\Exception $ex) { + $db->rollback(); + savelogfile('err_db', $ex->getMessage()); + return errjson($ex->getMessage()); + } + + $ret['data'] = $updata; + $ret['ids'] = $ids; + return succjson($ret); + } +``` + +## 核心类库详解 + +### 1. 用户认证系统 (common.php) + +#### verifyfast() - 快速用户验证 +```php +$rsuser = verifyfast(); +``` +- 自动验证用户登录状态 +- 未登录时自动返回JSON错误响应,中断后面代码执行 +- 超时自动续期 + +#### verifyuser() - 用户验证 +```php +$rsuser = verifyuser(); +``` +- 验证用户登录状态 +- 返回用户信息数组或null +- 需要手动处理未登录情况 + +#### nopower() - 权限验证 +```php +if (nopower($db, $userid, 'x1ssh')) + return errjson('您未被授权操作'); +``` +- 检查用户是否有指定权限 +- 权限格式:`{模块}{操作}`,如 `x1ssh` 表示SSH模块访问权限 +- 超级管理员权限:`.*.` +- 权限是字符串存储,多个权限两边都有句点。例如 .x1ssh.v4del. + +### 2. 配置管理 (common.php) + +#### getconfig() - 获取配置 +```php +$apiid = getconfig($db, 'apiid', ''); +``` +- 从 `zc_config` 表读取配置 +- 支持默认值 + +#### setconfig() - 设置配置 +```php +setconfig($db, 'apiid', 'newvalue'); +``` +- 更新配置到数据库 +- 配置不存在时自动创建 + +### 3. 日志系统 (common.php) + +#### savelog() - 保存日志 +```php +savelog($db, $userid, 'LOGIN', '用户登录', false); +``` +- 记录操作日志到 `zc_log` 表 +- 支持记录完整的请求信息 + +#### savelogdb() - 数据库变更日志 +```php +savelogdb($db, $userid, 'UPDATE', $oldrow, $newrow); +``` +- 自动记录数据变更 +- 对比新旧数据,只记录变更字段 +- 添加、修改、删除 + +--- + +## 数据库操作 + +### 1. 数据库连接 +```php +global $db; +// $db 自动从配置文件中读取数据库配置并连接 +``` + +### 2. SQL构建类 (sql.php) + +#### 基本查询 +```php +$csql = new \ciy\sql('table_name'); +$csql->column('id,name,addtimes'); +$csql->where('status', 1); +$csql->order('addtimes desc'); +$rows = $db->get($csql); +``` + +#### 分页查询 +```php +$csql = new \ciy\sql('table_name'); +$rowcount = 0; +$rows = $db->get($csql, $rowcount); // 返回总数据条数 +``` + +#### 单条查询 +```php +$csql = new \ciy\sql('table_name'); +$csql->where('id', $id); +$mrow = $db->getone($csql); //可能返回Array有数据、Null无数据、false数据库错误 +if(!is_array($mrow)) + return errjson('没找到数据'); +``` + +#### 查询单个字段 +```php +$csql = new \ciy\sql('table_name'); +$csql->column('name'); +$csql->where('id', $id); +$name = $db->get1($csql); +``` + +#### 统计数据 +```php +$csql = new \ciy\sql('table_name'); +$csql->column('count(*)'); +$csql->where('status', 1); +$count = $db->get1($csql); +``` + + +#### 条件查询 +```php +// LIKE查询 +$csql->where('name like', 'keyword'); + +// IN查询 +$csql->where('id in', '1,2,3'); + +// 范围查询 +$csql->where('price>=', 100); +$csql->where('price<=', 500); + +// 日期范围 +$csql->wheredaterange('addtimes', '2024-01-01~2024-12-31', 'date'); +$csql->wheredaterange('addtimes', '-7~7', 'day'); //查询上周至下周的近两周数据 +$csql->wheredaterange('addtimes', '2024-01', 'month'); //查询2024年1月,整月数据 + +// 数值范围 +$csql->wherenumrange('price', '', '20', 100); //查询小于20元的数据,数据表实际按分存储,20元=2000,100为倍数,默认1。 +$csql->wherenumber('tempc', '38~', 1000); //查询大于38度的数据,原始数据,例如38.23°,数据库实际存储整数:38230 +$csql->wherenumber('status', '>=10'); //查询大于等于10的数据。 + +// 多参数符合查询 +$csql->where('(name like ? or prodname like ?) and status=?', ['名字', '产品', 10]); + +// 自由查询(非必要不使用) +$csql->where('id=3'); + +// 添加sql末尾数据 +$csql->selecttail('group by xxx'); + +// 选项卡筛选(状态类型筛选) +$liid = objint($query, 'liid'); +if ($liid === 1) + $csql->where('xxx>', 0); // liid=1选项卡 +else if ($liid === 2) + $csql->where('xxstatus', 10);// liid=2选项卡 +else + $csql->where('exptimes>', tostamp());// 默认选项卡 + +if ($liid > 0) + $csql->where('xxxtype', $liid); // 字典项选项卡 + +// 时间范围筛选(未到期/已到期) +if ($liid === 1) + $csql->where('expiretimes>', tostamp()); // 未到期 +else if ($liid === 2) + $csql->where('expiretimes<=', tostamp()); // 已到期 + +// 按关联表名称查询 +$topicid = objstr($query, 'topicid'); +if (!empty($topicid)) { + $csqlt = new \ciy\sql('am_topicbase'); + $csqlt->where('name like', $topicid); + $trow = $db->getone($csqlt); + if (is_array($trow)) { + $csql->where('topicid', $trow['id']); + $query['topicid'] = $trow['name']; + } else { + $csql->where('topicid=0'); + } +} +``` + +### 3. 数据操作 + +#### 插入数据 +```php +$updata = array( + 'name' => '测试', + 'status' => 1, + 'addtimes' => tostamp() +); +$csql = new \ciy\sql('table_name'); +$db->insert($csql, $updata); +$newid = $db->insert_id(); +``` + +#### 更新数据 +```php +$updata = array( + 'name' => '更新后的名称', + 'status' => 2 +); +$csql = new \ciy\sql('table_name'); +$csql->where('id', $id); +$db->update($csql, $updata); +``` + +#### 删除数据 +```php +$csql = new \ciy\sql('table_name'); +$csql->where('id', $id); +$db->delete($csql); // 直接删除 +$db->delete($csql, true); // 删除前备份到table_name_bak表 +``` + +#### 删除数据(批量) +```php +public static function json_del() { + global $db; + $rsuser = verifyfast(); + $post = new \ciy\post(); + $ids = $post->get('ids'); + if (empty($ids)) + return errjson('请选择至少一条'); + $csql = new \ciy\sql('table_name'); + $csql->where('id in', $ids); + $mrows = $db->get($csql); + $vids = array(); + try { + $db->begin(); + foreach ($mrows as $mrow) { + $delid = $mrow['id']; + //delcheck($db, $delid, 'tablexx', 'xxid', '管理员'); //发现该表有相关数据不允许删除 + //delall($db, $delid, 'tablexx', 'xxid', '运动员'); //该表有相关数据一起直接删除 + delme($db, $delid, 'table_name'); + savelogdb($db, $rsuser['id'], 'table_name', $mrow, null); + $vids[] = $delid; + } + $db->commit(); + } catch (\Exception $ex) { + $db->rollback(); + savelogfile('err_db', $ex->getMessage()); + return errjson($ex->getMessage()); + } + $ret['ids'] = $vids; + return succjson($ret); +} +``` + +**前端调用**: +```javascript +批量删除 +``` + +**要点**: +- 使用 `ciyfn.select_callfunc()` 框架方法处理批量选择和确认 +- 后端返回删除的ID数组 `$ret['ids']` +- 前端通过 `table.delline(json)` 自动删除表格中的对应行 +- 批量删除按钮使用 `dag` class(红色警告样式) + +#### 统一的事务处理 +```php +try { + $db->begin(); + // 多个数据库操作 + $db->insert($csql1, $data1); + $db->update($csql2, $data2); + $db->commit(); +} catch (\Exception $ex) { + $db->rollback(); + return errjson('操作失败:' . $ex->getMessage()); +} +return succjson(); +``` + +--- + +## 用户认证与权限 + +### 登录流程 (login.php) +框架已实现,不定制新需求,无需生成新代码。 + + +**数据字典缓存机制** +登录时会一次性返回所有字典数据到前端 + +**前端使用字典数据** + +```javascript +// 使用字典数据 +var statusList = ciyfn.getstorage('cata_auditstatus'); +``` + +### Token机制 + +#### Token配置 (common.php) +```php +$_token['type'] = 'cookie'; // 存储方式:cookie/localstorage。移动端为兼容微信小程序,需使用localstorage +$_token['swapsec'] = 3600; // 更换Token时间(秒) +$_token['expsec'] = 86400 * 30; // 过期退出时间(秒) +$_token['field'] = 'ciyadm'; // Cookie字段名 +$_token['salt'] = 'bka02$59gG'; // 加密盐值 +``` + +#### Token验证流程 +1. 客户端发送请求时携带Token +2. 服务端解密Token获取用户ID +3. 从 `zc_online` 表验证会话有效性 +4. 超时自动续期,返回新Token + +### 权限控制 + +#### 权限格式 +- 格式:`{模块}{操作}` +- 示例:`x1ssh` 表示SSH模块访问权限 +- 超级管理员:`.*.` + +#### 权限验证 +```php +// 检查用户是否有权限 +if (nopower($db, $rsuser['id'], 'x1ssh')) + return errjson('您未被授权操作'); + +// 前端权限检查 +if (ciyfn.nopower(me.power, 'x1ssh')) + continue; // 无权限 +``` + + +## API开发规范 + +### PC端接口命名规范 +- 所有AJAX接口方法名以 `json_` 开头 +- 方法名采用小写+下划线格式 +- 示例:`json_init`, `json_update`, `json_del` + +### 移动端接口命名规范 +- API方法名应与前端页面文件名对应,便于识别和维护。格式建议:`json_{vue页面名}_{操作}` + - 示例:`aimap.php` 文件中的函数 `json_index_init` 对应 `/pages/aimap/index.vue`,前端调用 `func: 'aimap.index_init'` + - 示例:`json_aimap_msglst_init` 对应 `/pages/aimap/msglst.vue`,前端调用 `func: 'aimap.msglst_init'` + +- **用户认证接口复用**:注册、登录、找回密码等通用认证接口已内置,无需重复开发,直接复用框架提供的 `ciy-auth` 组件接口 +- **首次请求优化**:页面首次加载使用 `init` 接口,通过 `once` 标志位一次性返回所有初始化数据,减少请求次数 + +### 接口参数处理 +```php +public static function json_userlist() { + // 1. 验证用户登录 + $rsuser = verifyfast(); + + // 2. 获取参数 + $post = new \ciy\post(); + $pageno = $post->getint('pageno', 1); + $pagecount = $post->getint('pagecount', 20); + $keyword = $post->get('keyword'); + + // 3. 业务逻辑处理 + $csql = new \ciy\sql('zc_admin'); + if (!empty($keyword)) //通常无需判断,where子句会判断$keyword是否为空 + $csql->where('name like', $keyword); + $csql->order('addtimes desc'); + $rowcount = -1; //rowcount=-1 则需要count(*)获得数据统计,>-1则跳过统计查询,避免翻页时频繁查询统计数据。 + $rows = $db->get($csql, $rowcount); + + // 4. 返回数据 + $ret['rows'] = $rows; + $ret['rowcount'] = $rowcount; + return succjson($ret); +} +``` + +### 首次请求优化 + +```php +/** + * 页面初始化接口 + * 通过once标志位一次性返回所有初始化数据 + */ +public static function json_aimap_index_init() { + global $db; + $rsuser = verifyfast(); + $post = new \ciy\post(); + if ($post->getbool('once')) { //仅页面首次加载,翻页请求不再执行 + $ret['once'] = true; + $csql = new \ciy\sql('table_name'); + $ret['tabxxx'] = $db->get($csql); + } + $csql = new \ciy\sql('table_xxx'); + $csql->order('addtimes desc'); + $csql->limit($post->getint('pageno', 1), 20); + $ret['list'] = $db->get($csql); + return succjson($ret); +} +``` + +### 错误处理 +```php +// 参数验证 +if (empty($id)) + return errjson('ID不能为空'); + +// 数据验证 +if ($rsuser === null) + return errjson($db->error); + +// 数据是否存在 +$mrow = $db->getone(xxx); +if (!is_array($mrow)) //mrow有可能返回null或false,因此需使用is_array() + return errjson($db->error); + +// 权限验证 +if (nopower($db, $rsuser['id'], 'x1user')) + return errjson('您未被授权操作'); + +``` + +## 最佳实践 + +### 数据库操作优化 + +#### 批量操作 +```php +// 使用事务进行批量操作 +$db->begin(); +try { + foreach ($datalist as $data) { + $db->insert($csql, $data); + } + $db->commit(); +} catch (\Exception $ex) { + $db->rollback(); +} +``` + +#### 避免N+1查询 +```php +// 使用关联查询,按需查询可视化需要的数据 +// 将$rows中userid数据去重后,查询 select id,name from table_name where id in (userid1,userid2,...),返回{id,name}数组 +$ret['xxtable'] = getrelation($db, $rows, 'table_name', 'userid', 'id,name'); +``` + +### 安全最佳实践 + +#### SQL注入防护 +```php +// ✅ 使用参数化查询 +$csql->where('id', $id); +$db->get($csql); + +// ❌ 避免字符串拼接 +$sql = "select * from table where id = " . $id; +``` + +#### XSS防护 +```php +// 使用post类自动过滤 +$post = new \ciy\post(); +$name = $post->get('name'); // 自动strip_tags + +// 需要HTML内容时 +$html = $post->get('content', '', 'html'); // 安全过滤HTML +``` + +#### CSRF防护 +```php +// 验证请求来源 +if (!isset($_SERVER['HTTP_REFERER'])) + return errjson('非法请求'); +``` + +### 性能优化 + +#### 分页优化 +```php +// 大数据量分页 +$rowcount = -1; // 只有赋值-1时,才查询总数,其他数值则不查询总数 +$csql->column('*'); +$csql->limit($pageno, $pagecount); +$rows = $db->get($csql, $rowcount); +``` + +### 代码复用 + +#### 公共函数封装 +```php +// 在cwebcomon.php中定义公共函数,只有1处调用时,不要定义到公共函数。 +namespace web; + +class cwebcomon { + function getuserlist($db, $keyword = '') { + $csql = new \ciy\sql('zc_admin'); + if (!empty($keyword)) + $csql->where('name like', $keyword); + $csql->order('addtimes desc'); + return $db->get($csql); + } +} + +``` + +#### 公共类库使用 +```php +$rows = \web\cwebcomon::getuserlist($db, $keyword); +``` + +#### 日期工具 +``` +\ciy\sql::daterange('2024-01-01~2024-12-31', 'date'); //返回时间戳,与sql的wheredaterange函数机制一致 +``` + + +## 数据字典设计规范 + +参考 ciyon-数据字典设计.md + + +## 附录 + +### 数据库表结构 + +#### 已存在的核心表 +- `zc_admin` - 管理员表 +- `zc_role` - 角色表 +- `zc_depart` - 组织机构表 +- `zc_online` - 在线会话表 +- `zc_cata` - 数据字典表 +- `zc_menu` - 菜单表 +- `zc_mnufav` - 收藏菜单表 +- `zc_log` - 操作日志表 +- `zc_lug` - 登录日志表 +- `zc_config` - 配置表 +- `zc_autotask` - 自动任务表 +- `zc_mq` - 消息队列表 **需DB事务级一致,可用此队列过渡** + +### comm.php 公共函数库详解 + +comm.php是Ciyon框架的核心公共函数库,提供了丰富的工具函数,涵盖日期处理、加密解密、字符串处理、数据库操作、文件操作等多个方面。 + +#### 日期时间函数 + +**tostamp() - 转换为时间戳** +```php +// 字符串转时间戳 +$timestamp = tostamp('2024-03-14 10:30:00'); + +// 数字转时间戳 +$timestamp = tostamp(1710385800); + +// 当前时间 +$timestamp = tostamp('now'); +``` + +**todate() - 时间戳转字符串** +```php +// 默认格式:Y-m-d H:i +$date = todate(1710385800); // '2024-03-14 10:30' + +// 指定格式 +$date = todate(1710385800, 'd'); // '2024-03-14' +$date = todate(1710385800, 's'); // '2024-03-14 10:30:00' +$date = todate(1710385800, 'm'); // '2024-03' +$date = todate(1710385800, 'H'); // '2024-03-14 10' +$date = todate(1710385800, 'hi'); // '10:30' +``` + +**fixmonth() - 月份加减修正** +```php +// 修正PHP月份加减的错误(如1月31日加1个月应为2月28/29日) +$newdate = fixmonth(1, strtotime('2024-01-31')); // 返回2月最后一天 +``` + +**totimepoint() - 数字时钟转字符串** +```php +// 将秒数转换为 HH:MM:SS 格式 范围为1-3600,0代表未设置 +$time = totimepoint(1801); // '12:00' +$time = totimepoint(1, true); // '00:00:00' + +``` + +**tostamp() - 字符串转时间戳** +```php +// 多种格式支持 +$timestamp = tostamp('2024-03-14'); +$timestamp = tostamp('2024-03-14 10:30:00'); +$timestamp = tostamp('1710385800'); +$timestamp = tostamp('now'); +``` + +#### 数据类型转换 + +**tostr() - 转字符串** +```php +$str = tostr($value, ''); // 默认返回空字符串 +``` + +**toint() - 转整数** +```php +$int = toint($value); // 默认返回0 +$int = toint($value, -1); // 默认返回-1 +``` + +**tofloat() - 转浮点数** +```php +$float = tofloat($value); // 默认返回0.0 +$float = tofloat($value, 0.0); // 默认返回0.0 +``` + +#### 加密解密函数 + +**encrypt() - 字符串加解密** +```php +// 加密 +$encrypted = encrypt('原始数据', 'E', '密钥'); + +// 解密 +$decrypted = encrypt($encrypted, 'D', '密钥'); + +// 示例 +$key = 'bka02$59gG'; // 每个项目应该使用不同的密钥 +$encrypted = encrypt('Hello World', 'E', $key); +$decrypted = encrypt($encrypted, 'D', $key); // 返回 'Hello World' +``` + +**enid()/deid() - ID数字加解密** +```php +// 加密ID(防爬虫) +$encrypted_id = enid(12345); // 返回如 '872435' + +// 解密ID +$decrypted_id = deid(872435); // 返回 12345 + +// 注意:加密后的ID看起来像普通数字,但包含校验位 +``` + +**sha256()/sha512() - 哈希函数** +```php +// SHA256哈希 +$hash = sha256('password'); // 返回64位十六进制字符串 + +// SHA512哈希 +$hash = sha512('password'); // 返回128位十六进制字符串 +``` + +**conv33_10()/conv10_33() - 33进制转换** +```php +// 33进制转10进制 +$decimal = conv33_10('abc123'); + +// 10进制转33进制 +$base33 = conv10_33(123456); +``` + +#### 字符串处理 + +**gb_substr() - 中文字符串截取** +```php +// 截取中文字符串(中文字符算2个位置) +$text = gb_substr('中华人民共和国', 10); // '中华...' +$text = gb_substr('中华人民共和国', 9); // '中华...' +``` + +**gb_strlen() - 中文字符串长度** +```php +// 计算中文字符串长度(中文字符算2个) +$len = gb_strlen('中华人民共和国'); // 返回 28 +``` + +**gb_haschinese() - 检测中文字符** +```php +// 检测字符串是否包含中文 +$has = gb_haschinese('Hello世界'); // 返回 true +``` + +**getstrparam()/setstrparam() - 简化数据保存** +```php +// 解析简化格式数据 +$data = getstrparam('name=张三|age=18|city=北京'); +$data = getstrparam('name=张三&age=18&city=北京', '&'); +// 返回:['name' => '张三', 'age' => '18', 'city' => '北京'] + +// 生成简化格式数据 +$str = setstrparam(['name' => '李四', 'age' => 20, 'city' => '上海']); +// 返回:'name=李四|age=20|city=上海' +$str = setstrparam(['name' => '李四', 'age' => 20, 'city' => '上海'], '&'); +// 返回:'name=李四&age=20&city=上海' +``` + +**startwith()/endwith() - 首尾匹配** +```php +// 检查字符串开头 +$starts = startwith('Hello World', 'Hello'); // 返回 true + +// 检查字符串结尾 +$ends = endwith('Hello World', 'World'); // 返回 true +``` + +#### 数据验证 + +**ismobile() - 手机号验证** +```php +// 验证中国大陆手机号 +$valid = ismobile('13800138000'); // 返回 true +$valid = ismobile('12345'); // 返回 false +``` + +**idcard() - 身份证验证** +```php +// 验证身份证号并提取信息 +$info = idcard('330106199001011234'); +// 返回:[ +// 'code' => '330106199001011234', +// 'birth' => '1990-01-01', +// 'sex' => 1, // 1=男, 2=女 +// 'area' => '330106' +// ] + +// 验证失败返回错误信息 +$info = idcard('123456'); // 返回 '身份证长度错误' +``` + +**iduscc() - 统一社会信用代码验证** +```php +// 验证统一社会信用代码 +$info = iduscc('91330100MA2XXX001X'); +// 返回:['code' => '91330100MA2XXX001X', 'area' => '33', 'pn' => '91'] +``` + +**locinzone() - 经纬度围栏检测** +```php +// 检测经纬度是否在围栏内 +$fence = '30.434272 120.274938,30.433977 120.277270,30.432403 120.277957'; +$inside = locinzone($fence, 30.433, 120.275); // 返回 true +``` + +**locdistance() - 计算距离** +```php +// 计算两个经纬度之间的距离(毫米) +$distance = locdistance(30.25, 120.15, 30.26, 120.16); +// 返回:距离(毫米) +``` + +#### 字典数据函数 + +**ccode() - 代码转名称** +```php +// 单个代码转名称 +$arr = [ + ['id' => 1, 'name' => '启用'], + ['id' => 2, 'name' => '禁用'] +]; +$name = ccode($arr, 1, 'name', '--'); // 返回 '启用' + +// 返回对象 +$obj = ccode($arr, 1, '_obj'); // 返回 ['id' => 1, 'name' => '启用'] +``` + +**mcode() - 多级代码转名称** +```php +// 多级代码转名称数组(如地区、部门) +$arr = [ + ['id' => 1, 'name' => '浙江', 'upid' => 0], + ['id' => 2, 'name' => '杭州', 'upid' => 1], + ['id' => 3, 'name' => '西湖', 'upid' => 2] +]; +$names = mcode($arr, 3, 'name'); // 返回 ['浙江', '杭州', '西湖'] +``` + +**scode() - 多个代码转名称数组** +```php +// 多个代码转名称数组 +$arr = [['id' => 1, 'name' => 'A'], ['id' => 2, 'name' => 'B']]; +$names = scode($arr, '1,2', 'name'); // 返回 ['A', 'B'] +``` + +**dcode() - 名称转代码** +```php +// 名称转代码 +$arr = [['id' => 1, 'name' => '启用'], ['id' => 2, 'name' => '禁用']]; +$id = dcode($arr, '启用', 'id'); // 返回 1 +``` + +**bcode() - 位标志转名称** +```php +// 位标志转名称数组(用于多选) +$arr = [ + ['id' => 1, 'name' => 'A'], + ['id' => 2, 'name' => 'B'], + ['id' => 4, 'name' => 'C'] +]; +$names = bcode($arr, 5); // 5 = 1+4,返回 ['A', 'C'] +``` + +#### 文件操作 + +**dirmake() - 创建目录** +```php +// 创建多层目录 +$result = dirmake('/path/to/dir', 0777); +``` + +**filedel() - 删除文件** +```php +// 静默删除文件(不报错) +filedel('/path/to/file.txt'); +``` + +**filecopy() - 复制文件** +```php +// 静默复制文件 +filecopy('/source/file.txt', '/dest/file.txt'); +``` + +**filesave() - 保存文件** +```php +// 保存文本到文件 +$result = filesave('/path/to/file.txt', '文件内容'); +``` + +**fileload() - 读取文件** +```php +// 读取文本文件 +$content = fileload('/path/to/file.txt'); +``` + +**storsave() - 保存到存储目录** +```php +// 保存到存储目录(支持日期变量) +storsave('{Y}/{m}{d}/data.txt', '内容'); +// 保存到:/web/ud/2024/0314/data.txt +``` + +**file_down() - 下载文件** +```php +// 下载远程文件到本地 +$path = file_down( + 'https://example.com/image.jpg', // 远程URL + '/ud/images/', // 保存路径 + '', // 文件名(空则自动生成) + 60, // 超时时间(秒) + '.jpg' // 默认扩展名 +); +``` + +**file_ext() - 获取文件扩展名** +```php +// 获取文件扩展名 +$ext = file_ext('/path/to/file.txt'); // 返回 'txt' +``` + +**file_stor() - 获取文件的云存储URL** +```php +// 获取文件访问URL(支持云存储) +$url = file_stor('/2024/03/14/image.jpg'); +// 返回完整的访问URL +``` + +**注意**:前端显示附件时,必须使用 `ciyfn.file_stor()` 将数据库存储的相对路径转换为云存储绝对URL。前端调用时: +```javascript +var imgurl = ciyfn.file_stor('/2024/03/14/image.jpg'); +// 返回完整的云存储URL(原始文件) +var thumburl = ciyfn.file_stor('/2024/03/14/image.jpg', 'thumb'); +// 返回缩略图云存储URL(图片资源用) +``` + + +#### 配置和输入 + +**webini() - 读取配置文件** +```php +// 读取web.ini配置 +$config = webini('db'); +// 返回:['host' => 'localhost', 'port' => '3306', ...] + +$config = webini('s3'); +// 返回:['url' => 'https://...', ...] +``` + +**getstr()/getint()/post()/request()/cookie() - 获取输入** +```php +// 获取GET参数 +$name = getstr('name', '', 'text'); // 第三个参数:text(过滤HTML)、all(不过滤) +$age = getint('age', 0); + +// 获取POST参数 +$name = post('name', '', 'text'); + +// 获取REQUEST参数 +$name = request('name', '', 'text'); + +// 获取Cookie +$name = cookie('name', '', 'text'); +``` + +**getip() - 获取真实IP** +```php +// 获取客户端真实IP(支持CDN、反向代理) +$ip = getip(); // 返回'80.15.128.210' +``` + +#### 日志和调试 + +**savelogfile() - 保存日志到文件** +```php +// 保存日志到文件 +savelogfile('error', '错误信息'); +// 保存到:/web/log/error.log + +// 包含请求信息 +savelogfile('api', 'API调用', true); +``` + +**logdbstr() - 格式化数据变更** +```php +// 格式化数据变更日志 +$oldrow = ['id' => 1, 'name' => '旧名称', 'status' => 1]; +$newrow = ['id' => 1, 'name' => '新名称', 'status' => 2]; +$msg = logdbstr($oldrow, $newrow); +// 返回:'Upd=1_|@|_name=旧名称→新名称_|@|_status=1→2' +``` + +**clog() - 调试输出** +```php +// 调试输出变量 +clog($variable); +clog('Title', $variable); +clog($var1, $var2, $var3); +``` + +#### 杂项工具 + +**randstr() - 生成随机字符串** +```php +// 生成随机字符串 +$str = randstr(10); // 生成10位随机字符串 +$str = randstr(10, 'abcdef123456'); // 使用指定字符集 +``` + +**arrayrand() - 随机抽取数组元素** +```php +// 随机抽取数组元素并删除 +$arr = ['A', 'B', 'C', 'D', 'E']; +$selected = arrayrand($arr, 2); // 返回 ['A', 'C'],原数组变为 ['B', 'D', 'E'] +``` + +**timems() - 获取微秒时间** +```php +// 获取当前微秒数 +$ms = timems(); // 返回如 1710385800123 +``` + +--- + +### 常用函数索引 + +#### 用户相关 +- `verifyfast()` - 快速用户验证 +- `verifyuser()` - 用户验证 +- `nopower()` - 权限验证 + +#### 配置相关 +- `getconfig()` - 获取配置 +- `setconfig()` - 设置配置 + +#### 日志相关 +- `savelog()` - 保存日志 +- `savelogdb()` - 数据库变更日志 + +#### 工具函数 +- `tostamp()` - 转换为时间戳 +- `todate()` - 时间戳转字符串 +- `randstr()` - 生成随机字符串 +- `getip()` - 获取IP地址 + +### api json错误代码 + +| 代码 | 说明 | +|------|------| +| 1 | 成功 | +| 0 | 失败 | +| 2 | 未登录 | +| 3 | 未授权 | +| 9 | 函数未加载 | + +### 开发环境配置 + +#### 数据库配置 (web.ini) +```ini +[db] +host = localhost +port = 3306 +database = c5_ciyon +username = root +password = wkxroot +charset = utf8mb4 +``` + +--- + +## 总结 + +Ciyon后台管理系统是一个功能完善、架构清晰的PHP开发框架。通过本文档,开发者可以快速理解系统的核心架构和开发规范,高效地进行二次开发和功能扩展。 + +**核心优势:** +- 完整的用户认证和权限控制系统 +- 安全的数据库操作层 +- 灵活的模块化设计 +- 完善的错误处理机制 +- 丰富的工具类库 + +*文档版本:1.0* +*技术支持:众产® https://ciy.cn/code* \ No newline at end of file diff --git a/aiskill/ciyon-数据大屏.md b/aiskill/ciyon-数据大屏.md new file mode 100644 index 0000000..aed0488 --- /dev/null +++ b/aiskill/ciyon-数据大屏.md @@ -0,0 +1,1618 @@ +# Ciyon 数据大屏开发指南 + +## 技术架构 + +### 技术栈 +- **前端框架**:ciybigscreen.js(自定义大屏面板框架) +- **数据可视化**:ECharts +- **3D地图**:Cesium +- **后端语言**:PHP(命名空间结构) +- **辅助库**:ciy.js(通用工具库) + +### 目录结构 +``` +web/admin/demo/bs/ +├── index.html # 大屏入口页面 +├── index.php # 后端数据接口 +└── b64/ # 图表组件JS文件 + ├── bank1_c1.js # 银行大屏-中心上部数字卡片 + ├── bank1_c2.js # 银行大屏-中心地图 + ├── bank1_l1.js # 银行大屏-左侧饼图 + ├── farm1_bg_cemap.js # 农场大屏-3D地图背景 + └── ... # 其他组件 +``` + +--- + +## 核心开发模式 + +### bigpanel 面板系统 + +**核心对象**:`ciyclass.bigpanel` + +```javascript +// 创建面板 +var chtpls = {}; +chtpls['bank1'] = new ciyclass.bigpanel({ + name: 'panel_bank1', // 面板唯一标识 + jspath: './b64/', // 组件JS文件路径 + style: 'position:absolute;top:4em;left:5px;right:5px;bottom:20px;', + animation: 'ani1', // 动画效果 + mask: '' // 遮罩层颜色 +}); +``` + +**关键方法**: + +| 方法 | 说明 | 示例 | +|------|------|------| +| `addplot(opn)` | 添加图表组件 | `addplot({jsname: 'bank1_c1', style: '...'})` | +| `run(fsec)` | 启动数据轮询 | `run({'bank_c1': 50})` // 50秒刷新一次 | +| `setbtns(opn)` | 设置关闭按钮 | `setbtns({template: 'close1'})` | +| `resize()` | 窗口大小改变时调用 | 自动调用所有组件的resize方法 | +| `distory()` | 销毁面板 | 清理所有组件和定时器 | + +--- + +### 图表组件开发规范 + +每个图表组件是一个独立的JS文件,必须遵循以下规范: + +**文件命名**:`{面板名}_{位置标识}.js` +- 位置标识:`c1`(中上)、`c2`(中)、`l1`(左上)、`l2`(左中)、`l3`(左下)、`r1`(右上)、`r2`(右中)、`r3`(右下) + +**基本结构**: + +```javascript +function ciy_chart_bank1_c1(opdata) { + var thos = this; + + // 必须定义:指定需要调用的后端接口 + this.func = ['bank_c1']; + + // 组件变量 + this.lastdata = {}; + var chart1 = null; // ECharts实例 + + // 必须实现:数据设置方法 + this.setdata = function (funame, data) { + if (!data) return; + this.lastdata[funame] = data; + + // 更新DOM元素 + $5('[data-num="n1"]', opdata.container).text(data.n1); + + // 或更新ECharts图表 + chart1.setOption({...}); + } + + // 必须实现:响应窗口大小变化 + this.resize = function () { + if (chart1) chart1.resize(); + } + + // 必须实现:清理资源 + this.distory = function () { + if (chart1) chart1.dispose(); + clearInterval(timer); + } + + // 组件初始化:添加DOM结构 + opdata.container.append(` +
+ `); + + // 初始化ECharts + chart1 = echarts.init($5('#chart1', opdata.container)[0], 'dark'); + chart1.setOption(option); +} +``` + +**关键属性**: + +| 属性 | 说明 | 示例 | +|------|------|------| +| `this.func` | 需要调用的后端接口数组 | `['bank_c1', 'bank_c2']` | +| `this.prefunc` | 接口前缀(可选) | `'farm_'` | +| `opdata.container` | 组件容器DOM | 用于添加子元素 | + +--- + +### 后端接口开发规范 + +**PHP类结构**: + +```php + $i, + 'name' => '风控' . $i, + 'value' => rand(100, 300) + ); + } + return succjson($ret); + } +} +``` + +**命名规范**: +- 方法名:`json_{面板名}_{图表名}` +- 返回格式:使用 `succjson($ret)` 统一返回JSON +- 数据结构:简单类型、数组、对象均可 + +--- + +## 数据流机制 + +### 轮询机制 + +```javascript +// 面板启动时设置刷新频率(单位:0.5秒) +chtpls['bank1'].run({ + 'bank_c1': 50, // 每25秒刷新一次 + 'bank_c2': 10, // 每5秒刷新一次 + 'bplant': 50 // 每25秒刷新一次 +}); +``` + +### 数据请求流程 + +``` +1. bigpanel.run() 启动定时器(500ms间隔) +2. 检查每个func的倒计时 +3. 倒计时为0时调用 ciyfn.callfunc() +4. 请求后端:POST json_{func} +5. 返回JSON数据 +6. 调用对应组件的 setdata(funame, data) +7. 组件更新DOM或图表 +8. 重置倒计时 +``` + +### 跨组件数据共享 + +```javascript +// 全局数据对象 +var Glob = { + post: {}, // 传递给后端的公共参数 + bet: 1, // 屏幕缩放比例 + fontsize: 14 // 字体大小 +}; + +// 设置公共参数 +ciyfn.callfunc('init', {}, function (json) { + Glob.post.orgid = json.orgid; + Glob.myparam = { title: json.title }; +}); + +// 组件内使用 +// 后端接口会自动合并 Glob.post 和 thos.post +``` + +--- + +## 常用组件类型 + +### 数字卡片组件 + +```javascript +// bank1_c1.js +function ciy_chart_bank1_c1(opdata) { + this.func = ['bank_c1']; + this.setdata = function (funame, data) { + $5('[data-num="n1"]', opdata.container).text(data.n1); + $5('[data-num="n2"]', opdata.container).text(data.n2); + $5('[data-bank]', opdata.container).text(data.name); + } + + opdata.container.append(` +
--
+
贷款金额 (万元)
+ `); +} +``` + +### ECharts饼图组件 + +```javascript +// bank1_l1.js +function ciy_chart_bank1_l1(opdata) { + this.func = ['bank_l1']; + var chart1 = null; + + this.setdata = function (funame, data) { + var option = { + series: [{ + type: 'pie', + radius: ['25%', '40%'], + data: data.pie + }] + }; + chart1.setOption(option); + } + + opdata.container.append('
'); + chart1 = echarts.init($5('#chart1')[0], 'dark'); + + // 自动高亮动画 + var idx = -1; + setInterval(function () { + chart1.dispatchAction({ type: 'highlight', dataIndex: idx }); + idx = (idx + 1) % data.pie.length; + }, 2200); +} +``` + +### Cesium地图组件 + +```javascript +// bank1_c2.js +function ciy_chart_bank1_c2(opdata) { + this.func = ['bank_c2']; + var thos = this; + var ce = null; + + this.setdata = function (funame, data) { + if (ce) return; // 只初始化一次 + + ce = new ciyearth(); + ce.init({ + domid: 'map1', + wmts_source: 4, + wmts_style: 2 + }); + + // 添加标记点 + for (var i in data.bplants) { + var marker = ce.addmarker({ + lat: data.bplants[i].lat, + lng: data.bplants[i].lng, + img: '/ud/bill/map' + data.bplants[i].cmcode + '.png' + }); + marker.ciydata = data.bplants[i]; + } + + // 点击事件 + ce.ciyevent = function (type, act, data) { + if (type == 'entity' && act == 'leftclick') { + showfarm(data.entity.ciydata); + } + }; + } + + this.distory = function () { + if (ce) ce.destroy(); + } + + opdata.container.append('
'); +} +``` + +### 图片轮播组件 + +```javascript +function ciy_chart_farm_l3(opdata) { + this.func = ['farm_l3']; + var thos = this; + var cyc = null; + + this.setdata = function (funame, data) { + var imgs = data.farm.picszz.split('~'); + + cyc = new ciyclass.bigcychange({ + values: imgs, + cycsec: 5, + changecb: function (img) { + $5('img', opdata.container).attr('src', img); + } + }); + } + + this.distory = function () { + if (cyc) cyc.distory(); + } + + opdata.container.append(''); +} +``` + +--- + +## 高级功能 + +### 弹窗面板 + +```javascript +function showvideo(mas) { + var chtname = 'video1'; + chtpls[chtname] = new ciyclass.bigpanel({ + name: 'panel_' + chtname, + jspath: './b64/', + animation: 'small', + style: 'position:absolute;top:50px;left:50px;right:50px;bottom:50px;z-index:2010;' + }); + + chtpls[chtname].post = { videoid: mas.id, img: mas.capture }; + chtpls[chtname].addplot({ + jsname: chtname + '_c1', + style: 'position:absolute;left:1em;right:1em;bottom:1em;top:5em;' + }); + + chtpls[chtname].setbtns({ template: 'close1', hideopacity: 0.8 }); + chtpls[chtname].run({}); +} +``` + +### 地图弹窗提示 + +```javascript +this.showpopup = function (html, pos) { + if (thos.popup) thos.popup.remove(); + + var oset = $5(opdata.container).offset(); + thos.popup = $5(''); + thos.popup.css({ + top: pos.y - oset.top, + left: pos.x - oset.left, + opacity: 1 + }); + opdata.container.append(thos.popup); +} +``` + +### 屏幕自适应 + +```javascript +// 设置基准分辨率 +ciyfn.big_resolution(1536, 864); +ciyfn.big_setbetsize(1536); + +// 响应窗口大小变化 +window.addEventListener("resize", function () { + ciyfn.big_setbetsize(1536); + for (var ipl in chtpls) { + chtpls[ipl].resize(); + } +}); +``` + +--- + +## 开发最佳实践 + +### 性能优化 + +1. **减少重复初始化** +```javascript +this.setdata = function (funame, data) { + if (ce) return; // 地图只初始化一次 + // ...初始化代码 +} +``` + +2. **使用全局缩放比例** +```javascript +var option = { + fontSize: 18 * Glob.bet, // 根据屏幕缩放 + borderRadius: 4 * Glob.bet +}; +``` + +3. **及时清理定时器** +```javascript +this.distory = function () { + clearInterval(t_autohight); + if (chart1) chart1.dispose(); +} +``` + +### 样式规范 + +```css +/* 渐变文字 */ +background: linear-gradient(to bottom, #ffffff, #50c4eb 60%); +background-clip: text; +-webkit-background-clip: text; +color: transparent; + +/* 动画 */ +@keyframes opa { + 0% { opacity: 1; } + 10% { opacity: 0.5; } + 20% { opacity: 1; } +} + +/* 弹窗样式 */ +.popup-box { + position: absolute; + z-index: 999; + transform: translateX(-50%) translateY(-100%); + pointer-events: none; + transition: all 0.5s; +} +``` + +### 调试技巧 + +```javascript +// 开发模式 +if (urlp.dev) { + console.log('组件名称', data); + // ...调试代码 +} + +// 查看当前刷新频率 +console.log(funcsecs); // 查看所有接口的倒计时 + +// 手动刷新所有组件 +setdata(); +``` + +--- + +## 常见问题 + +### Q1: 组件不显示数据? +**检查**: +1. `this.func` 数组是否正确 +2. 后端接口命名是否匹配 `json_{func}` +3. `setdata()` 方法是否正确处理数据 + +### Q2: 地图不显示? +**检查**: +1. 容器是否有高度:`style="height:100%"` +2. 初始化前是否已添加DOM +3. Cesium资源是否加载:`/zces108/Cesium.js` + +### Q3: 窗口调整后图表变形? +**解决**: +```javascript +window.addEventListener("resize", function () { + chtpls[ipl].resize(); // 调用每个面板的resize +}); +``` + +### Q4: 数据刷新太频繁? +**调整**: +```javascript +chtpls['bank1'].run({ + 'bank_c1': 100 // 增加刷新间隔(单位:0.5秒) +}); +``` + +--- + +## 开发流程 + +### 新建大屏步骤 + +1. **创建目录和文件** + ``` + web/admin/demo/bs/ + ├── index.html + ├── index.php + └── b64/ + ``` + +2. **编写 index.html** + - 引入必要JS库 + - 创建 `ciyclass.bigpanel` + - 添加图表组件 + +3. **编写 index.php** + - 创建 `json_init()` 接口 + - 为每个组件创建数据接口 + +4. **开发组件JS文件** + - 实现 `setdata()`、`resize()`、`distory()` + - 添加DOM结构 + - 初始化ECharts或其他库 + +5. **测试调试** + - 使用 `urlp.dev` 开发模式 + - 检查数据流 + - 优化性能 + +--- + +## 参考资源 + +### 技术文档 +- ECharts: https://echarts.apache.org/ +- Cesium: https://cesium.com/ +- jQuery: https://jquery.com/ + +### 内部资源 +- 样式文件:`/jscss/style.css` +- 大屏样式:`/ud/bigscreen/bigscr.css` +- 图片资源:`/ud/bigscreen/` +- 字体资源:`/ud/bigscreen/` + +### 示例代码 +- 银行大屏:`web/admin/demo/bs/` +- 参考组件:`b64/bank1_*.js` + +--- + +## bigscreen CSS 资源详解 + +### 目录结构 + +``` +/web/ud/bigscreen/ +├── bigscr.css # 大屏核心样式文件 +├── bg/ # 背景图片(bg01.png - bg04.png) +├── border/ # 边框图片(34种通用边框 + 4种文本边框) +├── caption/ # 标题样式(11种大标题 + 1种底部样式) +├── cir/ # 圆形装饰 +├── font/ # 字体文件(15种) +├── fontweb/ # Web字体 +├── icon/ # 图标 +├── orn/ # 装饰元素 +└── tit/ # 小标题(6种) +``` + +### 字体资源(15种) + +#### 中文/装饰字体(7种) + +| 字体名 | 文件路径 | 用途场景 | 推荐使用 | +|--------|----------|----------|----------| +| `fnt01` | font/fnt01.ttf | 大屏主标题(cap02, cap06, cap07, cap09, cap10, cap11) | ⭐⭐⭐⭐⭐ | +| `fnt02` | font/fnt02.ttf | 中等标题(cap03, cap05) | ⭐⭐⭐⭐ | +| `fnt03` | fontweb/fnt03.ttf | 网页特殊字体 | ⭐⭐⭐ | +| `fnt04-fnt07` | font/fnt04~07.ttf | 装饰字体备用 | ⭐⭐ | + +#### 小标题字体(4种) + +| 字体名 | 文件路径 | 格式 | +|--------|----------|------| +| `xt01` | font/xt01.ttf | .ttf | +| `xt02` | font/xt02.otf | .otf | +| `xt03` | font/xt03.otf | .otf | +| `xt04` | font/xt04.ttf | .ttf | + +#### 英文/数字字体(2种) + +| 字体名 | 文件路径 | 用途 | 推荐使用 | +|--------|----------|------|----------| +| `eng01` | font/eng01.ttf | 英文/数字1 | ⭐⭐⭐ | +| `eng02` | font/eng02.ttf | 英文/数字2(数字卡片常用) | ⭐⭐⭐⭐⭐ | + +#### 黑体系列(3种) + +| 字体名 | 文件路径 | 粗细 | +|--------|----------|------| +| `hs-bold` | font/hs-bold.ttf | 粗体 | +| `hs-light` | font/hs-light.ttf | 细体 | +| `hs-normal` | font/hs-normal.ttf | 常规 | + +**使用示例**: +```css +/* 大屏标题 */ +font-family: fnt01; + +/* 数字卡片 */ +font-family: eng02; +font-size: 1.8em; +letter-spacing: 4px; + +/* 复合标题 */ +font-family: SimHei, STHeiti, 黑体; +``` + +### 背景样式(4种) + +| 类名 | 背景图片 | 渐变配色 | 适用场景 | +|------|----------|----------|----------| +| `.bd01` | bg/bg01.png | `radial-gradient(#232f5a, #232f5a)` | 通用深蓝大屏 | +| `.bd02` | bg/bg02.png | `radial-gradient(#232f5a, #0b1121)` | 深蓝+黑色渐变 | +| `.bd03` | bg/bg03.png | `radial-gradient(#232f5a, #0b1121)` | 备用深色背景 | +| `.bd04` | bg/bg04.png | `radial-gradient(#092b46, #041320)` | 现代海蓝色 ⭐ | + +**共同特性**: +- `height: 100vh` +- `color: #ffffff` +- 背景图片设置为 `repeat` 重复平铺 + +**使用示例**: +```html + + + +``` + +### 边框样式(38种) + +#### 通用边框(34种) + +| 类名 | 切割值 | 边框宽度 | 内边距 | 重复模式 | 背景色 | 推荐度 | +|------|--------|----------|--------|----------|--------|--------| +| `.brimg01` | 15 22 19 16 | 15px 22px 19px 16px | 10px 15px 15px 10px | - | - | ⭐⭐⭐⭐ | +| `.brimg02` | 15 21 20 16 | 15px 21px 20px 16px | 10px 15px 15px 10px | - | - | ⭐⭐⭐⭐ | +| `.brimg03` | 13 13 13 13 | 13px 13px 13px 13px | 10px 10px | - | `#00000011` | ⭐⭐⭐ | +| `.brimg04` | 103 168 103 168 | 103px 168px 103px 168px | 10px 10px | - | - | ⭐⭐ | +| `.brimg05` | 97 76 97 76 | 97px 76px 97px 76px | 15px | - | - | ⭐⭐ | +| `.brimg10` | 14 | 14px | 8px | - | `#00000011` | ⭐⭐⭐ | +| `.brimg21` | 50 28 50 28 | 50px 28px 50px 28px | 3px 8px 3px 8px | - | `transparent` | ⭐⭐⭐ | +| `.brimg33` | 315 315 315 315 | 315px 315px 315px 315px | 7px | - | `transparent` | ⭐⭐ | +| `.brimg34` | 20 21 20 21 | 20px 21px 20px 21px | 7px | - | `#00000011` | ⭐⭐⭐⭐⭐ | + +**推荐使用**: +- `.brimg34` - 常用边框(地图容器常用)⭐⭐⭐⭐⭐ +- `.brimg03` / `.brimg10` / `.brimg19` - 简薄边框(带半透明背景)⭐⭐⭐ +- `.brimg21` / `.brimg23` / `.brimg24` / `.brimg25` - 透明边框⭐⭐⭐ + +#### 文本边框(4种) + +| 类名 | 切割值 | 边框宽度 | 内边距 | 特色 | +|------|--------|----------|--------|------| +| `.brtxt01` | 2 23 22 23 | 2px 23px 22px 23px | 3px 10px | 红色警告边框,字体加粗 | +| `.brtxt02` | 35 60 35 60 | 35px 60px 35px 60px | 10px 20px | 装饰文本边框1 | +| `.brtxt03` | 30 54 30 54 | 30px 54px 30px 54px | 10px 20px | 装饰文本边框2 | +| `.brtxt04` | 31 93 31 71 | 31px 93px 31px 71px | 10px 20px | 装饰文本边框3 | + +**brtxt01 特有样式**: +```css +background: #ff000029; +color: #cc0000; +text-shadow: 1px 1px 0 #000000; +font-weight: bold; +``` + +**使用示例**: +```html + +
+
+
+ + +
+
+
+ + +
警告信息
+``` + +### 标题样式(11种大标题 + 1种底部样式) + +#### 大标题(11种) + +| 类名 | 高度 | 最小宽度 | 字体 | 渐变色 | 特色 | 推荐度 | +|------|------|----------|------|--------|------|--------| +| `.cap01` | 100px | 1000px | 默认 | 白→白70%→青 | 倒影效果 | ⭐⭐⭐⭐ | +| `.cap02` | 50px | 1200px | fnt01 | 白→浅蓝 | 简洁大标题 | ⭐⭐⭐⭐ | +| `.cap03` | 40px | 1000px | fnt02 | 白30%→深蓝 | 紧凑标题 | ⭐⭐⭐ | +| `.cap04` | 40px | 1000px | 默认 | 白→浅蓝 | 线条装饰 | ⭐⭐⭐ | +| `.cap05` | 40px | 1000px | fnt02 | 白→青色 | 青色渐变 | ⭐⭐⭐ | +| `.cap06` | 120px | 1200px | fnt01 | 白→青色 | 大标题带装饰 | ⭐⭐⭐ | +| `.cap07` | 80px | 1600px | fnt01 | 白→青色 | 超宽标题 | ⭐⭐⭐ | +| `.cap08` | 65px | 900px | SimHei | - | 复合标题(h1+h2) | ⭐⭐⭐⭐ | +| `.cap09` | 48px | 1300px | fnt01 | 白→浅蓝60% | 倒影效果 | ⭐⭐⭐⭐⭐ | +| `.cap10` | 42px | 950px | fnt01 | 深蓝→白50% | 蓝白渐变 | ⭐⭐⭐⭐ | +| `.cap11` | 60px | 1260px | fnt01 | 白→浅蓝50% | 双行标题(h1+h2) | ⭐⭐⭐⭐ | + +**通用标题样式**: +```css +background-clip: text; +-webkit-background-clip: text; +color: transparent; +text-align: center; +``` + +**倒影效果**(cap01, cap09): +```css +-webkit-box-reflect: below -35px -webkit-linear-gradient(transparent, transparent 20%, rgba(0,0,0,0.23)); +``` + +#### 底部样式(1种) + +| 类名 | 高度 | 背景 | 对齐 | +|------|------|------|------| +| `.btm01` | 20px | btm01.png(底部居中) | 居中 | + +**使用示例**: +```html + +
+
数据大屏标题
+
+ + +
+
简洁标题
+
+ + +
+

主标题

+

副标题

+
+ + +
+
底部文字
+
+``` + +### 小标题样式(6种) + +| 类名 | 高度 | 左边距 | 最小宽度 | 背景图 | +|------|------|--------|----------|--------| +| `.tit05` | 30px | 50px | 230px | tit/05.png(左上角) | + +```css +.tit05 { + height: 30px; + display: inline-block; + padding: 4px 0 0 50px; + min-width: 230px; + background: url(./tit/05.png) top left no-repeat; + background-size: contain; +} +``` + +### 动画效果(1种) + +#### 立方体展开动画 + +```css +@keyframes ani01_cube { + 0% { + transform: scale(0) rotate(0deg) translate(-50%, -50%); + opacity: 0.2; + } + 5% { + transform: scale(50) rotate(660deg) translate(-50%, -50%); + opacity: 0; + } + 100% { + transform: scale(50) rotate(660deg) translate(-50%, -50%); + opacity: 0; + } +} + +.ani01 li { + position: absolute; + top: 50vh; + left: 50vw; + width: 10px; + height: 10px; + border: solid 1px #0039ad; + color: transparent; + transform-origin: top left; + transform: scale(0) rotate(0deg) translate(-50%, -50%); + animation: ani01_cube 20s ease-in forwards infinite; +} +``` + +**效果**:屏幕中心的边框立方体快速放大旋转消失,形成炫酷的展开效果 + +### 全局基础样式 + +```css +* { + user-select: none; /* 禁止文本选择 */ + -webkit-user-select: none; +} + +span { + vertical-align: middle; /* span垂直居中 */ +} + +img { + vertical-align: middle; /* 图片垂直居中 */ +} +``` + +### 资源速查表 + +**字体选择**: +```css +font-family: fnt01; /* 大屏主标题 ⭐⭐⭐⭐⭐ */ +font-family: fnt02; /* 中等标题 ⭐⭐⭐⭐ */ +font-family: eng02; /* 数字展示 ⭐⭐⭐⭐⭐ */ +font-family: SimHei; /* 复合标题(cap08) ⭐⭐⭐⭐ */ +``` + +**背景选择**: +```html + + + + +``` + +**边框选择**: +```html +
+
+
+
+``` + +**标题选择**: +```html +
+
+
+
+
+``` + +--- + +## ciybigscreen.js API 详解 + +### 类:`ciyclass.bigpanel` + +**功能**:大屏面板管理核心类 + +#### 构造函数参数 + +| 参数 | 类型 | 必填 | 默认值 | 说明 | +|------|------|------|--------|------| +| `name` | String | ✓ | - | 面板唯一标识(用于DOM的id) | +| `jspath` | String | ✓ | - | 组件JS文件路径(如 `'./b64/'`) | +| `style` | String | - | `''` | 面板容器内联样式 | +| `prop` | String | - | `''` | 面板容器HTML属性 | +| `animation` | String | - | - | 动画类型('ani1', 'ani2', 'small') | +| `mask` | String | - | - | 遮罩层颜色(如 `'rgba(0,0,0,0.5)'`) | + +**使用示例**: +```javascript +var chtpls = {}; +chtpls['bank1'] = new ciyclass.bigpanel({ + name: 'panel_bank1', // 必填 + jspath: './b64/', // 必填 + style: 'position:absolute;top:4em;left:5px;right:5px;bottom:20px;', + animation: 'ani1', + mask: 'rgba(0,0,0,0.5)' +}); +``` + +#### 实例属性 + +| 属性 | 类型 | 说明 | +|------|------|------| +| `this.container` | jQuery对象 | 面板容器DOM对象 | +| `this.post` | Object | 传递给后端的公共参数(每个组件独有) | + +**使用示例**: +```javascript +chtpls['bank1'].post = { + bankid: 123, + orgid: 1 +}; +``` + +#### 方法详解 + +**1. `addplot(opn)` - 添加图表组件** + +**参数**: +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| `opn.jsname` | String | ✓ | 组件名称(如 `'bank1_c1'`) | +| `opn.style` | String | - | 组件容器样式 | +| `opn.prop` | String | - | 组件容器HTML属性 | + +**使用示例**: +```javascript +chtpls['bank1'].addplot({ + jsname: 'bank1_c1', + style: 'position:absolute;left:0;top:0;width:33%;height:33%;', + prop: 'data-id="chart1"' +}); +``` + +**内部流程**: +``` +1. 创建组件加载状态:plots[opn.jsname] = { load: 0 } +2. 动态加载JS文件:ciyfn.loadjs('ciy_chart_' + opn.jsname, ...) +3. 加载成功后创建容器:load = 1 +4. 添加到面板容器:load = 2 +5. 实例化组件类:new window['ciy_chart_' + opn.jsname]() +``` + +**2. `setbtns(opn)` - 设置按钮** + +**参数**: +| 参数 | 类型 | 必填 | 默认值 | 说明 | +|------|------|------|--------|------| +| `opn.template` | String | - | - | 模板类型(如 `'close1'`) | +| `opn.html` | String | - | `''` | 自定义按钮HTML | +| `opn.hideopacity` | Number | - | `0.9` | 隐藏时透明度(0-1) | +| `opn.hidesec` | Number | - | `5` | 鼠标静止X秒后隐藏 | +| `opn.top` | String | - | `'2px'` | 按钮顶部位置 | +| `opn.click` | Function | - | - | 自定义点击事件 | + +**使用示例**: +```javascript +// 使用内置模板 +chtpls['bank1'].setbtns({ + template: 'close1', + hideopacity: 0.9, + hidesec: 5, + top: '2px' +}); + +// 自定义按钮 +chtpls['bank1'].setbtns({ + html: '', + click: function(e) { + console.log('按钮被点击'); + } +}); +``` + +**内置模板**: +- `close1` - 关闭按钮(右上角×) + +**自动隐藏机制**: +- 监听 `mousemove` 事件更新时间戳 +- 每500ms检查是否超过 `hidesec` 秒未操作 +- 超时则降低透明度到 `hideopacity` + +**3. `run(fsec)` - 启动数据轮询** + +**参数**: +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| `fsec` | Object | ✓ | 刷新频率配置(键为接口名,值为0.5秒的倍数) | + +**使用示例**: +```javascript +chtpls['bank1'].run({ + 'bank_c1': 50, // 每25秒刷新一次(50 × 0.5秒) + 'bank_c2': 10, // 每5秒刷新一次(10 × 0.5秒) + 'bplant': 50 // 每25秒刷新一次 +}); +``` + +**内部流程**: + +``` +初始化阶段(仅执行一次) +└─ 遍历所有组件 + └─ 读取组件的 this.func 数组 + └─ 为每个接口创建 funcsecs 对象 + └─ 设置初始倒计时 t=0 和最大间隔 max + +轮询阶段(每500ms执行一次) +└─ 遍历 funcsecs + ├─ t == 0?发起请求 + │ ├─ 合并参数:Glob.post + thos.post + │ ├─ 调用 ciyfn.callfunc(ifu, post, callback) + │ ├─ 成功: + │ │ ├─ 重置倒计时:t = max + │ │ └─ 分发数据到所有相关组件 + │ └─ 失败:t = 5(5秒后重试) + └─ t--(倒计时递减) +``` + +**数据分发逻辑**: +```javascript +// 遍历所有组件 +for (var iplot in plots) { + // 检查组件是否匹配(通过 prefunc) + if (plots[iplot].clss.prefunc != funcsecs[ifu].prefunc) continue; + + // 提取函数名(去掉前缀) + var funcstr = ifu.substring(funcsecs[ifu].prefunc.length); + + // 检查组件是否需要此数据 + if (plots[iplot].clss.func.indexOf(funcstr) == -1) continue; + + // 调用组件的 setdata 方法 + if (typeof (plots[iplot].clss.setdata) == 'function') { + plots[iplot].clss.setdata(funcstr, jsondata); + } +} +``` + +**4. `setdata()` - 手动刷新所有组件** + +**参数**:无 + +**功能**:临时方法,用于调试或手动触发刷新 + +**使用示例**: +```javascript +chtpls['bank1'].setdata(); +``` + +**5. `resize()` - 窗口大小改变响应** + +**参数**:无 + +**功能**:遍历所有组件,调用其 `resize()` 方法 + +**使用示例**: +```javascript +window.addEventListener("resize", function () { + ciyfn.big_setbetsize(1536); + for (var ipl in chtpls) { + chtpls[ipl].resize(); + } +}); +``` + +**6. `distory()` - 销毁面板** + +**参数**:无 + +**功能**:清理面板资源,包括定时器、组件、DOM元素 + +**清理流程**: +``` +1. 清除定时器:tick, tick_btns +2. 遍历所有组件 + └─ 调用组件的 distory() 方法 + └─ 删除组件对象 +3. 播放关闭动画(如果设置了 animation) +4. 移除DOM元素 +``` + +**使用示例**: +```javascript +chtpls['bank1'].distory(); +delete chtpls['bank1']; +``` + +--- + +### 工具函数:`ciyfn.big_setbetsize(basewidth, fontsize)` + +**功能**:设置大屏缩放比例和字体大小 + +**参数**: +| 参数 | 类型 | 必填 | 默认值 | 说明 | +|------|------|------|--------|------| +| `basewidth` | Number | ✓ | - | 基准设计宽度(如 1536) | +| `fontsize` | Number/String | - | `'auto'` | 字体大小('auto' 或 具体数值) | + +**返回值**:无 + +**使用示例**: +```javascript +ciyfn.big_setbetsize(1536); // 自动计算 +ciyfn.big_setbetsize(1536, 16); // 指定字体大小 +ciyfn.big_setbetsize(1536, 0); // 不调整字体 +``` + +**计算逻辑**: + +``` +1. 获取屏幕宽度:window.screen.width +2. 开发模式特殊处理(urlp.dev) + └─ devicePixelRatio < 0.8 时放大屏幕宽度 +3. 屏幕宽度 > 基准宽度? + └─ 是:计算缩放比例 bet = screenwidth / basewidth + └─ 是:计算字体 fontsize = 14 * bet +4. 设置全局样式 + └─ $5('body').css('fontSize', fontsize) +5. 更新全局变量 + └─ Glob.fontsize = fontsize - 2 + └─ Glob.bet = bet +``` + +**使用场景**: +```javascript +// 页面加载时 +ciyfn.big_resolution(1536, 864); +ciyfn.big_setbetsize(1536); + +// 窗口大小改变时 +window.addEventListener("resize", function () { + ciyfn.big_setbetsize(1536); + for (var ipl in chtpls) { + chtpls[ipl].resize(); + } +}); +``` + +--- + +### 工具函数:`ciyfn.big_resolution(width, height)` + +**功能**:检查屏幕分辨率是否匹配建议值 + +**参数**: +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| `width` | Number | ✓ | 基准宽度 | +| `height` | Number | ✓ | 基准高度 | + +**返回值**:无 + +**使用示例**: +```javascript +ciyfn.big_resolution(1536, 864); +``` + +**检查流程**: + +``` +1. 检查物理分辨率:window.screen.width/height + └─ 不匹配?提示:"最佳分辨率为:1536 x 864" + +2. 检查窗口宽度:window.innerWidth + └─ 不等于基准宽度?返回(判断为调试模式) + +3. 检查窗口高度:window.innerHeight + └─ 小于基准高度?提示:"请按F11,进入全屏模式" +``` + +**使用场景**: +```javascript +// 页面加载时检查 +ciyfn.big_resolution(1536, 864); +``` + +--- + +### 类:`ciyclass.bigcychange` + +**功能**:值循环切换工具(用于图片轮播、数据切换等) + +#### 构造函数参数 + +| 参数 | 类型 | 必填 | 默认值 | 说明 | +|------|------|------|--------|------| +| `values` | Array | ✓ | - | 值数组 | +| `changecb` | Function | ✓ | - | 值改变时的回调函数 | +| `cycsec` | Number | - | `5` | 切换间隔(秒) | + +**使用示例**: +```javascript +var cyc = new ciyclass.bigcychange({ + values: ['img1.jpg', 'img2.jpg', 'img3.jpg'], + cycsec: 5, + changecb: function (img) { + $5('img', opdata.container).attr('src', img); + } +}); +``` + +#### 实例属性 + +| 属性 | 类型 | 说明 | +|------|------|------| +| `this.value` | Any | 当前值 | + +#### 方法详解 + +**1. `change(mm, longsec)` - 手动切换到指定值** + +**参数**: +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| `mm` | Any | ✓ | 要切换到的值 | +| `longsec` | Number | - | 停留时长(秒),默认使用 cycsec | + +**返回值**:Boolean(成功返回 true,失败返回 false) + +**使用示例**: +```javascript +cyc.change('img2.jpg', 10); // 切换到'img2.jpg',停留10秒 +cyc.change('img1.jpg'); // 切换到'img1.jpg',使用默认间隔 +``` + +**2. `distory()` - 销毁定时器** + +**参数**:无 + +**返回值**:无 + +**使用示例**: +```javascript +cyc.distory(); +``` + +**完整使用示例**: +```javascript +function ciy_chart_farm_l3(opdata) { + this.func = ['farm_l3']; + var thos = this; + var cyc = null; + + this.setdata = function (funame, data) { + var imgs = data.farm.picszz.split('~'); + + cyc = new ciyclass.bigcychange({ + values: imgs, + cycsec: 5, + changecb: function (img) { + $5('img', opdata.container).attr('src', img); + } + }); + } + + this.distory = function () { + if (cyc) cyc.distory(); + } + + opdata.container.append(''); +} +``` + +--- + +### 全局变量:`Glob` + +| 属性 | 类型 | 说明 | +|------|------|------| +| `Glob.post` | Object | 传递给后端的公共参数(所有面板共享) | +| `Glob.bet` | Number | 屏幕缩放比例 | +| `Glob.fontsize` | Number | 字体大小 | +| `Glob.myparam` | Object | 自定义参数 | + +**使用示例**: +```javascript +// 页面加载时设置公共参数 +ciyfn.callfunc('init', {}, function (json) { + Glob.post.orgid = json.orgid; + Glob.myparam = { title: json.title }; +}); + +// 组件内使用 +var option = { + fontSize: 18 * Glob.bet, + borderRadius: 4 * Glob.bet +}; +``` + +--- + +## 样式命名规范与最佳实践 + +### CSS命名规范 + +为避免样式冲突,组件内部CSS应遵循以下规范: + +#### BEM命名法 + +```css +/* 面板_组件__元素 */ +.bank1-c1__num { } +.bank1-c1__title { } +.farm1-l2__info { } +.farm1-l2__item { } +``` + +**示例**: +```javascript +opdata.container.append(` +
+
--
+
贷款金额
+
+`); + +// 动态注入样式 +var style = document.createElement("style"); +style.innerHTML = ` + .bank1-c1__num { + font-size: 1.8em; + font-weight: bold; + color: #ffffff; + } + .bank1-c1__title { + font-size: 0.8em; + color: #6dcdee; + } +`; +window.document.head.appendChild(style); +``` + +#### ID选择器(配合 opdata.container) + +```javascript +// 添加元素时指定ID +opdata.container.append('
'); + +// 访问时限定在容器内 +var chart1 = echarts.init($5('#chart1', opdata.container)[0], 'dark'); +``` + +#### data-* 属性选择器 + +```javascript +// 添加元素 +opdata.container.append(` +
--
+
银行名称
+`); + +// 更新数据 +$5('[data-num="n1"]', opdata.container).text(data.n1); +$5('[data-bank]', opdata.container).text(data.name); +``` + +### 使用 bigscreen 资源 + +#### 字体选择 + +```css +/* 大屏主标题 */ +font-family: fnt01; +font-size: 2em; +letter-spacing: 0.2em; + +/* 中等标题 */ +font-family: fnt02; +font-size: 1.5em; + +/* 数字展示 */ +font-family: eng02; +font-size: 1.8em; +letter-spacing: 4px; +``` + +#### 边框选择 + +```javascript +// 添加边框容器 +opdata.container.append(` +
+
+
+`); + +// 或在HTML中定义 +var chartHTML = ` +
+
+ 信贷团队统计 +
+
+
+`; +opdata.container.append(chartHTML); +``` + +#### 标题选择 + +```javascript +// 面板内部小标题 +var titleHTML = ` +
+ 图表标题 +
+ +
+
+
+`; +opdata.container.append(titleHTML); +``` + +### 渐变文字效果 + +```javascript +// 标题渐变 +var captionHTML = ` +
+ +
+ 大屏标题 +
+
+`; +opdata.container.append(captionHTML); +``` + +### 使用全局缩放比例 + +```javascript +// 在所有尺寸计算中使用 Glob.bet +var option = { + textStyle: { + fontSize: Glob.fontsize + }, + series: [{ + itemStyle: { + borderRadius: 4 * Glob.bet, + borderWidth: 1 * Glob.bet + }, + label: { + fontSize: 18 * Glob.bet, + padding: [18 * Glob.bet, 0, 8 * Glob.bet, 0] + }, + labelLine: { + length: 20 * Glob.bet, + length2: 80 * Glob.bet + } + }] +}; + +// CSS样式 +var style = document.createElement("style"); +style.innerHTML = ` + .bank1-c1__num { + font-size: 1.8em; + padding: 10px * ${Glob.bet}; + } +`; +``` + +### 动画效果 + +```javascript +// 透明度动画 +@keyframes opa { + 0% { opacity: 1; } + 10% { opacity: 0.5; } + 20% { opacity: 1; } +} + +.ani-fade { + animation: opa 5s infinite; +} + +// ECharts自动高亮动画 +var idx_autohight = -1; +var t_autohight = setInterval(function () { + var option = chart1.getOption(); + chart1.dispatchAction({ + type: 'downplay', + dataIndex: idx_autohight + }); + idx_autohight = (idx_autohight + 1) % option.series[0].data.length; + chart1.dispatchAction({ + type: 'highlight', + dataIndex: idx_autohight + }); +}, 2200); + +// 记得在 distory() 中清理 +this.distory = function () { + clearInterval(t_autohight); + if (chart1) chart1.dispose(); +} +``` + +### 弹窗样式 + +```javascript +// 弹窗样式 +var style = document.createElement("style"); +style.innerHTML = ` + .popup-box { + position: absolute; + z-index: 999; + transform: translateX(calc(-50%)) translateY(calc(-100% + 4px)); + pointer-events: none; + transition: all 0.5s; + opacity: 0; + } + .popup-box > .box { + border: 1px solid #6d8ef4; + background: linear-gradient(344deg, #0753b2, #05254e); + border-radius: 0.5em; + padding: 0.5em; + white-space: nowrap; + color: #ffffff; + pointer-events: all; + } + .popup-box > .line { + height: 3em; + width: 1px; + margin: auto; + border-left: 1px solid #0753b2; + } + .popup-box > .rlc { + width: 7px; + height: 7px; + background: #0753b2; + margin: auto; + border-radius: 4px; + } +`; +window.document.head.appendChild(style); +``` + +### 性能优化建议 + +1. **减少重复初始化** +```javascript +this.setdata = function (funame, data) { + if (ce) return; // 地图只初始化一次 + if (chart1) return; // 图表只初始化一次 + // ...初始化代码 +} +``` + +2. **使用事件委托** +```javascript +// 不推荐 +$5('.item').on('click', function() { + // ... +}); + +// 推荐 +opdata.container.on('click', '.item', function() { + // ... +}); +``` + +3. **及时清理资源** +```javascript +this.distory = function () { + clearInterval(t_autohight); + if (chart1) chart1.dispose(); + if (cyc) cyc.distory(); + if (ce) ce.destroy(); + // 移除动态添加的样式 + if (thos.style) thos.style.remove(); +} +``` + +--- + +## 总结 + +Ciyon数据大屏系统采用**组件化**、**模块化**的设计理念: + +✅ **优点**: +- 组件独立开发,易于维护 +- 数据轮询自动化 +- 屏幕自适应 +- 支持多种可视化类型 +- 丰富的CSS资源库(73个样式类 + 15种字体) + +📌 **核心要点**: +1. 遵循命名规范(文件、接口、方法、CSS类名) +2. 实现三个核心方法:`setdata()`、`resize()`、`distory()` +3. 合理设置刷新频率,避免性能问题 +4. 及时清理资源,防止内存泄漏 +5. 使用BEM命名法避免CSS冲突 +6. 充分利用bigscreen资源库(字体、边框、标题) +7. 使用 `Glob.bet` 实现屏幕自适应 + +🎨 **资源使用建议**: +- 字体:`fnt01`(大标题)、`eng02`(数字) +- 背景:`bd04`(现代海蓝色) +- 边框:`brimg34`(常用)、`brimg03`(薄边框) +- 标题:`cap09`(带倒影)、`cap02`(简洁) + +🔧 **API核心**: +- `ciyclass.bigpanel` - 面板管理 +- `ciyfn.big_setbetsize()` - 屏幕缩放 +- `ciyfn.big_resolution()` - 分辨率检查 +- `ciyclass.bigcychange` - 值循环切换 + +--- + +**版本**:v2.0 +**更新时间**:2026-03-15 +**维护团队**:Ciyon开发团队 \ No newline at end of file diff --git a/aiskill/ciyon-数据字典设计.md b/aiskill/ciyon-数据字典设计.md new file mode 100644 index 0000000..fd3541c --- /dev/null +++ b/aiskill/ciyon-数据字典设计.md @@ -0,0 +1,428 @@ +# ciyon 数据字典设计 Skill 文档 +参考zc_cata表,未指定新字典表,则复用该表。 + +## 数据库表结构 + +### zc_cata 表定义 + +```sql +CREATE TABLE `zc_cata` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upid` int(11) NOT NULL COMMENT '上级,DB,zc_cata', + `csort` int(11) NOT NULL DEFAULT 10 COMMENT '排序', + `isuse` int(11) NOT NULL DEFAULT 1 COMMENT '|行为|,BOOL', + `cbid` int(11) NOT NULL DEFAULT 0 COMMENT '库,DB,zc_cata', + `codeid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '值', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `clas` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '样式类', + `extdata` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '使用表', + PRIMARY KEY (`id`) USING BTREE, + INDEX `cbid`(`cbid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 12001701 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典表' ROW_FORMAT = Dynamic; +``` + +### 字段说明 + +| 字段 | 类型 | 说明 | +|------|------|------| +| id | int(11) | 主键ID | +| upid | int(11) | 上级ID,支持树形结构,多级字典使用 | +| csort | int(11) | 排序字段 | +| isuse | int(11) | 是否启用,1=启用,2=禁用。是否使用开关。已被使用不能被删除,可操作关闭。关闭后前端组件不可选该字典项。| +| cbid | int(11) | cbid=0为字典集合,cbid>0为某个字典的字典项集合 | +| codeid | varchar(20) | 字典集合的codeid为字典代码,通常英文命名,一般与列名相同。字典项集合的codeid一般为数字。 | +| name | varchar(30) | 显示名称 | +| clas | varchar(20) | 一般用于给前端元素标记class名,**仅在前端页面需用不同颜色显示的情况设置样式类,其余不设置** | +| extdata | varchar(180) | 使用表列表,一行一个 | + +### 字典项编号 + +一般从10开始编号 +- 进行中过程一般设置10/20/30 +- 失败一般设置90/91等 +- 成功一般设置100 +- 归档/完成等一般设置110/120等。 + +**重要规范**:在前端选项卡筛选等场景中,字典项标识应从1开始编号,避免使用0。例如: +- 变动类型:10=类型1,20=类型2,30=类型3 +- 数据状态:1=公开,2=订阅 + +### 数据组织结构 + +字典采用双层结构: + +- **库层级**:`cbid=0` 的记录为字典库 +- **值层级**:`cbid>0` 的记录为字典值,`cbid` 指向所属库的 `id` + +示例数据: +``` +id=10, cbid=0, codeid='sex', name='性别' → 字典库 +id=1000, cbid=10, codeid='10', name='男' → 字典值 +id=1001, cbid=10, codeid='20', name='女' → 字典值 +``` + +## 字典类型 + +### 固定字典(small data) + +**特点**: +- 库和值都存储在 zc_cata 表中 +- 支持多级树形结构(通过 upid) +- 登录时自动加载到前端缓存 + +**适用场景**: +- 数据量小(< 1000条) +- 需要频繁修改 +- 需要多级树形结构 + +**管理方式**: +- 使用 `/web/admin/rigger/cataindex.php` 管理字典库 +- 使用 `/web/admin/rigger/cata.php` 管理字典值 + + +### 大数据量静态字典(large data) + +**特点**: +- 数据存储为独立的 JS 文件 +- 按需加载,减少初始加载时间 +- PC端和移动端均可使用 + +**适用场景**: +- 数据量大(> 1000条) +- 数据相对固定 +- 不需要频繁修改 + +**文件格式**: + +```javascript +var ciy_arearpc=[ + {"id":"110000","upid":"0","name":"北京市"}, + {"id":"110100","upid":"110000","name":"市辖区"}, + {"id":"110101","upid":"110100","name":"东城区"} +]; +``` + + +**文件位置**: +- PC端:`/web/ud/dict/` +- 移动端:通过远程URL加载 + +## PC端实现 + +### 登录时加载字典 + +**后端接口**:`/web/admin/login.php` 中的 `json_login()` 方法 + +```php +static function getsync($userrow, $oid = 0, $sid = '') { + // ... 认证代码 ... + + $ret['storage'] = array(); + $csql = new \ciy\sql('zc_cata'); + $csql->order('csort,id'); + $ret['storage']['cata'] = $db->get($csql); // 加载所有字典 + + // ... 其他数据 ... + + return succjson($ret); +} +``` + +### 前端缓存字典 + +**前端函数**:`/web/jscss/ciy.js` 中的 `savedict()` 函数 + +**存储格式**: +- 键名:`cata_{codeid}`,例如:`cata_sex` +- 值格式:数组,每个元素包含 `id`, `name`, `upid`, `clas`, `isuse` + +### 查询字典 + +**ccode** - 单值查询: +```javascript +// 根据id查询name +var name = ciyfn.ccode('sex', '10'); // 返回 '男' + +// 查询其他字段 +var item = ciyfn.ccode('sex', '10', '_obj'); // 返回完整对象 +var clas = ciyfn.ccode('sex', '10', 'clas'); // 返回样式类 +``` + +**scode** - 多值查询: +```javascript +var names = ciyfn.scode(sexArray, '10,20'); // 返回 ['男', '女'] +``` + +**mcode** - 多级查询: +```javascript +// 查询从当前节点到根节点的所有名称 +var path = ciyfn.mcode(areaArray, '110101'); // 返回 ['东城区', '市辖区', '北京市'] +``` + +**bcode** - 位标记查询: +```javascript +// 假设使用位标记存储多个状态 +var flags = ciyfn.bcode(statusArray, 5); // 5 = 1 + 4,返回对应的状态数组 +``` + +## 移动端实现 + +### 字典加载 + +**登录时加载**: +```javascript +// /fapp/ciyon_ap/util/ciy.js +ciyfn.pageload(function () { + this.me = this.getme(); + // 字典存储在 this.g 中 + this.g = this.getstorage('g', {}); +}); +``` + +**设置字典**: +```javascript +// 登录成功后 +ciyfn.setstorage(ciy_vars.tokenfield, json.me); +if (json.storage) + ciyfn.savedict(json.storage); +``` + +### 字典查询 + +**在页面中使用**: +``` +{{ccode(g.sex, sexcode)}} + +``` + +```javascript +export default { + methods: { + getSexName(code) { + return this.ccode(this.g.sex, code); + } + } +} +``` + +**核心函数**: +ccode(arr, value, field, nonestr) - 单值查询 +scode(arr, ids, field) - 多值查询 +mcode(arr, value, field) - 多级查询 + +### 按需加载静态字典 + +**加载函数**: +```javascript +async load_ciydict(url) {} +``` + +**使用示例**: +```javascript +// 按需加载地区字典 +var [err, res] = await this.go(this.load_ciydict('/dict/ciy_arearpc.js')); +if (!err) { + this.g.arearpc = res.arr; // 存储到全局变量 +} +``` + +## 字典管理 + +### 创建新字典库 + +**方式一:通过管理界面** +1. 访问 `/web/admin/rigger/cataindex.html` +2. 点击"批量添加" +3. 填写格式: + ``` + 性别,sex + 男,10 + 女,20 + 其他,90 + ``` + +**方式二:直接SQL插入** +```sql +-- 插入库 +INSERT INTO zc_cata (upid, csort, isuse, cbid, codeid, name) +VALUES (0, 10, 1, 0, 'education', '学历'); + +-- 获取库ID(假设为102) +-- 插入库值 +INSERT INTO zc_cata (upid, csort, isuse, cbid, codeid, name, clas) +VALUES +(0, 10, 1, 102, '10', '小学', ''), +(0, 20, 1, 102, '20', '初中', ''), +(0, 30, 1, 102, '30', '高中', ''); +``` + +### 管理字典值 + +**访问字典管理页面**: +``` +/web/admin/rigger/cata.html?cbid=10 +``` + +**支持的URL参数**: +- `cbid`: 字典库ID +- `issub=yes`: 支持子码 +- `ismulti=yes`: 支持批量添加 +- `ext=扩展名`: 显示扩展字段 + +### 字典刷新 + +当字典数据变更后,需要刷新前端缓存: + +**方式一:管理界面刷新** +- 访问字典管理页面,点击"刷新缓存"按钮 + +**方式二:API刷新** +``` +POST /web/admin/login.php +参数: action=restorage +``` + +## AI生成字典和代码的指导原则 + +### 生成固定字典的步骤 + +**步骤一:定义库** +```sql +INSERT INTO zc_cata (upid, csort, isuse, cbid, codeid, name, extdata) +VALUES (0, 10, 1, 0, 'orderstatus', '订单状态', 'ap_order'); +``` + +**步骤二:定义值** +```sql +INSERT INTO zc_cata (upid, csort, isuse, cbid, codeid, name, clas) +VALUES +(0, 10, 1, [库ID], '10', '待支付', 'def'), +(0, 20, 1, [库ID], '20', '已支付', 'warn'), +(0, 30, 1, [库ID], '30', '已发货', 'man'), +(0, 100, 1, [库ID], '100', '已完成', 'succ'); +``` + +- **开关类字段**:如是否启用、是否公开等,直接使用数据库字段存储,不需要定义为字典 + +**步骤三:定义哪些表使用了该字典** +extdata:表名1.不相同的字段名\n表名2\n表名3 +删除字典项时,检索每个表的字段是否已引用。已引用的禁止删除。 + +**步骤四:前端使用** +```javascript +// 查询单个值 +var name = ciyfn.ccode('orderstatus', '10'); // '待支付' + +// 查询带样式 +var item = ciyfn.ccode('orderstatus', '10', '_obj'); // {id:'10', name:'待支付', clas:'def'} +``` + +### 生成业务代码的规范 + +**表字段设计**: +```sql +CREATE TABLE ap_order ( + id INT PRIMARY KEY, + orderstatus INT COMMENT '订单状态,CATA,orderstatus', + -- ... +); +``` + +**前端展示**: +```vue + + + +``` + +### 代码生成检查清单 + +生成字典相关代码时,必须检查: + +- [ ] 字典库是否已创建(cbid=0 的记录) +- [ ] 字典值是否已插入(cbid 指向库ID) +- [ ] extdata 是否定义了引用表(如需要) +- [ ] clas 字段是否根据字典类型合理设置(前端需用不同颜色显示时设置样式,其余不设置) +- [ ] isuse 字段是否设置为1(启用) +- [ ] 前端是否正确调用 ccode/scode/mcode/bcode +- [ ] 修改字典后是否刷新了缓存 + +## 常见问题 + +**问题一:哪些场景不适合使用字典?** + +**答案**: +- 需要用户自主设置的类型/状态,不适合 +- 开关类字段(如是否启用、是否公开等),直接使用数据库字段存储,不需要定义为字典 + +**问题二:字典修改后为什么前端没有更新?** + +**答案**: 需要刷新缓存: +控制台右上角 点击"刷新缓存"按钮 + +**问题三:如何支持多级字典?** + +**答案**: 使用 `upid` 字段: +```sql +-- 一级:省 +INSERT INTO zc_cata VALUES (..., 0, ..., '110000', '北京市'); + +-- 二级:市 +INSERT INTO zc_cata VALUES (..., [省ID], ..., '110100', '市辖区'); + +-- 三级:区 +INSERT INTO zc_cata VALUES (..., [市ID], ..., '110101', '东城区'); +``` + +查询多级路径: +```javascript +var path = ciyfn.mcode('area', '110101'); // ['东城区', '市辖区', '北京市'] +``` + +**问题四:如何在移动端使用字典?** + +**答案**: +1. 登录后字典自动加载到 `this.g` +2. 在页面中直接使用 `this.ccode()` +3. 大数据量字典使用 `this.load_ciydict()` 按需加载 + + +## 附录 + +### 样式类说明 + +| clas | 说明 | 颜色 | +|------|------|------| +| dag | 失败 | 红色 | +| warn | 警告 | 橙色 | +| succ | 成功 | 绿色 | +| def | 灰色 | 灰色 | +| man | 主色 | 蓝色 | + +### 核心函数速查 + +| 函数 | 平台 | 说明 | +|------|------|------| +| ccode(arr, value, field, nonestr) | 全 | 单值查询 | +| scode(arr, ids, field) | 全 | 多值查询 | +| mcode(arr, value, field) | 全 | 多级查询 | +| bcode(arr, value, field) | 全 | 位标记查询 | + + +--- + +**文档版本**: v1.0 +**更新日期**: 2026-03-20 +**维护者**: ciyon开发团队 \ No newline at end of file diff --git a/aiskill/ciyon-数据库建表SQL.md b/aiskill/ciyon-数据库建表SQL.md new file mode 100644 index 0000000..c22fd88 --- /dev/null +++ b/aiskill/ciyon-数据库建表SQL.md @@ -0,0 +1,787 @@ +# 数据库建表 SQL 指导文档 + +你是数据库 DBA 管理员。需根据开发者已经规划好的表结构,转义成 create table SQL 语句。 + + +### 输出文档名称 +/建表SQL.sql + +## 列注释标准格式 + +### 基本格式 + +``` +COMMENT '中文列名,组件名,参数' +``` + +**三部分说明:** +1. **中文列名**:显示在界面上的字段标题,支持对齐标记 +2. **组件名**:决定前端组件类型和数据格式化方式 +3. **参数**:组件的配置参数(可选) + +### 对齐方式标记 + +在中文列名中使用竖线标记对齐方式: + +- **居中对齐**:`|状态|` - 两端加竖线 +- **右对齐**:`金额|` - 右侧加竖线 +- **左对齐**:默认,不加竖线 + +**示例:** +```sql +`artstatus` int(11) NOT NULL COMMENT '|文章状态|,CATA,artstatus', -- 居中 +`studycnt` int(11) NOT NULL DEFAULT 0 COMMENT '精读数|', -- 右对齐 +`name` varchar(180) NOT NULL COMMENT '文章标题', -- 左对齐(默认) +``` + +### 特殊标记 + +- **默认隐藏列**:中文列名前加 `#`,如 `#隐藏字段` +- **列表不显示**:中文列名前加 `,`,如 `,内部字段` + +## 输出格式 + +- 一行一条 SQL,每行分号结束 +- 不要包含任何代码格式包裹和其他内容或解释 + +## 总体遵循规则 + +- 将中文表名作为表注释 +- id 字段设置自增 +- 除 id 列外,其他所有列都要加列注释 +- 不要建立任何的外键、索引、触发器等 +- 所有列必须设置默认值,字符串默认为空字符串,数字默认为 0 +- 所有列都禁止 null +- 所有列名称全部小写 +- 所有列名称两端都用反引号包裹 +- 中文列名对齐规则: + - 如果右侧有竖线,则为右对齐(例如:金额|) + - 如果两边有竖线,则为居中对齐(例如:|xx状态|) +- 尽量对中文列名进行合理的居中对齐和右对齐 +- 字典、level、status、type 等列,bool 列,url 链接列,应居中对齐,在列注释的中文列名两边加竖线 +- 重量、金额、长度、百分比等纯数字的整数列,应右对齐,在列注释的中文列名右边加竖线 + +## 特别说明 + +- 组件名为 CATU、CATA、BOOL、URL 的列,中文列名需在两边加竖线 +- 组件名为 CNY、KG、PCT、TC、METRE、SEC、INT、CYC 的列,中文列名需在右侧加竖线 +- 中文列名结尾是"日期"的列,组件名: DATE,参数为 Y-m-d + +## 字段类型规则 + +- 尽量只用 varchar、bigint、int,谨慎使用 text 字段类型 +- 列名称结尾为 times 的时间日期列,必须用 bigint 类型 +- 与金额相关的列,如果预计金额不超过百万的情况,可以用 int,否则用 bigint +- 一个列可能包含多个附件的,例如 imgs,应适当评估文件数量,varchar(n),n 是 50*文件数量 +- 一个列只可能包含一个文件的,例如 img1,用 varchar(50) +- 与文本有关的列,尽量评估较大容量,适当的使用 varchar(20/50/100/180/250) 等值 +- 与公斤、吨、金额、米、温度、百分比有关的列,应使用 bigint 或 int +- 与经纬度有关的列,例如 lat、lng,应使用 int 字段类型 +- 与真假布尔有关的 bool 类型的列,使用 int 字段类型 + +## 组件名规则(优先级从高到低) + +- 列名称结尾为 user 的列,组件名: CATU。参数为 ap_user +- 所属关联有关的列,组件名: DB。参数为关联表的表名 +- 字典有关的列,组件名: CATA。参数为英文列名称 +- 列名称结尾为 times 的列,组件名: DATE。如果中文列名包含"日期"字样那么参数为: Y-m-d +- 金额相关的列,组件名: CNY +- 与科学带小数数字有关的列,组件名: BET。参数1为单位名称。参数2为倍率,默认100 +- 重量相关的列,组件名: WGT +- 长度相关的列,组件名: LGH +- 百分比相关的列,组件名: PCT +- 温度相关的列,组件名: TC +- 可带单位的数字列,组件名: INT。参数为单位名。将显示为 5个、2批 +- bool 相关的列,组件名: BOOL +- 与经纬度有关的列,lng 列的组件名: LOC,参数为 lat。lat 列不填组件和参数 +- 周期相关的列,组件名: CYC +- 时长相关的列,组件名: SEC。将显示为 xx分钟、xx天 +- 文档附件类的列,上传多图组件名: IMG,上传单图组件名: IMG1、上传附件组件名: DOWN(例如:照片,IMG) +- url 链接相关的列,组件名: URL +- 列名称以 unit 结尾,多级单位定义有关的列,组件名: UNIT。将显示为: 1箱=24盒,1盒=10支 +- 中文列名为说明、内容、简介、介绍、摘要的列,组件名: BR +- 敏感的列,组件名: MSK,参数为****,代表后4位用*代替 +- 文件尺寸相关的列,组件名: FSIZE +- 列名称包含 name 的列,中文列名包含[编号、名称、号、名、单位]的列,无组件名 + +## 中文列名规则 + +- 组件名为 CATU、CATA、BOOL、URL 的列,中文列名在两边加竖线(例如:|xx状态|) +- 组件名为 BET、CNY、KG、PCT、TC、METRE、SEC、INT、CYC 的列,中文列名在右侧加竖线(例如:金额|、重量|、百分比|) +- id 字段不加列注释 + + +## 组件名完整列表 + +### 字典类组件 + +#### CATA - 字典下拉(单选) +``` +COMMENT '|状态|,CATA,字典code' +``` +- 用途:从字典表读取选项的下拉选择 +- 参数:字典的code值 +- 示例: +```sql +`artstatus` int(11) NOT NULL COMMENT '|文章状态|,CATA,artstatus', +`userlevel` int(11) NOT NULL COMMENT '|用户等级|,CATA,userlevel', +``` + +#### CATU - 用户字典(单选) +``` +COMMENT '审核人,CATU,adminuser' +``` +- 用途:从用户表读取选项的下拉选择 +- 参数:通常为 `adminuser`。登录成功随数据字典带出 机构用户id,name列表。 +- 示例: +```sql +`audituser` int(11) NOT NULL DEFAULT 0 COMMENT '审核人,CATU,adminuser', +`inputuser` int(11) NOT NULL DEFAULT 0 COMMENT '撰写人,CATU,adminuser', +``` + +#### CATS - 字典下拉(多选,小写逗号分隔) +``` +COMMENT '认证情况,CATS,字典code|分隔符' +``` +- 用途:多选字典值,以逗号分隔存储 +- 参数:字典code和可选分隔符(默认为 ` - `) +- 示例: +```sql +`certs` varchar(30) NOT NULL DEFAULT '' COMMENT '认证,CATS,certs', +`certs` varchar(30) NOT NULL DEFAULT '' COMMENT '认证,CATS,certs|?', +``` + +#### CATM - 树形字典(级联) +``` +COMMENT '组织结构,CATM,树形字典code|分隔符' +``` +- 用途:树形结构字典的级联选择 +- 参数:树形字典表名和可选分隔符(默认为 ` - `) +- 示例: +```sql +`prodcata` int(11) NOT NULL COMMENT '组织结构,CATM,zc_depart', +`areacode` int(11) NOT NULL COMMENT '所在地区,CATM,ciy_arearpc', +`areacode` int(11) NOT NULL COMMENT '所在地区,CATM,ciy_arearpc|?', +``` + +#### TBIN - 位运算字典(多选) +``` +COMMENT '认证情况,TBIN,字典code|分隔符' +``` +- 用途:通过位运算存储的多选值(最多16个选项) +- 参数:字典code和可选分隔符 +- 示例: +```sql +`renzheng` int(11) NOT NULL DEFAULT 0 COMMENT '认证,TBIN,certs', +``` + +#### TINT - 整型字典 +``` +COMMENT '发送人,TINT,10:用户.20:平台.30:AI客服' +``` +- 用途:直接定义的整型字典选项 +- 参数:`值:名称` 格式的选项列表 +- 示例: +```sql +`sendtype` int(11) NOT NULL COMMENT '发送人,TINT,10:用户.20:平台.30:AI客服', +``` + +--- + +### 关联类组件 + +#### DB - 表关联(单选) +``` +COMMENT '|版块|,DB,关联表名' +``` +- 用途:关联其他表的下拉选择 +- 参数:关联表名 +- 示例: +```sql +`sectionid` int(11) NOT NULL COMMENT '|版块|,DB,ap_art_section', +``` + +--- + +### 日期时间类组件 + +#### DATE - 日期时间 +``` +COMMENT '创建时间,DATE' +COMMENT '有效期至,DATE,Y-m-d' +``` +- 用途:日期时间显示和选择 +- 参数: + - 无参数:显示 `Y-m-d H:i` + - `Y-m-d`:仅显示日期(年-月-日) +- 示例: +```sql +`addtimes` bigint(20) NOT NULL COMMENT '创建时间,DATE', +`accounttimes` bigint(20) NOT NULL COMMENT '有效期至,DATE,Y-m-d', +``` + +#### TIME - 时间点 +``` +COMMENT '营业时间,TIME' +``` +- 用途:一天内的时间点选择(HH:MM格式) +- 示例: +```sql +`dayclock` int(11) NOT NULL COMMENT '营业时间,TIME', +``` + +--- + +### 金额数值类组件 + +#### CNY - 金额(元) +``` +COMMENT '充值金额|,CNY' +``` +- 用途:人民币金额显示(单位:元) +- 自动格式化:`1000000` → `10,000.00元` +- 实际存储:分为最小单元 +- 示例: +```sql +`iemoney` int(11) NOT NULL COMMENT '金额|,CNY', +`cashmoney` int(10) NOT NULL COMMENT '提现金额|,CNY', +``` + +#### MCNY - 金额(万元) +``` +COMMENT '金额|,WCNY,2' +``` +- 用途:人民币金额显示(单位:万元) +- 参数:小数位数(默认3位) +- 自动格式化:`100000000` → `100.000万` +- 实际存储:分(0.01元)为最小单元 +- 示例: +```sql +`bankmoney` int(11) NOT NULL COMMENT '贷款金额|,WCNY,2', +``` + +#### MCNY - 金额单位(毫) +``` +COMMENT '金额|,WCNY' +``` +- 用途:人民币金额显示(单位:元) +- 参数:小数位数,默认保留4位小数 +- 自动格式化:`10000` → `1.00元` +- 实际存储:毫元为最小单元,10000毫分=100分=1元 +- 示例: +```sql +`qian` int(11) NOT NULL COMMENT '提成金额|,MCNY', +``` + + +#### BET - 科学计数法(带小数) +``` +COMMENT '热功|,BET,焦耳,1000,3' +``` +- 用途:带小数的数值显示 +- 参数:单位,倍率,小数位数 +- 示例: +```sql +`price` int(11) NOT NULL COMMENT '热功|,BET,焦耳,1000,3', +``` + +--- + +### 物理单位类组件 + +#### WGT - 重量 +``` +COMMENT '重量|,WGT,2' +``` +- 用途:重量单位显示 +- 参数:小数位数 +- 自动转换:根据数值自动选择单位 +- 实际存储:克为最小单元,1000克=1公斤 +- 示例: +```sql +`ton` int(11) NOT NULL COMMENT '吨位|,WGT', +`weightg` int(11) NOT NULL COMMENT '体重|,WGT', +``` + +#### LGH - 长度 +``` +COMMENT '长度|,LGH,厘米.米.公里,2' +``` +- 用途:长度单位显示 +- 参数:单位列表,小数位数 +- 实际存储:毫米为最小单元 +- 示例: +```sql +`metre` int(11) NOT NULL COMMENT '长度|,LGH', +`height` int(11) NOT NULL COMMENT '身高|,LGH', +``` + +#### METRE - 米制单位 +``` +COMMENT '长度|,METRE,米|1000|公里' +``` +- 用途:米制单位显示(固定倍率) +- 参数:单位1|倍率|单位2 +- 实际存储:米为最小单元 +- 示例: +```sql +`metre` int(11) NOT NULL COMMENT '直线距离|,METRE', +``` + +#### TC - 温度 +``` +COMMENT '温度|,TC' +``` +- 用途:温度显示(摄氏度) +- 实际存储:1/1000摄氏度为最小单元 +- 示例: +```sql +`eartmpr` int(11) NOT NULL COMMENT '耳温|,TC', +``` + +#### SEC - 时长(秒) +``` +COMMENT '执行用时|,SEC' +``` +- 用途:以秒为单位的时长显示 +- 自动格式化:根据数值显示为 `xx秒`、`xx分钟`、`xx小时` +- 示例: +```sql +`runsec` int(11) NOT NULL COMMENT '执行用时|,SEC', +``` + +#### CYC - 周期 +``` +COMMENT '执行周期|,CYC' +``` +- 用途:周期显示 +- 自动格式化:根据数值显示为 `xx天`、`xx月` +- 示例: +```sql +`npcyc` int(11) NOT NULL COMMENT '执行周期|,CYC', +``` + +#### PCT - 百分比 +``` +COMMENT '百分比|,PCT' +``` +- 用途:百分比显示 +- 自动格式化:`50` → `50.00%` +- 示例: +```sql +`pct` int(11) NOT NULL COMMENT '百分比|,PCT', +``` + +#### INT - 可带单位的整数 +``` +COMMENT '积分|,INT,分' +COMMENT '活动期数,INT,第?期' +``` +- 用途:带单位的整数显示 +- 参数:单位名(可用 `?` 占位数值) +- 示例: +```sql +`mypnt` int(11) NOT NULL COMMENT '积分|,INT,分', +`acttm` int(11) NOT NULL COMMENT '活动期数,INT,第?期', +``` + +--- + +### 布尔类组件 + +#### BOOL - 布尔开关 +``` +COMMENT '|是否使用|,BOOL' +``` +- 用途:布尔值的开关显示 +- 参数:真值.假值(默认为 `✔.✘`) +- 存储:真值为1,假值为2。其他值无效 +- 示例: +```sql +`isuse` int(11) NOT NULL COMMENT '|是否使用|,BOOL,✔.✘', +`isopen` int(11) NOT NULL COMMENT '|是否开启|,BOOL,开启.关闭', +``` + +--- + +### 文件附件类组件 + +#### IMG1 - 单图上传 +``` +COMMENT '头像,IMG1' +COMMENT '身份证人像面,IMG1' +``` +- 用途:单张图片上传 +- 前端组件:`` +- 示例: +```sql +`img` varchar(50) NOT NULL COMMENT '缩略图,IMG1', +`avar` varchar(50) NOT NULL DEFAULT '' COMMENT '头像,IMG1', +``` + +#### IMG - 多图上传 +``` +COMMENT '图片,IMG' +COMMENT '活动花絮,IMG' +``` +- 用途:多张图片上传 +- 前端组件:`` +- 存储格式:路径1~路径2~路径3 +- 存储容量:约50字符串一个附件,3个附件=150varchar +- 示例: +```sql +`imgs` varchar(250) NOT NULL DEFAULT '' COMMENT '图片,IMG', +``` + +#### DOWN - 文件下载 +``` +COMMENT '发票,DOWN' +COMMENT '文档,DOWN' +``` +- 用途:文件上传和下载链接 +- 前端组件:`` +- 存储格式:路径1~路径2~路径3 +- 存储容量:约50字符串一个附件,3个附件=150varchar +- 示例: +```sql +`invfile` varchar(50) NOT NULL DEFAULT '' COMMENT '发票,DOWN', +`downurl` varchar(200) NOT NULL DEFAULT '' COMMENT '文档,DOWN', +``` + +#### FILEMD - Markdown文档 +``` +COMMENT '内容,FILEMD' +``` +- 用途:文件存储的Markdown文档 +- 前端组件:`` +- 存储格式:云存储路径 +- 示例: +```sql +`content` mediumtext NOT NULL COMMENT ',内容,FILEMD', +``` + +--- + +### 文本类组件 + +#### BR - 多行文本(换行) +``` +COMMENT '摘要,BR' +COMMENT '工单提问,BR' +``` +- 用途:多行文本内容(自动换行显示) +- 前端组件:`` +- 示例: +```sql +`descs` varchar(250) NOT NULL COMMENT ',摘要,BR', +`content` text NOT NULL COMMENT '答复内容,BR', +``` + +#### MD - Markdown编辑器 +``` +COMMENT '内容,MD' +``` +- 用途:Markdown富文本编辑器 +- 前端组件:`` +- 存储格式:字符串数据库存储 +- 示例: +```sql +`content` mediumtext NOT NULL COMMENT ',内容,MD', +``` + +--- + +### 特殊组件 + +#### UNIT - 多级单位定义 +``` +COMMENT '库存单位,UNIT' +``` +- 用途:定义多级单位换算关系(如 箱→盒→支) +- 存储格式:`单位1|数量|单位2|数量|单位3` +- 示例:`瓶|24|盒|20|箱` 表示 1箱=20盒,1盒=24瓶 +- 示例: +```sql +`unit` varchar(50) NOT NULL COMMENT '库存单位,UNIT', +``` + +#### LOC - 地理位置坐标 +``` +COMMENT '位置,LOC' +``` +- 用途:经纬度坐标(配合 `lng` 字段使用) +- 前端组件:`` +- 需要两个字段:`lat`(纬度)和 `lng`(经度) +- 示例: +```sql +`lat` int(11) NOT NULL COMMENT '纬度', +`lng` int(11) NOT NULL COMMENT '位置,LOC,lat', +``` + +#### URL - 链接 +``` +COMMENT '链接,URL' +``` +- 用途:URL链接 +- 示例: +```sql +`url` varchar(180) NOT NULL COMMENT '链接,URL', +`returnurl` varchar(250) NOT NULL DEFAULT '' COMMENT '回调链接,URL', +``` + +#### IP - IP地址 +``` +COMMENT 'IP,IP' +``` +- 用途:IP地址显示 +- 示例: +```sql +`ip` varchar(40) NOT NULL COMMENT 'IP,IP', +``` + +#### MSK - 敏感信息脱敏 +``` +COMMENT '手机号,MSK,****' +``` +- 用途:敏感信息脱敏显示(如手机号后4位) +- 参数:脱敏标记 +- 示例: +```sql +`mobile` varchar(30) NOT NULL COMMENT '手机号,MSK,****', +``` + +#### FSIZE - 文件大小 +``` +COMMENT '文件大小|,FSIZE,2' +``` +- 用途:文件大小自动格式化 +- 参数:小数位数(默认2位) +- 自动格式化:根据数值显示为 Bytes/KB/MB/GB... +- 示例: +```sql +`filesize` int(11) NOT NULL COMMENT '文件大小|,FSIZE,2', +``` + +--- + +## 字段类型规则 + +### 字段类型选择 + +| 类型 | 用途 | 示例 | +|-----|------|------| +| `varchar(n)` | 文本 | `varchar(50)`, `varchar(180)` | +| `bigint` | 大整数/时间戳 | `bigint(20)` | +| `int` | 整数 | `int(11)` | +| `text/mediumtext` | 长文本 | `text`, `mediumtext` | + +### 具体规则 + +1. **尽量只用**:`varchar`、`bigint`、`int` +2. **谨慎使用**:`text` 字段类型 +3. **时间日期列**(`times` 结尾):必须用 `bigint` +4. **金额列**: + - 不超过百万:可用 `int` + - 超过百万:用 `bigint` ,不考虑字段对齐,则都用bigint +5. **单文件**:`varchar(50)` +6. **多文件**:`varchar(50 * 文件数量)` +7. **文本列**: + - 适当评估容量 + - 使用 `varchar(20/50/100/180/250)` 等。180及以下建索引效率较高。 +8. **物理单位**(公斤/吨/金额/米/温度/百分比):用 `bigint` +9. **经纬度**(`lat`/`lng`):用 `int` +10. **布尔值**:用 `int` + +### 默认值规则 + +- **字符串**:默认为空字符串 `''` +- **数字**:默认为 `0` +- **禁止 NULL**:所有列都禁止 null + +--- + +## 完整示例 + +### 简单示例 + +```sql +CREATE TABLE `ap_art_post` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `sectionid` int(11) NOT NULL COMMENT '|版块|,DB,ap_art_section', + `artstatus` int(11) NOT NULL COMMENT '|文章状态|,CATA,artstatus', + `artsort` int(11) NOT NULL COMMENT '|推荐排序|,CATA,artsort', + `name` varchar(180) NOT NULL COMMENT '文章标题', + `source` varchar(100) NOT NULL COMMENT '来源', + `author` varchar(50) NOT NULL COMMENT '作者', + `studycnt` int(11) NOT NULL DEFAULT 0 COMMENT '精读数|', + `readcnt` int(11) NOT NULL COMMENT '阅读数|', + `img` varchar(50) NOT NULL COMMENT '缩略图,IMG1', + `descs` varchar(250) NOT NULL COMMENT ',摘要,BR', + `inputuser` int(11) NOT NULL COMMENT '撰写人,CATU,adminuser', + `audituser` int(11) NOT NULL DEFAULT 0 COMMENT '审核人,CATU,adminuser', + `pubtimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '发布时间,DATE', + `content` mediumtext NOT NULL COMMENT ',内容,MD', + PRIMARY KEY (`id`) +) ENGINE = InnoDB COMMENT = '版块文章表'; +``` + +### 复杂示例 + +```sql +DROP TABLE IF EXISTS `demo_normal`; +CREATE TABLE `demo_normal` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID,ENID', + `auditstatus` int(11) NOT NULL COMMENT '|审核状态|,CATA,auditstatus', + `audituser` int(11) NOT NULL DEFAULT 0 COMMENT '审核人,CATU,adminuser', + `audittimes` bigint(20) NOT NULL COMMENT '审核时间,DATE', + `auditmsg` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '审核理由', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '默认标题', + `menuid` int(11) NOT NULL COMMENT '所属菜单,DB,zc_menu', + `filesize` int(11) NOT NULL COMMENT '文件大小|,FSIZE', + `metre` int(11) NOT NULL COMMENT '长度|,METRE', + `bankmoney` bigint(20) NOT NULL COMMENT '贷款金额|,WCNY', + `setdate` bigint(20) NOT NULL COMMENT '设置日期,DATE,Y-m-d', + `settimes` bigint(20) NOT NULL COMMENT '设置时间,DATE', + `dayclock` int(11) NOT NULL COMMENT '|营业时间|,TIME,H:i:s', + `downurl` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '|文档|,IMG,t', + `avar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '头像,IMG1', + `isuse` int(11) NOT NULL COMMENT '|是否使用|,BOOL', + `isopen` int(11) NOT NULL COMMENT '|是否开启|,BOOL,开启.关闭', + `unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '库存单位,UNIT', + `sigstatus` int(11) NOT NULL COMMENT '|单选状态|,CATA,auditstatus', + `mauditstatus` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '多选状态,CATS,auditstatus|~', + `prodcata` int(11) NOT NULL COMMENT '组织结构,CATM,zc_depart', + `areacode` int(11) NOT NULL COMMENT '所在地区,CATM,ciy_arearpc|?', + `renzheng` int(11) NOT NULL COMMENT '认证情况,TBIN,re.nz.he.ng|?', + `ppint` int(11) NOT NULL COMMENT '|临时字典|,TINT,1:aaa.3:bbbb.5:cccc', + `npcyc` int(11) NOT NULL COMMENT '|执行周期|,CYC', + `runsec` int(11) NOT NULL COMMENT '执行用时|,SEC', + `acttm` int(11) NOT NULL COMMENT '活动期数|,INT,第?期', + `imgs` varchar(800) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '活动花絮,IMG,?50', + `ton` bigint(20) NOT NULL COMMENT '吨位|,TON', + `price` bigint(20) NOT NULL COMMENT '单价|,CNY', + `lat` int(11) NOT NULL COMMENT ',纬度', + `lng` int(11) NOT NULL COMMENT '|位置|,LOC,lat', + `pct` int(11) NOT NULL COMMENT '百分比|,PCT', + `url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '链接,URL,跳转', + `weightg` bigint(20) NOT NULL COMMENT '体重|,KG,1,KG|1000|吨', + `eartmpr` int(11) NOT NULL COMMENT '耳温|,TC,3', + `qian` bigint(20) NOT NULL COMMENT '中式钱|,LNY', + `meishi` bigint(20) NOT NULL COMMENT '美式钱|,SNY', + `weight` bigint(20) NOT NULL COMMENT '重量|,WGT,G.*KG.TON,1', + `height` bigint(20) NOT NULL COMMENT '长度|,LGH', + `skt` bigint(20) NOT NULL COMMENT '科学数|,BET,SKT,1000,1', + `idcard` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '身份证号,MSK,******#*', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + `content` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',介绍,BR', + `md` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',富文本,MD', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 78 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '复杂功能表' ROW_FORMAT = Dynamic; + +``` + +--- + +## 前端组件对应表 + +| 列注释组件 | 前端HTML组件 | 说明 | +|-----------|------------|------| +| CATA | `` | 字典下拉 | +| CATU | `` | 用户下拉 | +| DB | `` | 关联表下拉 | +| CATM | `` | 级联选择 | +| CATS | `` | 多选框 | +| TBIN | `` | 位运算多选 | +| BOOL | `` | 开关 | +| IMG1 | `` | 单图上传 | +| IMG | `` | 多图上传 | +| DOWN | `` | 文件上传 | +| DATE | `` | 日期选择 | +| TIME | `` | 时间点选择 | +| LOC | `` | 地图选择 | +| BR | `` | 多行文本 | +| MD | `` | Markdown编辑器 | +| CNY | `` | 金额输入 | +| WGT | `` | 重量输入 | +| LGH | `` | 长度输入 | +| PCT | `` | 百分比输入 | +| SEC | `` | 时长输入 | +| CYC | `` | 周期输入 | +| UNIT | `` | 单位编辑 | +| BET | `` | 小数输入 | +| INT | `` | 普通输入 | + +--- + +## 数据格式化对照表 + +| 组件名 | 存储值 | 显示值 | +|-------|-------|-------| +| CNY | 1000000 | 10,000.00元 | +| MCNY | 1000000 | 100.00元 | +| WCNY | 1000000 | 1.00万元 | +| WCNY | 10000000000 | 1.00亿元 | +| WGT | 1000 | 1.00千克 | +| WGT | 1000000 | 1.00吨 | +| LGH | 1000 | 1.00米 | +| LGH | 1000000 | 1.00公里 | +| PCT | 50 | 50.00% | +| SEC | 60 | 1分钟 | +| SEC | 3600 | 1小时 | +| CYC | 7*86400 | 7天 | +| CYC | -1 | 1月 | +| DATE | 1750889011 | 2025-03-18 10:23:31 | +| DATE,Y-m-d | 1750889011 | 2025-03-18 | +| TIME | 1 | 00:00 | +| TIME | 37201 | 10:20 | +| BOOL,✔.✘ | 1 | ✔ | +| BOOL,✔.✘ | 2 | ✘ | +| BOOL,开启.关闭 | 1 | 开启 | +| BOOL,开启.关闭 | 2 | 关闭 | +| FSIZE | 1024 | 1.00KB | +| FSIZE | 1048576 | 1.00MB | +| INT,分 | 100 | 100分 | +| INT,第?期 | 5 | 第5期 | + +--- + +### 生成SQL + +根据详细设计中的数据表设计。 +通过中英文字段名,在列注释中给出最匹配的组件配置。 +**索引**:不加索引。 +**字段类型**:选择合适的类型(不要滥用 `text`) +**默认值**:设置合理的默认值 +**禁止NULL**:避免NULL值带来的性能问题 + +生成CREATE TABLE语句。 + + +## 最佳实践 + +### 组件选择建议 + +| 业务场景 | 推荐组件 | 原因 | +|---------|---------|------| +| 状态/类型/等级 | CATA | 方便维护字典 | +| 审核人/操作人 | CATU | 从用户表读取 | +| 树形分类 | CATM | 支持级联选择 | +| 多选标签 | CATS | 逗号分隔存储 | +| 开关状态 | BOOL | 直观易用 | +| 金额 | CNY/WCNY | 自动格式化 | +| 图片 | IMG1/IMG | 支持预览和上传 | +| 文件 | DOWN | 支持下载 | +| 富文本 | MD | Markdown支持 | +| 地理位置 | LOC | 地图选点 | +| 多级单位 | UNIT | 自动换算 | + + +## 使用PGSQL特殊字段 +MariaDB/Mysql数据库不适用。 +推荐使用geometry、vector、age图、jsonb、gin、array、range、brin等,以提升索引能力为主。 + + +## 附录:参考文件 + +- `/c5_ciyon.sql` - 数据库SQL示例 + diff --git a/aiskill/ciyon-数据库规划.md b/aiskill/ciyon-数据库规划.md new file mode 100644 index 0000000..025258b --- /dev/null +++ b/aiskill/ciyon-数据库规划.md @@ -0,0 +1,137 @@ +# 数据库规划指导文档 + +你是数据库规划设计师。 +Ciyon系统采用**元数据驱动**的设计理念。 +通过**列注释**实现CURD页面源代码自动生成。 + +## 输出格式要求 + +每个数据表应按照下面模版格式输出,不要带任何 Markdown 格式: + +``` +数据表中文名1 数据表英文名1 +中文列名称1(英文列名1)、中文列名称2(英文列名2)、中文列名称3(英文列名3)... +(如某些列有下拉的可选值)中文列名称: 可选值1、可选值2、可选值3... + +数据表中文名2 数据表英文名2 +中文列名称1(英文列名1)、中文列名称2(英文列名2)、中文列名称3(英文列名3)... +(如某些列有下拉的可选值)中文列名称: 可选值1、可选值2、可选值3... +``` + +**格式说明:** +- 第一行为数据表中文名称和英文名称 +- 第二行为列字段 +- 第三行及以后为某些列的可选值说明,可有可无 + +**示例:** +``` +版块文章表 ap_art_post +文章状态(artstatus)、版块(sectionid)、文章标题(name)、来源(source)、作者(author)、精读数(studycnt)、阅读数(readcnt)、缩略图(img)、摘要(descs)、撰写人(inputuser)、审核人(audituser)、发布时间(pubtimes)、内容(content) +文章状态: 待审核.已发布.已下架 + +版块表 ap_art_section +版块名称(name)、分组名(ngroup)、责任人(adminuser)、待审数(auditcnt)、文章数(artcnt)、创建时间(addtimes) +``` + + + +## 数据库规划方法 + +### 表命名规则 + +1. **格式**:`前缀_主表英文名` +2. **避免下划线**:英文名尽量不用下划线 +3. **使用缩写**:英文名要短,使用常用缩写 + +### 主子表命名 + +- 主表:`xx_task` +- 子表:`xx_taslog` +- **改主表名** 修改主表为 `xx_taskbase` +- 确保:搜索主表名不会匹配到子表名 + +``` + +### 字段命名规则 + +| 英文列名 | 说明 | 示例 | +|---------|------|------| +| `id` | 自增主键 | - | +| `vuser` | 所属用户ID(整个表只有一个用户字段用前缀v) | `vuser` | +| `addtimes` | 添加时间(自动生成代码,在insert时赋值now) | `addtimes` | +| `uptimes` | 更新时间(自动生成代码,添加更新均赋值now) | `uptimes` | +| `name` | 名称/标题 | `name` | +| `csort` | 排序 | `csort` | +| `upid` | 上级父ID | `upid` | +| `descs` | 描述 | `descs` | +| `{表名}id` | 关联表ID | `sectionid` | +| `{缩写}user` | 其他用户关联 | `audituser`, `selleruser` | +| `{缩写}times` | 时间日期 | `audittimes`, `pubtimes` | +| `{缩写}status` | 状态 | `artstatus`, `cashstatus` | +| `{缩写}type` | 类型 | `ordertype`, `paytype` | +| `{缩写}level` | 等级 | `userlevel`, `auditlevel` | +| `{缩写}img` | 单图 | `bannerimg` | +| `{缩写}imgs` | 多图 | `bannerimgs` | +| `{缩写}file` | 单文件 | `docfile` | +| `{缩写}files` | 多文件 | `docfiles` | + +**注意事项:** +- 不要直接使用 `desc`,使用 `descs` +- 不要直接使用 `key`,使用 `keyw` +- 英文列名除上述表格通用名称外,其余列名应全局唯一 +- 字典列,应全局字典名唯一 +- 列名与字典名要相同。 + +- **字段名要有语义性**:避免使用过于简短或通用的字段名,如 `mode`、`status`、`type`、`opt` 等,应使用具有明确语义的名称,如 `attrmode`、`bookopt` 等。 + +### 特殊字段类型 + +**坐标字段**: +- 经纬度坐标使用 `lat`(纬度)和 `lng`(经度)字段名 +- 存储格式:将实际值乘以 1000000 后存储为整数 +- 例如:实际值 30.258912 → 存储为 30258912 +- 目的:避免浮点数精度问题,提高查询效率 +- 前端使用时需除以 1000000 恢复原始值 + +### 中文列名规则 + +- **长度**:尽量简短 +- **含义**:清晰描述列的含义 +- **对齐标记**: + - CATA/CATU/BOOL/URL 组件:`|状态|`(居中) + - BET/CNY/WGT/PCT/TC/METRE/SEC/INT/CYC 组件:`金额|`(右对齐) + +--- + + +## 数据表英文名要求 + +- 格式为"统一前缀_主表英文名" +- 英文名尽量不要有下划线 +- 英文名尽量用缩写,短一些 +- 英文子表名与英文主表名如果是包含关系,在主表名后面适当少一个字母或主表后加 base,确保搜索主表名不会搜到子表名 + +## 英文列名要求 + +- 尽量不要有下划线 +- 状态 status/type/level 等通用字段,要用专有单词 + 通用单词,英文列名保证整个输出的文本唯一(例如 table123status、table123type 等) +- 添加时间,统一用 addtimes。每个表第一个时间用这个单词 +- 添加人关联的用户 ID,统一用 vuser。每个表第一个用户用这个单词 +- 简易审批的列名称,统一用 audituser/audittimes/auditstatus/auditmsg +- 集中审批的列名称,只需要 auditstatus,具体审批功能在通用审批表 +- 更新时间,统一用 uptimes +- 整个表中,尽量有一个英文列名为 name 的列。每个表的标题、名称等,用这个单词 +- 排序列,统一用 csort +- 上级父 ID,统一用 upid +- 与其他表关联的所属列,例如所属项目,统一用"所属主表英文名" +- 其他用户关联,例如卖家,统一用 xxuser。以 user 结尾 +- 自增 ID,统一用 id +- 代表时间日期的英文列名,应以 times 为结尾 +- 不要直接用 desc,如需要可用 descs +- 不要直接用 key,如需要可用 keyw +- 与图片上传、附件有关的列,单个文件的,以 img、file 为结尾。多个附件的,以 imgs、files 结尾 +- 英文列名仅填英文,不包含其他任何包含可选值的信息 + +## 中文列名要求 + +尽量限制在 2-6 个字以内,描述清楚列的含义。 \ No newline at end of file diff --git a/aiskill/ciyon-测试用例.md b/aiskill/ciyon-测试用例.md new file mode 100644 index 0000000..2dac455 --- /dev/null +++ b/aiskill/ciyon-测试用例.md @@ -0,0 +1,18 @@ +# Ciyon测试用例 Skill指南 + +## 框架概述 + +CiYon是一个基于uniapp的轻量级跨平台移动应用开发框架,采用Vue3 + Vite技术栈,支持小程序、H5、App多端发布。 + +## 测试用例 +为每个API接口编写两个测试脚本及数据集 +红数据数据集,接口一定会报错 +蓝数据数据集,接口一定会成功 +每个接口必须先写测试脚本及红蓝测试数据集。 + +## API命名规范 +测试脚本中的API调用必须遵循命名规范: +- 前端调用格式:`{模块名}.{页面名}_{操作名}` +- 后端函数名:`json_{页面名}_{操作名}` +- 例如:前端 `func: 'aimap.index_init'`,后端函数 `json_index_init()` +- 测试时需确保前端 func 参数与后端函数名完全对应 diff --git a/aiskill/ciyon-移动前端.md b/aiskill/ciyon-移动前端.md new file mode 100644 index 0000000..f2a502b --- /dev/null +++ b/aiskill/ciyon-移动前端.md @@ -0,0 +1,491 @@ +# Ciyon移动端开发框架 Skill指南 + +## 框架概述 + +CiYon是一个基于uniapp的轻量级跨平台移动应用开发框架,采用Vue3 + Vite技术栈,支持小程序、H5、App多端发布。 + +## 项目结构 + +``` +ai_mapshare/ +├── fapp/ciyon_ap/ # uniapp移动端项目 +│ ├── pages/ # 页面目录 +│ │ ├── main/ # 参考主页面 +│ │ ├── me/ # 个人中心 +│ │ ├── pub/ # 公共页面 +│ │ └── demo/ # 示例页面 +│ ├── components/ # 60+自定义组件库 +│ ├── util/ # 工具函数库 +│ ├── static/ # 静态资源 +│ ├── App.vue # 应用入口 +│ ├── main.js # 主入口文件 +│ ├── pages.json # 页面配置 +│ ├── manifest.json # 应用配置 +│ └── vite.config.js # Vite配置 +``` + +## 技术栈 + +- **前端**: Vue3 + Vite + Uniapp +- **通信**: HTTP POST API(JSON) +- **参考页面**: + - /fapp/ciyon_ap/pages/demo/curd/demo_list.vue + - /fapp/ciyon_ap/pages/demo/curd/demo_edit.vue + - /fapp/ciyon_ap/pages/main/index.vue + - /fapp/ciyon_ap/pages/main/me.vue + + +## 开发规范 + +### 页面开发规范 + +- 页面存放在 `pages/` 对应模块目录下 +- 页面注册在 `pages.json` 中配置路由 +- 使用uniapp标准生命周期 + +### 目录及文件名命名规范 + +- 在`pages/`下新建项目目录 +- `/pages/[项目目录]/index.vue`作为首页主页面 +- `/pages/[项目目录]/me.vue` 作为个人中心主页面 +- `/pages/[项目目录]/xx_xx.vue` 其他页面均要有一定含义,建议与数据表名称相关。模块_功能 + - 例如:`order_list.vue` 列表页、`order_info.vue` 详情页、`order_edit.vue` 编辑页、`order_ship.vue` 功能页 + - 例如: `user_info.vue`、`user_order.vue`、`user_address.vue` +- 页面起名尽量贴合业务,不要用`detail.vue`、`list.vue`、`edit.vue`、`add.vue`等通用名称。 + +### vue文件API方法命名规范 + +- 页面初始化方法一般为`init` + - func: 'xx.xx_init' + - 列表页,初始化传入once(bool)参数,once=true,首次请求获取初始化数据 + this.pagepost.once = !this.init.once; + 参考 /fapp/ciyon_ap/pages/demo/curd/demo_list.vue + 参考 /fapp/ciyon_ap/pages/demo/curd/demo_edit.vue + API参考 /web/ampap/demo/demo.php +- 更新 `update`、删除 `delete`、审核 `audit`等方法按此命名。 + +- 综合举例: + - 前端文件: /pages/[项目目录]/[模块]_list.vue + - 前端调用: this.callfunc({func:'[模块].[功能]_init'})、this.callfunc({func:'[模块].[功能]_delete'}) + - 后端文件: /web/am[项目目录]/[模块].php + - 后端函数: json_[功能]_init()、json_[功能]_delete() + + +### 组件使用规范 + +组件前缀统一使用 `ciy-`,已提供60+组件: + +**表单组件**: +- `ciy-input` - 基础输入框 +- `ciy-textarea` - 文本域 +- `ciy-select` - 选择器 +- `ciy-radio` - 单选 +- `ciy-checkbox` - 复选 +- `ciy-checkitem` - 检查项 +- `ciy-switch` - 开关 +- `ciy-selbool` - 布尔选择 +- `ciy-selcas` - 级联选择 +- `ciy-selpage` - 页面选择 +- `ciy-slider` - 滑块 +- `ciy-inputnumber` - 数字输入 +- `ciy-inputbet` - 范围输入 +- `ciy-inputcyc` - 周期输入 +- `ciy-inputdatetime` - 日期时间 +- `ciy-inputdaterange` - 日期范围 +- `ciy-inputtimepoint` - 时间点 +- `ciy-inputunitedit` - 单位编辑 +- `ciy-inputocr` - OCR输入 +- `ciy-capcode` - 验证码输入 +- `ciy-searchbar` - 搜索栏 +- `ciy-query` - 查询组件 +- `ciy-selmap` - 地图选择位置 +- `ciy-mapbox` - 地图展示组件(基于 Leaflet) +- `ciy-upload` - 文件上传 + +**展示组件**: +- `ciy-showmoney` - 金额展示 +- `ciy-shownum` - 数字展示 +- `ciy-showimgs` - 多图片展示 +- `ciy-textmore` - 文本展开 +- `ciy-chart-pie` - 饼图 +- `ciy-markdown` - Markdown渲染 +- `ciy-svgimg` - 单图片显示 +- `ciy-totalsem` - 总计语义 +- `ciy-gesture` - 手势识别 +- `ciy-handsign` - 手势识别 +- `ciy-audio` - 音频播放 + +**功能组件**: +- `ciy-camera` - 相机(在ciy-aicameraocr中) +- `ciy-aivoice` - AI语音 +- `ciy-gesture` - 手势识别 +- `ciy-handsign` - 手势识别 +- `ciy-btreader` - 蓝牙读卡器 +- `ciy-header` - 页面头部 +- `ciy-tabbar` - 底部导航 +- `ciy-dialog` - 弹窗 +- `ciy-toast` - 提示 +- `ciy-alert` - 警告 +- `ciy-popmenu` - 弹出菜单 +- `ciy-calendar` - 日历 +- `ciy-ratestar` - 评分 +- `ciy-segment` - 分段器 +- `ciy-swiper` - 轮播 +- `ciy-swipelist` - 滑动列表 +- `ciy-listend` - 列表底部 +- `ciy-movable` - 可移动 + +**动画组件**: +- `ciy-ani` - 动画 +- `ciy-aniheight` - 高度动画 +- `ciy-anipop` - 弹出动画 + +**认证组件**: +- `ciy-auth` - 认证 + +**自定义组件**: +- `diy-apuser` - AP用户 +- `diy-xxlist` - XX列表 + +**调试组件**: +- `ciy-dbg` - 调试 + +### API通信规范 + +**请求封装**: +```javascript +// 使用 callfunc 方法调用API +await this.callfunc({ + func: 'main.index_init', // API函数名,格式:后端API文件名.前端页面名_方法 + data: { // 要发送的数据 + id: 123, + name: 'test' + }, + srv: 't', // 服务器标识,默认't' + loadhide: false, // 是否隐藏加载提示,默认false + cache: 0, // 缓存时间(秒),0不缓存,一般不缓存 + cachekey: '' // 自定义缓存键 +}).then(res => { + // 处理响应 +}); +``` + +**API路径规则**: +- 前端调用格式:`{func: 'module.method'}` +- URL映射:通过 `jsnurl` 配置映射到实际URL +- API命名与页面关联:方法名应与前端页面文件名对应,便于识别和维护。格式建议:`{后端API文件名}.{前端页面名}_{操作方法名}` + - 示例:`{func: 'aaa.index_init'}` 对应后端API `/web/ambap/aaa.php`、对应移动端 `pages/aaa/index.vue` + - 示例:`{func: 'bbb.detail_init'}` 对应后端API `/web/ambap/bbb.php`、对应移动端 `pages/bbb/detail.vue` +- 示例: + - 前端调用:`{func: 'main.index_init'}` + - 另一个示例:`{func: 'login.login_mobile'}` +- **重要**:后端函数名必须与前端的 func 参数完全一致,例如前端 `func: 'aimap.index_init'`,后端函数名为 `json_index_init()` + +**响应格式**: +```javascript +// 成功响应 +{ + code: 1, // 1表示成功 + // 其他业务数据... +} + +// 失败响应 +{ + code: 非1, // 非1表示失败,2表示需要重新登录 + errmsg: '错误信息', // 错误提示 + // 其他错误数据... +} +``` + +### 工具函数 + +**util/ciy.js** - 核心工具库: + +**API请求**: +- `callfunc(opt)` - 统一API请求方法 +- `calltxt(opt)` - 纯文本请求 + +**存储管理**: +- `getstorage(key, def)` - 读取storage +- `setstorage(key, val)` - 写入storage +- `removestorage(key)` - 删除storage(支持通配符*) +- `clearstorage()` - 清空所有storage + +**用户认证**: +- `getauth()` - 获取用户信息,未登录自动调起登录 + +**提示交互**: +- `alert(content)` - 弹窗提示(await) +- `toast(content, icon)` - 轻提示(await) +- `askmsg(content)` - 询问确认框(await) +- `inputmsg(content, def)` - 输入框(await) +- `popmenu(options)` - 弹出上拉菜单(await) + +**页面跳转**: +- `gourl(url, type, initdata, initkey)` - 页面跳转 + - `http://` - 打开H5页面 + - `!` - 打开原型图页面 + - `*` - alert提示 + - `$` - 需要登录 + - `%` - 需要登录且完善信息 + - `^` - 需要登录且实名认证 + - `&` - 需要登录且绑定银行卡 +- `goweb(url, name)` - 带授权打开H5页面 +- `goloc(lat, lng, bet)` - 打开地图 +- `gophone(phone)` - 拨打电话 + +**数据处理**: +- `json_parse(data)` - 字符串转json +- `json_string(data)` - json转字符串 +- `toint(val)` - 转整数 +- `tofloat(val)` - 转小数 +- `tostr(val)` - 转字符串 +- `tostamp(val)` - 转时间戳 +- `todatetime(val)` - 时间戳转日期时间 +- `tofix(val, dec)` - 处理小数显示 +- `tounit(val)` - 显示多级单位 +- `tocyc(val)` - 显示周期 月/天/分钟 +- `tomsk(val)` - 显示文字遮罩 +- `totimespan(val)` - 将时间转成 xx天后/xx小时前 +- `totimesec(val)` - 将秒数转成 xx天/xx小时 +- `totimepoint(val)` - 将数字转成 xx:xx[:xx] +- `todayage(val)` - 返回日龄天数 +- `tobr(val)` - 将\n替换成
,用于显示多行文本。结合 v-html 使用:`v-html="tobr(item.descs)"` +- `topad0(num, len)` - 数字前面补0 +- `tonumtho(num)` - 整数部分千分位显示 +- `tonumdec(num)` - 小数部分 + +**类型校验**: +- `isfloat0(val)` - 校验float是否0 +- `isarray(val)` - 判断是否array +- `isobject(val)` - 判断是否object +- `islocalmedia(val)` - 判断是否本地文件 +- `isimg(val)` - 是否图片 +- `isvideo(val)` - 是否视频 +- `file_ext(filename)` - 获取文件扩展名 +- `file_stor(url)` - db存储的url转云存储的绝对url + +**字典处理**: +- `ccode(catalog, val, key, def)` - 以id查询字典中的值 +- `scode(catalog, vals, key)` - 以ids查询字典中的多个name +- `mcode(catalog, val)` - 以id查询字典中的多级name +- `bcode(catalog, val)` - 以int查询字典中的多个name +- `hascode(val, codes)` - 某个数字是否在多个数字中 +- `hasstr(str, substr)` - 字符串是否包含另一个字符串 + +**编码转换**: +- `enbase64(str)` - base64编码 +- `svg2bg(svg)` - 将svg转成backgroundImage语法 + +**其他工具**: +- `sleep(ms)` - 延迟毫秒(await) +- `copyboard(text)` - 拷贝文本 +- `getstrparam(str, sep)` - 解析简易参数 +- `urlparam(url)` - 解析url +- `shareparam(opt)` - 分享链接转换 +- `arrayfind(arr, val)` - 从数组中匹配值 +- `objdeepmerge(dest, src)` - object合并 +- `objtolist(list, obj/id)` - 将object并入list数组,将id从list数组中移除 +- `objclone(obj)` - 深度复制obj +- `str2date(str)` - 字符串转Date +- `bin2hex(bin)` - bin转hex字符串 +- `hex2bin(hex)` - hex字符串转bin +- `style2obj(style)` - 将style属性转成object +- `nopower(power)` - 权限检查 +- `getroute()` - 获取当前路由 +- `getpage(idx)` - 获取当前/上页页面 +- `getrect(selector)` - 获取元素尺寸(await) +- `file_upload1(file)` - 上传单个文件返回url(await) +- `file_uploads(files)` - 上传多个文件(await) +- `go(e, cb)` - golang式异步错误处理 +- `goe(e, cb)` - golang式异步错误处理(增强版) + +**页面控制**: +- `pagenoscroll(isno)` - 禁止页面滚动 +- `settheme()` - 设置暗黑模式 +- `setfont()` - 设置敬老模式 +- `setTabbar()` - 设置Tabbar +- `executepnt(pntid)` - 触发积分埋点 + +**加载资源**: +- `load_ciydict()` - 获取远程静态dict(await) +- `load_svgicon(url)` - 获取远程静态svgicon(await) + +**扫描功能**: +- `scanqr()` - 扫二维码(await) + +### 开发流程 + +**App.vue 全局配置**: +- app.globalData.jsnurl.t,配置入口域名的API入口 例如 'https://ciyon.local.ciy.cn/ambap/' +- 在development中 配置本地的入口域名的API入口(用于调试,一般以.local.ciy.cn为主体) +- app.globalData.tabbarArr,作为底部TabBar定义,全局定义给ciy-tabbar组件使用。 +- tabbar虽然自定义,但pages.json需正常配置。且App.vue的globalData.mainpage应指向首页。 +- tabbar图标用svg定义,默认双色模式。选中颜色bgsel1/bgsel2,未选中颜色bggray1/bggray2。 +- **tabbarArr 配置要点**: + - `fullpath` 必须与实际页面路径一致,如 `/pages/aimap/index` + - `name` 使用 i18n 代码,需在 `util/lang/*.json` 中同步配置翻译 + - 所有 tabbar 页面都必须在模板底部添加 `` 组件 +- **语言翻译配置**:所有 tabbar 的 name(如 tabbar.topic、tabbar.msg)需在所有语言文件(zh-Hans.json、en.json、zh-Hant.json、ja.json、fr.json)中添加对应的翻译 + +**新建页面**: +1. 在 `pages/` 对应模块下创建 `.vue` 文件 +2. 在 `pages.json` 中注册页面路由 +3. 使用组件和工具函数开发功能 + +**新建组件**: +1. 在 `components/` 下创建组件目录和文件 +2. 组件名使用 `ciy-` 前缀 +3. 支持通过 props 传递参数 +4. 通过 $emit 触发事件 +5. 有用户的明确指令,才能新建组件 + +**调用API**: +1. 确定API函数名,格式:`模块.方法`,如 `main.index_init` +2. 使用 `callfunc()` 发送请求: + ```javascript + var retjson = await this.callfunc({ + func: 'main.index_init', + data: { + id: 123 + } + }); + if (retjson.code != 1) + return this.alert(retjson.errmsg); + // 处理成功响应 + ``` +3. 处理返回数据,成功时 `code=1`,失败时有 `errmsg` + +**首次请求优化**: +页面首次加载通过 `once` 标志位一次性返回所有初始化数据,减少后续翻页重复带出初始化数据: +```javascript +async getlist() { + this.pagepost.pageno = this.pageno + 1; + this.pagepost.once = !this.init.once; + var retjson = await this.callfunc({ + func: 'demo.index_list', + data: this.pagepost + }); + this.pageno++; + if (this.pageno == 1) + this.init.list = []; + this.init = this.objdeepmerge(this.init, retjson); + if (retjson.once) { + } +} +``` + + +### 样式规范 + +- 全局样式: `util/style.css` +- 组件内使用 scoped CSS +- 使用 rem 单位适配 + +### 常用组件 +**表单组件**:ciy-input、ciy-select、ciy-radio、ciy-checkbox、ciy-selbool、ciy-inputbet、ciy-upload等 +**展示组件**:ciy-showmoney、ciy-showimgs、ciy-markdown等 +**功能组件**:ciy-auth、ciy-dialog、ciy-toast、ciy-popmenu等 +**导航组件**: +- ciy-header - 页面头部(所有页面使用,navigationStyle为custom) +- ciy-tabbar - 底部导航(tabbar页面必须添加) +- ciy-segment - 分段器(使用 `:lis` 属性传递数组,如 `:lis="[{id:1,name:'选项1'}]"`,不要使用 `:options`) + +**地图组件**: +- ciy-selmap - 国内地图选择组件(微信小程序用) +- ciy-mapbox - 通用地图展示选择组件(基于 Leaflet) +- 经纬度在数据库中存储时,应乘以 10000000,取整数 +- 例如:30.2589121 → 存储为 302589121 +- 在前端使用时,除以 10000000 恢复原始值 + +**ciy-mapbox组件地图瓦片提供商**: +- 推荐使用 Esri World Imagery(卫星影像)+ CartoDB Positron Labels(标注层) +- Esri World Imagery 提供高质量的卫星影像,适合展示地理位置 +- CartoDB 标注层提供清晰的文字标注,可叠加在影像层上方 + +**复杂查询组件**: +- ciy-query - 支持多种输入类型(input、select、checkbox、radio、date、range等) + + +### 常用配置 + +**pages.json** - 页面配置: +- 页面路由 +- 导航栏样式 +- 底部TabBar(仅需配置 `pagePath`,其他配置由 App.vue 的 `tabbarArr` 定义) +- 全局样式 +- 分包配置:主包放置核心页面(如 aimap、pub),其他功能页面放入子包以优化性能 + +**manifest.json** - 应用配置: + +**manifest.json** - 应用配置: +- 应用信息 +- 权限配置 +- SDK配置 +- 多端打包设置 + +**vite.config.js** - 构建配置: +- 别名配置 +- 插件配置 +- 构建优化 +- 所有页面编译时都带ciy-auth、ciy-alert、ciy-toast、ciy-popmenu组件,无需手写 + +## 框架已完成事项(无需开发) + +### 注册登录、找回密码功能与后端login.*接口 + 复用,基本无需修改ciy-auth组件和login API接口 + 新建,需复制ap_user、ap_usr_*有关表结构。 + 登录成功,自动同时加载所有字典项到前端,前端缓存到localstorage备用。 + +### 默认navigationStyle为custom + 使用ciy-header组件定义顶部标题栏。可复制新组件自定义。 + 使用ciy-tabbar组件定义底部导航栏。可复制新组建自定义样式。已自动隐藏系统自带的默认tabbar。 + +### 已完成通用组件 + 任意页面均支持未登录 弹出登录/注册界面。 + 弹出框已美化,支持ciy-alert、ciy-toast + 弹出菜单已美化,ciy-popmenu组件,支持多种排版方式,突破了默认组件的数量限制。 + +### 已给所有page注入通用变量 + this.g,为所有缓存的字典项 + this.me,为登录的用户完整数据 + this.init,作为页面初始化,统一接收后端请求返回的数据。一般用this.init.code!=1作为骨架屏标识。 + this.opn,页面传入参数可随意使用,不用在onload另行存储。 + this.pageno,翻页页码 + this.pagedata,页面间传递数据,对于页面深度点击传参非常有效。可替代vuex/Pinia + this.pagepost,页面object变量 + + +## 注意事项 + +1. **命名规范**: 组件统一使用 `ciy-` 前缀目录 +2. **API调用**: 使用 `callfunc()` 方法,函数名格式为 `模块.方法`,后端函数名必须与前端 func 参数对应 +3. **Token管理**: 自动处理Token,无需手动管理,Token存储在 `localStorage` 中 +4. **响应格式**: 成功 `{code: 1, ...}`,失败 `{code: 非1, errmsg: '错误信息', ...}` +5. **组件复用**: 优先使用现有组件,避免重复开发 +6. **多端适配**: 使用uniapp条件编译处理平台差异 +7. **性能优化**: + - 使用 `cache` 参数设置缓存时间 + - 避免频繁请求 + - 使用 `loadhide: true` 取消不必要的加载提示 + - 合理使用分包,主包放置核心页面,其他功能放入子包 +8. **页面跳转**: 使用 `gourl()` 方法,支持多种特殊前缀($需要登录、*提示等) +9. **数据传递**: 使用 `pagedata` 对象进行页面间数据传递 +10. **字典数据**: 通过 `g` 对象访问字典数据,自动同步更新 +11. **用户信息**: 通过 `me` 对象访问当前用户信息 +12. **路由参数**: 通过 `opn` 对象访问页面URL参数 +13. **用户认证**: 注册、登录、找回密码等功能已集成在 `ciy-auth` 组件中,直接复用,无需重复开发 +14. **TabBar配置**: + - pages.json 中只配置 `pagePath`,其他样式由 App.vue 的 `tabbarArr` 定义 + - tabbarArr 中的 `fullpath` 必须与实际页面路径完全一致 + - 所有 tabbar 页面必须在模板底部添加 `` + - tabbarArr 中的 `name` 需在所有语言文件中配置翻译 +15. **组件使用注意**: + - ciy-segment 使用 `:lis` 属性传递数组,不要使用 `:options` + - 遵循框架定义的属性名称,避免使用非标准属性 + +## 编译及自动调试 +运行cmd,编译移动端H5 +"D:\Program Files\HBuilderX\cli.exe" publish --platform h5 --project "D:\Dreams\ciy\ai_xxx\fapp\ciyon_ap" --webTitle 众产 + +编译后访问: https://xxx.local.ciy.cn/ 调试 diff --git a/aiskill/ciyon-网站seo.md b/aiskill/ciyon-网站seo.md new file mode 100644 index 0000000..d63c2bb --- /dev/null +++ b/aiskill/ciyon-网站seo.md @@ -0,0 +1,816 @@ +# Ciyon网站开发Skill指南 - AI驱动的SEO/GEO优化系统 + +## 项目概述 +Ciyon框架采用原生PHP+JS开发,专注SEO优化和搜索引擎友好性。通过AI自动生成文章、定时发布、关键词管理等功能,实现网站的自动化SEO优化,适合快速搭建企业官网、博客、内容管理系统。 + +- **AI自动生成文章**:关键词自动生成、推广方向设计、文章可读性与SEO结合 +- **SEO优化**:针对传统搜索引擎(Google、百度) +- **GEO优化**:针对AI搜索引擎(ChatGPT、Claude、Bing AI) + + +### 核心模块 +1. **栏目管理**(www_list_cate)- 定义内容分类和SEO策略 +2. **已发文章**(www_list_art)- 已发布并在前台显示的文章 +3. **待发文章**(www_list_preart)- AI生成的文章池 +4. **单页管理**(www_single)- 独立页面(关于我们、联系我们等) +5. **SEO规划**(www_seoplan)- 制定SEO优化计划 +6. **关键词库**(www_keyword)- 存储SEO关键词 +7. **锚内关键词**(www_seoword)- 自动插入的关键词链接 +8. **文章模版**(www_tmplart)- SEO专用文章模板 +9. **浓缩知识**(www_content)- 与产品相关的浓缩信息 +10. **用户线索**(www_customer)- 收集访客咨询 + + +## 核心架构 + +### 网站内容管理四大模块 + +#### 1. 栏目管理(www_list_cate) +**功能**:定义网站的内容分类,每个栏目可配置独立的SEO策略 + +**核心字段**: +```sql +CREATE TABLE `www_list_cate` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '栏目ID', + `name` varchar(180) NOT NULL COMMENT '栏目名', + `precnt` int(11) NOT NULL COMMENT '储备文章数(待发文章池)', + `daysent` int(11) NOT NULL COMMENT '日发布量(每天自动发布多少篇)', + `bprenow` int(11) NOT NULL COMMENT '直发否(是否直接发布,无需审核)', + `promptcute` text NOT NULL COMMENT 'AI生成文章的提示词', + `seotitle` varchar(180) NOT NULL COMMENT 'SEO标题', + `keyw` varchar(180) NOT NULL COMMENT '关键词', + `descs` varchar(250) NOT NULL COMMENT '摘要', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间', + `vadmin` int(11) NOT NULL COMMENT '操作人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +**使用场景**: +- 普通栏目:公司动态、产品列表、技术文档FAQ等 +- SEO栏目:专门用于SEO优化的栏目,配置AI自动生成文章 + +**配置示例**: +```php +// 普通栏目 +{ + 'name' => '公司动态', + 'precnt' => 5, + 'daysent' => 1, + 'bprenow' => 1, + 'promptcute' => '生成一篇关于公司产品更新的新闻稿', + 'seotitle' => '公司动态 - xx科技有限公司', + 'keyw' => '公司动态,产品更新,新闻资讯', + 'descs' => '了解公司最新动态和产品更新信息' +} + +// SEO栏目 +{ + 'name' => '技术文章', + 'precnt' => 30, + 'daysent' => 3, + 'bprenow' => 0, + 'promptcute' => '生成一篇关于{关键词}的技术文章,要求:1.内容原创 2.结构清晰 3.包含实战案例', + 'seotitle' => '技术文章 - 全栈开发框架', + 'keyw' => 'PHP开发,Golang开发,全栈框架', + 'descs' => '分享PHP、Golang、全栈开发技术文章和实战经验' +} +``` + +#### 2. 已发文章(www_list_art) +**功能**:已发布并在网站前台显示的文章 + +**核心字段**: +```sql +CREATE TABLE `www_list_art` ( + `id` int(11) NOT NULL COMMENT '文章ID', + `cateid` int(11) NOT NULL COMMENT '所属栏目ID', + `clickcnt` int(11) NOT NULL COMMENT '点击量', + `icon` varchar(250) NOT NULL COMMENT '缩略图', + `name` varchar(180) NOT NULL COMMENT '主标题', + `seotitle` varchar(180) NOT NULL COMMENT 'SEO标题', + `keyw` varchar(180) NOT NULL COMMENT '关键词', + `author` varchar(100) NOT NULL COMMENT '作者', + `descs` varchar(250) NOT NULL COMMENT '摘要', + `content` text NOT NULL COMMENT '内容(Markdown格式)', + `csort` int(11) NOT NULL COMMENT '排序', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间', + `vadmin` int(11) NOT NULL COMMENT '操作人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +**自动发布流程**: +1. AI生成文章存入 `www_list_preart`(待发文章表) +2. 定时任务根据栏目配置的 `daysent`(日发布量) +3. 将待发文章移动到 `www_list_art`(已发文章表) +4. 更新网站的sitemap.xml +5. 通知搜索引擎索引 + +#### 3. 待发文章(www_list_preart) +**功能**:AI生成的文章池,等待审核或定时发布 + +**核心字段**: +```sql +CREATE TABLE `www_list_preart` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文章ID', + `cateid` int(11) NOT NULL COMMENT '所属栏目ID', + `preartstatus` int(11) NOT NULL COMMENT '文章状态:10.草稿 20.待发 100.已发', + `icon` varchar(250) NOT NULL COMMENT '缩略图', + `name` varchar(180) NOT NULL COMMENT '主标题', + `seotitle` varchar(180) NOT NULL COMMENT 'SEO标题', + `keyw` varchar(180) NOT NULL COMMENT '关键词', + `author` varchar(100) NOT NULL COMMENT '作者', + `descs` varchar(250) NOT NULL COMMENT '摘要', + `content` text NOT NULL COMMENT '内容(Markdown格式)', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间', + `vadmin` int(11) NOT NULL COMMENT '创建人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +**文章状态流转**: +``` +10.草稿(AI生成)→ 20.待发(人工审核)→ 100.已发(发布到前台) +``` + +**AI生成文章流程**: +```php +// 1. 读取栏目配置 +$cate = $db->getone("SELECT * FROM www_list_cate WHERE id = {$cateid}"); + +// 2. 读取关键词库 +$keywords = $db->get("SELECT * FROM www_keyword WHERE cateid = {$cateid}"); + +// 3. 随机选择关键词 +$keyword = $keywords[array_rand($keywords)]; + +// 4. 替换提示词中的关键词 +$prompt = str_replace('{关键词}', $keyword['name'], $cate['promptcute']); + +// 5. 调用AI生成文章 +$article = ai_generate_article($prompt); + +// 6. 保存到待发文章表 +$db->insert('www_list_preart', [ + 'cateid' => $cateid, + 'preartstatus' => 10, + 'name' => $article['title'], + 'seotitle' => $article['title'], + 'keyw' => $keyword['name'], + 'content' => $article['content'], + 'descs' => mb_substr(strip_tags($article['content']), 0, 250), + 'uptimes' => time(), + 'vadmin' => 0 // 0表示AI生成 +]); +``` + +#### 4. 单页管理(www_single) +**功能**:独立页面,如关于我们、联系我们、隐私政策等 + +**核心字段**: +```sql +CREATE TABLE `www_single` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '页面ID', + `name` varchar(180) NOT NULL COMMENT '主标题', + `seotitle` varchar(180) NOT NULL COMMENT 'SEO标题', + `keyw` varchar(180) NOT NULL COMMENT '关键词', + `author` varchar(100) NOT NULL COMMENT '作者', + `descs` varchar(250) NOT NULL COMMENT '摘要', + `content` text NOT NULL COMMENT '内容(Markdown格式)', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间', + `vadmin` int(11) NOT NULL COMMENT '创建人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +### 辅助SEO优化模块 + +#### 5. SEO规划(www_seoplan) +**功能**:制定SEO优化计划,管理不同阶段的推广策略 + +**核心字段**: +```sql +CREATE TABLE `www_seoplan` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目ID', + `starttimes` bigint(20) NOT NULL COMMENT '开始日期', + `endtimes` bigint(20) NOT NULL COMMENT '结束日期', + `promptseo` text NOT NULL COMMENT '推广方向提示词', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +**使用场景**: +- 制定月度SEO计划 +- 定义阶段性推广主题 +- 指导AI生成文章方向 + +#### 6. 关键词库(www_keyword) +**功能**:存储SEO关键词,供AI生成文章时使用 + +**核心字段**: +```sql +CREATE TABLE `www_keyword` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目ID', + `name` varchar(100) NOT NULL COMMENT '关键词', + `usetime` int(11) NOT NULL COMMENT '使用次数', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +**关键词管理策略**: +- 从百度指数、Google Trends等工具获取热门关键词 +- 使用长尾关键词提高转化率 +- 定期更新关键词库 + +#### 7. 锚内关键词(www_seoword) +**功能**:在文章中自动插入的关键词链接,提升内链权重 + +**核心字段**: +```sql +CREATE TABLE `www_seoword` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目ID', + `name` varchar(100) NOT NULL COMMENT '关键词', + `url` varchar(180) NOT NULL COMMENT '链接地址', + `rank` int(11) NOT NULL COMMENT '权重(0-100)', + PRIMARY KEY (`id`), + UNIQUE KEY `title` (`name`) +) ENGINE=InnoDB; +``` + + +#### 8. 文章模版(www_tmplart) +**功能**:SEO自动生成的栏目专用。 +文章模板主要是在顶部设置全图落地页。 +SEO自动生成的文章,用户阅读质量较差,顶部放置全图片落地页吸引用户浏览。(一般用户从搜索引擎直达本页) +底部AI自动生成的文字,主要给搜索引擎收录用。 + +**核心字段**: +```sql +CREATE TABLE `www_tmplart` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目ID', + `name` varchar(180) NOT NULL COMMENT '模版主题', + `content` text NOT NULL COMMENT '模版内容(Markdown格式)', + `qutime` int(11) NOT NULL COMMENT '引用次数', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +**模版示例**: +```markdown +!图片链接 +!图片链接 +!图片链接 +!图片链接 +!图片链接 +!图片链接 +!图片链接 +!图片链接 +{{text}} +``` + +#### 9. 浓缩知识(www_content) +**功能**:主要是与网站相关产品、服务有关的信息,浓缩成不同方向描述。 +AI随机抽取几个浓缩知识,结合SEO规划的推广方向提示词,生成可发布的文字,再套用文章模版,替换{{text}},完成生成。 + +**核心字段**: +```sql +CREATE TABLE `www_content` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目ID', + `name` varchar(180) NOT NULL COMMENT '内容主题', + `content` text NOT NULL COMMENT '浓缩内容', + `qutime` int(11) NOT NULL COMMENT '引用次数', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +#### 10. 用户线索(www_customer) +**功能**:收集网站访客的咨询和需求信息 + +**核心字段**: +```sql +CREATE TABLE `www_customer` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `fromurl` varchar(180) NOT NULL COMMENT '来源页面', + `mobile` varchar(50) NOT NULL COMMENT '手机号', + `demandinfo` text NOT NULL COMMENT '需求信息', + `addtimes` bigint(20) NOT NULL COMMENT '提交时间', + `contacttimes` bigint(20) NOT NULL COMMENT '接待时间', + `memo` varchar(180) NOT NULL COMMENT '接待备注', + `contactadmin` int(11) NOT NULL COMMENT '接待人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +## AI自动生成文章系统 + +### 定时任务配置 + +**创建自动化任务**: +```php +// 插入任务到 zc_autotask 表 +$db->insert('zc_autotask', [ + 'name' => 'SEO文章生成', + 'runfunc' => 'web\admin\autotask\seo::generate_articles', + 'runparam' => '', + 'nexttimes' => time() + 3600, // 1小时后执行 + 'runcycle' => 3600, // 每小时执行一次 + 'autotaskstatus' => 20, // 等待执行 + 'runtimes' => 0 +]); +``` + +**任务执行函数**: +```php +namespace web\admin\autotask; + +class seo { + // 生成SEO文章 + static function generate_articles() { + // 1. 读取所有需要自动生成的栏目,一般文章储备不足开始生成 + $cates = $db->get("SELECT * FROM www_list_cate WHERE precnt < 5"); + + foreach ($cates as $cate) { + // 2. 读取SEO规划 + $promptseo = $db->get1("SELECT promptseo FROM www_seoplan WHERE cateid = {$cate['id']} and starttimes>{$now} and endtimes<{$now}"); + for ($i = 0; $i < 5; $i++) { + // 生成文章 + self::generate_one_article($cate, $promptseo); + } + } + + return ['code' => 0, 'errmsg' => '文章生成完成']; + } + + // 生成单篇文章 + static function generate_one_article($cate, $promptseo) { + // 1. 如果有,则按$promptseo提示词,用AI从www_keyword中提取几个相关关键词。 + // 2. 如果$promptseo为空,则随机提取几个关键词。 + // 3. 用$promptseo + $cate['prompt'] + 关键词作为提示词,调用call_ai接口生成文章内容。 + // 4. 随机取出一个文章模板,将模板内容与文章内容结合,保存到待发文章表。 + // 5. 更新栏目的待发文章数量。 + } + + // 调用AI接口 + static function call_ai($ai_key, $prompt) { + // 使用框架的AI接口 + $result = \ciy\openai::chat([ + 'model' => $ai_key['model'], + 'messages' => [ + ['role' => 'system', 'content' => '你是一个专业的SEO文章写作助手'], + ['role' => 'user', 'content' => $prompt] + ], + 'api_key' => $ai_key['aikey'], + 'base_url' => $ai_key['baseurl'] + ]); + + return $result; + } +} +``` + +## GEO生成式引擎优化(Generative Engine Optimization) + +### 概念说明 + +**GEO vs SEO**: +- **SEO(Search Engine Optimization)**:针对传统搜索引擎(Google、百度)优化,目标是提高在搜索结果中的排名 +- **GEO(Generative Engine Optimization)**:针对AI搜索引擎(ChatGPT、Claude、Bing AI)优化,目标是让AI训练爬虫收录内容,在用户提问时引用和推荐 + +**AI爬虫的喜好特点**: +1. **结构化内容**:清晰的标题、段落、列表结构 +2. **权威性**:引用数据、案例、专家观点 +3. **完整性**:全面覆盖主题,提供深入分析 +4. **原创性**:独特见解和原创内容 +5. **时效性**:更新及时,信息准确 +6. **可验证性**:提供来源链接 +7. **实用性**:解决实际问题,提供可操作建议 + + +### 1. AI收录优化策略 + +#### A. 内容结构优化 + +**AI友好的文章结构**: +```markdown +# 主标题(明确、具体、包含核心关键词) + +## 摘要 +提供文章概要,帮助AI快速理解内容要点 + +## 背景介绍 +说明问题的背景和重要性,建立上下文 + +## 核心概念 +### 概念1 +- 定义 +- 特点 +- 应用场景 + +### 概念2 +- 定义 +- 特点 +- 应用场景 + +## 实战案例 +### 案例一:xxx公司实施xxx +- 背景 +- 挑战 +- 解决方案 +- 结果 + +### 案例二:xxx项目实践 +- 背景 +- 挑战 +- 解决方案 +- 结果 + +## 实施步骤 +1. 第一步:xxx +2. 第二步:xxx +3. 第三步:xxx + +## 常见问题 +### Q1: xxx? +**A**: 详细解答... + +### Q2: xxx? +**A**: 详细解答... + +## 总结 +总结文章要点,提供核心结论 + +``` + +**GEO栏目配置**: +```php +{ + 'name' => '技术教程', + 'precnt' => 50, + 'daysent' => 5, + 'bprenow' => 0, + 'promptcute' => '生成一篇关于{关键词}的深度技术文章,要求:1.结构清晰,包含背景、概念、案例、步骤、问答、总结 2.提供可操作的实施建议 3.引用实际数据和案例 4.内容原创且有独到见解 5.字数2000-3000字', + 'seotitle' => '{关键词} - 全栈开发技术教程', + 'keyw' => '{关键词},技术教程,实战案例,解决方案', + 'descs' => '深入讲解{关键词}的技术原理、实施步骤和实战案例,提供可操作的建议和最佳实践' +} +``` + +**更多GEO优化提示词示例**: + +```php +// 1. 行业分析类文章 +{ + 'name' => '行业洞察', + 'promptcute' => '生成一篇关于{关键词}的行业分析文章,要求:1.包含市场数据、趋势分析、竞争格局 2.引用权威数据源和行业报告 3.提供未来3-5年的发展预测 4.分析对企业和从业者的启示 5.字数2500-3500字', + 'seotitle' => '{关键词}行业分析与发展趋势', + 'keyw' => '{关键词},行业分析,市场趋势,发展预测' +} + +// 2. 最佳实践类文章 +{ + 'name' => '最佳实践', + 'promptcute' => '生成一篇关于{关键词}的最佳实践文章,要求:1.基于真实项目经验 2.列出常见错误和避坑指南 3.提供可复制的成功模式 4.包含检查清单和工具推荐 5.字数2000-3000字', + 'seotitle' => '{关键词}最佳实践指南', + 'keyw' => '{关键词},最佳实践,经验总结,避坑指南' +} + +// 3. 问题解决类文章 +{ + 'name' => '解决方案', + 'promptcute' => '生成一篇关于{关键词}的问题解决方案文章,要求:1.明确问题描述和影响范围 2.分析根本原因 3.提供多种解决方案对比 4.给出实施步骤和预期效果 5.包含预防措施 6.字数2000-3000字', + 'seotitle' => '{关键词}问题解决方案', + 'keyw' => '{关键词},问题解决,方案对比,实施指南' +} + +// 4. 工具评测类文章 +{ + 'name' => '工具评测', + 'promptcute' => '生成一篇关于{关键词}的工具评测文章,要求:1.评测5-8个主流工具 2.从功能、性能、成本、易用性等多维度对比 3.提供选择建议和适用场景 4.包含实际使用体验 5.字数2500-3500字', + 'seotitle' => '{关键词}工具评测与选择指南', + 'keyw' => '{关键词},工具评测,对比分析,选择建议' +} +``` + +### 5. 让AI引用和推荐的核心策略 + +#### A. 建立内容权威性 + +**成为领域专家的必备要素**: +1. **内容深度**:每个主题提供全面深入的分析,而非浅尝辄止 +2. **原创见解**:提供独特的观点和见解,避免人云亦云 +3. **数据支撑**:引用真实数据、案例、研究报告 +4. **持续更新**:定期更新内容,保持信息的准确性和时效性 +5. **专业审阅**:邀请行业专家审阅内容,确保专业准确性 + +#### B. 提升内容可引用性 + +**让AI更容易引用的内容特征**: +1. **结构化格式**:使用清晰的标题、列表、段落结构 +2. **明确观点**:直接陈述观点,避免模糊表达 +3. **可操作建议**:提供具体的实施步骤和检查清单 +4. **案例验证**:用实际案例验证观点的有效性 +5. **引用来源**:提供权威来源链接,增强可信度 + +#### C. 品牌价值植入 + +**在内容中自然植入品牌价值**: +1. **解决方案提及**:在讨论解决方案时提及品牌方案 +2. **经验分享**:分享品牌在相关领域的实践经验 +3. **数据证明**:用品牌相关的数据证明观点 +4. **客户案例**:引用品牌客户的成功案例 +5. **行业地位**:在行业分析中提及品牌的行业地位 + +#### D. 多维度覆盖 + +**覆盖AI可能询问的各种问题**: +1. **是什么**:概念定义、基本原理 +2. **为什么**:重要性、必要性、价值 +3. **怎么做**:实施步骤、最佳实践、工具推荐 +4. **常见问题**:FAQ、错误处理、避坑指南 +5. **未来趋势**:发展方向、预测、建议 + +### 6. GEO最佳实践总结 + +**内容创作原则**: +1. **深度优先**:每个主题提供2000+字的深度分析 +2. **结构清晰**:使用标准化的文章结构 +3. **数据支撑**:引用真实数据和案例 +4. **专家背书**:邀请行业专家撰写或审阅 +5. **持续更新**:定期更新内容,保持时效性 + +**品牌植入技巧**: +1. **自然植入**:在解决方案、最佳实践等部分自然提及 +2. **价值导向**:强调品牌带来的价值,而非硬性推销 +3. **证据支持**:提供案例、数据、客户证言等证据 +4. **多样化表达**:从不同角度、场景展示品牌价值 + +**AI收录策略**: +1. **结构化标记**:使用Schema.org等标准格式 +2. **知识图谱**:构建领域知识图谱,明确概念关系 +3. **版本控制**:记录内容演进,帮助AI理解更新 +4. **跨平台分发**:在多个平台发布,增加AI训练数据来源 + +## 前台页面开发 + +### 1. 首页(www/index.php) +```php + + + + + xxx + + + + + + + +
+ +
+
+
+

xxx

+

xxx

+
+
+

最新文章

+ get("SELECT * FROM www_list_art ORDER BY uptimes DESC LIMIT 10"); + foreach ($articles as $art) { + echo ''; + } + ?> +
+
+
+

© 众产科技. All Rights Reserved. 网站备案号

+
+ + +``` + +### 2. 栏目列表页(www/listpage.php) +```php +getone("SELECT * FROM www_list_cate WHERE id = {$cateid}"); + +// 读取文章列表 +$csql = new \ciy\sql('www_list_art'); +$csql->where('cateid', $cateid); +$csql->limit(($pageno - 1) * $pagecount, $pagecount); +$csql->order('uptimes desc'); +$csql->column('id,name,descs,uptimes'); +$count = -1; +$articles = $db->get($csql, $count); +?> + + + + + <?php echo $cate['seotitle']; ?> + + + + +
+

+
+
+ + + + + + +
+ + +``` + +### 3. 文章详情页(www/listart.php) +```php +getone("SELECT * FROM www_list_art WHERE id = {$id}"); + +// 更新点击数 +$db->update("UPDATE www_list_art SET clickcnt = clickcnt + 1 WHERE id = {$id}"); + +// 读取SEO关键词 +$seowords = $db->get("SELECT * FROM www_seoword WHERE cateid = {$cateid}"); + +// 转换内容(SEO关键词+Markdown) +$content = \web\cwebcomon::www_convertseoword( + $seowords, + \ciy\web::markdown_convert($article['content']), + $article['keyw'] +); +?> + + + + + <?php echo $article['seotitle']; ?> + + + + + +
+

+
+ + 阅读: +
+
+ +
+
+ + + + + +``` + +## 开发规范 + +### 1. 数据库操作规范 +- 使用 `\ciy\sql` 类进行数据库操作 +- 所有输入必须过滤:`get()`, `post()`, `deid()`, `enid()` +- 避免SQL注入,使用参数化查询 + +### 2. 安全规范 +- XSS防护:输出时使用 `htmlspecialchars()` +- CSRF防护:表单添加token验证 +- 文件上传:验证文件类型和大小 + +### 3. 性能规范 +- 合理使用索引:`cateid`, `uptimes`, `preartstatus` +- 避免N+1查询,使用JOIN优化 +- 启用页面缓存和CDN + +### 4. SEO规范 +- 每个页面必须有title和meta标签 +- URL必须静态化,使用 `webpoint.php` 路由 +- 图片必须添加alt属性 + +## 检查清单 + +### SEO检查项 +- [ ] 所有页面都有title和meta标签 +- [ ] URL结构清晰且静态化 +- [ ] 图片添加alt和title属性 +- [ ] 使用语义化HTML标签 +- [ ] 实现面包屑导航 +- [ ] 配置robots.txt +- [ ] 实现结构化数据 +- [ ] 移动端适配良好 +- [ ] 页面加载速度<3秒 + +### GEO检查项 +- [ ] 文章结构清晰(包含标题、摘要、背景、概念、案例、步骤、问答、总结) +- [ ] 内容长度充足(2000字以上) +- [ ] 提供真实案例和数据支撑 +- [ ] 添加结构化数据标记(Schema.org) +- [ ] 建立知识图谱,明确概念关系 +- [ ] 自然植入品牌信息(解决方案、最佳实践) +- [ ] 引用专家观点和行业报告 +- [ ] 提供可操作的实施建议 + +### AI自动化检查项 +- [ ] 配置定时任务 +- [ ] 栏目配置AI提示词 +- [ ] 关键词库维护 +- [ ] 待发文章池充足 +- [ ] 自动发布流程正常 + +## 最佳实践 + +1. **内容为王**:AI生成内容+人工审核,确保内容质量和原创性 +2. **定期更新**:配置日发布量,保持网站活跃度 +3. **关键词优化**:使用长尾关键词,提高转化率 +4. **内链建设**:自动插入关键词链接,提升权重 +5. **数据分析**:监控文章点击量,优化热门内容 +6. **GEO优化**:针对AI搜索引擎优化,建立品牌权威,让AI在用户提问时引用和推荐 + +## 总结 + +Ciyon框架的网站开发核心是: +- **AI驱动**:自动生成文章,减少人工工作量 +- **SEO优先**:所有开发决策都以SEO为出发点 +- **GEO优化**:生成式引擎优化,让AI训练爬虫收录内容,在用户提问时引用和推荐网站内容 +- **自动化**:定时任务自动发布,保持网站活跃度 +- **可扩展**:模块化设计,易于扩展功能 + +通过以上规范和最佳实践,可以快速搭建一个SEO友好、性能优秀、自动更新的网站。 \ No newline at end of file diff --git a/aiskill/ciyon-详细设计规划指导.md b/aiskill/ciyon-详细设计规划指导.md new file mode 100644 index 0000000..54d146d --- /dev/null +++ b/aiskill/ciyon-详细设计规划指导.md @@ -0,0 +1,90 @@ +# Ciyon框架 - AI开发指导入口 + +> 本文档为AI助手开发Ciyon框架应用的详细设计指导入口,整合了PC后台、移动端、数据大屏、Web3D、网站SEO/GEO等全栈开发技术。 +> 禁止修改任何 ciyon-*.md 文档。 + +## 产品详细设计文档规划 + +### 目标 +通过开发者的简单描述,AI规划详细的产品设计文档,包括: +- 功能模块划分 +- 数据表及字段设计 +- 字典及字典项编码设计 +- PC端菜单设计(如有) +- 移动端界面结构设计(如有) +- API接口函数设计 + +### 输出文档名称 +/产品设计文档.md + +输出的标题和内容,不要用大小写数字编号。 + + +### Ciyon框架已具备功能 +#### PC端 +/web/admin/login.* 登录页面 +/web/admin/index.* 主体页面 +/web/admin/welcome.* 首页面 +/web/api/* 三方应用接入 +/web/admin/ap/* 平台用户管理、财务票据、积分、充值、提现、个税、认证、意见建议、收货地址、工单等通用功能 +/web/admin/autotask/* 定时任务函数业务逻辑。可按分钟、小时、天、月、年执行 +/web/admin/datasse/* 数据计算。可视化长时间运行,一般用于一次性执行的意外修复函数。和偶然执行的函数。 +/web/admin/rigger/* 总控后台相关功能,管理员管理、角色管理、组织管理、业务日志、程序日志、配置管理、字典管理、自动化任务、菜单管理等通用功能 +/web/admin/www/* 网站相关功能,单页管理、栏目页管理、栏目文章生成、栏目文章发布、关键词库、内链管理等SEO通用功能 +/web/admin/cemap/* Web3D数字孪生地编器及开发示例代码 +/web/admin/upload 本地上传API函数,云存储前端授权函数,云存储本地中转函数 +/web/admin/demo/* 各类开发参考的示例代码 +/web/admin/common.js 定义支持多种语言列表、指定默认云存储、上传API、登录页跳转、本地token存储key、密钥盐值、云存储资源、图片缩略图url拼接 +/web/admin/lang/*.json 多语言翻译对照表。默认以中文为key,省去中文对照json。 + + +#### 移动端 +/web/ampap/* 移动端API接口函数 +/components/ciy-auth/ 登陆注册组件。微信小程序静默授权,无需注册。 +/pages/me/* 用户积分、充值、提现、个税、财务票据、认证、意见建议、收货地址、工单等常用功能管理 +/pages/main/* 首页、我的示例页面 +/pages/pub/* 公共页面,拍照透传、单页显示、栏目文章、h5页面套壳等 +/util/langload.js 多语言定义 +/util/lang/*.json 多语言翻译对照表 +/pages/demo/* 移动端示例代码、组件示例文档等 + + +### 输出内容(AI生成) +**产品概述** + - 产品定位 + - 核心价值 + - 目标用户画像 + +**功能模块** + - 功能列表 + - 按开发优先级排序 + +**数据表设计** + - 数据表中文名、英文表名 + - 表字段设计 + +**字典设计** + - 字典名称及英文代码 + - 字典的数据项名称及数字编码 + - 数据项的clas样式,支持dag/warn/succ/def/man + +**PC端设计** + - PC菜单设计 + - 登录页设计 + - 首页设计 + - PC端前后端文件/目录规划 + +**移动端界面设计** + - 页面结构 + - 交互流程 + - 页面文件规划 + +**移动端API接口设计** + - 接口文件规划/路径 + - 接口方法名及功能描述 + +--- + +**文档版本**:v1.0 +**更新日期**:2026-03-13 +**官网**:https://ciyon.ciy.cn/ \ No newline at end of file diff --git a/aiskill/golang/ciyon-后端API.md b/aiskill/golang/ciyon-后端API.md new file mode 100644 index 0000000..7e1ae50 --- /dev/null +++ b/aiskill/golang/ciyon-后端API.md @@ -0,0 +1,912 @@ +# Ciyon 后台管理系统开发框架 - 后端开发指南 + +## 框架概述 + +Ciyon 是一个基于 Golang 开发的轻量级、高性能的后台管理系统开发框架,提供完整的用户权限管理、数据操作、文件上传、日志记录等功能。 + +**核心特点:** +- 轻量级:核心库代码精简,依赖少 +- 高性能:原生 Golang 编写,充分利用 Go 协程优势 +- 易扩展:模块化设计,组件可独立使用 +- RESTful API 设计:支持多种前端框架对接 +- 完整权限体系:基于角色的权限控制(RBAC) +- 多租户支持:支持 SaaS 模式部署 + +**技术栈:** +- 后端:Go 1.22+、MySQL +- 存储:本地存储 + S3 云存储(腾讯云、阿里云、Cloudflare R2) + +--- + +## 项目结构 + +``` +golang/ +├── main.go # 程序入口 +├── route_adm.go # 路由配置 +├── go.mod # Go 模块配置 +├── go.sum # 依赖版本锁定 +├── gobuild.bat # Windows 编译脚本 +├── web.ini # 配置文件 +├── zciyon/ # 核心库 +│ ├── web.go # Web 服务器 +│ ├── mysql.go # MySQL 数据库 +│ ├── sql.go # SQL 构建器 +│ ├── db.go # 数据库接口 +│ ├── upload.go # 文件上传 +│ ├── redis.go # Redis 接口 +│ ├── log.go # 日志系统 +│ ├── excel.go # Excel 导出 +│ ├── ws.go # WebSocket +│ ├── sse.go # Server-Sent Events +│ ├── i18n.go # 国际化 +│ ├── c.go # 通用工具函数 +│ ├── http.go # HTTP 客户端 +│ ├── json.go # JSON 处理 +│ ├── ini.go # 配置文件解析 +│ ├── memkv.go # 内存 KV 存储 +│ ├── mqtt.go # MQTT 客户端 +│ ├── post.go # POST 数据处理 +│ ├── tcpclient.go # TCP 客户端 +│ ├── tcpserver.go # TCP 服务器 +│ ├── udpclient.go # UDP 客户端 +│ ├── udpserver.go # UDP 服务器 +│ ├── grpc.go # gRPC 服务 +│ ├── sys_linux.go # Linux 系统调用 +│ └── sys_win.go # Windows 系统调用 +├── web/ # Web 资源(静态文件) +│ ├── admin/ # 管理后台页面 +│ └── jscss/ # 前端库 +└── test/ # 测试文件 +``` + +--- + +## 核心架构 + +### 1. 请求处理流程 + +``` +客户端请求 + ↓ +Nginx (可选,反向代理) + ↓ +Ciyon Web Server + ↓ +路由解析 (/admin/xxx.action) + ↓ +业务处理函数 (execFunc) + ↓ (失败) +Mock 数据 (execMock) + ↓ (失败) +转发到 PHP 接口 (execPHP) + ↓ (失败) +返回错误 JSON +``` + +**详细说明:** + +1. **路由解析**:根据 URL 路径解析出对应的业务函数 +2. **业务处理函数**:优先执行 Golang 业务函数 + - 成功:返回 JSON 响应 + - 失败:继续下一步 +3. **Mock 数据**:如果业务函数不存在,尝试从 Mock 数据返回 + - 成功:返回 Mock 数据 + - 失败:继续下一步 +4. **转发到 PHP 接口**:如果 Mock 也不存在,转发请求到 PHP 接口 + - 成功:返回 PHP 接口的响应 + - 失败(未找到函数):返回 "未找到业务函数" 错误 +5. **返回错误**:所有尝试都失败,返回错误信息 + +### 2. 模块化设计 + +#### zciyon 核心库模块 + +| 模块 | 文件 | 功能描述 | +|------|------|----------| +| Web 服务器 | web.go | HTTP 服务器、路由、静态文件服务 | +| 数据库 | mysql.go | MySQL 连接池、增删改查操作 | +| SQL 构建器 | sql.go | 链式 SQL 构建器 | +| 数据库接口 | db.go | 数据库操作抽象接口 | +| 文件上传 | upload.go | 本地文件上传处理 | +| Redis | redis.go | Redis 客户端接口 | +| 日志 | log.go | 文件日志、TCP 日志 | +| Excel | excel.go | Excel 导出功能 | +| WebSocket | ws.go | WebSocket 服务器 | +| SSE | sse.go | Server-Sent Events | +| 国际化 | i18n.go | 多语言支持 | +| HTTP 客户端 | http.go | HTTP 请求客户端 | +| JSON 处理 | json.go | JSON 编解码 | +| 配置文件 | ini.go | INI 配置文件解析 | +| 内存 KV | memkv.go | 内存键值存储 | +| MQTT | mqtt.go | MQTT 协议支持 | +| gRPC | grpc.go | gRPC 服务支持 | +| TCP/UDP | tcp*.go, udp*.go | TCP/UDP 网络通信 | + +--- + +## 快速开始 + +### 1. 环境准备 + +#### 配置文件 (web.ini) +```ini +[db] +host=127.0.0.1 +port=3306 +user=root +pass=your_password +name=your_database +maxopenconn=0 +maxidelconn=0 +maxlifesec=0 + +[main] +runmode=dev # dev 或 prod +tasksec=5 # 自动任务执行间隔(秒) + +[log] +logfile=log/ciyon.log +logtcp= +logfilelevel=1 # 1-5,数字越小级别越高 +logtcplevel=3 + +[web] +webmode=http +webipsk=127.0.0.1:4003 +webhttp2= # HTTP2配置:端口,证书.crt,证书.key + +[php] +host= # PHP代理地址(可选) + +[mock] +target= # Mock数据库表名 +docpass= + +[s3A] # Cloudflare R2 +access= +secret= +endpoint=1d486c90526e9c65512a35642f26d0c3.r2.cloudflarestorage.com +region=us-east-1 +bucket=ciy5 +acl=public-read +url=https://dao.ciy.cn/ud/ + +[s3B] # 腾讯云COS +access= +secret= +endpoint=tob-1322789299.cos.ap-nanjing.myqcloud.com +region=ap-nanjing +bucket=tob-1322789299 +acl=public-read +url=https://tob-1322789299.cos.ap-nanjing.myqcloud.com/ud/ + +[s3C] # 阿里云OSS +access= +secret= +endpoint=expn.oss-cn-hangzhou.aliyuncs.com +region=oss-cn-hangzhou +bucket=expn +acl=public-read +url=https://expn.oss-cn-hangzhou.aliyuncs.com/ud/ + +[cdn] +weburl=https://ciyon.ciy.cn +files=.html;.js;.css +provider=cloud.tencent.com +secretId= +secretKey= +``` + +### 2. 创建业务模块 + +#### 创建后端处理函数 + +**文件:web/admin/demo.go** +```go +package admin + +import ( + "net/http" + c "ciyon/zciyon" +) + +// 初始化数据 +func Demo_init(w http.ResponseWriter, r *http.Request) bool { + post := c.NewCiyPost(w, r) + _, userid := Verifyfast(r, c.CiyDB, post) + if userid == 0 { + return false + } + + // 查询数据 + csql := c.NewCiySQL("zc_demo") + csql.Where("status", 1).Order("id desc").Limit(1, 10) + list, total, err := c.CiyDB.Get(csql) + if err != nil { + return c.ErrJSON(w, "查询失败", err) + } + + // 返回数据 + return c.SuccJSON(w, r, map[string]any{ + "list": list, + "total": total, + "status": c.Getcatas(c.CiyDB, "status"), + }) +} + +// 更新数据 +func Demo_update(w http.ResponseWriter, r *http.Request) bool { + post := c.NewCiyPost(w, r) + _, userid := Verifyfast(r, c.CiyDB, post) + if userid == 0 { + return false + } + + id := post.Getint("id") + name := post.Get("name") + + // 更新数据 + csql := c.NewCiySQL("zc_demo") + csql.Where("id", id) + _, err := c.CiyDB.Update(csql, map[string]any{ + "name": name, + "updatetime": c.Tostamp(), + }) + if err != nil { + return c.ErrJSON(w, "更新失败", err) + } + + // 记录日志 + SaveLogDB(c.CiyDB, "DEMO", nil, map[string]any{"id": id, "name": name}) + + return c.SuccJSON(w, r) +} + +// 删除数据 +func Demo_del(w http.ResponseWriter, r *http.Request) bool { + post := c.NewCiyPost(w, r) + _, userid := Verifyfast(r, c.CiyDB, post) + if userid == 0 { + return false + } + + ids := post.Get("ids") + + // 删除数据 + csql := c.NewCiySQL("zc_demo") + csql.Where("id in", ids) + _, err := c.CiyDB.Delete(csql, c.CIYDB_DELETE_BACKUP_TABLE) + if err != nil { + return c.ErrJSON(w, "删除失败", err) + } + + // 记录日志 + SaveLog(c.CiyDB, "DEMO", "删除记录 IDs: "+ids) + + return c.SuccJSON(w, r) +} + +// 导出数据 +func Demo_exportxls(w http.ResponseWriter, r *http.Request) bool { + post := c.NewCiyPost(w, r) + _, userid := Verifyfast(r, c.CiyDB, post) + if userid == 0 { + return false + } + + // 查询数据 + csql := c.NewCiySQL("zc_demo") + csql.Where("status", 1) + list, _, err := c.CiyDB.Get(csql) + if err != nil { + return c.ErrJSON(w, "查询失败", err) + } + + // 生成Excel + fields := []map[string]string{ + {"name": "ID", "width": "50"}, + {"name": "名称", "width": "100"}, + {"name": "创建时间", "type": "dt", "width": "120"}, + } + + datas := [][]string{} + for _, row := range list { + datas = append(datas, []string{ + c.Tostr(row["id"]), + c.Tostr(row["name"]), + c.Todate(c.Toint(row["createtime"]), "Y-m-d H:i"), + }) + } + + xml := c.General_excel_xml(fields, datas, map[string]any{ + "toptitle": "数据列表", + "sheetname": "Sheet1", + }) + + w.Header().Set("Content-Type", "application/vnd.ms-excel") + w.Header().Set("Content-Disposition", "attachment; filename=demo.xls") + w.Write([]byte(xml)) + + return true +} +``` + +#### 注册路由 + +在 `route_adm.go` 中添加路由: + +```go +func setWebRoute_adm(web *c.CiyWebServer) { + web.RouterFunc("/admin/demo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{ + "normal": { + "init": demo.Normal_init, + "update": demo.Normal_update, + "del": demo.Normal_del, + "getdata": demo.Normal_getdata, + "exportxls": demo.Normal_exportxls, + }, + }) +} +``` + +--- + +## 后端开发 + +### 1. 数据库操作 + +#### CiySQL 链式查询 + +```go +// 基本查询 +csql := c.NewCiySQL("user") +csql.Where("name like", "张").Where("age>", 18) +csql.Order("id desc").Limit(1, 10) +list, total, err := c.CiyDB.Get(csql) + +// 日期区间查询 +csql.Where_daterange("createtime", "2024-01-01~2024-12-31") + +// 相对日期查询 +csql.Where_dayrange("createtime", "-30~0") // 最近30天 +csql.Where_dayrange("createtime", "0") // 今天 +csql.Where_dayrange("createtime", "-1") // 昨天 + +// 月份区间查询 +csql.Where_monthrange("createtime", "2024-1") // 本月 +csql.Where_monthrange("createtime", "2024-1~2024-6") // 月份区间 + +// 数值区间查询 +csql.Where_numrange("price", 100, 1000, 100) // 10000~100000 + +// 原始SQL +csql.RawSQL("select * from user where id=?", 123) + +// 字段排除 +csql.Column("!id,password") // 排除id和password字段 + +// JOIN查询 +csql.Join("role", "user.roleid=role.id", "left") + +// 分组查询 +csql.Group("department").Having("count(*)>10") +``` + +#### 数据库CRUD操作 + +```go +// 插入 +csql := c.NewCiySQL("user") +lastid, err := c.CiyDB.Insert(csql, map[string]any{ + "name": "张三", + "age": 25, + "createtime": c.Tostamp(), +}) + +// 更新 +csql := c.NewCiySQL("user") +csql.Where("id", 123) +_, err := c.CiyDB.Update(csql, map[string]any{ + "name": "李四", + "age": []string{"age+1"}, // SQL表达式:age+1 + "updatetime": c.Tostamp(), +}) + +// 删除(三种模式) +csql := c.NewCiySQL("user") +csql.Where("id", 123) + +// 直接删除 +_, err := c.CiyDB.Delete(csql, c.CIYDB_DELETE_BACKUP_NONE) + +// 备份到_bak表 +_, err := c.CiyDB.Delete(csql, c.CIYDB_DELETE_BACKUP_TABLE) + +// 标记删除(设置deltimes字段) +_, err := c.CiyDB.Delete(csql, c.CIYDB_DELETE_BACKUP_FIELD) + +// 事务处理 +err := c.CiyDB.Tran(func() error { + // 扣款 + csql1 := c.NewCiySQL("account") + csql1.Where("id", 123) + c.CiyDB.Update(csql1, map[string]any{"balance": []string{"balance-100"}}) + + // 记录日志 + csql2 := c.NewCiySQL("log") + c.CiyDB.Insert(csql2, map[string]any{"msg": "扣款100"}) + + return nil +}) +``` + +### 2. 权限验证 + +```go +// 完整验证(带用户信息) +func Verifyuser(r *http.Request, db *c.CiyMysql, post *c.CiyPost) (map[string]any, error) + +// 快速验证(仅返回用户ID) +func Verifyfast(r *http.Request, db *c.CiyMysql, post *c.CiyPost) (map[string]any, int) + +// 权限检查 +func Nopower(db *c.CiyMysql, userid int, chkpower string) bool + +// 使用示例 +func Demo_init(w http.ResponseWriter, r *http.Request) bool { + post := c.NewCiyPost(w, r) + rsuser, userid := Verifyfast(r, c.CiyDB, post) + if userid == 0 { + return false // 自动返回登录错误 + } + + // 检查权限(p123v表示菜单ID 123的查看权限) + if Nopower(c.CiyDB, userid, "p123v") { + return c.ErrJSON(w, "您未被授权操作") + } + + // 业务逻辑 + return c.SuccJSON(w, r) +} +``` + +### 3. 文件上传 + +**本地上传:** +```go +func Upload_upload(w http.ResponseWriter, r *http.Request) bool { + post := c.NewCiyPost(w, r) + _, userid := Verifyfast(r, c.CiyDB, post) + if userid == 0 { + return false + } + + path := post.Get("pathfile") + file := post.Getfile() + + // 保存文件 + json, err := c.SaveUploadFile(path, file) + if err != nil { + return c.ErrJSON(w, err.Error()) + } + + return c.SuccJSON(w, r, json) +} +``` + +**S3上传(生成签名):** +```go +func Upload_s3(w http.ResponseWriter, r *http.Request) bool { + post := c.NewCiyPost(w, r) + storselect := post.Get("storselect") // A/B/C + path := post.Get("pathfile") + + // 获取S3配置 + accessKey := c.CiyVars.Ini.GetKey("s3"+storselect, "access", "") + secretKey := c.CiyVars.Ini.GetKey("s3"+storselect, "secret", "") + endpoint := c.CiyVars.Ini.GetKey("s3"+storselect, "endpoint", "") + region := c.CiyVars.Ini.GetKey("s3"+storselect, "region", "") + bucket := c.CiyVars.Ini.GetKey("s3"+storselect, "bucket", "") + + // 生成S3签名(示例代码) + // 返回签名信息,前端直接上传到S3 + + return c.SuccJSON(w, r, ret) +} +``` + +### 4. 日志记录 + +```go +// 记录操作日志 +SaveLog(db *c.CiyMysql, types string, msg string) + +// 记录数据变更日志 +SaveLogDB(db *c.CiyMysql, types string, oldrow map[string]any, newrow map[string]any) + +// 使用示例 +func Demo_update(w http.ResponseWriter, r *http.Request) bool { + // 获取旧数据 + csql := c.NewCiySQL("zc_demo") + csql.Where("id", id) + oldrow, _ := c.CiyDB.Getone(csql) + + // 执行更新 + // ... + + // 记录操作日志 + SaveLog(c.CiyDB, "DEMO", "更新记录 ID: "+c.Tostr(id)) + + // 记录数据变更 + SaveLogDB(c.CiyDB, "DEMO", oldrow, newrow) + + return c.SuccJSON(w, r) +} +``` + +### 5. WebSocket + +```go +func Wsdemo(w http.ResponseWriter, r *http.Request) bool { + ws, err := c.NewCiyWebsocket(w, r) + if err != nil { + return false + } + + // 接收消息 + ws.OnMessageJSON(func(code int, id int, json map[string]any) { + // 处理消息 + ws.SendSucc(id, map[string]any{ + "msg": "收到消息", + "data": json, + }) + }) + + // 错误处理 + ws.OnError(func(err error) { + c.Log.Error("WS", err.Error()) + }) + + // 关闭处理 + ws.OnClose(func() { + c.Log.Info("WS", "连接关闭") + }) + + return true +} +``` + +### 6. SSE (Server-Sent Events) + +```go +func SSE_get(w http.ResponseWriter, r *http.Request) bool { + if !c.SSEInit(w) { + return false + } + + for i := 0; i < 10; i++ { + c.SSESend_data(w, "消息 "+c.Tostr(i)) + c.Sleep(1) + } + + return true +} +``` + +### 7. HTTP 客户端 + +```go +// GET 请求 +resp, err := c.HttpGet("https://api.example.com/data") + +// POST 请求 +resp, err := c.HttpPost("https://api.example.com/api", map[string]any{ + "name": "张三", + "age": 25, +}) + +// 带Header的请求 +headers := map[string]string{ + "Authorization": "Bearer token", +} +resp, err := c.HttpGet("https://api.example.com/data", headers) +``` + +### 8. JSON 处理 + +```go +// JSON 编码 +jsonStr, err := c.JsonEncode(map[string]any{ + "name": "张三", + "age": 25, +}) + +// JSON 解码 +var data map[string]any +err := c.JsonDecode(jsonStr, &data) +``` + +### 9. 配置文件读取 + +```go +// 读取配置值 +value := c.CiyVars.Ini.GetKey("db", "host", "") +``` + +### 10. 内存 KV 存储 + +```go +// 设置值 +c.CiyVars.MemKV.Set("key", "value", 3600) // 3600秒过期 + +// 获取值 +value, exists := c.CiyVars.MemKV.Get("key") + +// 删除值 +c.CiyVars.MemKV.Delete("key") +``` + +--- + +## 权限体系 + +### 权限编码规范 + +**权限编码格式:** +``` +p{菜单ID}{操作类型} +``` + +**操作类型:** +- `v` - 查看 +- `e` - 编辑 +- `d` - 删除 +- `a` - 添加 +- `s` - 审批 +- `x` - 自定义 + +**示例:** +``` +p123v - 菜单ID 123 的查看权限 +p123e - 菜单ID 123 的编辑权限 +p123d - 菜单ID 123 的删除权限 +``` + +### 权限验证 + +**后端验证:** +```go +if Nopower(c.CiyDB, userid, "p123v") { + return c.ErrJSON(w, "您未被授权操作") +} +``` + +--- + +## 部署指南 + +### 编译 + +```bash +# Windows +gobuild.bat + +# Linux +GOOS=linux GOARCH=amd64 go build -o zgo main.go + +# macOS +GOOS=darwin GOARCH=amd64 go build -o zgo main.go +``` + +### Nginx 配置 + +```nginx +server { + listen 80; + server_name yourdomain.com; + + # 静态文件 + location / { + root /path/to/web; + index index.html; + } + + # API 代理 + location / { + proxy_pass http://127.0.0.1:4003; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + # WebSocket + location /ws/ { + proxy_pass http://127.0.0.1:4003; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +} +``` + +### Systemd 服务 + +**创建服务文件:/etc/systemd/system/ciyon.service** +```ini +[Unit] +Description=Ciyon Web Server +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/path/to/golang +ExecStart=/path/to/golang/zgo +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=multi-user.target +``` + +**启动服务:** +```bash +systemctl daemon-reload +systemctl start ciyon +systemctl enable ciyon +systemctl status ciyon +``` + +--- + +## 常见问题 + +### 1. 数据库连接失败 + +**问题:** 数据库连接失败 +**解决:** +1. 检查 `web.ini` 中数据库配置是否正确 +2. 检查 MySQL 服务是否启动 +3. 检查数据库用户权限 + +### 2. 权限验证失败 + +**问题:** 提示"请重新登录" +**解决:** +1. 检查 `zc_online` 表中会话是否存在 +2. 检查会话是否过期 +3. 检查 `Gtokenswapsec` 配置 +4. 检查 Token 加密密钥是否一致 + +### 3. 文件上传失败 + +**问题:** 文件上传失败 +**解决:** +1. 检查 `web/ud/` 目录是否存在 +2. 检查目录写入权限 +3. 检查文件大小限制 +4. 检查文件类型是否在允许列表中 + +### 4. 日志不输出 + +**问题:** 日志不输出到文件 +**解决:** +1. 检查 `log/ciyon.log` 文件是否存在 +2. 检查文件写入权限 +3. 检查 `logfilelevel` 配置 + +--- + +## 最佳实践 + +### 代码规范 + +**命名规范:** +- 包名:小写单词,如 `admin` +- 文件名:小写单词+下划线,如 `demo.go` +- 函数名:大写开头(导出)或小写开头(私有) +- 变量名:尽量小写,如 `userid` +- 常量名:大写+下划线,如 `MAX_COUNT` + +**注释规范:** +```go +// 函数功能说明 +// 参数说明 +// 返回值说明 +func Demo_init(w http.ResponseWriter, r *http.Request) bool { + // ... +} +``` + +### 错误处理 + +```go +// 统一错误返回 +if err != nil { + return c.ErrJSON(w, "操作失败", err) +} + +// 记录错误日志 +if err != nil { + c.Log.Error("DEMO", "操作失败: "+err.Error()) + return c.ErrJSON(w, "操作失败", err) +} +``` + +### 安全建议 + +1. **SQL 注入防护:** 使用参数化查询 +2. **XSS 防护:** 对输出进行转义 +3. **CSRF 防护:** 使用 Token 验证 +4. **密码加密:** 使用 SHA256 加密 +5. **权限控制:** 严格的权限验证 +6. **日志记录:** 记录所有操作日志 + +--- + +## 附录 + +### A. 配置参数说明 + +| 参数 | 说明 | 默认值 | +|------|------|--------| +| runmode | 运行模式 | dev | +| logfile | 日志文件路径 | log/ciyon.log | +| logfilelevel | 日志级别 | 3 | +| webmode | Web 模式 | http | +| webipsk | 监听地址 | 127.0.0.1:4003 | +| dbhost | 数据库地址 | 127.0.0.1 | +| dbport | 数据库端口 | 3306 | +| dbuser | 数据库用户 | root | +| dbpass | 数据库密码 | - | +| dbname | 数据库名称 | - | + +### B. 工具函数速查 + +| 函数 | 说明 | 示例 | +|------|------|------| +| Tostamp() | 获取当前时间戳 | c.Tostamp() | +| Todate() | 时间格式化 | c.Todate(c.Tostamp(), "Y-m-d H:i:s") | +| Tostr() | 转字符串 | c.Tostr(123) | +| Toint() | 转整数 | c.Toint("123") | +| Tofloat() | 转浮点数 | c.Tofloat("123.45") | +| MD5() | MD5 加密 | c.MD5("password") | +| Sha256() | SHA256 加密 | c.Sha256("password") | +| Encrypt() | 字符串加密 | c.Encrypt("text", "E", "key") | +| Uniqid() | 生成唯一ID | c.Uniqid(10) | +| Randstr() | 生成随机字符串 | c.Randstr(10) | + +### C. 错误码说明 + +| 错误码 | 说明 | +|--------|------| +| 1 | 成功 | +| 2 | 未登录 | +| 3 | 权限不足 | +| 4 | 参数错误 | +| 9 | 操作失败 | + +--- + +## 总结 + +Ciyon 框架是一个轻量级、高性能的后台管理系统开发框架,提供了完整的用户权限管理、数据操作、文件上传、日志记录等功能。开发者可以根据本文档快速上手开发,并根据实际需求进行扩展。 + +**开发建议:** +1. 先熟悉核心库的使用方法 +2. 参考示例代码进行开发 +3. 遵循代码规范和最佳实践 +4. 注重安全性和性能优化 +5. 做好日志记录和错误处理 + +**技术支持:** +- 官网:https://ciy.cn/code +- 文档:本文档 +- 示例:web/admin/ 目录下的示例代码 + +--- + +**文档版本:** v2.0 +**更新日期:** 2026-03-18 +**作者:** AI Assistant \ No newline at end of file diff --git a/c5_ciyon.ciy_arearpc.sql b/c5_ciyon.ciy_arearpc.sql new file mode 100644 index 0000000..ea73240 --- /dev/null +++ b/c5_ciyon.ciy_arearpc.sql @@ -0,0 +1,3655 @@ + +-- ---------------------------- +-- Table structure for ciy_arearpc +-- ---------------------------- +DROP TABLE IF EXISTS `ciy_arearpc`; +CREATE TABLE `ciy_arearpc` ( + `id` int(11) NOT NULL COMMENT '代码', + `upid` int(11) NOT NULL COMMENT '上级代码', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '地名', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '静态省市区表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ciy_arearpc +-- ---------------------------- +INSERT INTO `ciy_arearpc` VALUES (110000, 0, '北京市'); +INSERT INTO `ciy_arearpc` VALUES (110100, 110000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (110101, 110100, '东城区'); +INSERT INTO `ciy_arearpc` VALUES (110102, 110100, '西城区'); +INSERT INTO `ciy_arearpc` VALUES (110105, 110100, '朝阳区'); +INSERT INTO `ciy_arearpc` VALUES (110106, 110100, '丰台区'); +INSERT INTO `ciy_arearpc` VALUES (110107, 110100, '石景山区'); +INSERT INTO `ciy_arearpc` VALUES (110108, 110100, '海淀区'); +INSERT INTO `ciy_arearpc` VALUES (110109, 110100, '门头沟区'); +INSERT INTO `ciy_arearpc` VALUES (110111, 110100, '房山区'); +INSERT INTO `ciy_arearpc` VALUES (110112, 110100, '通州区'); +INSERT INTO `ciy_arearpc` VALUES (110113, 110100, '顺义区'); +INSERT INTO `ciy_arearpc` VALUES (110114, 110100, '昌平区'); +INSERT INTO `ciy_arearpc` VALUES (110115, 110100, '大兴区'); +INSERT INTO `ciy_arearpc` VALUES (110116, 110100, '怀柔区'); +INSERT INTO `ciy_arearpc` VALUES (110117, 110100, '平谷区'); +INSERT INTO `ciy_arearpc` VALUES (110118, 110100, '密云区'); +INSERT INTO `ciy_arearpc` VALUES (110119, 110100, '延庆区'); +INSERT INTO `ciy_arearpc` VALUES (120000, 0, '天津市'); +INSERT INTO `ciy_arearpc` VALUES (120100, 120000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (120101, 120100, '和平区'); +INSERT INTO `ciy_arearpc` VALUES (120102, 120100, '河东区'); +INSERT INTO `ciy_arearpc` VALUES (120103, 120100, '河西区'); +INSERT INTO `ciy_arearpc` VALUES (120104, 120100, '南开区'); +INSERT INTO `ciy_arearpc` VALUES (120105, 120100, '河北区'); +INSERT INTO `ciy_arearpc` VALUES (120106, 120100, '红桥区'); +INSERT INTO `ciy_arearpc` VALUES (120110, 120100, '东丽区'); +INSERT INTO `ciy_arearpc` VALUES (120111, 120100, '西青区'); +INSERT INTO `ciy_arearpc` VALUES (120112, 120100, '津南区'); +INSERT INTO `ciy_arearpc` VALUES (120113, 120100, '北辰区'); +INSERT INTO `ciy_arearpc` VALUES (120114, 120100, '武清区'); +INSERT INTO `ciy_arearpc` VALUES (120115, 120100, '宝坻区'); +INSERT INTO `ciy_arearpc` VALUES (120116, 120100, '滨海新区'); +INSERT INTO `ciy_arearpc` VALUES (120117, 120100, '宁河区'); +INSERT INTO `ciy_arearpc` VALUES (120118, 120100, '静海区'); +INSERT INTO `ciy_arearpc` VALUES (120119, 120100, '蓟州区'); +INSERT INTO `ciy_arearpc` VALUES (130000, 0, '河北省'); +INSERT INTO `ciy_arearpc` VALUES (130100, 130000, '石家庄市'); +INSERT INTO `ciy_arearpc` VALUES (130101, 130100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130102, 130100, '长安区'); +INSERT INTO `ciy_arearpc` VALUES (130104, 130100, '桥西区'); +INSERT INTO `ciy_arearpc` VALUES (130105, 130100, '新华区'); +INSERT INTO `ciy_arearpc` VALUES (130107, 130100, '井陉矿区'); +INSERT INTO `ciy_arearpc` VALUES (130108, 130100, '裕华区'); +INSERT INTO `ciy_arearpc` VALUES (130109, 130100, '藁城区'); +INSERT INTO `ciy_arearpc` VALUES (130110, 130100, '鹿泉区'); +INSERT INTO `ciy_arearpc` VALUES (130111, 130100, '栾城区'); +INSERT INTO `ciy_arearpc` VALUES (130121, 130100, '井陉县'); +INSERT INTO `ciy_arearpc` VALUES (130123, 130100, '正定县'); +INSERT INTO `ciy_arearpc` VALUES (130125, 130100, '行唐县'); +INSERT INTO `ciy_arearpc` VALUES (130126, 130100, '灵寿县'); +INSERT INTO `ciy_arearpc` VALUES (130127, 130100, '高邑县'); +INSERT INTO `ciy_arearpc` VALUES (130128, 130100, '深泽县'); +INSERT INTO `ciy_arearpc` VALUES (130129, 130100, '赞皇县'); +INSERT INTO `ciy_arearpc` VALUES (130130, 130100, '无极县'); +INSERT INTO `ciy_arearpc` VALUES (130131, 130100, '平山县'); +INSERT INTO `ciy_arearpc` VALUES (130132, 130100, '元氏县'); +INSERT INTO `ciy_arearpc` VALUES (130133, 130100, '赵县'); +INSERT INTO `ciy_arearpc` VALUES (130171, 130100, '石家庄高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (130172, 130100, '石家庄循环化工园区'); +INSERT INTO `ciy_arearpc` VALUES (130181, 130100, '辛集市'); +INSERT INTO `ciy_arearpc` VALUES (130183, 130100, '晋州市'); +INSERT INTO `ciy_arearpc` VALUES (130184, 130100, '新乐市'); +INSERT INTO `ciy_arearpc` VALUES (130200, 130000, '唐山市'); +INSERT INTO `ciy_arearpc` VALUES (130201, 130200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130202, 130200, '路南区'); +INSERT INTO `ciy_arearpc` VALUES (130203, 130200, '路北区'); +INSERT INTO `ciy_arearpc` VALUES (130204, 130200, '古冶区'); +INSERT INTO `ciy_arearpc` VALUES (130205, 130200, '开平区'); +INSERT INTO `ciy_arearpc` VALUES (130207, 130200, '丰南区'); +INSERT INTO `ciy_arearpc` VALUES (130208, 130200, '丰润区'); +INSERT INTO `ciy_arearpc` VALUES (130209, 130200, '曹妃甸区'); +INSERT INTO `ciy_arearpc` VALUES (130224, 130200, '滦南县'); +INSERT INTO `ciy_arearpc` VALUES (130225, 130200, '乐亭县'); +INSERT INTO `ciy_arearpc` VALUES (130227, 130200, '迁西县'); +INSERT INTO `ciy_arearpc` VALUES (130229, 130200, '玉田县'); +INSERT INTO `ciy_arearpc` VALUES (130271, 130200, '河北唐山芦台经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (130272, 130200, '唐山市汉沽管理区'); +INSERT INTO `ciy_arearpc` VALUES (130273, 130200, '唐山高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (130274, 130200, '河北唐山海港经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (130281, 130200, '遵化市'); +INSERT INTO `ciy_arearpc` VALUES (130283, 130200, '迁安市'); +INSERT INTO `ciy_arearpc` VALUES (130284, 130200, '滦州市'); +INSERT INTO `ciy_arearpc` VALUES (130300, 130000, '秦皇岛市'); +INSERT INTO `ciy_arearpc` VALUES (130301, 130300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130302, 130300, '海港区'); +INSERT INTO `ciy_arearpc` VALUES (130303, 130300, '山海关区'); +INSERT INTO `ciy_arearpc` VALUES (130304, 130300, '北戴河区'); +INSERT INTO `ciy_arearpc` VALUES (130306, 130300, '抚宁区'); +INSERT INTO `ciy_arearpc` VALUES (130321, 130300, '青龙满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (130322, 130300, '昌黎县'); +INSERT INTO `ciy_arearpc` VALUES (130324, 130300, '卢龙县'); +INSERT INTO `ciy_arearpc` VALUES (130371, 130300, '秦皇岛市经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (130372, 130300, '北戴河新区'); +INSERT INTO `ciy_arearpc` VALUES (130400, 130000, '邯郸市'); +INSERT INTO `ciy_arearpc` VALUES (130401, 130400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130402, 130400, '邯山区'); +INSERT INTO `ciy_arearpc` VALUES (130403, 130400, '丛台区'); +INSERT INTO `ciy_arearpc` VALUES (130404, 130400, '复兴区'); +INSERT INTO `ciy_arearpc` VALUES (130406, 130400, '峰峰矿区'); +INSERT INTO `ciy_arearpc` VALUES (130407, 130400, '肥乡区'); +INSERT INTO `ciy_arearpc` VALUES (130408, 130400, '永年区'); +INSERT INTO `ciy_arearpc` VALUES (130423, 130400, '临漳县'); +INSERT INTO `ciy_arearpc` VALUES (130424, 130400, '成安县'); +INSERT INTO `ciy_arearpc` VALUES (130425, 130400, '大名县'); +INSERT INTO `ciy_arearpc` VALUES (130426, 130400, '涉县'); +INSERT INTO `ciy_arearpc` VALUES (130427, 130400, '磁县'); +INSERT INTO `ciy_arearpc` VALUES (130430, 130400, '邱县'); +INSERT INTO `ciy_arearpc` VALUES (130431, 130400, '鸡泽县'); +INSERT INTO `ciy_arearpc` VALUES (130432, 130400, '广平县'); +INSERT INTO `ciy_arearpc` VALUES (130433, 130400, '馆陶县'); +INSERT INTO `ciy_arearpc` VALUES (130434, 130400, '魏县'); +INSERT INTO `ciy_arearpc` VALUES (130435, 130400, '曲周县'); +INSERT INTO `ciy_arearpc` VALUES (130471, 130400, '邯郸经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (130473, 130400, '邯郸冀南新区'); +INSERT INTO `ciy_arearpc` VALUES (130481, 130400, '武安市'); +INSERT INTO `ciy_arearpc` VALUES (130500, 130000, '邢台市'); +INSERT INTO `ciy_arearpc` VALUES (130501, 130500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130502, 130500, '襄都区'); +INSERT INTO `ciy_arearpc` VALUES (130503, 130500, '信都区'); +INSERT INTO `ciy_arearpc` VALUES (130505, 130500, '任泽区'); +INSERT INTO `ciy_arearpc` VALUES (130506, 130500, '南和区'); +INSERT INTO `ciy_arearpc` VALUES (130522, 130500, '临城县'); +INSERT INTO `ciy_arearpc` VALUES (130523, 130500, '内丘县'); +INSERT INTO `ciy_arearpc` VALUES (130524, 130500, '柏乡县'); +INSERT INTO `ciy_arearpc` VALUES (130525, 130500, '隆尧县'); +INSERT INTO `ciy_arearpc` VALUES (130528, 130500, '宁晋县'); +INSERT INTO `ciy_arearpc` VALUES (130529, 130500, '巨鹿县'); +INSERT INTO `ciy_arearpc` VALUES (130530, 130500, '新河县'); +INSERT INTO `ciy_arearpc` VALUES (130531, 130500, '广宗县'); +INSERT INTO `ciy_arearpc` VALUES (130532, 130500, '平乡县'); +INSERT INTO `ciy_arearpc` VALUES (130533, 130500, '威县'); +INSERT INTO `ciy_arearpc` VALUES (130534, 130500, '清河县'); +INSERT INTO `ciy_arearpc` VALUES (130535, 130500, '临西县'); +INSERT INTO `ciy_arearpc` VALUES (130571, 130500, '河北邢台经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (130581, 130500, '南宫市'); +INSERT INTO `ciy_arearpc` VALUES (130582, 130500, '沙河市'); +INSERT INTO `ciy_arearpc` VALUES (130600, 130000, '保定市'); +INSERT INTO `ciy_arearpc` VALUES (130601, 130600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130602, 130600, '竞秀区'); +INSERT INTO `ciy_arearpc` VALUES (130606, 130600, '莲池区'); +INSERT INTO `ciy_arearpc` VALUES (130607, 130600, '满城区'); +INSERT INTO `ciy_arearpc` VALUES (130608, 130600, '清苑区'); +INSERT INTO `ciy_arearpc` VALUES (130609, 130600, '徐水区'); +INSERT INTO `ciy_arearpc` VALUES (130623, 130600, '涞水县'); +INSERT INTO `ciy_arearpc` VALUES (130624, 130600, '阜平县'); +INSERT INTO `ciy_arearpc` VALUES (130626, 130600, '定兴县'); +INSERT INTO `ciy_arearpc` VALUES (130627, 130600, '唐县'); +INSERT INTO `ciy_arearpc` VALUES (130628, 130600, '高阳县'); +INSERT INTO `ciy_arearpc` VALUES (130629, 130600, '容城县'); +INSERT INTO `ciy_arearpc` VALUES (130630, 130600, '涞源县'); +INSERT INTO `ciy_arearpc` VALUES (130631, 130600, '望都县'); +INSERT INTO `ciy_arearpc` VALUES (130632, 130600, '安新县'); +INSERT INTO `ciy_arearpc` VALUES (130633, 130600, '易县'); +INSERT INTO `ciy_arearpc` VALUES (130634, 130600, '曲阳县'); +INSERT INTO `ciy_arearpc` VALUES (130635, 130600, '蠡县'); +INSERT INTO `ciy_arearpc` VALUES (130636, 130600, '顺平县'); +INSERT INTO `ciy_arearpc` VALUES (130637, 130600, '博野县'); +INSERT INTO `ciy_arearpc` VALUES (130638, 130600, '雄县'); +INSERT INTO `ciy_arearpc` VALUES (130671, 130600, '保定高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (130672, 130600, '保定白沟新城'); +INSERT INTO `ciy_arearpc` VALUES (130681, 130600, '涿州市'); +INSERT INTO `ciy_arearpc` VALUES (130682, 130600, '定州市'); +INSERT INTO `ciy_arearpc` VALUES (130683, 130600, '安国市'); +INSERT INTO `ciy_arearpc` VALUES (130684, 130600, '高碑店市'); +INSERT INTO `ciy_arearpc` VALUES (130700, 130000, '张家口市'); +INSERT INTO `ciy_arearpc` VALUES (130701, 130700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130702, 130700, '桥东区'); +INSERT INTO `ciy_arearpc` VALUES (130703, 130700, '桥西区'); +INSERT INTO `ciy_arearpc` VALUES (130705, 130700, '宣化区'); +INSERT INTO `ciy_arearpc` VALUES (130706, 130700, '下花园区'); +INSERT INTO `ciy_arearpc` VALUES (130708, 130700, '万全区'); +INSERT INTO `ciy_arearpc` VALUES (130709, 130700, '崇礼区'); +INSERT INTO `ciy_arearpc` VALUES (130722, 130700, '张北县'); +INSERT INTO `ciy_arearpc` VALUES (130723, 130700, '康保县'); +INSERT INTO `ciy_arearpc` VALUES (130724, 130700, '沽源县'); +INSERT INTO `ciy_arearpc` VALUES (130725, 130700, '尚义县'); +INSERT INTO `ciy_arearpc` VALUES (130726, 130700, '蔚县'); +INSERT INTO `ciy_arearpc` VALUES (130727, 130700, '阳原县'); +INSERT INTO `ciy_arearpc` VALUES (130728, 130700, '怀安县'); +INSERT INTO `ciy_arearpc` VALUES (130730, 130700, '怀来县'); +INSERT INTO `ciy_arearpc` VALUES (130731, 130700, '涿鹿县'); +INSERT INTO `ciy_arearpc` VALUES (130732, 130700, '赤城县'); +INSERT INTO `ciy_arearpc` VALUES (130771, 130700, '张家口经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (130772, 130700, '张家口市察北管理区'); +INSERT INTO `ciy_arearpc` VALUES (130773, 130700, '张家口市塞北管理区'); +INSERT INTO `ciy_arearpc` VALUES (130800, 130000, '承德市'); +INSERT INTO `ciy_arearpc` VALUES (130801, 130800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130802, 130800, '双桥区'); +INSERT INTO `ciy_arearpc` VALUES (130803, 130800, '双滦区'); +INSERT INTO `ciy_arearpc` VALUES (130804, 130800, '鹰手营子矿区'); +INSERT INTO `ciy_arearpc` VALUES (130821, 130800, '承德县'); +INSERT INTO `ciy_arearpc` VALUES (130822, 130800, '兴隆县'); +INSERT INTO `ciy_arearpc` VALUES (130824, 130800, '滦平县'); +INSERT INTO `ciy_arearpc` VALUES (130825, 130800, '隆化县'); +INSERT INTO `ciy_arearpc` VALUES (130826, 130800, '丰宁满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (130827, 130800, '宽城满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (130828, 130800, '围场满族蒙古族自治县'); +INSERT INTO `ciy_arearpc` VALUES (130871, 130800, '承德高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (130881, 130800, '平泉市'); +INSERT INTO `ciy_arearpc` VALUES (130900, 130000, '沧州市'); +INSERT INTO `ciy_arearpc` VALUES (130901, 130900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (130902, 130900, '新华区'); +INSERT INTO `ciy_arearpc` VALUES (130903, 130900, '运河区'); +INSERT INTO `ciy_arearpc` VALUES (130921, 130900, '沧县'); +INSERT INTO `ciy_arearpc` VALUES (130922, 130900, '青县'); +INSERT INTO `ciy_arearpc` VALUES (130923, 130900, '东光县'); +INSERT INTO `ciy_arearpc` VALUES (130924, 130900, '海兴县'); +INSERT INTO `ciy_arearpc` VALUES (130925, 130900, '盐山县'); +INSERT INTO `ciy_arearpc` VALUES (130926, 130900, '肃宁县'); +INSERT INTO `ciy_arearpc` VALUES (130927, 130900, '南皮县'); +INSERT INTO `ciy_arearpc` VALUES (130928, 130900, '吴桥县'); +INSERT INTO `ciy_arearpc` VALUES (130929, 130900, '献县'); +INSERT INTO `ciy_arearpc` VALUES (130930, 130900, '孟村回族自治县'); +INSERT INTO `ciy_arearpc` VALUES (130971, 130900, '河北沧州经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (130972, 130900, '沧州高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (130973, 130900, '沧州渤海新区'); +INSERT INTO `ciy_arearpc` VALUES (130981, 130900, '泊头市'); +INSERT INTO `ciy_arearpc` VALUES (130982, 130900, '任丘市'); +INSERT INTO `ciy_arearpc` VALUES (130983, 130900, '黄骅市'); +INSERT INTO `ciy_arearpc` VALUES (130984, 130900, '河间市'); +INSERT INTO `ciy_arearpc` VALUES (131000, 130000, '廊坊市'); +INSERT INTO `ciy_arearpc` VALUES (131001, 131000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (131002, 131000, '安次区'); +INSERT INTO `ciy_arearpc` VALUES (131003, 131000, '广阳区'); +INSERT INTO `ciy_arearpc` VALUES (131022, 131000, '固安县'); +INSERT INTO `ciy_arearpc` VALUES (131023, 131000, '永清县'); +INSERT INTO `ciy_arearpc` VALUES (131024, 131000, '香河县'); +INSERT INTO `ciy_arearpc` VALUES (131025, 131000, '大城县'); +INSERT INTO `ciy_arearpc` VALUES (131026, 131000, '文安县'); +INSERT INTO `ciy_arearpc` VALUES (131028, 131000, '大厂回族自治县'); +INSERT INTO `ciy_arearpc` VALUES (131071, 131000, '廊坊经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (131081, 131000, '霸州市'); +INSERT INTO `ciy_arearpc` VALUES (131082, 131000, '三河市'); +INSERT INTO `ciy_arearpc` VALUES (131100, 130000, '衡水市'); +INSERT INTO `ciy_arearpc` VALUES (131101, 131100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (131102, 131100, '桃城区'); +INSERT INTO `ciy_arearpc` VALUES (131103, 131100, '冀州区'); +INSERT INTO `ciy_arearpc` VALUES (131121, 131100, '枣强县'); +INSERT INTO `ciy_arearpc` VALUES (131122, 131100, '武邑县'); +INSERT INTO `ciy_arearpc` VALUES (131123, 131100, '武强县'); +INSERT INTO `ciy_arearpc` VALUES (131124, 131100, '饶阳县'); +INSERT INTO `ciy_arearpc` VALUES (131125, 131100, '安平县'); +INSERT INTO `ciy_arearpc` VALUES (131126, 131100, '故城县'); +INSERT INTO `ciy_arearpc` VALUES (131127, 131100, '景县'); +INSERT INTO `ciy_arearpc` VALUES (131128, 131100, '阜城县'); +INSERT INTO `ciy_arearpc` VALUES (131171, 131100, '河北衡水高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (131172, 131100, '衡水滨湖新区'); +INSERT INTO `ciy_arearpc` VALUES (131182, 131100, '深州市'); +INSERT INTO `ciy_arearpc` VALUES (140000, 0, '山西省'); +INSERT INTO `ciy_arearpc` VALUES (140100, 140000, '太原市'); +INSERT INTO `ciy_arearpc` VALUES (140101, 140100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140105, 140100, '小店区'); +INSERT INTO `ciy_arearpc` VALUES (140106, 140100, '迎泽区'); +INSERT INTO `ciy_arearpc` VALUES (140107, 140100, '杏花岭区'); +INSERT INTO `ciy_arearpc` VALUES (140108, 140100, '尖草坪区'); +INSERT INTO `ciy_arearpc` VALUES (140109, 140100, '万柏林区'); +INSERT INTO `ciy_arearpc` VALUES (140110, 140100, '晋源区'); +INSERT INTO `ciy_arearpc` VALUES (140121, 140100, '清徐县'); +INSERT INTO `ciy_arearpc` VALUES (140122, 140100, '阳曲县'); +INSERT INTO `ciy_arearpc` VALUES (140123, 140100, '娄烦县'); +INSERT INTO `ciy_arearpc` VALUES (140171, 140100, '山西转型综合改革示范区'); +INSERT INTO `ciy_arearpc` VALUES (140181, 140100, '古交市'); +INSERT INTO `ciy_arearpc` VALUES (140200, 140000, '大同市'); +INSERT INTO `ciy_arearpc` VALUES (140201, 140200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140212, 140200, '新荣区'); +INSERT INTO `ciy_arearpc` VALUES (140213, 140200, '平城区'); +INSERT INTO `ciy_arearpc` VALUES (140214, 140200, '云冈区'); +INSERT INTO `ciy_arearpc` VALUES (140215, 140200, '云州区'); +INSERT INTO `ciy_arearpc` VALUES (140221, 140200, '阳高县'); +INSERT INTO `ciy_arearpc` VALUES (140222, 140200, '天镇县'); +INSERT INTO `ciy_arearpc` VALUES (140223, 140200, '广灵县'); +INSERT INTO `ciy_arearpc` VALUES (140224, 140200, '灵丘县'); +INSERT INTO `ciy_arearpc` VALUES (140225, 140200, '浑源县'); +INSERT INTO `ciy_arearpc` VALUES (140226, 140200, '左云县'); +INSERT INTO `ciy_arearpc` VALUES (140271, 140200, '山西大同经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (140300, 140000, '阳泉市'); +INSERT INTO `ciy_arearpc` VALUES (140301, 140300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140302, 140300, '城区'); +INSERT INTO `ciy_arearpc` VALUES (140303, 140300, '矿区'); +INSERT INTO `ciy_arearpc` VALUES (140311, 140300, '郊区'); +INSERT INTO `ciy_arearpc` VALUES (140321, 140300, '平定县'); +INSERT INTO `ciy_arearpc` VALUES (140322, 140300, '盂县'); +INSERT INTO `ciy_arearpc` VALUES (140400, 140000, '长治市'); +INSERT INTO `ciy_arearpc` VALUES (140401, 140400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140403, 140400, '潞州区'); +INSERT INTO `ciy_arearpc` VALUES (140404, 140400, '上党区'); +INSERT INTO `ciy_arearpc` VALUES (140405, 140400, '屯留区'); +INSERT INTO `ciy_arearpc` VALUES (140406, 140400, '潞城区'); +INSERT INTO `ciy_arearpc` VALUES (140423, 140400, '襄垣县'); +INSERT INTO `ciy_arearpc` VALUES (140425, 140400, '平顺县'); +INSERT INTO `ciy_arearpc` VALUES (140426, 140400, '黎城县'); +INSERT INTO `ciy_arearpc` VALUES (140427, 140400, '壶关县'); +INSERT INTO `ciy_arearpc` VALUES (140428, 140400, '长子县'); +INSERT INTO `ciy_arearpc` VALUES (140429, 140400, '武乡县'); +INSERT INTO `ciy_arearpc` VALUES (140430, 140400, '沁县'); +INSERT INTO `ciy_arearpc` VALUES (140431, 140400, '沁源县'); +INSERT INTO `ciy_arearpc` VALUES (140471, 140400, '山西长治高新技术产业园区'); +INSERT INTO `ciy_arearpc` VALUES (140500, 140000, '晋城市'); +INSERT INTO `ciy_arearpc` VALUES (140501, 140500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140502, 140500, '城区'); +INSERT INTO `ciy_arearpc` VALUES (140521, 140500, '沁水县'); +INSERT INTO `ciy_arearpc` VALUES (140522, 140500, '阳城县'); +INSERT INTO `ciy_arearpc` VALUES (140524, 140500, '陵川县'); +INSERT INTO `ciy_arearpc` VALUES (140525, 140500, '泽州县'); +INSERT INTO `ciy_arearpc` VALUES (140581, 140500, '高平市'); +INSERT INTO `ciy_arearpc` VALUES (140600, 140000, '朔州市'); +INSERT INTO `ciy_arearpc` VALUES (140601, 140600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140602, 140600, '朔城区'); +INSERT INTO `ciy_arearpc` VALUES (140603, 140600, '平鲁区'); +INSERT INTO `ciy_arearpc` VALUES (140621, 140600, '山阴县'); +INSERT INTO `ciy_arearpc` VALUES (140622, 140600, '应县'); +INSERT INTO `ciy_arearpc` VALUES (140623, 140600, '右玉县'); +INSERT INTO `ciy_arearpc` VALUES (140671, 140600, '山西朔州经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (140681, 140600, '怀仁市'); +INSERT INTO `ciy_arearpc` VALUES (140700, 140000, '晋中市'); +INSERT INTO `ciy_arearpc` VALUES (140701, 140700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140702, 140700, '榆次区'); +INSERT INTO `ciy_arearpc` VALUES (140703, 140700, '太谷区'); +INSERT INTO `ciy_arearpc` VALUES (140721, 140700, '榆社县'); +INSERT INTO `ciy_arearpc` VALUES (140722, 140700, '左权县'); +INSERT INTO `ciy_arearpc` VALUES (140723, 140700, '和顺县'); +INSERT INTO `ciy_arearpc` VALUES (140724, 140700, '昔阳县'); +INSERT INTO `ciy_arearpc` VALUES (140725, 140700, '寿阳县'); +INSERT INTO `ciy_arearpc` VALUES (140727, 140700, '祁县'); +INSERT INTO `ciy_arearpc` VALUES (140728, 140700, '平遥县'); +INSERT INTO `ciy_arearpc` VALUES (140729, 140700, '灵石县'); +INSERT INTO `ciy_arearpc` VALUES (140781, 140700, '介休市'); +INSERT INTO `ciy_arearpc` VALUES (140800, 140000, '运城市'); +INSERT INTO `ciy_arearpc` VALUES (140801, 140800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140802, 140800, '盐湖区'); +INSERT INTO `ciy_arearpc` VALUES (140821, 140800, '临猗县'); +INSERT INTO `ciy_arearpc` VALUES (140822, 140800, '万荣县'); +INSERT INTO `ciy_arearpc` VALUES (140823, 140800, '闻喜县'); +INSERT INTO `ciy_arearpc` VALUES (140824, 140800, '稷山县'); +INSERT INTO `ciy_arearpc` VALUES (140825, 140800, '新绛县'); +INSERT INTO `ciy_arearpc` VALUES (140826, 140800, '绛县'); +INSERT INTO `ciy_arearpc` VALUES (140827, 140800, '垣曲县'); +INSERT INTO `ciy_arearpc` VALUES (140828, 140800, '夏县'); +INSERT INTO `ciy_arearpc` VALUES (140829, 140800, '平陆县'); +INSERT INTO `ciy_arearpc` VALUES (140830, 140800, '芮城县'); +INSERT INTO `ciy_arearpc` VALUES (140881, 140800, '永济市'); +INSERT INTO `ciy_arearpc` VALUES (140882, 140800, '河津市'); +INSERT INTO `ciy_arearpc` VALUES (140900, 140000, '忻州市'); +INSERT INTO `ciy_arearpc` VALUES (140901, 140900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (140902, 140900, '忻府区'); +INSERT INTO `ciy_arearpc` VALUES (140921, 140900, '定襄县'); +INSERT INTO `ciy_arearpc` VALUES (140922, 140900, '五台县'); +INSERT INTO `ciy_arearpc` VALUES (140923, 140900, '代县'); +INSERT INTO `ciy_arearpc` VALUES (140924, 140900, '繁峙县'); +INSERT INTO `ciy_arearpc` VALUES (140925, 140900, '宁武县'); +INSERT INTO `ciy_arearpc` VALUES (140926, 140900, '静乐县'); +INSERT INTO `ciy_arearpc` VALUES (140927, 140900, '神池县'); +INSERT INTO `ciy_arearpc` VALUES (140928, 140900, '五寨县'); +INSERT INTO `ciy_arearpc` VALUES (140929, 140900, '岢岚县'); +INSERT INTO `ciy_arearpc` VALUES (140930, 140900, '河曲县'); +INSERT INTO `ciy_arearpc` VALUES (140931, 140900, '保德县'); +INSERT INTO `ciy_arearpc` VALUES (140932, 140900, '偏关县'); +INSERT INTO `ciy_arearpc` VALUES (140971, 140900, '五台山风景名胜区'); +INSERT INTO `ciy_arearpc` VALUES (140981, 140900, '原平市'); +INSERT INTO `ciy_arearpc` VALUES (141000, 140000, '临汾市'); +INSERT INTO `ciy_arearpc` VALUES (141001, 141000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (141002, 141000, '尧都区'); +INSERT INTO `ciy_arearpc` VALUES (141021, 141000, '曲沃县'); +INSERT INTO `ciy_arearpc` VALUES (141022, 141000, '翼城县'); +INSERT INTO `ciy_arearpc` VALUES (141023, 141000, '襄汾县'); +INSERT INTO `ciy_arearpc` VALUES (141024, 141000, '洪洞县'); +INSERT INTO `ciy_arearpc` VALUES (141025, 141000, '古县'); +INSERT INTO `ciy_arearpc` VALUES (141026, 141000, '安泽县'); +INSERT INTO `ciy_arearpc` VALUES (141027, 141000, '浮山县'); +INSERT INTO `ciy_arearpc` VALUES (141028, 141000, '吉县'); +INSERT INTO `ciy_arearpc` VALUES (141029, 141000, '乡宁县'); +INSERT INTO `ciy_arearpc` VALUES (141030, 141000, '大宁县'); +INSERT INTO `ciy_arearpc` VALUES (141031, 141000, '隰县'); +INSERT INTO `ciy_arearpc` VALUES (141032, 141000, '永和县'); +INSERT INTO `ciy_arearpc` VALUES (141033, 141000, '蒲县'); +INSERT INTO `ciy_arearpc` VALUES (141034, 141000, '汾西县'); +INSERT INTO `ciy_arearpc` VALUES (141081, 141000, '侯马市'); +INSERT INTO `ciy_arearpc` VALUES (141082, 141000, '霍州市'); +INSERT INTO `ciy_arearpc` VALUES (141100, 140000, '吕梁市'); +INSERT INTO `ciy_arearpc` VALUES (141101, 141100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (141102, 141100, '离石区'); +INSERT INTO `ciy_arearpc` VALUES (141121, 141100, '文水县'); +INSERT INTO `ciy_arearpc` VALUES (141122, 141100, '交城县'); +INSERT INTO `ciy_arearpc` VALUES (141123, 141100, '兴县'); +INSERT INTO `ciy_arearpc` VALUES (141124, 141100, '临县'); +INSERT INTO `ciy_arearpc` VALUES (141125, 141100, '柳林县'); +INSERT INTO `ciy_arearpc` VALUES (141126, 141100, '石楼县'); +INSERT INTO `ciy_arearpc` VALUES (141127, 141100, '岚县'); +INSERT INTO `ciy_arearpc` VALUES (141128, 141100, '方山县'); +INSERT INTO `ciy_arearpc` VALUES (141129, 141100, '中阳县'); +INSERT INTO `ciy_arearpc` VALUES (141130, 141100, '交口县'); +INSERT INTO `ciy_arearpc` VALUES (141181, 141100, '孝义市'); +INSERT INTO `ciy_arearpc` VALUES (141182, 141100, '汾阳市'); +INSERT INTO `ciy_arearpc` VALUES (150000, 0, '内蒙古自治区'); +INSERT INTO `ciy_arearpc` VALUES (150100, 150000, '呼和浩特市'); +INSERT INTO `ciy_arearpc` VALUES (150101, 150100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150102, 150100, '新城区'); +INSERT INTO `ciy_arearpc` VALUES (150103, 150100, '回民区'); +INSERT INTO `ciy_arearpc` VALUES (150104, 150100, '玉泉区'); +INSERT INTO `ciy_arearpc` VALUES (150105, 150100, '赛罕区'); +INSERT INTO `ciy_arearpc` VALUES (150121, 150100, '土默特左旗'); +INSERT INTO `ciy_arearpc` VALUES (150122, 150100, '托克托县'); +INSERT INTO `ciy_arearpc` VALUES (150123, 150100, '和林格尔县'); +INSERT INTO `ciy_arearpc` VALUES (150124, 150100, '清水河县'); +INSERT INTO `ciy_arearpc` VALUES (150125, 150100, '武川县'); +INSERT INTO `ciy_arearpc` VALUES (150172, 150100, '呼和浩特经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (150200, 150000, '包头市'); +INSERT INTO `ciy_arearpc` VALUES (150201, 150200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150202, 150200, '东河区'); +INSERT INTO `ciy_arearpc` VALUES (150203, 150200, '昆都仑区'); +INSERT INTO `ciy_arearpc` VALUES (150204, 150200, '青山区'); +INSERT INTO `ciy_arearpc` VALUES (150205, 150200, '石拐区'); +INSERT INTO `ciy_arearpc` VALUES (150206, 150200, '白云鄂博矿区'); +INSERT INTO `ciy_arearpc` VALUES (150207, 150200, '九原区'); +INSERT INTO `ciy_arearpc` VALUES (150221, 150200, '土默特右旗'); +INSERT INTO `ciy_arearpc` VALUES (150222, 150200, '固阳县'); +INSERT INTO `ciy_arearpc` VALUES (150223, 150200, '达尔罕茂明安联合旗'); +INSERT INTO `ciy_arearpc` VALUES (150271, 150200, '包头稀土高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (150300, 150000, '乌海市'); +INSERT INTO `ciy_arearpc` VALUES (150301, 150300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150302, 150300, '海勃湾区'); +INSERT INTO `ciy_arearpc` VALUES (150303, 150300, '海南区'); +INSERT INTO `ciy_arearpc` VALUES (150304, 150300, '乌达区'); +INSERT INTO `ciy_arearpc` VALUES (150400, 150000, '赤峰市'); +INSERT INTO `ciy_arearpc` VALUES (150401, 150400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150402, 150400, '红山区'); +INSERT INTO `ciy_arearpc` VALUES (150403, 150400, '元宝山区'); +INSERT INTO `ciy_arearpc` VALUES (150404, 150400, '松山区'); +INSERT INTO `ciy_arearpc` VALUES (150421, 150400, '阿鲁科尔沁旗'); +INSERT INTO `ciy_arearpc` VALUES (150422, 150400, '巴林左旗'); +INSERT INTO `ciy_arearpc` VALUES (150423, 150400, '巴林右旗'); +INSERT INTO `ciy_arearpc` VALUES (150424, 150400, '林西县'); +INSERT INTO `ciy_arearpc` VALUES (150425, 150400, '克什克腾旗'); +INSERT INTO `ciy_arearpc` VALUES (150426, 150400, '翁牛特旗'); +INSERT INTO `ciy_arearpc` VALUES (150428, 150400, '喀喇沁旗'); +INSERT INTO `ciy_arearpc` VALUES (150429, 150400, '宁城县'); +INSERT INTO `ciy_arearpc` VALUES (150430, 150400, '敖汉旗'); +INSERT INTO `ciy_arearpc` VALUES (150500, 150000, '通辽市'); +INSERT INTO `ciy_arearpc` VALUES (150501, 150500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150502, 150500, '科尔沁区'); +INSERT INTO `ciy_arearpc` VALUES (150521, 150500, '科尔沁左翼中旗'); +INSERT INTO `ciy_arearpc` VALUES (150522, 150500, '科尔沁左翼后旗'); +INSERT INTO `ciy_arearpc` VALUES (150523, 150500, '开鲁县'); +INSERT INTO `ciy_arearpc` VALUES (150524, 150500, '库伦旗'); +INSERT INTO `ciy_arearpc` VALUES (150525, 150500, '奈曼旗'); +INSERT INTO `ciy_arearpc` VALUES (150526, 150500, '扎鲁特旗'); +INSERT INTO `ciy_arearpc` VALUES (150571, 150500, '通辽经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (150581, 150500, '霍林郭勒市'); +INSERT INTO `ciy_arearpc` VALUES (150600, 150000, '鄂尔多斯市'); +INSERT INTO `ciy_arearpc` VALUES (150601, 150600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150602, 150600, '东胜区'); +INSERT INTO `ciy_arearpc` VALUES (150603, 150600, '康巴什区'); +INSERT INTO `ciy_arearpc` VALUES (150621, 150600, '达拉特旗'); +INSERT INTO `ciy_arearpc` VALUES (150622, 150600, '准格尔旗'); +INSERT INTO `ciy_arearpc` VALUES (150623, 150600, '鄂托克前旗'); +INSERT INTO `ciy_arearpc` VALUES (150624, 150600, '鄂托克旗'); +INSERT INTO `ciy_arearpc` VALUES (150625, 150600, '杭锦旗'); +INSERT INTO `ciy_arearpc` VALUES (150626, 150600, '乌审旗'); +INSERT INTO `ciy_arearpc` VALUES (150627, 150600, '伊金霍洛旗'); +INSERT INTO `ciy_arearpc` VALUES (150700, 150000, '呼伦贝尔市'); +INSERT INTO `ciy_arearpc` VALUES (150701, 150700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150702, 150700, '海拉尔区'); +INSERT INTO `ciy_arearpc` VALUES (150703, 150700, '扎赉诺尔区'); +INSERT INTO `ciy_arearpc` VALUES (150721, 150700, '阿荣旗'); +INSERT INTO `ciy_arearpc` VALUES (150722, 150700, '莫力达瓦达斡尔族自治旗'); +INSERT INTO `ciy_arearpc` VALUES (150723, 150700, '鄂伦春自治旗'); +INSERT INTO `ciy_arearpc` VALUES (150724, 150700, '鄂温克族自治旗'); +INSERT INTO `ciy_arearpc` VALUES (150725, 150700, '陈巴尔虎旗'); +INSERT INTO `ciy_arearpc` VALUES (150726, 150700, '新巴尔虎左旗'); +INSERT INTO `ciy_arearpc` VALUES (150727, 150700, '新巴尔虎右旗'); +INSERT INTO `ciy_arearpc` VALUES (150781, 150700, '满洲里市'); +INSERT INTO `ciy_arearpc` VALUES (150782, 150700, '牙克石市'); +INSERT INTO `ciy_arearpc` VALUES (150783, 150700, '扎兰屯市'); +INSERT INTO `ciy_arearpc` VALUES (150784, 150700, '额尔古纳市'); +INSERT INTO `ciy_arearpc` VALUES (150785, 150700, '根河市'); +INSERT INTO `ciy_arearpc` VALUES (150800, 150000, '巴彦淖尔市'); +INSERT INTO `ciy_arearpc` VALUES (150801, 150800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150802, 150800, '临河区'); +INSERT INTO `ciy_arearpc` VALUES (150821, 150800, '五原县'); +INSERT INTO `ciy_arearpc` VALUES (150822, 150800, '磴口县'); +INSERT INTO `ciy_arearpc` VALUES (150823, 150800, '乌拉特前旗'); +INSERT INTO `ciy_arearpc` VALUES (150824, 150800, '乌拉特中旗'); +INSERT INTO `ciy_arearpc` VALUES (150825, 150800, '乌拉特后旗'); +INSERT INTO `ciy_arearpc` VALUES (150826, 150800, '杭锦后旗'); +INSERT INTO `ciy_arearpc` VALUES (150900, 150000, '乌兰察布市'); +INSERT INTO `ciy_arearpc` VALUES (150901, 150900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (150902, 150900, '集宁区'); +INSERT INTO `ciy_arearpc` VALUES (150921, 150900, '卓资县'); +INSERT INTO `ciy_arearpc` VALUES (150922, 150900, '化德县'); +INSERT INTO `ciy_arearpc` VALUES (150923, 150900, '商都县'); +INSERT INTO `ciy_arearpc` VALUES (150924, 150900, '兴和县'); +INSERT INTO `ciy_arearpc` VALUES (150925, 150900, '凉城县'); +INSERT INTO `ciy_arearpc` VALUES (150926, 150900, '察哈尔右翼前旗'); +INSERT INTO `ciy_arearpc` VALUES (150927, 150900, '察哈尔右翼中旗'); +INSERT INTO `ciy_arearpc` VALUES (150928, 150900, '察哈尔右翼后旗'); +INSERT INTO `ciy_arearpc` VALUES (150929, 150900, '四子王旗'); +INSERT INTO `ciy_arearpc` VALUES (150981, 150900, '丰镇市'); +INSERT INTO `ciy_arearpc` VALUES (152200, 150000, '兴安盟'); +INSERT INTO `ciy_arearpc` VALUES (152201, 152200, '乌兰浩特市'); +INSERT INTO `ciy_arearpc` VALUES (152202, 152200, '阿尔山市'); +INSERT INTO `ciy_arearpc` VALUES (152221, 152200, '科尔沁右翼前旗'); +INSERT INTO `ciy_arearpc` VALUES (152222, 152200, '科尔沁右翼中旗'); +INSERT INTO `ciy_arearpc` VALUES (152223, 152200, '扎赉特旗'); +INSERT INTO `ciy_arearpc` VALUES (152224, 152200, '突泉县'); +INSERT INTO `ciy_arearpc` VALUES (152500, 150000, '锡林郭勒盟'); +INSERT INTO `ciy_arearpc` VALUES (152501, 152500, '二连浩特市'); +INSERT INTO `ciy_arearpc` VALUES (152502, 152500, '锡林浩特市'); +INSERT INTO `ciy_arearpc` VALUES (152522, 152500, '阿巴嘎旗'); +INSERT INTO `ciy_arearpc` VALUES (152523, 152500, '苏尼特左旗'); +INSERT INTO `ciy_arearpc` VALUES (152524, 152500, '苏尼特右旗'); +INSERT INTO `ciy_arearpc` VALUES (152525, 152500, '东乌珠穆沁旗'); +INSERT INTO `ciy_arearpc` VALUES (152526, 152500, '西乌珠穆沁旗'); +INSERT INTO `ciy_arearpc` VALUES (152527, 152500, '太仆寺旗'); +INSERT INTO `ciy_arearpc` VALUES (152528, 152500, '镶黄旗'); +INSERT INTO `ciy_arearpc` VALUES (152529, 152500, '正镶白旗'); +INSERT INTO `ciy_arearpc` VALUES (152530, 152500, '正蓝旗'); +INSERT INTO `ciy_arearpc` VALUES (152531, 152500, '多伦县'); +INSERT INTO `ciy_arearpc` VALUES (152571, 152500, '乌拉盖管委会'); +INSERT INTO `ciy_arearpc` VALUES (152900, 150000, '阿拉善盟'); +INSERT INTO `ciy_arearpc` VALUES (152921, 152900, '阿拉善左旗'); +INSERT INTO `ciy_arearpc` VALUES (152922, 152900, '阿拉善右旗'); +INSERT INTO `ciy_arearpc` VALUES (152923, 152900, '额济纳旗'); +INSERT INTO `ciy_arearpc` VALUES (152971, 152900, '内蒙古阿拉善高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (210000, 0, '辽宁省'); +INSERT INTO `ciy_arearpc` VALUES (210100, 210000, '沈阳市'); +INSERT INTO `ciy_arearpc` VALUES (210101, 210100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210102, 210100, '和平区'); +INSERT INTO `ciy_arearpc` VALUES (210103, 210100, '沈河区'); +INSERT INTO `ciy_arearpc` VALUES (210104, 210100, '大东区'); +INSERT INTO `ciy_arearpc` VALUES (210105, 210100, '皇姑区'); +INSERT INTO `ciy_arearpc` VALUES (210106, 210100, '铁西区'); +INSERT INTO `ciy_arearpc` VALUES (210111, 210100, '苏家屯区'); +INSERT INTO `ciy_arearpc` VALUES (210112, 210100, '浑南区'); +INSERT INTO `ciy_arearpc` VALUES (210113, 210100, '沈北新区'); +INSERT INTO `ciy_arearpc` VALUES (210114, 210100, '于洪区'); +INSERT INTO `ciy_arearpc` VALUES (210115, 210100, '辽中区'); +INSERT INTO `ciy_arearpc` VALUES (210123, 210100, '康平县'); +INSERT INTO `ciy_arearpc` VALUES (210124, 210100, '法库县'); +INSERT INTO `ciy_arearpc` VALUES (210181, 210100, '新民市'); +INSERT INTO `ciy_arearpc` VALUES (210200, 210000, '大连市'); +INSERT INTO `ciy_arearpc` VALUES (210201, 210200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210202, 210200, '中山区'); +INSERT INTO `ciy_arearpc` VALUES (210203, 210200, '西岗区'); +INSERT INTO `ciy_arearpc` VALUES (210204, 210200, '沙河口区'); +INSERT INTO `ciy_arearpc` VALUES (210211, 210200, '甘井子区'); +INSERT INTO `ciy_arearpc` VALUES (210212, 210200, '旅顺口区'); +INSERT INTO `ciy_arearpc` VALUES (210213, 210200, '金州区'); +INSERT INTO `ciy_arearpc` VALUES (210214, 210200, '普兰店区'); +INSERT INTO `ciy_arearpc` VALUES (210224, 210200, '长海县'); +INSERT INTO `ciy_arearpc` VALUES (210281, 210200, '瓦房店市'); +INSERT INTO `ciy_arearpc` VALUES (210283, 210200, '庄河市'); +INSERT INTO `ciy_arearpc` VALUES (210300, 210000, '鞍山市'); +INSERT INTO `ciy_arearpc` VALUES (210301, 210300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210302, 210300, '铁东区'); +INSERT INTO `ciy_arearpc` VALUES (210303, 210300, '铁西区'); +INSERT INTO `ciy_arearpc` VALUES (210304, 210300, '立山区'); +INSERT INTO `ciy_arearpc` VALUES (210311, 210300, '千山区'); +INSERT INTO `ciy_arearpc` VALUES (210321, 210300, '台安县'); +INSERT INTO `ciy_arearpc` VALUES (210323, 210300, '岫岩满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (210381, 210300, '海城市'); +INSERT INTO `ciy_arearpc` VALUES (210400, 210000, '抚顺市'); +INSERT INTO `ciy_arearpc` VALUES (210401, 210400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210402, 210400, '新抚区'); +INSERT INTO `ciy_arearpc` VALUES (210403, 210400, '东洲区'); +INSERT INTO `ciy_arearpc` VALUES (210404, 210400, '望花区'); +INSERT INTO `ciy_arearpc` VALUES (210411, 210400, '顺城区'); +INSERT INTO `ciy_arearpc` VALUES (210421, 210400, '抚顺县'); +INSERT INTO `ciy_arearpc` VALUES (210422, 210400, '新宾满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (210423, 210400, '清原满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (210500, 210000, '本溪市'); +INSERT INTO `ciy_arearpc` VALUES (210501, 210500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210502, 210500, '平山区'); +INSERT INTO `ciy_arearpc` VALUES (210503, 210500, '溪湖区'); +INSERT INTO `ciy_arearpc` VALUES (210504, 210500, '明山区'); +INSERT INTO `ciy_arearpc` VALUES (210505, 210500, '南芬区'); +INSERT INTO `ciy_arearpc` VALUES (210521, 210500, '本溪满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (210522, 210500, '桓仁满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (210600, 210000, '丹东市'); +INSERT INTO `ciy_arearpc` VALUES (210601, 210600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210602, 210600, '元宝区'); +INSERT INTO `ciy_arearpc` VALUES (210603, 210600, '振兴区'); +INSERT INTO `ciy_arearpc` VALUES (210604, 210600, '振安区'); +INSERT INTO `ciy_arearpc` VALUES (210624, 210600, '宽甸满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (210681, 210600, '东港市'); +INSERT INTO `ciy_arearpc` VALUES (210682, 210600, '凤城市'); +INSERT INTO `ciy_arearpc` VALUES (210700, 210000, '锦州市'); +INSERT INTO `ciy_arearpc` VALUES (210701, 210700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210702, 210700, '古塔区'); +INSERT INTO `ciy_arearpc` VALUES (210703, 210700, '凌河区'); +INSERT INTO `ciy_arearpc` VALUES (210711, 210700, '太和区'); +INSERT INTO `ciy_arearpc` VALUES (210726, 210700, '黑山县'); +INSERT INTO `ciy_arearpc` VALUES (210727, 210700, '义县'); +INSERT INTO `ciy_arearpc` VALUES (210781, 210700, '凌海市'); +INSERT INTO `ciy_arearpc` VALUES (210782, 210700, '北镇市'); +INSERT INTO `ciy_arearpc` VALUES (210800, 210000, '营口市'); +INSERT INTO `ciy_arearpc` VALUES (210801, 210800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210802, 210800, '站前区'); +INSERT INTO `ciy_arearpc` VALUES (210803, 210800, '西市区'); +INSERT INTO `ciy_arearpc` VALUES (210804, 210800, '鲅鱼圈区'); +INSERT INTO `ciy_arearpc` VALUES (210811, 210800, '老边区'); +INSERT INTO `ciy_arearpc` VALUES (210881, 210800, '盖州市'); +INSERT INTO `ciy_arearpc` VALUES (210882, 210800, '大石桥市'); +INSERT INTO `ciy_arearpc` VALUES (210900, 210000, '阜新市'); +INSERT INTO `ciy_arearpc` VALUES (210901, 210900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (210902, 210900, '海州区'); +INSERT INTO `ciy_arearpc` VALUES (210903, 210900, '新邱区'); +INSERT INTO `ciy_arearpc` VALUES (210904, 210900, '太平区'); +INSERT INTO `ciy_arearpc` VALUES (210905, 210900, '清河门区'); +INSERT INTO `ciy_arearpc` VALUES (210911, 210900, '细河区'); +INSERT INTO `ciy_arearpc` VALUES (210921, 210900, '阜新蒙古族自治县'); +INSERT INTO `ciy_arearpc` VALUES (210922, 210900, '彰武县'); +INSERT INTO `ciy_arearpc` VALUES (211000, 210000, '辽阳市'); +INSERT INTO `ciy_arearpc` VALUES (211001, 211000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (211002, 211000, '白塔区'); +INSERT INTO `ciy_arearpc` VALUES (211003, 211000, '文圣区'); +INSERT INTO `ciy_arearpc` VALUES (211004, 211000, '宏伟区'); +INSERT INTO `ciy_arearpc` VALUES (211005, 211000, '弓长岭区'); +INSERT INTO `ciy_arearpc` VALUES (211011, 211000, '太子河区'); +INSERT INTO `ciy_arearpc` VALUES (211021, 211000, '辽阳县'); +INSERT INTO `ciy_arearpc` VALUES (211081, 211000, '灯塔市'); +INSERT INTO `ciy_arearpc` VALUES (211100, 210000, '盘锦市'); +INSERT INTO `ciy_arearpc` VALUES (211101, 211100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (211102, 211100, '双台子区'); +INSERT INTO `ciy_arearpc` VALUES (211103, 211100, '兴隆台区'); +INSERT INTO `ciy_arearpc` VALUES (211104, 211100, '大洼区'); +INSERT INTO `ciy_arearpc` VALUES (211122, 211100, '盘山县'); +INSERT INTO `ciy_arearpc` VALUES (211200, 210000, '铁岭市'); +INSERT INTO `ciy_arearpc` VALUES (211201, 211200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (211202, 211200, '银州区'); +INSERT INTO `ciy_arearpc` VALUES (211204, 211200, '清河区'); +INSERT INTO `ciy_arearpc` VALUES (211221, 211200, '铁岭县'); +INSERT INTO `ciy_arearpc` VALUES (211223, 211200, '西丰县'); +INSERT INTO `ciy_arearpc` VALUES (211224, 211200, '昌图县'); +INSERT INTO `ciy_arearpc` VALUES (211281, 211200, '调兵山市'); +INSERT INTO `ciy_arearpc` VALUES (211282, 211200, '开原市'); +INSERT INTO `ciy_arearpc` VALUES (211300, 210000, '朝阳市'); +INSERT INTO `ciy_arearpc` VALUES (211301, 211300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (211302, 211300, '双塔区'); +INSERT INTO `ciy_arearpc` VALUES (211303, 211300, '龙城区'); +INSERT INTO `ciy_arearpc` VALUES (211321, 211300, '朝阳县'); +INSERT INTO `ciy_arearpc` VALUES (211322, 211300, '建平县'); +INSERT INTO `ciy_arearpc` VALUES (211324, 211300, '喀喇沁左翼蒙古族自治县'); +INSERT INTO `ciy_arearpc` VALUES (211381, 211300, '北票市'); +INSERT INTO `ciy_arearpc` VALUES (211382, 211300, '凌源市'); +INSERT INTO `ciy_arearpc` VALUES (211400, 210000, '葫芦岛市'); +INSERT INTO `ciy_arearpc` VALUES (211401, 211400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (211402, 211400, '连山区'); +INSERT INTO `ciy_arearpc` VALUES (211403, 211400, '龙港区'); +INSERT INTO `ciy_arearpc` VALUES (211404, 211400, '南票区'); +INSERT INTO `ciy_arearpc` VALUES (211421, 211400, '绥中县'); +INSERT INTO `ciy_arearpc` VALUES (211422, 211400, '建昌县'); +INSERT INTO `ciy_arearpc` VALUES (211481, 211400, '兴城市'); +INSERT INTO `ciy_arearpc` VALUES (220000, 0, '吉林省'); +INSERT INTO `ciy_arearpc` VALUES (220100, 220000, '长春市'); +INSERT INTO `ciy_arearpc` VALUES (220101, 220100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (220102, 220100, '南关区'); +INSERT INTO `ciy_arearpc` VALUES (220103, 220100, '宽城区'); +INSERT INTO `ciy_arearpc` VALUES (220104, 220100, '朝阳区'); +INSERT INTO `ciy_arearpc` VALUES (220105, 220100, '二道区'); +INSERT INTO `ciy_arearpc` VALUES (220106, 220100, '绿园区'); +INSERT INTO `ciy_arearpc` VALUES (220112, 220100, '双阳区'); +INSERT INTO `ciy_arearpc` VALUES (220113, 220100, '九台区'); +INSERT INTO `ciy_arearpc` VALUES (220122, 220100, '农安县'); +INSERT INTO `ciy_arearpc` VALUES (220171, 220100, '长春经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (220172, 220100, '长春净月高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (220173, 220100, '长春高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (220174, 220100, '长春汽车经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (220182, 220100, '榆树市'); +INSERT INTO `ciy_arearpc` VALUES (220183, 220100, '德惠市'); +INSERT INTO `ciy_arearpc` VALUES (220184, 220100, '公主岭市'); +INSERT INTO `ciy_arearpc` VALUES (220200, 220000, '吉林市'); +INSERT INTO `ciy_arearpc` VALUES (220201, 220200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (220202, 220200, '昌邑区'); +INSERT INTO `ciy_arearpc` VALUES (220203, 220200, '龙潭区'); +INSERT INTO `ciy_arearpc` VALUES (220204, 220200, '船营区'); +INSERT INTO `ciy_arearpc` VALUES (220211, 220200, '丰满区'); +INSERT INTO `ciy_arearpc` VALUES (220221, 220200, '永吉县'); +INSERT INTO `ciy_arearpc` VALUES (220271, 220200, '吉林经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (220272, 220200, '吉林高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (220273, 220200, '吉林中国新加坡食品区'); +INSERT INTO `ciy_arearpc` VALUES (220281, 220200, '蛟河市'); +INSERT INTO `ciy_arearpc` VALUES (220282, 220200, '桦甸市'); +INSERT INTO `ciy_arearpc` VALUES (220283, 220200, '舒兰市'); +INSERT INTO `ciy_arearpc` VALUES (220284, 220200, '磐石市'); +INSERT INTO `ciy_arearpc` VALUES (220300, 220000, '四平市'); +INSERT INTO `ciy_arearpc` VALUES (220301, 220300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (220302, 220300, '铁西区'); +INSERT INTO `ciy_arearpc` VALUES (220303, 220300, '铁东区'); +INSERT INTO `ciy_arearpc` VALUES (220322, 220300, '梨树县'); +INSERT INTO `ciy_arearpc` VALUES (220323, 220300, '伊通满族自治县'); +INSERT INTO `ciy_arearpc` VALUES (220382, 220300, '双辽市'); +INSERT INTO `ciy_arearpc` VALUES (220400, 220000, '辽源市'); +INSERT INTO `ciy_arearpc` VALUES (220401, 220400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (220402, 220400, '龙山区'); +INSERT INTO `ciy_arearpc` VALUES (220403, 220400, '西安区'); +INSERT INTO `ciy_arearpc` VALUES (220421, 220400, '东丰县'); +INSERT INTO `ciy_arearpc` VALUES (220422, 220400, '东辽县'); +INSERT INTO `ciy_arearpc` VALUES (220500, 220000, '通化市'); +INSERT INTO `ciy_arearpc` VALUES (220501, 220500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (220502, 220500, '东昌区'); +INSERT INTO `ciy_arearpc` VALUES (220503, 220500, '二道江区'); +INSERT INTO `ciy_arearpc` VALUES (220521, 220500, '通化县'); +INSERT INTO `ciy_arearpc` VALUES (220523, 220500, '辉南县'); +INSERT INTO `ciy_arearpc` VALUES (220524, 220500, '柳河县'); +INSERT INTO `ciy_arearpc` VALUES (220581, 220500, '梅河口市'); +INSERT INTO `ciy_arearpc` VALUES (220582, 220500, '集安市'); +INSERT INTO `ciy_arearpc` VALUES (220600, 220000, '白山市'); +INSERT INTO `ciy_arearpc` VALUES (220601, 220600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (220602, 220600, '浑江区'); +INSERT INTO `ciy_arearpc` VALUES (220605, 220600, '江源区'); +INSERT INTO `ciy_arearpc` VALUES (220621, 220600, '抚松县'); +INSERT INTO `ciy_arearpc` VALUES (220622, 220600, '靖宇县'); +INSERT INTO `ciy_arearpc` VALUES (220623, 220600, '长白朝鲜族自治县'); +INSERT INTO `ciy_arearpc` VALUES (220681, 220600, '临江市'); +INSERT INTO `ciy_arearpc` VALUES (220700, 220000, '松原市'); +INSERT INTO `ciy_arearpc` VALUES (220701, 220700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (220702, 220700, '宁江区'); +INSERT INTO `ciy_arearpc` VALUES (220721, 220700, '前郭尔罗斯蒙古族自治县'); +INSERT INTO `ciy_arearpc` VALUES (220722, 220700, '长岭县'); +INSERT INTO `ciy_arearpc` VALUES (220723, 220700, '乾安县'); +INSERT INTO `ciy_arearpc` VALUES (220771, 220700, '吉林松原经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (220781, 220700, '扶余市'); +INSERT INTO `ciy_arearpc` VALUES (220800, 220000, '白城市'); +INSERT INTO `ciy_arearpc` VALUES (220801, 220800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (220802, 220800, '洮北区'); +INSERT INTO `ciy_arearpc` VALUES (220821, 220800, '镇赉县'); +INSERT INTO `ciy_arearpc` VALUES (220822, 220800, '通榆县'); +INSERT INTO `ciy_arearpc` VALUES (220871, 220800, '吉林白城经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (220881, 220800, '洮南市'); +INSERT INTO `ciy_arearpc` VALUES (220882, 220800, '大安市'); +INSERT INTO `ciy_arearpc` VALUES (222400, 220000, '延边朝鲜族自治州'); +INSERT INTO `ciy_arearpc` VALUES (222401, 222400, '延吉市'); +INSERT INTO `ciy_arearpc` VALUES (222402, 222400, '图们市'); +INSERT INTO `ciy_arearpc` VALUES (222403, 222400, '敦化市'); +INSERT INTO `ciy_arearpc` VALUES (222404, 222400, '珲春市'); +INSERT INTO `ciy_arearpc` VALUES (222405, 222400, '龙井市'); +INSERT INTO `ciy_arearpc` VALUES (222406, 222400, '和龙市'); +INSERT INTO `ciy_arearpc` VALUES (222424, 222400, '汪清县'); +INSERT INTO `ciy_arearpc` VALUES (222426, 222400, '安图县'); +INSERT INTO `ciy_arearpc` VALUES (230000, 0, '黑龙江省'); +INSERT INTO `ciy_arearpc` VALUES (230100, 230000, '哈尔滨市'); +INSERT INTO `ciy_arearpc` VALUES (230101, 230100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230102, 230100, '道里区'); +INSERT INTO `ciy_arearpc` VALUES (230103, 230100, '南岗区'); +INSERT INTO `ciy_arearpc` VALUES (230104, 230100, '道外区'); +INSERT INTO `ciy_arearpc` VALUES (230108, 230100, '平房区'); +INSERT INTO `ciy_arearpc` VALUES (230109, 230100, '松北区'); +INSERT INTO `ciy_arearpc` VALUES (230110, 230100, '香坊区'); +INSERT INTO `ciy_arearpc` VALUES (230111, 230100, '呼兰区'); +INSERT INTO `ciy_arearpc` VALUES (230112, 230100, '阿城区'); +INSERT INTO `ciy_arearpc` VALUES (230113, 230100, '双城区'); +INSERT INTO `ciy_arearpc` VALUES (230123, 230100, '依兰县'); +INSERT INTO `ciy_arearpc` VALUES (230124, 230100, '方正县'); +INSERT INTO `ciy_arearpc` VALUES (230125, 230100, '宾县'); +INSERT INTO `ciy_arearpc` VALUES (230126, 230100, '巴彦县'); +INSERT INTO `ciy_arearpc` VALUES (230127, 230100, '木兰县'); +INSERT INTO `ciy_arearpc` VALUES (230128, 230100, '通河县'); +INSERT INTO `ciy_arearpc` VALUES (230129, 230100, '延寿县'); +INSERT INTO `ciy_arearpc` VALUES (230183, 230100, '尚志市'); +INSERT INTO `ciy_arearpc` VALUES (230184, 230100, '五常市'); +INSERT INTO `ciy_arearpc` VALUES (230200, 230000, '齐齐哈尔市'); +INSERT INTO `ciy_arearpc` VALUES (230201, 230200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230202, 230200, '龙沙区'); +INSERT INTO `ciy_arearpc` VALUES (230203, 230200, '建华区'); +INSERT INTO `ciy_arearpc` VALUES (230204, 230200, '铁锋区'); +INSERT INTO `ciy_arearpc` VALUES (230205, 230200, '昂昂溪区'); +INSERT INTO `ciy_arearpc` VALUES (230206, 230200, '富拉尔基区'); +INSERT INTO `ciy_arearpc` VALUES (230207, 230200, '碾子山区'); +INSERT INTO `ciy_arearpc` VALUES (230208, 230200, '梅里斯达斡尔族区'); +INSERT INTO `ciy_arearpc` VALUES (230221, 230200, '龙江县'); +INSERT INTO `ciy_arearpc` VALUES (230223, 230200, '依安县'); +INSERT INTO `ciy_arearpc` VALUES (230224, 230200, '泰来县'); +INSERT INTO `ciy_arearpc` VALUES (230225, 230200, '甘南县'); +INSERT INTO `ciy_arearpc` VALUES (230227, 230200, '富裕县'); +INSERT INTO `ciy_arearpc` VALUES (230229, 230200, '克山县'); +INSERT INTO `ciy_arearpc` VALUES (230230, 230200, '克东县'); +INSERT INTO `ciy_arearpc` VALUES (230231, 230200, '拜泉县'); +INSERT INTO `ciy_arearpc` VALUES (230281, 230200, '讷河市'); +INSERT INTO `ciy_arearpc` VALUES (230300, 230000, '鸡西市'); +INSERT INTO `ciy_arearpc` VALUES (230301, 230300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230302, 230300, '鸡冠区'); +INSERT INTO `ciy_arearpc` VALUES (230303, 230300, '恒山区'); +INSERT INTO `ciy_arearpc` VALUES (230304, 230300, '滴道区'); +INSERT INTO `ciy_arearpc` VALUES (230305, 230300, '梨树区'); +INSERT INTO `ciy_arearpc` VALUES (230306, 230300, '城子河区'); +INSERT INTO `ciy_arearpc` VALUES (230307, 230300, '麻山区'); +INSERT INTO `ciy_arearpc` VALUES (230321, 230300, '鸡东县'); +INSERT INTO `ciy_arearpc` VALUES (230381, 230300, '虎林市'); +INSERT INTO `ciy_arearpc` VALUES (230382, 230300, '密山市'); +INSERT INTO `ciy_arearpc` VALUES (230400, 230000, '鹤岗市'); +INSERT INTO `ciy_arearpc` VALUES (230401, 230400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230402, 230400, '向阳区'); +INSERT INTO `ciy_arearpc` VALUES (230403, 230400, '工农区'); +INSERT INTO `ciy_arearpc` VALUES (230404, 230400, '南山区'); +INSERT INTO `ciy_arearpc` VALUES (230405, 230400, '兴安区'); +INSERT INTO `ciy_arearpc` VALUES (230406, 230400, '东山区'); +INSERT INTO `ciy_arearpc` VALUES (230407, 230400, '兴山区'); +INSERT INTO `ciy_arearpc` VALUES (230421, 230400, '萝北县'); +INSERT INTO `ciy_arearpc` VALUES (230422, 230400, '绥滨县'); +INSERT INTO `ciy_arearpc` VALUES (230500, 230000, '双鸭山市'); +INSERT INTO `ciy_arearpc` VALUES (230501, 230500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230502, 230500, '尖山区'); +INSERT INTO `ciy_arearpc` VALUES (230503, 230500, '岭东区'); +INSERT INTO `ciy_arearpc` VALUES (230505, 230500, '四方台区'); +INSERT INTO `ciy_arearpc` VALUES (230506, 230500, '宝山区'); +INSERT INTO `ciy_arearpc` VALUES (230521, 230500, '集贤县'); +INSERT INTO `ciy_arearpc` VALUES (230522, 230500, '友谊县'); +INSERT INTO `ciy_arearpc` VALUES (230523, 230500, '宝清县'); +INSERT INTO `ciy_arearpc` VALUES (230524, 230500, '饶河县'); +INSERT INTO `ciy_arearpc` VALUES (230600, 230000, '大庆市'); +INSERT INTO `ciy_arearpc` VALUES (230601, 230600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230602, 230600, '萨尔图区'); +INSERT INTO `ciy_arearpc` VALUES (230603, 230600, '龙凤区'); +INSERT INTO `ciy_arearpc` VALUES (230604, 230600, '让胡路区'); +INSERT INTO `ciy_arearpc` VALUES (230605, 230600, '红岗区'); +INSERT INTO `ciy_arearpc` VALUES (230606, 230600, '大同区'); +INSERT INTO `ciy_arearpc` VALUES (230621, 230600, '肇州县'); +INSERT INTO `ciy_arearpc` VALUES (230622, 230600, '肇源县'); +INSERT INTO `ciy_arearpc` VALUES (230623, 230600, '林甸县'); +INSERT INTO `ciy_arearpc` VALUES (230624, 230600, '杜尔伯特蒙古族自治县'); +INSERT INTO `ciy_arearpc` VALUES (230671, 230600, '大庆高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (230700, 230000, '伊春市'); +INSERT INTO `ciy_arearpc` VALUES (230701, 230700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230717, 230700, '伊美区'); +INSERT INTO `ciy_arearpc` VALUES (230718, 230700, '乌翠区'); +INSERT INTO `ciy_arearpc` VALUES (230719, 230700, '友好区'); +INSERT INTO `ciy_arearpc` VALUES (230722, 230700, '嘉荫县'); +INSERT INTO `ciy_arearpc` VALUES (230723, 230700, '汤旺县'); +INSERT INTO `ciy_arearpc` VALUES (230724, 230700, '丰林县'); +INSERT INTO `ciy_arearpc` VALUES (230725, 230700, '大箐山县'); +INSERT INTO `ciy_arearpc` VALUES (230726, 230700, '南岔县'); +INSERT INTO `ciy_arearpc` VALUES (230751, 230700, '金林区'); +INSERT INTO `ciy_arearpc` VALUES (230781, 230700, '铁力市'); +INSERT INTO `ciy_arearpc` VALUES (230800, 230000, '佳木斯市'); +INSERT INTO `ciy_arearpc` VALUES (230801, 230800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230803, 230800, '向阳区'); +INSERT INTO `ciy_arearpc` VALUES (230804, 230800, '前进区'); +INSERT INTO `ciy_arearpc` VALUES (230805, 230800, '东风区'); +INSERT INTO `ciy_arearpc` VALUES (230811, 230800, '郊区'); +INSERT INTO `ciy_arearpc` VALUES (230822, 230800, '桦南县'); +INSERT INTO `ciy_arearpc` VALUES (230826, 230800, '桦川县'); +INSERT INTO `ciy_arearpc` VALUES (230828, 230800, '汤原县'); +INSERT INTO `ciy_arearpc` VALUES (230881, 230800, '同江市'); +INSERT INTO `ciy_arearpc` VALUES (230882, 230800, '富锦市'); +INSERT INTO `ciy_arearpc` VALUES (230883, 230800, '抚远市'); +INSERT INTO `ciy_arearpc` VALUES (230900, 230000, '七台河市'); +INSERT INTO `ciy_arearpc` VALUES (230901, 230900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (230902, 230900, '新兴区'); +INSERT INTO `ciy_arearpc` VALUES (230903, 230900, '桃山区'); +INSERT INTO `ciy_arearpc` VALUES (230904, 230900, '茄子河区'); +INSERT INTO `ciy_arearpc` VALUES (230921, 230900, '勃利县'); +INSERT INTO `ciy_arearpc` VALUES (231000, 230000, '牡丹江市'); +INSERT INTO `ciy_arearpc` VALUES (231001, 231000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (231002, 231000, '东安区'); +INSERT INTO `ciy_arearpc` VALUES (231003, 231000, '阳明区'); +INSERT INTO `ciy_arearpc` VALUES (231004, 231000, '爱民区'); +INSERT INTO `ciy_arearpc` VALUES (231005, 231000, '西安区'); +INSERT INTO `ciy_arearpc` VALUES (231025, 231000, '林口县'); +INSERT INTO `ciy_arearpc` VALUES (231071, 231000, '牡丹江经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (231081, 231000, '绥芬河市'); +INSERT INTO `ciy_arearpc` VALUES (231083, 231000, '海林市'); +INSERT INTO `ciy_arearpc` VALUES (231084, 231000, '宁安市'); +INSERT INTO `ciy_arearpc` VALUES (231085, 231000, '穆棱市'); +INSERT INTO `ciy_arearpc` VALUES (231086, 231000, '东宁市'); +INSERT INTO `ciy_arearpc` VALUES (231100, 230000, '黑河市'); +INSERT INTO `ciy_arearpc` VALUES (231101, 231100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (231102, 231100, '爱辉区'); +INSERT INTO `ciy_arearpc` VALUES (231123, 231100, '逊克县'); +INSERT INTO `ciy_arearpc` VALUES (231124, 231100, '孙吴县'); +INSERT INTO `ciy_arearpc` VALUES (231181, 231100, '北安市'); +INSERT INTO `ciy_arearpc` VALUES (231182, 231100, '五大连池市'); +INSERT INTO `ciy_arearpc` VALUES (231183, 231100, '嫩江市'); +INSERT INTO `ciy_arearpc` VALUES (231200, 230000, '绥化市'); +INSERT INTO `ciy_arearpc` VALUES (231201, 231200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (231202, 231200, '北林区'); +INSERT INTO `ciy_arearpc` VALUES (231221, 231200, '望奎县'); +INSERT INTO `ciy_arearpc` VALUES (231222, 231200, '兰西县'); +INSERT INTO `ciy_arearpc` VALUES (231223, 231200, '青冈县'); +INSERT INTO `ciy_arearpc` VALUES (231224, 231200, '庆安县'); +INSERT INTO `ciy_arearpc` VALUES (231225, 231200, '明水县'); +INSERT INTO `ciy_arearpc` VALUES (231226, 231200, '绥棱县'); +INSERT INTO `ciy_arearpc` VALUES (231281, 231200, '安达市'); +INSERT INTO `ciy_arearpc` VALUES (231282, 231200, '肇东市'); +INSERT INTO `ciy_arearpc` VALUES (231283, 231200, '海伦市'); +INSERT INTO `ciy_arearpc` VALUES (232700, 230000, '大兴安岭地区'); +INSERT INTO `ciy_arearpc` VALUES (232701, 232700, '漠河市'); +INSERT INTO `ciy_arearpc` VALUES (232721, 232700, '呼玛县'); +INSERT INTO `ciy_arearpc` VALUES (232722, 232700, '塔河县'); +INSERT INTO `ciy_arearpc` VALUES (232761, 232700, '加格达奇区'); +INSERT INTO `ciy_arearpc` VALUES (232762, 232700, '松岭区'); +INSERT INTO `ciy_arearpc` VALUES (232763, 232700, '新林区'); +INSERT INTO `ciy_arearpc` VALUES (232764, 232700, '呼中区'); +INSERT INTO `ciy_arearpc` VALUES (310000, 0, '上海市'); +INSERT INTO `ciy_arearpc` VALUES (310100, 310000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (310101, 310100, '黄浦区'); +INSERT INTO `ciy_arearpc` VALUES (310104, 310100, '徐汇区'); +INSERT INTO `ciy_arearpc` VALUES (310105, 310100, '长宁区'); +INSERT INTO `ciy_arearpc` VALUES (310106, 310100, '静安区'); +INSERT INTO `ciy_arearpc` VALUES (310107, 310100, '普陀区'); +INSERT INTO `ciy_arearpc` VALUES (310109, 310100, '虹口区'); +INSERT INTO `ciy_arearpc` VALUES (310110, 310100, '杨浦区'); +INSERT INTO `ciy_arearpc` VALUES (310112, 310100, '闵行区'); +INSERT INTO `ciy_arearpc` VALUES (310113, 310100, '宝山区'); +INSERT INTO `ciy_arearpc` VALUES (310114, 310100, '嘉定区'); +INSERT INTO `ciy_arearpc` VALUES (310115, 310100, '浦东新区'); +INSERT INTO `ciy_arearpc` VALUES (310116, 310100, '金山区'); +INSERT INTO `ciy_arearpc` VALUES (310117, 310100, '松江区'); +INSERT INTO `ciy_arearpc` VALUES (310118, 310100, '青浦区'); +INSERT INTO `ciy_arearpc` VALUES (310120, 310100, '奉贤区'); +INSERT INTO `ciy_arearpc` VALUES (310151, 310100, '崇明区'); +INSERT INTO `ciy_arearpc` VALUES (320000, 0, '江苏省'); +INSERT INTO `ciy_arearpc` VALUES (320100, 320000, '南京市'); +INSERT INTO `ciy_arearpc` VALUES (320101, 320100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320102, 320100, '玄武区'); +INSERT INTO `ciy_arearpc` VALUES (320104, 320100, '秦淮区'); +INSERT INTO `ciy_arearpc` VALUES (320105, 320100, '建邺区'); +INSERT INTO `ciy_arearpc` VALUES (320106, 320100, '鼓楼区'); +INSERT INTO `ciy_arearpc` VALUES (320111, 320100, '浦口区'); +INSERT INTO `ciy_arearpc` VALUES (320113, 320100, '栖霞区'); +INSERT INTO `ciy_arearpc` VALUES (320114, 320100, '雨花台区'); +INSERT INTO `ciy_arearpc` VALUES (320115, 320100, '江宁区'); +INSERT INTO `ciy_arearpc` VALUES (320116, 320100, '六合区'); +INSERT INTO `ciy_arearpc` VALUES (320117, 320100, '溧水区'); +INSERT INTO `ciy_arearpc` VALUES (320118, 320100, '高淳区'); +INSERT INTO `ciy_arearpc` VALUES (320200, 320000, '无锡市'); +INSERT INTO `ciy_arearpc` VALUES (320201, 320200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320205, 320200, '锡山区'); +INSERT INTO `ciy_arearpc` VALUES (320206, 320200, '惠山区'); +INSERT INTO `ciy_arearpc` VALUES (320211, 320200, '滨湖区'); +INSERT INTO `ciy_arearpc` VALUES (320213, 320200, '梁溪区'); +INSERT INTO `ciy_arearpc` VALUES (320214, 320200, '新吴区'); +INSERT INTO `ciy_arearpc` VALUES (320281, 320200, '江阴市'); +INSERT INTO `ciy_arearpc` VALUES (320282, 320200, '宜兴市'); +INSERT INTO `ciy_arearpc` VALUES (320300, 320000, '徐州市'); +INSERT INTO `ciy_arearpc` VALUES (320301, 320300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320302, 320300, '鼓楼区'); +INSERT INTO `ciy_arearpc` VALUES (320303, 320300, '云龙区'); +INSERT INTO `ciy_arearpc` VALUES (320305, 320300, '贾汪区'); +INSERT INTO `ciy_arearpc` VALUES (320311, 320300, '泉山区'); +INSERT INTO `ciy_arearpc` VALUES (320312, 320300, '铜山区'); +INSERT INTO `ciy_arearpc` VALUES (320321, 320300, '丰县'); +INSERT INTO `ciy_arearpc` VALUES (320322, 320300, '沛县'); +INSERT INTO `ciy_arearpc` VALUES (320324, 320300, '睢宁县'); +INSERT INTO `ciy_arearpc` VALUES (320371, 320300, '徐州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (320381, 320300, '新沂市'); +INSERT INTO `ciy_arearpc` VALUES (320382, 320300, '邳州市'); +INSERT INTO `ciy_arearpc` VALUES (320400, 320000, '常州市'); +INSERT INTO `ciy_arearpc` VALUES (320401, 320400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320402, 320400, '天宁区'); +INSERT INTO `ciy_arearpc` VALUES (320404, 320400, '钟楼区'); +INSERT INTO `ciy_arearpc` VALUES (320411, 320400, '新北区'); +INSERT INTO `ciy_arearpc` VALUES (320412, 320400, '武进区'); +INSERT INTO `ciy_arearpc` VALUES (320413, 320400, '金坛区'); +INSERT INTO `ciy_arearpc` VALUES (320481, 320400, '溧阳市'); +INSERT INTO `ciy_arearpc` VALUES (320500, 320000, '苏州市'); +INSERT INTO `ciy_arearpc` VALUES (320501, 320500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320505, 320500, '虎丘区'); +INSERT INTO `ciy_arearpc` VALUES (320506, 320500, '吴中区'); +INSERT INTO `ciy_arearpc` VALUES (320507, 320500, '相城区'); +INSERT INTO `ciy_arearpc` VALUES (320508, 320500, '姑苏区'); +INSERT INTO `ciy_arearpc` VALUES (320509, 320500, '吴江区'); +INSERT INTO `ciy_arearpc` VALUES (320571, 320500, '苏州工业园区'); +INSERT INTO `ciy_arearpc` VALUES (320581, 320500, '常熟市'); +INSERT INTO `ciy_arearpc` VALUES (320582, 320500, '张家港市'); +INSERT INTO `ciy_arearpc` VALUES (320583, 320500, '昆山市'); +INSERT INTO `ciy_arearpc` VALUES (320585, 320500, '太仓市'); +INSERT INTO `ciy_arearpc` VALUES (320600, 320000, '南通市'); +INSERT INTO `ciy_arearpc` VALUES (320601, 320600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320612, 320600, '通州区'); +INSERT INTO `ciy_arearpc` VALUES (320613, 320600, '崇川区'); +INSERT INTO `ciy_arearpc` VALUES (320614, 320600, '海门区'); +INSERT INTO `ciy_arearpc` VALUES (320623, 320600, '如东县'); +INSERT INTO `ciy_arearpc` VALUES (320671, 320600, '南通经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (320681, 320600, '启东市'); +INSERT INTO `ciy_arearpc` VALUES (320682, 320600, '如皋市'); +INSERT INTO `ciy_arearpc` VALUES (320685, 320600, '海安市'); +INSERT INTO `ciy_arearpc` VALUES (320700, 320000, '连云港市'); +INSERT INTO `ciy_arearpc` VALUES (320701, 320700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320703, 320700, '连云区'); +INSERT INTO `ciy_arearpc` VALUES (320706, 320700, '海州区'); +INSERT INTO `ciy_arearpc` VALUES (320707, 320700, '赣榆区'); +INSERT INTO `ciy_arearpc` VALUES (320722, 320700, '东海县'); +INSERT INTO `ciy_arearpc` VALUES (320723, 320700, '灌云县'); +INSERT INTO `ciy_arearpc` VALUES (320724, 320700, '灌南县'); +INSERT INTO `ciy_arearpc` VALUES (320771, 320700, '连云港经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (320772, 320700, '连云港高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (320800, 320000, '淮安市'); +INSERT INTO `ciy_arearpc` VALUES (320801, 320800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320803, 320800, '淮安区'); +INSERT INTO `ciy_arearpc` VALUES (320804, 320800, '淮阴区'); +INSERT INTO `ciy_arearpc` VALUES (320812, 320800, '清江浦区'); +INSERT INTO `ciy_arearpc` VALUES (320813, 320800, '洪泽区'); +INSERT INTO `ciy_arearpc` VALUES (320826, 320800, '涟水县'); +INSERT INTO `ciy_arearpc` VALUES (320830, 320800, '盱眙县'); +INSERT INTO `ciy_arearpc` VALUES (320831, 320800, '金湖县'); +INSERT INTO `ciy_arearpc` VALUES (320871, 320800, '淮安经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (320900, 320000, '盐城市'); +INSERT INTO `ciy_arearpc` VALUES (320901, 320900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (320902, 320900, '亭湖区'); +INSERT INTO `ciy_arearpc` VALUES (320903, 320900, '盐都区'); +INSERT INTO `ciy_arearpc` VALUES (320904, 320900, '大丰区'); +INSERT INTO `ciy_arearpc` VALUES (320921, 320900, '响水县'); +INSERT INTO `ciy_arearpc` VALUES (320922, 320900, '滨海县'); +INSERT INTO `ciy_arearpc` VALUES (320923, 320900, '阜宁县'); +INSERT INTO `ciy_arearpc` VALUES (320924, 320900, '射阳县'); +INSERT INTO `ciy_arearpc` VALUES (320925, 320900, '建湖县'); +INSERT INTO `ciy_arearpc` VALUES (320971, 320900, '盐城经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (320981, 320900, '东台市'); +INSERT INTO `ciy_arearpc` VALUES (321000, 320000, '扬州市'); +INSERT INTO `ciy_arearpc` VALUES (321001, 321000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (321002, 321000, '广陵区'); +INSERT INTO `ciy_arearpc` VALUES (321003, 321000, '邗江区'); +INSERT INTO `ciy_arearpc` VALUES (321012, 321000, '江都区'); +INSERT INTO `ciy_arearpc` VALUES (321023, 321000, '宝应县'); +INSERT INTO `ciy_arearpc` VALUES (321071, 321000, '扬州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (321081, 321000, '仪征市'); +INSERT INTO `ciy_arearpc` VALUES (321084, 321000, '高邮市'); +INSERT INTO `ciy_arearpc` VALUES (321100, 320000, '镇江市'); +INSERT INTO `ciy_arearpc` VALUES (321101, 321100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (321102, 321100, '京口区'); +INSERT INTO `ciy_arearpc` VALUES (321111, 321100, '润州区'); +INSERT INTO `ciy_arearpc` VALUES (321112, 321100, '丹徒区'); +INSERT INTO `ciy_arearpc` VALUES (321171, 321100, '镇江新区'); +INSERT INTO `ciy_arearpc` VALUES (321181, 321100, '丹阳市'); +INSERT INTO `ciy_arearpc` VALUES (321182, 321100, '扬中市'); +INSERT INTO `ciy_arearpc` VALUES (321183, 321100, '句容市'); +INSERT INTO `ciy_arearpc` VALUES (321200, 320000, '泰州市'); +INSERT INTO `ciy_arearpc` VALUES (321201, 321200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (321202, 321200, '海陵区'); +INSERT INTO `ciy_arearpc` VALUES (321203, 321200, '高港区'); +INSERT INTO `ciy_arearpc` VALUES (321204, 321200, '姜堰区'); +INSERT INTO `ciy_arearpc` VALUES (321271, 321200, '泰州医药高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (321281, 321200, '兴化市'); +INSERT INTO `ciy_arearpc` VALUES (321282, 321200, '靖江市'); +INSERT INTO `ciy_arearpc` VALUES (321283, 321200, '泰兴市'); +INSERT INTO `ciy_arearpc` VALUES (321300, 320000, '宿迁市'); +INSERT INTO `ciy_arearpc` VALUES (321301, 321300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (321302, 321300, '宿城区'); +INSERT INTO `ciy_arearpc` VALUES (321311, 321300, '宿豫区'); +INSERT INTO `ciy_arearpc` VALUES (321322, 321300, '沭阳县'); +INSERT INTO `ciy_arearpc` VALUES (321323, 321300, '泗阳县'); +INSERT INTO `ciy_arearpc` VALUES (321324, 321300, '泗洪县'); +INSERT INTO `ciy_arearpc` VALUES (321371, 321300, '宿迁经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (330000, 0, '浙江省'); +INSERT INTO `ciy_arearpc` VALUES (330100, 330000, '杭州市'); +INSERT INTO `ciy_arearpc` VALUES (330101, 330100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330102, 330100, '上城区'); +INSERT INTO `ciy_arearpc` VALUES (330105, 330100, '拱墅区'); +INSERT INTO `ciy_arearpc` VALUES (330106, 330100, '西湖区'); +INSERT INTO `ciy_arearpc` VALUES (330108, 330100, '滨江区'); +INSERT INTO `ciy_arearpc` VALUES (330109, 330100, '萧山区'); +INSERT INTO `ciy_arearpc` VALUES (330110, 330100, '余杭区'); +INSERT INTO `ciy_arearpc` VALUES (330111, 330100, '富阳区'); +INSERT INTO `ciy_arearpc` VALUES (330112, 330100, '临安区'); +INSERT INTO `ciy_arearpc` VALUES (330113, 330100, '临平区'); +INSERT INTO `ciy_arearpc` VALUES (330114, 330100, '钱塘区'); +INSERT INTO `ciy_arearpc` VALUES (330122, 330100, '桐庐县'); +INSERT INTO `ciy_arearpc` VALUES (330127, 330100, '淳安县'); +INSERT INTO `ciy_arearpc` VALUES (330182, 330100, '建德市'); +INSERT INTO `ciy_arearpc` VALUES (330200, 330000, '宁波市'); +INSERT INTO `ciy_arearpc` VALUES (330201, 330200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330203, 330200, '海曙区'); +INSERT INTO `ciy_arearpc` VALUES (330205, 330200, '江北区'); +INSERT INTO `ciy_arearpc` VALUES (330206, 330200, '北仑区'); +INSERT INTO `ciy_arearpc` VALUES (330211, 330200, '镇海区'); +INSERT INTO `ciy_arearpc` VALUES (330212, 330200, '鄞州区'); +INSERT INTO `ciy_arearpc` VALUES (330213, 330200, '奉化区'); +INSERT INTO `ciy_arearpc` VALUES (330225, 330200, '象山县'); +INSERT INTO `ciy_arearpc` VALUES (330226, 330200, '宁海县'); +INSERT INTO `ciy_arearpc` VALUES (330281, 330200, '余姚市'); +INSERT INTO `ciy_arearpc` VALUES (330282, 330200, '慈溪市'); +INSERT INTO `ciy_arearpc` VALUES (330300, 330000, '温州市'); +INSERT INTO `ciy_arearpc` VALUES (330301, 330300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330302, 330300, '鹿城区'); +INSERT INTO `ciy_arearpc` VALUES (330303, 330300, '龙湾区'); +INSERT INTO `ciy_arearpc` VALUES (330304, 330300, '瓯海区'); +INSERT INTO `ciy_arearpc` VALUES (330305, 330300, '洞头区'); +INSERT INTO `ciy_arearpc` VALUES (330324, 330300, '永嘉县'); +INSERT INTO `ciy_arearpc` VALUES (330326, 330300, '平阳县'); +INSERT INTO `ciy_arearpc` VALUES (330327, 330300, '苍南县'); +INSERT INTO `ciy_arearpc` VALUES (330328, 330300, '文成县'); +INSERT INTO `ciy_arearpc` VALUES (330329, 330300, '泰顺县'); +INSERT INTO `ciy_arearpc` VALUES (330371, 330300, '温州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (330381, 330300, '瑞安市'); +INSERT INTO `ciy_arearpc` VALUES (330382, 330300, '乐清市'); +INSERT INTO `ciy_arearpc` VALUES (330383, 330300, '龙港市'); +INSERT INTO `ciy_arearpc` VALUES (330400, 330000, '嘉兴市'); +INSERT INTO `ciy_arearpc` VALUES (330401, 330400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330402, 330400, '南湖区'); +INSERT INTO `ciy_arearpc` VALUES (330411, 330400, '秀洲区'); +INSERT INTO `ciy_arearpc` VALUES (330421, 330400, '嘉善县'); +INSERT INTO `ciy_arearpc` VALUES (330424, 330400, '海盐县'); +INSERT INTO `ciy_arearpc` VALUES (330481, 330400, '海宁市'); +INSERT INTO `ciy_arearpc` VALUES (330482, 330400, '平湖市'); +INSERT INTO `ciy_arearpc` VALUES (330483, 330400, '桐乡市'); +INSERT INTO `ciy_arearpc` VALUES (330500, 330000, '湖州市'); +INSERT INTO `ciy_arearpc` VALUES (330501, 330500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330502, 330500, '吴兴区'); +INSERT INTO `ciy_arearpc` VALUES (330503, 330500, '南浔区'); +INSERT INTO `ciy_arearpc` VALUES (330521, 330500, '德清县'); +INSERT INTO `ciy_arearpc` VALUES (330522, 330500, '长兴县'); +INSERT INTO `ciy_arearpc` VALUES (330523, 330500, '安吉县'); +INSERT INTO `ciy_arearpc` VALUES (330600, 330000, '绍兴市'); +INSERT INTO `ciy_arearpc` VALUES (330601, 330600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330602, 330600, '越城区'); +INSERT INTO `ciy_arearpc` VALUES (330603, 330600, '柯桥区'); +INSERT INTO `ciy_arearpc` VALUES (330604, 330600, '上虞区'); +INSERT INTO `ciy_arearpc` VALUES (330624, 330600, '新昌县'); +INSERT INTO `ciy_arearpc` VALUES (330681, 330600, '诸暨市'); +INSERT INTO `ciy_arearpc` VALUES (330683, 330600, '嵊州市'); +INSERT INTO `ciy_arearpc` VALUES (330700, 330000, '金华市'); +INSERT INTO `ciy_arearpc` VALUES (330701, 330700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330702, 330700, '婺城区'); +INSERT INTO `ciy_arearpc` VALUES (330703, 330700, '金东区'); +INSERT INTO `ciy_arearpc` VALUES (330723, 330700, '武义县'); +INSERT INTO `ciy_arearpc` VALUES (330726, 330700, '浦江县'); +INSERT INTO `ciy_arearpc` VALUES (330727, 330700, '磐安县'); +INSERT INTO `ciy_arearpc` VALUES (330781, 330700, '兰溪市'); +INSERT INTO `ciy_arearpc` VALUES (330782, 330700, '义乌市'); +INSERT INTO `ciy_arearpc` VALUES (330783, 330700, '东阳市'); +INSERT INTO `ciy_arearpc` VALUES (330784, 330700, '永康市'); +INSERT INTO `ciy_arearpc` VALUES (330800, 330000, '衢州市'); +INSERT INTO `ciy_arearpc` VALUES (330801, 330800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330802, 330800, '柯城区'); +INSERT INTO `ciy_arearpc` VALUES (330803, 330800, '衢江区'); +INSERT INTO `ciy_arearpc` VALUES (330822, 330800, '常山县'); +INSERT INTO `ciy_arearpc` VALUES (330824, 330800, '开化县'); +INSERT INTO `ciy_arearpc` VALUES (330825, 330800, '龙游县'); +INSERT INTO `ciy_arearpc` VALUES (330881, 330800, '江山市'); +INSERT INTO `ciy_arearpc` VALUES (330900, 330000, '舟山市'); +INSERT INTO `ciy_arearpc` VALUES (330901, 330900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (330902, 330900, '定海区'); +INSERT INTO `ciy_arearpc` VALUES (330903, 330900, '普陀区'); +INSERT INTO `ciy_arearpc` VALUES (330921, 330900, '岱山县'); +INSERT INTO `ciy_arearpc` VALUES (330922, 330900, '嵊泗县'); +INSERT INTO `ciy_arearpc` VALUES (331000, 330000, '台州市'); +INSERT INTO `ciy_arearpc` VALUES (331001, 331000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (331002, 331000, '椒江区'); +INSERT INTO `ciy_arearpc` VALUES (331003, 331000, '黄岩区'); +INSERT INTO `ciy_arearpc` VALUES (331004, 331000, '路桥区'); +INSERT INTO `ciy_arearpc` VALUES (331022, 331000, '三门县'); +INSERT INTO `ciy_arearpc` VALUES (331023, 331000, '天台县'); +INSERT INTO `ciy_arearpc` VALUES (331024, 331000, '仙居县'); +INSERT INTO `ciy_arearpc` VALUES (331081, 331000, '温岭市'); +INSERT INTO `ciy_arearpc` VALUES (331082, 331000, '临海市'); +INSERT INTO `ciy_arearpc` VALUES (331083, 331000, '玉环市'); +INSERT INTO `ciy_arearpc` VALUES (331100, 330000, '丽水市'); +INSERT INTO `ciy_arearpc` VALUES (331101, 331100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (331102, 331100, '莲都区'); +INSERT INTO `ciy_arearpc` VALUES (331121, 331100, '青田县'); +INSERT INTO `ciy_arearpc` VALUES (331122, 331100, '缙云县'); +INSERT INTO `ciy_arearpc` VALUES (331123, 331100, '遂昌县'); +INSERT INTO `ciy_arearpc` VALUES (331124, 331100, '松阳县'); +INSERT INTO `ciy_arearpc` VALUES (331125, 331100, '云和县'); +INSERT INTO `ciy_arearpc` VALUES (331126, 331100, '庆元县'); +INSERT INTO `ciy_arearpc` VALUES (331127, 331100, '景宁畲族自治县'); +INSERT INTO `ciy_arearpc` VALUES (331181, 331100, '龙泉市'); +INSERT INTO `ciy_arearpc` VALUES (340000, 0, '安徽省'); +INSERT INTO `ciy_arearpc` VALUES (340100, 340000, '合肥市'); +INSERT INTO `ciy_arearpc` VALUES (340101, 340100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (340102, 340100, '瑶海区'); +INSERT INTO `ciy_arearpc` VALUES (340103, 340100, '庐阳区'); +INSERT INTO `ciy_arearpc` VALUES (340104, 340100, '蜀山区'); +INSERT INTO `ciy_arearpc` VALUES (340111, 340100, '包河区'); +INSERT INTO `ciy_arearpc` VALUES (340121, 340100, '长丰县'); +INSERT INTO `ciy_arearpc` VALUES (340122, 340100, '肥东县'); +INSERT INTO `ciy_arearpc` VALUES (340123, 340100, '肥西县'); +INSERT INTO `ciy_arearpc` VALUES (340124, 340100, '庐江县'); +INSERT INTO `ciy_arearpc` VALUES (340171, 340100, '合肥高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (340172, 340100, '合肥经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (340173, 340100, '合肥新站高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (340181, 340100, '巢湖市'); +INSERT INTO `ciy_arearpc` VALUES (340200, 340000, '芜湖市'); +INSERT INTO `ciy_arearpc` VALUES (340201, 340200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (340202, 340200, '镜湖区'); +INSERT INTO `ciy_arearpc` VALUES (340207, 340200, '鸠江区'); +INSERT INTO `ciy_arearpc` VALUES (340209, 340200, '弋江区'); +INSERT INTO `ciy_arearpc` VALUES (340210, 340200, '湾沚区'); +INSERT INTO `ciy_arearpc` VALUES (340212, 340200, '繁昌区'); +INSERT INTO `ciy_arearpc` VALUES (340223, 340200, '南陵县'); +INSERT INTO `ciy_arearpc` VALUES (340271, 340200, '芜湖经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (340272, 340200, '安徽芜湖三山经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (340281, 340200, '无为市'); +INSERT INTO `ciy_arearpc` VALUES (340300, 340000, '蚌埠市'); +INSERT INTO `ciy_arearpc` VALUES (340301, 340300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (340302, 340300, '龙子湖区'); +INSERT INTO `ciy_arearpc` VALUES (340303, 340300, '蚌山区'); +INSERT INTO `ciy_arearpc` VALUES (340304, 340300, '禹会区'); +INSERT INTO `ciy_arearpc` VALUES (340311, 340300, '淮上区'); +INSERT INTO `ciy_arearpc` VALUES (340321, 340300, '怀远县'); +INSERT INTO `ciy_arearpc` VALUES (340322, 340300, '五河县'); +INSERT INTO `ciy_arearpc` VALUES (340323, 340300, '固镇县'); +INSERT INTO `ciy_arearpc` VALUES (340371, 340300, '蚌埠市高新技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (340372, 340300, '蚌埠市经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (340400, 340000, '淮南市'); +INSERT INTO `ciy_arearpc` VALUES (340401, 340400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (340402, 340400, '大通区'); +INSERT INTO `ciy_arearpc` VALUES (340403, 340400, '田家庵区'); +INSERT INTO `ciy_arearpc` VALUES (340404, 340400, '谢家集区'); +INSERT INTO `ciy_arearpc` VALUES (340405, 340400, '八公山区'); +INSERT INTO `ciy_arearpc` VALUES (340406, 340400, '潘集区'); +INSERT INTO `ciy_arearpc` VALUES (340421, 340400, '凤台县'); +INSERT INTO `ciy_arearpc` VALUES (340422, 340400, '寿县'); +INSERT INTO `ciy_arearpc` VALUES (340500, 340000, '马鞍山市'); +INSERT INTO `ciy_arearpc` VALUES (340501, 340500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (340503, 340500, '花山区'); +INSERT INTO `ciy_arearpc` VALUES (340504, 340500, '雨山区'); +INSERT INTO `ciy_arearpc` VALUES (340506, 340500, '博望区'); +INSERT INTO `ciy_arearpc` VALUES (340521, 340500, '当涂县'); +INSERT INTO `ciy_arearpc` VALUES (340522, 340500, '含山县'); +INSERT INTO `ciy_arearpc` VALUES (340523, 340500, '和县'); +INSERT INTO `ciy_arearpc` VALUES (340600, 340000, '淮北市'); +INSERT INTO `ciy_arearpc` VALUES (340601, 340600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (340602, 340600, '杜集区'); +INSERT INTO `ciy_arearpc` VALUES (340603, 340600, '相山区'); +INSERT INTO `ciy_arearpc` VALUES (340604, 340600, '烈山区'); +INSERT INTO `ciy_arearpc` VALUES (340621, 340600, '濉溪县'); +INSERT INTO `ciy_arearpc` VALUES (340700, 340000, '铜陵市'); +INSERT INTO `ciy_arearpc` VALUES (340701, 340700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (340705, 340700, '铜官区'); +INSERT INTO `ciy_arearpc` VALUES (340706, 340700, '义安区'); +INSERT INTO `ciy_arearpc` VALUES (340711, 340700, '郊区'); +INSERT INTO `ciy_arearpc` VALUES (340722, 340700, '枞阳县'); +INSERT INTO `ciy_arearpc` VALUES (340800, 340000, '安庆市'); +INSERT INTO `ciy_arearpc` VALUES (340801, 340800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (340802, 340800, '迎江区'); +INSERT INTO `ciy_arearpc` VALUES (340803, 340800, '大观区'); +INSERT INTO `ciy_arearpc` VALUES (340811, 340800, '宜秀区'); +INSERT INTO `ciy_arearpc` VALUES (340822, 340800, '怀宁县'); +INSERT INTO `ciy_arearpc` VALUES (340825, 340800, '太湖县'); +INSERT INTO `ciy_arearpc` VALUES (340826, 340800, '宿松县'); +INSERT INTO `ciy_arearpc` VALUES (340827, 340800, '望江县'); +INSERT INTO `ciy_arearpc` VALUES (340828, 340800, '岳西县'); +INSERT INTO `ciy_arearpc` VALUES (340871, 340800, '安徽安庆经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (340881, 340800, '桐城市'); +INSERT INTO `ciy_arearpc` VALUES (340882, 340800, '潜山市'); +INSERT INTO `ciy_arearpc` VALUES (341000, 340000, '黄山市'); +INSERT INTO `ciy_arearpc` VALUES (341001, 341000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (341002, 341000, '屯溪区'); +INSERT INTO `ciy_arearpc` VALUES (341003, 341000, '黄山区'); +INSERT INTO `ciy_arearpc` VALUES (341004, 341000, '徽州区'); +INSERT INTO `ciy_arearpc` VALUES (341021, 341000, '歙县'); +INSERT INTO `ciy_arearpc` VALUES (341022, 341000, '休宁县'); +INSERT INTO `ciy_arearpc` VALUES (341023, 341000, '黟县'); +INSERT INTO `ciy_arearpc` VALUES (341024, 341000, '祁门县'); +INSERT INTO `ciy_arearpc` VALUES (341100, 340000, '滁州市'); +INSERT INTO `ciy_arearpc` VALUES (341101, 341100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (341102, 341100, '琅琊区'); +INSERT INTO `ciy_arearpc` VALUES (341103, 341100, '南谯区'); +INSERT INTO `ciy_arearpc` VALUES (341122, 341100, '来安县'); +INSERT INTO `ciy_arearpc` VALUES (341124, 341100, '全椒县'); +INSERT INTO `ciy_arearpc` VALUES (341125, 341100, '定远县'); +INSERT INTO `ciy_arearpc` VALUES (341126, 341100, '凤阳县'); +INSERT INTO `ciy_arearpc` VALUES (341171, 341100, '中新苏滁高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (341172, 341100, '滁州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (341181, 341100, '天长市'); +INSERT INTO `ciy_arearpc` VALUES (341182, 341100, '明光市'); +INSERT INTO `ciy_arearpc` VALUES (341200, 340000, '阜阳市'); +INSERT INTO `ciy_arearpc` VALUES (341201, 341200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (341202, 341200, '颍州区'); +INSERT INTO `ciy_arearpc` VALUES (341203, 341200, '颍东区'); +INSERT INTO `ciy_arearpc` VALUES (341204, 341200, '颍泉区'); +INSERT INTO `ciy_arearpc` VALUES (341221, 341200, '临泉县'); +INSERT INTO `ciy_arearpc` VALUES (341222, 341200, '太和县'); +INSERT INTO `ciy_arearpc` VALUES (341225, 341200, '阜南县'); +INSERT INTO `ciy_arearpc` VALUES (341226, 341200, '颍上县'); +INSERT INTO `ciy_arearpc` VALUES (341271, 341200, '阜阳合肥现代产业园区'); +INSERT INTO `ciy_arearpc` VALUES (341272, 341200, '阜阳经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (341282, 341200, '界首市'); +INSERT INTO `ciy_arearpc` VALUES (341300, 340000, '宿州市'); +INSERT INTO `ciy_arearpc` VALUES (341301, 341300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (341302, 341300, '埇桥区'); +INSERT INTO `ciy_arearpc` VALUES (341321, 341300, '砀山县'); +INSERT INTO `ciy_arearpc` VALUES (341322, 341300, '萧县'); +INSERT INTO `ciy_arearpc` VALUES (341323, 341300, '灵璧县'); +INSERT INTO `ciy_arearpc` VALUES (341324, 341300, '泗县'); +INSERT INTO `ciy_arearpc` VALUES (341371, 341300, '宿州马鞍山现代产业园区'); +INSERT INTO `ciy_arearpc` VALUES (341372, 341300, '宿州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (341500, 340000, '六安市'); +INSERT INTO `ciy_arearpc` VALUES (341501, 341500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (341502, 341500, '金安区'); +INSERT INTO `ciy_arearpc` VALUES (341503, 341500, '裕安区'); +INSERT INTO `ciy_arearpc` VALUES (341504, 341500, '叶集区'); +INSERT INTO `ciy_arearpc` VALUES (341522, 341500, '霍邱县'); +INSERT INTO `ciy_arearpc` VALUES (341523, 341500, '舒城县'); +INSERT INTO `ciy_arearpc` VALUES (341524, 341500, '金寨县'); +INSERT INTO `ciy_arearpc` VALUES (341525, 341500, '霍山县'); +INSERT INTO `ciy_arearpc` VALUES (341600, 340000, '亳州市'); +INSERT INTO `ciy_arearpc` VALUES (341601, 341600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (341602, 341600, '谯城区'); +INSERT INTO `ciy_arearpc` VALUES (341621, 341600, '涡阳县'); +INSERT INTO `ciy_arearpc` VALUES (341622, 341600, '蒙城县'); +INSERT INTO `ciy_arearpc` VALUES (341623, 341600, '利辛县'); +INSERT INTO `ciy_arearpc` VALUES (341700, 340000, '池州市'); +INSERT INTO `ciy_arearpc` VALUES (341701, 341700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (341702, 341700, '贵池区'); +INSERT INTO `ciy_arearpc` VALUES (341721, 341700, '东至县'); +INSERT INTO `ciy_arearpc` VALUES (341722, 341700, '石台县'); +INSERT INTO `ciy_arearpc` VALUES (341723, 341700, '青阳县'); +INSERT INTO `ciy_arearpc` VALUES (341800, 340000, '宣城市'); +INSERT INTO `ciy_arearpc` VALUES (341801, 341800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (341802, 341800, '宣州区'); +INSERT INTO `ciy_arearpc` VALUES (341821, 341800, '郎溪县'); +INSERT INTO `ciy_arearpc` VALUES (341823, 341800, '泾县'); +INSERT INTO `ciy_arearpc` VALUES (341824, 341800, '绩溪县'); +INSERT INTO `ciy_arearpc` VALUES (341825, 341800, '旌德县'); +INSERT INTO `ciy_arearpc` VALUES (341871, 341800, '宣城市经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (341881, 341800, '宁国市'); +INSERT INTO `ciy_arearpc` VALUES (341882, 341800, '广德市'); +INSERT INTO `ciy_arearpc` VALUES (350000, 0, '福建省'); +INSERT INTO `ciy_arearpc` VALUES (350100, 350000, '福州市'); +INSERT INTO `ciy_arearpc` VALUES (350101, 350100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350102, 350100, '鼓楼区'); +INSERT INTO `ciy_arearpc` VALUES (350103, 350100, '台江区'); +INSERT INTO `ciy_arearpc` VALUES (350104, 350100, '仓山区'); +INSERT INTO `ciy_arearpc` VALUES (350105, 350100, '马尾区'); +INSERT INTO `ciy_arearpc` VALUES (350111, 350100, '晋安区'); +INSERT INTO `ciy_arearpc` VALUES (350112, 350100, '长乐区'); +INSERT INTO `ciy_arearpc` VALUES (350121, 350100, '闽侯县'); +INSERT INTO `ciy_arearpc` VALUES (350122, 350100, '连江县'); +INSERT INTO `ciy_arearpc` VALUES (350123, 350100, '罗源县'); +INSERT INTO `ciy_arearpc` VALUES (350124, 350100, '闽清县'); +INSERT INTO `ciy_arearpc` VALUES (350125, 350100, '永泰县'); +INSERT INTO `ciy_arearpc` VALUES (350128, 350100, '平潭县'); +INSERT INTO `ciy_arearpc` VALUES (350181, 350100, '福清市'); +INSERT INTO `ciy_arearpc` VALUES (350200, 350000, '厦门市'); +INSERT INTO `ciy_arearpc` VALUES (350201, 350200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350203, 350200, '思明区'); +INSERT INTO `ciy_arearpc` VALUES (350205, 350200, '海沧区'); +INSERT INTO `ciy_arearpc` VALUES (350206, 350200, '湖里区'); +INSERT INTO `ciy_arearpc` VALUES (350211, 350200, '集美区'); +INSERT INTO `ciy_arearpc` VALUES (350212, 350200, '同安区'); +INSERT INTO `ciy_arearpc` VALUES (350213, 350200, '翔安区'); +INSERT INTO `ciy_arearpc` VALUES (350300, 350000, '莆田市'); +INSERT INTO `ciy_arearpc` VALUES (350301, 350300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350302, 350300, '城厢区'); +INSERT INTO `ciy_arearpc` VALUES (350303, 350300, '涵江区'); +INSERT INTO `ciy_arearpc` VALUES (350304, 350300, '荔城区'); +INSERT INTO `ciy_arearpc` VALUES (350305, 350300, '秀屿区'); +INSERT INTO `ciy_arearpc` VALUES (350322, 350300, '仙游县'); +INSERT INTO `ciy_arearpc` VALUES (350400, 350000, '三明市'); +INSERT INTO `ciy_arearpc` VALUES (350401, 350400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350404, 350400, '三元区'); +INSERT INTO `ciy_arearpc` VALUES (350405, 350400, '沙县区'); +INSERT INTO `ciy_arearpc` VALUES (350421, 350400, '明溪县'); +INSERT INTO `ciy_arearpc` VALUES (350423, 350400, '清流县'); +INSERT INTO `ciy_arearpc` VALUES (350424, 350400, '宁化县'); +INSERT INTO `ciy_arearpc` VALUES (350425, 350400, '大田县'); +INSERT INTO `ciy_arearpc` VALUES (350426, 350400, '尤溪县'); +INSERT INTO `ciy_arearpc` VALUES (350428, 350400, '将乐县'); +INSERT INTO `ciy_arearpc` VALUES (350429, 350400, '泰宁县'); +INSERT INTO `ciy_arearpc` VALUES (350430, 350400, '建宁县'); +INSERT INTO `ciy_arearpc` VALUES (350481, 350400, '永安市'); +INSERT INTO `ciy_arearpc` VALUES (350500, 350000, '泉州市'); +INSERT INTO `ciy_arearpc` VALUES (350501, 350500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350502, 350500, '鲤城区'); +INSERT INTO `ciy_arearpc` VALUES (350503, 350500, '丰泽区'); +INSERT INTO `ciy_arearpc` VALUES (350504, 350500, '洛江区'); +INSERT INTO `ciy_arearpc` VALUES (350505, 350500, '泉港区'); +INSERT INTO `ciy_arearpc` VALUES (350521, 350500, '惠安县'); +INSERT INTO `ciy_arearpc` VALUES (350524, 350500, '安溪县'); +INSERT INTO `ciy_arearpc` VALUES (350525, 350500, '永春县'); +INSERT INTO `ciy_arearpc` VALUES (350526, 350500, '德化县'); +INSERT INTO `ciy_arearpc` VALUES (350527, 350500, '金门县'); +INSERT INTO `ciy_arearpc` VALUES (350581, 350500, '石狮市'); +INSERT INTO `ciy_arearpc` VALUES (350582, 350500, '晋江市'); +INSERT INTO `ciy_arearpc` VALUES (350583, 350500, '南安市'); +INSERT INTO `ciy_arearpc` VALUES (350600, 350000, '漳州市'); +INSERT INTO `ciy_arearpc` VALUES (350601, 350600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350602, 350600, '芗城区'); +INSERT INTO `ciy_arearpc` VALUES (350603, 350600, '龙文区'); +INSERT INTO `ciy_arearpc` VALUES (350604, 350600, '龙海区'); +INSERT INTO `ciy_arearpc` VALUES (350605, 350600, '长泰区'); +INSERT INTO `ciy_arearpc` VALUES (350622, 350600, '云霄县'); +INSERT INTO `ciy_arearpc` VALUES (350623, 350600, '漳浦县'); +INSERT INTO `ciy_arearpc` VALUES (350624, 350600, '诏安县'); +INSERT INTO `ciy_arearpc` VALUES (350626, 350600, '东山县'); +INSERT INTO `ciy_arearpc` VALUES (350627, 350600, '南靖县'); +INSERT INTO `ciy_arearpc` VALUES (350628, 350600, '平和县'); +INSERT INTO `ciy_arearpc` VALUES (350629, 350600, '华安县'); +INSERT INTO `ciy_arearpc` VALUES (350700, 350000, '南平市'); +INSERT INTO `ciy_arearpc` VALUES (350701, 350700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350702, 350700, '延平区'); +INSERT INTO `ciy_arearpc` VALUES (350703, 350700, '建阳区'); +INSERT INTO `ciy_arearpc` VALUES (350721, 350700, '顺昌县'); +INSERT INTO `ciy_arearpc` VALUES (350722, 350700, '浦城县'); +INSERT INTO `ciy_arearpc` VALUES (350723, 350700, '光泽县'); +INSERT INTO `ciy_arearpc` VALUES (350724, 350700, '松溪县'); +INSERT INTO `ciy_arearpc` VALUES (350725, 350700, '政和县'); +INSERT INTO `ciy_arearpc` VALUES (350781, 350700, '邵武市'); +INSERT INTO `ciy_arearpc` VALUES (350782, 350700, '武夷山市'); +INSERT INTO `ciy_arearpc` VALUES (350783, 350700, '建瓯市'); +INSERT INTO `ciy_arearpc` VALUES (350800, 350000, '龙岩市'); +INSERT INTO `ciy_arearpc` VALUES (350801, 350800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350802, 350800, '新罗区'); +INSERT INTO `ciy_arearpc` VALUES (350803, 350800, '永定区'); +INSERT INTO `ciy_arearpc` VALUES (350821, 350800, '长汀县'); +INSERT INTO `ciy_arearpc` VALUES (350823, 350800, '上杭县'); +INSERT INTO `ciy_arearpc` VALUES (350824, 350800, '武平县'); +INSERT INTO `ciy_arearpc` VALUES (350825, 350800, '连城县'); +INSERT INTO `ciy_arearpc` VALUES (350881, 350800, '漳平市'); +INSERT INTO `ciy_arearpc` VALUES (350900, 350000, '宁德市'); +INSERT INTO `ciy_arearpc` VALUES (350901, 350900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (350902, 350900, '蕉城区'); +INSERT INTO `ciy_arearpc` VALUES (350921, 350900, '霞浦县'); +INSERT INTO `ciy_arearpc` VALUES (350922, 350900, '古田县'); +INSERT INTO `ciy_arearpc` VALUES (350923, 350900, '屏南县'); +INSERT INTO `ciy_arearpc` VALUES (350924, 350900, '寿宁县'); +INSERT INTO `ciy_arearpc` VALUES (350925, 350900, '周宁县'); +INSERT INTO `ciy_arearpc` VALUES (350926, 350900, '柘荣县'); +INSERT INTO `ciy_arearpc` VALUES (350981, 350900, '福安市'); +INSERT INTO `ciy_arearpc` VALUES (350982, 350900, '福鼎市'); +INSERT INTO `ciy_arearpc` VALUES (360000, 0, '江西省'); +INSERT INTO `ciy_arearpc` VALUES (360100, 360000, '南昌市'); +INSERT INTO `ciy_arearpc` VALUES (360101, 360100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360102, 360100, '东湖区'); +INSERT INTO `ciy_arearpc` VALUES (360103, 360100, '西湖区'); +INSERT INTO `ciy_arearpc` VALUES (360104, 360100, '青云谱区'); +INSERT INTO `ciy_arearpc` VALUES (360111, 360100, '青山湖区'); +INSERT INTO `ciy_arearpc` VALUES (360112, 360100, '新建区'); +INSERT INTO `ciy_arearpc` VALUES (360113, 360100, '红谷滩区'); +INSERT INTO `ciy_arearpc` VALUES (360121, 360100, '南昌县'); +INSERT INTO `ciy_arearpc` VALUES (360123, 360100, '安义县'); +INSERT INTO `ciy_arearpc` VALUES (360124, 360100, '进贤县'); +INSERT INTO `ciy_arearpc` VALUES (360200, 360000, '景德镇市'); +INSERT INTO `ciy_arearpc` VALUES (360201, 360200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360202, 360200, '昌江区'); +INSERT INTO `ciy_arearpc` VALUES (360203, 360200, '珠山区'); +INSERT INTO `ciy_arearpc` VALUES (360222, 360200, '浮梁县'); +INSERT INTO `ciy_arearpc` VALUES (360281, 360200, '乐平市'); +INSERT INTO `ciy_arearpc` VALUES (360300, 360000, '萍乡市'); +INSERT INTO `ciy_arearpc` VALUES (360301, 360300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360302, 360300, '安源区'); +INSERT INTO `ciy_arearpc` VALUES (360313, 360300, '湘东区'); +INSERT INTO `ciy_arearpc` VALUES (360321, 360300, '莲花县'); +INSERT INTO `ciy_arearpc` VALUES (360322, 360300, '上栗县'); +INSERT INTO `ciy_arearpc` VALUES (360323, 360300, '芦溪县'); +INSERT INTO `ciy_arearpc` VALUES (360400, 360000, '九江市'); +INSERT INTO `ciy_arearpc` VALUES (360401, 360400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360402, 360400, '濂溪区'); +INSERT INTO `ciy_arearpc` VALUES (360403, 360400, '浔阳区'); +INSERT INTO `ciy_arearpc` VALUES (360404, 360400, '柴桑区'); +INSERT INTO `ciy_arearpc` VALUES (360423, 360400, '武宁县'); +INSERT INTO `ciy_arearpc` VALUES (360424, 360400, '修水县'); +INSERT INTO `ciy_arearpc` VALUES (360425, 360400, '永修县'); +INSERT INTO `ciy_arearpc` VALUES (360426, 360400, '德安县'); +INSERT INTO `ciy_arearpc` VALUES (360428, 360400, '都昌县'); +INSERT INTO `ciy_arearpc` VALUES (360429, 360400, '湖口县'); +INSERT INTO `ciy_arearpc` VALUES (360430, 360400, '彭泽县'); +INSERT INTO `ciy_arearpc` VALUES (360481, 360400, '瑞昌市'); +INSERT INTO `ciy_arearpc` VALUES (360482, 360400, '共青城市'); +INSERT INTO `ciy_arearpc` VALUES (360483, 360400, '庐山市'); +INSERT INTO `ciy_arearpc` VALUES (360500, 360000, '新余市'); +INSERT INTO `ciy_arearpc` VALUES (360501, 360500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360502, 360500, '渝水区'); +INSERT INTO `ciy_arearpc` VALUES (360521, 360500, '分宜县'); +INSERT INTO `ciy_arearpc` VALUES (360600, 360000, '鹰潭市'); +INSERT INTO `ciy_arearpc` VALUES (360601, 360600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360602, 360600, '月湖区'); +INSERT INTO `ciy_arearpc` VALUES (360603, 360600, '余江区'); +INSERT INTO `ciy_arearpc` VALUES (360681, 360600, '贵溪市'); +INSERT INTO `ciy_arearpc` VALUES (360700, 360000, '赣州市'); +INSERT INTO `ciy_arearpc` VALUES (360701, 360700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360702, 360700, '章贡区'); +INSERT INTO `ciy_arearpc` VALUES (360703, 360700, '南康区'); +INSERT INTO `ciy_arearpc` VALUES (360704, 360700, '赣县区'); +INSERT INTO `ciy_arearpc` VALUES (360722, 360700, '信丰县'); +INSERT INTO `ciy_arearpc` VALUES (360723, 360700, '大余县'); +INSERT INTO `ciy_arearpc` VALUES (360724, 360700, '上犹县'); +INSERT INTO `ciy_arearpc` VALUES (360725, 360700, '崇义县'); +INSERT INTO `ciy_arearpc` VALUES (360726, 360700, '安远县'); +INSERT INTO `ciy_arearpc` VALUES (360728, 360700, '定南县'); +INSERT INTO `ciy_arearpc` VALUES (360729, 360700, '全南县'); +INSERT INTO `ciy_arearpc` VALUES (360730, 360700, '宁都县'); +INSERT INTO `ciy_arearpc` VALUES (360731, 360700, '于都县'); +INSERT INTO `ciy_arearpc` VALUES (360732, 360700, '兴国县'); +INSERT INTO `ciy_arearpc` VALUES (360733, 360700, '会昌县'); +INSERT INTO `ciy_arearpc` VALUES (360734, 360700, '寻乌县'); +INSERT INTO `ciy_arearpc` VALUES (360735, 360700, '石城县'); +INSERT INTO `ciy_arearpc` VALUES (360781, 360700, '瑞金市'); +INSERT INTO `ciy_arearpc` VALUES (360783, 360700, '龙南市'); +INSERT INTO `ciy_arearpc` VALUES (360800, 360000, '吉安市'); +INSERT INTO `ciy_arearpc` VALUES (360801, 360800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360802, 360800, '吉州区'); +INSERT INTO `ciy_arearpc` VALUES (360803, 360800, '青原区'); +INSERT INTO `ciy_arearpc` VALUES (360821, 360800, '吉安县'); +INSERT INTO `ciy_arearpc` VALUES (360822, 360800, '吉水县'); +INSERT INTO `ciy_arearpc` VALUES (360823, 360800, '峡江县'); +INSERT INTO `ciy_arearpc` VALUES (360824, 360800, '新干县'); +INSERT INTO `ciy_arearpc` VALUES (360825, 360800, '永丰县'); +INSERT INTO `ciy_arearpc` VALUES (360826, 360800, '泰和县'); +INSERT INTO `ciy_arearpc` VALUES (360827, 360800, '遂川县'); +INSERT INTO `ciy_arearpc` VALUES (360828, 360800, '万安县'); +INSERT INTO `ciy_arearpc` VALUES (360829, 360800, '安福县'); +INSERT INTO `ciy_arearpc` VALUES (360830, 360800, '永新县'); +INSERT INTO `ciy_arearpc` VALUES (360881, 360800, '井冈山市'); +INSERT INTO `ciy_arearpc` VALUES (360900, 360000, '宜春市'); +INSERT INTO `ciy_arearpc` VALUES (360901, 360900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (360902, 360900, '袁州区'); +INSERT INTO `ciy_arearpc` VALUES (360921, 360900, '奉新县'); +INSERT INTO `ciy_arearpc` VALUES (360922, 360900, '万载县'); +INSERT INTO `ciy_arearpc` VALUES (360923, 360900, '上高县'); +INSERT INTO `ciy_arearpc` VALUES (360924, 360900, '宜丰县'); +INSERT INTO `ciy_arearpc` VALUES (360925, 360900, '靖安县'); +INSERT INTO `ciy_arearpc` VALUES (360926, 360900, '铜鼓县'); +INSERT INTO `ciy_arearpc` VALUES (360981, 360900, '丰城市'); +INSERT INTO `ciy_arearpc` VALUES (360982, 360900, '樟树市'); +INSERT INTO `ciy_arearpc` VALUES (360983, 360900, '高安市'); +INSERT INTO `ciy_arearpc` VALUES (361000, 360000, '抚州市'); +INSERT INTO `ciy_arearpc` VALUES (361001, 361000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (361002, 361000, '临川区'); +INSERT INTO `ciy_arearpc` VALUES (361003, 361000, '东乡区'); +INSERT INTO `ciy_arearpc` VALUES (361021, 361000, '南城县'); +INSERT INTO `ciy_arearpc` VALUES (361022, 361000, '黎川县'); +INSERT INTO `ciy_arearpc` VALUES (361023, 361000, '南丰县'); +INSERT INTO `ciy_arearpc` VALUES (361024, 361000, '崇仁县'); +INSERT INTO `ciy_arearpc` VALUES (361025, 361000, '乐安县'); +INSERT INTO `ciy_arearpc` VALUES (361026, 361000, '宜黄县'); +INSERT INTO `ciy_arearpc` VALUES (361027, 361000, '金溪县'); +INSERT INTO `ciy_arearpc` VALUES (361028, 361000, '资溪县'); +INSERT INTO `ciy_arearpc` VALUES (361030, 361000, '广昌县'); +INSERT INTO `ciy_arearpc` VALUES (361100, 360000, '上饶市'); +INSERT INTO `ciy_arearpc` VALUES (361101, 361100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (361102, 361100, '信州区'); +INSERT INTO `ciy_arearpc` VALUES (361103, 361100, '广丰区'); +INSERT INTO `ciy_arearpc` VALUES (361104, 361100, '广信区'); +INSERT INTO `ciy_arearpc` VALUES (361123, 361100, '玉山县'); +INSERT INTO `ciy_arearpc` VALUES (361124, 361100, '铅山县'); +INSERT INTO `ciy_arearpc` VALUES (361125, 361100, '横峰县'); +INSERT INTO `ciy_arearpc` VALUES (361126, 361100, '弋阳县'); +INSERT INTO `ciy_arearpc` VALUES (361127, 361100, '余干县'); +INSERT INTO `ciy_arearpc` VALUES (361128, 361100, '鄱阳县'); +INSERT INTO `ciy_arearpc` VALUES (361129, 361100, '万年县'); +INSERT INTO `ciy_arearpc` VALUES (361130, 361100, '婺源县'); +INSERT INTO `ciy_arearpc` VALUES (361181, 361100, '德兴市'); +INSERT INTO `ciy_arearpc` VALUES (370000, 0, '山东省'); +INSERT INTO `ciy_arearpc` VALUES (370100, 370000, '济南市'); +INSERT INTO `ciy_arearpc` VALUES (370101, 370100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370102, 370100, '历下区'); +INSERT INTO `ciy_arearpc` VALUES (370103, 370100, '市中区'); +INSERT INTO `ciy_arearpc` VALUES (370104, 370100, '槐荫区'); +INSERT INTO `ciy_arearpc` VALUES (370105, 370100, '天桥区'); +INSERT INTO `ciy_arearpc` VALUES (370112, 370100, '历城区'); +INSERT INTO `ciy_arearpc` VALUES (370113, 370100, '长清区'); +INSERT INTO `ciy_arearpc` VALUES (370114, 370100, '章丘区'); +INSERT INTO `ciy_arearpc` VALUES (370115, 370100, '济阳区'); +INSERT INTO `ciy_arearpc` VALUES (370116, 370100, '莱芜区'); +INSERT INTO `ciy_arearpc` VALUES (370117, 370100, '钢城区'); +INSERT INTO `ciy_arearpc` VALUES (370124, 370100, '平阴县'); +INSERT INTO `ciy_arearpc` VALUES (370126, 370100, '商河县'); +INSERT INTO `ciy_arearpc` VALUES (370171, 370100, '济南高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (370200, 370000, '青岛市'); +INSERT INTO `ciy_arearpc` VALUES (370201, 370200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370202, 370200, '市南区'); +INSERT INTO `ciy_arearpc` VALUES (370203, 370200, '市北区'); +INSERT INTO `ciy_arearpc` VALUES (370211, 370200, '黄岛区'); +INSERT INTO `ciy_arearpc` VALUES (370212, 370200, '崂山区'); +INSERT INTO `ciy_arearpc` VALUES (370213, 370200, '李沧区'); +INSERT INTO `ciy_arearpc` VALUES (370214, 370200, '城阳区'); +INSERT INTO `ciy_arearpc` VALUES (370215, 370200, '即墨区'); +INSERT INTO `ciy_arearpc` VALUES (370271, 370200, '青岛高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (370281, 370200, '胶州市'); +INSERT INTO `ciy_arearpc` VALUES (370283, 370200, '平度市'); +INSERT INTO `ciy_arearpc` VALUES (370285, 370200, '莱西市'); +INSERT INTO `ciy_arearpc` VALUES (370300, 370000, '淄博市'); +INSERT INTO `ciy_arearpc` VALUES (370301, 370300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370302, 370300, '淄川区'); +INSERT INTO `ciy_arearpc` VALUES (370303, 370300, '张店区'); +INSERT INTO `ciy_arearpc` VALUES (370304, 370300, '博山区'); +INSERT INTO `ciy_arearpc` VALUES (370305, 370300, '临淄区'); +INSERT INTO `ciy_arearpc` VALUES (370306, 370300, '周村区'); +INSERT INTO `ciy_arearpc` VALUES (370321, 370300, '桓台县'); +INSERT INTO `ciy_arearpc` VALUES (370322, 370300, '高青县'); +INSERT INTO `ciy_arearpc` VALUES (370323, 370300, '沂源县'); +INSERT INTO `ciy_arearpc` VALUES (370400, 370000, '枣庄市'); +INSERT INTO `ciy_arearpc` VALUES (370401, 370400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370402, 370400, '市中区'); +INSERT INTO `ciy_arearpc` VALUES (370403, 370400, '薛城区'); +INSERT INTO `ciy_arearpc` VALUES (370404, 370400, '峄城区'); +INSERT INTO `ciy_arearpc` VALUES (370405, 370400, '台儿庄区'); +INSERT INTO `ciy_arearpc` VALUES (370406, 370400, '山亭区'); +INSERT INTO `ciy_arearpc` VALUES (370481, 370400, '滕州市'); +INSERT INTO `ciy_arearpc` VALUES (370500, 370000, '东营市'); +INSERT INTO `ciy_arearpc` VALUES (370501, 370500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370502, 370500, '东营区'); +INSERT INTO `ciy_arearpc` VALUES (370503, 370500, '河口区'); +INSERT INTO `ciy_arearpc` VALUES (370505, 370500, '垦利区'); +INSERT INTO `ciy_arearpc` VALUES (370522, 370500, '利津县'); +INSERT INTO `ciy_arearpc` VALUES (370523, 370500, '广饶县'); +INSERT INTO `ciy_arearpc` VALUES (370571, 370500, '东营经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (370572, 370500, '东营港经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (370600, 370000, '烟台市'); +INSERT INTO `ciy_arearpc` VALUES (370601, 370600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370602, 370600, '芝罘区'); +INSERT INTO `ciy_arearpc` VALUES (370611, 370600, '福山区'); +INSERT INTO `ciy_arearpc` VALUES (370612, 370600, '牟平区'); +INSERT INTO `ciy_arearpc` VALUES (370613, 370600, '莱山区'); +INSERT INTO `ciy_arearpc` VALUES (370614, 370600, '蓬莱区'); +INSERT INTO `ciy_arearpc` VALUES (370671, 370600, '烟台高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (370672, 370600, '烟台经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (370681, 370600, '龙口市'); +INSERT INTO `ciy_arearpc` VALUES (370682, 370600, '莱阳市'); +INSERT INTO `ciy_arearpc` VALUES (370683, 370600, '莱州市'); +INSERT INTO `ciy_arearpc` VALUES (370685, 370600, '招远市'); +INSERT INTO `ciy_arearpc` VALUES (370686, 370600, '栖霞市'); +INSERT INTO `ciy_arearpc` VALUES (370687, 370600, '海阳市'); +INSERT INTO `ciy_arearpc` VALUES (370700, 370000, '潍坊市'); +INSERT INTO `ciy_arearpc` VALUES (370701, 370700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370702, 370700, '潍城区'); +INSERT INTO `ciy_arearpc` VALUES (370703, 370700, '寒亭区'); +INSERT INTO `ciy_arearpc` VALUES (370704, 370700, '坊子区'); +INSERT INTO `ciy_arearpc` VALUES (370705, 370700, '奎文区'); +INSERT INTO `ciy_arearpc` VALUES (370724, 370700, '临朐县'); +INSERT INTO `ciy_arearpc` VALUES (370725, 370700, '昌乐县'); +INSERT INTO `ciy_arearpc` VALUES (370772, 370700, '潍坊滨海经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (370781, 370700, '青州市'); +INSERT INTO `ciy_arearpc` VALUES (370782, 370700, '诸城市'); +INSERT INTO `ciy_arearpc` VALUES (370783, 370700, '寿光市'); +INSERT INTO `ciy_arearpc` VALUES (370784, 370700, '安丘市'); +INSERT INTO `ciy_arearpc` VALUES (370785, 370700, '高密市'); +INSERT INTO `ciy_arearpc` VALUES (370786, 370700, '昌邑市'); +INSERT INTO `ciy_arearpc` VALUES (370800, 370000, '济宁市'); +INSERT INTO `ciy_arearpc` VALUES (370801, 370800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370811, 370800, '任城区'); +INSERT INTO `ciy_arearpc` VALUES (370812, 370800, '兖州区'); +INSERT INTO `ciy_arearpc` VALUES (370826, 370800, '微山县'); +INSERT INTO `ciy_arearpc` VALUES (370827, 370800, '鱼台县'); +INSERT INTO `ciy_arearpc` VALUES (370828, 370800, '金乡县'); +INSERT INTO `ciy_arearpc` VALUES (370829, 370800, '嘉祥县'); +INSERT INTO `ciy_arearpc` VALUES (370830, 370800, '汶上县'); +INSERT INTO `ciy_arearpc` VALUES (370831, 370800, '泗水县'); +INSERT INTO `ciy_arearpc` VALUES (370832, 370800, '梁山县'); +INSERT INTO `ciy_arearpc` VALUES (370871, 370800, '济宁高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (370881, 370800, '曲阜市'); +INSERT INTO `ciy_arearpc` VALUES (370883, 370800, '邹城市'); +INSERT INTO `ciy_arearpc` VALUES (370900, 370000, '泰安市'); +INSERT INTO `ciy_arearpc` VALUES (370901, 370900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (370902, 370900, '泰山区'); +INSERT INTO `ciy_arearpc` VALUES (370911, 370900, '岱岳区'); +INSERT INTO `ciy_arearpc` VALUES (370921, 370900, '宁阳县'); +INSERT INTO `ciy_arearpc` VALUES (370923, 370900, '东平县'); +INSERT INTO `ciy_arearpc` VALUES (370982, 370900, '新泰市'); +INSERT INTO `ciy_arearpc` VALUES (370983, 370900, '肥城市'); +INSERT INTO `ciy_arearpc` VALUES (371000, 370000, '威海市'); +INSERT INTO `ciy_arearpc` VALUES (371001, 371000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (371002, 371000, '环翠区'); +INSERT INTO `ciy_arearpc` VALUES (371003, 371000, '文登区'); +INSERT INTO `ciy_arearpc` VALUES (371071, 371000, '威海火炬高技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (371072, 371000, '威海经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (371073, 371000, '威海临港经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (371082, 371000, '荣成市'); +INSERT INTO `ciy_arearpc` VALUES (371083, 371000, '乳山市'); +INSERT INTO `ciy_arearpc` VALUES (371100, 370000, '日照市'); +INSERT INTO `ciy_arearpc` VALUES (371101, 371100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (371102, 371100, '东港区'); +INSERT INTO `ciy_arearpc` VALUES (371103, 371100, '岚山区'); +INSERT INTO `ciy_arearpc` VALUES (371121, 371100, '五莲县'); +INSERT INTO `ciy_arearpc` VALUES (371122, 371100, '莒县'); +INSERT INTO `ciy_arearpc` VALUES (371171, 371100, '日照经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (371300, 370000, '临沂市'); +INSERT INTO `ciy_arearpc` VALUES (371301, 371300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (371302, 371300, '兰山区'); +INSERT INTO `ciy_arearpc` VALUES (371311, 371300, '罗庄区'); +INSERT INTO `ciy_arearpc` VALUES (371312, 371300, '河东区'); +INSERT INTO `ciy_arearpc` VALUES (371321, 371300, '沂南县'); +INSERT INTO `ciy_arearpc` VALUES (371322, 371300, '郯城县'); +INSERT INTO `ciy_arearpc` VALUES (371323, 371300, '沂水县'); +INSERT INTO `ciy_arearpc` VALUES (371324, 371300, '兰陵县'); +INSERT INTO `ciy_arearpc` VALUES (371325, 371300, '费县'); +INSERT INTO `ciy_arearpc` VALUES (371326, 371300, '平邑县'); +INSERT INTO `ciy_arearpc` VALUES (371327, 371300, '莒南县'); +INSERT INTO `ciy_arearpc` VALUES (371328, 371300, '蒙阴县'); +INSERT INTO `ciy_arearpc` VALUES (371329, 371300, '临沭县'); +INSERT INTO `ciy_arearpc` VALUES (371371, 371300, '临沂高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (371400, 370000, '德州市'); +INSERT INTO `ciy_arearpc` VALUES (371401, 371400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (371402, 371400, '德城区'); +INSERT INTO `ciy_arearpc` VALUES (371403, 371400, '陵城区'); +INSERT INTO `ciy_arearpc` VALUES (371422, 371400, '宁津县'); +INSERT INTO `ciy_arearpc` VALUES (371423, 371400, '庆云县'); +INSERT INTO `ciy_arearpc` VALUES (371424, 371400, '临邑县'); +INSERT INTO `ciy_arearpc` VALUES (371425, 371400, '齐河县'); +INSERT INTO `ciy_arearpc` VALUES (371426, 371400, '平原县'); +INSERT INTO `ciy_arearpc` VALUES (371427, 371400, '夏津县'); +INSERT INTO `ciy_arearpc` VALUES (371428, 371400, '武城县'); +INSERT INTO `ciy_arearpc` VALUES (371471, 371400, '德州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (371472, 371400, '德州运河经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (371481, 371400, '乐陵市'); +INSERT INTO `ciy_arearpc` VALUES (371482, 371400, '禹城市'); +INSERT INTO `ciy_arearpc` VALUES (371500, 370000, '聊城市'); +INSERT INTO `ciy_arearpc` VALUES (371501, 371500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (371502, 371500, '东昌府区'); +INSERT INTO `ciy_arearpc` VALUES (371503, 371500, '茌平区'); +INSERT INTO `ciy_arearpc` VALUES (371521, 371500, '阳谷县'); +INSERT INTO `ciy_arearpc` VALUES (371522, 371500, '莘县'); +INSERT INTO `ciy_arearpc` VALUES (371524, 371500, '东阿县'); +INSERT INTO `ciy_arearpc` VALUES (371525, 371500, '冠县'); +INSERT INTO `ciy_arearpc` VALUES (371526, 371500, '高唐县'); +INSERT INTO `ciy_arearpc` VALUES (371581, 371500, '临清市'); +INSERT INTO `ciy_arearpc` VALUES (371600, 370000, '滨州市'); +INSERT INTO `ciy_arearpc` VALUES (371601, 371600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (371602, 371600, '滨城区'); +INSERT INTO `ciy_arearpc` VALUES (371603, 371600, '沾化区'); +INSERT INTO `ciy_arearpc` VALUES (371621, 371600, '惠民县'); +INSERT INTO `ciy_arearpc` VALUES (371622, 371600, '阳信县'); +INSERT INTO `ciy_arearpc` VALUES (371623, 371600, '无棣县'); +INSERT INTO `ciy_arearpc` VALUES (371625, 371600, '博兴县'); +INSERT INTO `ciy_arearpc` VALUES (371681, 371600, '邹平市'); +INSERT INTO `ciy_arearpc` VALUES (371700, 370000, '菏泽市'); +INSERT INTO `ciy_arearpc` VALUES (371701, 371700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (371702, 371700, '牡丹区'); +INSERT INTO `ciy_arearpc` VALUES (371703, 371700, '定陶区'); +INSERT INTO `ciy_arearpc` VALUES (371721, 371700, '曹县'); +INSERT INTO `ciy_arearpc` VALUES (371722, 371700, '单县'); +INSERT INTO `ciy_arearpc` VALUES (371723, 371700, '成武县'); +INSERT INTO `ciy_arearpc` VALUES (371724, 371700, '巨野县'); +INSERT INTO `ciy_arearpc` VALUES (371725, 371700, '郓城县'); +INSERT INTO `ciy_arearpc` VALUES (371726, 371700, '鄄城县'); +INSERT INTO `ciy_arearpc` VALUES (371728, 371700, '东明县'); +INSERT INTO `ciy_arearpc` VALUES (371771, 371700, '菏泽经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (371772, 371700, '菏泽高新技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (410000, 0, '河南省'); +INSERT INTO `ciy_arearpc` VALUES (410100, 410000, '郑州市'); +INSERT INTO `ciy_arearpc` VALUES (410101, 410100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410102, 410100, '中原区'); +INSERT INTO `ciy_arearpc` VALUES (410103, 410100, '二七区'); +INSERT INTO `ciy_arearpc` VALUES (410104, 410100, '管城回族区'); +INSERT INTO `ciy_arearpc` VALUES (410105, 410100, '金水区'); +INSERT INTO `ciy_arearpc` VALUES (410106, 410100, '上街区'); +INSERT INTO `ciy_arearpc` VALUES (410108, 410100, '惠济区'); +INSERT INTO `ciy_arearpc` VALUES (410122, 410100, '中牟县'); +INSERT INTO `ciy_arearpc` VALUES (410171, 410100, '郑州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (410172, 410100, '郑州高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (410173, 410100, '郑州航空港经济综合实验区'); +INSERT INTO `ciy_arearpc` VALUES (410181, 410100, '巩义市'); +INSERT INTO `ciy_arearpc` VALUES (410182, 410100, '荥阳市'); +INSERT INTO `ciy_arearpc` VALUES (410183, 410100, '新密市'); +INSERT INTO `ciy_arearpc` VALUES (410184, 410100, '新郑市'); +INSERT INTO `ciy_arearpc` VALUES (410185, 410100, '登封市'); +INSERT INTO `ciy_arearpc` VALUES (410200, 410000, '开封市'); +INSERT INTO `ciy_arearpc` VALUES (410201, 410200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410202, 410200, '龙亭区'); +INSERT INTO `ciy_arearpc` VALUES (410203, 410200, '顺河回族区'); +INSERT INTO `ciy_arearpc` VALUES (410204, 410200, '鼓楼区'); +INSERT INTO `ciy_arearpc` VALUES (410205, 410200, '禹王台区'); +INSERT INTO `ciy_arearpc` VALUES (410212, 410200, '祥符区'); +INSERT INTO `ciy_arearpc` VALUES (410221, 410200, '杞县'); +INSERT INTO `ciy_arearpc` VALUES (410222, 410200, '通许县'); +INSERT INTO `ciy_arearpc` VALUES (410223, 410200, '尉氏县'); +INSERT INTO `ciy_arearpc` VALUES (410225, 410200, '兰考县'); +INSERT INTO `ciy_arearpc` VALUES (410300, 410000, '洛阳市'); +INSERT INTO `ciy_arearpc` VALUES (410301, 410300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410302, 410300, '老城区'); +INSERT INTO `ciy_arearpc` VALUES (410303, 410300, '西工区'); +INSERT INTO `ciy_arearpc` VALUES (410304, 410300, '瀍河回族区'); +INSERT INTO `ciy_arearpc` VALUES (410305, 410300, '涧西区'); +INSERT INTO `ciy_arearpc` VALUES (410307, 410300, '偃师区'); +INSERT INTO `ciy_arearpc` VALUES (410308, 410300, '孟津区'); +INSERT INTO `ciy_arearpc` VALUES (410311, 410300, '洛龙区'); +INSERT INTO `ciy_arearpc` VALUES (410323, 410300, '新安县'); +INSERT INTO `ciy_arearpc` VALUES (410324, 410300, '栾川县'); +INSERT INTO `ciy_arearpc` VALUES (410325, 410300, '嵩县'); +INSERT INTO `ciy_arearpc` VALUES (410326, 410300, '汝阳县'); +INSERT INTO `ciy_arearpc` VALUES (410327, 410300, '宜阳县'); +INSERT INTO `ciy_arearpc` VALUES (410328, 410300, '洛宁县'); +INSERT INTO `ciy_arearpc` VALUES (410329, 410300, '伊川县'); +INSERT INTO `ciy_arearpc` VALUES (410371, 410300, '洛阳高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (410400, 410000, '平顶山市'); +INSERT INTO `ciy_arearpc` VALUES (410401, 410400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410402, 410400, '新华区'); +INSERT INTO `ciy_arearpc` VALUES (410403, 410400, '卫东区'); +INSERT INTO `ciy_arearpc` VALUES (410404, 410400, '石龙区'); +INSERT INTO `ciy_arearpc` VALUES (410411, 410400, '湛河区'); +INSERT INTO `ciy_arearpc` VALUES (410421, 410400, '宝丰县'); +INSERT INTO `ciy_arearpc` VALUES (410422, 410400, '叶县'); +INSERT INTO `ciy_arearpc` VALUES (410423, 410400, '鲁山县'); +INSERT INTO `ciy_arearpc` VALUES (410425, 410400, '郏县'); +INSERT INTO `ciy_arearpc` VALUES (410471, 410400, '平顶山高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (410472, 410400, '平顶山市城乡一体化示范区'); +INSERT INTO `ciy_arearpc` VALUES (410481, 410400, '舞钢市'); +INSERT INTO `ciy_arearpc` VALUES (410482, 410400, '汝州市'); +INSERT INTO `ciy_arearpc` VALUES (410500, 410000, '安阳市'); +INSERT INTO `ciy_arearpc` VALUES (410501, 410500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410502, 410500, '文峰区'); +INSERT INTO `ciy_arearpc` VALUES (410503, 410500, '北关区'); +INSERT INTO `ciy_arearpc` VALUES (410505, 410500, '殷都区'); +INSERT INTO `ciy_arearpc` VALUES (410506, 410500, '龙安区'); +INSERT INTO `ciy_arearpc` VALUES (410522, 410500, '安阳县'); +INSERT INTO `ciy_arearpc` VALUES (410523, 410500, '汤阴县'); +INSERT INTO `ciy_arearpc` VALUES (410526, 410500, '滑县'); +INSERT INTO `ciy_arearpc` VALUES (410527, 410500, '内黄县'); +INSERT INTO `ciy_arearpc` VALUES (410571, 410500, '安阳高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (410581, 410500, '林州市'); +INSERT INTO `ciy_arearpc` VALUES (410600, 410000, '鹤壁市'); +INSERT INTO `ciy_arearpc` VALUES (410601, 410600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410602, 410600, '鹤山区'); +INSERT INTO `ciy_arearpc` VALUES (410603, 410600, '山城区'); +INSERT INTO `ciy_arearpc` VALUES (410611, 410600, '淇滨区'); +INSERT INTO `ciy_arearpc` VALUES (410621, 410600, '浚县'); +INSERT INTO `ciy_arearpc` VALUES (410622, 410600, '淇县'); +INSERT INTO `ciy_arearpc` VALUES (410671, 410600, '鹤壁经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (410700, 410000, '新乡市'); +INSERT INTO `ciy_arearpc` VALUES (410701, 410700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410702, 410700, '红旗区'); +INSERT INTO `ciy_arearpc` VALUES (410703, 410700, '卫滨区'); +INSERT INTO `ciy_arearpc` VALUES (410704, 410700, '凤泉区'); +INSERT INTO `ciy_arearpc` VALUES (410711, 410700, '牧野区'); +INSERT INTO `ciy_arearpc` VALUES (410721, 410700, '新乡县'); +INSERT INTO `ciy_arearpc` VALUES (410724, 410700, '获嘉县'); +INSERT INTO `ciy_arearpc` VALUES (410725, 410700, '原阳县'); +INSERT INTO `ciy_arearpc` VALUES (410726, 410700, '延津县'); +INSERT INTO `ciy_arearpc` VALUES (410727, 410700, '封丘县'); +INSERT INTO `ciy_arearpc` VALUES (410771, 410700, '新乡高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (410772, 410700, '新乡经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (410773, 410700, '新乡市平原城乡一体化示范区'); +INSERT INTO `ciy_arearpc` VALUES (410781, 410700, '卫辉市'); +INSERT INTO `ciy_arearpc` VALUES (410782, 410700, '辉县市'); +INSERT INTO `ciy_arearpc` VALUES (410783, 410700, '长垣市'); +INSERT INTO `ciy_arearpc` VALUES (410800, 410000, '焦作市'); +INSERT INTO `ciy_arearpc` VALUES (410801, 410800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410802, 410800, '解放区'); +INSERT INTO `ciy_arearpc` VALUES (410803, 410800, '中站区'); +INSERT INTO `ciy_arearpc` VALUES (410804, 410800, '马村区'); +INSERT INTO `ciy_arearpc` VALUES (410811, 410800, '山阳区'); +INSERT INTO `ciy_arearpc` VALUES (410821, 410800, '修武县'); +INSERT INTO `ciy_arearpc` VALUES (410822, 410800, '博爱县'); +INSERT INTO `ciy_arearpc` VALUES (410823, 410800, '武陟县'); +INSERT INTO `ciy_arearpc` VALUES (410825, 410800, '温县'); +INSERT INTO `ciy_arearpc` VALUES (410871, 410800, '焦作城乡一体化示范区'); +INSERT INTO `ciy_arearpc` VALUES (410882, 410800, '沁阳市'); +INSERT INTO `ciy_arearpc` VALUES (410883, 410800, '孟州市'); +INSERT INTO `ciy_arearpc` VALUES (410900, 410000, '濮阳市'); +INSERT INTO `ciy_arearpc` VALUES (410901, 410900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (410902, 410900, '华龙区'); +INSERT INTO `ciy_arearpc` VALUES (410922, 410900, '清丰县'); +INSERT INTO `ciy_arearpc` VALUES (410923, 410900, '南乐县'); +INSERT INTO `ciy_arearpc` VALUES (410926, 410900, '范县'); +INSERT INTO `ciy_arearpc` VALUES (410927, 410900, '台前县'); +INSERT INTO `ciy_arearpc` VALUES (410928, 410900, '濮阳县'); +INSERT INTO `ciy_arearpc` VALUES (410971, 410900, '河南濮阳工业园区'); +INSERT INTO `ciy_arearpc` VALUES (410972, 410900, '濮阳经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (411000, 410000, '许昌市'); +INSERT INTO `ciy_arearpc` VALUES (411001, 411000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (411002, 411000, '魏都区'); +INSERT INTO `ciy_arearpc` VALUES (411003, 411000, '建安区'); +INSERT INTO `ciy_arearpc` VALUES (411024, 411000, '鄢陵县'); +INSERT INTO `ciy_arearpc` VALUES (411025, 411000, '襄城县'); +INSERT INTO `ciy_arearpc` VALUES (411071, 411000, '许昌经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (411081, 411000, '禹州市'); +INSERT INTO `ciy_arearpc` VALUES (411082, 411000, '长葛市'); +INSERT INTO `ciy_arearpc` VALUES (411100, 410000, '漯河市'); +INSERT INTO `ciy_arearpc` VALUES (411101, 411100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (411102, 411100, '源汇区'); +INSERT INTO `ciy_arearpc` VALUES (411103, 411100, '郾城区'); +INSERT INTO `ciy_arearpc` VALUES (411104, 411100, '召陵区'); +INSERT INTO `ciy_arearpc` VALUES (411121, 411100, '舞阳县'); +INSERT INTO `ciy_arearpc` VALUES (411122, 411100, '临颍县'); +INSERT INTO `ciy_arearpc` VALUES (411171, 411100, '漯河经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (411200, 410000, '三门峡市'); +INSERT INTO `ciy_arearpc` VALUES (411201, 411200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (411202, 411200, '湖滨区'); +INSERT INTO `ciy_arearpc` VALUES (411203, 411200, '陕州区'); +INSERT INTO `ciy_arearpc` VALUES (411221, 411200, '渑池县'); +INSERT INTO `ciy_arearpc` VALUES (411224, 411200, '卢氏县'); +INSERT INTO `ciy_arearpc` VALUES (411271, 411200, '河南三门峡经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (411281, 411200, '义马市'); +INSERT INTO `ciy_arearpc` VALUES (411282, 411200, '灵宝市'); +INSERT INTO `ciy_arearpc` VALUES (411300, 410000, '南阳市'); +INSERT INTO `ciy_arearpc` VALUES (411301, 411300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (411302, 411300, '宛城区'); +INSERT INTO `ciy_arearpc` VALUES (411303, 411300, '卧龙区'); +INSERT INTO `ciy_arearpc` VALUES (411321, 411300, '南召县'); +INSERT INTO `ciy_arearpc` VALUES (411322, 411300, '方城县'); +INSERT INTO `ciy_arearpc` VALUES (411323, 411300, '西峡县'); +INSERT INTO `ciy_arearpc` VALUES (411324, 411300, '镇平县'); +INSERT INTO `ciy_arearpc` VALUES (411325, 411300, '内乡县'); +INSERT INTO `ciy_arearpc` VALUES (411326, 411300, '淅川县'); +INSERT INTO `ciy_arearpc` VALUES (411327, 411300, '社旗县'); +INSERT INTO `ciy_arearpc` VALUES (411328, 411300, '唐河县'); +INSERT INTO `ciy_arearpc` VALUES (411329, 411300, '新野县'); +INSERT INTO `ciy_arearpc` VALUES (411330, 411300, '桐柏县'); +INSERT INTO `ciy_arearpc` VALUES (411371, 411300, '南阳高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (411372, 411300, '南阳市城乡一体化示范区'); +INSERT INTO `ciy_arearpc` VALUES (411381, 411300, '邓州市'); +INSERT INTO `ciy_arearpc` VALUES (411400, 410000, '商丘市'); +INSERT INTO `ciy_arearpc` VALUES (411401, 411400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (411402, 411400, '梁园区'); +INSERT INTO `ciy_arearpc` VALUES (411403, 411400, '睢阳区'); +INSERT INTO `ciy_arearpc` VALUES (411421, 411400, '民权县'); +INSERT INTO `ciy_arearpc` VALUES (411422, 411400, '睢县'); +INSERT INTO `ciy_arearpc` VALUES (411423, 411400, '宁陵县'); +INSERT INTO `ciy_arearpc` VALUES (411424, 411400, '柘城县'); +INSERT INTO `ciy_arearpc` VALUES (411425, 411400, '虞城县'); +INSERT INTO `ciy_arearpc` VALUES (411426, 411400, '夏邑县'); +INSERT INTO `ciy_arearpc` VALUES (411471, 411400, '豫东综合物流产业聚集区'); +INSERT INTO `ciy_arearpc` VALUES (411472, 411400, '河南商丘经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (411481, 411400, '永城市'); +INSERT INTO `ciy_arearpc` VALUES (411500, 410000, '信阳市'); +INSERT INTO `ciy_arearpc` VALUES (411501, 411500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (411502, 411500, '浉河区'); +INSERT INTO `ciy_arearpc` VALUES (411503, 411500, '平桥区'); +INSERT INTO `ciy_arearpc` VALUES (411521, 411500, '罗山县'); +INSERT INTO `ciy_arearpc` VALUES (411522, 411500, '光山县'); +INSERT INTO `ciy_arearpc` VALUES (411523, 411500, '新县'); +INSERT INTO `ciy_arearpc` VALUES (411524, 411500, '商城县'); +INSERT INTO `ciy_arearpc` VALUES (411525, 411500, '固始县'); +INSERT INTO `ciy_arearpc` VALUES (411526, 411500, '潢川县'); +INSERT INTO `ciy_arearpc` VALUES (411527, 411500, '淮滨县'); +INSERT INTO `ciy_arearpc` VALUES (411528, 411500, '息县'); +INSERT INTO `ciy_arearpc` VALUES (411571, 411500, '信阳高新技术产业开发区'); +INSERT INTO `ciy_arearpc` VALUES (411600, 410000, '周口市'); +INSERT INTO `ciy_arearpc` VALUES (411601, 411600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (411602, 411600, '川汇区'); +INSERT INTO `ciy_arearpc` VALUES (411603, 411600, '淮阳区'); +INSERT INTO `ciy_arearpc` VALUES (411621, 411600, '扶沟县'); +INSERT INTO `ciy_arearpc` VALUES (411622, 411600, '西华县'); +INSERT INTO `ciy_arearpc` VALUES (411623, 411600, '商水县'); +INSERT INTO `ciy_arearpc` VALUES (411624, 411600, '沈丘县'); +INSERT INTO `ciy_arearpc` VALUES (411625, 411600, '郸城县'); +INSERT INTO `ciy_arearpc` VALUES (411627, 411600, '太康县'); +INSERT INTO `ciy_arearpc` VALUES (411628, 411600, '鹿邑县'); +INSERT INTO `ciy_arearpc` VALUES (411671, 411600, '河南周口经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (411681, 411600, '项城市'); +INSERT INTO `ciy_arearpc` VALUES (411700, 410000, '驻马店市'); +INSERT INTO `ciy_arearpc` VALUES (411701, 411700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (411702, 411700, '驿城区'); +INSERT INTO `ciy_arearpc` VALUES (411721, 411700, '西平县'); +INSERT INTO `ciy_arearpc` VALUES (411722, 411700, '上蔡县'); +INSERT INTO `ciy_arearpc` VALUES (411723, 411700, '平舆县'); +INSERT INTO `ciy_arearpc` VALUES (411724, 411700, '正阳县'); +INSERT INTO `ciy_arearpc` VALUES (411725, 411700, '确山县'); +INSERT INTO `ciy_arearpc` VALUES (411726, 411700, '泌阳县'); +INSERT INTO `ciy_arearpc` VALUES (411727, 411700, '汝南县'); +INSERT INTO `ciy_arearpc` VALUES (411728, 411700, '遂平县'); +INSERT INTO `ciy_arearpc` VALUES (411729, 411700, '新蔡县'); +INSERT INTO `ciy_arearpc` VALUES (411771, 411700, '河南驻马店经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (419000, 410000, '省直辖县级行政区划'); +INSERT INTO `ciy_arearpc` VALUES (419001, 419000, '济源市'); +INSERT INTO `ciy_arearpc` VALUES (420000, 0, '湖北省'); +INSERT INTO `ciy_arearpc` VALUES (420100, 420000, '武汉市'); +INSERT INTO `ciy_arearpc` VALUES (420101, 420100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (420102, 420100, '江岸区'); +INSERT INTO `ciy_arearpc` VALUES (420103, 420100, '江汉区'); +INSERT INTO `ciy_arearpc` VALUES (420104, 420100, '硚口区'); +INSERT INTO `ciy_arearpc` VALUES (420105, 420100, '汉阳区'); +INSERT INTO `ciy_arearpc` VALUES (420106, 420100, '武昌区'); +INSERT INTO `ciy_arearpc` VALUES (420107, 420100, '青山区'); +INSERT INTO `ciy_arearpc` VALUES (420111, 420100, '洪山区'); +INSERT INTO `ciy_arearpc` VALUES (420112, 420100, '东西湖区'); +INSERT INTO `ciy_arearpc` VALUES (420113, 420100, '汉南区'); +INSERT INTO `ciy_arearpc` VALUES (420114, 420100, '蔡甸区'); +INSERT INTO `ciy_arearpc` VALUES (420115, 420100, '江夏区'); +INSERT INTO `ciy_arearpc` VALUES (420116, 420100, '黄陂区'); +INSERT INTO `ciy_arearpc` VALUES (420117, 420100, '新洲区'); +INSERT INTO `ciy_arearpc` VALUES (420200, 420000, '黄石市'); +INSERT INTO `ciy_arearpc` VALUES (420201, 420200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (420202, 420200, '黄石港区'); +INSERT INTO `ciy_arearpc` VALUES (420203, 420200, '西塞山区'); +INSERT INTO `ciy_arearpc` VALUES (420204, 420200, '下陆区'); +INSERT INTO `ciy_arearpc` VALUES (420205, 420200, '铁山区'); +INSERT INTO `ciy_arearpc` VALUES (420222, 420200, '阳新县'); +INSERT INTO `ciy_arearpc` VALUES (420281, 420200, '大冶市'); +INSERT INTO `ciy_arearpc` VALUES (420300, 420000, '十堰市'); +INSERT INTO `ciy_arearpc` VALUES (420301, 420300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (420302, 420300, '茅箭区'); +INSERT INTO `ciy_arearpc` VALUES (420303, 420300, '张湾区'); +INSERT INTO `ciy_arearpc` VALUES (420304, 420300, '郧阳区'); +INSERT INTO `ciy_arearpc` VALUES (420322, 420300, '郧西县'); +INSERT INTO `ciy_arearpc` VALUES (420323, 420300, '竹山县'); +INSERT INTO `ciy_arearpc` VALUES (420324, 420300, '竹溪县'); +INSERT INTO `ciy_arearpc` VALUES (420325, 420300, '房县'); +INSERT INTO `ciy_arearpc` VALUES (420381, 420300, '丹江口市'); +INSERT INTO `ciy_arearpc` VALUES (420500, 420000, '宜昌市'); +INSERT INTO `ciy_arearpc` VALUES (420501, 420500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (420502, 420500, '西陵区'); +INSERT INTO `ciy_arearpc` VALUES (420503, 420500, '伍家岗区'); +INSERT INTO `ciy_arearpc` VALUES (420504, 420500, '点军区'); +INSERT INTO `ciy_arearpc` VALUES (420505, 420500, '猇亭区'); +INSERT INTO `ciy_arearpc` VALUES (420506, 420500, '夷陵区'); +INSERT INTO `ciy_arearpc` VALUES (420525, 420500, '远安县'); +INSERT INTO `ciy_arearpc` VALUES (420526, 420500, '兴山县'); +INSERT INTO `ciy_arearpc` VALUES (420527, 420500, '秭归县'); +INSERT INTO `ciy_arearpc` VALUES (420528, 420500, '长阳土家族自治县'); +INSERT INTO `ciy_arearpc` VALUES (420529, 420500, '五峰土家族自治县'); +INSERT INTO `ciy_arearpc` VALUES (420581, 420500, '宜都市'); +INSERT INTO `ciy_arearpc` VALUES (420582, 420500, '当阳市'); +INSERT INTO `ciy_arearpc` VALUES (420583, 420500, '枝江市'); +INSERT INTO `ciy_arearpc` VALUES (420600, 420000, '襄阳市'); +INSERT INTO `ciy_arearpc` VALUES (420601, 420600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (420602, 420600, '襄城区'); +INSERT INTO `ciy_arearpc` VALUES (420606, 420600, '樊城区'); +INSERT INTO `ciy_arearpc` VALUES (420607, 420600, '襄州区'); +INSERT INTO `ciy_arearpc` VALUES (420624, 420600, '南漳县'); +INSERT INTO `ciy_arearpc` VALUES (420625, 420600, '谷城县'); +INSERT INTO `ciy_arearpc` VALUES (420626, 420600, '保康县'); +INSERT INTO `ciy_arearpc` VALUES (420682, 420600, '老河口市'); +INSERT INTO `ciy_arearpc` VALUES (420683, 420600, '枣阳市'); +INSERT INTO `ciy_arearpc` VALUES (420684, 420600, '宜城市'); +INSERT INTO `ciy_arearpc` VALUES (420700, 420000, '鄂州市'); +INSERT INTO `ciy_arearpc` VALUES (420701, 420700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (420702, 420700, '梁子湖区'); +INSERT INTO `ciy_arearpc` VALUES (420703, 420700, '华容区'); +INSERT INTO `ciy_arearpc` VALUES (420704, 420700, '鄂城区'); +INSERT INTO `ciy_arearpc` VALUES (420800, 420000, '荆门市'); +INSERT INTO `ciy_arearpc` VALUES (420801, 420800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (420802, 420800, '东宝区'); +INSERT INTO `ciy_arearpc` VALUES (420804, 420800, '掇刀区'); +INSERT INTO `ciy_arearpc` VALUES (420822, 420800, '沙洋县'); +INSERT INTO `ciy_arearpc` VALUES (420881, 420800, '钟祥市'); +INSERT INTO `ciy_arearpc` VALUES (420882, 420800, '京山市'); +INSERT INTO `ciy_arearpc` VALUES (420900, 420000, '孝感市'); +INSERT INTO `ciy_arearpc` VALUES (420901, 420900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (420902, 420900, '孝南区'); +INSERT INTO `ciy_arearpc` VALUES (420921, 420900, '孝昌县'); +INSERT INTO `ciy_arearpc` VALUES (420922, 420900, '大悟县'); +INSERT INTO `ciy_arearpc` VALUES (420923, 420900, '云梦县'); +INSERT INTO `ciy_arearpc` VALUES (420981, 420900, '应城市'); +INSERT INTO `ciy_arearpc` VALUES (420982, 420900, '安陆市'); +INSERT INTO `ciy_arearpc` VALUES (420984, 420900, '汉川市'); +INSERT INTO `ciy_arearpc` VALUES (421000, 420000, '荆州市'); +INSERT INTO `ciy_arearpc` VALUES (421001, 421000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (421002, 421000, '沙市区'); +INSERT INTO `ciy_arearpc` VALUES (421003, 421000, '荆州区'); +INSERT INTO `ciy_arearpc` VALUES (421022, 421000, '公安县'); +INSERT INTO `ciy_arearpc` VALUES (421024, 421000, '江陵县'); +INSERT INTO `ciy_arearpc` VALUES (421071, 421000, '荆州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (421081, 421000, '石首市'); +INSERT INTO `ciy_arearpc` VALUES (421083, 421000, '洪湖市'); +INSERT INTO `ciy_arearpc` VALUES (421087, 421000, '松滋市'); +INSERT INTO `ciy_arearpc` VALUES (421088, 421000, '监利市'); +INSERT INTO `ciy_arearpc` VALUES (421100, 420000, '黄冈市'); +INSERT INTO `ciy_arearpc` VALUES (421101, 421100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (421102, 421100, '黄州区'); +INSERT INTO `ciy_arearpc` VALUES (421121, 421100, '团风县'); +INSERT INTO `ciy_arearpc` VALUES (421122, 421100, '红安县'); +INSERT INTO `ciy_arearpc` VALUES (421123, 421100, '罗田县'); +INSERT INTO `ciy_arearpc` VALUES (421124, 421100, '英山县'); +INSERT INTO `ciy_arearpc` VALUES (421125, 421100, '浠水县'); +INSERT INTO `ciy_arearpc` VALUES (421126, 421100, '蕲春县'); +INSERT INTO `ciy_arearpc` VALUES (421127, 421100, '黄梅县'); +INSERT INTO `ciy_arearpc` VALUES (421171, 421100, '龙感湖管理区'); +INSERT INTO `ciy_arearpc` VALUES (421181, 421100, '麻城市'); +INSERT INTO `ciy_arearpc` VALUES (421182, 421100, '武穴市'); +INSERT INTO `ciy_arearpc` VALUES (421200, 420000, '咸宁市'); +INSERT INTO `ciy_arearpc` VALUES (421201, 421200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (421202, 421200, '咸安区'); +INSERT INTO `ciy_arearpc` VALUES (421221, 421200, '嘉鱼县'); +INSERT INTO `ciy_arearpc` VALUES (421222, 421200, '通城县'); +INSERT INTO `ciy_arearpc` VALUES (421223, 421200, '崇阳县'); +INSERT INTO `ciy_arearpc` VALUES (421224, 421200, '通山县'); +INSERT INTO `ciy_arearpc` VALUES (421281, 421200, '赤壁市'); +INSERT INTO `ciy_arearpc` VALUES (421300, 420000, '随州市'); +INSERT INTO `ciy_arearpc` VALUES (421301, 421300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (421303, 421300, '曾都区'); +INSERT INTO `ciy_arearpc` VALUES (421321, 421300, '随县'); +INSERT INTO `ciy_arearpc` VALUES (421381, 421300, '广水市'); +INSERT INTO `ciy_arearpc` VALUES (422800, 420000, '恩施土家族苗族自治州'); +INSERT INTO `ciy_arearpc` VALUES (422801, 422800, '恩施市'); +INSERT INTO `ciy_arearpc` VALUES (422802, 422800, '利川市'); +INSERT INTO `ciy_arearpc` VALUES (422822, 422800, '建始县'); +INSERT INTO `ciy_arearpc` VALUES (422823, 422800, '巴东县'); +INSERT INTO `ciy_arearpc` VALUES (422825, 422800, '宣恩县'); +INSERT INTO `ciy_arearpc` VALUES (422826, 422800, '咸丰县'); +INSERT INTO `ciy_arearpc` VALUES (422827, 422800, '来凤县'); +INSERT INTO `ciy_arearpc` VALUES (422828, 422800, '鹤峰县'); +INSERT INTO `ciy_arearpc` VALUES (429000, 420000, '省直辖县级行政区划'); +INSERT INTO `ciy_arearpc` VALUES (429004, 429000, '仙桃市'); +INSERT INTO `ciy_arearpc` VALUES (429005, 429000, '潜江市'); +INSERT INTO `ciy_arearpc` VALUES (429006, 429000, '天门市'); +INSERT INTO `ciy_arearpc` VALUES (429021, 429000, '神农架林区'); +INSERT INTO `ciy_arearpc` VALUES (430000, 0, '湖南省'); +INSERT INTO `ciy_arearpc` VALUES (430100, 430000, '长沙市'); +INSERT INTO `ciy_arearpc` VALUES (430101, 430100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430102, 430100, '芙蓉区'); +INSERT INTO `ciy_arearpc` VALUES (430103, 430100, '天心区'); +INSERT INTO `ciy_arearpc` VALUES (430104, 430100, '岳麓区'); +INSERT INTO `ciy_arearpc` VALUES (430105, 430100, '开福区'); +INSERT INTO `ciy_arearpc` VALUES (430111, 430100, '雨花区'); +INSERT INTO `ciy_arearpc` VALUES (430112, 430100, '望城区'); +INSERT INTO `ciy_arearpc` VALUES (430121, 430100, '长沙县'); +INSERT INTO `ciy_arearpc` VALUES (430181, 430100, '浏阳市'); +INSERT INTO `ciy_arearpc` VALUES (430182, 430100, '宁乡市'); +INSERT INTO `ciy_arearpc` VALUES (430200, 430000, '株洲市'); +INSERT INTO `ciy_arearpc` VALUES (430201, 430200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430202, 430200, '荷塘区'); +INSERT INTO `ciy_arearpc` VALUES (430203, 430200, '芦淞区'); +INSERT INTO `ciy_arearpc` VALUES (430204, 430200, '石峰区'); +INSERT INTO `ciy_arearpc` VALUES (430211, 430200, '天元区'); +INSERT INTO `ciy_arearpc` VALUES (430212, 430200, '渌口区'); +INSERT INTO `ciy_arearpc` VALUES (430223, 430200, '攸县'); +INSERT INTO `ciy_arearpc` VALUES (430224, 430200, '茶陵县'); +INSERT INTO `ciy_arearpc` VALUES (430225, 430200, '炎陵县'); +INSERT INTO `ciy_arearpc` VALUES (430271, 430200, '云龙示范区'); +INSERT INTO `ciy_arearpc` VALUES (430281, 430200, '醴陵市'); +INSERT INTO `ciy_arearpc` VALUES (430300, 430000, '湘潭市'); +INSERT INTO `ciy_arearpc` VALUES (430301, 430300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430302, 430300, '雨湖区'); +INSERT INTO `ciy_arearpc` VALUES (430304, 430300, '岳塘区'); +INSERT INTO `ciy_arearpc` VALUES (430321, 430300, '湘潭县'); +INSERT INTO `ciy_arearpc` VALUES (430371, 430300, '湖南湘潭高新技术产业园区'); +INSERT INTO `ciy_arearpc` VALUES (430372, 430300, '湘潭昭山示范区'); +INSERT INTO `ciy_arearpc` VALUES (430373, 430300, '湘潭九华示范区'); +INSERT INTO `ciy_arearpc` VALUES (430381, 430300, '湘乡市'); +INSERT INTO `ciy_arearpc` VALUES (430382, 430300, '韶山市'); +INSERT INTO `ciy_arearpc` VALUES (430400, 430000, '衡阳市'); +INSERT INTO `ciy_arearpc` VALUES (430401, 430400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430405, 430400, '珠晖区'); +INSERT INTO `ciy_arearpc` VALUES (430406, 430400, '雁峰区'); +INSERT INTO `ciy_arearpc` VALUES (430407, 430400, '石鼓区'); +INSERT INTO `ciy_arearpc` VALUES (430408, 430400, '蒸湘区'); +INSERT INTO `ciy_arearpc` VALUES (430412, 430400, '南岳区'); +INSERT INTO `ciy_arearpc` VALUES (430421, 430400, '衡阳县'); +INSERT INTO `ciy_arearpc` VALUES (430422, 430400, '衡南县'); +INSERT INTO `ciy_arearpc` VALUES (430423, 430400, '衡山县'); +INSERT INTO `ciy_arearpc` VALUES (430424, 430400, '衡东县'); +INSERT INTO `ciy_arearpc` VALUES (430426, 430400, '祁东县'); +INSERT INTO `ciy_arearpc` VALUES (430471, 430400, '衡阳综合保税区'); +INSERT INTO `ciy_arearpc` VALUES (430472, 430400, '湖南衡阳高新技术产业园区'); +INSERT INTO `ciy_arearpc` VALUES (430473, 430400, '湖南衡阳松木经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (430481, 430400, '耒阳市'); +INSERT INTO `ciy_arearpc` VALUES (430482, 430400, '常宁市'); +INSERT INTO `ciy_arearpc` VALUES (430500, 430000, '邵阳市'); +INSERT INTO `ciy_arearpc` VALUES (430501, 430500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430502, 430500, '双清区'); +INSERT INTO `ciy_arearpc` VALUES (430503, 430500, '大祥区'); +INSERT INTO `ciy_arearpc` VALUES (430511, 430500, '北塔区'); +INSERT INTO `ciy_arearpc` VALUES (430522, 430500, '新邵县'); +INSERT INTO `ciy_arearpc` VALUES (430523, 430500, '邵阳县'); +INSERT INTO `ciy_arearpc` VALUES (430524, 430500, '隆回县'); +INSERT INTO `ciy_arearpc` VALUES (430525, 430500, '洞口县'); +INSERT INTO `ciy_arearpc` VALUES (430527, 430500, '绥宁县'); +INSERT INTO `ciy_arearpc` VALUES (430528, 430500, '新宁县'); +INSERT INTO `ciy_arearpc` VALUES (430529, 430500, '城步苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (430581, 430500, '武冈市'); +INSERT INTO `ciy_arearpc` VALUES (430582, 430500, '邵东市'); +INSERT INTO `ciy_arearpc` VALUES (430600, 430000, '岳阳市'); +INSERT INTO `ciy_arearpc` VALUES (430601, 430600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430602, 430600, '岳阳楼区'); +INSERT INTO `ciy_arearpc` VALUES (430603, 430600, '云溪区'); +INSERT INTO `ciy_arearpc` VALUES (430611, 430600, '君山区'); +INSERT INTO `ciy_arearpc` VALUES (430621, 430600, '岳阳县'); +INSERT INTO `ciy_arearpc` VALUES (430623, 430600, '华容县'); +INSERT INTO `ciy_arearpc` VALUES (430624, 430600, '湘阴县'); +INSERT INTO `ciy_arearpc` VALUES (430626, 430600, '平江县'); +INSERT INTO `ciy_arearpc` VALUES (430671, 430600, '岳阳市屈原管理区'); +INSERT INTO `ciy_arearpc` VALUES (430681, 430600, '汨罗市'); +INSERT INTO `ciy_arearpc` VALUES (430682, 430600, '临湘市'); +INSERT INTO `ciy_arearpc` VALUES (430700, 430000, '常德市'); +INSERT INTO `ciy_arearpc` VALUES (430701, 430700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430702, 430700, '武陵区'); +INSERT INTO `ciy_arearpc` VALUES (430703, 430700, '鼎城区'); +INSERT INTO `ciy_arearpc` VALUES (430721, 430700, '安乡县'); +INSERT INTO `ciy_arearpc` VALUES (430722, 430700, '汉寿县'); +INSERT INTO `ciy_arearpc` VALUES (430723, 430700, '澧县'); +INSERT INTO `ciy_arearpc` VALUES (430724, 430700, '临澧县'); +INSERT INTO `ciy_arearpc` VALUES (430725, 430700, '桃源县'); +INSERT INTO `ciy_arearpc` VALUES (430726, 430700, '石门县'); +INSERT INTO `ciy_arearpc` VALUES (430771, 430700, '常德市西洞庭管理区'); +INSERT INTO `ciy_arearpc` VALUES (430781, 430700, '津市市'); +INSERT INTO `ciy_arearpc` VALUES (430800, 430000, '张家界市'); +INSERT INTO `ciy_arearpc` VALUES (430801, 430800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430802, 430800, '永定区'); +INSERT INTO `ciy_arearpc` VALUES (430811, 430800, '武陵源区'); +INSERT INTO `ciy_arearpc` VALUES (430821, 430800, '慈利县'); +INSERT INTO `ciy_arearpc` VALUES (430822, 430800, '桑植县'); +INSERT INTO `ciy_arearpc` VALUES (430900, 430000, '益阳市'); +INSERT INTO `ciy_arearpc` VALUES (430901, 430900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (430902, 430900, '资阳区'); +INSERT INTO `ciy_arearpc` VALUES (430903, 430900, '赫山区'); +INSERT INTO `ciy_arearpc` VALUES (430921, 430900, '南县'); +INSERT INTO `ciy_arearpc` VALUES (430922, 430900, '桃江县'); +INSERT INTO `ciy_arearpc` VALUES (430923, 430900, '安化县'); +INSERT INTO `ciy_arearpc` VALUES (430971, 430900, '益阳市大通湖管理区'); +INSERT INTO `ciy_arearpc` VALUES (430972, 430900, '湖南益阳高新技术产业园区'); +INSERT INTO `ciy_arearpc` VALUES (430981, 430900, '沅江市'); +INSERT INTO `ciy_arearpc` VALUES (431000, 430000, '郴州市'); +INSERT INTO `ciy_arearpc` VALUES (431001, 431000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (431002, 431000, '北湖区'); +INSERT INTO `ciy_arearpc` VALUES (431003, 431000, '苏仙区'); +INSERT INTO `ciy_arearpc` VALUES (431021, 431000, '桂阳县'); +INSERT INTO `ciy_arearpc` VALUES (431022, 431000, '宜章县'); +INSERT INTO `ciy_arearpc` VALUES (431023, 431000, '永兴县'); +INSERT INTO `ciy_arearpc` VALUES (431024, 431000, '嘉禾县'); +INSERT INTO `ciy_arearpc` VALUES (431025, 431000, '临武县'); +INSERT INTO `ciy_arearpc` VALUES (431026, 431000, '汝城县'); +INSERT INTO `ciy_arearpc` VALUES (431027, 431000, '桂东县'); +INSERT INTO `ciy_arearpc` VALUES (431028, 431000, '安仁县'); +INSERT INTO `ciy_arearpc` VALUES (431081, 431000, '资兴市'); +INSERT INTO `ciy_arearpc` VALUES (431100, 430000, '永州市'); +INSERT INTO `ciy_arearpc` VALUES (431101, 431100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (431102, 431100, '零陵区'); +INSERT INTO `ciy_arearpc` VALUES (431103, 431100, '冷水滩区'); +INSERT INTO `ciy_arearpc` VALUES (431122, 431100, '东安县'); +INSERT INTO `ciy_arearpc` VALUES (431123, 431100, '双牌县'); +INSERT INTO `ciy_arearpc` VALUES (431124, 431100, '道县'); +INSERT INTO `ciy_arearpc` VALUES (431125, 431100, '江永县'); +INSERT INTO `ciy_arearpc` VALUES (431126, 431100, '宁远县'); +INSERT INTO `ciy_arearpc` VALUES (431127, 431100, '蓝山县'); +INSERT INTO `ciy_arearpc` VALUES (431128, 431100, '新田县'); +INSERT INTO `ciy_arearpc` VALUES (431129, 431100, '江华瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (431171, 431100, '永州经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (431173, 431100, '永州市回龙圩管理区'); +INSERT INTO `ciy_arearpc` VALUES (431181, 431100, '祁阳市'); +INSERT INTO `ciy_arearpc` VALUES (431200, 430000, '怀化市'); +INSERT INTO `ciy_arearpc` VALUES (431201, 431200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (431202, 431200, '鹤城区'); +INSERT INTO `ciy_arearpc` VALUES (431221, 431200, '中方县'); +INSERT INTO `ciy_arearpc` VALUES (431222, 431200, '沅陵县'); +INSERT INTO `ciy_arearpc` VALUES (431223, 431200, '辰溪县'); +INSERT INTO `ciy_arearpc` VALUES (431224, 431200, '溆浦县'); +INSERT INTO `ciy_arearpc` VALUES (431225, 431200, '会同县'); +INSERT INTO `ciy_arearpc` VALUES (431226, 431200, '麻阳苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (431227, 431200, '新晃侗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (431228, 431200, '芷江侗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (431229, 431200, '靖州苗族侗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (431230, 431200, '通道侗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (431271, 431200, '怀化市洪江管理区'); +INSERT INTO `ciy_arearpc` VALUES (431281, 431200, '洪江市'); +INSERT INTO `ciy_arearpc` VALUES (431300, 430000, '娄底市'); +INSERT INTO `ciy_arearpc` VALUES (431301, 431300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (431302, 431300, '娄星区'); +INSERT INTO `ciy_arearpc` VALUES (431321, 431300, '双峰县'); +INSERT INTO `ciy_arearpc` VALUES (431322, 431300, '新化县'); +INSERT INTO `ciy_arearpc` VALUES (431381, 431300, '冷水江市'); +INSERT INTO `ciy_arearpc` VALUES (431382, 431300, '涟源市'); +INSERT INTO `ciy_arearpc` VALUES (433100, 430000, '湘西土家族苗族自治州'); +INSERT INTO `ciy_arearpc` VALUES (433101, 433100, '吉首市'); +INSERT INTO `ciy_arearpc` VALUES (433122, 433100, '泸溪县'); +INSERT INTO `ciy_arearpc` VALUES (433123, 433100, '凤凰县'); +INSERT INTO `ciy_arearpc` VALUES (433124, 433100, '花垣县'); +INSERT INTO `ciy_arearpc` VALUES (433125, 433100, '保靖县'); +INSERT INTO `ciy_arearpc` VALUES (433126, 433100, '古丈县'); +INSERT INTO `ciy_arearpc` VALUES (433127, 433100, '永顺县'); +INSERT INTO `ciy_arearpc` VALUES (433130, 433100, '龙山县'); +INSERT INTO `ciy_arearpc` VALUES (440000, 0, '广东省'); +INSERT INTO `ciy_arearpc` VALUES (440100, 440000, '广州市'); +INSERT INTO `ciy_arearpc` VALUES (440101, 440100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440103, 440100, '荔湾区'); +INSERT INTO `ciy_arearpc` VALUES (440104, 440100, '越秀区'); +INSERT INTO `ciy_arearpc` VALUES (440105, 440100, '海珠区'); +INSERT INTO `ciy_arearpc` VALUES (440106, 440100, '天河区'); +INSERT INTO `ciy_arearpc` VALUES (440111, 440100, '白云区'); +INSERT INTO `ciy_arearpc` VALUES (440112, 440100, '黄埔区'); +INSERT INTO `ciy_arearpc` VALUES (440113, 440100, '番禺区'); +INSERT INTO `ciy_arearpc` VALUES (440114, 440100, '花都区'); +INSERT INTO `ciy_arearpc` VALUES (440115, 440100, '南沙区'); +INSERT INTO `ciy_arearpc` VALUES (440117, 440100, '从化区'); +INSERT INTO `ciy_arearpc` VALUES (440118, 440100, '增城区'); +INSERT INTO `ciy_arearpc` VALUES (440200, 440000, '韶关市'); +INSERT INTO `ciy_arearpc` VALUES (440201, 440200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440203, 440200, '武江区'); +INSERT INTO `ciy_arearpc` VALUES (440204, 440200, '浈江区'); +INSERT INTO `ciy_arearpc` VALUES (440205, 440200, '曲江区'); +INSERT INTO `ciy_arearpc` VALUES (440222, 440200, '始兴县'); +INSERT INTO `ciy_arearpc` VALUES (440224, 440200, '仁化县'); +INSERT INTO `ciy_arearpc` VALUES (440229, 440200, '翁源县'); +INSERT INTO `ciy_arearpc` VALUES (440232, 440200, '乳源瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (440233, 440200, '新丰县'); +INSERT INTO `ciy_arearpc` VALUES (440281, 440200, '乐昌市'); +INSERT INTO `ciy_arearpc` VALUES (440282, 440200, '南雄市'); +INSERT INTO `ciy_arearpc` VALUES (440300, 440000, '深圳市'); +INSERT INTO `ciy_arearpc` VALUES (440301, 440300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440303, 440300, '罗湖区'); +INSERT INTO `ciy_arearpc` VALUES (440304, 440300, '福田区'); +INSERT INTO `ciy_arearpc` VALUES (440305, 440300, '南山区'); +INSERT INTO `ciy_arearpc` VALUES (440306, 440300, '宝安区'); +INSERT INTO `ciy_arearpc` VALUES (440307, 440300, '龙岗区'); +INSERT INTO `ciy_arearpc` VALUES (440308, 440300, '盐田区'); +INSERT INTO `ciy_arearpc` VALUES (440309, 440300, '龙华区'); +INSERT INTO `ciy_arearpc` VALUES (440310, 440300, '坪山区'); +INSERT INTO `ciy_arearpc` VALUES (440311, 440300, '光明区'); +INSERT INTO `ciy_arearpc` VALUES (440400, 440000, '珠海市'); +INSERT INTO `ciy_arearpc` VALUES (440401, 440400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440402, 440400, '香洲区'); +INSERT INTO `ciy_arearpc` VALUES (440403, 440400, '斗门区'); +INSERT INTO `ciy_arearpc` VALUES (440404, 440400, '金湾区'); +INSERT INTO `ciy_arearpc` VALUES (440500, 440000, '汕头市'); +INSERT INTO `ciy_arearpc` VALUES (440501, 440500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440507, 440500, '龙湖区'); +INSERT INTO `ciy_arearpc` VALUES (440511, 440500, '金平区'); +INSERT INTO `ciy_arearpc` VALUES (440512, 440500, '濠江区'); +INSERT INTO `ciy_arearpc` VALUES (440513, 440500, '潮阳区'); +INSERT INTO `ciy_arearpc` VALUES (440514, 440500, '潮南区'); +INSERT INTO `ciy_arearpc` VALUES (440515, 440500, '澄海区'); +INSERT INTO `ciy_arearpc` VALUES (440523, 440500, '南澳县'); +INSERT INTO `ciy_arearpc` VALUES (440600, 440000, '佛山市'); +INSERT INTO `ciy_arearpc` VALUES (440601, 440600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440604, 440600, '禅城区'); +INSERT INTO `ciy_arearpc` VALUES (440605, 440600, '南海区'); +INSERT INTO `ciy_arearpc` VALUES (440606, 440600, '顺德区'); +INSERT INTO `ciy_arearpc` VALUES (440607, 440600, '三水区'); +INSERT INTO `ciy_arearpc` VALUES (440608, 440600, '高明区'); +INSERT INTO `ciy_arearpc` VALUES (440700, 440000, '江门市'); +INSERT INTO `ciy_arearpc` VALUES (440701, 440700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440703, 440700, '蓬江区'); +INSERT INTO `ciy_arearpc` VALUES (440704, 440700, '江海区'); +INSERT INTO `ciy_arearpc` VALUES (440705, 440700, '新会区'); +INSERT INTO `ciy_arearpc` VALUES (440781, 440700, '台山市'); +INSERT INTO `ciy_arearpc` VALUES (440783, 440700, '开平市'); +INSERT INTO `ciy_arearpc` VALUES (440784, 440700, '鹤山市'); +INSERT INTO `ciy_arearpc` VALUES (440785, 440700, '恩平市'); +INSERT INTO `ciy_arearpc` VALUES (440800, 440000, '湛江市'); +INSERT INTO `ciy_arearpc` VALUES (440801, 440800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440802, 440800, '赤坎区'); +INSERT INTO `ciy_arearpc` VALUES (440803, 440800, '霞山区'); +INSERT INTO `ciy_arearpc` VALUES (440804, 440800, '坡头区'); +INSERT INTO `ciy_arearpc` VALUES (440811, 440800, '麻章区'); +INSERT INTO `ciy_arearpc` VALUES (440823, 440800, '遂溪县'); +INSERT INTO `ciy_arearpc` VALUES (440825, 440800, '徐闻县'); +INSERT INTO `ciy_arearpc` VALUES (440881, 440800, '廉江市'); +INSERT INTO `ciy_arearpc` VALUES (440882, 440800, '雷州市'); +INSERT INTO `ciy_arearpc` VALUES (440883, 440800, '吴川市'); +INSERT INTO `ciy_arearpc` VALUES (440900, 440000, '茂名市'); +INSERT INTO `ciy_arearpc` VALUES (440901, 440900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (440902, 440900, '茂南区'); +INSERT INTO `ciy_arearpc` VALUES (440904, 440900, '电白区'); +INSERT INTO `ciy_arearpc` VALUES (440981, 440900, '高州市'); +INSERT INTO `ciy_arearpc` VALUES (440982, 440900, '化州市'); +INSERT INTO `ciy_arearpc` VALUES (440983, 440900, '信宜市'); +INSERT INTO `ciy_arearpc` VALUES (441200, 440000, '肇庆市'); +INSERT INTO `ciy_arearpc` VALUES (441201, 441200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (441202, 441200, '端州区'); +INSERT INTO `ciy_arearpc` VALUES (441203, 441200, '鼎湖区'); +INSERT INTO `ciy_arearpc` VALUES (441204, 441200, '高要区'); +INSERT INTO `ciy_arearpc` VALUES (441223, 441200, '广宁县'); +INSERT INTO `ciy_arearpc` VALUES (441224, 441200, '怀集县'); +INSERT INTO `ciy_arearpc` VALUES (441225, 441200, '封开县'); +INSERT INTO `ciy_arearpc` VALUES (441226, 441200, '德庆县'); +INSERT INTO `ciy_arearpc` VALUES (441284, 441200, '四会市'); +INSERT INTO `ciy_arearpc` VALUES (441300, 440000, '惠州市'); +INSERT INTO `ciy_arearpc` VALUES (441301, 441300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (441302, 441300, '惠城区'); +INSERT INTO `ciy_arearpc` VALUES (441303, 441300, '惠阳区'); +INSERT INTO `ciy_arearpc` VALUES (441322, 441300, '博罗县'); +INSERT INTO `ciy_arearpc` VALUES (441323, 441300, '惠东县'); +INSERT INTO `ciy_arearpc` VALUES (441324, 441300, '龙门县'); +INSERT INTO `ciy_arearpc` VALUES (441400, 440000, '梅州市'); +INSERT INTO `ciy_arearpc` VALUES (441401, 441400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (441402, 441400, '梅江区'); +INSERT INTO `ciy_arearpc` VALUES (441403, 441400, '梅县区'); +INSERT INTO `ciy_arearpc` VALUES (441422, 441400, '大埔县'); +INSERT INTO `ciy_arearpc` VALUES (441423, 441400, '丰顺县'); +INSERT INTO `ciy_arearpc` VALUES (441424, 441400, '五华县'); +INSERT INTO `ciy_arearpc` VALUES (441426, 441400, '平远县'); +INSERT INTO `ciy_arearpc` VALUES (441427, 441400, '蕉岭县'); +INSERT INTO `ciy_arearpc` VALUES (441481, 441400, '兴宁市'); +INSERT INTO `ciy_arearpc` VALUES (441500, 440000, '汕尾市'); +INSERT INTO `ciy_arearpc` VALUES (441501, 441500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (441502, 441500, '城区'); +INSERT INTO `ciy_arearpc` VALUES (441521, 441500, '海丰县'); +INSERT INTO `ciy_arearpc` VALUES (441523, 441500, '陆河县'); +INSERT INTO `ciy_arearpc` VALUES (441581, 441500, '陆丰市'); +INSERT INTO `ciy_arearpc` VALUES (441600, 440000, '河源市'); +INSERT INTO `ciy_arearpc` VALUES (441601, 441600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (441602, 441600, '源城区'); +INSERT INTO `ciy_arearpc` VALUES (441621, 441600, '紫金县'); +INSERT INTO `ciy_arearpc` VALUES (441622, 441600, '龙川县'); +INSERT INTO `ciy_arearpc` VALUES (441623, 441600, '连平县'); +INSERT INTO `ciy_arearpc` VALUES (441624, 441600, '和平县'); +INSERT INTO `ciy_arearpc` VALUES (441625, 441600, '东源县'); +INSERT INTO `ciy_arearpc` VALUES (441700, 440000, '阳江市'); +INSERT INTO `ciy_arearpc` VALUES (441701, 441700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (441702, 441700, '江城区'); +INSERT INTO `ciy_arearpc` VALUES (441704, 441700, '阳东区'); +INSERT INTO `ciy_arearpc` VALUES (441721, 441700, '阳西县'); +INSERT INTO `ciy_arearpc` VALUES (441781, 441700, '阳春市'); +INSERT INTO `ciy_arearpc` VALUES (441800, 440000, '清远市'); +INSERT INTO `ciy_arearpc` VALUES (441801, 441800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (441802, 441800, '清城区'); +INSERT INTO `ciy_arearpc` VALUES (441803, 441800, '清新区'); +INSERT INTO `ciy_arearpc` VALUES (441821, 441800, '佛冈县'); +INSERT INTO `ciy_arearpc` VALUES (441823, 441800, '阳山县'); +INSERT INTO `ciy_arearpc` VALUES (441825, 441800, '连山壮族瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (441826, 441800, '连南瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (441881, 441800, '英德市'); +INSERT INTO `ciy_arearpc` VALUES (441882, 441800, '连州市'); +INSERT INTO `ciy_arearpc` VALUES (441900, 440000, '东莞市'); +INSERT INTO `ciy_arearpc` VALUES (442000, 440000, '中山市'); +INSERT INTO `ciy_arearpc` VALUES (445100, 440000, '潮州市'); +INSERT INTO `ciy_arearpc` VALUES (445101, 445100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (445102, 445100, '湘桥区'); +INSERT INTO `ciy_arearpc` VALUES (445103, 445100, '潮安区'); +INSERT INTO `ciy_arearpc` VALUES (445122, 445100, '饶平县'); +INSERT INTO `ciy_arearpc` VALUES (445200, 440000, '揭阳市'); +INSERT INTO `ciy_arearpc` VALUES (445201, 445200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (445202, 445200, '榕城区'); +INSERT INTO `ciy_arearpc` VALUES (445203, 445200, '揭东区'); +INSERT INTO `ciy_arearpc` VALUES (445222, 445200, '揭西县'); +INSERT INTO `ciy_arearpc` VALUES (445224, 445200, '惠来县'); +INSERT INTO `ciy_arearpc` VALUES (445281, 445200, '普宁市'); +INSERT INTO `ciy_arearpc` VALUES (445300, 440000, '云浮市'); +INSERT INTO `ciy_arearpc` VALUES (445301, 445300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (445302, 445300, '云城区'); +INSERT INTO `ciy_arearpc` VALUES (445303, 445300, '云安区'); +INSERT INTO `ciy_arearpc` VALUES (445321, 445300, '新兴县'); +INSERT INTO `ciy_arearpc` VALUES (445322, 445300, '郁南县'); +INSERT INTO `ciy_arearpc` VALUES (445381, 445300, '罗定市'); +INSERT INTO `ciy_arearpc` VALUES (450000, 0, '广西壮族自治区'); +INSERT INTO `ciy_arearpc` VALUES (450100, 450000, '南宁市'); +INSERT INTO `ciy_arearpc` VALUES (450101, 450100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450102, 450100, '兴宁区'); +INSERT INTO `ciy_arearpc` VALUES (450103, 450100, '青秀区'); +INSERT INTO `ciy_arearpc` VALUES (450105, 450100, '江南区'); +INSERT INTO `ciy_arearpc` VALUES (450107, 450100, '西乡塘区'); +INSERT INTO `ciy_arearpc` VALUES (450108, 450100, '良庆区'); +INSERT INTO `ciy_arearpc` VALUES (450109, 450100, '邕宁区'); +INSERT INTO `ciy_arearpc` VALUES (450110, 450100, '武鸣区'); +INSERT INTO `ciy_arearpc` VALUES (450123, 450100, '隆安县'); +INSERT INTO `ciy_arearpc` VALUES (450124, 450100, '马山县'); +INSERT INTO `ciy_arearpc` VALUES (450125, 450100, '上林县'); +INSERT INTO `ciy_arearpc` VALUES (450126, 450100, '宾阳县'); +INSERT INTO `ciy_arearpc` VALUES (450181, 450100, '横州市'); +INSERT INTO `ciy_arearpc` VALUES (450200, 450000, '柳州市'); +INSERT INTO `ciy_arearpc` VALUES (450201, 450200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450202, 450200, '城中区'); +INSERT INTO `ciy_arearpc` VALUES (450203, 450200, '鱼峰区'); +INSERT INTO `ciy_arearpc` VALUES (450204, 450200, '柳南区'); +INSERT INTO `ciy_arearpc` VALUES (450205, 450200, '柳北区'); +INSERT INTO `ciy_arearpc` VALUES (450206, 450200, '柳江区'); +INSERT INTO `ciy_arearpc` VALUES (450222, 450200, '柳城县'); +INSERT INTO `ciy_arearpc` VALUES (450223, 450200, '鹿寨县'); +INSERT INTO `ciy_arearpc` VALUES (450224, 450200, '融安县'); +INSERT INTO `ciy_arearpc` VALUES (450225, 450200, '融水苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (450226, 450200, '三江侗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (450300, 450000, '桂林市'); +INSERT INTO `ciy_arearpc` VALUES (450301, 450300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450302, 450300, '秀峰区'); +INSERT INTO `ciy_arearpc` VALUES (450303, 450300, '叠彩区'); +INSERT INTO `ciy_arearpc` VALUES (450304, 450300, '象山区'); +INSERT INTO `ciy_arearpc` VALUES (450305, 450300, '七星区'); +INSERT INTO `ciy_arearpc` VALUES (450311, 450300, '雁山区'); +INSERT INTO `ciy_arearpc` VALUES (450312, 450300, '临桂区'); +INSERT INTO `ciy_arearpc` VALUES (450321, 450300, '阳朔县'); +INSERT INTO `ciy_arearpc` VALUES (450323, 450300, '灵川县'); +INSERT INTO `ciy_arearpc` VALUES (450324, 450300, '全州县'); +INSERT INTO `ciy_arearpc` VALUES (450325, 450300, '兴安县'); +INSERT INTO `ciy_arearpc` VALUES (450326, 450300, '永福县'); +INSERT INTO `ciy_arearpc` VALUES (450327, 450300, '灌阳县'); +INSERT INTO `ciy_arearpc` VALUES (450328, 450300, '龙胜各族自治县'); +INSERT INTO `ciy_arearpc` VALUES (450329, 450300, '资源县'); +INSERT INTO `ciy_arearpc` VALUES (450330, 450300, '平乐县'); +INSERT INTO `ciy_arearpc` VALUES (450332, 450300, '恭城瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (450381, 450300, '荔浦市'); +INSERT INTO `ciy_arearpc` VALUES (450400, 450000, '梧州市'); +INSERT INTO `ciy_arearpc` VALUES (450401, 450400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450403, 450400, '万秀区'); +INSERT INTO `ciy_arearpc` VALUES (450405, 450400, '长洲区'); +INSERT INTO `ciy_arearpc` VALUES (450406, 450400, '龙圩区'); +INSERT INTO `ciy_arearpc` VALUES (450421, 450400, '苍梧县'); +INSERT INTO `ciy_arearpc` VALUES (450422, 450400, '藤县'); +INSERT INTO `ciy_arearpc` VALUES (450423, 450400, '蒙山县'); +INSERT INTO `ciy_arearpc` VALUES (450481, 450400, '岑溪市'); +INSERT INTO `ciy_arearpc` VALUES (450500, 450000, '北海市'); +INSERT INTO `ciy_arearpc` VALUES (450501, 450500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450502, 450500, '海城区'); +INSERT INTO `ciy_arearpc` VALUES (450503, 450500, '银海区'); +INSERT INTO `ciy_arearpc` VALUES (450512, 450500, '铁山港区'); +INSERT INTO `ciy_arearpc` VALUES (450521, 450500, '合浦县'); +INSERT INTO `ciy_arearpc` VALUES (450600, 450000, '防城港市'); +INSERT INTO `ciy_arearpc` VALUES (450601, 450600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450602, 450600, '港口区'); +INSERT INTO `ciy_arearpc` VALUES (450603, 450600, '防城区'); +INSERT INTO `ciy_arearpc` VALUES (450621, 450600, '上思县'); +INSERT INTO `ciy_arearpc` VALUES (450681, 450600, '东兴市'); +INSERT INTO `ciy_arearpc` VALUES (450700, 450000, '钦州市'); +INSERT INTO `ciy_arearpc` VALUES (450701, 450700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450702, 450700, '钦南区'); +INSERT INTO `ciy_arearpc` VALUES (450703, 450700, '钦北区'); +INSERT INTO `ciy_arearpc` VALUES (450721, 450700, '灵山县'); +INSERT INTO `ciy_arearpc` VALUES (450722, 450700, '浦北县'); +INSERT INTO `ciy_arearpc` VALUES (450800, 450000, '贵港市'); +INSERT INTO `ciy_arearpc` VALUES (450801, 450800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450802, 450800, '港北区'); +INSERT INTO `ciy_arearpc` VALUES (450803, 450800, '港南区'); +INSERT INTO `ciy_arearpc` VALUES (450804, 450800, '覃塘区'); +INSERT INTO `ciy_arearpc` VALUES (450821, 450800, '平南县'); +INSERT INTO `ciy_arearpc` VALUES (450881, 450800, '桂平市'); +INSERT INTO `ciy_arearpc` VALUES (450900, 450000, '玉林市'); +INSERT INTO `ciy_arearpc` VALUES (450901, 450900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (450902, 450900, '玉州区'); +INSERT INTO `ciy_arearpc` VALUES (450903, 450900, '福绵区'); +INSERT INTO `ciy_arearpc` VALUES (450921, 450900, '容县'); +INSERT INTO `ciy_arearpc` VALUES (450922, 450900, '陆川县'); +INSERT INTO `ciy_arearpc` VALUES (450923, 450900, '博白县'); +INSERT INTO `ciy_arearpc` VALUES (450924, 450900, '兴业县'); +INSERT INTO `ciy_arearpc` VALUES (450981, 450900, '北流市'); +INSERT INTO `ciy_arearpc` VALUES (451000, 450000, '百色市'); +INSERT INTO `ciy_arearpc` VALUES (451001, 451000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (451002, 451000, '右江区'); +INSERT INTO `ciy_arearpc` VALUES (451003, 451000, '田阳区'); +INSERT INTO `ciy_arearpc` VALUES (451022, 451000, '田东县'); +INSERT INTO `ciy_arearpc` VALUES (451024, 451000, '德保县'); +INSERT INTO `ciy_arearpc` VALUES (451026, 451000, '那坡县'); +INSERT INTO `ciy_arearpc` VALUES (451027, 451000, '凌云县'); +INSERT INTO `ciy_arearpc` VALUES (451028, 451000, '乐业县'); +INSERT INTO `ciy_arearpc` VALUES (451029, 451000, '田林县'); +INSERT INTO `ciy_arearpc` VALUES (451030, 451000, '西林县'); +INSERT INTO `ciy_arearpc` VALUES (451031, 451000, '隆林各族自治县'); +INSERT INTO `ciy_arearpc` VALUES (451081, 451000, '靖西市'); +INSERT INTO `ciy_arearpc` VALUES (451082, 451000, '平果市'); +INSERT INTO `ciy_arearpc` VALUES (451100, 450000, '贺州市'); +INSERT INTO `ciy_arearpc` VALUES (451101, 451100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (451102, 451100, '八步区'); +INSERT INTO `ciy_arearpc` VALUES (451103, 451100, '平桂区'); +INSERT INTO `ciy_arearpc` VALUES (451121, 451100, '昭平县'); +INSERT INTO `ciy_arearpc` VALUES (451122, 451100, '钟山县'); +INSERT INTO `ciy_arearpc` VALUES (451123, 451100, '富川瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (451200, 450000, '河池市'); +INSERT INTO `ciy_arearpc` VALUES (451201, 451200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (451202, 451200, '金城江区'); +INSERT INTO `ciy_arearpc` VALUES (451203, 451200, '宜州区'); +INSERT INTO `ciy_arearpc` VALUES (451221, 451200, '南丹县'); +INSERT INTO `ciy_arearpc` VALUES (451222, 451200, '天峨县'); +INSERT INTO `ciy_arearpc` VALUES (451223, 451200, '凤山县'); +INSERT INTO `ciy_arearpc` VALUES (451224, 451200, '东兰县'); +INSERT INTO `ciy_arearpc` VALUES (451225, 451200, '罗城仫佬族自治县'); +INSERT INTO `ciy_arearpc` VALUES (451226, 451200, '环江毛南族自治县'); +INSERT INTO `ciy_arearpc` VALUES (451227, 451200, '巴马瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (451228, 451200, '都安瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (451229, 451200, '大化瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (451300, 450000, '来宾市'); +INSERT INTO `ciy_arearpc` VALUES (451301, 451300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (451302, 451300, '兴宾区'); +INSERT INTO `ciy_arearpc` VALUES (451321, 451300, '忻城县'); +INSERT INTO `ciy_arearpc` VALUES (451322, 451300, '象州县'); +INSERT INTO `ciy_arearpc` VALUES (451323, 451300, '武宣县'); +INSERT INTO `ciy_arearpc` VALUES (451324, 451300, '金秀瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (451381, 451300, '合山市'); +INSERT INTO `ciy_arearpc` VALUES (451400, 450000, '崇左市'); +INSERT INTO `ciy_arearpc` VALUES (451401, 451400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (451402, 451400, '江州区'); +INSERT INTO `ciy_arearpc` VALUES (451421, 451400, '扶绥县'); +INSERT INTO `ciy_arearpc` VALUES (451422, 451400, '宁明县'); +INSERT INTO `ciy_arearpc` VALUES (451423, 451400, '龙州县'); +INSERT INTO `ciy_arearpc` VALUES (451424, 451400, '大新县'); +INSERT INTO `ciy_arearpc` VALUES (451425, 451400, '天等县'); +INSERT INTO `ciy_arearpc` VALUES (451481, 451400, '凭祥市'); +INSERT INTO `ciy_arearpc` VALUES (460000, 0, '海南省'); +INSERT INTO `ciy_arearpc` VALUES (460100, 460000, '海口市'); +INSERT INTO `ciy_arearpc` VALUES (460101, 460100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (460105, 460100, '秀英区'); +INSERT INTO `ciy_arearpc` VALUES (460106, 460100, '龙华区'); +INSERT INTO `ciy_arearpc` VALUES (460107, 460100, '琼山区'); +INSERT INTO `ciy_arearpc` VALUES (460108, 460100, '美兰区'); +INSERT INTO `ciy_arearpc` VALUES (460200, 460000, '三亚市'); +INSERT INTO `ciy_arearpc` VALUES (460201, 460200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (460202, 460200, '海棠区'); +INSERT INTO `ciy_arearpc` VALUES (460203, 460200, '吉阳区'); +INSERT INTO `ciy_arearpc` VALUES (460204, 460200, '天涯区'); +INSERT INTO `ciy_arearpc` VALUES (460205, 460200, '崖州区'); +INSERT INTO `ciy_arearpc` VALUES (460300, 460000, '三沙市'); +INSERT INTO `ciy_arearpc` VALUES (460321, 460300, '西沙群岛'); +INSERT INTO `ciy_arearpc` VALUES (460322, 460300, '南沙群岛'); +INSERT INTO `ciy_arearpc` VALUES (460323, 460300, '中沙群岛的岛礁及其海域'); +INSERT INTO `ciy_arearpc` VALUES (460400, 460000, '儋州市'); +INSERT INTO `ciy_arearpc` VALUES (469000, 460000, '省直辖县级行政区划'); +INSERT INTO `ciy_arearpc` VALUES (469001, 469000, '五指山市'); +INSERT INTO `ciy_arearpc` VALUES (469002, 469000, '琼海市'); +INSERT INTO `ciy_arearpc` VALUES (469005, 469000, '文昌市'); +INSERT INTO `ciy_arearpc` VALUES (469006, 469000, '万宁市'); +INSERT INTO `ciy_arearpc` VALUES (469007, 469000, '东方市'); +INSERT INTO `ciy_arearpc` VALUES (469021, 469000, '定安县'); +INSERT INTO `ciy_arearpc` VALUES (469022, 469000, '屯昌县'); +INSERT INTO `ciy_arearpc` VALUES (469023, 469000, '澄迈县'); +INSERT INTO `ciy_arearpc` VALUES (469024, 469000, '临高县'); +INSERT INTO `ciy_arearpc` VALUES (469025, 469000, '白沙黎族自治县'); +INSERT INTO `ciy_arearpc` VALUES (469026, 469000, '昌江黎族自治县'); +INSERT INTO `ciy_arearpc` VALUES (469027, 469000, '乐东黎族自治县'); +INSERT INTO `ciy_arearpc` VALUES (469028, 469000, '陵水黎族自治县'); +INSERT INTO `ciy_arearpc` VALUES (469029, 469000, '保亭黎族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (469030, 469000, '琼中黎族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (500000, 0, '重庆市'); +INSERT INTO `ciy_arearpc` VALUES (500100, 500000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (500101, 500100, '万州区'); +INSERT INTO `ciy_arearpc` VALUES (500102, 500100, '涪陵区'); +INSERT INTO `ciy_arearpc` VALUES (500103, 500100, '渝中区'); +INSERT INTO `ciy_arearpc` VALUES (500104, 500100, '大渡口区'); +INSERT INTO `ciy_arearpc` VALUES (500105, 500100, '江北区'); +INSERT INTO `ciy_arearpc` VALUES (500106, 500100, '沙坪坝区'); +INSERT INTO `ciy_arearpc` VALUES (500107, 500100, '九龙坡区'); +INSERT INTO `ciy_arearpc` VALUES (500108, 500100, '南岸区'); +INSERT INTO `ciy_arearpc` VALUES (500109, 500100, '北碚区'); +INSERT INTO `ciy_arearpc` VALUES (500110, 500100, '綦江区'); +INSERT INTO `ciy_arearpc` VALUES (500111, 500100, '大足区'); +INSERT INTO `ciy_arearpc` VALUES (500112, 500100, '渝北区'); +INSERT INTO `ciy_arearpc` VALUES (500113, 500100, '巴南区'); +INSERT INTO `ciy_arearpc` VALUES (500114, 500100, '黔江区'); +INSERT INTO `ciy_arearpc` VALUES (500115, 500100, '长寿区'); +INSERT INTO `ciy_arearpc` VALUES (500116, 500100, '江津区'); +INSERT INTO `ciy_arearpc` VALUES (500117, 500100, '合川区'); +INSERT INTO `ciy_arearpc` VALUES (500118, 500100, '永川区'); +INSERT INTO `ciy_arearpc` VALUES (500119, 500100, '南川区'); +INSERT INTO `ciy_arearpc` VALUES (500120, 500100, '璧山区'); +INSERT INTO `ciy_arearpc` VALUES (500151, 500100, '铜梁区'); +INSERT INTO `ciy_arearpc` VALUES (500152, 500100, '潼南区'); +INSERT INTO `ciy_arearpc` VALUES (500153, 500100, '荣昌区'); +INSERT INTO `ciy_arearpc` VALUES (500154, 500100, '开州区'); +INSERT INTO `ciy_arearpc` VALUES (500155, 500100, '梁平区'); +INSERT INTO `ciy_arearpc` VALUES (500156, 500100, '武隆区'); +INSERT INTO `ciy_arearpc` VALUES (500200, 500000, '县'); +INSERT INTO `ciy_arearpc` VALUES (500229, 500200, '城口县'); +INSERT INTO `ciy_arearpc` VALUES (500230, 500200, '丰都县'); +INSERT INTO `ciy_arearpc` VALUES (500231, 500200, '垫江县'); +INSERT INTO `ciy_arearpc` VALUES (500233, 500200, '忠县'); +INSERT INTO `ciy_arearpc` VALUES (500235, 500200, '云阳县'); +INSERT INTO `ciy_arearpc` VALUES (500236, 500200, '奉节县'); +INSERT INTO `ciy_arearpc` VALUES (500237, 500200, '巫山县'); +INSERT INTO `ciy_arearpc` VALUES (500238, 500200, '巫溪县'); +INSERT INTO `ciy_arearpc` VALUES (500240, 500200, '石柱土家族自治县'); +INSERT INTO `ciy_arearpc` VALUES (500241, 500200, '秀山土家族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (500242, 500200, '酉阳土家族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (500243, 500200, '彭水苗族土家族自治县'); +INSERT INTO `ciy_arearpc` VALUES (510000, 0, '四川省'); +INSERT INTO `ciy_arearpc` VALUES (510100, 510000, '成都市'); +INSERT INTO `ciy_arearpc` VALUES (510101, 510100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (510104, 510100, '锦江区'); +INSERT INTO `ciy_arearpc` VALUES (510105, 510100, '青羊区'); +INSERT INTO `ciy_arearpc` VALUES (510106, 510100, '金牛区'); +INSERT INTO `ciy_arearpc` VALUES (510107, 510100, '武侯区'); +INSERT INTO `ciy_arearpc` VALUES (510108, 510100, '成华区'); +INSERT INTO `ciy_arearpc` VALUES (510112, 510100, '龙泉驿区'); +INSERT INTO `ciy_arearpc` VALUES (510113, 510100, '青白江区'); +INSERT INTO `ciy_arearpc` VALUES (510114, 510100, '新都区'); +INSERT INTO `ciy_arearpc` VALUES (510115, 510100, '温江区'); +INSERT INTO `ciy_arearpc` VALUES (510116, 510100, '双流区'); +INSERT INTO `ciy_arearpc` VALUES (510117, 510100, '郫都区'); +INSERT INTO `ciy_arearpc` VALUES (510118, 510100, '新津区'); +INSERT INTO `ciy_arearpc` VALUES (510121, 510100, '金堂县'); +INSERT INTO `ciy_arearpc` VALUES (510129, 510100, '大邑县'); +INSERT INTO `ciy_arearpc` VALUES (510131, 510100, '蒲江县'); +INSERT INTO `ciy_arearpc` VALUES (510181, 510100, '都江堰市'); +INSERT INTO `ciy_arearpc` VALUES (510182, 510100, '彭州市'); +INSERT INTO `ciy_arearpc` VALUES (510183, 510100, '邛崃市'); +INSERT INTO `ciy_arearpc` VALUES (510184, 510100, '崇州市'); +INSERT INTO `ciy_arearpc` VALUES (510185, 510100, '简阳市'); +INSERT INTO `ciy_arearpc` VALUES (510300, 510000, '自贡市'); +INSERT INTO `ciy_arearpc` VALUES (510301, 510300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (510302, 510300, '自流井区'); +INSERT INTO `ciy_arearpc` VALUES (510303, 510300, '贡井区'); +INSERT INTO `ciy_arearpc` VALUES (510304, 510300, '大安区'); +INSERT INTO `ciy_arearpc` VALUES (510311, 510300, '沿滩区'); +INSERT INTO `ciy_arearpc` VALUES (510321, 510300, '荣县'); +INSERT INTO `ciy_arearpc` VALUES (510322, 510300, '富顺县'); +INSERT INTO `ciy_arearpc` VALUES (510400, 510000, '攀枝花市'); +INSERT INTO `ciy_arearpc` VALUES (510401, 510400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (510402, 510400, '东区'); +INSERT INTO `ciy_arearpc` VALUES (510403, 510400, '西区'); +INSERT INTO `ciy_arearpc` VALUES (510411, 510400, '仁和区'); +INSERT INTO `ciy_arearpc` VALUES (510421, 510400, '米易县'); +INSERT INTO `ciy_arearpc` VALUES (510422, 510400, '盐边县'); +INSERT INTO `ciy_arearpc` VALUES (510500, 510000, '泸州市'); +INSERT INTO `ciy_arearpc` VALUES (510501, 510500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (510502, 510500, '江阳区'); +INSERT INTO `ciy_arearpc` VALUES (510503, 510500, '纳溪区'); +INSERT INTO `ciy_arearpc` VALUES (510504, 510500, '龙马潭区'); +INSERT INTO `ciy_arearpc` VALUES (510521, 510500, '泸县'); +INSERT INTO `ciy_arearpc` VALUES (510522, 510500, '合江县'); +INSERT INTO `ciy_arearpc` VALUES (510524, 510500, '叙永县'); +INSERT INTO `ciy_arearpc` VALUES (510525, 510500, '古蔺县'); +INSERT INTO `ciy_arearpc` VALUES (510600, 510000, '德阳市'); +INSERT INTO `ciy_arearpc` VALUES (510601, 510600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (510603, 510600, '旌阳区'); +INSERT INTO `ciy_arearpc` VALUES (510604, 510600, '罗江区'); +INSERT INTO `ciy_arearpc` VALUES (510623, 510600, '中江县'); +INSERT INTO `ciy_arearpc` VALUES (510681, 510600, '广汉市'); +INSERT INTO `ciy_arearpc` VALUES (510682, 510600, '什邡市'); +INSERT INTO `ciy_arearpc` VALUES (510683, 510600, '绵竹市'); +INSERT INTO `ciy_arearpc` VALUES (510700, 510000, '绵阳市'); +INSERT INTO `ciy_arearpc` VALUES (510701, 510700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (510703, 510700, '涪城区'); +INSERT INTO `ciy_arearpc` VALUES (510704, 510700, '游仙区'); +INSERT INTO `ciy_arearpc` VALUES (510705, 510700, '安州区'); +INSERT INTO `ciy_arearpc` VALUES (510722, 510700, '三台县'); +INSERT INTO `ciy_arearpc` VALUES (510723, 510700, '盐亭县'); +INSERT INTO `ciy_arearpc` VALUES (510725, 510700, '梓潼县'); +INSERT INTO `ciy_arearpc` VALUES (510726, 510700, '北川羌族自治县'); +INSERT INTO `ciy_arearpc` VALUES (510727, 510700, '平武县'); +INSERT INTO `ciy_arearpc` VALUES (510781, 510700, '江油市'); +INSERT INTO `ciy_arearpc` VALUES (510800, 510000, '广元市'); +INSERT INTO `ciy_arearpc` VALUES (510801, 510800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (510802, 510800, '利州区'); +INSERT INTO `ciy_arearpc` VALUES (510811, 510800, '昭化区'); +INSERT INTO `ciy_arearpc` VALUES (510812, 510800, '朝天区'); +INSERT INTO `ciy_arearpc` VALUES (510821, 510800, '旺苍县'); +INSERT INTO `ciy_arearpc` VALUES (510822, 510800, '青川县'); +INSERT INTO `ciy_arearpc` VALUES (510823, 510800, '剑阁县'); +INSERT INTO `ciy_arearpc` VALUES (510824, 510800, '苍溪县'); +INSERT INTO `ciy_arearpc` VALUES (510900, 510000, '遂宁市'); +INSERT INTO `ciy_arearpc` VALUES (510901, 510900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (510903, 510900, '船山区'); +INSERT INTO `ciy_arearpc` VALUES (510904, 510900, '安居区'); +INSERT INTO `ciy_arearpc` VALUES (510921, 510900, '蓬溪县'); +INSERT INTO `ciy_arearpc` VALUES (510923, 510900, '大英县'); +INSERT INTO `ciy_arearpc` VALUES (510981, 510900, '射洪市'); +INSERT INTO `ciy_arearpc` VALUES (511000, 510000, '内江市'); +INSERT INTO `ciy_arearpc` VALUES (511001, 511000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511002, 511000, '市中区'); +INSERT INTO `ciy_arearpc` VALUES (511011, 511000, '东兴区'); +INSERT INTO `ciy_arearpc` VALUES (511024, 511000, '威远县'); +INSERT INTO `ciy_arearpc` VALUES (511025, 511000, '资中县'); +INSERT INTO `ciy_arearpc` VALUES (511071, 511000, '内江经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (511083, 511000, '隆昌市'); +INSERT INTO `ciy_arearpc` VALUES (511100, 510000, '乐山市'); +INSERT INTO `ciy_arearpc` VALUES (511101, 511100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511102, 511100, '市中区'); +INSERT INTO `ciy_arearpc` VALUES (511111, 511100, '沙湾区'); +INSERT INTO `ciy_arearpc` VALUES (511112, 511100, '五通桥区'); +INSERT INTO `ciy_arearpc` VALUES (511113, 511100, '金口河区'); +INSERT INTO `ciy_arearpc` VALUES (511123, 511100, '犍为县'); +INSERT INTO `ciy_arearpc` VALUES (511124, 511100, '井研县'); +INSERT INTO `ciy_arearpc` VALUES (511126, 511100, '夹江县'); +INSERT INTO `ciy_arearpc` VALUES (511129, 511100, '沐川县'); +INSERT INTO `ciy_arearpc` VALUES (511132, 511100, '峨边彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (511133, 511100, '马边彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (511181, 511100, '峨眉山市'); +INSERT INTO `ciy_arearpc` VALUES (511300, 510000, '南充市'); +INSERT INTO `ciy_arearpc` VALUES (511301, 511300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511302, 511300, '顺庆区'); +INSERT INTO `ciy_arearpc` VALUES (511303, 511300, '高坪区'); +INSERT INTO `ciy_arearpc` VALUES (511304, 511300, '嘉陵区'); +INSERT INTO `ciy_arearpc` VALUES (511321, 511300, '南部县'); +INSERT INTO `ciy_arearpc` VALUES (511322, 511300, '营山县'); +INSERT INTO `ciy_arearpc` VALUES (511323, 511300, '蓬安县'); +INSERT INTO `ciy_arearpc` VALUES (511324, 511300, '仪陇县'); +INSERT INTO `ciy_arearpc` VALUES (511325, 511300, '西充县'); +INSERT INTO `ciy_arearpc` VALUES (511381, 511300, '阆中市'); +INSERT INTO `ciy_arearpc` VALUES (511400, 510000, '眉山市'); +INSERT INTO `ciy_arearpc` VALUES (511401, 511400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511402, 511400, '东坡区'); +INSERT INTO `ciy_arearpc` VALUES (511403, 511400, '彭山区'); +INSERT INTO `ciy_arearpc` VALUES (511421, 511400, '仁寿县'); +INSERT INTO `ciy_arearpc` VALUES (511423, 511400, '洪雅县'); +INSERT INTO `ciy_arearpc` VALUES (511424, 511400, '丹棱县'); +INSERT INTO `ciy_arearpc` VALUES (511425, 511400, '青神县'); +INSERT INTO `ciy_arearpc` VALUES (511500, 510000, '宜宾市'); +INSERT INTO `ciy_arearpc` VALUES (511501, 511500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511502, 511500, '翠屏区'); +INSERT INTO `ciy_arearpc` VALUES (511503, 511500, '南溪区'); +INSERT INTO `ciy_arearpc` VALUES (511504, 511500, '叙州区'); +INSERT INTO `ciy_arearpc` VALUES (511523, 511500, '江安县'); +INSERT INTO `ciy_arearpc` VALUES (511524, 511500, '长宁县'); +INSERT INTO `ciy_arearpc` VALUES (511525, 511500, '高县'); +INSERT INTO `ciy_arearpc` VALUES (511526, 511500, '珙县'); +INSERT INTO `ciy_arearpc` VALUES (511527, 511500, '筠连县'); +INSERT INTO `ciy_arearpc` VALUES (511528, 511500, '兴文县'); +INSERT INTO `ciy_arearpc` VALUES (511529, 511500, '屏山县'); +INSERT INTO `ciy_arearpc` VALUES (511600, 510000, '广安市'); +INSERT INTO `ciy_arearpc` VALUES (511601, 511600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511602, 511600, '广安区'); +INSERT INTO `ciy_arearpc` VALUES (511603, 511600, '前锋区'); +INSERT INTO `ciy_arearpc` VALUES (511621, 511600, '岳池县'); +INSERT INTO `ciy_arearpc` VALUES (511622, 511600, '武胜县'); +INSERT INTO `ciy_arearpc` VALUES (511623, 511600, '邻水县'); +INSERT INTO `ciy_arearpc` VALUES (511681, 511600, '华蓥市'); +INSERT INTO `ciy_arearpc` VALUES (511700, 510000, '达州市'); +INSERT INTO `ciy_arearpc` VALUES (511701, 511700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511702, 511700, '通川区'); +INSERT INTO `ciy_arearpc` VALUES (511703, 511700, '达川区'); +INSERT INTO `ciy_arearpc` VALUES (511722, 511700, '宣汉县'); +INSERT INTO `ciy_arearpc` VALUES (511723, 511700, '开江县'); +INSERT INTO `ciy_arearpc` VALUES (511724, 511700, '大竹县'); +INSERT INTO `ciy_arearpc` VALUES (511725, 511700, '渠县'); +INSERT INTO `ciy_arearpc` VALUES (511771, 511700, '达州经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (511781, 511700, '万源市'); +INSERT INTO `ciy_arearpc` VALUES (511800, 510000, '雅安市'); +INSERT INTO `ciy_arearpc` VALUES (511801, 511800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511802, 511800, '雨城区'); +INSERT INTO `ciy_arearpc` VALUES (511803, 511800, '名山区'); +INSERT INTO `ciy_arearpc` VALUES (511822, 511800, '荥经县'); +INSERT INTO `ciy_arearpc` VALUES (511823, 511800, '汉源县'); +INSERT INTO `ciy_arearpc` VALUES (511824, 511800, '石棉县'); +INSERT INTO `ciy_arearpc` VALUES (511825, 511800, '天全县'); +INSERT INTO `ciy_arearpc` VALUES (511826, 511800, '芦山县'); +INSERT INTO `ciy_arearpc` VALUES (511827, 511800, '宝兴县'); +INSERT INTO `ciy_arearpc` VALUES (511900, 510000, '巴中市'); +INSERT INTO `ciy_arearpc` VALUES (511901, 511900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (511902, 511900, '巴州区'); +INSERT INTO `ciy_arearpc` VALUES (511903, 511900, '恩阳区'); +INSERT INTO `ciy_arearpc` VALUES (511921, 511900, '通江县'); +INSERT INTO `ciy_arearpc` VALUES (511922, 511900, '南江县'); +INSERT INTO `ciy_arearpc` VALUES (511923, 511900, '平昌县'); +INSERT INTO `ciy_arearpc` VALUES (511971, 511900, '巴中经济开发区'); +INSERT INTO `ciy_arearpc` VALUES (512000, 510000, '资阳市'); +INSERT INTO `ciy_arearpc` VALUES (512001, 512000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (512002, 512000, '雁江区'); +INSERT INTO `ciy_arearpc` VALUES (512021, 512000, '安岳县'); +INSERT INTO `ciy_arearpc` VALUES (512022, 512000, '乐至县'); +INSERT INTO `ciy_arearpc` VALUES (513200, 510000, '阿坝藏族羌族自治州'); +INSERT INTO `ciy_arearpc` VALUES (513201, 513200, '马尔康市'); +INSERT INTO `ciy_arearpc` VALUES (513221, 513200, '汶川县'); +INSERT INTO `ciy_arearpc` VALUES (513222, 513200, '理县'); +INSERT INTO `ciy_arearpc` VALUES (513223, 513200, '茂县'); +INSERT INTO `ciy_arearpc` VALUES (513224, 513200, '松潘县'); +INSERT INTO `ciy_arearpc` VALUES (513225, 513200, '九寨沟县'); +INSERT INTO `ciy_arearpc` VALUES (513226, 513200, '金川县'); +INSERT INTO `ciy_arearpc` VALUES (513227, 513200, '小金县'); +INSERT INTO `ciy_arearpc` VALUES (513228, 513200, '黑水县'); +INSERT INTO `ciy_arearpc` VALUES (513230, 513200, '壤塘县'); +INSERT INTO `ciy_arearpc` VALUES (513231, 513200, '阿坝县'); +INSERT INTO `ciy_arearpc` VALUES (513232, 513200, '若尔盖县'); +INSERT INTO `ciy_arearpc` VALUES (513233, 513200, '红原县'); +INSERT INTO `ciy_arearpc` VALUES (513300, 510000, '甘孜藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (513301, 513300, '康定市'); +INSERT INTO `ciy_arearpc` VALUES (513322, 513300, '泸定县'); +INSERT INTO `ciy_arearpc` VALUES (513323, 513300, '丹巴县'); +INSERT INTO `ciy_arearpc` VALUES (513324, 513300, '九龙县'); +INSERT INTO `ciy_arearpc` VALUES (513325, 513300, '雅江县'); +INSERT INTO `ciy_arearpc` VALUES (513326, 513300, '道孚县'); +INSERT INTO `ciy_arearpc` VALUES (513327, 513300, '炉霍县'); +INSERT INTO `ciy_arearpc` VALUES (513328, 513300, '甘孜县'); +INSERT INTO `ciy_arearpc` VALUES (513329, 513300, '新龙县'); +INSERT INTO `ciy_arearpc` VALUES (513330, 513300, '德格县'); +INSERT INTO `ciy_arearpc` VALUES (513331, 513300, '白玉县'); +INSERT INTO `ciy_arearpc` VALUES (513332, 513300, '石渠县'); +INSERT INTO `ciy_arearpc` VALUES (513333, 513300, '色达县'); +INSERT INTO `ciy_arearpc` VALUES (513334, 513300, '理塘县'); +INSERT INTO `ciy_arearpc` VALUES (513335, 513300, '巴塘县'); +INSERT INTO `ciy_arearpc` VALUES (513336, 513300, '乡城县'); +INSERT INTO `ciy_arearpc` VALUES (513337, 513300, '稻城县'); +INSERT INTO `ciy_arearpc` VALUES (513338, 513300, '得荣县'); +INSERT INTO `ciy_arearpc` VALUES (513400, 510000, '凉山彝族自治州'); +INSERT INTO `ciy_arearpc` VALUES (513401, 513400, '西昌市'); +INSERT INTO `ciy_arearpc` VALUES (513402, 513400, '会理市'); +INSERT INTO `ciy_arearpc` VALUES (513422, 513400, '木里藏族自治县'); +INSERT INTO `ciy_arearpc` VALUES (513423, 513400, '盐源县'); +INSERT INTO `ciy_arearpc` VALUES (513424, 513400, '德昌县'); +INSERT INTO `ciy_arearpc` VALUES (513426, 513400, '会东县'); +INSERT INTO `ciy_arearpc` VALUES (513427, 513400, '宁南县'); +INSERT INTO `ciy_arearpc` VALUES (513428, 513400, '普格县'); +INSERT INTO `ciy_arearpc` VALUES (513429, 513400, '布拖县'); +INSERT INTO `ciy_arearpc` VALUES (513430, 513400, '金阳县'); +INSERT INTO `ciy_arearpc` VALUES (513431, 513400, '昭觉县'); +INSERT INTO `ciy_arearpc` VALUES (513432, 513400, '喜德县'); +INSERT INTO `ciy_arearpc` VALUES (513433, 513400, '冕宁县'); +INSERT INTO `ciy_arearpc` VALUES (513434, 513400, '越西县'); +INSERT INTO `ciy_arearpc` VALUES (513435, 513400, '甘洛县'); +INSERT INTO `ciy_arearpc` VALUES (513436, 513400, '美姑县'); +INSERT INTO `ciy_arearpc` VALUES (513437, 513400, '雷波县'); +INSERT INTO `ciy_arearpc` VALUES (520000, 0, '贵州省'); +INSERT INTO `ciy_arearpc` VALUES (520100, 520000, '贵阳市'); +INSERT INTO `ciy_arearpc` VALUES (520101, 520100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (520102, 520100, '南明区'); +INSERT INTO `ciy_arearpc` VALUES (520103, 520100, '云岩区'); +INSERT INTO `ciy_arearpc` VALUES (520111, 520100, '花溪区'); +INSERT INTO `ciy_arearpc` VALUES (520112, 520100, '乌当区'); +INSERT INTO `ciy_arearpc` VALUES (520113, 520100, '白云区'); +INSERT INTO `ciy_arearpc` VALUES (520115, 520100, '观山湖区'); +INSERT INTO `ciy_arearpc` VALUES (520121, 520100, '开阳县'); +INSERT INTO `ciy_arearpc` VALUES (520122, 520100, '息烽县'); +INSERT INTO `ciy_arearpc` VALUES (520123, 520100, '修文县'); +INSERT INTO `ciy_arearpc` VALUES (520181, 520100, '清镇市'); +INSERT INTO `ciy_arearpc` VALUES (520200, 520000, '六盘水市'); +INSERT INTO `ciy_arearpc` VALUES (520201, 520200, '钟山区'); +INSERT INTO `ciy_arearpc` VALUES (520203, 520200, '六枝特区'); +INSERT INTO `ciy_arearpc` VALUES (520204, 520200, '水城区'); +INSERT INTO `ciy_arearpc` VALUES (520281, 520200, '盘州市'); +INSERT INTO `ciy_arearpc` VALUES (520300, 520000, '遵义市'); +INSERT INTO `ciy_arearpc` VALUES (520301, 520300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (520302, 520300, '红花岗区'); +INSERT INTO `ciy_arearpc` VALUES (520303, 520300, '汇川区'); +INSERT INTO `ciy_arearpc` VALUES (520304, 520300, '播州区'); +INSERT INTO `ciy_arearpc` VALUES (520322, 520300, '桐梓县'); +INSERT INTO `ciy_arearpc` VALUES (520323, 520300, '绥阳县'); +INSERT INTO `ciy_arearpc` VALUES (520324, 520300, '正安县'); +INSERT INTO `ciy_arearpc` VALUES (520325, 520300, '道真仡佬族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520326, 520300, '务川仡佬族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520327, 520300, '凤冈县'); +INSERT INTO `ciy_arearpc` VALUES (520328, 520300, '湄潭县'); +INSERT INTO `ciy_arearpc` VALUES (520329, 520300, '余庆县'); +INSERT INTO `ciy_arearpc` VALUES (520330, 520300, '习水县'); +INSERT INTO `ciy_arearpc` VALUES (520381, 520300, '赤水市'); +INSERT INTO `ciy_arearpc` VALUES (520382, 520300, '仁怀市'); +INSERT INTO `ciy_arearpc` VALUES (520400, 520000, '安顺市'); +INSERT INTO `ciy_arearpc` VALUES (520401, 520400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (520402, 520400, '西秀区'); +INSERT INTO `ciy_arearpc` VALUES (520403, 520400, '平坝区'); +INSERT INTO `ciy_arearpc` VALUES (520422, 520400, '普定县'); +INSERT INTO `ciy_arearpc` VALUES (520423, 520400, '镇宁布依族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520424, 520400, '关岭布依族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520425, 520400, '紫云苗族布依族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520500, 520000, '毕节市'); +INSERT INTO `ciy_arearpc` VALUES (520501, 520500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (520502, 520500, '七星关区'); +INSERT INTO `ciy_arearpc` VALUES (520521, 520500, '大方县'); +INSERT INTO `ciy_arearpc` VALUES (520523, 520500, '金沙县'); +INSERT INTO `ciy_arearpc` VALUES (520524, 520500, '织金县'); +INSERT INTO `ciy_arearpc` VALUES (520525, 520500, '纳雍县'); +INSERT INTO `ciy_arearpc` VALUES (520526, 520500, '威宁彝族回族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520527, 520500, '赫章县'); +INSERT INTO `ciy_arearpc` VALUES (520581, 520500, '黔西市'); +INSERT INTO `ciy_arearpc` VALUES (520600, 520000, '铜仁市'); +INSERT INTO `ciy_arearpc` VALUES (520601, 520600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (520602, 520600, '碧江区'); +INSERT INTO `ciy_arearpc` VALUES (520603, 520600, '万山区'); +INSERT INTO `ciy_arearpc` VALUES (520621, 520600, '江口县'); +INSERT INTO `ciy_arearpc` VALUES (520622, 520600, '玉屏侗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520623, 520600, '石阡县'); +INSERT INTO `ciy_arearpc` VALUES (520624, 520600, '思南县'); +INSERT INTO `ciy_arearpc` VALUES (520625, 520600, '印江土家族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520626, 520600, '德江县'); +INSERT INTO `ciy_arearpc` VALUES (520627, 520600, '沿河土家族自治县'); +INSERT INTO `ciy_arearpc` VALUES (520628, 520600, '松桃苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (522300, 520000, '黔西南布依族苗族自治州'); +INSERT INTO `ciy_arearpc` VALUES (522301, 522300, '兴义市'); +INSERT INTO `ciy_arearpc` VALUES (522302, 522300, '兴仁市'); +INSERT INTO `ciy_arearpc` VALUES (522323, 522300, '普安县'); +INSERT INTO `ciy_arearpc` VALUES (522324, 522300, '晴隆县'); +INSERT INTO `ciy_arearpc` VALUES (522325, 522300, '贞丰县'); +INSERT INTO `ciy_arearpc` VALUES (522326, 522300, '望谟县'); +INSERT INTO `ciy_arearpc` VALUES (522327, 522300, '册亨县'); +INSERT INTO `ciy_arearpc` VALUES (522328, 522300, '安龙县'); +INSERT INTO `ciy_arearpc` VALUES (522600, 520000, '黔东南苗族侗族自治州'); +INSERT INTO `ciy_arearpc` VALUES (522601, 522600, '凯里市'); +INSERT INTO `ciy_arearpc` VALUES (522622, 522600, '黄平县'); +INSERT INTO `ciy_arearpc` VALUES (522623, 522600, '施秉县'); +INSERT INTO `ciy_arearpc` VALUES (522624, 522600, '三穗县'); +INSERT INTO `ciy_arearpc` VALUES (522625, 522600, '镇远县'); +INSERT INTO `ciy_arearpc` VALUES (522626, 522600, '岑巩县'); +INSERT INTO `ciy_arearpc` VALUES (522627, 522600, '天柱县'); +INSERT INTO `ciy_arearpc` VALUES (522628, 522600, '锦屏县'); +INSERT INTO `ciy_arearpc` VALUES (522629, 522600, '剑河县'); +INSERT INTO `ciy_arearpc` VALUES (522630, 522600, '台江县'); +INSERT INTO `ciy_arearpc` VALUES (522631, 522600, '黎平县'); +INSERT INTO `ciy_arearpc` VALUES (522632, 522600, '榕江县'); +INSERT INTO `ciy_arearpc` VALUES (522633, 522600, '从江县'); +INSERT INTO `ciy_arearpc` VALUES (522634, 522600, '雷山县'); +INSERT INTO `ciy_arearpc` VALUES (522635, 522600, '麻江县'); +INSERT INTO `ciy_arearpc` VALUES (522636, 522600, '丹寨县'); +INSERT INTO `ciy_arearpc` VALUES (522700, 520000, '黔南布依族苗族自治州'); +INSERT INTO `ciy_arearpc` VALUES (522701, 522700, '都匀市'); +INSERT INTO `ciy_arearpc` VALUES (522702, 522700, '福泉市'); +INSERT INTO `ciy_arearpc` VALUES (522722, 522700, '荔波县'); +INSERT INTO `ciy_arearpc` VALUES (522723, 522700, '贵定县'); +INSERT INTO `ciy_arearpc` VALUES (522725, 522700, '瓮安县'); +INSERT INTO `ciy_arearpc` VALUES (522726, 522700, '独山县'); +INSERT INTO `ciy_arearpc` VALUES (522727, 522700, '平塘县'); +INSERT INTO `ciy_arearpc` VALUES (522728, 522700, '罗甸县'); +INSERT INTO `ciy_arearpc` VALUES (522729, 522700, '长顺县'); +INSERT INTO `ciy_arearpc` VALUES (522730, 522700, '龙里县'); +INSERT INTO `ciy_arearpc` VALUES (522731, 522700, '惠水县'); +INSERT INTO `ciy_arearpc` VALUES (522732, 522700, '三都水族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530000, 0, '云南省'); +INSERT INTO `ciy_arearpc` VALUES (530100, 530000, '昆明市'); +INSERT INTO `ciy_arearpc` VALUES (530101, 530100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (530102, 530100, '五华区'); +INSERT INTO `ciy_arearpc` VALUES (530103, 530100, '盘龙区'); +INSERT INTO `ciy_arearpc` VALUES (530111, 530100, '官渡区'); +INSERT INTO `ciy_arearpc` VALUES (530112, 530100, '西山区'); +INSERT INTO `ciy_arearpc` VALUES (530113, 530100, '东川区'); +INSERT INTO `ciy_arearpc` VALUES (530114, 530100, '呈贡区'); +INSERT INTO `ciy_arearpc` VALUES (530115, 530100, '晋宁区'); +INSERT INTO `ciy_arearpc` VALUES (530124, 530100, '富民县'); +INSERT INTO `ciy_arearpc` VALUES (530125, 530100, '宜良县'); +INSERT INTO `ciy_arearpc` VALUES (530126, 530100, '石林彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530127, 530100, '嵩明县'); +INSERT INTO `ciy_arearpc` VALUES (530128, 530100, '禄劝彝族苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530129, 530100, '寻甸回族彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530181, 530100, '安宁市'); +INSERT INTO `ciy_arearpc` VALUES (530300, 530000, '曲靖市'); +INSERT INTO `ciy_arearpc` VALUES (530301, 530300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (530302, 530300, '麒麟区'); +INSERT INTO `ciy_arearpc` VALUES (530303, 530300, '沾益区'); +INSERT INTO `ciy_arearpc` VALUES (530304, 530300, '马龙区'); +INSERT INTO `ciy_arearpc` VALUES (530322, 530300, '陆良县'); +INSERT INTO `ciy_arearpc` VALUES (530323, 530300, '师宗县'); +INSERT INTO `ciy_arearpc` VALUES (530324, 530300, '罗平县'); +INSERT INTO `ciy_arearpc` VALUES (530325, 530300, '富源县'); +INSERT INTO `ciy_arearpc` VALUES (530326, 530300, '会泽县'); +INSERT INTO `ciy_arearpc` VALUES (530381, 530300, '宣威市'); +INSERT INTO `ciy_arearpc` VALUES (530400, 530000, '玉溪市'); +INSERT INTO `ciy_arearpc` VALUES (530401, 530400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (530402, 530400, '红塔区'); +INSERT INTO `ciy_arearpc` VALUES (530403, 530400, '江川区'); +INSERT INTO `ciy_arearpc` VALUES (530423, 530400, '通海县'); +INSERT INTO `ciy_arearpc` VALUES (530424, 530400, '华宁县'); +INSERT INTO `ciy_arearpc` VALUES (530425, 530400, '易门县'); +INSERT INTO `ciy_arearpc` VALUES (530426, 530400, '峨山彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530427, 530400, '新平彝族傣族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530428, 530400, '元江哈尼族彝族傣族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530481, 530400, '澄江市'); +INSERT INTO `ciy_arearpc` VALUES (530500, 530000, '保山市'); +INSERT INTO `ciy_arearpc` VALUES (530501, 530500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (530502, 530500, '隆阳区'); +INSERT INTO `ciy_arearpc` VALUES (530521, 530500, '施甸县'); +INSERT INTO `ciy_arearpc` VALUES (530523, 530500, '龙陵县'); +INSERT INTO `ciy_arearpc` VALUES (530524, 530500, '昌宁县'); +INSERT INTO `ciy_arearpc` VALUES (530581, 530500, '腾冲市'); +INSERT INTO `ciy_arearpc` VALUES (530600, 530000, '昭通市'); +INSERT INTO `ciy_arearpc` VALUES (530601, 530600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (530602, 530600, '昭阳区'); +INSERT INTO `ciy_arearpc` VALUES (530621, 530600, '鲁甸县'); +INSERT INTO `ciy_arearpc` VALUES (530622, 530600, '巧家县'); +INSERT INTO `ciy_arearpc` VALUES (530623, 530600, '盐津县'); +INSERT INTO `ciy_arearpc` VALUES (530624, 530600, '大关县'); +INSERT INTO `ciy_arearpc` VALUES (530625, 530600, '永善县'); +INSERT INTO `ciy_arearpc` VALUES (530626, 530600, '绥江县'); +INSERT INTO `ciy_arearpc` VALUES (530627, 530600, '镇雄县'); +INSERT INTO `ciy_arearpc` VALUES (530628, 530600, '彝良县'); +INSERT INTO `ciy_arearpc` VALUES (530629, 530600, '威信县'); +INSERT INTO `ciy_arearpc` VALUES (530681, 530600, '水富市'); +INSERT INTO `ciy_arearpc` VALUES (530700, 530000, '丽江市'); +INSERT INTO `ciy_arearpc` VALUES (530701, 530700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (530702, 530700, '古城区'); +INSERT INTO `ciy_arearpc` VALUES (530721, 530700, '玉龙纳西族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530722, 530700, '永胜县'); +INSERT INTO `ciy_arearpc` VALUES (530723, 530700, '华坪县'); +INSERT INTO `ciy_arearpc` VALUES (530724, 530700, '宁蒗彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530800, 530000, '普洱市'); +INSERT INTO `ciy_arearpc` VALUES (530801, 530800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (530802, 530800, '思茅区'); +INSERT INTO `ciy_arearpc` VALUES (530821, 530800, '宁洱哈尼族彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530822, 530800, '墨江哈尼族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530823, 530800, '景东彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530824, 530800, '景谷傣族彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530825, 530800, '镇沅彝族哈尼族拉祜族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530826, 530800, '江城哈尼族彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530827, 530800, '孟连傣族拉祜族佤族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530828, 530800, '澜沧拉祜族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530829, 530800, '西盟佤族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530900, 530000, '临沧市'); +INSERT INTO `ciy_arearpc` VALUES (530901, 530900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (530902, 530900, '临翔区'); +INSERT INTO `ciy_arearpc` VALUES (530921, 530900, '凤庆县'); +INSERT INTO `ciy_arearpc` VALUES (530922, 530900, '云县'); +INSERT INTO `ciy_arearpc` VALUES (530923, 530900, '永德县'); +INSERT INTO `ciy_arearpc` VALUES (530924, 530900, '镇康县'); +INSERT INTO `ciy_arearpc` VALUES (530925, 530900, '双江拉祜族佤族布朗族傣族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530926, 530900, '耿马傣族佤族自治县'); +INSERT INTO `ciy_arearpc` VALUES (530927, 530900, '沧源佤族自治县'); +INSERT INTO `ciy_arearpc` VALUES (532300, 530000, '楚雄彝族自治州'); +INSERT INTO `ciy_arearpc` VALUES (532301, 532300, '楚雄市'); +INSERT INTO `ciy_arearpc` VALUES (532302, 532300, '禄丰市'); +INSERT INTO `ciy_arearpc` VALUES (532322, 532300, '双柏县'); +INSERT INTO `ciy_arearpc` VALUES (532323, 532300, '牟定县'); +INSERT INTO `ciy_arearpc` VALUES (532324, 532300, '南华县'); +INSERT INTO `ciy_arearpc` VALUES (532325, 532300, '姚安县'); +INSERT INTO `ciy_arearpc` VALUES (532326, 532300, '大姚县'); +INSERT INTO `ciy_arearpc` VALUES (532327, 532300, '永仁县'); +INSERT INTO `ciy_arearpc` VALUES (532328, 532300, '元谋县'); +INSERT INTO `ciy_arearpc` VALUES (532329, 532300, '武定县'); +INSERT INTO `ciy_arearpc` VALUES (532500, 530000, '红河哈尼族彝族自治州'); +INSERT INTO `ciy_arearpc` VALUES (532501, 532500, '个旧市'); +INSERT INTO `ciy_arearpc` VALUES (532502, 532500, '开远市'); +INSERT INTO `ciy_arearpc` VALUES (532503, 532500, '蒙自市'); +INSERT INTO `ciy_arearpc` VALUES (532504, 532500, '弥勒市'); +INSERT INTO `ciy_arearpc` VALUES (532523, 532500, '屏边苗族自治县'); +INSERT INTO `ciy_arearpc` VALUES (532524, 532500, '建水县'); +INSERT INTO `ciy_arearpc` VALUES (532525, 532500, '石屏县'); +INSERT INTO `ciy_arearpc` VALUES (532527, 532500, '泸西县'); +INSERT INTO `ciy_arearpc` VALUES (532528, 532500, '元阳县'); +INSERT INTO `ciy_arearpc` VALUES (532529, 532500, '红河县'); +INSERT INTO `ciy_arearpc` VALUES (532530, 532500, '金平苗族瑶族傣族自治县'); +INSERT INTO `ciy_arearpc` VALUES (532531, 532500, '绿春县'); +INSERT INTO `ciy_arearpc` VALUES (532532, 532500, '河口瑶族自治县'); +INSERT INTO `ciy_arearpc` VALUES (532600, 530000, '文山壮族苗族自治州'); +INSERT INTO `ciy_arearpc` VALUES (532601, 532600, '文山市'); +INSERT INTO `ciy_arearpc` VALUES (532622, 532600, '砚山县'); +INSERT INTO `ciy_arearpc` VALUES (532623, 532600, '西畴县'); +INSERT INTO `ciy_arearpc` VALUES (532624, 532600, '麻栗坡县'); +INSERT INTO `ciy_arearpc` VALUES (532625, 532600, '马关县'); +INSERT INTO `ciy_arearpc` VALUES (532626, 532600, '丘北县'); +INSERT INTO `ciy_arearpc` VALUES (532627, 532600, '广南县'); +INSERT INTO `ciy_arearpc` VALUES (532628, 532600, '富宁县'); +INSERT INTO `ciy_arearpc` VALUES (532800, 530000, '西双版纳傣族自治州'); +INSERT INTO `ciy_arearpc` VALUES (532801, 532800, '景洪市'); +INSERT INTO `ciy_arearpc` VALUES (532822, 532800, '勐海县'); +INSERT INTO `ciy_arearpc` VALUES (532823, 532800, '勐腊县'); +INSERT INTO `ciy_arearpc` VALUES (532900, 530000, '大理白族自治州'); +INSERT INTO `ciy_arearpc` VALUES (532901, 532900, '大理市'); +INSERT INTO `ciy_arearpc` VALUES (532922, 532900, '漾濞彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (532923, 532900, '祥云县'); +INSERT INTO `ciy_arearpc` VALUES (532924, 532900, '宾川县'); +INSERT INTO `ciy_arearpc` VALUES (532925, 532900, '弥渡县'); +INSERT INTO `ciy_arearpc` VALUES (532926, 532900, '南涧彝族自治县'); +INSERT INTO `ciy_arearpc` VALUES (532927, 532900, '巍山彝族回族自治县'); +INSERT INTO `ciy_arearpc` VALUES (532928, 532900, '永平县'); +INSERT INTO `ciy_arearpc` VALUES (532929, 532900, '云龙县'); +INSERT INTO `ciy_arearpc` VALUES (532930, 532900, '洱源县'); +INSERT INTO `ciy_arearpc` VALUES (532931, 532900, '剑川县'); +INSERT INTO `ciy_arearpc` VALUES (532932, 532900, '鹤庆县'); +INSERT INTO `ciy_arearpc` VALUES (533100, 530000, '德宏傣族景颇族自治州'); +INSERT INTO `ciy_arearpc` VALUES (533102, 533100, '瑞丽市'); +INSERT INTO `ciy_arearpc` VALUES (533103, 533100, '芒市'); +INSERT INTO `ciy_arearpc` VALUES (533122, 533100, '梁河县'); +INSERT INTO `ciy_arearpc` VALUES (533123, 533100, '盈江县'); +INSERT INTO `ciy_arearpc` VALUES (533124, 533100, '陇川县'); +INSERT INTO `ciy_arearpc` VALUES (533300, 530000, '怒江傈僳族自治州'); +INSERT INTO `ciy_arearpc` VALUES (533301, 533300, '泸水市'); +INSERT INTO `ciy_arearpc` VALUES (533323, 533300, '福贡县'); +INSERT INTO `ciy_arearpc` VALUES (533324, 533300, '贡山独龙族怒族自治县'); +INSERT INTO `ciy_arearpc` VALUES (533325, 533300, '兰坪白族普米族自治县'); +INSERT INTO `ciy_arearpc` VALUES (533400, 530000, '迪庆藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (533401, 533400, '香格里拉市'); +INSERT INTO `ciy_arearpc` VALUES (533422, 533400, '德钦县'); +INSERT INTO `ciy_arearpc` VALUES (533423, 533400, '维西傈僳族自治县'); +INSERT INTO `ciy_arearpc` VALUES (540000, 0, '西藏自治区'); +INSERT INTO `ciy_arearpc` VALUES (540100, 540000, '拉萨市'); +INSERT INTO `ciy_arearpc` VALUES (540101, 540100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (540102, 540100, '城关区'); +INSERT INTO `ciy_arearpc` VALUES (540103, 540100, '堆龙德庆区'); +INSERT INTO `ciy_arearpc` VALUES (540104, 540100, '达孜区'); +INSERT INTO `ciy_arearpc` VALUES (540121, 540100, '林周县'); +INSERT INTO `ciy_arearpc` VALUES (540122, 540100, '当雄县'); +INSERT INTO `ciy_arearpc` VALUES (540123, 540100, '尼木县'); +INSERT INTO `ciy_arearpc` VALUES (540124, 540100, '曲水县'); +INSERT INTO `ciy_arearpc` VALUES (540127, 540100, '墨竹工卡县'); +INSERT INTO `ciy_arearpc` VALUES (540171, 540100, '格尔木藏青工业园区'); +INSERT INTO `ciy_arearpc` VALUES (540172, 540100, '拉萨经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (540173, 540100, '西藏文化旅游创意园区'); +INSERT INTO `ciy_arearpc` VALUES (540174, 540100, '达孜工业园区'); +INSERT INTO `ciy_arearpc` VALUES (540200, 540000, '日喀则市'); +INSERT INTO `ciy_arearpc` VALUES (540202, 540200, '桑珠孜区'); +INSERT INTO `ciy_arearpc` VALUES (540221, 540200, '南木林县'); +INSERT INTO `ciy_arearpc` VALUES (540222, 540200, '江孜县'); +INSERT INTO `ciy_arearpc` VALUES (540223, 540200, '定日县'); +INSERT INTO `ciy_arearpc` VALUES (540224, 540200, '萨迦县'); +INSERT INTO `ciy_arearpc` VALUES (540225, 540200, '拉孜县'); +INSERT INTO `ciy_arearpc` VALUES (540226, 540200, '昂仁县'); +INSERT INTO `ciy_arearpc` VALUES (540227, 540200, '谢通门县'); +INSERT INTO `ciy_arearpc` VALUES (540228, 540200, '白朗县'); +INSERT INTO `ciy_arearpc` VALUES (540229, 540200, '仁布县'); +INSERT INTO `ciy_arearpc` VALUES (540230, 540200, '康马县'); +INSERT INTO `ciy_arearpc` VALUES (540231, 540200, '定结县'); +INSERT INTO `ciy_arearpc` VALUES (540232, 540200, '仲巴县'); +INSERT INTO `ciy_arearpc` VALUES (540233, 540200, '亚东县'); +INSERT INTO `ciy_arearpc` VALUES (540234, 540200, '吉隆县'); +INSERT INTO `ciy_arearpc` VALUES (540235, 540200, '聂拉木县'); +INSERT INTO `ciy_arearpc` VALUES (540236, 540200, '萨嘎县'); +INSERT INTO `ciy_arearpc` VALUES (540237, 540200, '岗巴县'); +INSERT INTO `ciy_arearpc` VALUES (540300, 540000, '昌都市'); +INSERT INTO `ciy_arearpc` VALUES (540302, 540300, '卡若区'); +INSERT INTO `ciy_arearpc` VALUES (540321, 540300, '江达县'); +INSERT INTO `ciy_arearpc` VALUES (540322, 540300, '贡觉县'); +INSERT INTO `ciy_arearpc` VALUES (540323, 540300, '类乌齐县'); +INSERT INTO `ciy_arearpc` VALUES (540324, 540300, '丁青县'); +INSERT INTO `ciy_arearpc` VALUES (540325, 540300, '察雅县'); +INSERT INTO `ciy_arearpc` VALUES (540326, 540300, '八宿县'); +INSERT INTO `ciy_arearpc` VALUES (540327, 540300, '左贡县'); +INSERT INTO `ciy_arearpc` VALUES (540328, 540300, '芒康县'); +INSERT INTO `ciy_arearpc` VALUES (540329, 540300, '洛隆县'); +INSERT INTO `ciy_arearpc` VALUES (540330, 540300, '边坝县'); +INSERT INTO `ciy_arearpc` VALUES (540400, 540000, '林芝市'); +INSERT INTO `ciy_arearpc` VALUES (540402, 540400, '巴宜区'); +INSERT INTO `ciy_arearpc` VALUES (540421, 540400, '工布江达县'); +INSERT INTO `ciy_arearpc` VALUES (540422, 540400, '米林县'); +INSERT INTO `ciy_arearpc` VALUES (540423, 540400, '墨脱县'); +INSERT INTO `ciy_arearpc` VALUES (540424, 540400, '波密县'); +INSERT INTO `ciy_arearpc` VALUES (540425, 540400, '察隅县'); +INSERT INTO `ciy_arearpc` VALUES (540426, 540400, '朗县'); +INSERT INTO `ciy_arearpc` VALUES (540500, 540000, '山南市'); +INSERT INTO `ciy_arearpc` VALUES (540501, 540500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (540502, 540500, '乃东区'); +INSERT INTO `ciy_arearpc` VALUES (540521, 540500, '扎囊县'); +INSERT INTO `ciy_arearpc` VALUES (540522, 540500, '贡嘎县'); +INSERT INTO `ciy_arearpc` VALUES (540523, 540500, '桑日县'); +INSERT INTO `ciy_arearpc` VALUES (540524, 540500, '琼结县'); +INSERT INTO `ciy_arearpc` VALUES (540525, 540500, '曲松县'); +INSERT INTO `ciy_arearpc` VALUES (540526, 540500, '措美县'); +INSERT INTO `ciy_arearpc` VALUES (540527, 540500, '洛扎县'); +INSERT INTO `ciy_arearpc` VALUES (540528, 540500, '加查县'); +INSERT INTO `ciy_arearpc` VALUES (540529, 540500, '隆子县'); +INSERT INTO `ciy_arearpc` VALUES (540530, 540500, '错那县'); +INSERT INTO `ciy_arearpc` VALUES (540531, 540500, '浪卡子县'); +INSERT INTO `ciy_arearpc` VALUES (540600, 540000, '那曲市'); +INSERT INTO `ciy_arearpc` VALUES (540602, 540600, '色尼区'); +INSERT INTO `ciy_arearpc` VALUES (540621, 540600, '嘉黎县'); +INSERT INTO `ciy_arearpc` VALUES (540622, 540600, '比如县'); +INSERT INTO `ciy_arearpc` VALUES (540623, 540600, '聂荣县'); +INSERT INTO `ciy_arearpc` VALUES (540624, 540600, '安多县'); +INSERT INTO `ciy_arearpc` VALUES (540625, 540600, '申扎县'); +INSERT INTO `ciy_arearpc` VALUES (540626, 540600, '索县'); +INSERT INTO `ciy_arearpc` VALUES (540627, 540600, '班戈县'); +INSERT INTO `ciy_arearpc` VALUES (540628, 540600, '巴青县'); +INSERT INTO `ciy_arearpc` VALUES (540629, 540600, '尼玛县'); +INSERT INTO `ciy_arearpc` VALUES (540630, 540600, '双湖县'); +INSERT INTO `ciy_arearpc` VALUES (542500, 540000, '阿里地区'); +INSERT INTO `ciy_arearpc` VALUES (542521, 542500, '普兰县'); +INSERT INTO `ciy_arearpc` VALUES (542522, 542500, '札达县'); +INSERT INTO `ciy_arearpc` VALUES (542523, 542500, '噶尔县'); +INSERT INTO `ciy_arearpc` VALUES (542524, 542500, '日土县'); +INSERT INTO `ciy_arearpc` VALUES (542525, 542500, '革吉县'); +INSERT INTO `ciy_arearpc` VALUES (542526, 542500, '改则县'); +INSERT INTO `ciy_arearpc` VALUES (542527, 542500, '措勤县'); +INSERT INTO `ciy_arearpc` VALUES (610000, 0, '陕西省'); +INSERT INTO `ciy_arearpc` VALUES (610100, 610000, '西安市'); +INSERT INTO `ciy_arearpc` VALUES (610101, 610100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610102, 610100, '新城区'); +INSERT INTO `ciy_arearpc` VALUES (610103, 610100, '碑林区'); +INSERT INTO `ciy_arearpc` VALUES (610104, 610100, '莲湖区'); +INSERT INTO `ciy_arearpc` VALUES (610111, 610100, '灞桥区'); +INSERT INTO `ciy_arearpc` VALUES (610112, 610100, '未央区'); +INSERT INTO `ciy_arearpc` VALUES (610113, 610100, '雁塔区'); +INSERT INTO `ciy_arearpc` VALUES (610114, 610100, '阎良区'); +INSERT INTO `ciy_arearpc` VALUES (610115, 610100, '临潼区'); +INSERT INTO `ciy_arearpc` VALUES (610116, 610100, '长安区'); +INSERT INTO `ciy_arearpc` VALUES (610117, 610100, '高陵区'); +INSERT INTO `ciy_arearpc` VALUES (610118, 610100, '鄠邑区'); +INSERT INTO `ciy_arearpc` VALUES (610122, 610100, '蓝田县'); +INSERT INTO `ciy_arearpc` VALUES (610124, 610100, '周至县'); +INSERT INTO `ciy_arearpc` VALUES (610200, 610000, '铜川市'); +INSERT INTO `ciy_arearpc` VALUES (610201, 610200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610202, 610200, '王益区'); +INSERT INTO `ciy_arearpc` VALUES (610203, 610200, '印台区'); +INSERT INTO `ciy_arearpc` VALUES (610204, 610200, '耀州区'); +INSERT INTO `ciy_arearpc` VALUES (610222, 610200, '宜君县'); +INSERT INTO `ciy_arearpc` VALUES (610300, 610000, '宝鸡市'); +INSERT INTO `ciy_arearpc` VALUES (610301, 610300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610302, 610300, '渭滨区'); +INSERT INTO `ciy_arearpc` VALUES (610303, 610300, '金台区'); +INSERT INTO `ciy_arearpc` VALUES (610304, 610300, '陈仓区'); +INSERT INTO `ciy_arearpc` VALUES (610305, 610300, '凤翔区'); +INSERT INTO `ciy_arearpc` VALUES (610323, 610300, '岐山县'); +INSERT INTO `ciy_arearpc` VALUES (610324, 610300, '扶风县'); +INSERT INTO `ciy_arearpc` VALUES (610326, 610300, '眉县'); +INSERT INTO `ciy_arearpc` VALUES (610327, 610300, '陇县'); +INSERT INTO `ciy_arearpc` VALUES (610328, 610300, '千阳县'); +INSERT INTO `ciy_arearpc` VALUES (610329, 610300, '麟游县'); +INSERT INTO `ciy_arearpc` VALUES (610330, 610300, '凤县'); +INSERT INTO `ciy_arearpc` VALUES (610331, 610300, '太白县'); +INSERT INTO `ciy_arearpc` VALUES (610400, 610000, '咸阳市'); +INSERT INTO `ciy_arearpc` VALUES (610401, 610400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610402, 610400, '秦都区'); +INSERT INTO `ciy_arearpc` VALUES (610403, 610400, '杨陵区'); +INSERT INTO `ciy_arearpc` VALUES (610404, 610400, '渭城区'); +INSERT INTO `ciy_arearpc` VALUES (610422, 610400, '三原县'); +INSERT INTO `ciy_arearpc` VALUES (610423, 610400, '泾阳县'); +INSERT INTO `ciy_arearpc` VALUES (610424, 610400, '乾县'); +INSERT INTO `ciy_arearpc` VALUES (610425, 610400, '礼泉县'); +INSERT INTO `ciy_arearpc` VALUES (610426, 610400, '永寿县'); +INSERT INTO `ciy_arearpc` VALUES (610428, 610400, '长武县'); +INSERT INTO `ciy_arearpc` VALUES (610429, 610400, '旬邑县'); +INSERT INTO `ciy_arearpc` VALUES (610430, 610400, '淳化县'); +INSERT INTO `ciy_arearpc` VALUES (610431, 610400, '武功县'); +INSERT INTO `ciy_arearpc` VALUES (610481, 610400, '兴平市'); +INSERT INTO `ciy_arearpc` VALUES (610482, 610400, '彬州市'); +INSERT INTO `ciy_arearpc` VALUES (610500, 610000, '渭南市'); +INSERT INTO `ciy_arearpc` VALUES (610501, 610500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610502, 610500, '临渭区'); +INSERT INTO `ciy_arearpc` VALUES (610503, 610500, '华州区'); +INSERT INTO `ciy_arearpc` VALUES (610522, 610500, '潼关县'); +INSERT INTO `ciy_arearpc` VALUES (610523, 610500, '大荔县'); +INSERT INTO `ciy_arearpc` VALUES (610524, 610500, '合阳县'); +INSERT INTO `ciy_arearpc` VALUES (610525, 610500, '澄城县'); +INSERT INTO `ciy_arearpc` VALUES (610526, 610500, '蒲城县'); +INSERT INTO `ciy_arearpc` VALUES (610527, 610500, '白水县'); +INSERT INTO `ciy_arearpc` VALUES (610528, 610500, '富平县'); +INSERT INTO `ciy_arearpc` VALUES (610581, 610500, '韩城市'); +INSERT INTO `ciy_arearpc` VALUES (610582, 610500, '华阴市'); +INSERT INTO `ciy_arearpc` VALUES (610600, 610000, '延安市'); +INSERT INTO `ciy_arearpc` VALUES (610601, 610600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610602, 610600, '宝塔区'); +INSERT INTO `ciy_arearpc` VALUES (610603, 610600, '安塞区'); +INSERT INTO `ciy_arearpc` VALUES (610621, 610600, '延长县'); +INSERT INTO `ciy_arearpc` VALUES (610622, 610600, '延川县'); +INSERT INTO `ciy_arearpc` VALUES (610625, 610600, '志丹县'); +INSERT INTO `ciy_arearpc` VALUES (610626, 610600, '吴起县'); +INSERT INTO `ciy_arearpc` VALUES (610627, 610600, '甘泉县'); +INSERT INTO `ciy_arearpc` VALUES (610628, 610600, '富县'); +INSERT INTO `ciy_arearpc` VALUES (610629, 610600, '洛川县'); +INSERT INTO `ciy_arearpc` VALUES (610630, 610600, '宜川县'); +INSERT INTO `ciy_arearpc` VALUES (610631, 610600, '黄龙县'); +INSERT INTO `ciy_arearpc` VALUES (610632, 610600, '黄陵县'); +INSERT INTO `ciy_arearpc` VALUES (610681, 610600, '子长市'); +INSERT INTO `ciy_arearpc` VALUES (610700, 610000, '汉中市'); +INSERT INTO `ciy_arearpc` VALUES (610701, 610700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610702, 610700, '汉台区'); +INSERT INTO `ciy_arearpc` VALUES (610703, 610700, '南郑区'); +INSERT INTO `ciy_arearpc` VALUES (610722, 610700, '城固县'); +INSERT INTO `ciy_arearpc` VALUES (610723, 610700, '洋县'); +INSERT INTO `ciy_arearpc` VALUES (610724, 610700, '西乡县'); +INSERT INTO `ciy_arearpc` VALUES (610725, 610700, '勉县'); +INSERT INTO `ciy_arearpc` VALUES (610726, 610700, '宁强县'); +INSERT INTO `ciy_arearpc` VALUES (610727, 610700, '略阳县'); +INSERT INTO `ciy_arearpc` VALUES (610728, 610700, '镇巴县'); +INSERT INTO `ciy_arearpc` VALUES (610729, 610700, '留坝县'); +INSERT INTO `ciy_arearpc` VALUES (610730, 610700, '佛坪县'); +INSERT INTO `ciy_arearpc` VALUES (610800, 610000, '榆林市'); +INSERT INTO `ciy_arearpc` VALUES (610801, 610800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610802, 610800, '榆阳区'); +INSERT INTO `ciy_arearpc` VALUES (610803, 610800, '横山区'); +INSERT INTO `ciy_arearpc` VALUES (610822, 610800, '府谷县'); +INSERT INTO `ciy_arearpc` VALUES (610824, 610800, '靖边县'); +INSERT INTO `ciy_arearpc` VALUES (610825, 610800, '定边县'); +INSERT INTO `ciy_arearpc` VALUES (610826, 610800, '绥德县'); +INSERT INTO `ciy_arearpc` VALUES (610827, 610800, '米脂县'); +INSERT INTO `ciy_arearpc` VALUES (610828, 610800, '佳县'); +INSERT INTO `ciy_arearpc` VALUES (610829, 610800, '吴堡县'); +INSERT INTO `ciy_arearpc` VALUES (610830, 610800, '清涧县'); +INSERT INTO `ciy_arearpc` VALUES (610831, 610800, '子洲县'); +INSERT INTO `ciy_arearpc` VALUES (610881, 610800, '神木市'); +INSERT INTO `ciy_arearpc` VALUES (610900, 610000, '安康市'); +INSERT INTO `ciy_arearpc` VALUES (610901, 610900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (610902, 610900, '汉滨区'); +INSERT INTO `ciy_arearpc` VALUES (610921, 610900, '汉阴县'); +INSERT INTO `ciy_arearpc` VALUES (610922, 610900, '石泉县'); +INSERT INTO `ciy_arearpc` VALUES (610923, 610900, '宁陕县'); +INSERT INTO `ciy_arearpc` VALUES (610924, 610900, '紫阳县'); +INSERT INTO `ciy_arearpc` VALUES (610925, 610900, '岚皋县'); +INSERT INTO `ciy_arearpc` VALUES (610926, 610900, '平利县'); +INSERT INTO `ciy_arearpc` VALUES (610927, 610900, '镇坪县'); +INSERT INTO `ciy_arearpc` VALUES (610929, 610900, '白河县'); +INSERT INTO `ciy_arearpc` VALUES (610981, 610900, '旬阳市'); +INSERT INTO `ciy_arearpc` VALUES (611000, 610000, '商洛市'); +INSERT INTO `ciy_arearpc` VALUES (611001, 611000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (611002, 611000, '商州区'); +INSERT INTO `ciy_arearpc` VALUES (611021, 611000, '洛南县'); +INSERT INTO `ciy_arearpc` VALUES (611022, 611000, '丹凤县'); +INSERT INTO `ciy_arearpc` VALUES (611023, 611000, '商南县'); +INSERT INTO `ciy_arearpc` VALUES (611024, 611000, '山阳县'); +INSERT INTO `ciy_arearpc` VALUES (611025, 611000, '镇安县'); +INSERT INTO `ciy_arearpc` VALUES (611026, 611000, '柞水县'); +INSERT INTO `ciy_arearpc` VALUES (620000, 0, '甘肃省'); +INSERT INTO `ciy_arearpc` VALUES (620100, 620000, '兰州市'); +INSERT INTO `ciy_arearpc` VALUES (620101, 620100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620102, 620100, '城关区'); +INSERT INTO `ciy_arearpc` VALUES (620103, 620100, '七里河区'); +INSERT INTO `ciy_arearpc` VALUES (620104, 620100, '西固区'); +INSERT INTO `ciy_arearpc` VALUES (620105, 620100, '安宁区'); +INSERT INTO `ciy_arearpc` VALUES (620111, 620100, '红古区'); +INSERT INTO `ciy_arearpc` VALUES (620121, 620100, '永登县'); +INSERT INTO `ciy_arearpc` VALUES (620122, 620100, '皋兰县'); +INSERT INTO `ciy_arearpc` VALUES (620123, 620100, '榆中县'); +INSERT INTO `ciy_arearpc` VALUES (620171, 620100, '兰州新区'); +INSERT INTO `ciy_arearpc` VALUES (620200, 620000, '嘉峪关市'); +INSERT INTO `ciy_arearpc` VALUES (620201, 620200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620300, 620000, '金昌市'); +INSERT INTO `ciy_arearpc` VALUES (620301, 620300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620302, 620300, '金川区'); +INSERT INTO `ciy_arearpc` VALUES (620321, 620300, '永昌县'); +INSERT INTO `ciy_arearpc` VALUES (620400, 620000, '白银市'); +INSERT INTO `ciy_arearpc` VALUES (620401, 620400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620402, 620400, '白银区'); +INSERT INTO `ciy_arearpc` VALUES (620403, 620400, '平川区'); +INSERT INTO `ciy_arearpc` VALUES (620421, 620400, '靖远县'); +INSERT INTO `ciy_arearpc` VALUES (620422, 620400, '会宁县'); +INSERT INTO `ciy_arearpc` VALUES (620423, 620400, '景泰县'); +INSERT INTO `ciy_arearpc` VALUES (620500, 620000, '天水市'); +INSERT INTO `ciy_arearpc` VALUES (620501, 620500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620502, 620500, '秦州区'); +INSERT INTO `ciy_arearpc` VALUES (620503, 620500, '麦积区'); +INSERT INTO `ciy_arearpc` VALUES (620521, 620500, '清水县'); +INSERT INTO `ciy_arearpc` VALUES (620522, 620500, '秦安县'); +INSERT INTO `ciy_arearpc` VALUES (620523, 620500, '甘谷县'); +INSERT INTO `ciy_arearpc` VALUES (620524, 620500, '武山县'); +INSERT INTO `ciy_arearpc` VALUES (620525, 620500, '张家川回族自治县'); +INSERT INTO `ciy_arearpc` VALUES (620600, 620000, '武威市'); +INSERT INTO `ciy_arearpc` VALUES (620601, 620600, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620602, 620600, '凉州区'); +INSERT INTO `ciy_arearpc` VALUES (620621, 620600, '民勤县'); +INSERT INTO `ciy_arearpc` VALUES (620622, 620600, '古浪县'); +INSERT INTO `ciy_arearpc` VALUES (620623, 620600, '天祝藏族自治县'); +INSERT INTO `ciy_arearpc` VALUES (620700, 620000, '张掖市'); +INSERT INTO `ciy_arearpc` VALUES (620701, 620700, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620702, 620700, '甘州区'); +INSERT INTO `ciy_arearpc` VALUES (620721, 620700, '肃南裕固族自治县'); +INSERT INTO `ciy_arearpc` VALUES (620722, 620700, '民乐县'); +INSERT INTO `ciy_arearpc` VALUES (620723, 620700, '临泽县'); +INSERT INTO `ciy_arearpc` VALUES (620724, 620700, '高台县'); +INSERT INTO `ciy_arearpc` VALUES (620725, 620700, '山丹县'); +INSERT INTO `ciy_arearpc` VALUES (620800, 620000, '平凉市'); +INSERT INTO `ciy_arearpc` VALUES (620801, 620800, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620802, 620800, '崆峒区'); +INSERT INTO `ciy_arearpc` VALUES (620821, 620800, '泾川县'); +INSERT INTO `ciy_arearpc` VALUES (620822, 620800, '灵台县'); +INSERT INTO `ciy_arearpc` VALUES (620823, 620800, '崇信县'); +INSERT INTO `ciy_arearpc` VALUES (620825, 620800, '庄浪县'); +INSERT INTO `ciy_arearpc` VALUES (620826, 620800, '静宁县'); +INSERT INTO `ciy_arearpc` VALUES (620881, 620800, '华亭市'); +INSERT INTO `ciy_arearpc` VALUES (620900, 620000, '酒泉市'); +INSERT INTO `ciy_arearpc` VALUES (620901, 620900, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (620902, 620900, '肃州区'); +INSERT INTO `ciy_arearpc` VALUES (620921, 620900, '金塔县'); +INSERT INTO `ciy_arearpc` VALUES (620922, 620900, '瓜州县'); +INSERT INTO `ciy_arearpc` VALUES (620923, 620900, '肃北蒙古族自治县'); +INSERT INTO `ciy_arearpc` VALUES (620924, 620900, '阿克塞哈萨克族自治县'); +INSERT INTO `ciy_arearpc` VALUES (620981, 620900, '玉门市'); +INSERT INTO `ciy_arearpc` VALUES (620982, 620900, '敦煌市'); +INSERT INTO `ciy_arearpc` VALUES (621000, 620000, '庆阳市'); +INSERT INTO `ciy_arearpc` VALUES (621001, 621000, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (621002, 621000, '西峰区'); +INSERT INTO `ciy_arearpc` VALUES (621021, 621000, '庆城县'); +INSERT INTO `ciy_arearpc` VALUES (621022, 621000, '环县'); +INSERT INTO `ciy_arearpc` VALUES (621023, 621000, '华池县'); +INSERT INTO `ciy_arearpc` VALUES (621024, 621000, '合水县'); +INSERT INTO `ciy_arearpc` VALUES (621025, 621000, '正宁县'); +INSERT INTO `ciy_arearpc` VALUES (621026, 621000, '宁县'); +INSERT INTO `ciy_arearpc` VALUES (621027, 621000, '镇原县'); +INSERT INTO `ciy_arearpc` VALUES (621100, 620000, '定西市'); +INSERT INTO `ciy_arearpc` VALUES (621101, 621100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (621102, 621100, '安定区'); +INSERT INTO `ciy_arearpc` VALUES (621121, 621100, '通渭县'); +INSERT INTO `ciy_arearpc` VALUES (621122, 621100, '陇西县'); +INSERT INTO `ciy_arearpc` VALUES (621123, 621100, '渭源县'); +INSERT INTO `ciy_arearpc` VALUES (621124, 621100, '临洮县'); +INSERT INTO `ciy_arearpc` VALUES (621125, 621100, '漳县'); +INSERT INTO `ciy_arearpc` VALUES (621126, 621100, '岷县'); +INSERT INTO `ciy_arearpc` VALUES (621200, 620000, '陇南市'); +INSERT INTO `ciy_arearpc` VALUES (621201, 621200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (621202, 621200, '武都区'); +INSERT INTO `ciy_arearpc` VALUES (621221, 621200, '成县'); +INSERT INTO `ciy_arearpc` VALUES (621222, 621200, '文县'); +INSERT INTO `ciy_arearpc` VALUES (621223, 621200, '宕昌县'); +INSERT INTO `ciy_arearpc` VALUES (621224, 621200, '康县'); +INSERT INTO `ciy_arearpc` VALUES (621225, 621200, '西和县'); +INSERT INTO `ciy_arearpc` VALUES (621226, 621200, '礼县'); +INSERT INTO `ciy_arearpc` VALUES (621227, 621200, '徽县'); +INSERT INTO `ciy_arearpc` VALUES (621228, 621200, '两当县'); +INSERT INTO `ciy_arearpc` VALUES (622900, 620000, '临夏回族自治州'); +INSERT INTO `ciy_arearpc` VALUES (622901, 622900, '临夏市'); +INSERT INTO `ciy_arearpc` VALUES (622921, 622900, '临夏县'); +INSERT INTO `ciy_arearpc` VALUES (622922, 622900, '康乐县'); +INSERT INTO `ciy_arearpc` VALUES (622923, 622900, '永靖县'); +INSERT INTO `ciy_arearpc` VALUES (622924, 622900, '广河县'); +INSERT INTO `ciy_arearpc` VALUES (622925, 622900, '和政县'); +INSERT INTO `ciy_arearpc` VALUES (622926, 622900, '东乡族自治县'); +INSERT INTO `ciy_arearpc` VALUES (622927, 622900, '积石山保安族东乡族撒拉族自治县'); +INSERT INTO `ciy_arearpc` VALUES (623000, 620000, '甘南藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (623001, 623000, '合作市'); +INSERT INTO `ciy_arearpc` VALUES (623021, 623000, '临潭县'); +INSERT INTO `ciy_arearpc` VALUES (623022, 623000, '卓尼县'); +INSERT INTO `ciy_arearpc` VALUES (623023, 623000, '舟曲县'); +INSERT INTO `ciy_arearpc` VALUES (623024, 623000, '迭部县'); +INSERT INTO `ciy_arearpc` VALUES (623025, 623000, '玛曲县'); +INSERT INTO `ciy_arearpc` VALUES (623026, 623000, '碌曲县'); +INSERT INTO `ciy_arearpc` VALUES (623027, 623000, '夏河县'); +INSERT INTO `ciy_arearpc` VALUES (630000, 0, '青海省'); +INSERT INTO `ciy_arearpc` VALUES (630100, 630000, '西宁市'); +INSERT INTO `ciy_arearpc` VALUES (630101, 630100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (630102, 630100, '城东区'); +INSERT INTO `ciy_arearpc` VALUES (630103, 630100, '城中区'); +INSERT INTO `ciy_arearpc` VALUES (630104, 630100, '城西区'); +INSERT INTO `ciy_arearpc` VALUES (630105, 630100, '城北区'); +INSERT INTO `ciy_arearpc` VALUES (630106, 630100, '湟中区'); +INSERT INTO `ciy_arearpc` VALUES (630121, 630100, '大通回族土族自治县'); +INSERT INTO `ciy_arearpc` VALUES (630123, 630100, '湟源县'); +INSERT INTO `ciy_arearpc` VALUES (630200, 630000, '海东市'); +INSERT INTO `ciy_arearpc` VALUES (630202, 630200, '乐都区'); +INSERT INTO `ciy_arearpc` VALUES (630203, 630200, '平安区'); +INSERT INTO `ciy_arearpc` VALUES (630222, 630200, '民和回族土族自治县'); +INSERT INTO `ciy_arearpc` VALUES (630223, 630200, '互助土族自治县'); +INSERT INTO `ciy_arearpc` VALUES (630224, 630200, '化隆回族自治县'); +INSERT INTO `ciy_arearpc` VALUES (630225, 630200, '循化撒拉族自治县'); +INSERT INTO `ciy_arearpc` VALUES (632200, 630000, '海北藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (632221, 632200, '门源回族自治县'); +INSERT INTO `ciy_arearpc` VALUES (632222, 632200, '祁连县'); +INSERT INTO `ciy_arearpc` VALUES (632223, 632200, '海晏县'); +INSERT INTO `ciy_arearpc` VALUES (632224, 632200, '刚察县'); +INSERT INTO `ciy_arearpc` VALUES (632300, 630000, '黄南藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (632301, 632300, '同仁市'); +INSERT INTO `ciy_arearpc` VALUES (632322, 632300, '尖扎县'); +INSERT INTO `ciy_arearpc` VALUES (632323, 632300, '泽库县'); +INSERT INTO `ciy_arearpc` VALUES (632324, 632300, '河南蒙古族自治县'); +INSERT INTO `ciy_arearpc` VALUES (632500, 630000, '海南藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (632521, 632500, '共和县'); +INSERT INTO `ciy_arearpc` VALUES (632522, 632500, '同德县'); +INSERT INTO `ciy_arearpc` VALUES (632523, 632500, '贵德县'); +INSERT INTO `ciy_arearpc` VALUES (632524, 632500, '兴海县'); +INSERT INTO `ciy_arearpc` VALUES (632525, 632500, '贵南县'); +INSERT INTO `ciy_arearpc` VALUES (632600, 630000, '果洛藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (632621, 632600, '玛沁县'); +INSERT INTO `ciy_arearpc` VALUES (632622, 632600, '班玛县'); +INSERT INTO `ciy_arearpc` VALUES (632623, 632600, '甘德县'); +INSERT INTO `ciy_arearpc` VALUES (632624, 632600, '达日县'); +INSERT INTO `ciy_arearpc` VALUES (632625, 632600, '久治县'); +INSERT INTO `ciy_arearpc` VALUES (632626, 632600, '玛多县'); +INSERT INTO `ciy_arearpc` VALUES (632700, 630000, '玉树藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (632701, 632700, '玉树市'); +INSERT INTO `ciy_arearpc` VALUES (632722, 632700, '杂多县'); +INSERT INTO `ciy_arearpc` VALUES (632723, 632700, '称多县'); +INSERT INTO `ciy_arearpc` VALUES (632724, 632700, '治多县'); +INSERT INTO `ciy_arearpc` VALUES (632725, 632700, '囊谦县'); +INSERT INTO `ciy_arearpc` VALUES (632726, 632700, '曲麻莱县'); +INSERT INTO `ciy_arearpc` VALUES (632800, 630000, '海西蒙古族藏族自治州'); +INSERT INTO `ciy_arearpc` VALUES (632801, 632800, '格尔木市'); +INSERT INTO `ciy_arearpc` VALUES (632802, 632800, '德令哈市'); +INSERT INTO `ciy_arearpc` VALUES (632803, 632800, '茫崖市'); +INSERT INTO `ciy_arearpc` VALUES (632821, 632800, '乌兰县'); +INSERT INTO `ciy_arearpc` VALUES (632822, 632800, '都兰县'); +INSERT INTO `ciy_arearpc` VALUES (632823, 632800, '天峻县'); +INSERT INTO `ciy_arearpc` VALUES (632857, 632800, '大柴旦行政委员会'); +INSERT INTO `ciy_arearpc` VALUES (640000, 0, '宁夏回族自治区'); +INSERT INTO `ciy_arearpc` VALUES (640100, 640000, '银川市'); +INSERT INTO `ciy_arearpc` VALUES (640101, 640100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (640104, 640100, '兴庆区'); +INSERT INTO `ciy_arearpc` VALUES (640105, 640100, '西夏区'); +INSERT INTO `ciy_arearpc` VALUES (640106, 640100, '金凤区'); +INSERT INTO `ciy_arearpc` VALUES (640121, 640100, '永宁县'); +INSERT INTO `ciy_arearpc` VALUES (640122, 640100, '贺兰县'); +INSERT INTO `ciy_arearpc` VALUES (640181, 640100, '灵武市'); +INSERT INTO `ciy_arearpc` VALUES (640200, 640000, '石嘴山市'); +INSERT INTO `ciy_arearpc` VALUES (640201, 640200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (640202, 640200, '大武口区'); +INSERT INTO `ciy_arearpc` VALUES (640205, 640200, '惠农区'); +INSERT INTO `ciy_arearpc` VALUES (640221, 640200, '平罗县'); +INSERT INTO `ciy_arearpc` VALUES (640300, 640000, '吴忠市'); +INSERT INTO `ciy_arearpc` VALUES (640301, 640300, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (640302, 640300, '利通区'); +INSERT INTO `ciy_arearpc` VALUES (640303, 640300, '红寺堡区'); +INSERT INTO `ciy_arearpc` VALUES (640323, 640300, '盐池县'); +INSERT INTO `ciy_arearpc` VALUES (640324, 640300, '同心县'); +INSERT INTO `ciy_arearpc` VALUES (640381, 640300, '青铜峡市'); +INSERT INTO `ciy_arearpc` VALUES (640400, 640000, '固原市'); +INSERT INTO `ciy_arearpc` VALUES (640401, 640400, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (640402, 640400, '原州区'); +INSERT INTO `ciy_arearpc` VALUES (640422, 640400, '西吉县'); +INSERT INTO `ciy_arearpc` VALUES (640423, 640400, '隆德县'); +INSERT INTO `ciy_arearpc` VALUES (640424, 640400, '泾源县'); +INSERT INTO `ciy_arearpc` VALUES (640425, 640400, '彭阳县'); +INSERT INTO `ciy_arearpc` VALUES (640500, 640000, '中卫市'); +INSERT INTO `ciy_arearpc` VALUES (640501, 640500, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (640502, 640500, '沙坡头区'); +INSERT INTO `ciy_arearpc` VALUES (640521, 640500, '中宁县'); +INSERT INTO `ciy_arearpc` VALUES (640522, 640500, '海原县'); +INSERT INTO `ciy_arearpc` VALUES (650000, 0, '新疆维吾尔自治区'); +INSERT INTO `ciy_arearpc` VALUES (650100, 650000, '乌鲁木齐市'); +INSERT INTO `ciy_arearpc` VALUES (650101, 650100, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (650102, 650100, '天山区'); +INSERT INTO `ciy_arearpc` VALUES (650103, 650100, '沙依巴克区'); +INSERT INTO `ciy_arearpc` VALUES (650104, 650100, '新市区'); +INSERT INTO `ciy_arearpc` VALUES (650105, 650100, '水磨沟区'); +INSERT INTO `ciy_arearpc` VALUES (650106, 650100, '头屯河区'); +INSERT INTO `ciy_arearpc` VALUES (650107, 650100, '达坂城区'); +INSERT INTO `ciy_arearpc` VALUES (650109, 650100, '米东区'); +INSERT INTO `ciy_arearpc` VALUES (650121, 650100, '乌鲁木齐县'); +INSERT INTO `ciy_arearpc` VALUES (650200, 650000, '克拉玛依市'); +INSERT INTO `ciy_arearpc` VALUES (650201, 650200, '市辖区'); +INSERT INTO `ciy_arearpc` VALUES (650202, 650200, '独山子区'); +INSERT INTO `ciy_arearpc` VALUES (650203, 650200, '克拉玛依区'); +INSERT INTO `ciy_arearpc` VALUES (650204, 650200, '白碱滩区'); +INSERT INTO `ciy_arearpc` VALUES (650205, 650200, '乌尔禾区'); +INSERT INTO `ciy_arearpc` VALUES (650400, 650000, '吐鲁番市'); +INSERT INTO `ciy_arearpc` VALUES (650402, 650400, '高昌区'); +INSERT INTO `ciy_arearpc` VALUES (650421, 650400, '鄯善县'); +INSERT INTO `ciy_arearpc` VALUES (650422, 650400, '托克逊县'); +INSERT INTO `ciy_arearpc` VALUES (650500, 650000, '哈密市'); +INSERT INTO `ciy_arearpc` VALUES (650502, 650500, '伊州区'); +INSERT INTO `ciy_arearpc` VALUES (650521, 650500, '巴里坤哈萨克自治县'); +INSERT INTO `ciy_arearpc` VALUES (650522, 650500, '伊吾县'); +INSERT INTO `ciy_arearpc` VALUES (652300, 650000, '昌吉回族自治州'); +INSERT INTO `ciy_arearpc` VALUES (652301, 652300, '昌吉市'); +INSERT INTO `ciy_arearpc` VALUES (652302, 652300, '阜康市'); +INSERT INTO `ciy_arearpc` VALUES (652323, 652300, '呼图壁县'); +INSERT INTO `ciy_arearpc` VALUES (652324, 652300, '玛纳斯县'); +INSERT INTO `ciy_arearpc` VALUES (652325, 652300, '奇台县'); +INSERT INTO `ciy_arearpc` VALUES (652327, 652300, '吉木萨尔县'); +INSERT INTO `ciy_arearpc` VALUES (652328, 652300, '木垒哈萨克自治县'); +INSERT INTO `ciy_arearpc` VALUES (652700, 650000, '博尔塔拉蒙古自治州'); +INSERT INTO `ciy_arearpc` VALUES (652701, 652700, '博乐市'); +INSERT INTO `ciy_arearpc` VALUES (652702, 652700, '阿拉山口市'); +INSERT INTO `ciy_arearpc` VALUES (652722, 652700, '精河县'); +INSERT INTO `ciy_arearpc` VALUES (652723, 652700, '温泉县'); +INSERT INTO `ciy_arearpc` VALUES (652800, 650000, '巴音郭楞蒙古自治州'); +INSERT INTO `ciy_arearpc` VALUES (652801, 652800, '库尔勒市'); +INSERT INTO `ciy_arearpc` VALUES (652822, 652800, '轮台县'); +INSERT INTO `ciy_arearpc` VALUES (652823, 652800, '尉犁县'); +INSERT INTO `ciy_arearpc` VALUES (652824, 652800, '若羌县'); +INSERT INTO `ciy_arearpc` VALUES (652825, 652800, '且末县'); +INSERT INTO `ciy_arearpc` VALUES (652826, 652800, '焉耆回族自治县'); +INSERT INTO `ciy_arearpc` VALUES (652827, 652800, '和静县'); +INSERT INTO `ciy_arearpc` VALUES (652828, 652800, '和硕县'); +INSERT INTO `ciy_arearpc` VALUES (652829, 652800, '博湖县'); +INSERT INTO `ciy_arearpc` VALUES (652871, 652800, '库尔勒经济技术开发区'); +INSERT INTO `ciy_arearpc` VALUES (652900, 650000, '阿克苏地区'); +INSERT INTO `ciy_arearpc` VALUES (652901, 652900, '阿克苏市'); +INSERT INTO `ciy_arearpc` VALUES (652902, 652900, '库车市'); +INSERT INTO `ciy_arearpc` VALUES (652922, 652900, '温宿县'); +INSERT INTO `ciy_arearpc` VALUES (652924, 652900, '沙雅县'); +INSERT INTO `ciy_arearpc` VALUES (652925, 652900, '新和县'); +INSERT INTO `ciy_arearpc` VALUES (652926, 652900, '拜城县'); +INSERT INTO `ciy_arearpc` VALUES (652927, 652900, '乌什县'); +INSERT INTO `ciy_arearpc` VALUES (652928, 652900, '阿瓦提县'); +INSERT INTO `ciy_arearpc` VALUES (652929, 652900, '柯坪县'); +INSERT INTO `ciy_arearpc` VALUES (653000, 650000, '克孜勒苏柯尔克孜自治州'); +INSERT INTO `ciy_arearpc` VALUES (653001, 653000, '阿图什市'); +INSERT INTO `ciy_arearpc` VALUES (653022, 653000, '阿克陶县'); +INSERT INTO `ciy_arearpc` VALUES (653023, 653000, '阿合奇县'); +INSERT INTO `ciy_arearpc` VALUES (653024, 653000, '乌恰县'); +INSERT INTO `ciy_arearpc` VALUES (653100, 650000, '喀什地区'); +INSERT INTO `ciy_arearpc` VALUES (653101, 653100, '喀什市'); +INSERT INTO `ciy_arearpc` VALUES (653121, 653100, '疏附县'); +INSERT INTO `ciy_arearpc` VALUES (653122, 653100, '疏勒县'); +INSERT INTO `ciy_arearpc` VALUES (653123, 653100, '英吉沙县'); +INSERT INTO `ciy_arearpc` VALUES (653124, 653100, '泽普县'); +INSERT INTO `ciy_arearpc` VALUES (653125, 653100, '莎车县'); +INSERT INTO `ciy_arearpc` VALUES (653126, 653100, '叶城县'); +INSERT INTO `ciy_arearpc` VALUES (653127, 653100, '麦盖提县'); +INSERT INTO `ciy_arearpc` VALUES (653128, 653100, '岳普湖县'); +INSERT INTO `ciy_arearpc` VALUES (653129, 653100, '伽师县'); +INSERT INTO `ciy_arearpc` VALUES (653130, 653100, '巴楚县'); +INSERT INTO `ciy_arearpc` VALUES (653131, 653100, '塔什库尔干塔吉克自治县'); +INSERT INTO `ciy_arearpc` VALUES (653200, 650000, '和田地区'); +INSERT INTO `ciy_arearpc` VALUES (653201, 653200, '和田市'); +INSERT INTO `ciy_arearpc` VALUES (653221, 653200, '和田县'); +INSERT INTO `ciy_arearpc` VALUES (653222, 653200, '墨玉县'); +INSERT INTO `ciy_arearpc` VALUES (653223, 653200, '皮山县'); +INSERT INTO `ciy_arearpc` VALUES (653224, 653200, '洛浦县'); +INSERT INTO `ciy_arearpc` VALUES (653225, 653200, '策勒县'); +INSERT INTO `ciy_arearpc` VALUES (653226, 653200, '于田县'); +INSERT INTO `ciy_arearpc` VALUES (653227, 653200, '民丰县'); +INSERT INTO `ciy_arearpc` VALUES (654000, 650000, '伊犁哈萨克自治州'); +INSERT INTO `ciy_arearpc` VALUES (654002, 654000, '伊宁市'); +INSERT INTO `ciy_arearpc` VALUES (654003, 654000, '奎屯市'); +INSERT INTO `ciy_arearpc` VALUES (654004, 654000, '霍尔果斯市'); +INSERT INTO `ciy_arearpc` VALUES (654021, 654000, '伊宁县'); +INSERT INTO `ciy_arearpc` VALUES (654022, 654000, '察布查尔锡伯自治县'); +INSERT INTO `ciy_arearpc` VALUES (654023, 654000, '霍城县'); +INSERT INTO `ciy_arearpc` VALUES (654024, 654000, '巩留县'); +INSERT INTO `ciy_arearpc` VALUES (654025, 654000, '新源县'); +INSERT INTO `ciy_arearpc` VALUES (654026, 654000, '昭苏县'); +INSERT INTO `ciy_arearpc` VALUES (654027, 654000, '特克斯县'); +INSERT INTO `ciy_arearpc` VALUES (654028, 654000, '尼勒克县'); +INSERT INTO `ciy_arearpc` VALUES (654200, 650000, '塔城地区'); +INSERT INTO `ciy_arearpc` VALUES (654201, 654200, '塔城市'); +INSERT INTO `ciy_arearpc` VALUES (654202, 654200, '乌苏市'); +INSERT INTO `ciy_arearpc` VALUES (654203, 654200, '沙湾市'); +INSERT INTO `ciy_arearpc` VALUES (654221, 654200, '额敏县'); +INSERT INTO `ciy_arearpc` VALUES (654224, 654200, '托里县'); +INSERT INTO `ciy_arearpc` VALUES (654225, 654200, '裕民县'); +INSERT INTO `ciy_arearpc` VALUES (654226, 654200, '和布克赛尔蒙古自治县'); +INSERT INTO `ciy_arearpc` VALUES (654300, 650000, '阿勒泰地区'); +INSERT INTO `ciy_arearpc` VALUES (654301, 654300, '阿勒泰市'); +INSERT INTO `ciy_arearpc` VALUES (654321, 654300, '布尔津县'); +INSERT INTO `ciy_arearpc` VALUES (654322, 654300, '富蕴县'); +INSERT INTO `ciy_arearpc` VALUES (654323, 654300, '福海县'); +INSERT INTO `ciy_arearpc` VALUES (654324, 654300, '哈巴河县'); +INSERT INTO `ciy_arearpc` VALUES (654325, 654300, '青河县'); +INSERT INTO `ciy_arearpc` VALUES (654326, 654300, '吉木乃县'); +INSERT INTO `ciy_arearpc` VALUES (659000, 650000, '自治区直辖县级行政区划'); +INSERT INTO `ciy_arearpc` VALUES (659001, 659000, '石河子市'); +INSERT INTO `ciy_arearpc` VALUES (659002, 659000, '阿拉尔市'); +INSERT INTO `ciy_arearpc` VALUES (659003, 659000, '图木舒克市'); +INSERT INTO `ciy_arearpc` VALUES (659004, 659000, '五家渠市'); +INSERT INTO `ciy_arearpc` VALUES (659005, 659000, '北屯市'); +INSERT INTO `ciy_arearpc` VALUES (659006, 659000, '铁门关市'); +INSERT INTO `ciy_arearpc` VALUES (659007, 659000, '双河市'); +INSERT INTO `ciy_arearpc` VALUES (659008, 659000, '可克达拉市'); +INSERT INTO `ciy_arearpc` VALUES (659009, 659000, '昆玉市'); +INSERT INTO `ciy_arearpc` VALUES (659010, 659000, '胡杨河市'); +INSERT INTO `ciy_arearpc` VALUES (659011, 659000, '新星市'); diff --git a/c5_ciyon.sql b/c5_ciyon.sql new file mode 100644 index 0000000..54e464e --- /dev/null +++ b/c5_ciyon.sql @@ -0,0 +1,2216 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for ap_art_post +-- ---------------------------- +DROP TABLE IF EXISTS `ap_art_post`; +CREATE TABLE `ap_art_post` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `sectionid` int(11) NOT NULL COMMENT '|版块|,DB,ap_art_section', + `artstatus` int(11) NOT NULL COMMENT '|文章状态|,CATA,artstatus', + `artsort` int(11) NOT NULL COMMENT '|推荐排序|,CATA,artsort', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文章标题', + `source` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '来源', + `author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '作者', + `studycnt` int(11) NOT NULL DEFAULT 0 COMMENT '精读数|', + `readcnt` int(11) NOT NULL COMMENT '阅读数|', + `avmp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '音视频,AV', + `img` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '缩略图,IMG1', + `descs` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',摘要,BR', + `inputuser` int(11) NOT NULL COMMENT '撰写人,CATA,adminuser', + `audituser` int(11) NOT NULL DEFAULT 0 COMMENT '审核人,CATA,adminuser', + `pubtimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '发布时间,DATE', + `content` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',内容,MD', + PRIMARY KEY (`id`) USING BTREE, + INDEX `ossa`(`sectionid`, `artstatus`, `artsort`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '版块文章表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_art_post +-- ---------------------------- +INSERT INTO `ap_art_post` VALUES (7, 1, 100, 40, 'AI决策调试', '', '', 13, 27, '', '/2025/0502/art/055507_3610.png', '', 10, 10, 1750889011, '[MD]帮助\n帮助\n帮助\n'); + +-- ---------------------------- +-- Table structure for ap_art_section +-- ---------------------------- +DROP TABLE IF EXISTS `ap_art_section`; +CREATE TABLE `ap_art_section` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '|ID|', + `ngroup` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分组名', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '版块名称', + `auditcnt` int(11) NOT NULL DEFAULT 0 COMMENT '待审数|', + `artcnt` int(11) NOT NULL DEFAULT 0 COMMENT '文章数|', + `adminuser` int(11) NOT NULL COMMENT '责任人,CATA,adminuser', + `addtimes` bigint(20) NOT NULL COMMENT '创建时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '版块表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_art_section +-- ---------------------------- +INSERT INTO `ap_art_section` VALUES (1, 'help', '帮助中心', 0, 1, 10, 1750888993); + +-- ---------------------------- +-- Table structure for ap_art_vent +-- ---------------------------- +DROP TABLE IF EXISTS `ap_art_vent`; +CREATE TABLE `ap_art_vent` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `sectionid` int(11) NOT NULL COMMENT '|版块|,DB,ap_art_section', + `artid` int(11) NOT NULL COMMENT '|文章|,DB,ap_art_post', + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `content` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容,BR', + `pubtimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '反馈时间,DATE', + `audituser` int(11) NOT NULL DEFAULT 0 COMMENT '阅读人,CATA,adminuser', + PRIMARY KEY (`id`) USING BTREE, + INDEX `ossa`(`artid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文章反馈表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_art_vent +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_banner +-- ---------------------------- +DROP TABLE IF EXISTS `ap_banner`; +CREATE TABLE `ap_banner` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `groupcode` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '|组别代码|', + `img` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '轮播图,IMG1', + `url` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '链接', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '轮播图表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_banner +-- ---------------------------- +INSERT INTO `ap_banner` VALUES (24, 'index', '/img/banner.webp', ''); + +-- ---------------------------- +-- Table structure for ap_cash_bundle +-- ---------------------------- +DROP TABLE IF EXISTS `ap_cash_bundle`; +CREATE TABLE `ap_cash_bundle` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `chargemoney` int(11) NOT NULL COMMENT '充值金额|,CNY', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '充值套餐表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_cash_bundle +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_cash_ie +-- ---------------------------- +DROP TABLE IF EXISTS `ap_cash_ie`; +CREATE TABLE `ap_cash_ie` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `cashtype` int(11) NOT NULL COMMENT '收支分类,CATA,cashtype', + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `iemoney` int(11) NOT NULL COMMENT '金额|,CNY', + `addtimes` bigint(20) NOT NULL COMMENT '发生时间,DATE', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '摘要', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '收支记录' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_cash_ie +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_cash_in +-- ---------------------------- +DROP TABLE IF EXISTS `ap_cash_in`; +CREATE TABLE `ap_cash_in` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `inmoney` int(11) NOT NULL COMMENT '充值金额|,CNY', + `addtimes` bigint(20) NOT NULL COMMENT '发生时间,DATE', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '支付流水号', + `paytimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '支付时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '充值记录' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_cash_in +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_cash_oe +-- ---------------------------- +DROP TABLE IF EXISTS `ap_cash_oe`; +CREATE TABLE `ap_cash_oe` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `cashtype` int(11) NOT NULL COMMENT '收支分类,CATA,cashtype', + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `oemoney` int(11) NOT NULL COMMENT '金额|,CNY', + `addtimes` bigint(20) NOT NULL COMMENT '发生时间,DATE', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '摘要', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 154 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '收益记录' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_cash_oe +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_cash_out +-- ---------------------------- +DROP TABLE IF EXISTS `ap_cash_out`; +CREATE TABLE `ap_cash_out` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `cashstatus` int(11) NOT NULL COMMENT '|提现状态|,CATA,cashstatus', + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `cashtype` int(11) NOT NULL COMMENT '提现方式,BOOL,银行.微信', + `cashmoney` int(10) NOT NULL COMMENT '提现金额|,CNY', + `taxmoney` int(11) NOT NULL COMMENT '代缴个税|,CNY', + `addtimes` bigint(20) NOT NULL COMMENT '申请时间,DATE', + `cashtimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '操作时间,DATE', + `cashno` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付编号', + `auditmsg` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '拒绝原因', + `bankaccount` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '账户名称', + `bankno` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '银行卡号', + `bankname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '开户银行', + `bankcode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '联行号', + `invfile` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发票,DOWN', + `invcode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发票号码', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '提现记录' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_cash_out +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_invoicedetail +-- ---------------------------- +DROP TABLE IF EXISTS `ap_invoicedetail`; +CREATE TABLE `ap_invoicedetail` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + `adminuser` int(11) NOT NULL DEFAULT 0 COMMENT '维护人,CATU,adminuser', + `memo` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注信息', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发票类型表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_invoicedetail +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_invoicetitle +-- ---------------------------- +DROP TABLE IF EXISTS `ap_invoicetitle`; +CREATE TABLE `ap_invoicetitle` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `taxnumber` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '税号', + `addr` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '单位地址', + `phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '电话号码', + `bankname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '银行名称', + `bankaccount` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '银行账号', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发票抬头表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_invoicetitle +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_invoicing +-- ---------------------------- +DROP TABLE IF EXISTS `ap_invoicing`; +CREATE TABLE `ap_invoicing` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `auditstatus` int(11) NOT NULL DEFAULT 0 COMMENT '|审核状态|,CATA,auditstatus', + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `invoicetitleid` int(11) NOT NULL COMMENT ',所属抬头,DB,ap_invoicetitle', + `invoicedetailid` int(11) NOT NULL COMMENT '所属明细,DB,ap_invoicedetail', + `invoicemoney` int(11) NOT NULL COMMENT '开票金额|,CNY', + `invfile` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发票,DOWN', + `invcode` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发票号码', + `addtimes` bigint(20) NOT NULL COMMENT '申请时间,DATE', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `taxnumber` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '税号', + `addr` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '单位地址', + `phone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '电话号码', + `bankname` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '银行名称', + `bankaccount` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '银行账号', + `audittimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '操作时间,DATE', + `audituser` int(11) NOT NULL DEFAULT 0 COMMENT '操作人,CATU,adminuser', + `auditmsg` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '拒开原因', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发票开票表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_invoicing +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_log +-- ---------------------------- +DROP TABLE IF EXISTS `ap_log`; +CREATE TABLE `ap_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `loguser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `readuser` int(11) NOT NULL COMMENT '审阅人,CATA,adminuser', + `types` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'LOG分类', + `addtimes` bigint(20) NOT NULL COMMENT '发生日期,DATE', + `ip` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'IP,IP', + `logs` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '详情', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3432 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '应用日志表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_lug +-- ---------------------------- +DROP TABLE IF EXISTS `ap_lug`; +CREATE TABLE `ap_lug` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `isinout` int(11) NOT NULL COMMENT '|登录|,BOOL,登入.登出', + `loguser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `addtimes` bigint(20) NOT NULL COMMENT '发生日期,DATE', + `ip` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'IP,IP', + `model` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备指纹', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3443 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登录记录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_lug +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_paper +-- ---------------------------- +DROP TABLE IF EXISTS `ap_paper`; +CREATE TABLE `ap_paper` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '显示标题', + `readcnt` int(11) NOT NULL DEFAULT 0 COMMENT '阅读数|', + `inputuser` int(11) NOT NULL COMMENT '撰写人,CATA,adminuser', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + `content` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',内容,MD', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '独立文档表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_paper +-- ---------------------------- +INSERT INTO `ap_paper` VALUES (1, '关于平台', '', 140, 10, 1750889405, '[MD]无标题通屏效果\n建议顶部图片留有60px的空间,躲避刘海屏'); +INSERT INTO `ap_paper` VALUES (2, '软件帮助', '', 29, 10, 1750889540, '[MD]#大标题\n#c标题居中\n##小标题\n###小标题\n正文\n###小标题\n####四级标题\n正文\n####四级标题\n正文\n##小标题\n正文\n@c居中显示\n@r右侧显示\n反引号`强调`显示\n\n!/ud/2024/07/16/paper/1017421516.mp3\n'); +INSERT INTO `ap_paper` VALUES (3, '用户协议', '用户协议', 33, 10, 1737970492, '[MD]用户协议xxx'); +INSERT INTO `ap_paper` VALUES (4, '隐私协议', '', 0, 10, 1750889552, '[MD]'); + +-- ---------------------------- +-- Table structure for ap_pnt_bundle +-- ---------------------------- +DROP TABLE IF EXISTS `ap_pnt_bundle`; +CREATE TABLE `ap_pnt_bundle` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `buypnt` int(11) NOT NULL COMMENT '金币|,INT', + `buymoney` int(11) NOT NULL COMMENT '金额|,CNY', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '金币套餐表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_pnt_bundle +-- ---------------------------- +INSERT INTO `ap_pnt_bundle` VALUES (1, 1000, 200); +INSERT INTO `ap_pnt_bundle` VALUES (2, 8000, 1000); +INSERT INTO `ap_pnt_bundle` VALUES (3, 18000, 2000); +INSERT INTO `ap_pnt_bundle` VALUES (4, 100000, 10000); +INSERT INTO `ap_pnt_bundle` VALUES (5, 200000, 20000); +INSERT INTO `ap_pnt_bundle` VALUES (6, 500000, 50000); + +-- ---------------------------- +-- Table structure for ap_pnt_buy +-- ---------------------------- +DROP TABLE IF EXISTS `ap_pnt_buy`; +CREATE TABLE `ap_pnt_buy` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '支付流水', + `pnt` int(11) NOT NULL COMMENT '金币|,INT', + `buypntmoney` int(10) NOT NULL COMMENT '金额|,CNY', + `addtimes` bigint(20) NOT NULL COMMENT '提交时间,DATE', + `paytimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '支付时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '金币购买记录' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_pnt_buy +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_pnt_record +-- ---------------------------- +DROP TABLE IF EXISTS `ap_pnt_record`; +CREATE TABLE `ap_pnt_record` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `addtimes` bigint(20) NOT NULL COMMENT '发生时间,DATE', + `pnt` int(11) NOT NULL COMMENT '积分|,INT', + `fromid` int(11) NOT NULL DEFAULT 0, + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '摘要', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 117 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '积分流水' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_pnt_record +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_pnt_track +-- ---------------------------- +DROP TABLE IF EXISTS `ap_pnt_track`; +CREATE TABLE `ap_pnt_track` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '|TrackID|', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '埋点名称', + `point` int(11) NOT NULL COMMENT '可获金币|,INT,分', + `limh24` int(11) NOT NULL COMMENT '24小时上限|,INT,分', + `adminuser` int(11) NOT NULL COMMENT '操作人,CATA,adminuser', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '积分埋点表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_pnt_track +-- ---------------------------- +INSERT INTO `ap_pnt_track` VALUES (1, '登录签到', 2, 2, 10, 1738132278); + +-- ---------------------------- +-- Table structure for ap_tokapi +-- ---------------------------- +DROP TABLE IF EXISTS `ap_tokapi`; +CREATE TABLE `ap_tokapi` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '|appid|', + `vuser` bigint(20) NOT NULL COMMENT '用户,DB,ap_user', + `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 '|公钥证书|', + `returnurl` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '回调链接', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 215698 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API授权管理' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_tokapi +-- ---------------------------- + +-- ---------------------------- +-- 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; + +-- ---------------------------- +-- Records of ap_transfer +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_user +-- ---------------------------- +DROP TABLE IF EXISTS `ap_user`; +CREATE TABLE `ap_user` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '|会员编号|', + `icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '头像,IMG1', + `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称', + `mobile` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号', + `userlevel` int(11) NOT NULL COMMENT '|用户等级|,CATA,userlevel', + `stpstatus` int(11) NOT NULL COMMENT '|账号状态|,CATA,stpstatus', + `mymoney` int(11) NOT NULL DEFAULT 0 COMMENT '可用余额|,CNY', + `mycashmoney` int(11) NOT NULL DEFAULT 0 COMMENT '可提现余额|,CNY', + `myinvmoney` int(11) NOT NULL COMMENT '待开票金额|,CNY', + `mybondmoney` int(11) NOT NULL DEFAULT 0 COMMENT '保证金|,CNY', + `mypnt` int(11) NOT NULL COMMENT '积分|,INT', + `certs` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '认证,CATS,certs', + `accounttimes` bigint(20) NOT NULL COMMENT '有效期至,DATE,Y-m-d', + `logintimes` bigint(20) NOT NULL COMMENT '登录时间,DATE', + `addtimes` bigint(20) NOT NULL COMMENT '注册日期,DATE,Y-m-d', + `upid` int(11) NOT NULL COMMENT '分享人,DB,ep_user', + `password` varchar(70) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT ',密码', + `trytime` int(11) NOT NULL DEFAULT 0 COMMENT ',密码重试次数', + `memo` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', + `power` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT ',权限表', + `wxunionid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT ',微信UnionID', + `wxminaid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT ',小程序OpenID', + `wxminakey` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT ',小程序Key', + `sid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT ',授权码', + `exptimes` bigint(20) NOT NULL COMMENT ',授权过期时间,DATE', + `ip` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '#登录IP,IP', + PRIMARY KEY (`id`) USING BTREE, + INDEX `mobile`(`mobile`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 187 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员主表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_user +-- ---------------------------- +INSERT INTO `ap_user` VALUES (100, '', '众产用户1', '1', 10, 10, 0, 15222, 0, 0, 1016, '', 1881085490, 1768651495, 1751086978, 0, 'd527d1bf5fe6a4361f230af48e36e1c4', 0, '', '', '', '', '', '', 1768688483, ''); +-- ---------------------------- +-- Table structure for ap_usr_buy_bundle +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_buy_bundle`; +CREATE TABLE `ap_usr_buy_bundle` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '套餐说明', + `userlevel` int(11) NOT NULL COMMENT '对应等级,CATA,userlevel', + `days` int(11) NOT NULL COMMENT '天数|,INT', + `usermoney` int(11) NOT NULL COMMENT '金额|,CNY', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员套餐表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_buy_bundle +-- ---------------------------- +INSERT INTO `ap_usr_buy_bundle` VALUES (1, '30天', 10, 30, 880); +INSERT INTO `ap_usr_buy_bundle` VALUES (2, '全年', 10, 365, 6800); +INSERT INTO `ap_usr_buy_bundle` VALUES (3, '永久', 10, 36500, 68800); + +-- ---------------------------- +-- Table structure for ap_usr_buy_user +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_buy_user`; +CREATE TABLE `ap_usr_buy_user` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `bundleid` int(11) NOT NULL COMMENT '所属套餐,DB,ap_usr_buy_bundle', + `userlevel` int(11) NOT NULL COMMENT '对应等级,CATA,userlevel', + `days` int(11) NOT NULL COMMENT '会员天数|,INT', + `buydaymoney` int(10) NOT NULL COMMENT '金额|,CNY', + `addtimes` bigint(20) NOT NULL COMMENT '提交时间,DATE', + `paytimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '支付时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 78 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员购买记录' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_buy_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_capcode +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_capcode`; +CREATE TABLE `ap_usr_capcode` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `account` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '账号', + `code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '验证码', + `addtimes` bigint(20) NOT NULL COMMENT '生成时间,DATE', + `exptimes` bigint(20) NOT NULL COMMENT '到期时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户验证码表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_capcode +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_ext +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_ext`; +CREATE TABLE `ap_usr_ext` ( + `id` bigint(20) NOT NULL, + `truename` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '真实姓名', + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '电子信箱', + `wxno` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信号', + `idid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '身份证号', + `cciy` bigint(20) NOT NULL DEFAULT 0 COMMENT '众识码,CCIY', + `appcid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'APPpush', + `cashtype` int(11) NOT NULL DEFAULT 2 COMMENT '提现方式,BOOL,网银提现.微信提现', + `bankaccount` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '账户名称', + `bankno` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '银行卡号', + `bankname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '开户银行', + `bankcode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '联行号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员副表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_ext +-- ---------------------------- +INSERT INTO `ap_usr_ext` VALUES (100, '', '', '', '', 0, '', 1, '', '', '', ''); + +-- ---------------------------- +-- Table structure for ap_usr_invoicetitle +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_invoicetitle`; +CREATE TABLE `ap_usr_invoicetitle` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `taxnumber` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '税号', + `addr` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '单位地址', + `phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '电话号码', + `bankname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '银行名称', + `bankaccount` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '银行账号', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发票抬头表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_invoicetitle +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_invoicing +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_invoicing`; +CREATE TABLE `ap_usr_invoicing` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `invoicemoney` int(11) NOT NULL COMMENT '开票金额|,CNY', + `invoicetitleid` int(11) NOT NULL COMMENT ',所属抬头,DB,ap_usr_invoicetitle', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `taxnumber` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',税号', + `addr` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',单位地址', + `phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',电话号码', + `bankname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',银行名称', + `bankaccount` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',银行账号', + `addtimes` bigint(20) NOT NULL COMMENT '申请时间,DATE', + `invtimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '开票时间,DATE', + `invuser` int(11) NOT NULL DEFAULT 0 COMMENT '开票人,CATU,adminuser', + `invfile` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发票,DOWN', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发票开票表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_invoicing +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_problechat +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_problechat`; +CREATE TABLE `ap_usr_problechat` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `problemid` int(11) NOT NULL, + `sendtype` int(11) NOT NULL COMMENT '发送人,TINT,1.用户,2.平台,3.AI客服', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '答复内容', + `addtimes` bigint(20) NOT NULL COMMENT '发送时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '工单对话表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_problechat +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_problem +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_problem`; +CREATE TABLE `ap_usr_problem` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `contract` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '联系方式', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '工单提问,BR', + `imgs` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '图片,IMG', + `addtimes` bigint(20) NOT NULL COMMENT '提交时间,DATE', + `replytimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '回复时间,DATE', + `closetimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '关闭时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '问题工单表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_problem +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_real_apply +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_real_apply`; +CREATE TABLE `ap_usr_real_apply` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `auditstatus` int(11) NOT NULL COMMENT '|审核状态|,CATA,auditstatus', + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '真实姓名', + `idid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '身份证号', + `idcard1` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '身份证人像面,IMG1', + `idcard2` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '身份证国徽面,IMG1', + `addtimes` bigint(20) NOT NULL COMMENT '申请时间,DATE', + `audituser` int(11) NOT NULL DEFAULT 0 COMMENT '审核员,CATA,adminuser', + `audittimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '审核时间,DATE', + `auditmsg` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '驳回原因', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '实名认证申请表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_real_apply +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_sendmail +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_sendmail`; +CREATE TABLE `ap_usr_sendmail` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `vuser` int(11) NOT NULL COMMENT '所属用户,DB,ap_user', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '邮件地址', + `chan` int(11) NOT NULL COMMENT '通道号', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',邮件内容', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + `sendtimes` bigint(20) NOT NULL COMMENT '发送时间,DATE', + `donetimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '完成时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发送邮件' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_sendmail +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_sendsms +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_sendsms`; +CREATE TABLE `ap_usr_sendsms` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `vuser` int(11) NOT NULL COMMENT '所属用户,DB,ap_user', + `mobile` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号', + `chan` int(11) NOT NULL COMMENT '通道号', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',JSON内容', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + `sendtimes` bigint(20) NOT NULL COMMENT '发送时间,DATE', + `donetimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '完成时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 138 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发送短信' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_sendsms +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_shipaddr +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_shipaddr`; +CREATE TABLE `ap_usr_shipaddr` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `areacode` int(11) NOT NULL COMMENT '所在地区,CATM,ciy_arearpc|?', + `addr` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '详细地址', + `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '收件人', + `phone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '联系电话', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 70 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '收货地址表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_shipaddr +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ap_usr_suggest +-- ---------------------------- +DROP TABLE IF EXISTS `ap_usr_suggest`; +CREATE TABLE `ap_usr_suggest` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `vuser` bigint(20) NOT NULL COMMENT '所属用户,DB,ap_user', + `contract` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '联系方式', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '建议内容,BR', + `imgs` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '图片,IMG', + `addtimes` bigint(20) NOT NULL COMMENT '提交时间,DATE', + `replyuser` int(11) NOT NULL DEFAULT 0 COMMENT '答复人,CATA,adminuser', + `replytimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '答复时间,DATE', + `replymsg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '答复内容,BR', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '意见建议表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ap_usr_suggest +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ciy_bankcode +-- ---------------------------- +DROP TABLE IF EXISTS `ciy_bankcode`; +CREATE TABLE `ciy_bankcode` ( + `id` bigint(20) NOT NULL COMMENT '联行号', + `bkcode` int(11) NOT NULL COMMENT '前三位银行码', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '银行名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '中国联行号' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of ciy_bankcode +-- ---------------------------- + +-- ---------------------------- +-- Table structure for demo_normal +-- ---------------------------- +DROP TABLE IF EXISTS `demo_normal`; +CREATE TABLE `demo_normal` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID,ENID', + `auditstatus` int(11) NOT NULL COMMENT '|审核状态|,CATA,auditstatus', + `audituser` int(11) NOT NULL DEFAULT 0 COMMENT '审核人,CATU,adminuser', + `audittimes` bigint(20) NOT NULL COMMENT '审核时间,DATE', + `auditmsg` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '审核理由', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '默认标题', + `menuid` int(11) NOT NULL COMMENT '所属菜单,DB,zc_menu', + `filesize` int(11) NOT NULL COMMENT '文件大小|,FSIZE', + `metre` int(11) NOT NULL COMMENT '长度|,METRE', + `bankmoney` bigint(20) NOT NULL COMMENT '贷款金额|,WCNY', + `setdate` bigint(20) NOT NULL COMMENT '设置日期,DATE,Y-m-d', + `settimes` bigint(20) NOT NULL COMMENT '设置时间,DATE', + `dayclock` int(11) NOT NULL COMMENT '|营业时间|,TIME,H:i:s', + `downurl` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '|文档|,IMG,t', + `avar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '头像,IMG1', + `isuse` int(11) NOT NULL COMMENT '|是否使用|,BOOL', + `isopen` int(11) NOT NULL COMMENT '|是否开启|,BOOL,开启.关闭', + `unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '库存单位,UNIT', + `sigstatus` int(11) NOT NULL COMMENT '|单选状态|,CATA,auditstatus', + `mauditstatus` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '多选状态,CATS,auditstatus|~', + `prodcata` int(11) NOT NULL COMMENT '组织结构,CATM,zc_depart', + `areacode` int(11) NOT NULL COMMENT '所在地区,CATM,ciy_arearpc|?', + `renzheng` int(11) NOT NULL COMMENT '认证情况,TBIN,re.nz.he.ng|?', + `ppint` int(11) NOT NULL COMMENT '|临时字典|,TINT,1:aaa.3:bbbb.5:cccc', + `npcyc` int(11) NOT NULL COMMENT '|执行周期|,CYC', + `runsec` int(11) NOT NULL COMMENT '执行用时|,SEC', + `acttm` int(11) NOT NULL COMMENT '活动期数|,INT,第?期', + `imgs` varchar(800) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '活动花絮,IMG,?50', + `ton` bigint(20) NOT NULL COMMENT '吨位|,TON', + `price` bigint(20) NOT NULL COMMENT '单价|,CNY', + `lat` int(11) NOT NULL COMMENT ',纬度', + `lng` int(11) NOT NULL COMMENT '|位置|,LOC,lat', + `pct` int(11) NOT NULL COMMENT '百分比|,PCT', + `url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '链接,URL,跳转', + `weightg` bigint(20) NOT NULL COMMENT '体重|,KG,1,KG|1000|吨', + `eartmpr` int(11) NOT NULL COMMENT '耳温|,TC,3', + `qian` bigint(20) NOT NULL COMMENT '中式钱|,LNY', + `meishi` bigint(20) NOT NULL COMMENT '美式钱|,SNY', + `weight` bigint(20) NOT NULL COMMENT '重量|,WGT,G.*KG.TON,1', + `height` bigint(20) NOT NULL COMMENT '长度|,LGH', + `skt` bigint(20) NOT NULL COMMENT '科学数|,BET,SKT,1000,1', + `idcard` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '身份证号,MSK,******#*', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + `content` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',介绍,BR', + `md` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',富文本,MD', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 78 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '复杂功能表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of demo_normal +-- ---------------------------- +INSERT INTO `demo_normal` VALUES (11, 100, 10, 1746396705, '', '区块同步', 0, 0, 0, 0, 0, 0, 0, '', '', 2, 2, '', 0, '', 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, '', 1746396698, '', '[MD]'); + +-- ---------------------------- +-- 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 utf8mb4 COLLATE utf8mb4_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 = 155 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_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, 1757412998); + +-- ---------------------------- +-- Table structure for www_content +-- ---------------------------- +DROP TABLE IF EXISTS `www_content`; +CREATE TABLE `www_content` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目,DB,www_list_cate', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容主题', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',浓缩内容,BR', + `qutime` int(11) NOT NULL COMMENT '引用次数|', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 385 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '浓缩知识' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_content +-- ---------------------------- + +-- ---------------------------- +-- Table structure for www_customer +-- ---------------------------- +DROP TABLE IF EXISTS `www_customer`; +CREATE TABLE `www_customer` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `fromurl` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '来源页面', + `mobile` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号', + `demandinfo` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '需求信息,BR', + `addtimes` bigint(20) NOT NULL COMMENT '提交时间,DATE', + `contacttimes` bigint(20) NOT NULL COMMENT '接待时间,DATE', + `memo` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '接待备注,BR', + `contactadmin` int(11) NOT NULL COMMENT '接待人,CATA,adminuser', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 385 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户线索' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_customer +-- ---------------------------- + +-- ---------------------------- +-- Table structure for www_keyword +-- ---------------------------- +DROP TABLE IF EXISTS `www_keyword`; +CREATE TABLE `www_keyword` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目,DB,www_list_cate', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关键词', + `usetime` int(11) NOT NULL COMMENT '使用次数|', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 385 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '关键词库' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_keyword +-- ---------------------------- + +-- ---------------------------- +-- Table structure for www_list_art +-- ---------------------------- +DROP TABLE IF EXISTS `www_list_art`; +CREATE TABLE `www_list_art` ( + `id` int(11) NOT NULL COMMENT '|ID|', + `cateid` int(11) NOT NULL COMMENT '所属栏目,DB,www_list_cate', + `clickcnt` int(11) NOT NULL COMMENT '点击量|', + `icon` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '缩略图,IMG', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主标题', + `seotitle` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SEO标题', + `keyw` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关键词', + `author` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '作者', + `descs` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',摘要,BR', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',内容,MD', + `csort` int(11) NOT NULL COMMENT '|排序|', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + `vadmin` int(11) NOT NULL COMMENT '操作人,CATA,adminuser', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '已发文章' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_list_art +-- ---------------------------- +INSERT INTO `www_list_art` VALUES (434, 2, 1001, '', '三星级农贸市场收费软件', '', '三星级农贸市场,三星级农贸市场收费软件,农贸市场', '', '很多人都知道,智慧农贸批发当下势头舒展,而软件作为农贸批发市场一般经营必不或缺的少部分,有着举足轻重的现象。市场方能通过网络上买卖称重数据,与网络上支出信息数据两', '

\n很多人都知道,智慧农贸批发当下势头舒展,而软件作为农贸批发市场一般经营必不或缺的少部分,有着举足轻重的现象。市场方能通过网络上买卖称重数据,与网络上支出信息数据两者比较,构成解析,为市场上运作决策做应当统计及保证;为经营户提供了多样化、多平台、多渠道的计量手段,有效果减少了客户换零钱、找零钱、跑机械等困扰。同如今消费群众提供了1个安心、安全、快捷的买东西场所。\n

\n

\n智慧农贸改造高星市场上精品化。在电脑部件、管理服务等角度提档更新,用心制作一批拥有示范引导效用的四星级及上面所说设计图市场。业态持续发展多方位。改进农贸市场谋划配置、琢磨以邻里重点方式为主新建或改建水产批发市场。进展网络上配送服务,采用互联网上下单、市场上发货、第三方配送的经营方式。\n

\n

\n智能化果蔬批发选择媒体发布系统的好的地方:1、起到的作用资讯公示的结果,方便客户晓得市场内包含商户、菜价、优惠这个项目、检查内容等数据。 2、内容统一整理至云端,操作市场上运营方登入平台后台查询网上经营现状,既有利于农批市场对外招商引导流量,对内传达提高行业里服务质量,争创星级水产批发市场。\n

\n

\n智能水产批发转型提升星级化。对乡村无星级网上及城区一星级及下面的农贸批发市场实行分批星级化改造,大幅提升三星级及以上水产批发市场在全市农批市场中的占比。对存在安全影响、规模小、功能差,不符合网上名称登记说明的市场,照章实施退出制度。\n

\n

\n
\n

', 1, 0, 0); +INSERT INTO `www_list_art` VALUES (435, 2, 1190, '', '智能养殖解决方案', '', '智能养殖解决方案,智能养殖,', '', '随着计算机互联网通信能力、二维码读取、无绳射频识别能力(RFID)、远红外识别器、全球明确软件等等资讯传输设备的发展,物联网技巧从不可触摸通向现世,融合人们消费,宽泛使', '

\n

\n  随着计算机互联网通信能力、二维码读取、无绳射频识别能力(RFID)、远红外识别器、全球明确软件等等资讯传输设备的发展,物联网技巧从不可触摸通向现世,融合人们消费,宽泛使用在各产业,畜牧业也走进IoT聚焦时代。在促成农牧畜牧规模化、集成化、公开化、智能化、行业化、市场化、智能的进程中,不光一定要放牧康复技艺与工业化放牧的系统情况,也应该需要批量计算机信息使用软件研发。\n

\n

\n  于IoT技艺的引导下,普通的“后院养殖”刚好逐渐消亡。随便专一的专业养殖场,或者传统养殖个体经营户,都会先便捷便利的坚持智能化的养殖操作执行。物联网技艺甚或最好于一样的养殖范围中,制作着不同的的放牧管理模式,到最后提升牧场的产能与价值,成为一个超级给力的“饲养高手”。\n

\n

\n  奇博科学智能农牧管理系统在统计各类放牧全程的最宝贵经历的基础上做到网络与畜禽身份各类甄别电子耳标技艺相结合,遵守政府农业发展“整合资源、系统集成”的指导方针,重点是依据农牧业放牧标准化、人性化和质量安全体系建设说明,因此实现农牧业的品类、繁殖发育、饲料、豢养、检疫、组件、生长发育环境等创造生产、交易流程。凭据畜牧商品的生长的时候,个性化的付出饲料,达到细致饲养,降低成本。达到节省时间、增产增收的目标。\n

', 1, 0, 0); +INSERT INTO `www_list_art` VALUES (436, 2, 891, '', '纳服绩效系统软件', '', '纳服绩效系统软件,纳服绩效,', '', '18大以来,税务总局深层次履行施行政府涉及“严谨KPI维护”的品质,依靠国家对于“推进政府绩效总管”的部署,从前几年用税务KPI维护,从之前的版本到当下的新版本,连续订正、', '

\n  18大以来,税务总局深层次履行施行政府涉及“严谨KPI维护”的品质,依靠国家对于“推进政府绩效总管”的部署,从前几年用税务KPI维护,从之前的版本到当下的新版本,连续订正、不畏荆棘成正途,促使标准规范越来越改善、考评实行更加严实、操作体制越发确定、综合作用更明显。航天金税三期上线走进了其中之一新的信息化时代。\n

\n

\n  办税大厅是税务部门的服务,税务服务人员的显示则会代表了税务部门的名誉。办税员要养成优良的做事嗜好,每天上班前周全安排,每一笔业务认真查对,天天完工后认真清点,快速统计剖析,增加对细节的知名度,改错操作执行过失,为之后的作事积聚阅历。需要有稍强的生意技巧能力。纳税服务众多是杂事,小事,但做的有效果这些个琐细的、详细的、乏味的事件要较强的单子技巧能力,可以在第一个时候觉得详细上要调整的地方并且给出正确的的领会。\n

\n

\n  增强结论按照,对税务单位负责人进行订单调整、提拔、升级的时候,应以考核结论为关键依据,可缩小人为缘由与不确定根源。税务单位平时考察结论与季度奖励领取相关。级别区别,依照KPI数据来源设定KPI等级规则,就如这样就可以对考核效果坚持分等,例如优、良、差等 。这么多的税收机关一直有自己对等级划分的规范,在目标绩效管控模块中就可以活跃定义。上海奇博科技航天金税三期办税服务服务大厅绩效考察维护工具是有这考察结果采用的功能\n

', 1, 0, 0); +INSERT INTO `www_list_art` VALUES (437, 2, 1539, '', '税务绩效管理方案', '', '税务绩效管理方案,税务绩效管理,', '', '曾经政府举行专题会议,指引要快点建设按照增强增值税管理替重要目标的“金税工程”。大会赞同用人民银行清理中心网络建设交叉审视工具,同期标出防伪税控平台需先试点,后采', '

\n  曾经政府举行专题会议,指引要快点建设按照增强增值税管理替重要目标的“金税工程”。大会赞同用人民银行清理中心网络建设交叉审视工具,同期标出防伪税控平台需先试点,后采取。为团体实行此项工程项目,国家建立了国家税控工具搭建协调总管小组,下属“金税项目”做事部门,详细负责机构、调和平台建设办事。为航天金税三期上线指明了角度\n

\n

\n  华夏税务项目部门仰仗厉害的内容软件,达到对考核数据的自动收集、的时候掌控和业绩评价,使我国国家税收总局必定追查绩效指标的进行进度,保证各个部门和各个干部都了解自身办事的短板和追赶的目标,彰显了绩效管理持续校正的根本要义。强化能力支撑,没有停止的提升绩效管理工作质效。强化组织保障,业绩维护博取税务骨干广博帮助。机构保障是税务公司部门KPI维护不可或缺的组成部分。用在中国我国税收总局和各个省份税收部门设置KPI管理需求岗位,重复的提高业绩管控的专业化水准。\n

\n

\n  加强结论凭据,对税务机关负责人实行订单调整、选拔、晋级的时间,应该用考核结果替重要依据,可减少人为因素与不确切根源。税务机关平常考察结论与按季度分成发送挂钩。级数划分,遵照绩效数据来源要求绩效级别规则,如此便可以了对考察得分坚持分等,比如优、良、差等 。这些税务机关一直有自身对级数划分的准则,在目的业绩管理设备终端中绝对可以灵活设置。上海奇博科技航天金税三期税收服务服务大厅业绩考核维护工具便是具有这考核结果采取的功能\n

', 1, 0, 0); +INSERT INTO `www_list_art` VALUES (438, 2, 2039, '', '畜牧业智能养殖计步器', '', '畜牧业智能养殖计步器,畜牧业智能养殖,', '', '近年来,在中央对畜禽标准化规模畜牧等协助体制的展开下,我国畜牧业刚好身在由一般养殖向当今畜牧变革的重要年代。智能化放牧总管,就可以实现畜牧智能化,设计不同的的养殖', '

\n

\n  近年来,在中央对畜禽标准化规模畜牧等协助体制的展开下,我国畜牧业刚好身在由一般养殖向当今畜牧变革的重要年代。智能化放牧总管,就可以实现畜牧智能化,设计不同的的养殖管理方式,提高养殖场的产量和价值,让养殖户快速已经是一个超级过得去的“养殖权威”。\n

\n

\n  农牧业是全体农牧业生产中规模化水准最厉害,能力、设备与成本消耗相比而言聚集的范围之一。在畜牧养殖领域管控生活中,智能放牧总管方案的应用就能实现畜牧场地信息化、智慧远程管理,充分发挥物联网技术在部件养殖生产中的结果,能确保养殖场地内环境适宜放牧畜禽生长发育,实现精细化的维护,为养殖牛羊的深了、好的、高效、自然、安全创造条件,帮客户提高效率、降低成本、提高获取。普遍的放牧方式相较于农民来说不只是有浪费时间,还不要保证羊群的舒服状况是活动情况,智能放牧绝对可以去掉这个难题。\n

\n

\n  奇博科技智能农牧管理系统其重点技术受到几个方面:一则是智能化穿设备的集成度;再者是对数据处理的AI算法。好的智能化家畜管理系统是要在一些这个运动牲口的此刻达成最准确的彩票预测。让AI跟畜牧养殖学更好用的连结,应该更新十分的的信息数据相关性,进而更进执行,进步准确率。集成智能化无绳射频传感RFID、无线通讯、智能控制系统和下载监控系统等专业技艺,对放牧空气、生长发育状态等实行全方面监控管控,实行认真归纳。\n

', 1, 0, 0); +INSERT INTO `www_list_art` VALUES (439, 2, 1229, '', '大型蔬菜批发市场管理系统', '', '大型蔬菜批发市场,大型蔬菜批发市场管理系统', '', '城市化进展提升极速,各类大楼拔地而起,科技发展更是蒸蒸日上。而水产批发市场却好像被忽视般,与“高大上”的城区不相符合,必定是落后,甚至于脏乱的。自然,现在各监控部', '

\n城市化进展提升极速,各类大楼拔地而起,科技发展更是蒸蒸日上。而水产批发市场却好像被忽视般,与“高大上”的城区不相符合,必定是落后,甚至于脏乱的。自然,现在各监控部门已经注意到这一点,在不同省份农贸市场监控部门参观了改造革新的设计图智能蔬菜批发市场后,也都就意味着智能化水产批发以后已往N多年的转型趋向和焦点新闻。\n

\n

\n智能化蔬菜批发应该需要用到食品安全追溯工具,普遍模块寻常包容:使用安心水产批发市场食品安全追溯系统,就能够溯源农批市场的客户信息、供求资讯、供应内容、菜品资讯以及检验资讯,让农贸市场感受保证更放心、更安心,让我国看管更快捷方便。顾客最好盘查到买菜品从批发、流通、再到网上的供应商源头信息或者供给日期等内容,源头溯源盘查。\n

\n

\n智慧水产批发选择媒体发布工具的好的地方:1、获得的效果信息公示的影响,操作购买者了解市场内涵概企业、菜价、优惠活动、检验信息等信息数据。 2、讯息统一聚集至云端,便利网上运营方登入系统后台看一下市场运作状况,既有利于农贸市场对外招商流量导入,对内推销提升网上服务质量,争创星级农贸市场。\n

\n

\n智能水产批发改革看管技术智慧化。加速推进水产批发市场智慧化改造,运用智能配件设备,展开蔬菜批发市场智能化化维护,因此实现智能付账、购买溯源、计量总管、报价监测等智能化总管和技术模式,为消费者提供便利化智能化化服务。 四周整顿有序化。农贸批发市场界线500米内,原则上不可以成立“临时疏导点”。水产批发市场地域200米内,不提倡设置与市场内运作水产、肉食类、蔬菜、豆制品、熟食等同种用品的运作部门。\n

\n

\n
\n

', 1, 0, 0); + +-- ---------------------------- +-- Table structure for www_list_cate +-- ---------------------------- +DROP TABLE IF EXISTS `www_list_cate`; +CREATE TABLE `www_list_cate` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '|ID|', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '栏目名', + `precnt` int(11) NOT NULL COMMENT '储备文章数|', + `daysent` int(11) NOT NULL COMMENT '日发布量|', + `bprenow` int(11) NOT NULL COMMENT '|直发否|,BOOL', + `promptcute` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',提示词,BR', + `seotitle` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SEO标题', + `keyw` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关键词', + `descs` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',摘要,BR', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + `vadmin` int(11) NOT NULL COMMENT '操作人,CATA,adminuser', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '栏目管理' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_list_cate +-- ---------------------------- +INSERT INTO `www_list_cate` VALUES (1, '动态', 0, 0, 0, '', '动态', '', '', 1582856765, 1582854060, 103); +INSERT INTO `www_list_cate` VALUES (2, '文章资讯', 0, 0, 0, '', '文章资讯-xx科技有限公司', '文章资讯', '文章资讯', 1594395880, 1594395778, 103); + +-- ---------------------------- +-- Table structure for www_list_preart +-- ---------------------------- +DROP TABLE IF EXISTS `www_list_preart`; +CREATE TABLE `www_list_preart` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '|ID|', + `cateid` int(11) NOT NULL COMMENT '所属栏目,DB,www_list_cate', + `preartstatus` int(11) NOT NULL COMMENT '文章状态,TINT,10.草稿,20.待发,100.已发', + `icon` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '缩略图,IMG', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主标题', + `seotitle` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SEO标题', + `keyw` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关键词', + `author` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '作者', + `descs` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',摘要,BR', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',内容,MD', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + `vadmin` int(11) NOT NULL COMMENT '创建人,CATA,adminuser', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3043 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '待发文章' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_list_preart +-- ---------------------------- + +-- ---------------------------- +-- Table structure for www_seoplan +-- ---------------------------- +DROP TABLE IF EXISTS `www_seoplan`; +CREATE TABLE `www_seoplan` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目,DB,www_list_cate', + `starttimes` bigint(20) NOT NULL COMMENT '开始日期,DATE,Y-m-d', + `endtimes` bigint(20) NOT NULL COMMENT '结束日期,DATE,Y-m-d', + `promptseo` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '推广方向提示词,BR', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 385 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'SEO规划' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_seoplan +-- ---------------------------- + +-- ---------------------------- +-- Table structure for www_seoword +-- ---------------------------- +DROP TABLE IF EXISTS `www_seoword`; +CREATE TABLE `www_seoword` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目,DB,www_list_cate', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关键词', + `url` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '链接', + `rank` int(11) NOT NULL COMMENT '权重|,INT', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `title`(`name`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 385 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '锚内关键词' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_seoword +-- ---------------------------- +INSERT INTO `www_seoword` VALUES (271, 0, '养殖代养', 'https://www.qiboc.cn/agro/1618.html', 50); +INSERT INTO `www_seoword` VALUES (272, 0, '养殖集团', 'https://www.qiboc.cn/agro/1619.html', 50); +INSERT INTO `www_seoword` VALUES (275, 0, '闲置计算机', 'https://www.qiboc.cn/agro/1619.html', 50); +INSERT INTO `www_seoword` VALUES (276, 0, '养殖合作社', 'https://www.qiboc.cn/agro/1617.html', 50); +INSERT INTO `www_seoword` VALUES (277, 0, '农村养殖合作', 'https://www.qiboc.cn/agro/1617.html', 50); +INSERT INTO `www_seoword` VALUES (281, 0, '智慧校园平台', 'http://www.qiboc.cn/campus/', 20); +INSERT INTO `www_seoword` VALUES (282, 0, '智慧校园管理系统平台', 'http://www.qiboc.cn/campus/', 20); + +-- ---------------------------- +-- Table structure for www_single +-- ---------------------------- +DROP TABLE IF EXISTS `www_single`; +CREATE TABLE `www_single` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '|ID|', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主标题', + `seotitle` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SEO标题', + `keyw` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关键词', + `author` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '作者', + `descs` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',摘要,BR', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',内容,MD', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + `vadmin` int(11) NOT NULL COMMENT '创建人,CATA,adminuser', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '网站单页库' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_single +-- ---------------------------- +INSERT INTO `www_single` VALUES (3, '分布式云计算', '云计算|分布式云计算', '分布式云计算', '', '分布式云计算攻克了分布式云平台计费结算难题,创建了“去中心化的计费结算模型”,云计算平台需求方和资源方之间的频繁结算不需要中心计费服务器,计费结算过程不依赖“账本”,可实现超大规模并行结算', '[MD]\r\n!https://qiboc.cn/templets/htmlimg/1-1.1.png\r\n#项目介绍\n将互联网上的海量闲置计算机通过P2PT健康组网技术和虚拟化技术,把海量计算机闲置的计算资源和网络资源有效利用起来,形成超大规模分布式的云计算平台。 该项目特点是几乎无需投入硬件服务器即可实现上成百上千万台计算机组网工作,投入成本极低。组网后的云平台,能够完成诸如互联网舆情监控、分布式编译、分布式3D渲染、大规模科学计算、证券分析等工作,按需支付算力。\r\n我们创新性的攻克了分布式云平台计费结算难题,借鉴了BitCoin比特币原理,创建了“去中心化的计费结算模型”,云计算平台需求方和资源方之间的频繁结算不需要中心计费服务器,计费结算过程不依赖“账本”,可实现超大规模并行结算,此创新为超大规模分布式云计算平台商用化扫清了道路。\r\n!https://qiboc.cn/templets/htmlimg/1-1.2.png\r\n#发展阶段\r\n本项目由公司孵化中心进行研发工作。目前主要为云爪平台提供大规模数据计算做底层业务支撑。\r\n作为PaaS平台,当前仅支持C#,未来我们将通过虚拟机技术支持多种开发工具,开发者可利用C++、C#、Java、Javascript、Perl、MatLab等编程语言接入,进行大规模并行计算商业逻辑的开发对接。\r\n当前资源性能:每万计算节点贡献约150TFLOPS计算能力,提供超过40Gbps宽带资源。\r\n#P2PT健康组网模型\r\n!https://qiboc.cn/templets/htmlimg/2-1.1.png\r\n!https://qiboc.cn/templets/htmlimg/2-1.2.png\r\n#去中心化计费结算模型\r\n!https://qiboc.cn/templets/htmlimg/2-1.3.png\r\n!https://qiboc.cn/templets/htmlimg/2-1.4.png', 1594319108, 1769161032, 10); + +-- ---------------------------- +-- Table structure for www_tmplart +-- ---------------------------- +DROP TABLE IF EXISTS `www_tmplart`; +CREATE TABLE `www_tmplart` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cateid` int(11) NOT NULL COMMENT '所属栏目,DB,www_list_cate', + `name` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模版主题', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',模版内容,MD', + `qutime` int(11) NOT NULL COMMENT '引用次数|', + `addtimes` bigint(20) NOT NULL COMMENT '添加时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 385 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文章模版' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of www_tmplart +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_admin +-- ---------------------------- +DROP TABLE IF EXISTS `zc_admin`; +CREATE TABLE `zc_admin` ( + `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '|ID|', + `icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '头像,IMG1', + `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '姓名', + `stpstatus` int(11) NOT NULL COMMENT '|状态|,CATA,stpstatus', + `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号,MSK,****', + `sex` int(11) NOT NULL COMMENT '|性别|,CATA,sex', + `departid` int(11) NOT NULL COMMENT '所属组织,CATM,zc_depart', + `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(70) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT ',密码', + `trytime` int(11) NOT NULL DEFAULT 0 COMMENT ',连续错误次数', + `power` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT ',权限表', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `mobile`(`mobile`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '管理员用户表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_admin +-- ---------------------------- +INSERT INTO `zc_admin` VALUES (10, '', '超级管理员', 10, '12345678901', 10, 34, 0, 1768723477, 1000000000, 'fa3046be160f84e79da4a5cf004e367997730a662598082f5181efdb8aa43dc9', 0, '.*.'); +INSERT INTO `zc_admin` VALUES (18, '', '运营官', 10, '10000452346', 10, 34, 6, 1745062148, 1721153234, 'fa3046be160f84e79da4a5cf004e367997730a662598082f5181efdb8aa43dc9', 0, '.p3624.'); + +-- ---------------------------- +-- Table structure for zc_ai_agent +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_agent`; +CREATE TABLE `zc_ai_agent` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '名称', + `aikey` int(11) NOT NULL COMMENT '执行模型,DB,zc_ai_key', + `aiprange` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',执行参量', + `funcids` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '数据函数,CATS,zc_ai_funcdata', + `sysprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',系统提示词', + `uptimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '决策智能体表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_agent +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_aigc +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_aigc`; +CREATE TABLE `zc_ai_aigc` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '名称', + `aikey` int(11) NOT NULL COMMENT '执行模型,DB,zc_ai_key', + `aiprange` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',执行参量', + `inputjson` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',预输入设置', + `funcids` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '数据函数,CATS,zc_ai_funcdata', + `uptimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新时间,DATE', + `sysprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',系统提示词', + `roleprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',用户提示词', + `resulttxt` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',示例结果', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'AIGC生成表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_aigc +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_decdbg +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_decdbg`; +CREATE TABLE `zc_ai_decdbg` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `decisionid` bigint(20) NOT NULL DEFAULT 0, + `version` int(11) NOT NULL DEFAULT 0 COMMENT '|版本|,INT', + `inputparam` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '输入数据', + `inputprompt` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',提示词', + `aichat` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',AI交互', + `resulttxt` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'AI结果', + `starttimes` int(11) NOT NULL DEFAULT 0 COMMENT '开始时间,DATE', + `reqsec` int(11) NOT NULL DEFAULT 0 COMMENT '执行时长|,SEC', + `decci` int(11) NOT NULL DEFAULT 0 COMMENT '置信度|,PCT', + `userfeedback` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '存在问题', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '决策调试表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_decdbg +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_dechistory +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_dechistory`; +CREATE TABLE `zc_ai_dechistory` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `decisionid` bigint(20) NOT NULL DEFAULT 0, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '名称', + `aikey` int(11) NOT NULL COMMENT '执行模型,DB,zc_ai_key', + `aiprange` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',执行参量', + `version` int(11) NOT NULL DEFAULT 0 COMMENT '|版本|,INT', + `funcids` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '数据函数|,CATS,zc_ai_funcdata', + `sysprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',系统提示词', + `roleprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',用户提示词', + `aicalkey` int(11) NOT NULL COMMENT '检验模型,DB,zc_ai_key', + `aicalfunc` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '检验函数', + `aicalprange` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',检验参量', + `calprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',检验提示词', + `addtimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '版本时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '决策设计表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_dechistory +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_decision +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_decision`; +CREATE TABLE `zc_ai_decision` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '|DecisionID|', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '名称', + `aikey` int(11) NOT NULL COMMENT '执行算力源,DB,zc_ai_key', + `aiprange` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',执行参量', + `version` int(11) NOT NULL DEFAULT 0 COMMENT '|版本|,INT', + `funcids` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '数据函数|,CATS,zc_ai_funcdata', + `sysprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',系统提示词', + `roleprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',用户提示词', + `aicalkey` int(11) NOT NULL COMMENT '检验算力源,DB,zc_ai_key', + `aicalfunc` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '检验函数', + `aicalprange` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',检验参量', + `calprompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',检验提示词', + `uptimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新时间,DATE', + `memo` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',调试经验', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '决策设计表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_decision +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_funcdata +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_funcdata`; +CREATE TABLE `zc_ai_funcdata` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '名称', + `funcname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '函数名', + `descs` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '函数描述', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + `funcparam` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',函数固定参数', + `paramjson` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',AI FUNC参数', + `defout` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',输出示例', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '函数数据表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_funcdata +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_key +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_key`; +CREATE TABLE `zc_ai_key` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '名称', + `model` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模型', + `balance` int(11) NOT NULL DEFAULT 0 COMMENT '余额|,CNY', + `alarmbalce` int(11) NOT NULL COMMENT '#余额警戒线|,CNY', + `baseurl` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '基础地址', + `maxtoken` int(11) NOT NULL COMMENT '最大token数|', + `aicapacity` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '能力,CATS,aicapacity', + `aikey` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '#密钥,MSK,****##******##', + `memo` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '备注', + `uptimes` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '算力源表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_key +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_knowcata +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_knowcata`; +CREATE TABLE `zc_ai_knowcata` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '知识库名称', + `aiguide` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'AI引导描述', + `knowcnt` int(11) NOT NULL COMMENT '条数|', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '知识分类表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_knowcata +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_knowledge +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_knowledge`; +CREATE TABLE `zc_ai_knowledge` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `cataid` bigint(20) NOT NULL DEFAULT 0 COMMENT ',所属分类,DB,zc_ai_knowcata', + `uptimes` bigint(20) NOT NULL COMMENT ',更新时间|,DATE', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '知识内容,BR', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '浓缩知识表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_knowledge +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_task +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_task`; +CREATE TABLE `zc_ai_task` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `aitaskstatus` int(11) NOT NULL DEFAULT 0 COMMENT '任务状态,CATA,autotaskstatus', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', + `aifunc` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务函数', + `aiparam` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',任务参数', + `autoci` int(11) NOT NULL COMMENT '主动置信度|,PCT', + `autofunc` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '执行函数', + `aicycle` int(11) NOT NULL DEFAULT 0 COMMENT '执行周期|,CYC', + `nexttimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '下次时间,DATE', + `aitimes` int(11) NOT NULL DEFAULT 0 COMMENT ',开始时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '计划任务表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_task +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ai_tsk_run +-- ---------------------------- +DROP TABLE IF EXISTS `zc_ai_tsk_run`; +CREATE TABLE `zc_ai_tsk_run` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `aitaskid` bigint(20) NOT NULL DEFAULT 0 COMMENT '所属任务,DB,zc_ai_task', + `aidotype` int(11) NOT NULL COMMENT '状态,CATA,aidotype', + `confidence` int(11) NOT NULL COMMENT '置信度|,PCT', + `addtimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '完成时间,DATE', + `runsec` int(11) NOT NULL DEFAULT 0 COMMENT '运行时长|,SEC', + `inputdata` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',输入数据', + `resultdata` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',结果数据', + `memo` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '优化建议', + `resultmodify` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',改后结果', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '执行记录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ai_tsk_run +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_autotask +-- ---------------------------- +DROP TABLE IF EXISTS `zc_autotask`; +CREATE TABLE `zc_autotask` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '|ID|', + `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务名称', + `runfunc` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '入口函数', + `runparam` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '执行参数', + `nexttimes` bigint(20) UNSIGNED NOT NULL COMMENT '下次执行时间,DATE', + `runcycle` int(11) NOT NULL COMMENT '执行周期,CYC', + `autotaskstatus` int(11) NOT NULL COMMENT '|任务状态|,CATA,autotaskstatus', + `runtimes` bigint(20) NOT NULL DEFAULT 0 COMMENT ',开始执行时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自动化任务表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_autotask +-- ---------------------------- +INSERT INTO `zc_autotask` VALUES (1, '每日清理', 'web\admin\autotask\base::dayclean', '', 1762627184, 86400, 20, 0); +INSERT INTO `zc_autotask` VALUES (2, '健康监测', 'web\admin\autotask\base::srvstats', '', 1745058716, 60, 20, 0); + +-- ---------------------------- +-- Table structure for zc_autotsk_log +-- ---------------------------- +DROP TABLE IF EXISTS `zc_autotsk_log`; +CREATE TABLE `zc_autotsk_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `autotaskid` int(11) NOT NULL COMMENT '所属任务,DB,zc_autotask', + `runtaskid` bigint(20) NOT NULL COMMENT '所属执行,DB,zc_autotsk_run', + `addtimes` bigint(20) NOT NULL COMMENT '发生时间,DATE', + `msg` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '执行记录', + PRIMARY KEY (`id`) USING BTREE, + INDEX `runtaskid`(`runtaskid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务Log表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_autotsk_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_autotsk_run +-- ---------------------------- +DROP TABLE IF EXISTS `zc_autotsk_run`; +CREATE TABLE `zc_autotsk_run` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `autotaskid` int(11) NOT NULL COMMENT '所属任务,DB,zc_autotask', + `addtimes` bigint(20) NOT NULL COMMENT '执行时间,DATE', + `runsec` int(11) NOT NULL DEFAULT 0 COMMENT '时长|,SEC', + `logcnt` int(11) NOT NULL DEFAULT 0 COMMENT 'LOG统计|', + `msg` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务简报', + PRIMARY KEY (`id`) USING BTREE, + INDEX `autotaskid`(`autotaskid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务执行记录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_autotsk_run +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_cata +-- ---------------------------- +DROP TABLE IF EXISTS `zc_cata`; +CREATE TABLE `zc_cata` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upid` int(11) NOT NULL COMMENT '上级,DB,zc_cata', + `csort` int(11) NOT NULL DEFAULT 10 COMMENT '排序', + `isuse` int(11) NOT NULL DEFAULT 1 COMMENT '|行为|,BOOL', + `cbid` int(11) NOT NULL DEFAULT 0 COMMENT '库,DB,zc_cata', + `codeid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '值', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `clas` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '样式类', + `extdata` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '扩展值', + PRIMARY KEY (`id`) USING BTREE, + INDEX `cbid`(`cbid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 12001701 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_cata +-- ---------------------------- +INSERT INTO `zc_cata` VALUES (1, 0, 0, 1, 0, '', '固定字典', '', ''); +INSERT INTO `zc_cata` VALUES (2, 0, 0, 1, 0, '', '灵活字典', '', ''); +INSERT INTO `zc_cata` VALUES (10, 1, 0, 1, 0, 'sex', '性别', '', 'zc_admin'); +INSERT INTO `zc_cata` VALUES (11, 1, 0, 1, 0, 'stpstatus', '账号状态', '', 'zc_admin'); +INSERT INTO `zc_cata` VALUES (12, 1, 0, 1, 0, 'auditstatus', '审核状态', '', 'zc_urole'); +INSERT INTO `zc_cata` VALUES (13, 1, 0, 1, 0, 'autotaskstatus', '任务状态', '', 'zc_autotask'); +INSERT INTO `zc_cata` VALUES (14, 2, 0, 1, 0, 'targettype', '子系统', '', 'zc_debug_user\nzc_online'); +INSERT INTO `zc_cata` VALUES (18, 1, 0, 1, 0, 'cashstatus', '提现状态', '', 'ap_cash_out'); +INSERT INTO `zc_cata` VALUES (19, 2, 0, 1, 0, 'cashtype', '收支分类', '', 'ap_cash_ie,ap_cash_oe'); +INSERT INTO `zc_cata` VALUES (21, 2, 0, 1, 0, 'userlevel', '用户等级', '', 'ap_user'); +INSERT INTO `zc_cata` VALUES (22, 1, 0, 1, 0, 'artsort', '文章排序', '', 'ap_art_post'); +INSERT INTO `zc_cata` VALUES (23, 1, 0, 1, 0, 'artstatus', '文章状态', '', 'ap_art_post'); +INSERT INTO `zc_cata` VALUES (24, 2, 0, 1, 0, 'certs', '认证范围', '', 'ap_user'); +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', '其他', '', ''); +INSERT INTO `zc_cata` VALUES (1010, 0, 8, 1, 11, '8', '被禁用', 'dag', ''); +INSERT INTO `zc_cata` VALUES (1011, 0, 9, 1, 11, '9', '登录保护', 'warn', ''); +INSERT INTO `zc_cata` VALUES (1012, 0, 10, 1, 11, '10', '正常', 'succ', ''); +INSERT INTO `zc_cata` VALUES (1020, 0, 10, 2, 12, '10', '草稿', 'def', ''); +INSERT INTO `zc_cata` VALUES (1021, 0, 20, 1, 12, '20', '未审核', 'man', ''); +INSERT INTO `zc_cata` VALUES (1022, 0, 50, 1, 12, '50', '审核中', 'warn', ''); +INSERT INTO `zc_cata` VALUES (1023, 0, 90, 1, 12, '90', '驳回', 'dag', ''); +INSERT INTO `zc_cata` VALUES (1024, 0, 95, 1, 12, '95', '撤回', 'def', ''); +INSERT INTO `zc_cata` VALUES (1025, 0, 100, 1, 12, '100', '通过', 'succ', ''); +INSERT INTO `zc_cata` VALUES (1030, 0, 20, 1, 13, '20', '等待执行', 'succ', ''); +INSERT INTO `zc_cata` VALUES (1031, 0, 30, 1, 13, '30', '执行中', 'warn', ''); +INSERT INTO `zc_cata` VALUES (1039, 0, 90, 1, 13, '90', '禁止执行', 'dag', ''); +INSERT INTO `zc_cata` VALUES (1040, 0, 10, 1, 14, '10', '总控', '', ''); +INSERT INTO `zc_cata` VALUES (1041, 0, 20, 1, 14, '20', 'SaaS PC端', '', ''); +INSERT INTO `zc_cata` VALUES (1042, 0, 21, 1, 14, '21', 'SaaS 移动端', '', ''); +INSERT INTO `zc_cata` VALUES (1150, 0, 10, 1, 18, '10', '申请中', 'def', ''); +INSERT INTO `zc_cata` VALUES (1151, 0, 20, 1, 18, '20', '已通过', 'warn', ''); +INSERT INTO `zc_cata` VALUES (1152, 0, 21, 2, 18, '21', '微信操作中', 'warn', ''); +INSERT INTO `zc_cata` VALUES (1153, 0, 30, 1, 18, '30', '已传发票', 'man', ''); +INSERT INTO `zc_cata` VALUES (1154, 0, 50, 1, 18, '50', '待打款', 'def', ''); +INSERT INTO `zc_cata` VALUES (1155, 0, 90, 1, 18, '90', '已拒绝', 'dag', ''); +INSERT INTO `zc_cata` VALUES (1156, 0, 100, 1, 18, '100', '已完成', 'succ', ''); +INSERT INTO `zc_cata` VALUES (1200, 0, 10, 1, 19, '10', '充值', '', ''); +INSERT INTO `zc_cata` VALUES (1201, 0, 11, 1, 19, '11', '提现', '', ''); +INSERT INTO `zc_cata` VALUES (1210, 0, 20, 1, 19, '20', '推荐奖', '', ''); +INSERT INTO `zc_cata` VALUES (1211, 0, 21, 1, 19, '21', '带新奖', '', ''); +INSERT INTO `zc_cata` VALUES (1212, 0, 22, 1, 19, '22', '领导奖', '', ''); +INSERT INTO `zc_cata` VALUES (1550, 0, 1, 1, 21, '10', 'LV.1', '', ''); +INSERT INTO `zc_cata` VALUES (1551, 0, 2, 1, 21, '20', 'LV.2', '', ''); +INSERT INTO `zc_cata` VALUES (1600, 0, 0, 1, 22, '10', '劣后', '', ''); +INSERT INTO `zc_cata` VALUES (1601, 0, 0, 1, 22, '20', '正常', '', ''); +INSERT INTO `zc_cata` VALUES (1602, 0, 0, 1, 22, '30', '置顶', '', ''); +INSERT INTO `zc_cata` VALUES (1603, 0, 0, 1, 22, '40', '总置顶', '', ''); +INSERT INTO `zc_cata` VALUES (1650, 0, 0, 1, 23, '10', '草稿', 'def', ''); +INSERT INTO `zc_cata` VALUES (1651, 0, 0, 1, 23, '20', '待审核', 'warn', ''); +INSERT INTO `zc_cata` VALUES (1652, 0, 0, 1, 23, '90', '驳回', 'dag', ''); +INSERT INTO `zc_cata` VALUES (1653, 0, 0, 1, 23, '100', '发布', 'succ', ''); +INSERT INTO `zc_cata` VALUES (1700, 0, 10, 1, 24, 'a', '实名认证', '', ''); +INSERT INTO `zc_cata` VALUES (1701, 0, 20, 1, 24, 'b', '付费会员', '', ''); +INSERT INTO `zc_cata` VALUES (10100, 0, 1, 1, 100, 'text', '文本', '', ''); +INSERT INTO `zc_cata` VALUES (10101, 0, 2, 1, 100, 'json', 'JSON', '', ''); +INSERT INTO `zc_cata` VALUES (10105, 0, 5, 1, 100, 'fcall', '函数', '', ''); +INSERT INTO `zc_cata` VALUES (10110, 0, 10, 1, 100, 'image', '理解图像', '', ''); +INSERT INTO `zc_cata` VALUES (10115, 0, 15, 1, 100, 'video', '理解视频', '', ''); +INSERT INTO `zc_cata` VALUES (10120, 0, 20, 1, 100, '3dmodel', '理解三维', '', ''); +INSERT INTO `zc_cata` VALUES (10150, 0, 0, 1, 101, '10', '等待介入', '', ''); +INSERT INTO `zc_cata` VALUES (10151, 0, 0, 1, 101, '30', '专家研判', '', ''); +INSERT INTO `zc_cata` VALUES (10152, 0, 0, 1, 101, '20', '专家建议', '', ''); +INSERT INTO `zc_cata` VALUES (10154, 0, 0, 1, 101, '100', 'AI不执行', '', ''); +INSERT INTO `zc_cata` VALUES (10155, 0, 0, 1, 101, '110', 'AI自主执行', '', ''); +INSERT INTO `zc_cata` VALUES (10156, 0, 0, 1, 101, '150', '直接执行', '', ''); +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 +-- ---------------------------- +DROP TABLE IF EXISTS `zc_cemap_bill`; +CREATE TABLE `zc_cemap_bill` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cpath` int(11) NOT NULL COMMENT '路径,CATM,zc_cemap_pbill', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `url` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '图片,IMG1', + `w` int(11) NOT NULL COMMENT '宽度,METRE', + `h` int(11) NOT NULL COMMENT '高度,METRE', + PRIMARY KEY (`id`) USING BTREE, + INDEX `orgid`(`name`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '立牌资源表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_cemap_bill +-- ---------------------------- +INSERT INTO `zc_cemap_bill` VALUES (31, 1, 'map1', '/bill/map1.png', 2000, 2700); +INSERT INTO `zc_cemap_bill` VALUES (32, 1, 'map2', '/bill/map2.png', 2000, 2700); +INSERT INTO `zc_cemap_bill` VALUES (33, 1, 'map3', '/bill/map3.png', 2000, 2700); +INSERT INTO `zc_cemap_bill` VALUES (34, 1, 'map9', '/bill/map9.png', 2000, 2700); +INSERT INTO `zc_cemap_bill` VALUES (35, 1, 'loc1', '/bill/loc1.png', 1000, 1238); +INSERT INTO `zc_cemap_bill` VALUES (36, 1, 'loc2', '/bill/loc2.png', 1000, 1238); +INSERT INTO `zc_cemap_bill` VALUES (37, 1, 'loc3', '/bill/loc3.png', 1000, 1238); +INSERT INTO `zc_cemap_bill` VALUES (38, 2, '液位计', '/bill/s1.png', 1000, 1000); +INSERT INTO `zc_cemap_bill` VALUES (39, 2, '摄像头', '/bill/s2.png', 1000, 1000); +INSERT INTO `zc_cemap_bill` VALUES (40, 2, '气象站', '/bill/s3.png', 1000, 1000); + +-- ---------------------------- +-- Table structure for zc_cemap_data +-- ---------------------------- +DROP TABLE IF EXISTS `zc_cemap_data`; +CREATE TABLE `zc_cemap_data` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `tabname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `tabid` bigint(20) NOT NULL, + `mapjson` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `uptimes` bigint(20) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 40 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '地图数据表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_cemap_data +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_cemap_glb +-- ---------------------------- +DROP TABLE IF EXISTS `zc_cemap_glb`; +CREATE TABLE `zc_cemap_glb` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cpath` int(11) NOT NULL COMMENT '路径,CATM,zc_cemap_pglb', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `url` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'GLB,DOWN', + PRIMARY KEY (`id`) USING BTREE, + INDEX `orgid`(`name`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 42 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'GLB资源表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_cemap_glb +-- ---------------------------- +INSERT INTO `zc_cemap_glb` VALUES (1, 6, '运输车', '/glb/s1.gltf'); +INSERT INTO `zc_cemap_glb` VALUES (2, 200, '蹦床', '/glb/s2.gltf'); +INSERT INTO `zc_cemap_glb` VALUES (3, 1, '造型1', '/glb/s3.gltf'); +INSERT INTO `zc_cemap_glb` VALUES (4, 201, '球机摄像头', '/glb/s4.glb'); +INSERT INTO `zc_cemap_glb` VALUES (5, 201, '枪机摄像头', '/glb/s5.glb'); +INSERT INTO `zc_cemap_glb` VALUES (6, 1, '楼房', '/glb/s6.glb'); +INSERT INTO `zc_cemap_glb` VALUES (7, 4, '羊驼', '/glb/s7.glb'); +INSERT INTO `zc_cemap_glb` VALUES (8, 101, '正方形', '/glb/s8.glb'); +INSERT INTO `zc_cemap_glb` VALUES (9, 1, '贴图房', '/glb/s9.glb'); +INSERT INTO `zc_cemap_glb` VALUES (11, 3, '梧桐树', '/glb/s11.glb'); +INSERT INTO `zc_cemap_glb` VALUES (12, 3, '花艺', '/glb/s12.glb'); +INSERT INTO `zc_cemap_glb` VALUES (13, 1, '简易房', '/glb/s13.glb'); +INSERT INTO `zc_cemap_glb` VALUES (14, 200, '龙门吊', '/glb/s14.glb'); +INSERT INTO `zc_cemap_glb` VALUES (15, 200, '搅拌站', '/glb/s15.glb'); +INSERT INTO `zc_cemap_glb` VALUES (16, 6, '砼车', '/glb/s16.glb'); +INSERT INTO `zc_cemap_glb` VALUES (18, 1, '栅栏', '/glb/s18.glb'); +INSERT INTO `zc_cemap_glb` VALUES (20, 1, '门房2', '/glb/s20.glb'); +INSERT INTO `zc_cemap_glb` VALUES (21, 1, '门房', '/glb/s21.glb'); +INSERT INTO `zc_cemap_glb` VALUES (22, 201, '下球摄像头', '/glb/s22.glb'); +INSERT INTO `zc_cemap_glb` VALUES (23, 4, '山羊', '/glb/s23.glb'); +INSERT INTO `zc_cemap_glb` VALUES (24, 200, '太阳能板', '/glb/s24.gltf'); +INSERT INTO `zc_cemap_glb` VALUES (25, 1, '农具房', '/glb/s25.glb'); +INSERT INTO `zc_cemap_glb` VALUES (26, 1, '养殖棚', '/glb/s26.glb'); +INSERT INTO `zc_cemap_glb` VALUES (27, 1, '悬空地', '/glb/s27.glb'); +INSERT INTO `zc_cemap_glb` VALUES (28, 1, '敞开房', '/glb/s28.glb'); +INSERT INTO `zc_cemap_glb` VALUES (29, 5, '怪物', '/glb/s29.glb'); +INSERT INTO `zc_cemap_glb` VALUES (30, 1, '宿舍房', '/glb/s30.glb'); +INSERT INTO `zc_cemap_glb` VALUES (31, 1, '蓝顶房屋', '/glb/s31.glb'); +INSERT INTO `zc_cemap_glb` VALUES (32, 200, '油罐', '/glb/s32.glb'); +INSERT INTO `zc_cemap_glb` VALUES (33, 1, '大门头', '/glb/s33.glb'); +INSERT INTO `zc_cemap_glb` VALUES (34, 1, '遮阳棚', '/glb/s34.glb'); +INSERT INTO `zc_cemap_glb` VALUES (35, 1, '栅栏墙', '/glb/s35.glb'); +INSERT INTO `zc_cemap_glb` VALUES (36, 200, '风电机', '/glb/s36.gltf'); +INSERT INTO `zc_cemap_glb` VALUES (37, 6, '轿车', '/glb/s37.glb'); +INSERT INTO `zc_cemap_glb` VALUES (38, 1, '水泥墙', '/glb/s38.glb'); +INSERT INTO `zc_cemap_glb` VALUES (39, 1, '楼房顶', '/glb/s39.glb'); +INSERT INTO `zc_cemap_glb` VALUES (41, 201, '锚钉', '/glb/s41.glb'); + +-- ---------------------------- +-- Table structure for zc_cemap_pbill +-- ---------------------------- +DROP TABLE IF EXISTS `zc_cemap_pbill`; +CREATE TABLE `zc_cemap_pbill` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upid` int(11) NOT NULL COMMENT ',上级', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `csort` int(11) NOT NULL DEFAULT 1 COMMENT '排序', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '立牌分类表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_cemap_pbill +-- ---------------------------- +INSERT INTO `zc_cemap_pbill` VALUES (1, 0, '地标', 10); +INSERT INTO `zc_cemap_pbill` VALUES (2, 0, '设备', 10); + +-- ---------------------------- +-- Table structure for zc_cemap_pglb +-- ---------------------------- +DROP TABLE IF EXISTS `zc_cemap_pglb`; +CREATE TABLE `zc_cemap_pglb` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upid` int(11) NOT NULL COMMENT ',上级', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `csort` int(11) NOT NULL DEFAULT 1 COMMENT '排序', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 304 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'GLB分类表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_cemap_pglb +-- ---------------------------- +INSERT INTO `zc_cemap_pglb` VALUES (1, 0, '建筑', 10); +INSERT INTO `zc_cemap_pglb` VALUES (2, 0, '设备', 10); +INSERT INTO `zc_cemap_pglb` VALUES (3, 0, '植物', 10); +INSERT INTO `zc_cemap_pglb` VALUES (4, 0, '动物', 10); +INSERT INTO `zc_cemap_pglb` VALUES (5, 0, '人物', 10); +INSERT INTO `zc_cemap_pglb` VALUES (6, 0, '车辆', 10); +INSERT INTO `zc_cemap_pglb` VALUES (200, 2, '大型', 10); +INSERT INTO `zc_cemap_pglb` VALUES (201, 2, '小型', 10); + +-- ---------------------------- +-- Table structure for zc_config +-- ---------------------------- +DROP TABLE IF EXISTS `zc_config`; +CREATE TABLE `zc_config` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `types` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数代码', + `params` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '配置表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_debug_user +-- ---------------------------- +DROP TABLE IF EXISTS `zc_debug_user`; +CREATE TABLE `zc_debug_user` ( + `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', + `targettype` int(11) NOT NULL COMMENT '|子系统|,CATA,targettype', + `isuse` int(11) NOT NULL COMMENT '|开关|,BOOL', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '显示名', + `user` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名', + `pass` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码,MSK,**', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调试用户表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_debug_user +-- ---------------------------- +INSERT INTO `zc_debug_user` VALUES (1, 10, 1, '超管', '12345678901', '123654'); + +-- ---------------------------- +-- Table structure for zc_depart +-- ---------------------------- +DROP TABLE IF EXISTS `zc_depart`; +CREATE TABLE `zc_depart` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upid` int(11) NOT NULL COMMENT ',上级', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '组织名称', + `leaderuser` int(11) NOT NULL DEFAULT 0 COMMENT '|负责人|,CATA,adminuser', + `isuse` int(11) NOT NULL DEFAULT 0 COMMENT '|启用|,BOOL', + `csort` int(11) NOT NULL DEFAULT 1 COMMENT '排序', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 63 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '组织机构表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_depart +-- ---------------------------- +INSERT INTO `zc_depart` VALUES (1, 0, '董事会', 10, 1, 10); +INSERT INTO `zc_depart` VALUES (32, 0, '技术中心', 18, 1, 10); +INSERT INTO `zc_depart` VALUES (34, 32, '技术部', 19, 1, 10); + +-- ---------------------------- +-- Table structure for zc_dev_dbcode +-- ---------------------------- +DROP TABLE IF EXISTS `zc_dev_dbcode`; +CREATE TABLE `zc_dev_dbcode` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `dbcid` int(11) NOT NULL COMMENT '生成器,DB,zc_dev_dbsaas', + `tabl` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表', + `pcjson` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'PC配置', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 88 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_dev_dbcode +-- ---------------------------- + +-- ---------------------------- +-- 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 utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `schem` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据库', + `subpath` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '相对路径', + `verifyfunc` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '认证函数', + `codetable` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典表', + `saasfield` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SaaS字段', + `saasusr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SaaS用户标识', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 79 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码目录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_dev_dbsaas +-- ---------------------------- +INSERT INTO `zc_dev_dbsaas` VALUES (1, '总控-ap', 'c5_ciyon', 'admin\\ap', 'verifyfast', 'zc_cata', '', ''); +INSERT INTO `zc_dev_dbsaas` VALUES (2, '总控-rigger', 'c5_ciyon', 'admin\\rigger', 'verifyfast', 'zc_cata', '', ''); + +-- ---------------------------- +-- Table structure for zc_dev_note +-- ---------------------------- +DROP TABLE IF EXISTS `zc_dev_note`; +CREATE TABLE `zc_dev_note` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `typeid` int(11) NOT NULL, + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + `content` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',内容', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '开发文档表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_dev_note +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_funcslow +-- ---------------------------- +DROP TABLE IF EXISTS `zc_funcslow`; +CREATE TABLE `zc_funcslow` ( + `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `addtimes` bigint(20) NOT NULL COMMENT '|记录时间|,DATE', + `ms` bigint(20) NOT NULL COMMENT '用时|,INT,ms', + `uri` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求源', + `posts` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 82 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '慢请求表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_funcslow +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_icon +-- ---------------------------- +DROP TABLE IF EXISTS `zc_icon`; +CREATE TABLE `zc_icon` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `icontarget` int(11) NOT NULL COMMENT '使用范围,CATA,icontarget', + `targetid` int(11) NOT NULL COMMENT '对应关系', + `icon` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1033 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '图标表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_icon +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_log +-- ---------------------------- +DROP TABLE IF EXISTS `zc_log`; +CREATE TABLE `zc_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `loguser` int(11) NOT NULL COMMENT '操作人,CATA,adminuser', + `readuser` int(11) NOT NULL COMMENT '审阅人,CATA,adminuser', + `types` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'LOG分类', + `addtimes` bigint(20) NOT NULL COMMENT '发生日期,DATE', + `ip` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'IP,IP', + `logs` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '详情', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 222 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '总控日志表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_lug +-- ---------------------------- +DROP TABLE IF EXISTS `zc_lug`; +CREATE TABLE `zc_lug` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `isinout` int(11) NOT NULL COMMENT '|登录|,BOOL,登入.登出', + `loguser` int(11) NOT NULL COMMENT '用户,CATA,adminuser', + `addtimes` bigint(20) NOT NULL COMMENT '发生日期,DATE', + `ip` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'IP,IP', + `model` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备指纹', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3434 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登录日志表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_lug +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_menu +-- ---------------------------- +DROP TABLE IF EXISTS `zc_menu`; +CREATE TABLE `zc_menu` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `upid` int(11) NOT NULL COMMENT ',上级菜单', + `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `url` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '链接', + `pow` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '权限', + `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 = 20035 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_menu +-- ---------------------------- +INSERT INTO `zc_menu` VALUES (10, 0, '平台业务', '', '', 110, 1); +INSERT INTO `zc_menu` VALUES (11, 0, 'SaaS业务A', '', '', 100, 1); +INSERT INTO `zc_menu` VALUES (12, 0, 'SaaS业务B', '', '', 100, 2); +INSERT INTO `zc_menu` VALUES (13, 0, 'SaaS业务C', '', '', 100, 2); +INSERT INTO `zc_menu` VALUES (60, 0, 'AI辅助决策', '', '', 50, 1); +INSERT INTO `zc_menu` VALUES (61, 0, '审批事项', '', '', 50, 2); +INSERT INTO `zc_menu` VALUES (62, 0, '产业官网', '', '', 50, 1); +INSERT INTO `zc_menu` VALUES (63, 0, 'AI私域', '', '', 50, 2); +INSERT INTO `zc_menu` VALUES (64, 0, 'AI自媒体', '', '', 50, 2); +INSERT INTO `zc_menu` VALUES (65, 0, '接入管理', '', '', 50, 2); +INSERT INTO `zc_menu` VALUES (66, 0, 'Web3D', '', '', 50, 1); +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 (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); +INSERT INTO `zc_menu` VALUES (210, 60, '决策交互', 'aidecision/ai_agent.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (211, 60, 'AIGC写作', 'aidecision/ai_aigc.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (212, 60, '任务介入', 'aidecision/ai_task_run.html?liid=10', '', 10, 1); +INSERT INTO `zc_menu` VALUES (213, 60, '决策任务', 'aidecision/ai_task.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (215, 60, '决策单元', 'aidecision/ai_decision.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (216, 60, '数据函数', 'aidecision/ai_funcdata.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (220, 60, '浓缩知识', 'aidecision/ai_knowcata.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (225, 60, 'AI算力源', 'aidecision/ai_key.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (226, 60, '算力测试', 'aidecision/ai_test.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (229, 60, '帮助文档', 'aidecision/help.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (230, 61, '我发起的事项', '!MSGmattermain 草稿、流转中、已驳回、已完成、已归档', '', 10, 1); +INSERT INTO `zc_menu` VALUES (231, 61, '待审批事项', '!MSGmatternotice 需我审批、我已审批、同事已批', '', 10, 1); +INSERT INTO `zc_menu` VALUES (232, 61, '知会事项', '!MSGmattertell 待处理、处理中、已处理', '', 10, 1); +INSERT INTO `zc_menu` VALUES (233, 61, '我已批事项', '!MSGmatterapproval 非我审批[有代理人]', '', 10, 1); +INSERT INTO `zc_menu` VALUES (234, 61, '指派代理人', '!MSGmatteragent 指派中,已指派历史', '', 10, 1); +INSERT INTO `zc_menu` VALUES (250, 62, '用户线索', 'www/customer.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (251, 62, '文章管理', '', '', 10, 1); +INSERT INTO `zc_menu` VALUES (252, 62, '文章生成', '', '', 10, 1); +INSERT INTO `zc_menu` VALUES (253, 62, '栏目管理', 'www/list_cate.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (254, 62, '锚内关键词', 'www/seoword.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (255, 62, '单页管理', 'www/single.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (260, 251, '文章草稿', 'www/list_preart.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (261, 251, '文章待发', 'www/list_waitart.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (262, 251, '已发文章', 'www/list_art.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (263, 251, '热门调优', '', '', 10, 2); +INSERT INTO `zc_menu` VALUES (270, 252, '关键词库', 'www/keyword.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (271, 252, '浓缩知识', 'www/content.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (272, 252, '文章模版', 'www/tmplart.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (273, 252, 'SEO规划', 'www/seoplan.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (300, 63, '私域平台账号', '!MSG添加企业微信、个人微信、QQ号等', '', 10, 1); +INSERT INTO `zc_menu` VALUES (301, 63, '线索客户', '!MSG导入手机号,自动分配平台账号,加人。加好后按标签策略,主动跟客户聊天。', '', 10, 1); +INSERT INTO `zc_menu` VALUES (302, 63, '线索待聊', '!MSG每次回复生成后,根据数字量,延迟1-几分钟。这期间可以人工介入。', '', 10, 1); +INSERT INTO `zc_menu` VALUES (303, 63, '标签智能体', '!MSGAI根据客户聊天数据,每隔n轮对话做一次标签调整。分组策略设置主动聊天天数。设置知识组、提示词模版。', '', 10, 1); +INSERT INTO `zc_menu` VALUES (304, 63, '意向客户', '!MSG人类接管回复。', '', 10, 1); +INSERT INTO `zc_menu` VALUES (305, 63, 'API推送设置', '!MSG将意向客户推送到第三方CRM中,或设置提醒。', '', 10, 1); +INSERT INTO `zc_menu` VALUES (330, 64, '自媒体平台账号', '!MSG添加小红书、抖音、tt、tg、fb。设置主动评论搜索间隔。设置AI性格,设置评论提示词模版/私信提示词模版。绑定知识组。引导私信或关注。视频/文章发布频率', '', 10, 1); +INSERT INTO `zc_menu` VALUES (335, 64, '主动评论', '', '', 10, 1); +INSERT INTO `zc_menu` VALUES (336, 64, '主动私信', '', '', 10, 1); +INSERT INTO `zc_menu` VALUES (338, 64, '自媒体成果', '!MSG搜集到的联系方式,自动推送到AI私域,进到线索客户', '', 10, 1); +INSERT INTO `zc_menu` VALUES (339, 64, '自主发布', '', '', 10, 1); +INSERT INTO `zc_menu` VALUES (340, 335, '搜索关注词', '!MSG关键词组设置。', '', 10, 1); +INSERT INTO `zc_menu` VALUES (341, 335, '它作评论记录', '!MSG自动评论记录', '', 10, 1); +INSERT INTO `zc_menu` VALUES (342, 335, '本作评论数据', '!MSG粉丝在本作下评论的数据', '', 10, 1); +INSERT INTO `zc_menu` VALUES (343, 335, '主动评论回复', '!MSG回评/回复自发文章的用户评论(选择性),同时必须关注对方,且发私信', '', 10, 1); +INSERT INTO `zc_menu` VALUES (350, 336, '私信用户', '!MSG各平台账号的私信粉丝用户', '', 10, 1); +INSERT INTO `zc_menu` VALUES (351, 336, '私信干预记录', '!MSG人工给回复私信的发送记录', '', 10, 1); +INSERT INTO `zc_menu` VALUES (352, 336, '主动私信记录', '!MSG交流情况记录,关注的用户都主动发私信', '', 10, 1); +INSERT INTO `zc_menu` VALUES (370, 339, '待发布视频', '!MSG视频素材', '', 10, 1); +INSERT INTO `zc_menu` VALUES (371, 339, '待发布文章', '!MSG图文素材', '', 10, 1); +INSERT INTO `zc_menu` VALUES (379, 339, '发布记录', '!MSG各账号已发记录和关联的素材', '', 10, 1); +INSERT INTO `zc_menu` VALUES (400, 65, '区块链配置', '!MSG以太坊、EOS、智臻链等key设置', '', 10, 1); +INSERT INTO `zc_menu` VALUES (401, 65, '通用上链记录', '!MSG文件、文本手动上链记录', '', 10, 1); +INSERT INTO `zc_menu` VALUES (405, 65, '短信接口配置', '!MSG腾讯云、阿里云等短信接口配置', '', 10, 1); +INSERT INTO `zc_menu` VALUES (406, 65, '短信发送记录', '!MSG全站短信发送记录', '', 10, 1); +INSERT INTO `zc_menu` VALUES (410, 65, '微信公众号配置', '!MSG公众号appid绑定', '', 10, 1); +INSERT INTO `zc_menu` VALUES (411, 65, '公众号推送记录', '!MSG公众号提醒消息推送记录', '', 10, 1); +INSERT INTO `zc_menu` VALUES (415, 65, 'AI监控设备', '!MSG基于GB28181的摄像头主动注册发现,绑定识别模型', '', 10, 1); +INSERT INTO `zc_menu` VALUES (416, 65, '视觉声纹模型库', '!MSG绑定本地模型算法入口|通过AI容器透传,绑定远程内网模型|透传保护知识产权,支持AI模型合作和算力结算', '', 10, 1); +INSERT INTO `zc_menu` VALUES (417, 65, 'AI识别通用结果', '!MSG识别模型产生结果的视频摘录', '', 10, 1); +INSERT INTO `zc_menu` VALUES (420, 65, '物联网设备发现', '!MSG网关型/透传型物联网设备自动接入|特点是:非实时、小数据量、指令型、边端算力|环境传感器、环控、土壤、水质、运动、定位、机器人、自主车辆等', '', 10, 1); +INSERT INTO `zc_menu` VALUES (421, 65, '协议标准化转码器', '!MSG制定为每一类物联网设备标准数据结构,将各厂家自定的数据格式和不同的数据流工作模式转成标准数据流结构,通常是协议中转器', '', 10, 1); +INSERT INTO `zc_menu` VALUES (450, 66, '地编器演示', 'cemap/ceeditor.html?id=1&tab=demo', '', 10, 1); +INSERT INTO `zc_menu` VALUES (451, 66, '人工建模资源', 'cemap/glb.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (452, 66, '指示牌资源', 'cemap/bill.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (455, 66, '人工建模分类', 'cemap/pathglb.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (456, 66, '指示牌分类', 'cemap/pathbill.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (459, 66, '地图示例', '!WIN/admin/cemap/cemap.html?id=1&tab=demo', '', 10, 1); +INSERT INTO `zc_menu` VALUES (500, 80, '管理员管理', 'rigger/admin.html', 'a=新增|u=修改|d=删除|r=赋予角色|p=重置密码|e=导出', 10, 1); +INSERT INTO `zc_menu` VALUES (501, 80, '组织机构', 'rigger/depart.html', 'u=管理|d=删除', 10, 1); +INSERT INTO `zc_menu` VALUES (502, 80, '岗位角色', 'rigger/role.html', 'u=管理|d=删除', 10, 1); +INSERT INTO `zc_menu` VALUES (505, 80, '在线人员', 'rigger/online.html', 'o=强制下线|d=删除', 10, 1); +INSERT INTO `zc_menu` VALUES (506, 80, 'AI/MCP授权', 'rigger/tokapi.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (550, 81, '健康指标', 'rigger/statsfunc.html', 'd=删除|e=导出', 10, 1); +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/lug.html', 'd=删除', 10, 1); +INSERT INTO `zc_menu` VALUES (555, 81, '程序日志', 'rigger/logfile.html', 'd=删除', 10, 1); +INSERT INTO `zc_menu` VALUES (556, 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); +INSERT INTO `zc_menu` VALUES (602, 82, '自动化任务', 'rigger/autotask.html', 'u=管理|d=删除|l=记录管理|r=手动执行', 10, 1); +INSERT INTO `zc_menu` VALUES (603, 82, '表单设计器', '!MSGtabbase 字段设计tabfield', '', 10, 1); +INSERT INTO `zc_menu` VALUES (604, 82, '流程设计器', '!MSGmattertemplate 流程设置matterflow', '', 10, 1); +INSERT INTO `zc_menu` VALUES (610, 82, '数据计算', 'datasse/index.html', 'r=执行', 10, 1); +INSERT INTO `zc_menu` VALUES (622, 82, '三方接入', 'rigger/tokthd.html', '', 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/front/', '', 10, 1); +INSERT INTO `zc_menu` VALUES (911, 901, '交互示例', 'demo/dyn/', '', 10, 1); +INSERT INTO `zc_menu` VALUES (912, 901, '功能示例', '', '', 10, 1); +INSERT INTO `zc_menu` VALUES (920, 902, '碎片试验代码', '!WIN/ajax/api/test1.t1', '', 10, 2); +INSERT INTO `zc_menu` VALUES (921, 902, '共享工具集', '!WINhttps://i.qiboc.cn/tool/', '', 10, 1); +INSERT INTO `zc_menu` VALUES (922, 902, '原型图演示', '', '', 10, 1); +INSERT INTO `zc_menu` VALUES (924, 902, 'AI规划', '!DAO/dev/ciyon/aiarch.html', '', 10, 2); +INSERT INTO `zc_menu` VALUES (925, 902, '代码生成器', 'develop/code_saas.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (926, 902, '生成文档', '!DAO/dev/ciyon/docgen.html', '', 10, 2); +INSERT INTO `zc_menu` VALUES (927, 902, 'AI多语言翻译', '!DAO/dev/ciyon/ailangtran.html', '', 10, 2); +INSERT INTO `zc_menu` VALUES (928, 902, '工具支持', '!DAO/dev/ciyon/tool.html', '', 10, 2); +INSERT INTO `zc_menu` VALUES (930, 903, '里程碑更新记录', '!DAO/dev/ciyon/landup.html', '', 10, 2); +INSERT INTO `zc_menu` VALUES (931, 903, '开发记录', '', '', 10, 1); +INSERT INTO `zc_menu` VALUES (940, 904, '测试用例', '!DAO/dev/ciyon/testcase.html', '', 10, 2); +INSERT INTO `zc_menu` VALUES (941, 904, '测试任务', '!DAO/dev/ciyon/testtask.html', '', 10, 2); +INSERT INTO `zc_menu` VALUES (942, 904, 'Bug处置', '!DAO/dev/ciyon/testbug.html', '', 10, 2); +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, '通用事项管理', '!MSGmattercomm 未送审、未办结', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1120, 912, '常规列表页', 'demo/normal.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1121, 912, '块列表页', 'demo/ultable.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1122, 912, '多层分类', 'demo/multicat.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1123, 912, '行编辑表', 'demo/lineedit.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1124, 912, '设置单页', 'demo/setpage.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1125, 912, '安全功能页', 'demo/safeop.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1126, 912, '分类列表页', 'demo/catlist.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1129, 912, '数据大屏', '!WINdemo/bs/', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1220, 922, 'PC端', '!PRDm4376,key=18679ba2c1fb8749727dae0ce6bde66cbbf00b7ce0', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1221, 922, '移动端', '!PRDa4187,tag=me', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1222, 922, '图表', '!PRDc836', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1223, 922, '大屏', '!PRDc3125,key=18679ba589ab4e057e13b752ebc399a8f3f4ffeaf6', '', 10, 1); +INSERT INTO `zc_menu` VALUES (1224, 922, '菜单文字', '!MSG第一行|第二行', '', 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 (10102, 10000, '用户实名认证', 'ap/usr_real_apply.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10105, 10000, '用户服务', 'ap/user_service.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10200, 10001, '提现审核', 'ap/cash_out_apply.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10205, 10001, '金币购买记录', 'ap/pnt_buy.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10206, 10001, '收支记录', 'ap/cash_ie.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10207, 10001, '付费会员记录', 'ap/usr_buy_user.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10208, 10001, '金币流水记录', 'ap/pnt_record.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10220, 10001, '板块文章', 'ap/art_section.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10221, 10001, '单页管理', 'ap/paper.html', 'u=管理|d=删除', 10, 1); +INSERT INTO `zc_menu` VALUES (10222, 10001, '广告图管理', 'ap/banner.html', '', 10, 1); +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 (10260, 10001, '业务日志', 'ap/logdb.html?liid=1', 's=审阅|d=删除', 10, 1); +INSERT INTO `zc_menu` VALUES (10261, 10001, '登录日志', 'ap/luser.html', 'd=删除', 10, 1); +INSERT INTO `zc_menu` VALUES (10262, 10001, '用户短信发送', 'ap/usr_sendsms.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10263, 10001, '用户邮件发送', 'ap/usr_sendmail.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10300, 10002, '提现支付', 'ap/cash_out_transfer.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10301, 10002, '提现收票', 'ap/cash_out_inv.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10302, 10002, '发票开票', 'ap/invoicing.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10310, 10002, '付费会员流水', 'ap/usr_buy_user.html?liid=2', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10311, 10002, '金币购买流水', 'ap/pnt_buy.html?liid=2', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10312, 10002, '充值流水', 'ap/cash_in.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10313, 10002, '发票明细维护', 'ap/invoicedetail.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10400, 10010, '用户资料', 'ap/user.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10401, 10010, '用户实名认证', 'ap/usr_real_apply.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10402, 10010, '用户发票抬头', 'ap/invoicetitle.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10403, 10010, '用户收件地址', 'ap/usr_shipaddr.html', '', 10, 1); +INSERT INTO `zc_menu` VALUES (10408, 10010, '验证码', 'ap/usr_capcode.html', '', 10, 1); + +-- ---------------------------- +-- Table structure for zc_mnufav +-- ---------------------------- +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', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '常用菜单表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_mnufav +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_mq +-- ---------------------------- +DROP TABLE IF EXISTS `zc_mq`; +CREATE TABLE `zc_mq` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `mqstatus` int(11) NOT NULL COMMENT '消息状态 //status=1为消息队列,status=2为处理中,status=3-9为一次次重试累加,status=90为失败', + `topic` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '消息分类', + `json` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '消息内容', + `nexttimes` bigint(20) NOT NULL COMMENT '下次处理时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '队列表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_mq +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_online +-- ---------------------------- +DROP TABLE IF EXISTS `zc_online`; +CREATE TABLE `zc_online` ( + `id` bigint(11) NOT NULL AUTO_INCREMENT, + `user` int(11) NOT NULL COMMENT '用户,CATA,adminuser', + `targettype` int(11) NOT NULL COMMENT '|子系统|,CATA,targettype', + `usrchg` int(11) NOT NULL DEFAULT 0, + `sid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',授权码', + `addtimes` bigint(20) NOT NULL COMMENT '登录时间,DATE', + `exptimes` bigint(20) NOT NULL COMMENT '到期时间,DATE', + `ip` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '登录IP,IP', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = MEMORY AUTO_INCREMENT = 30 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '管理员登录状态表' ROW_FORMAT = Fixed; + +-- ---------------------------- +-- Records of zc_online +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_power +-- ---------------------------- +DROP TABLE IF EXISTS `zc_power`; +CREATE TABLE `zc_power` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `groupname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分组名', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模块名称', + `scope` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模块代码', + `powers` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限项', + `csort` int(11) NOT NULL DEFAULT 1 COMMENT '排序', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '扩展权限表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_power +-- ---------------------------- +INSERT INTO `zc_power` VALUES (1, '系统组', '系统安全', 'safe', 'ssh=SSH开启|kr=手动扩容|nr=手动缩容', 9999); + +-- ---------------------------- +-- Table structure for zc_role +-- ---------------------------- +DROP TABLE IF EXISTS `zc_role`; +CREATE TABLE `zc_role` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称', + `power` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色权限', + `memo` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色说明', + `uptimes` bigint(20) NOT NULL COMMENT '更新时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_role +-- ---------------------------- +INSERT INTO `zc_role` VALUES (6, '运营官', '.p10101.p10105.p10221u.p10221d.', '', 1746484812); + +-- ---------------------------- +-- Table structure for zc_stats +-- ---------------------------- +DROP TABLE IF EXISTS `zc_stats`; +CREATE TABLE `zc_stats` ( + `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `addtimes` bigint(20) NOT NULL COMMENT '|记录时间|,DATE', + `func_succ` bigint(20) NOT NULL COMMENT '成功数|', + `func_fail` bigint(20) NOT NULL COMMENT '失败数|', + `func_commit` bigint(20) NOT NULL COMMENT '提交数|', + `func_rollback` bigint(20) NOT NULL COMMENT '回滚数|', + `func_runms` bigint(20) NOT NULL COMMENT '平均用时|,INT,ms', + `disk_sysfree` bigint(20) NOT NULL COMMENT '磁盘系统剩余空间|,FSIZE', + `disk_datafree` bigint(20) NOT NULL COMMENT '磁盘数据剩余空间|,FSIZE', + `disk_ioms` bigint(20) NOT NULL COMMENT '磁盘IO响应|,INT,ms', + `cpu_free` int(11) NOT NULL COMMENT 'CPU空闲占比|,PCT', + `cpu_db` int(11) NOT NULL COMMENT 'CPU数据库占比|,PCT', + `cpu_web` int(11) NOT NULL COMMENT 'CPU应用占比|,PCT', + `cpu_oth` int(11) NOT NULL COMMENT 'CPU其他占比|,PCT', + `mem_free` int(11) NOT NULL COMMENT '空闲内存|,FSIZE', + `mem_db` int(11) NOT NULL COMMENT '数据库内存占比|,PCT', + `mem_web` int(11) NOT NULL COMMENT '应用内存占比|,PCT', + `mem_oth` int(11) NOT NULL COMMENT '其他内存占比|,PCT', + `net_tcp` bigint(20) NOT NULL COMMENT '网络连接数|', + `net_ioms` bigint(20) NOT NULL COMMENT '网络响应|,INT,ms', + `db_query` bigint(20) NOT NULL COMMENT '数据库查询数|', + `db_commit` bigint(20) NOT NULL COMMENT '数据库提交数|', + `db_rollback` bigint(20) NOT NULL COMMENT '数据库回滚数|', + `db_keyhit` int(11) NOT NULL COMMENT '索引命中率|,PCT', + `db_dbhit` int(11) NOT NULL COMMENT '缓存命中率|,PCT', + `db_tmptable` int(11) NOT NULL COMMENT '临时表占比|,PCT', + `db_lock` int(11) NOT NULL COMMENT '当前锁数量|', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统健康表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_stats +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_tokapi +-- ---------------------------- +DROP TABLE IF EXISTS `zc_tokapi`; +CREATE TABLE `zc_tokapi` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '|appid|', + `vadmin` int(11) NOT NULL COMMENT '用户,CATA,adminuser', + `apisecret` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',appkey', + `ips` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '白名单IP,BR', + `addtimes` bigint(20) NOT NULL COMMENT '创建时间,DATE', + `uptimes` bigint(20) NOT NULL COMMENT '活跃时间,DATE', + `pubkey` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '|证书|', + `returnurl` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '回调链接', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 215699 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API接口授权' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_tokapi +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_tokthd +-- ---------------------------- +DROP TABLE IF EXISTS `zc_tokthd`; +CREATE TABLE `zc_tokthd` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '三方平台名称', + `cfgtoken` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'ConfigData', + `accesstoken` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'AccessData', + `exptimes` bigint(20) NOT NULL COMMENT '过期时间,DATE', + `memo` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '快捷备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API三方平台' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_tokthd +-- ---------------------------- + +-- ---------------------------- +-- Table structure for zc_ymock +-- ---------------------------- +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 utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称备注', + `upath` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类路径', + `ufunc` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '函数名', + `mockjson` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',mock数据', + `lastrequest` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ',请求快照', + `lasttimes` bigint(20) NOT NULL DEFAULT 0 COMMENT '请求时间,DATE', + `addtimes` bigint(20) NOT NULL COMMENT '建立时间,DATE', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Mock表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of zc_ymock +-- ---------------------------- +INSERT INTO `zc_ymock` VALUES (6, '', '', '/admin/rigger/mock.testmock', '{\"code\":1,\"data\":12344321}', '/admin/rigger/mock.testmock
', 1768534144, 1722713211); + +-- ---------------------------- +-- Table structure for zc_zmem_var +-- ---------------------------- +DROP TABLE IF EXISTS `zc_zmem_var`; +CREATE TABLE `zc_zmem_var` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `types` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '变量名', + `params` bigint(20) NOT NULL COMMENT '数值', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = MEMORY AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '变量表' ROW_FORMAT = Fixed; + +-- ---------------------------- +-- Records of zc_zmem_var +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/fapp/ciyon_ap/.hbuilderx/launch.json b/fapp/ciyon_ap/.hbuilderx/launch.json new file mode 100644 index 0000000..33bf65c --- /dev/null +++ b/fapp/ciyon_ap/.hbuilderx/launch.json @@ -0,0 +1,33 @@ +{ + // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version" : "0.0", + "configurations" : [ + { + "app-plus" : { + "launchtype" : "local" + }, + "default" : { + "launchtype" : "local" + }, + "mp-weixin" : { + "launchtype" : "local" + }, + "type" : "uniCloud" + }, + { + "openVueDevtools" : true, + "type" : "uni-app:app-ios" + }, + { + "customPlaygroundType" : "device", + "openVueDevtools" : true, + "playground" : "standard", + "type" : "uni-app:app-android" + }, + { + "openVueDevtools" : false, + "type" : "uni-app:h5" + } + ] +} diff --git a/fapp/ciyon_ap/App.vue b/fapp/ciyon_ap/App.vue new file mode 100644 index 0000000..f6d7187 --- /dev/null +++ b/fapp/ciyon_ap/App.vue @@ -0,0 +1,193 @@ + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-aicameraocr/ciy-aicameraocr.vue b/fapp/ciyon_ap/components/ciy-aicameraocr/ciy-aicameraocr.vue new file mode 100644 index 0000000..f8e00b2 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-aicameraocr/ciy-aicameraocr.vue @@ -0,0 +1,272 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-aivoice/ciy-aivoice.vue b/fapp/ciyon_ap/components/ciy-aivoice/ciy-aivoice.vue new file mode 100644 index 0000000..b97333b --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-aivoice/ciy-aivoice.vue @@ -0,0 +1,104 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-alert/ciy-alert.vue b/fapp/ciyon_ap/components/ciy-alert/ciy-alert.vue new file mode 100644 index 0000000..3dd3fa4 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-alert/ciy-alert.vue @@ -0,0 +1,167 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-ani/ciy-ani.vue b/fapp/ciyon_ap/components/ciy-ani/ciy-ani.vue new file mode 100644 index 0000000..b3de1b6 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-ani/ciy-ani.vue @@ -0,0 +1,85 @@ + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-aniheight/ciy-aniheight.vue b/fapp/ciyon_ap/components/ciy-aniheight/ciy-aniheight.vue new file mode 100644 index 0000000..c2fc200 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-aniheight/ciy-aniheight.vue @@ -0,0 +1,93 @@ + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-anipop/ciy-anipop.vue b/fapp/ciyon_ap/components/ciy-anipop/ciy-anipop.vue new file mode 100644 index 0000000..89eadc2 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-anipop/ciy-anipop.vue @@ -0,0 +1,193 @@ + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-audio/ciy-audio.vue b/fapp/ciyon_ap/components/ciy-audio/ciy-audio.vue new file mode 100644 index 0000000..038f6cc --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-audio/ciy-audio.vue @@ -0,0 +1,216 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-auth/ciy-auth.vue b/fapp/ciyon_ap/components/ciy-auth/ciy-auth.vue new file mode 100644 index 0000000..584d19b --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-auth/ciy-auth.vue @@ -0,0 +1,418 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-btreader/ciy-btreader.vue b/fapp/ciyon_ap/components/ciy-btreader/ciy-btreader.vue new file mode 100644 index 0000000..0578d67 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-btreader/ciy-btreader.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/fapp/ciyon_ap/components/ciy-calendar/ciy-calendar.vue b/fapp/ciyon_ap/components/ciy-calendar/ciy-calendar.vue new file mode 100644 index 0000000..0fc815b --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-calendar/ciy-calendar.vue @@ -0,0 +1,562 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-capcode/ciy-capcode.vue b/fapp/ciyon_ap/components/ciy-capcode/ciy-capcode.vue new file mode 100644 index 0000000..227a28b --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-capcode/ciy-capcode.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-chart-pie/ciy-chart-pie.vue b/fapp/ciyon_ap/components/ciy-chart-pie/ciy-chart-pie.vue new file mode 100644 index 0000000..ea8e1ea --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-chart-pie/ciy-chart-pie.vue @@ -0,0 +1,74 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-checkbox/ciy-checkbox.vue b/fapp/ciyon_ap/components/ciy-checkbox/ciy-checkbox.vue new file mode 100644 index 0000000..16c0cba --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-checkbox/ciy-checkbox.vue @@ -0,0 +1,301 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-checkitem/ciy-checkitem.vue b/fapp/ciyon_ap/components/ciy-checkitem/ciy-checkitem.vue new file mode 100644 index 0000000..28a07a6 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-checkitem/ciy-checkitem.vue @@ -0,0 +1,213 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-dbg/ciy-dbg.vue b/fapp/ciyon_ap/components/ciy-dbg/ciy-dbg.vue new file mode 100644 index 0000000..0206063 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-dbg/ciy-dbg.vue @@ -0,0 +1,164 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-dialog/ciy-dialog.vue b/fapp/ciyon_ap/components/ciy-dialog/ciy-dialog.vue new file mode 100644 index 0000000..9d32843 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-dialog/ciy-dialog.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-gesture/ciy-gesture.vue b/fapp/ciyon_ap/components/ciy-gesture/ciy-gesture.vue new file mode 100644 index 0000000..8ffd823 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-gesture/ciy-gesture.vue @@ -0,0 +1,89 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-handsign/ciy-handsign.vue b/fapp/ciyon_ap/components/ciy-handsign/ciy-handsign.vue new file mode 100644 index 0000000..09aadb1 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-handsign/ciy-handsign.vue @@ -0,0 +1,499 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-header/ciy-header.vue b/fapp/ciyon_ap/components/ciy-header/ciy-header.vue new file mode 100644 index 0000000..bec5a23 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-header/ciy-header.vue @@ -0,0 +1,190 @@ + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-input/ciy-input.vue b/fapp/ciyon_ap/components/ciy-input/ciy-input.vue new file mode 100644 index 0000000..35a5d9d --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-input/ciy-input.vue @@ -0,0 +1,150 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-inputbet/ciy-inputbet.vue b/fapp/ciyon_ap/components/ciy-inputbet/ciy-inputbet.vue new file mode 100644 index 0000000..4f22e2a --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-inputbet/ciy-inputbet.vue @@ -0,0 +1,195 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-inputcyc/ciy-inputcyc.vue b/fapp/ciyon_ap/components/ciy-inputcyc/ciy-inputcyc.vue new file mode 100644 index 0000000..3e60297 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-inputcyc/ciy-inputcyc.vue @@ -0,0 +1,215 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-inputdaterange/ciy-inputdaterange.vue b/fapp/ciyon_ap/components/ciy-inputdaterange/ciy-inputdaterange.vue new file mode 100644 index 0000000..717c8b0 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-inputdaterange/ciy-inputdaterange.vue @@ -0,0 +1,185 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-inputdatetime/ciy-inputdatetime.vue b/fapp/ciyon_ap/components/ciy-inputdatetime/ciy-inputdatetime.vue new file mode 100644 index 0000000..76f8d37 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-inputdatetime/ciy-inputdatetime.vue @@ -0,0 +1,543 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-inputnumber/ciy-inputnumber.vue b/fapp/ciyon_ap/components/ciy-inputnumber/ciy-inputnumber.vue new file mode 100644 index 0000000..50ecc66 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-inputnumber/ciy-inputnumber.vue @@ -0,0 +1,153 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-inputocr/ciy-inputocr.vue b/fapp/ciyon_ap/components/ciy-inputocr/ciy-inputocr.vue new file mode 100644 index 0000000..baf56c2 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-inputocr/ciy-inputocr.vue @@ -0,0 +1,189 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-inputtimepoint/ciy-inputtimepoint.vue b/fapp/ciyon_ap/components/ciy-inputtimepoint/ciy-inputtimepoint.vue new file mode 100644 index 0000000..7268975 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-inputtimepoint/ciy-inputtimepoint.vue @@ -0,0 +1,144 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-inputunitedit/ciy-inputunitedit.vue b/fapp/ciyon_ap/components/ciy-inputunitedit/ciy-inputunitedit.vue new file mode 100644 index 0000000..3f1cb74 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-inputunitedit/ciy-inputunitedit.vue @@ -0,0 +1,188 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-listend/ciy-listend.vue b/fapp/ciyon_ap/components/ciy-listend/ciy-listend.vue new file mode 100644 index 0000000..d3a1abb --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-listend/ciy-listend.vue @@ -0,0 +1,74 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-machinecheck/ciy-machinecheck.vue b/fapp/ciyon_ap/components/ciy-machinecheck/ciy-machinecheck.vue new file mode 100644 index 0000000..cd11920 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-machinecheck/ciy-machinecheck.vue @@ -0,0 +1,69 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-markdown/ciy-markdown.vue b/fapp/ciyon_ap/components/ciy-markdown/ciy-markdown.vue new file mode 100644 index 0000000..9f948ad --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-markdown/ciy-markdown.vue @@ -0,0 +1,295 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-mdedit/ciy-mdedit.vue b/fapp/ciyon_ap/components/ciy-mdedit/ciy-mdedit.vue new file mode 100644 index 0000000..efe353f --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-mdedit/ciy-mdedit.vue @@ -0,0 +1,359 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-textmore/ciy-textmore.vue b/fapp/ciyon_ap/components/ciy-textmore/ciy-textmore.vue new file mode 100644 index 0000000..9f908d1 --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-textmore/ciy-textmore.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-toast/ciy-toast.vue b/fapp/ciyon_ap/components/ciy-toast/ciy-toast.vue new file mode 100644 index 0000000..9a347af --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-toast/ciy-toast.vue @@ -0,0 +1,71 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-totalsem/ciy-totalsem.vue b/fapp/ciyon_ap/components/ciy-totalsem/ciy-totalsem.vue new file mode 100644 index 0000000..bcfea6d --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-totalsem/ciy-totalsem.vue @@ -0,0 +1,43 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/ciy-upload/ciy-upload.vue b/fapp/ciyon_ap/components/ciy-upload/ciy-upload.vue new file mode 100644 index 0000000..97e890f --- /dev/null +++ b/fapp/ciyon_ap/components/ciy-upload/ciy-upload.vue @@ -0,0 +1,694 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/diy-apuser/diy-apuser.vue b/fapp/ciyon_ap/components/diy-apuser/diy-apuser.vue new file mode 100644 index 0000000..1457a6e --- /dev/null +++ b/fapp/ciyon_ap/components/diy-apuser/diy-apuser.vue @@ -0,0 +1,79 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/components/diy-xxlist/diy-xxlist.vue b/fapp/ciyon_ap/components/diy-xxlist/diy-xxlist.vue new file mode 100644 index 0000000..81dfdc8 --- /dev/null +++ b/fapp/ciyon_ap/components/diy-xxlist/diy-xxlist.vue @@ -0,0 +1,63 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/defpages.json b/fapp/ciyon_ap/defpages.json new file mode 100644 index 0000000..1c82ac5 --- /dev/null +++ b/fapp/ciyon_ap/defpages.json @@ -0,0 +1,41 @@ +{ + "pages": [{ + "path": "pages/main/index", + "style": { + "enablePullDownRefresh": true + } + }], + "ciycfg": { + "mainpackage": ["main", "pub"] + }, + "globalStyle": { + "navigationBarTitleText": "众产Ciyon", + "navigationStyle": "custom", + "navigationBarTextStyle": "black" + }, + "tabBar": { + "list": [{ + "pagePath": "pages/main/index" + }, + { + "pagePath": "pages/main/me" + } + ] + }, + "preloadRule": { + "pages/main/index": { + "packages": ["pages/demo"], + "network": "all" + } + }, + "condition" : { + "current": 0, + "list": [ + { + "name": "custompage", + "path": "/pages/demo/comform/upload", + "query": "" + } + ] + } +} \ No newline at end of file diff --git a/fapp/ciyon_ap/index.html b/fapp/ciyon_ap/index.html new file mode 100644 index 0000000..2197227 --- /dev/null +++ b/fapp/ciyon_ap/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/fapp/ciyon_ap/main.js b/fapp/ciyon_ap/main.js new file mode 100644 index 0000000..6f0cda6 --- /dev/null +++ b/fapp/ciyon_ap/main.js @@ -0,0 +1,38 @@ +/* +================================================================================= +* License: GPL-2.0 license +* Author: 众产® https://ciy.cn/code +* Version: 0.1.0 +================================================================================= +支持i18n多语言、深色模式、通用css色系 +在ciy.js中混入了常用函数库。自定义组件与页面均可调用。 +app.* 系统函数 +c.* 独立函数 +this.* 页面函数 +*/ +import messages from './util/langload'; +let lang = uni.getStorageSync("_lang"); +if(!lang) + lang = uni.getLocale(); +let i18nConfig = { + locale: lang, + silentTranslationWarn: true, + silentFallbackWarn: true, + messages +}; +import App from './App'; +import { createSSRApp } from 'vue'; +import { createI18n } from 'vue-i18n'; +import ciy from './util/ciy'; + +import './util/style.css'; +import './prod.css'; +const i18n = createI18n(i18nConfig); +export function createApp() { + const app = createSSRApp(App); + app.use(i18n); + app.use(ciy, App); + return { + app + }; +} \ No newline at end of file diff --git a/fapp/ciyon_ap/manifest.json b/fapp/ciyon_ap/manifest.json new file mode 100644 index 0000000..d158eb9 --- /dev/null +++ b/fapp/ciyon_ap/manifest.json @@ -0,0 +1,181 @@ +{ + "name" : "众产DAO", + "appid" : "__UNI__0372782", + "description" : "", + "versionName" : "1.0.1", + "versionCode" : 1000001, + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + "permissions" : { + "plus" : { + "description" : "访问系统文件", + "features" : [ "io" ] + } + }, + /* 模块配置 */ + "modules" : { + "Bluetooth" : {}, + "iBeacon" : {} + }, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : { + "dSYMs" : false + }, + /* SDK配置 */ + "sdkConfigs" : { + "push" : { + "unipush" : { + "version" : "2", + "offline" : true, + "hms" : {}, + "oppo" : {}, + "vivo" : {}, + "mi" : {}, + "meizu" : {}, + "honor" : {}, + "fcm" : {} + } + }, + "share" : { + "weixin" : { + "appid" : "", + "UniversalLinks" : "" + } + }, + "speech" : { + "baidu" : { + "appid" : "", + "apikey" : "", + "secretkey" : "" + } + }, + "payment" : {}, + "oauth" : {}, + "maps" : { + "amap" : { + "name" : "", + "appkey_ios" : "", + "appkey_android" : "" + } + }, + "ad" : {} + }, + "icons" : { + "android" : { + "hdpi" : "unpackage/res/icons/72x72.png", + "xhdpi" : "unpackage/res/icons/96x96.png", + "xxhdpi" : "unpackage/res/icons/144x144.png", + "xxxhdpi" : "unpackage/res/icons/192x192.png" + }, + "ios" : { + "appstore" : "unpackage/res/icons/1024x1024.png", + "ipad" : { + "app" : "unpackage/res/icons/76x76.png", + "app@2x" : "unpackage/res/icons/152x152.png", + "notification" : "unpackage/res/icons/20x20.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "proapp@2x" : "unpackage/res/icons/167x167.png", + "settings" : "unpackage/res/icons/29x29.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "spotlight" : "unpackage/res/icons/40x40.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png" + }, + "iphone" : { + "app@2x" : "unpackage/res/icons/120x120.png", + "app@3x" : "unpackage/res/icons/180x180.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "notification@3x" : "unpackage/res/icons/60x60.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "settings@3x" : "unpackage/res/icons/87x87.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png", + "spotlight@3x" : "unpackage/res/icons/120x120.png" + } + } + } + } + }, + "h5" : { + "router" : { + "base" : "./" + }, + "sdkConfigs" : { + "maps" : { + "qqmap" : { + "key" : "TCEBZ-PACWI-OQCGA-5ST3L-CYEDS-OJFW4" + } + } + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wx0408640a187feb35", + "setting" : { + "urlCheck" : false, + "minified" : false + }, + "usingComponents" : true, + "requiredBackgroundModes" : [ "audio" ], + "libVersion" : "3.4", + "plugins" : { + "WechatSI" : { + "version" : "0.3.6", + "provider" : "wx069ba97219f66d99" + } + }, + "permission" : { + "scope.userLocation" : { + "desc" : "用户位置自动获取" + } + }, + "requiredPrivateInfos" : [ "chooseLocation", "getLocation", "chooseAddress" ] + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3" +} diff --git a/fapp/ciyon_ap/pages.json b/fapp/ciyon_ap/pages.json new file mode 100644 index 0000000..19834f4 --- /dev/null +++ b/fapp/ciyon_ap/pages.json @@ -0,0 +1,406 @@ +{ + "pages": [ + { + "path": "pages/main/index", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "pages/main/me", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "pages/pub/camera" + }, + { + "path": "pages/pub/paper" + }, + { + "path": "pages/pub/part" + }, + { + "path": "pages/pub/psection", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "pages/pub/web", + "style": { + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black" + } + } + ], + "ciycfg": { + "mainpackage": [ + "main", + "pub" + ] + }, + "globalStyle": { + "navigationBarTitleText": "众产Ciyon", + "navigationStyle": "custom", + "navigationBarTextStyle": "black" + }, + "tabBar": { + "list": [ + { + "pagePath": "pages/main/index" + }, + { + "pagePath": "pages/main/me" + } + ] + }, + "preloadRule": { + "pages/main/index": { + "packages": [ + "pages/demo" + ], + "network": "all" + } + }, + "subPackages": [ + { + "root": "pages/demo", + "pages": [ + { + "path": "case/comlife" + }, + { + "path": "case/dict" + }, + { + "path": "case/pagecal" + }, + { + "path": "case/pagefix" + }, + { + "path": "case/promise" + }, + { + "path": "case/proxy" + }, + { + "path": "case/vproject" + }, + { + "path": "comform/calendar" + }, + { + "path": "comform/capcode" + }, + { + "path": "comform/checkbox" + }, + { + "path": "comform/checkitem" + }, + { + "path": "comform/define" + }, + { + "path": "comform/handsign" + }, + { + "path": "comform/input" + }, + { + "path": "comform/inputbet" + }, + { + "path": "comform/inputcyc" + }, + { + "path": "comform/inputdaterange" + }, + { + "path": "comform/inputdatetime" + }, + { + "path": "comform/inputnumber" + }, + { + "path": "comform/inputtimepoint" + }, + { + "path": "comform/inputunitedit" + }, + { + "path": "comform/radiobox" + }, + { + "path": "comform/ratestar" + }, + { + "path": "comform/selbool" + }, + { + "path": "comform/selcas" + }, + { + "path": "comform/select" + }, + { + "path": "comform/selmap" + }, + { + "path": "comform/selpage" + }, + { + "path": "comform/slider" + }, + { + "path": "comform/switch" + }, + { + "path": "comform/textarea" + }, + { + "path": "comform/upload" + }, + { + "path": "comview/alert" + }, + { + "path": "comview/ani" + }, + { + "path": "comview/aniheight" + }, + { + "path": "comview/anipop" + }, + { + "path": "comview/audio" + }, + { + "path": "comview/auth" + }, + { + "path": "comview/cameraocr" + }, + { + "path": "comview/gesture" + }, + { + "path": "comview/header" + }, + { + "path": "comview/listend", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "comview/markdown" + }, + { + "path": "comview/movable" + }, + { + "path": "comview/popmenu" + }, + { + "path": "comview/query" + }, + { + "path": "comview/searchbar" + }, + { + "path": "comview/segment" + }, + { + "path": "comview/showemoney" + }, + { + "path": "comview/showimgs" + }, + { + "path": "comview/shownum" + }, + { + "path": "comview/svgimg" + }, + { + "path": "comview/swipelist" + }, + { + "path": "comview/swiper" + }, + { + "path": "comview/tabbar" + }, + { + "path": "comview/textmore" + }, + { + "path": "comview/toast" + }, + { + "path": "css/chart_pie" + }, + { + "path": "css/cssdemo" + }, + { + "path": "css/grid" + }, + { + "path": "css/pageflex" + }, + { + "path": "css/skeleton" + }, + { + "path": "css/tailwind" + }, + { + "path": "css/waterfall" + }, + { + "path": "css/zindex" + }, + { + "path": "curd/demo_edit" + }, + { + "path": "curd/demo_list", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "curd/me" + }, + { + "path": "index" + }, + { + "path": "page/func" + }, + { + "path": "page/lang" + }, + { + "path": "page/oldfont" + }, + { + "path": "page/sysinfo" + }, + { + "path": "page/theme" + }, + { + "path": "test" + } + ] + }, + { + "root": "pages/me", + "pages": [ + { + "path": "cashie_lst", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "cashin_lst", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "cashoe_lst", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "cashout_cash" + }, + { + "path": "cashout_lst", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "cash_charge" + }, + { + "path": "invoicetitle" + }, + { + "path": "invoice_lst", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "invoicing" + }, + { + "path": "me_bank_info" + }, + { + "path": "pnt_buylst", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "pnt_buynow" + }, + { + "path": "pnt_lst", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "problem_chat" + }, + { + "path": "problem_pub", + "style": { + "enablePullDownRefresh": true + } + }, + { + "path": "safe_ccub" + }, + { + "path": "safe_password" + }, + { + "path": "safe_real" + }, + { + "path": "share_qrcode" + }, + { + "path": "suggest" + }, + { + "path": "user_bank" + }, + { + "path": "user_info" + }, + { + "path": "user_shipaddr" + }, + { + "path": "user_show" + } + ] + } + ] +} \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/case/comlife.vue b/fapp/ciyon_ap/pages/demo/case/comlife.vue new file mode 100644 index 0000000..3cab4ab --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/case/comlife.vue @@ -0,0 +1,60 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/case/dict.vue b/fapp/ciyon_ap/pages/demo/case/dict.vue new file mode 100644 index 0000000..d88035a --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/case/dict.vue @@ -0,0 +1,100 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/case/pagecal.vue b/fapp/ciyon_ap/pages/demo/case/pagecal.vue new file mode 100644 index 0000000..5db8cb6 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/case/pagecal.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/case/pagefix.vue b/fapp/ciyon_ap/pages/demo/case/pagefix.vue new file mode 100644 index 0000000..60c371c --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/case/pagefix.vue @@ -0,0 +1,238 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/case/promise.vue b/fapp/ciyon_ap/pages/demo/case/promise.vue new file mode 100644 index 0000000..2b5d7f0 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/case/promise.vue @@ -0,0 +1,63 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/case/proxy.vue b/fapp/ciyon_ap/pages/demo/case/proxy.vue new file mode 100644 index 0000000..cecb949 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/case/proxy.vue @@ -0,0 +1,64 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/case/vproject.vue b/fapp/ciyon_ap/pages/demo/case/vproject.vue new file mode 100644 index 0000000..9fbed54 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/case/vproject.vue @@ -0,0 +1,53 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/calendar.vue b/fapp/ciyon_ap/pages/demo/comform/calendar.vue new file mode 100644 index 0000000..c2fb9a6 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/calendar.vue @@ -0,0 +1,208 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/capcode.vue b/fapp/ciyon_ap/pages/demo/comform/capcode.vue new file mode 100644 index 0000000..4339447 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/capcode.vue @@ -0,0 +1,131 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/checkbox.vue b/fapp/ciyon_ap/pages/demo/comform/checkbox.vue new file mode 100644 index 0000000..c51edc6 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/checkbox.vue @@ -0,0 +1,199 @@ + + + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/checkitem.vue b/fapp/ciyon_ap/pages/demo/comform/checkitem.vue new file mode 100644 index 0000000..59cb958 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/checkitem.vue @@ -0,0 +1,163 @@ + + + + + + + diff --git a/fapp/ciyon_ap/pages/demo/comform/define.vue b/fapp/ciyon_ap/pages/demo/comform/define.vue new file mode 100644 index 0000000..d8d9369 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/define.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/handsign.vue b/fapp/ciyon_ap/pages/demo/comform/handsign.vue new file mode 100644 index 0000000..914fd39 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/handsign.vue @@ -0,0 +1,149 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/input.vue b/fapp/ciyon_ap/pages/demo/comform/input.vue new file mode 100644 index 0000000..67f2569 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/input.vue @@ -0,0 +1,195 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/inputbet.vue b/fapp/ciyon_ap/pages/demo/comform/inputbet.vue new file mode 100644 index 0000000..23345fe --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/inputbet.vue @@ -0,0 +1,177 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/inputcyc.vue b/fapp/ciyon_ap/pages/demo/comform/inputcyc.vue new file mode 100644 index 0000000..f97907d --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/inputcyc.vue @@ -0,0 +1,136 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/inputdaterange.vue b/fapp/ciyon_ap/pages/demo/comform/inputdaterange.vue new file mode 100644 index 0000000..dc1fb16 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/inputdaterange.vue @@ -0,0 +1,165 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/inputdatetime.vue b/fapp/ciyon_ap/pages/demo/comform/inputdatetime.vue new file mode 100644 index 0000000..ebe5f0d --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/inputdatetime.vue @@ -0,0 +1,188 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/inputnumber.vue b/fapp/ciyon_ap/pages/demo/comform/inputnumber.vue new file mode 100644 index 0000000..16f5067 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/inputnumber.vue @@ -0,0 +1,121 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/inputtimepoint.vue b/fapp/ciyon_ap/pages/demo/comform/inputtimepoint.vue new file mode 100644 index 0000000..cbd3d41 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/inputtimepoint.vue @@ -0,0 +1,142 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/inputunitedit.vue b/fapp/ciyon_ap/pages/demo/comform/inputunitedit.vue new file mode 100644 index 0000000..3f483c4 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/inputunitedit.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/radiobox.vue b/fapp/ciyon_ap/pages/demo/comform/radiobox.vue new file mode 100644 index 0000000..ece8c86 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/radiobox.vue @@ -0,0 +1,171 @@ + + + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/ratestar.vue b/fapp/ciyon_ap/pages/demo/comform/ratestar.vue new file mode 100644 index 0000000..b7d2c91 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/ratestar.vue @@ -0,0 +1,140 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/selbool.vue b/fapp/ciyon_ap/pages/demo/comform/selbool.vue new file mode 100644 index 0000000..1fddc0d --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/selbool.vue @@ -0,0 +1,168 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/selcas.vue b/fapp/ciyon_ap/pages/demo/comform/selcas.vue new file mode 100644 index 0000000..19b7e7b --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/selcas.vue @@ -0,0 +1,223 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/select-2602.vue b/fapp/ciyon_ap/pages/demo/comform/select-2602.vue new file mode 100644 index 0000000..6d4618e --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/select-2602.vue @@ -0,0 +1,352 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/select.vue b/fapp/ciyon_ap/pages/demo/comform/select.vue new file mode 100644 index 0000000..1d96fe4 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/select.vue @@ -0,0 +1,349 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/selmap.vue b/fapp/ciyon_ap/pages/demo/comform/selmap.vue new file mode 100644 index 0000000..2774120 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/selmap.vue @@ -0,0 +1,134 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/selpage.vue b/fapp/ciyon_ap/pages/demo/comform/selpage.vue new file mode 100644 index 0000000..4b9daaf --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/selpage.vue @@ -0,0 +1,184 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/slider.vue b/fapp/ciyon_ap/pages/demo/comform/slider.vue new file mode 100644 index 0000000..aee4868 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/slider.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/switch.vue b/fapp/ciyon_ap/pages/demo/comform/switch.vue new file mode 100644 index 0000000..4146c4f --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/switch.vue @@ -0,0 +1,168 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/textarea.vue b/fapp/ciyon_ap/pages/demo/comform/textarea.vue new file mode 100644 index 0000000..bcdaa1a --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/textarea.vue @@ -0,0 +1,163 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comform/upload.vue b/fapp/ciyon_ap/pages/demo/comform/upload.vue new file mode 100644 index 0000000..bec4e41 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comform/upload.vue @@ -0,0 +1,328 @@ + + + + + diff --git a/fapp/ciyon_ap/pages/demo/comview/alert.vue b/fapp/ciyon_ap/pages/demo/comview/alert.vue new file mode 100644 index 0000000..1e31203 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/alert.vue @@ -0,0 +1,256 @@ + + + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/ani.vue b/fapp/ciyon_ap/pages/demo/comview/ani.vue new file mode 100644 index 0000000..8d9c2f0 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/ani.vue @@ -0,0 +1,209 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/aniheight.vue b/fapp/ciyon_ap/pages/demo/comview/aniheight.vue new file mode 100644 index 0000000..4fa3c68 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/aniheight.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/anipop.vue b/fapp/ciyon_ap/pages/demo/comview/anipop.vue new file mode 100644 index 0000000..7c131c8 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/anipop.vue @@ -0,0 +1,156 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/audio.vue b/fapp/ciyon_ap/pages/demo/comview/audio.vue new file mode 100644 index 0000000..c5367a2 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/audio.vue @@ -0,0 +1,131 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/auth.vue b/fapp/ciyon_ap/pages/demo/comview/auth.vue new file mode 100644 index 0000000..acd5d42 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/auth.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/cameraocr.vue b/fapp/ciyon_ap/pages/demo/comview/cameraocr.vue new file mode 100644 index 0000000..6aa9fee --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/cameraocr.vue @@ -0,0 +1,136 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/gesture.vue b/fapp/ciyon_ap/pages/demo/comview/gesture.vue new file mode 100644 index 0000000..f0d0c6f --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/gesture.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/header.vue b/fapp/ciyon_ap/pages/demo/comview/header.vue new file mode 100644 index 0000000..76c038f --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/header.vue @@ -0,0 +1,102 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/listend.vue b/fapp/ciyon_ap/pages/demo/comview/listend.vue new file mode 100644 index 0000000..a4580f6 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/listend.vue @@ -0,0 +1,120 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/markdown.vue b/fapp/ciyon_ap/pages/demo/comview/markdown.vue new file mode 100644 index 0000000..e1661ee --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/markdown.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/movable.vue b/fapp/ciyon_ap/pages/demo/comview/movable.vue new file mode 100644 index 0000000..8aaf6ac --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/movable.vue @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/popmenu.vue b/fapp/ciyon_ap/pages/demo/comview/popmenu.vue new file mode 100644 index 0000000..78e790c --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/popmenu.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/query.vue b/fapp/ciyon_ap/pages/demo/comview/query.vue new file mode 100644 index 0000000..8e26cb0 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/query.vue @@ -0,0 +1,172 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/searchbar.vue b/fapp/ciyon_ap/pages/demo/comview/searchbar.vue new file mode 100644 index 0000000..b4f1d29 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/searchbar.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/segment.vue b/fapp/ciyon_ap/pages/demo/comview/segment.vue new file mode 100644 index 0000000..3877dd5 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/segment.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/fapp/ciyon_ap/pages/demo/comview/showemoney.vue b/fapp/ciyon_ap/pages/demo/comview/showemoney.vue new file mode 100644 index 0000000..1027c40 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/showemoney.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/showimgs.vue b/fapp/ciyon_ap/pages/demo/comview/showimgs.vue new file mode 100644 index 0000000..8bac6b2 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/showimgs.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/shownum.vue b/fapp/ciyon_ap/pages/demo/comview/shownum.vue new file mode 100644 index 0000000..297f341 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/shownum.vue @@ -0,0 +1,79 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/svgimg.vue b/fapp/ciyon_ap/pages/demo/comview/svgimg.vue new file mode 100644 index 0000000..9d4ec66 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/svgimg.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/swipelist.vue b/fapp/ciyon_ap/pages/demo/comview/swipelist.vue new file mode 100644 index 0000000..344e906 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/swipelist.vue @@ -0,0 +1,93 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/swiper.vue b/fapp/ciyon_ap/pages/demo/comview/swiper.vue new file mode 100644 index 0000000..c5182fa --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/swiper.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/tabbar.vue b/fapp/ciyon_ap/pages/demo/comview/tabbar.vue new file mode 100644 index 0000000..fbc7c3f --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/tabbar.vue @@ -0,0 +1,125 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/textmore.vue b/fapp/ciyon_ap/pages/demo/comview/textmore.vue new file mode 100644 index 0000000..2cb4c39 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/textmore.vue @@ -0,0 +1,92 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/comview/toast.vue b/fapp/ciyon_ap/pages/demo/comview/toast.vue new file mode 100644 index 0000000..1992f9c --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/comview/toast.vue @@ -0,0 +1,101 @@ + + + + + + + diff --git a/fapp/ciyon_ap/pages/demo/css/chart_pie.vue b/fapp/ciyon_ap/pages/demo/css/chart_pie.vue new file mode 100644 index 0000000..70edd19 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/css/chart_pie.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/css/cssdemo.vue b/fapp/ciyon_ap/pages/demo/css/cssdemo.vue new file mode 100644 index 0000000..93f0108 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/css/cssdemo.vue @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/css/grid.vue b/fapp/ciyon_ap/pages/demo/css/grid.vue new file mode 100644 index 0000000..2882371 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/css/grid.vue @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/css/pageflex.vue b/fapp/ciyon_ap/pages/demo/css/pageflex.vue new file mode 100644 index 0000000..5e91067 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/css/pageflex.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/css/skeleton.vue b/fapp/ciyon_ap/pages/demo/css/skeleton.vue new file mode 100644 index 0000000..d4b0722 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/css/skeleton.vue @@ -0,0 +1,39 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/css/tailwind.vue b/fapp/ciyon_ap/pages/demo/css/tailwind.vue new file mode 100644 index 0000000..8f445c6 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/css/tailwind.vue @@ -0,0 +1,105 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/css/waterfall.vue b/fapp/ciyon_ap/pages/demo/css/waterfall.vue new file mode 100644 index 0000000..f98c3e9 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/css/waterfall.vue @@ -0,0 +1,40 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/css/zindex.vue b/fapp/ciyon_ap/pages/demo/css/zindex.vue new file mode 100644 index 0000000..88f1267 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/css/zindex.vue @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/curd/demo_edit.vue b/fapp/ciyon_ap/pages/demo/curd/demo_edit.vue new file mode 100644 index 0000000..152e953 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/curd/demo_edit.vue @@ -0,0 +1,276 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/curd/demo_list.vue b/fapp/ciyon_ap/pages/demo/curd/demo_list.vue new file mode 100644 index 0000000..67c1edf --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/curd/demo_list.vue @@ -0,0 +1,331 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/curd/me.vue b/fapp/ciyon_ap/pages/demo/curd/me.vue new file mode 100644 index 0000000..2c264f0 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/curd/me.vue @@ -0,0 +1,219 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/index.vue b/fapp/ciyon_ap/pages/demo/index.vue new file mode 100644 index 0000000..4663f0c --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/index.vue @@ -0,0 +1,479 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/page/func.vue b/fapp/ciyon_ap/pages/demo/page/func.vue new file mode 100644 index 0000000..e35dad0 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/page/func.vue @@ -0,0 +1,808 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/page/lang.vue b/fapp/ciyon_ap/pages/demo/page/lang.vue new file mode 100644 index 0000000..b26e7a6 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/page/lang.vue @@ -0,0 +1,291 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/page/oldfont.vue b/fapp/ciyon_ap/pages/demo/page/oldfont.vue new file mode 100644 index 0000000..6c8ec36 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/page/oldfont.vue @@ -0,0 +1,81 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/page/sysinfo.vue b/fapp/ciyon_ap/pages/demo/page/sysinfo.vue new file mode 100644 index 0000000..097b3c8 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/page/sysinfo.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/page/theme.vue b/fapp/ciyon_ap/pages/demo/page/theme.vue new file mode 100644 index 0000000..c982ac7 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/page/theme.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/test.vue b/fapp/ciyon_ap/pages/demo/test.vue new file mode 100644 index 0000000..67dadef --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/test.vue @@ -0,0 +1,65 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/zdemo.css b/fapp/ciyon_ap/pages/demo/zdemo.css new file mode 100644 index 0000000..bb3bcd3 --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/zdemo.css @@ -0,0 +1,106 @@ +.zw { + padding: 1em; + color: var(--txt1); + background: var(--bg1); +} + +.tip { + padding: 0.5em 0 0.5em 1em; +} + +.fun, +.prp, +.evt { + font-weight: bold; +} + +.log { + white-space: pre; + padding-bottom: 0.5em; + border-bottom: 1px solid #eeeeee; + margin: 0.5em 0; +} + +.hr { + height: 1px; + width: 100%; + margin: 1em 0; + background: linear-gradient(90deg, transparent, var(--bg7), transparent); +} + +.formcard { + margin-top:-0.5em; +} +.formdata { + white-space: break-spaces; +} + +.lang { + padding: 0.1em 0.4em 0 0.4em; + margin: 0 0.2em; + font-size: 0.9em; + line-height: 1.3em; + display: inline-block; + vertical-align: bottom; + color: var(--txt1); + border: 1px solid var(--bg7); + background-color: var(--bg5); + border-radius: 0.2em; +} + +.lang.selected { + color: var(--txt9); + background-color: var(--bg1); +} + +.fun::before { + content: '方法'; + font-size: 0.8em; + background: var(--bg5); + padding: 0.3em; + margin: 0 0.4em; + border-radius: 0.4em; + height: 1em; + line-height: 1em; + display: inline-block; + color: var(--man6); +} + +.prp::before { + content: '属性'; + font-size: 0.8em; + background: var(--bg5); + padding: 0.3em; + margin: 0 0.4em; + border-radius: 0.4em; + height: 1em; + line-height: 1em; + display: inline-block; + color: var(--succ5); +} + +.evt::before { + content: '事件'; + font-size: 0.8em; + background: var(--bg5); + padding: 0.3em; + margin: 0 0.4em; + border-radius: 0.4em; + height: 1em; + line-height: 1em; + display: inline-block; + color: var(--warn5); +} + +.slt::before { + content: '插槽'; + font-size: 0.8em; + background: var(--bg5); + padding: 0.3em; + margin: 0 0.4em; + border-radius: 0.4em; + height: 1em; + line-height: 1em; + display: inline-block; + color: var(--man7); +} \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/demo/zmixin.js b/fapp/ciyon_ap/pages/demo/zmixin.js new file mode 100644 index 0000000..0be154d --- /dev/null +++ b/fapp/ciyon_ap/pages/demo/zmixin.js @@ -0,0 +1,50 @@ +export default { + data() { + return { + locale: 'zh-Hans', + locales: [{ + id: 'zh-Hans', + name: '简体中文' + }, { + id: 'zh-Hant', + name: '繁体中文' + }, { + id: 'en', + name: 'English' + }, { + id: 'ja', + name: '日本語' + }], + formdata:'', + props: {}, + eventlog: [] + }; + }, + created() { + let lang = uni.getStorageSync("_lang"); + if (!lang) + lang = uni.getLocale(); + this.locale = lang; + }, + methods: { + chglog(event, e) { + console.log(event, e); + if(e.com) + delete e.com; + this.eventlog.unshift(event + ': ' + JSON.stringify(e, null, ' ')); + }, + submitlog(e) { + console.log(e); + this.formdata = '表单数据: '+JSON.stringify(e.detail.value, null, ' '); + }, + callfun(com, fun) { + this.getrefs(com).then(ref => { + console.log(ref[fun]()); + }); + }, + setlocale(locale) { + this.locale = locale; + this.$i18n.locale = locale; + }, + } +}; \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/main/index.vue b/fapp/ciyon_ap/pages/main/index.vue new file mode 100644 index 0000000..583d9b2 --- /dev/null +++ b/fapp/ciyon_ap/pages/main/index.vue @@ -0,0 +1,121 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/main/me.vue b/fapp/ciyon_ap/pages/main/me.vue new file mode 100644 index 0000000..1ac3d87 --- /dev/null +++ b/fapp/ciyon_ap/pages/main/me.vue @@ -0,0 +1,411 @@ + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/cash_charge.vue b/fapp/ciyon_ap/pages/me/cash_charge.vue new file mode 100644 index 0000000..d2e1306 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/cash_charge.vue @@ -0,0 +1,124 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/cashie_lst.vue b/fapp/ciyon_ap/pages/me/cashie_lst.vue new file mode 100644 index 0000000..768ba30 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/cashie_lst.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/cashin_lst.vue b/fapp/ciyon_ap/pages/me/cashin_lst.vue new file mode 100644 index 0000000..a5df674 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/cashin_lst.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/cashoe_lst.vue b/fapp/ciyon_ap/pages/me/cashoe_lst.vue new file mode 100644 index 0000000..6fbb5a0 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/cashoe_lst.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/cashout_cash.vue b/fapp/ciyon_ap/pages/me/cashout_cash.vue new file mode 100644 index 0000000..6995111 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/cashout_cash.vue @@ -0,0 +1,196 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/cashout_lst.vue b/fapp/ciyon_ap/pages/me/cashout_lst.vue new file mode 100644 index 0000000..9d3dbaa --- /dev/null +++ b/fapp/ciyon_ap/pages/me/cashout_lst.vue @@ -0,0 +1,95 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/invoice_lst.vue b/fapp/ciyon_ap/pages/me/invoice_lst.vue new file mode 100644 index 0000000..7443bdf --- /dev/null +++ b/fapp/ciyon_ap/pages/me/invoice_lst.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/invoicetitle.vue b/fapp/ciyon_ap/pages/me/invoicetitle.vue new file mode 100644 index 0000000..f0a6224 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/invoicetitle.vue @@ -0,0 +1,211 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/invoicing.vue b/fapp/ciyon_ap/pages/me/invoicing.vue new file mode 100644 index 0000000..42463b7 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/invoicing.vue @@ -0,0 +1,102 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/me_bank_info.vue b/fapp/ciyon_ap/pages/me/me_bank_info.vue new file mode 100644 index 0000000..d484552 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/me_bank_info.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/pnt_buylst.vue b/fapp/ciyon_ap/pages/me/pnt_buylst.vue new file mode 100644 index 0000000..1f9a7ba --- /dev/null +++ b/fapp/ciyon_ap/pages/me/pnt_buylst.vue @@ -0,0 +1,77 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/pnt_buynow.vue b/fapp/ciyon_ap/pages/me/pnt_buynow.vue new file mode 100644 index 0000000..972c5fe --- /dev/null +++ b/fapp/ciyon_ap/pages/me/pnt_buynow.vue @@ -0,0 +1,137 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/pnt_lst.vue b/fapp/ciyon_ap/pages/me/pnt_lst.vue new file mode 100644 index 0000000..68f69a1 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/pnt_lst.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/problem_chat.vue b/fapp/ciyon_ap/pages/me/problem_chat.vue new file mode 100644 index 0000000..b5aa5b5 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/problem_chat.vue @@ -0,0 +1,192 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/problem_pub.vue b/fapp/ciyon_ap/pages/me/problem_pub.vue new file mode 100644 index 0000000..741d1ed --- /dev/null +++ b/fapp/ciyon_ap/pages/me/problem_pub.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/safe_ccub.vue b/fapp/ciyon_ap/pages/me/safe_ccub.vue new file mode 100644 index 0000000..4c0184c --- /dev/null +++ b/fapp/ciyon_ap/pages/me/safe_ccub.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/safe_password.vue b/fapp/ciyon_ap/pages/me/safe_password.vue new file mode 100644 index 0000000..0e3271f --- /dev/null +++ b/fapp/ciyon_ap/pages/me/safe_password.vue @@ -0,0 +1,64 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/safe_real.vue b/fapp/ciyon_ap/pages/me/safe_real.vue new file mode 100644 index 0000000..9d386c1 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/safe_real.vue @@ -0,0 +1,253 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/share_qrcode.vue b/fapp/ciyon_ap/pages/me/share_qrcode.vue new file mode 100644 index 0000000..2b6ed63 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/share_qrcode.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/suggest.vue b/fapp/ciyon_ap/pages/me/suggest.vue new file mode 100644 index 0000000..9d4f5ba --- /dev/null +++ b/fapp/ciyon_ap/pages/me/suggest.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/user_bank.vue b/fapp/ciyon_ap/pages/me/user_bank.vue new file mode 100644 index 0000000..6a15876 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/user_bank.vue @@ -0,0 +1,102 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/user_info.vue b/fapp/ciyon_ap/pages/me/user_info.vue new file mode 100644 index 0000000..72ade49 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/user_info.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/user_shipaddr.vue b/fapp/ciyon_ap/pages/me/user_shipaddr.vue new file mode 100644 index 0000000..065ef04 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/user_shipaddr.vue @@ -0,0 +1,252 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/me/user_show.vue b/fapp/ciyon_ap/pages/me/user_show.vue new file mode 100644 index 0000000..8eb9154 --- /dev/null +++ b/fapp/ciyon_ap/pages/me/user_show.vue @@ -0,0 +1,57 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/pub/camera.vue b/fapp/ciyon_ap/pages/pub/camera.vue new file mode 100644 index 0000000..7905d23 --- /dev/null +++ b/fapp/ciyon_ap/pages/pub/camera.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/pub/paper.vue b/fapp/ciyon_ap/pages/pub/paper.vue new file mode 100644 index 0000000..9ca8738 --- /dev/null +++ b/fapp/ciyon_ap/pages/pub/paper.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/pub/part.vue b/fapp/ciyon_ap/pages/pub/part.vue new file mode 100644 index 0000000..5b22008 --- /dev/null +++ b/fapp/ciyon_ap/pages/pub/part.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/pub/psection.vue b/fapp/ciyon_ap/pages/pub/psection.vue new file mode 100644 index 0000000..701f6dd --- /dev/null +++ b/fapp/ciyon_ap/pages/pub/psection.vue @@ -0,0 +1,74 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/pages/pub/web.vue b/fapp/ciyon_ap/pages/pub/web.vue new file mode 100644 index 0000000..8b4a12c --- /dev/null +++ b/fapp/ciyon_ap/pages/pub/web.vue @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/fapp/ciyon_ap/prod.css b/fapp/ciyon_ap/prod.css new file mode 100644 index 0000000..e69de29 diff --git a/fapp/ciyon_ap/uni.scss b/fapp/ciyon_ap/uni.scss new file mode 100644 index 0000000..17b7a53 --- /dev/null +++ b/fapp/ciyon_ap/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333333;//基本色 +$uni-text-color-inverse:#ffffff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16px; + +/* 图片尺寸 */ +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:26px; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:15px; diff --git a/fapp/ciyon_ap/util/ciy.js b/fapp/ciyon_ap/util/ciy.js new file mode 100644 index 0000000..2287c1a --- /dev/null +++ b/fapp/ciyon_ap/util/ciy.js @@ -0,0 +1,2743 @@ +/* +================================================================================= +* License: GPL-2.0 license +* Author: 众产® https://ciy.cn/code +* Version: 0.1.16 +================================================================================= +app函数库 + * alert (await)默认alert + * toast (await)默认提示 + * getpage 获取当前/上页页面 + * setuserstorage 保存用户信息、字典缓存、积分埋点 + * appupdate APP自动更新 + * connectbt 连接蓝牙 + * CiyWebSocket websocket客户端类 + + app&page函数库 + * getme 获取本地me缓存 + * callfunc (await)服务端ajax请求 + * lang 多语言 + * uperr 错误捕获处理 + * json_parse 字符串转json + * json_string json转字符串 + * getstorage 读取storage + * setstorage 写入storage + * clearstorage 清空所有storage + * removestorage 删除storage + +page函数库 + * gourl 页面跳转。支持 http[web]、![原型]、*[alert提示]、$[需登录常规url]、常规url + * goweb 带授权的打开H5页面 + * goloc 按经纬度打开地图 + * gophone 拨打电话 + * goani 持续生成动画 + * copyboard 拷贝文本 + + * isfloat0 校验float是否0 + * isarray 判断变量是否array + * isobject 判断变量是否object + * islocalmedia 判断文件名是否本地文件 + * isimg 是否图片 + * isvideo 是否视频 + * file_ext 获取文件扩展名 + * file_stor ud url转绝对url + * hascode 某个数字是否在多个数字中 + * hasstr 字符串是否包含另一个字符串 + * ccode 以id查询字典中的值 + * scode 以ids查询字典中的多个name + * mcode 以id查询字典中的多级name + * bcode 以int查询字典中的多个name + * enbase64 base64编码 + * svg2bg 将svg转成backgroundImage语法 + + * topad0 数字前面补0 + * tonumtho 整数部分千分位显示 + * tonumdec 小数部分 + * tostr 转字符串 + * toint 转整数 + * tofloat 转小数 + * tostamp 转时间戳 + * todatetime 时间戳转日期时间 + * tofix 处理小数显示 + * tounit 显示多级单位 + * tocyc 显示周期 月/天/分钟 + * tomsk 显示文字遮罩 + * totimespan 将时间转成 xx天后/xx小时前 + * totimesec 将秒数转成 xx天/xx小时 + * totimepoint 将数字转成 xx:xx[:xx] + * todayage 返回日龄天数 + * tobr 将\n替换成
,将<>替换成可显示 + + * pagenoscroll 页面滚动控制 + * settheme 设置暗黑模式 + * setfont 设置敬老模式 + * executepnt 触发积分埋点 + * setTabbar 设置Tabbar + + * getauth (await)获取用户信息,未登录调起登录界面,填充me/g + * scanqr (await)扫二维码 + * popmenu (await)弹出上拉菜单 + * toast (await)提示 + * alert (await)alert弹出框 + * askmsg (await)询问弹出框 + * inputmsg (await)输入弹出框 + * sleep (await)延迟毫秒 + * load_ciydict (await)获取远程静态dict + * load_svgicon (await)获取远程静态svgicon + + * shareparam 分享链接转换 + * getstrparam 解析简易参数 + * urlparam 解析url + * arrayfind 从数组中匹配值。返回index + * objdeepmerge object合并,自动避开静态字典,自动处理带id数组 + * objtolist 将object并入list数组,将id从list中删除 + * objclone 深度复制obj + * str2date 字符串转Date + * bin2hex bin转hex字符串 + * hex2bin hex字符串转bin + + * style2obj 将style属性转成object + * nopower 权限检查 + * getroute 获取route + * com_getpage 组件中获取页面句柄 + * com_gethdft (await)组件中获取页面标题栏/导航栏高度 + * getrefs (await)稳定获取ref + * getrefsSync 确保已加载com的同步函数 + * getrect (await)获取元素尺寸 + * file_upload1 (await)上传单个文件返回url + * file_uploads (await)上传多个文件 + * go/goe (await)golang式异步错误处理 + + page生命周期函数 + * onLoad 页面初始化。存储upid,构建post + * onShow 页面显示调用。设置暗黑主题/敬老字体 + * onPageScroll 页面滚动事件。scrollcbs传递函数引用 + +page默认数据 + * init 初始交互数据 + * srv 默认微服务指向 + * opn 页面urlget参数 + * me 用户状态 + * g 用户及字典数据引用 + * pagedata 页面间数据传递 替代vuex\Pinia + * jsnurl 指向动态服务器(多个)。默认t + * header_* 页面边角尺寸 + * footer_* 页面边角尺寸 + +*/ +export default { + install(ap, app) { + ap.config.globalProperties._proptest = () => {}; //代码受限 + ap.directive('swipe', { //微信小程序暂时无法使用,app/h5支持 + mounted: function(el, binding) { + console.log('wx?', el, binding); + } + }); + app.methods.launch = function() { + var app = this; + app.globalData.scrollcbs = {}; //滚动事件全局回调 + app.globalData.errdata = app.getstorage('err'); //错误收集队列。立即进storage缓存,定时上报。 + if (!(app.globalData.errdata instanceof Array)) + app.globalData.errdata = []; + app.globalData.mqfunc = []; //防重复调用函数队列。 + // #ifdef MP-WEIXIN + var sys_system = wx.getSystemSetting(); + var sys_window = wx.getWindowInfo(); + var sys_appinfo = wx.getAppBaseInfo(); + var sys_appauth = wx.getAppAuthorizeSetting(); + var sys_device = wx.getDeviceInfo(); + console.log('sys_system', sys_system); + console.log('sys_window', sys_window); + console.log('sys_appinfo', sys_appinfo); + console.log('sys_appauth', sys_appauth); + console.log('sys_device', sys_device); + var sys = { + ...sys_system, + ...sys_window, + ...sys_appinfo, + ...sys_appauth, + ...sys_device + }; + if (!sys.screenHeight) { + sys = uni.getSystemInfoSync(); + console.log('getSystemInfoSync', sys); + } + // #endif + // #ifndef MP-WEIXIN + var sys = uni.getSystemInfoSync(); + // #endif + app.globalData._sysinfo = sys; + app.globalData.ciy_page_data = {}; + app.globalData._header_statusbar_height = sys.statusBarHeight; + if (sys.safeAreaInsets) + app.globalData._footer_safe_height = sys.safeAreaInsets.bottom; + else if (sys.safeArea) + app.globalData._footer_safe_height = sys.screenHeight - sys.safeArea.bottom; + else + app.globalData._footer_safe_height = 0; + app.globalData._header_title_height = 40; + app.globalData._header_title_margin = 0; + // #ifdef MP-WEIXIN + var menubtn = wx.getMenuButtonBoundingClientRect(); + console.log('menubtn', menubtn); + app.globalData._menubtn = menubtn; + app.globalData._header_title_margin = sys.screenWidth - menubtn.left; + app.globalData._header_title_height = (menubtn.top - sys.statusBarHeight) * 2 + menubtn.height; + + try { + app.globalData.plugin_wechatsi = requirePlugin("WechatSI"); + app.globalData.plugin_wechatsi_manager = app.globalData.plugin_wechatsi.getRecordRecognitionManager(); + } catch (e) { + console.log('err', e); + } + const accountInfo = uni.getAccountInfoSync(); + app.globalData._wxappid = accountInfo.miniProgram.appId; + app.globalData._wxenv = accountInfo.miniProgram.envVersion; + app.globalData._version = accountInfo.miniProgram.version; + if (!app.globalData._version) + app.globalData._version = accountInfo.miniProgram.envVersion; + // #endif + + setInterval(() => { //静默刷新字典。静默上传前端错误 + if (app.globalData._restorage) { + app.callfunc({ + func: 'login.restorage', + data: {}, + loadhide: true, + }).then(retjson => { + if (retjson.code != 1) + return; + console.log('新字典已刷新', retjson); + var userdata = app.setuserstorage(retjson); + var ps = getCurrentPages(); + userdata.g = app.getstorage('g', {}); + for (var p = 0; p < ps.length; p++) { + for (var key in userdata) { + //#ifdef MP-WEIXIN + ps[p].$vm[key] = userdata[key]; + //#endif + //#ifndef MP-WEIXIN + ps[p][key] = userdata[key]; + //#endif + } + } + }); + } + app.globalData._restorage = false; + if (app.globalData.errdata.length > 0) { + app.callfunc({ + func: 'login.uperr', + data: { + meid: app.getme().id, + err: app.globalData.errdata + }, + loadhide: true, + }); + app.globalData.errdata = []; + app.removestorage('err'); + } + }, 1000); + setInterval(async () => { + if (app.globalData.mqfunc.length > 0) { + console.log(app.globalData.mqfunc); + var ret = await app.callfunc({ + func: app.globalData.mqfunc[0].func, + data: app.globalData.mqfunc[0].data, + loadhide: true, + }); + var name = app.globalData.mqfunc[0].name; + for (var i = app.globalData.mqfunc.length - 1; i >= 0; i--) { + if (app.globalData.mqfunc[i].name == name) { + app.globalData.mqfunc[i].callback(ret); + app.globalData.mqfunc.splice(i, 1); + } + } + } + }, 200); + }; + app.methods.lang = function(str) { + var app = this; + if (typeof(app.$t) == 'function') + return app.$t(str); + return str; + }; + app.methods.alert = async function(content) { + return new Promise((resolve, reject) => { + var opt = { + content: content, + showCancel: false + }; + opt.success = res => { + resolve(true); + }; + uni.showModal(opt); + }).catch(e => { + return e; + }); + }; + app.methods.toast = async function(content, icon) { + return new Promise((resolve, reject) => { + if (typeof(icon) === 'function') { + cb = icon; + icon = 'none'; + } + if (!icon) + icon = 'none'; + uni.showToast({ + title: content, + icon: icon + }); + setTimeout(function() { + resolve(); + }, 2000); + }).catch(e => { + return e; + }); + }; + app.methods.getpage = function(idx) { //idx 0当前页,1上一页 + var ps = getCurrentPages(); + var p = null; + idx = idx || 0; + if (idx > 0) { + if (ps.length - 1 < idx) + return null; + p = ps[ps.length - 1 - idx]; + } else { + p = ps[ps.length - 1]; + } + // #ifdef MP-WEIXIN + p = p.$vm; + // #endif + return p; + }; + app.methods.getme = function() { + var me = this.getstorage("me"); + if (!me) + return { + id: 0 + }; + return me; + }; + app.methods.uperr = function(type, msg) { + console.warn('uperr', type, msg); + var errdata = {}; + errdata.type = type; + errdata.t = parseInt(new Date().getTime() / 1000); + errdata.msg = ''; + if (typeof(msg) == 'object') + errdata.msg = this.json_string(msg); + else + errdata.msg = msg + ''; + this.globalData.errdata.push(errdata); + this.setstorage('err', this.globalData.errdata); + }; + app.methods.json_parse = function(data) { + try { + if (data.length > 0 && data[0] != '[' && data[0] != '{') { + var ind = data.indexOf('{'); + if (ind == -1) + return null; + if (ind > 0) + data = data.substring(ind); + } + return JSON.parse(data); + } catch (e) { + console.error('json_parse', e, 'data=', data); + } + return null; + }; + app.methods.json_string = function(data) { + try { + return JSON.stringify(data); + } catch (e) { + console.error('json_string', e); + } + return ''; + }; + app.methods.callfunc = async function(opt) { + //成功{code:1,...} + //失败{errmsg:'错误信息'} + //func + //data = null 无post数据,GET方法 + //catch=0 不缓存,>0缓存 + //loadhide=true 默认false,取消加载中显示 loadtxt + var app = this; + return new Promise((resolve, reject) => { + opt = opt || {}; + if (opt.func.substring(0, 4) == 'http') + url = opt.func; + else { + opt.srv = opt.srv || app.globalData.srv; + var url = app.globalData.jsnurl[opt.srv]; + if (!url) + return reject({ + errmsg: 'srv无法匹配:' + opt.srv + }); + url += opt.func; + } + opt.cache = opt.cache || 0; // 0不缓存 >0 对比时间,是否请求 + if (opt.cache > 0) { + if (!opt.cachekey) { + opt.cachekey = 'f_' + opt.func; + for (var i in opt.data) { + if (i == 'once' || i == '_pf') + continue; + if (typeof(opt.data[i]) === 'object') + continue; + opt.cachekey += '_' + i.substring(0, 1) + opt.data[i]; + } + } + if (opt.cache > 1) { + var dat = app.getstorage(opt.cachekey); + var t = new Date().getTime() - (typeof(dat) == 'object' ? dat.t : 0); + if (t < opt.cache * 1000) { + if (opt.pagethis && opt.pagethis._stopPullDown) { + opt.pagethis._stopPullDown = false; + uni.stopPullDownRefresh(); + } + return resolve(dat.d); + } + } + } + if (!opt.loadhide) { + opt._showload = setTimeout(function() { + opt._showloaded = true; + uni.showToast({ + title: opt.loadtxt || '加载中', + icon: 'loading', + duration: 3000, + mask: true + }); + }, 500); + } + var header = {}; + opt.data = opt.data || {}; + if (app.globalData._wxappid) + opt.data._appid = app.globalData._wxappid; + if (opt.pagethis) + opt.data = Object.assign({}, opt.pagethis.opn, opt.data); + opt.data._pf = 'MB' + new Date().getTime() + '_' + parseInt(80000000 + Math.random() * 10000000); + var reqdata = opt.data; + if (opt.file) { + reqdata = opt.file; + //opt.data并入url,仅upload用,暂不实现 + } + const makeRequest = () => { + header['ciyauth'] = app.getstorage("_" + app.globalData.tokenfield); + uni.request({ + url: url, + data: reqdata, + withCredentials: true, + dataType: 'text', + method: opt.method ? opt.method : 'POST', + header: header, + fail: res => { + var errmsg = res.errMsg || 'nofind errMsg.'; + if (errmsg.indexOf('fail abort') > 0) + errmsg = '网络信号不好'; + else if (errmsg.indexOf('equest:fail timeout') > 0) + errmsg = '网络访问超时'; + else if (errmsg.indexOf('equest:fail') > 0) + errmsg = '网络不可用'; + return reject({ + errmsg: errmsg + }); + }, + complete: res => { + if (opt._showload) { + clearTimeout(opt._showload); + if (opt._showloaded) + uni.hideToast(); + } + if (opt.pagethis && opt.pagethis._stopPullDown) { + opt.pagethis._stopPullDown = false; + uni.stopPullDownRefresh(); + } + }, + success: res => { + var json = app.json_parse(res.data); + if (json === null) { + res._url = url; + res._post = opt.data; + app.uperr("h5.noajaxjson", res); + return reject({ + errmsg: '返回JSON错误:' + res.statusCode + }); + } + var dictversion = res.header[app.globalData.tokenfield + 're']; + if (dictversion) { + console.log('restorage new', dictversion); + app.globalData._restorage = true; //通知app.vue自动刷新 + } + var newauth = ''; + for (var i in res.header) { + if (i.toLowerCase() == '_ciyauth') + newauth = res.header[i]; + } + if (!newauth) + newauth = json['_ciyauth']; + if (newauth) { + console.log('newauth new', newauth); + app.setstorage('_' + app.globalData.tokenfield, newauth); + } + if (json.code != 1) { + if (json.code == 2) { + app.removestorage('me'); + var pg = app.getpage(); + if (!pg.isPage) + return reject({ + errmsg: '' + }); + pg.getauth().then(res => { + if (res.me.id > 0) + makeRequest(); + else + uni.navigateBack(); + }); + return; + } else { + return reject(json); + } + } + try { + //delete json.code; + if (opt.cache > 0) { + app.setstorage(opt.cachekey, { + d: json, + t: new Date().getTime() + }); + } + return resolve(json); + } catch (e) { + res._url = url; + res._post = opt.data; + res._cache = e; + app.uperr("h5.ajaxrun", res); + return reject({ + errmsg: '请求错误:' + e.message + }); + } + } + }); + } + makeRequest(); + }).catch(e => { + if (e.error != 'NULL') { + //app.toast(e.errmsg); + } + return e; + }); + }; + app.methods.setuserstorage = function(json) { + var app = this; + app.setstorage("me", json.me); + var pnttrack = app.getstorage('_pnttrack', {}); + if (!(pnttrack instanceof Object)) + pnttrack = {}; + var day = new Date(); + day.setHours(0, 0, 0, 0); + day = parseInt(day.getTime() / 1000); + for (var pt in json.pnttrack) { + let track = json.pnttrack[pt]; + let cnt = 0; + if (pnttrack[track.id]) + cnt = pnttrack[track.id].pnt; + pnttrack[track.id] = { + name: track.name, + p: track.point, + h24: track.limh24, + day: day, + cnt: cnt + } + } + app.setstorage("_pnttrack", pnttrack); + + var sav = app.getstorage('g', {}); + var arr = json.storage; + for (var code in arr) { + if (code == 'cata') { + for (var c in arr[code]) { + if (arr[code][c].cbid > 0) + continue; + var types = arr[code][c].codeid; + var codes = new Array(); + for (var d in arr[code]) { + if (arr[code][d].cbid != arr[code][c].id) + continue; + var cs = {}; + cs.id = arr[code][d].codeid; + cs.name = arr[code][d].name; + if (arr[code][d].extdata) + cs.extdata = arr[code][d].extdata; + if (arr[code][d].clas) + cs.clas = arr[code][d].clas; + if (arr[code][d].isuse != 1) + cs.isuse = arr[code][d].isuse; + if (arr[code][d].upid > 0) { + for (var i in arr[code]) { + if (arr[code][d].upid == arr[code][i].id) { + cs.upid = arr[code][i].codeid; + break; + } + } + } + codes.push(cs); + } + if (types) + sav[types] = codes; + } + } else { + sav[code] = arr[code]; + } + } + app.setstorage('g', sav); + return { + me: json.me + } + }; + app.methods.appupdate = async function(plat, cb) { + var app = this; + // #ifdef APP-PLUS + plus.runtime.getProperty(plus.runtime.appid, async widgetInfo => { + app.callfunc({ + func: 'login.getappver', + showload: false, + data: { + vercode: widgetInfo.versionCode + }, + success: async json => { + if (!json.url) + return app.toast('已经是最新版本'); + if (json.must && typeof(cb) == 'function') { + if (!await cb(json.verinfo)) + return; + } + app.toast('更新中...'); + uni.downloadFile({ + url: json.url, + success: res => { + if (res.statusCode !== 200) + return app.alert('更新文件下载失败' + json.url); + plus.runtime.install(res.tempFilePath, { + force: true + }, function() { + app.toast('更新成功,即将热重启', () => { + plus.runtime.restart(); + }); + }, function(e) { + console.log(e); + app.alert('更新失败:' + e.message); + }); + } + }); + } + }); + }); + // #endif + // #ifdef MP-WEIXIN + if (plat != 'app') { + const updateManager = uni.getUpdateManager(); + updateManager.onCheckForUpdate(res => { + console.log('onCheckForUpdate', res); + if (!res.hasUpdate) + return app.toast('已经是最新版本'); + app.toast('新版本更新中...'); + updateManager.onUpdateReady(async res => { + console.log('onUpdateReady', res); + if (typeof(cb) == 'function') { + if (await cb('新版本已经准备好,是否重启应用?')) + updateManager.applyUpdate(); + } + }); + updateManager.onUpdateFailed(res => { + console.log('onUpdateFailed', res); + app.alert('更新失败,请重新启动微信再试'); + }); + }); + } + // #endif + }; + app.methods.connectbt = function(devup, devtype, deviceid) { + var app = this; + if (app.globalData.dev_bt[devup]) { + app.globalData.dev_bt[devup].bt_devclose(); + } else { + app.globalData.dev_bt[devup] = new cbt.CBTBase(devup, devtype); + } + var btdev = app.globalData.dev_bt[devup]; + btdev.oncreated = services => { + btdev.setwrt(services); + } + // btdev.onfail = res => { + // } + // btdev.onsuccess = res => { + // } + btdev.bt_devopen(deviceid); + }; + app.methods.getstorage = function(key, def) { + def = def || ''; + var x = uni.getStorageSync(key); + if (x == '') + return def; + var json = this.json_parse(x); + if (json !== null) + return json; + return x; + }; + app.methods.setstorage = function(key, val) { + if (val === undefined) + return this.removestorage(key); + var x = val; + if (typeof(val) == 'object') + x = JSON.stringify(val); + return uni.setStorageSync(key, x); + }; + app.methods.clearstorage = function() { + return uni.clearStorageSync(); + }; + app.methods.removestorage = function(key) { + var keylen = key.length - 1; + if (key.substring(keylen) != '*') + return uni.removeStorageSync(key); + key = key.substring(0, keylen); + var keys = uni.getStorageInfoSync(); + for (var i in keys.keys) { + if (keys.keys[i].substring(0, keylen) == key) + uni.removeStorageSync(keys.keys[i]); + } + }; + + ap.mixin({ + data() { + return { + header_statusbar_height: 0, //顶部状态栏(时间电池、躲过刘海/镂空位置) + header_title_height: 40, //顶部标题栏高度(正好容纳胶囊) + header_title_margin: 0, //顶部标题栏左右留白(正好躲过胶囊,且可使文字居中) + footer_safe_height: 0, //底部安全高度(躲过刘海屏、底部横线等) + pageclass: 'dark', + editdata: {}, + pagedata: {}, //外部g.page_init + isPage: false, + jsnurl: {}, + pageno: 0, + init: {}, + srv: 't', + meta: { + theme: 'light', + bgcolor: '#ffffff', + styles: { + 'min-height': '100vh', + 'background-color': '#ffffff', + 'color': '#000000' + }, + style: 'min-height:100vh;background-color:#ffffff;color:#000000;', + fontsize: '16px', + pulldown: true, + }, + opn: {}, //页面传参 + me: {}, + //g: {}, //本地与dydict整合,onshow更新本地,同时合并dydict。 + }; + }, + created() {}, //全局混入的 created 钩子被调用 + mounted() {}, + onLoad(opn) { + this.isPage = true; + if (opn.scene) { + var scene = decodeURIComponent(opn.scene); + console.log('scene', scene); + var obj = this.getstrparam(scene); + for (var i in obj) + opn[i] = obj[i]; + } + this.opn = opn; + var upid = this.toint(this.opn.upid); + if (upid > 0) + this.setstorage('upid', upid); + this.pagepost = { //page快捷检索post值 + query: {} + }; + this.header_statusbar_height = app.globalData._header_statusbar_height; + this.header_title_height = app.globalData._header_title_height; + this.header_title_margin = app.globalData._header_title_margin; + this.footer_safe_height = app.globalData._footer_safe_height; + this.pagedata = app.globalData.ciy_page_data; + this.jsnurl = app.globalData.jsnurl; + //this.constant = {maxtimes: 9999999999999}; + this.me = this.getme(); + // if (app.globalData.ciy_page_g) + // this.g = app.globalData.ciy_page_g; + // else + // this.g = this.getstorage('g', {}); + uni.hideTabBar({ + fail: res => {} + }); + }, + computed: { + g() { + if (app.globalData.ciy_page_g) + return app.globalData.ciy_page_g; + else + return this.getstorage('g', {}); + } + }, + onShow() { + this.settheme(); + this.setfont(); + this.me = this.getme(); + // var ref = this.getrefsSync('tabbar'); + // if (ref) + // ref.loadtabbardata(); + }, + onPageScroll(e) { + var app = getApp(); + if (Object.keys(app.globalData.scrollcbs).length == 0) + return; + var route = this.getroute(); + for (var i in app.globalData.scrollcbs) { + app.globalData.scrollcbs[i](e, route); + } + }, + methods: { + showe(e) { + console.log('showe', e); + return ''; + }, + callfunc(opt) { + opt.pagethis = this; + return getApp().callfunc(opt); + }, + calltxt(opt) { + return new Promise((resolve, reject) => { + opt = opt || {}; + uni.request({ + url: opt.url, + data: opt.data, + dataType: 'text', + method: opt.data ? 'POST' : 'GET', + header: opt.header, + fail: res => { + var errmsg = res.errMsg || 'nofind errMsg.'; + if (errmsg.indexOf('fail abort') > 0) + errmsg = '网络信号不好'; + else if (errmsg.indexOf('equest:fail timeout') > 0) + errmsg = '网络访问超时'; + else if (errmsg.indexOf('equest:fail') > 0) + errmsg = '网络不可用'; + return reject({ + errmsg: errmsg + }); + }, + success: res => { + if (res.statusCode == 200) + return resolve(res.data); + return reject({ + errmsg: res.data + }); + } + }); + }); + }, + getme() { + return getApp().getme(); + }, + uperr(type, msg) { + return getApp().uperr(type, msg); + }, + json_parse(data) { + return getApp().json_parse(data); + }, + json_string(data) { + try { + return JSON.stringify(data); + } catch (e) { + console.log('json_string', e); + } + return ''; + }, + getstorage(key, def) { + var app = getApp(); + return app.getstorage(key, def); + }, + setstorage(key, val) { + var app = getApp(); + return app.setstorage(key, val); + }, + clearstorage() { + return uni.clearStorageSync(); + }, + removestorage(key) { + var app = getApp(); + return app.removestorage(key); + }, + lang(str) { + if (typeof(this.$t) == 'function') + return this.$t(str); + return str; + }, + + async gourl(b, type, initdata, initkey) { + //url http开头,全屏打开web页面 + //!开头,打开原型图页面 + //*开头,alert提示 + //$开头,需要登录 + //%开头,需要登录,且个人昵称等信息已完善 + //^开头,需要登录,且已实名认证 + //&开头,需要登录,且已实名认证+绑定银行卡 + var url = ''; + if (typeof(b) != 'string') { + url = b.currentTarget.dataset.url; + if (!initdata) { + initdata = b.currentTarget.dataset.data; + } + if (!initkey) { + initkey = b.currentTarget.dataset.key; + } + } else { + url = b; + } + if (!initdata) + initdata = {}; + if (!initkey) + initkey = 'base'; + if (!url) + return console.warn('gourl传参错误:' + url); + var app = getApp(); + if (url.substring(0, 4) == 'http') + return this.goweb(url); + if (url[0] == '!') { + var dmos = url.substring(1).split('|'); + if (dmos.length < 2) + dmos[1] = ''; + uni.navigateTo({ + url: '/pages/pub/web?web=' + encodeURIComponent('https://i.qiboc.cn/app.goc?menuid=' + dmos[0] + '&title=no&tag=' + dmos[1]) + (dmos[2] ? '&name=' + dmos[2] : ''), + animationType: 'pop-in', + animationDuration: 1000 + }); + return; + } else if (url[0] == '*') { + return this.alert(url.substring(1)); + } else if (url[0] == '$') { + url = url.substring(1); + var auth = await this.getauth(); + if (auth.me.id == 0) + return; + } else if (url[0] == '%') { + url = url.substring(1); + var auth = await this.getauth('info'); + if (auth.me.id == 0) + return; + } else if (url[0] == '^') { + url = url.substring(1); + var auth = await this.getauth('real'); + if (auth.me.id == 0) + return; + } else if (url[0] == '&') { + url = url.substring(1); + var auth = await this.getauth('bank'); + if (auth.me.id == 0) + return; + } else if (url[0] == '|') { + url = url.substring(1); + var auth = await this.getauth('cciy'); + if (auth.me.id == 0) + return; + } + app.globalData.ciy_page_data[initkey] = { + ...initdata + }; + if (this.isPage) + app.globalData.ciy_page_g = this.g; + if (type == 'redirect') { + uni.redirectTo({ + url: url, + animationType: 'pop-in', + animationDuration: 1000, + fail: res => { + uni.switchTab({ + url: url, + fail: res => { + return this.toast(name + ' 未定义链接:' + url); + } + }); + } + }); + } else { + uni.navigateTo({ + url: url, + animationType: 'pop-in', + animationDuration: 1000, + fail: res => { + uni.switchTab({ + url: url, + fail: res => { + return this.toast(name + ' 未定义链接:' + url); + } + }); + } + }); + } + }, + goweb(url, name) { + var app = getApp(); + url += (url.indexOf('?') == -1) ? '?' : '&'; + url += '_ciyauth=' + app.getstorage('_' + app.globalData.tokenfield); + uni.navigateTo({ + url: '/pages/pub/web?web=' + encodeURIComponent(url) + (name ? '&name=' + name : ''), + animationType: 'pop-in', + animationDuration: 1000 + }); + }, + goloc(lat, lng, bet) { + bet = bet || 10000000; + uni.openLocation({ + latitude: this.tofloat(lat) / bet, + longitude: this.tofloat(lng) / bet + }); + }, + gophone(phone) { + if (!phone) + return; + uni.makePhoneCall({ + phoneNumber: phone + }); + }, + async goani(opn, cb, othcb) { + return new Promise(async (resolve, reject) => { + var aniinit = { + timingFunction: 'ease', + transformOrigin: '50% 50% 0', + delay: 0 + }; + if (typeof(opn) == 'string') + opn = { + anis: opn + }; + opn.init = opn.init || aniinit; + if (typeof(opn.anis) == 'string') { + var anist = opn.anis.split('|'); + var aniarr = []; + for (var i in anist) { + if (anist[i] == 'hide') { + aniarr.push({ + hide: true + }); + continue; + } + var stp = anist[i].split(','); + var dur = 0; + for (var s in stp) { + var pre = stp[s].substring(0, 2); + var val = stp[s].substring(2); + if (pre == 'ra') + aniarr.push({ + rotate: parseFloat(val) + }); + else if (pre == 'rx') + aniarr.push({ + rotateX: parseFloat(val) + }); + else if (pre == 'ry') + aniarr.push({ + rotateY: parseFloat(val) + }); + else if (pre == 'rz') + aniarr.push({ + rotateZ: parseFloat(val) + }); + else if (pre == 'sa') + aniarr.push({ + scale: parseFloat(val) + }); + else if (pre == 'sx') + aniarr.push({ + scaleX: parseFloat(val) + }); + else if (pre == 'sy') + aniarr.push({ + scaleY: parseFloat(val) + }); + else if (pre == 'sz') + aniarr.push({ + scaleZ: parseFloat(val) + }); + else if (pre == 'ta') + aniarr.push({ + translate: val + }); + else if (pre == 'tx') + aniarr.push({ + translateX: val + }); + else if (pre == 'ty') + aniarr.push({ + translateY: val + }); + else if (pre == 'tz') + aniarr.push({ + translateZ: val + }); + else if (pre == 'wa') + aniarr.push({ + skew: parseFloat(val) + }); + else if (pre == 'wx') + aniarr.push({ + skewX: parseFloat(val) + }); + else if (pre == 'wy') + aniarr.push({ + skewY: parseFloat(val) + }); + else if (pre == 'op') + aniarr.push({ + opacity: parseFloat(val) + }); + else if (pre == 'bc') + aniarr.push({ + backgroundColor: val + }); + else if (pre == 'ww') + aniarr.push({ + width: val + }); + else if (pre == 'hh') + aniarr.push({ + height: val + }); + else if (pre == 'tt') + aniarr.push({ + top: val + }); + else if (pre == 'll') + aniarr.push({ + left: val + }); + else if (pre == 'bb') + aniarr.push({ + bottom: val + }); + else if (pre == 'rr') + aniarr.push({ + right: val + }); + else + dur = this.toint(stp[s]); + } + aniarr.push({ + step: { + duration: dur + } + }); + } + opn.anis = aniarr; + } + var animation = uni.createAnimation(opn.init); + for (var aa in opn.anis) { + var key = Object.keys(opn.anis[aa])[0]; + var val = opn.anis[aa][key]; + if (key == 'step') { + val.duration = this.toint(val.duration); + if (val.duration < 16) + val.duration = 100; + animation.step(val); + cb(animation.export()); + await this.sleep(val.duration); + animation = uni.createAnimation(opn.init); + } else if (key == 'hide') { + if (typeof(othcb) == 'function') + othcb(key, val); + } else if (animation[key]) { + if (typeof(val) == 'object') + animation[key](...val); + else + animation[key](val); + } + } + resolve(); + }).catch(e => { + return e; + }); + }, + copyboard(b, bsilent) { + if (this.isobject(b)) + b = b.currentTarget.dataset.text; + if (!b) + return; + uni.setClipboardData({ + data: b + }); + if (!bsilent) + app.toast('已复制到剪贴板'); + }, + + isfloat0(num) { + num = parseFloat(num); + if (isNaN(num)) + return true; + return (num < 0.001 && num > -0.001); + }, + isarray(value) { + return Object.prototype.toString.call(value).toLowerCase().indexOf('object array') > -1; + }, + isobject(value) { + return Object.prototype.toString.call(value).toLowerCase().indexOf('object object') > -1; + }, + islocalmedia(file) { + if (!file) + return false; + if (file.substring(0, 9) == 'wxfile://') + return true; + return false; + }, + isimg(file) { + var ext = this.file_ext(file); + return (["PNG", "JPG", "GIF", "BMP", "WEBP", "SVG"].indexOf(ext) >= 0); + }, + isvideo(file) { + var ext = this.file_ext(file); + return (["MP3", "MP4"].indexOf(ext) >= 0); + }, + file_ext(file) { + if (typeof(file) != 'string') { + if (file.name) + file = file.name; + if (file.tempFilePath) + file = file.tempFilePath; + } + var d = file.lastIndexOf('.'); + if (d >= 0) { + var ext = file.substring(d + 1).toUpperCase(); + if (ext == 'JPEG' || ext == 'JPE') + return 'JPG'; + return ext; + } + return ''; + }, + file_stor(url, act) { + if (!url) + return ''; + if (this.islocalmedia(url)) + return url; + if (url.substring(0, 4).toLowerCase() == 'http') + return url; + var app = getApp(); + if (act == 'thumb') { + var pre = app.globalData.storthumb[url[0]]; + if (pre) { + if (pre.indexOf('#img#') > -1) + return pre.replace('#img#', '') + url.substring(1); + else + return app.globalData.storlist[url[0]] + url.substring(1) + pre; + } + } + return app.globalData.storlist[url[0]] + url.substring(1); + }, + hascode(num, codes) { + if (!this.isarray(codes)) + codes = (codes + '').split(','); + for (var c in codes) { + if (num == codes[c]) + return true; + } + return false; + }, + hasstr(str, find) { + if (!str) + return false; + return str.indexOf(find) > -1; + }, + ccode(arr, value, field, nonestr) { + field = field || 'name'; + nonestr = nonestr || '--'; + if (typeof(arr) != 'object') { + arr = this.g[arr] || this.init[arr]; + if (typeof(arr) != 'object') + return '!'; + } + for (var i = 0; i < arr.length; i++) { + if (arr[i].id == value) { + if (field == 'idx') + return i; + if (field == '_obj') + return arr[i]; + if (arr[i][field]) + return arr[i][field]; + return nonestr; + } + } + if (field == '_obj') + return null; + if (value < 1) + return nonestr; + return ''; //[' + value + ']'; + }, + scode(arr, ids, field) { + if (typeof(arr) != 'object') + return ['!']; + ids = ids || ''; + var vals = ids.split(','); + var names = []; + for (var v = 0; v < vals.length; v++) { + for (var i = 0; i < arr.length; i++) { + if (arr[i].id != vals[v]) + continue; + if (field) + names.push(arr[i][field]); + else + names.push(arr[i]); + } + } + return names; + }, + mcode(arr, value, field) { + if (typeof(arr) != 'object') + return []; + var ret = []; + for (var x = 0; x < 100; x++) { + var bfind = false; + for (var i = 0; i < arr.length; i++) { + if (arr[i].id == value) { + bfind = true; + value = arr[i].upid; + if (field) + ret.unshift(arr[i][field]); + else + ret.unshift(arr[i]); + break; + } + } + if (!bfind) + break; + } + return ret; + }, + bcode(arr, value, field) { + if (typeof(arr) != 'object') + return ['!']; + var names = []; + for (var i = 0; i < arr.length; i++) { + if ((value & (1 << i))) { + if (field) + names.push(arr[i][field]); + else + names.push(arr[i]); + } + } + return names; + }, + enbase64(str) { + var c1, c2, c3; + var base64EncodeChars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var i = 0, + len = str.length, + string = ''; + while (i < len) { + c1 = str.charCodeAt(i++) & 255; + if (i == len) { + string += base64EncodeChars.charAt(c1 >> 2); + string += base64EncodeChars.charAt((c1 & 3) << 4); + string += "=="; + break; + } + c2 = str.charCodeAt(i++); + if (i == len) { + string += base64EncodeChars.charAt(c1 >> 2); + string += base64EncodeChars.charAt(((c1 & 3) << 4) | ((c2 & 240) >> 4)); + string += base64EncodeChars.charAt((c2 & 15) << 2); + string += "="; + break; + } + c3 = str.charCodeAt(i++); + string += base64EncodeChars.charAt(c1 >> 2); + string += base64EncodeChars.charAt(((c1 & 3) << 4) | ((c2 & 240) >> 4)); + string += base64EncodeChars.charAt(((c2 & 15) << 2) | ((c3 & 192) >> 6)); + string += base64EncodeChars.charAt(c3 & 63) + } + return string; + }, + svg2bg(svg) { + if (!svg) + return ''; + if (svg.substring(0, 4) == 'url(') + return svg; + return "url('data:image/svg+xml;charset=utf-8;base64," + this.enbase64(svg) + "')"; + }, + + topad0(num, length) { + if ((num + "").length > length) + return num; + return (Array(length).join('0') + num).slice(-length); + }, + tonumtho(num) { + return this.toint(num).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); + }, + tonumdec(num, showzero, len) { + len = len || 2; // 与tofix不同点,小数长度不变,如 1.10 + var m2 = Math.round((num - parseInt(num)) * Math.pow(10, len)); + if (m2 == 0) { + if (showzero) + return '.' + '0'.repeat(len); + else + return ''; + } + m2 = m2 + ''; + if (m2.length < len) + m2 = '0'.repeat(len - m2.length) + m2; + return '.' + m2; + }, + tocciy(cciy) { + if (!cciy || cciy == '0') //cciy必须为字符串,否则js无法处理 + return ''; + return 'cx' + cciy.substring(0, 1) + '...' + cciy.substring(cciy.length - 6); + }, + tostr(obj) { + if (!obj) + return ''; + if (typeof(obj) == 'object') + return JSON.stringify(obj).replace(/"/g, '“'); + return obj + ''; + }, + toint(val, defval) { + defval = defval || 0; + var ret = parseInt(val); + if (isNaN(ret)) + return defval; + else if (ret == undefined) + return defval; + else + return ret; + }, + tofloat(val, defval) { + defval = defval || 0; + var ret = parseFloat(val); + if (isNaN(ret)) + return defval; + else + return ret; + }, + tostamp(dt) { + if (dt === undefined) + dt = new Date(); + var t = dt.getTime(); + if (isNaN(t)) + return 0; + return parseInt(t / 1000); + }, + todatetime(time, format, nostr) { + nostr = nostr || '--'; + if (time == 0) + return nostr; + var t; + if (time instanceof Date) { + if (time.getTime() == 0) + return nostr; + t = time; + } else if (time == -1) + t = new Date(); + else + t = new Date(time * 1000); + var year = t.getFullYear(); + var month = t.getMonth() + 1; + var month0 = month < 10 ? '0' + month : month; + var day = t.getDate(); + var day0 = day < 10 ? '0' + day : day; + var hour = t.getHours(); + var hour0 = hour < 10 ? '0' + hour : hour; + var minute = t.getMinutes(); + var minute0 = minute < 10 ? '0' + minute : minute; + var second = t.getSeconds(); + var second0 = second < 10 ? '0' + second : second; + if (format == 'id') + return day0 + hour0 + minute; + if (format == 'H') + return year + "-" + month0 + "-" + day0 + " " + hour0; + if (format == 'd') + return year + "-" + month0 + "-" + day0; + if (format == 'D') + return year + "年" + month + "月" + day + '日'; + if (format == 'x') + return month0 + "-" + day0; + if (format == 'm') + return year + "-" + month0; + if (format == 'n') + return year + "-" + month; + if (format == 'y') + return year; + if (format == 'M') + return year + "年" + month + '月'; + if (format == 'i') + return hour0 + ":" + minute0; + if (format == 's') + return year + "-" + month0 + "-" + day0 + " " + hour0 + ":" + minute0 + ":" + + second0; + if (format == 'st') + return month0 + "-" + day0 + " " + hour0 + ":" + minute0; + return year + "-" + month0 + "-" + day0 + " " + hour0 + ":" + minute0; + }, + tofix(num, length) { + //length,正数,小数点保留n位,不去0。 + //负数,小数点保留n位,全0则不显示。 + //0,按数长保留,尽量少的位数显示。 + //不填,-4 + num = parseFloat(num); + if (isNaN(num)) + num = 0; + if (length === undefined) + length = -4; + if (length == 0) { + if (num >= 1000) + return parseInt(num); + var numlen = (parseInt(num) + '').length; + length = 4 - numlen; + if (Math.abs(num % 1) < Math.pow(0.1, length)) + return parseInt(num); + num = num.toFixed(length); + var y = '.'; + for (var i = 0; i < length; i++) + y += "0"; + if (num.substring(num.length - length - 1) == y) + num = num.substring(0, num.length - length - 1); + return num; + } else if (length < 0) { + num = num.toFixed(-length); //xx.xx + var inde = num.split('.'); + if (inde[1] && /^0+$/.test(inde[1])) + return inde[0]; + return num.replace(/\.?0+$/, ''); + } + num = num.toFixed(length); + return num; + }, + tounit(ori) { + var us = ori.split('|'); + if (us.length == 5) + return '1' + us[4] + us[3] + us[2] + ' 1' + us[2] + us[1] + us[0]; + else if (us.length == 3) + return '1' + us[2] + us[1] + us[0]; + return us[0]; + }, + tocyc(ori) { + if (ori == 0) + return '--'; + if (ori < 0) + return -ori + this.lang('月'); + if (ori >= 86400) + return parseInt(ori / 86400) + this.lang('天'); + return parseInt(ori / 60) + this.lang('分钟'); + }, + tomsk(ori, pstr) { + if (!ori) + return ''; + var retstr = ''; + ori = ori + ''; + if (ori.length > pstr.length) { + retstr = ori.substring(0, ori.length - pstr.length); + ori = ori.substring(ori.length - pstr.length); + } + for (var i = 0; i < Math.min(ori.length, pstr.length); i++) { + if (pstr.charAt(i) == '*') + retstr += '*'; + else + retstr += ori.charAt(i); + } + return retstr; + }, + totimespan(time, bestr, zero, before) { + bestr = bestr || ''; + zero = zero || this.lang('time.now'); + if (time == 0 || time === undefined) + return '--'; + var t = new Date(time * 1000); + var diff = (new Date() - t) / 1000; + if (before) + diff = -diff; + if (diff < 10) //10秒以内 + return zero; + return this.totimesec(diff, bestr); + }, + totimesec(diff, bestr) { + bestr = bestr || ''; + if (diff < 60) //60秒以内 + return parseInt(diff) + this.lang("秒") + bestr; + if (diff < 3600) //60分以内 + return parseInt(diff / 60) + this.lang("分钟") + bestr; + if (diff < 86400) //24小时以内 + return parseInt(diff / 3600) + this.lang("小时") + bestr; + if (diff < 2592000) //30天以内 + return parseInt(diff / 86400) + this.lang("天") + bestr; + if (diff < 31536000) //12月以内 + return parseInt(diff / 2592000) + this.lang("个月") + bestr; + return parseInt(diff / 31536000) + this.lang("年") + bestr; + }, + totimepoint(time, bsecond) { + if (time <= 0 || time > 86400) + return ''; + time--; + var hour = this.toint(time / 3600); + var minute = this.toint((time - hour * 3600) / 60); + var ret = this.topad0(hour, 2) + ':' + this.topad0(minute, 2); + if (!bsecond) + return ret; + var second = time - hour * 3600 - minute * 60; + ret += ':' + this.topad0(second, 2); + return ret; + }, + todayage(time, noday) { + if (time == 0 || time === undefined) + return '--'; + var t = new Date(time * 1000); + var diff = (new Date() - t) / 1000; + diff = parseInt(diff / 86400) + 1; + if (diff < 30) //30天以内 + return diff + "天"; + var month = parseInt(diff / 30); + if (noday) + return month + '个月'; + return month + '个月 ' + (diff - month * 30) + '天'; + }, + tobr(txt, autohtml) { + if (!txt) + return ''; + if (!autohtml) { + txt = txt.replace(//g, '>'); + //txt = txt.replace(/\|/g, '
'); + } + txt = txt.replace(/\n/g, '
'); + return txt; + }, + + pagenoscroll(b) { + // #ifdef MP-WEIXIN + if (b) { + wx.setPageStyle({ + style: { + overflow: 'hidden' + } + }); + } else { + wx.setPageStyle({ + style: { + overflow: 'auto' + } + }); + //uni.setPageMeta() + } + // #endif + + // #ifdef H5 + if (b) { + document.body.style.overflow = 'hidden'; + } else { + document.body.style.overflow = 'auto'; + } + // #endif + }, + settheme(theme) { + if (theme) { + this.setstorage('_theme', theme); + } else { + theme = this.getstorage('_theme'); + if (!theme) { + if (app.globalData._sysinfo.theme == 'dark') + theme = 'dark'; + } + } + var bgcolor = '#f7f8f8'; + var txtcolor = '#576067'; //txt5 + if (theme == 'dark') { + bgcolor = '#151a1b'; + txtcolor = '#c2cad0'; + } else { + theme = 'light'; + } + this.meta.theme = theme; + this.meta.bgcolor = bgcolor; + this.meta.styles['background-color'] = bgcolor; + this.meta.styles['color'] = txtcolor; + this.meta.style = Object.keys(this.meta.styles).map(key => key + ':' + this.meta.styles[ + key]).join(';') + ';'; + this.pageclass = theme; + // // #ifdef MP-WEIXIN + // wx.setBackgroundTextStyle({ + // textStyle: theme + // }) + // // #endif + }, + setfont(font) { + // 空,lg xl xxl xxl + if (!font) { + font = this.getstorage('_font'); + if (!font) { + font = 'def'; + var fsize = app.globalData._sysinfo.fontSizeSetting * app.globalData._sysinfo.fontSizeScaleFactor; + if (fsize >= 20 && fsize < 30) + font = 'lg'; + if (fsize >= 30 && fsize < 40) + font = 'xl'; + else if (fsize >= 40) + font = 'xxl'; + //标准:16*1=16 1:18*1.1=19.8 2:18*1.12=20.16 3:18*1.125=20.25 4:22*1.4=30.8 5:25*1.55=38.75 max:26*1.65=42.9 + } + } else { + this.setstorage('_font', font); + } + var fontsize; + if (font == 'def') + fontsize = 30; + else if (font == 'lg') + fontsize = 40; + else if (font == 'xl') + fontsize = 50; + else if (font == 'xxl') + fontsize = 60; + else + fontsize = this.toint(font); + if (fontsize < 20) + fontsize = 30; + var fz = (fontsize / 750 * app.globalData._sysinfo.windowWidth) + 'px'; + this.meta.styles['font-size'] = fz; + this.meta.style = Object.keys(this.meta.styles).map(key => key + ':' + this.meta.styles[key]).join(';') + ';'; + this.meta.fontsize = fz; + }, + executepnt(pntid, post) { + var me = this.getme(); + if (me.id == 0) + return; + var pnttrack = this.getstorage('_pnttrack', {}); + if (!this.isobject(pnttrack[pntid])) + return; + var day = this.str2date(this.todatetime(-1, 'd')).getTime() / 1000; + var cnt = 0; + if (day == pnttrack[pntid].day) { + cnt = this.toint(pnttrack[pntid].cnt); + if (pnttrack[pntid].h24 > 0 && pnttrack[pntid].h24 <= cnt) + return; + } + cnt += this.toint(pnttrack[pntid].p); + pnttrack[pntid].day = day; + pnttrack[pntid].cnt = cnt; + if (!post) + post = {}; + post.id = pntid; + this.setstorage('_pnttrack', pnttrack); + this.callfunc({ + func: 'main.pnt_up', + loadhide: true, + data: post + }).then(res => { + if (res.code != 1) + return; + if (res.msg) + this.toast(res.msg); + }); + }, + setTabbar(nameobj) { + var app = this; + if (nameobj instanceof Array) { + app.globalData.tabbarArr = nameobj; + return; + } + if (nameobj instanceof Object) { + for (var i in app.globalData.tabbarArr) { + if (!nameobj[app.globalData.tabbarArr[i].name]) + continue; + var obj = nameobj[app.globalData.tabbarArr[i].name]; + for (var o in obj) { + app.globalData.tabbarArr[i][o] = obj[o]; + } + } + } + app.getpage().getrefs('tabbar').then(ref => { + ref.loadtabbardata(); + }); + }, + + async getauth(type) { + return new Promise((resolve, reject) => { + this.$nextTick(() => { + this.getrefs('auth').then(ref => { + ref.Open(auth => { + if (auth.me.id == 0) + return resolve(auth); + this.me = auth.me; + //this.g = this.objdeepmerge(this.g, this.getstorage('g', {})); + if (type == 'info' && !this.me.name) { + this.askmsg('请先填写个人信息').then(res => { + if (res == 'cancel') + return; + uni.redirectTo({ + url: '/pages/me/user_info' + }); + }); + return; + } + if (type == 'real' && !this.me.truename) { + this.askmsg('请进行实名认证').then(res => { + if (res == 'cancel') + return; + uni.redirectTo({ + url: '/pages/me/safe_real' + }); + }); + return; + } + if (type == 'bank' && !this.me.bankname) { + this.alert('请填写银行信息').then(res => { + if (res == 'cancel') + return; + uni.redirectTo({ + url: '/pages/me/user_bank' + }); + }); + return; + } + if (type == 'cciy' && this.me.cciy.length < 10) { + this.alert('请先申请众识码').then(res => { + if (res == 'cancel') + return; + uni.redirectTo({ + url: '/pages/me/safe_ccub' + }); + }); + return; + } + resolve(auth); + }, type == 'relogin'); + }); + }); + }).catch(e => { + console.error('getauth error', e); + return e; + }); + }, + async scanqr() { + return new Promise((resolve, reject) => { + var ret = {}; + if (process.env.NODE_ENV === 'development') { + this.inputmsg('输入二维码').then(itm => { + if (!itm.text) + return; + ret.type = 'input'; + ret.code = itm.text; + resolve(ret); + }); + return; + } + var res = uni.scanCode().then(res => { + ret.type = res.scanType; + ret.code = res.result; + if (!ret.code) + ret.code = res.code; + resolve(ret); + }).catch(res => { + console.log('scanCode err', res); + resolve({ + type: 'error' + }); + }); + }).catch(e => { + return e; + }); + }, + async popmenu(opn) { //items one rowcount title + return new Promise((resolve, reject) => { + this.getrefs('popmenu').then(ref => { + ref.Open(opn).then(item => { + if (typeof(opn.closecb) == 'function') + opn.closecb(); + if (item.url) { + if (item.data) + this.gourl(item.url, item.type, { + ...item.data + }, item.key); + else + this.gourl(item.url, item.type); + return; + } + if (item.func && typeof(this[item.func]) == 'function') { + this[item.func](item); + return; + } + resolve(item); + }); + }); + }).catch(e => { + return e; + }); + }, + async toast(opn) { + var ref = await this.getrefs('toast'); + if (!ref) + return this.alert('no find toast'); + return await ref.Open(opn); + }, + async alert(opn, btns) { + if (!opn) + return; + if (typeof(opn) == 'string') { + opn = { + content: opn + }; + } + if (btns) { + opn.btns = btns; + } + var ref = await this.getrefs('alert'); + if (!ref) + return this.alert('no find alert'); + return await ref.Open(opn); + }, + async askmsg(content, btns) { + var opn = { + content + }; + if (!btns) + btns = [{ + name: '确定', + btn: 'ok' + }, { + name: '取消', + btn: 'cancel', + cls: 'def' + }]; + else if (typeof(btns) == 'string') + btns = [{ + name: btns, + btn: 'ok' + }, { + name: '取消', + btn: 'cancel', + cls: 'def' + }]; + opn.btns = btns; + var ref = await this.getrefs('alert'); + if (!ref) + return this.alert('no find alert'); + return await ref.Open(opn); + }, + async inputmsg(opn, btns) { + if (typeof(opn) == 'string') + opn = { + content: opn + }; + opn = opn || {}; + if (opn.title === undefined) + opn.title = '操作项'; + opn.ele = opn.ele || 'input'; + if (!btns) + opn.btns = [{ + name: '确定', + btn: 'ok' + }, { + name: '取消', + btn: 'cancel', + cls: 'def' + }]; + else if (typeof(btns) == 'string') + opn.btns = [{ + name: btns, + btn: 'ok' + }, { + name: '取消', + btn: 'cancel', + cls: 'def' + }]; + else + opn.btns = btns; + var ref = await this.getrefs('alert'); + if (!ref) + return this.alert('no find alert'); + var ret = await ref.Open(opn); + if (typeof(ret) == 'string') + return { + btn: 'cancel' + }; + return ret; + }, + async sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + }, + async load_ciydict(url) { + if (url.indexOf('.local.') === -1) + url = url.replace('http://', 'https://'); + return new Promise((resolve, reject) => { + uni.request({ + url: url, + dataType: 'text', + method: 'GET', + fail: res => { + res._url = url; + this.uperr("h5.loadjs.fail", res); + return reject({ + errmsg: 'dict' + res.errMsg + }); + }, + success: res => { + var ind = res.data.indexOf('['); + if (ind == -1) + return reject({ + errmsg: 'dict数据缺少数组' + }); + if (res.data.substring(0, 8) != 'var ciy_') + return reject({ + errmsg: 'dict数据格式错误' + }); + var name = res.data.substring(8, ind - 1); + var json = this.json_parse(res.data.substring(ind)); + if (json === null) { + this.uperr("app.loadjs.json", res); + return reject({ + errmsg: 'dict数组解析错误' + }); + } + return resolve({ + code: 1, + name: name, + arr: json + }); + } + }); + }).catch(e => { + return e; //不返回,res为 undefined + }); + }, + async load_svgicon(url) { + if (url.indexOf('.local.') === -1) + url = url.replace('http://', 'https://'); + return new Promise((resolve, reject) => { + uni.request({ + url: url, + dataType: 'text', + method: 'GET', + fail: res => { + res._url = url; + this.uperr("h5.loadsvgicon.fail", res); + return reject({ + errmsg: 'dict' + res.errMsg + }); + }, + success: res => { + var ind = res.data.indexOf(':'); + if (ind == -1) + return reject({ + errmsg: 'svgicon数据缺少合规图标' + }); + var lines = res.data.split('\n'); + var svgs = {}; + for (var i in lines) { + var idx = lines[i].indexOf(':'); + if (idx == -1) + continue; + svgs[lines[i].substring(0, idx)] = lines[i].substring(idx + 1); + } + return resolve(svgs); + } + }); + }).catch(e => { + return e; //不返回,res为 undefined + }); + }, + shareparam(opn) { + var app = getApp(); + var param = {}; + param.title = opn.title; + if (opn.img) + param.imageUrl = opn.img; + if (opn.promise) + param.promise = opn.promise; + var urlp = ''; + for (var u in opn.query) { + urlp += '&' + u + '=' + opn.query[u]; + } + var me = this.getme(); + if (opn.type == 'message') { + if (app.globalData.share_backmainpage && opn.path != app.globalData.mainpage) { + if (urlp[0] == '&') + urlp = '?' + urlp.substring(1); + param.path = app.globalData.mainpage + '?upid=' + me.id + '&u=' + encodeURIComponent(opn.path + urlp); + } else { + param.path = opn.path + '?upid=' + me.id + urlp; + } + } else { + param.query = 'upid=' + me.id + urlp; + } + console.log('shareparam', param, opn); + return param; + }, + getstrparam(str, split) { + split = split || '|'; + var strs = str.split(split); + var ret = {}; + for (var i in strs) { + var ind = strs[i].indexOf('='); + if (ind == -1) + continue; + ret[strs[i].substr(0, ind)] = strs[i].substr(ind + 1); + } + return ret; + }, + setstrparam(obj, split) { + split = split || '&'; + var strs = []; + for (var key in obj) + strs.push(key + '=' + obj[key]); + return strs.join(split); + }, + urlparam(url) { + var obj = {}; + var ind = url.indexOf('?'); + if (ind === -1) + return obj; + var pairs = url.substring(ind + 1).split('&'); + for (var p in pairs) { + var ind = pairs[p].indexOf('='); + if (ind > -1) + obj[decodeURIComponent(pairs[p].substring(0, ind))] = decodeURIComponent(pairs[p].substring(ind + 1)); + else + obj[pairs[p]] = true; + } + return obj; + }, + arrayfind(arr, val, field) { + for (var i in arr) { + if (arr[i][field] == val) + return i; + } + return -1; + }, + objdeepmerge(src, desc, btop) { + for (const key in desc) { + if (!desc.hasOwnProperty(key)) + continue; + if (desc[key] instanceof Array) { + if (!(src[key] instanceof Array)) + src[key] = []; + if (key.substring(0, 4) == 'ciy_') + src[key] = desc[key]; + else { + let srcidmap = {}; + for (let i in src[key]) { + srcidmap[src[key][i].id] = parseInt(i) + 1; + } + for (let i in desc[key]) { + if (desc[key][i].id && srcidmap[desc[key][i].id]) { + src[key][srcidmap[desc[key][i].id] - 1] = this.objdeepmerge(src[key][srcidmap[desc[key][i].id] - 1], desc[key][i]); + continue; + } + if (btop) + src[key].unshift(desc[key][i]); + else + src[key].push(desc[key][i]); + } + } + } else if (desc[key] instanceof Object) { + src[key] = this.objdeepmerge(src[key] || {}, desc[key]); + } else { + if (src[key] != desc[key]) + src[key] = desc[key]; + } + } + if (!desc.errmsg && src.errmsg) + delete src.errmsg; + return src; + }, + objtolist(list, data) { + if (!list || !data) + return; + if (!this.isarray(list)) + return; + if (!this.isobject(data)) { + let idx = this.arrayfind(list, this.toint(data), 'id'); + if (idx > -1) + list.splice(idx, 1); + return; + } + let idx = this.arrayfind(list, data.id, 'id'); + if (idx == -1) + list.unshift(data); + else + list[idx] = this.objdeepmerge(list[idx], data); + }, + objclone(obj) { + if (obj instanceof Date) { + return new Date(obj.getTime()); + } + if (obj instanceof Array) { + var clone = []; + for (var i = 0; i < obj.length; i++) { + clone[i] = this.objclone(obj[i]); + } + return clone; + } + if (obj instanceof Object) { + var clone = {}; + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) + clone[attr] = this.objclone(obj[attr]); + } + return clone; + } + return obj; + }, + str2date(str) { + var val = new Date(str.replace(/\-/g, '/')); + if (isNaN(val.getTime())) + return new Date(0); + return val; + }, + bin2hex(bin) { + var ret = ''; + for (var i = 0, l = bin.length; i < l; i++) { + var c = bin.charCodeAt(i).toString(16); + if (c.length == 1) + c = '0' + c; + ret += c; + } + return ret; + }, + hex2bin(hex) { + var ret = ''; + for (var i = 0; i < hex.length - 1; i += 2) { + ret += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + } + return ret; + }, + + style2obj(sty, moresty) { + var styleobj = {}; + if (typeof(sty) == 'string') { + sty.split(';').filter(rule => rule.trim() !== '').forEach(rule => { + const [key, value] = rule.split(':').map(part => part.trim()); + if (key && value) { + const camelCaseKey = key.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase()); + styleobj[camelCaseKey] = value; + } + }); + } else { + styleobj = sty || {}; + } + if (this.isobject(moresty)) { + for (var i in moresty) { + if (!styleobj[i]) + styleobj[i] = moresty[i]; + } + } + return styleobj; + }, + nopower(mepower, power) { + if (mepower == '.*.') //超级管理员 + return false; + power = '.' + power; + var dotidx = -1; + for (let i = 0; i < mepower.length; i++) { + if (mepower[i] !== '.') + continue; + if (dotidx > -1 && dotidx + 1 < i) { + if (power.indexOf(mepower.substring(dotidx, i)) === -1) + continue; + return false; //有权限 + } + dotidx = i; + } + return true; //无权限 + }, + getroute() { + var fpath; + if (this.route) + fpath = '/' + this.route; + else if (this.__route__) + fpath = '/' + this.__route__; + return fpath; + }, + com_getpage() { + var thos = this; + for (var i = 0; i < 50; i++) { + if (thos.isPage) + return thos; + thos = thos.$parent; + if (!thos) + return null; + } + return null; + }, + async com_gethdft() { + var ret = { + footerheight: 0, + headerheight: 0 + }; + var compage = this.com_getpage(); + if (!compage) + return ret; + var ref = await compage.getrefs('header'); + if (ref && ref.Getheight) + ret.headerheight = ref.Getheight(); + ref = await compage.getrefs('tabbar'); + if (ref && ref.Getheight) + ret.footerheight = ref.Getheight(); + else { + var mainrect = await compage.getrect('.tabbar'); + if (mainrect) + ret.footerheight = mainrect.height; + } + return ret; + }, + async getrefs(refname) { + return new Promise((resolve, reject) => { + var ref = this.getrefsSync(refname); + if (ref !== null) { + resolve(ref); + } else { + setTimeout(() => { + ref = this.getrefsSync(refname); + resolve(ref); + }, 100); + } + }).catch(e => { + return e; + }); + }, + getrefsSync(refname, compage) { + if (!compage) + compage = this.com_getpage(); + if (compage == null) + return null; + if (compage.$refs) { + if (compage.$refs[refname]) + return compage.$refs[refname]; + } + if (compage.selectComponent) { + var ref = compage.selectComponent('#' + refname); + if (ref) + return ref.$vm; + } + return null; + }, + async getrect(dom) { //如多次回调,需setTimeout + return new Promise((resolve, reject) => { + this.$nextTick(() => { + uni.createSelectorQuery().in(this).select(dom).boundingClientRect(rect => { + if (rect) + resolve(rect); + else + reject(); + }).exec(); + }); + }).catch(e => { + return e; + }); + }, + async file_upload1(imgfile, opn) { + return new Promise(async (resolve, reject) => { + if (typeof(imgfile) == 'string') + imgfile = { + tempFilePath: imgfile + }; + await this.file_uploads([imgfile], opn, { + success(url, file) { + resolve(url); + }, + fail(err, gf, al) { + console.warn(err, gf, al); + reject('Upload Fail:' + err); + } + }); + }).catch(e => { + return e; + }); + }, + async file_uploads(files, opn, fn) { //文件批量上传,图片加水印/压缩/尺寸 + //多次返回,不能用Promise,用fn回调 + if (!opn.path) { + opn.basepath = opn.basepath || 'demo'; + var now = new Date(); + var path = now.getFullYear() + '/' + ('0' + (now.getMonth() + 1)).slice(-2) + ('0' + now.getDate()).slice(-2) + '/' + opn.basepath; + if (opn.saas) { + var saasid = this.toint(opn.saas.substring(1)); + path = opn.saas.substring(0, 1) + this.toint(saasid / 1000) + '/' + saasid + '/' + path; + } + opn.path = path; + } + if (!opn.action) + opn.action = app.globalData.jsnurl[app.globalData.srv] + 'upload.'; + if (typeof(fn.fail) != 'function') + fn.fail = () => {}; + opn.waterfont = opn.waterfont || '36px Arial'; + for (var u in files) { + (async (gf, tmt) => { + await this.sleep(tmt); + var fpath = gf.tempFilePath || gf.tempImagePath || gf.path; + if (!gf.name) + gf.name = fpath; + if (!this.isimg(gf.name)) + return uploadpfile(gf); + // #ifdef H5 + var fread = new FileReader(); + fread.readAsDataURL(gf); + var err = await this.goe(this.go_load(fread)); + if (err) + return fn.fail('FileReader Error', gf, err); + var img = new Image(); + img.src = fread.result; + var err = await this.goe(this.go_load(img)); + if (err) + return fn.fail('h5Image Load Error', gf, err); + var [width, height] = setimgrect(img); + var zipjpg = this.toint(opn.zipjpg); + if (width == 0 && zipjpg == 0 && !opn.watertext) + return uploadpfile(gf); + if (width == 0) { + width = img.width; + height = img.height; + } + + var canvas = document.createElement("canvas"); + var ctx = canvas.getContext("2d"); + var attrw = document.createAttribute("width"); + attrw.nodeValue = width; + var attrh = document.createAttribute("height"); + attrh.nodeValue = height; + canvas.setAttributeNode(attrw); + canvas.setAttributeNode(attrh); + ctx.drawImage(img, 0, 0, width, height); + waterctx(ctx, width, height); + if (zipjpg == 0) + zipjpg = 70; + var dataurl = canvas.toDataURL("image/jpeg", zipjpg / 100); + var b64s = dataurl.split(","); + var b64type = b64s[0].match(/:(.*?);/)[1]; + var ab = atob(b64s[1]); + var ablen = ab.length; + var abarr = new Uint8Array(ablen); + while (ablen--) { + abarr[ablen] = ab.charCodeAt(ablen); + } + uploadpfile(new File([new Blob([abarr], { + type: b64type + })], gf.name)); + // #endif + + // #ifdef MP-WEIXIN + var [err, img] = await this.go(uni.getImageInfo({ + src: fpath + })); + if (err) + return fn.fail('getImageInfo Error:' + fpath, + gf, err); + var [width, height] = setimgrect(img); + var zipjpg = this.toint(opn.zipjpg); + if (width == 0 && zipjpg == 0 && !opn.watertext) + return uploadpfile(gf); + if (width == 0) { + width = img.width; + height = img.height; + } + await this.sleep(100); + const canvas = wx.createOffscreenCanvas({ + type: '2d', + width: width, + height: height, + }); + + const fs = uni.getFileSystemManager(); + var base64Data = fs.readFileSync(img.path, 'base64'); + const ctx = canvas.getContext('2d'); + let image = canvas.createImage(); + image.src = 'data:image/png;base64,' + base64Data; + var err = await this.goe(this.go_load(image)); + if (err) + return fn.fail('Image Load Error', gf, err); + ctx.drawImage(image, 0, 0, width, height); + waterctx(ctx, width, height); + if (zipjpg <= 0) + zipjpg = 70; + var res = await uni.canvasToTempFilePath({ + canvas: canvas, + fileType: 'jpg', + quality: zipjpg / 100, + destWidth: width, + destHeight: height, + }); + gf.tempFilePath = res.tempFilePath; + fs.getFileInfo({ + filePath: res.tempFilePath, + success: fsize => { + gf.size = fsize.size; + uploadpfile(gf); + } + }); + // #endif + // #ifdef APP-PLUS + try { + if (!opn.offcanvas) + return uploadpfile(gf); + var [err, img] = await this.go(uni.getImageInfo({ + src: fpath + })); + if (err) + return fn.fail('getImageInfo Error:' + fpath, gf, err); + var [width, height] = setimgrect(img); + var zipjpg = this.toint(opn.zipjpg); + if (width == 0 && zipjpg == 0 && !opn.watertext) + return uploadpfile(gf); + if (width == 0) { + width = img.width; + height = img.height; + } + opn.offcanvas.dom.cvwidth = width; + opn.offcanvas.dom.cvheight = height; + await opn.offcanvas.dom.$nextTick(); + await this.sleep(100); + const ctx = uni.createCanvasContext(opn.offcanvas.id, opn.offcanvas.dom); + if (!ctx) + return fn.fail('createCanvasContext Error:' + fpath, gf, err); + ctx.drawImage(fpath, 0, 0, width, height); + waterctx(ctx, width, height); + ctx.draw(true, async () => { + if (zipjpg <= 0) + zipjpg = 70; + var res = await uni.canvasToTempFilePath({ + canvasId: opn.offcanvas.id, + fileType: 'jpg', + quality: zipjpg / 100, + destWidth: width, + destHeight: height, + }); + gf.path = res.tempFilePath; + gf.name = res.tempFilePath.substring(res.tempFilePath.length - 6); + uni.getFileInfo({ + filePath: gf.path, + success: fsize => { + gf.size = fsize.size; + uploadpfile(gf); + } + }); + }); + } catch (err) { + console.log('app canvas err', err); + } + // #endif + })(files[u], 1 + u * 1050); + } + + var setimgrect = img => { + var width = 0; + var height = 0; + if (opn.imgwidth > 0) { + if (opn.imgwidth == opn.imgheight) { + width = height = Math.min(img.width, img.height, opn.imgwidth); + } else if (img.width > opn.imgwidth) { + width = opn.imgwidth; + if (opn.imgheight > 0) + height = opn.imgheight; + else + height = width * img.height / img.width; + } + } + return [width, height]; + }; + var waterctx = (ctx, imgwidth, imgheight) => { + if (!opn.watertext) + return; + + if (!this.isarray(opn.watercolors)) + opn.watercolors = ['#fffdea', '#000000']; + if (!opn.wateralpha) + opn.wateralpha = 1; + ctx.globalAlpha = this.tofloat(opn.wateralpha); + + if (opn.watertype == 'full') { + if (!opn.waterpadding) + opn.waterpadding = 30; + if (!opn.waterangle) + opn.waterangle = -20; + ctx.font = opn.waterfont; + + const metrics = ctx.measureText(opn.watertext); + var fontheight = ctx.measureText('啊').width; + const rad = opn.waterangle * Math.PI / 180; + const rotatedWidth = Math.abs(metrics.width * Math.cos(rad)) + Math.abs(fontheight * Math.sin(rad)); + const rotatedHeight = Math.abs(metrics.width * Math.sin(rad)) + Math.abs(fontheight * Math.cos(rad)); + + const itemWidth = rotatedWidth + opn.waterpadding; + const itemHeight = rotatedHeight + opn.waterpadding; + + const cols = Math.ceil(imgwidth / itemWidth); + const rows = Math.ceil(imgheight / itemHeight); + + const placedWatermarks = []; + for (let i = 0; i < rows * cols * 2; i++) { + const x = Math.random() * (imgwidth - itemWidth); + const y = Math.random() * (imgheight - itemHeight); + + let overlap = false; + for (const placed of placedWatermarks) { + const dx = Math.abs(x - placed.x); + const dy = Math.abs(y - placed.y); + if (dx < itemWidth * 0.8 && dy < itemHeight * 0.8) { + overlap = true; + break; + } + } + + if (overlap) + continue; + placedWatermarks.push({ + x, + y + }); + ctx.save(); + ctx.translate(x, y); + ctx.rotate((opn.waterangle + Math.random() * 5) * Math.PI / 180); + ctx.fillStyle = opn.watercolors[Math.floor(Math.random() * opn.watercolors.length)]; + ctx.fillText(opn.watertext, 0, 0); + ctx.restore(); + } + } else { + //右下角多行 + ctx.font = opn.waterfont; + var fontheight = ctx.measureText('啊').width * 1.2; + var lines = opn.watertext.split('|'); + var y = imgheight - fontheight * lines.length; + for (var i in lines) { + if (opn.watercolors.length > 1) { + ctx.fillStyle = opn.watercolors[1]; + ctx.fillText(lines[i], fontheight + 1, y + 1); + ctx.fillText(lines[i], fontheight - 1, y - 1); + ctx.fillText(lines[i], fontheight - 1, y + 1); + ctx.fillText(lines[i], fontheight + 1, y - 1); + } + ctx.fillStyle = opn.watercolors[0]; + ctx.fillText(lines[i], fontheight, y); + y += fontheight; + } + } + ctx.globalAlpha = 1; + }; + var getfileArray = async pf => { + return new Promise((resolve, reject) => { + // #ifdef H5 + var reader = new FileReader(); + reader.onloadend = function(evt) { + resolve(evt.target.result); + }; + reader.onerror = function(evt) { + console.error('读取文件失败:', evt.target.error); + reject(evt.target.error); + }; + reader.readAsArrayBuffer(pf); + // #endif + // #ifdef MP-WEIXIN + const wxfs = wx.getFileSystemManager(); + const fileBuffer = wxfs.readFile({ + filePath: pf.tempFilePath, + success: function(evt) { + resolve(evt.data); + }, + fail: function(err) { + console.error('读取文件失败:', err); + reject(err); + } + }); + // #endif + // #ifdef APP-PLUS + var pfpath = pf.path; + if (pfpath.substring(0, 7) == 'file://') + pfpath = pfpath.substring(7); + plus.io.resolveLocalFileSystemURL(pfpath, function(fileEntry) { + fileEntry.file(function(file) { + const reader = new plus.io.FileReader(); + reader.onloadend = function(evt) { + const buffer = new ArrayBuffer(evt.target.result.length); + const view = new Uint8Array(buffer); + for (let i = 0; i < evt.target.result.length; i++) { + view[i] = evt.target.result.charCodeAt(i); + } + resolve(buffer); + }; + + reader.onerror = function(evt) { + console.error('读取文件失败:', evt.target.error); + reject(evt.target.error); + }; + //reader.readAsArrayBuffer(file); + reader.readAsText(file, 'latin1'); + }, function(error) { + console.error('获取 File 对象失败:', error); + reject(error); + }); + }); + // #endif + }).catch(e => { + console.log('getfileArray', e); + return null; + }); + } + var uploadpfile = async gf => { //文件多通道上传 + if (opn.maxkb > 0 && gf.size >= opn.maxkb * 1024) + return fn.fail('MaxSize:' + opn.maxkb + 'KB, This:' + parseInt(gf.size / 1024) + 'KB', gf); + var now = new Date(); + var fext = this.file_ext(gf.name); + var pathfile = opn.path + '/' + now.getHours() + now.getMinutes() + now.getSeconds() + '_' + (1000 + Math.round(Math.random() * 8000)) + '.' + fext.toLowerCase(); + const fileBuffer = await getfileArray(gf); + if (opn.stor == '/') { + var retjson = await this.callfunc({ + func: opn.action + "upload?pathfile=" + pathfile, + file: fileBuffer + }); + if (retjson.code != 1) + return fn.fail(retjson.errmsg, gf, retjson); + fn.success(retjson.url, gf); + } else { + var s3json = await this.callfunc({ + func: opn.action + "s3?pathfile=" + pathfile + "&storselect=" + opn.stor + }); + if (s3json.code != 1) + return fn.fail(s3json.errmsg, gf, s3json); + + var requestTask = uni.request({ + url: s3json.url, + method: s3json.method, + header: s3json.headers, + data: fileBuffer, + success: function(res) { + fn.success(opn.stor + pathfile, gf); + }, + fail: function(res) { + console.warn('request fail', res); + fn.fail('云存储上传失败:' + res.status, gf, xhr); + }, + }); + } + }; + }, + async go(promise) { //var [err, tmp] = await this.go(this.go_load(img)); + return promise.then((data) => [null, data]).catch((err) => [err, undefined]); + }, + async goe(promise) { //var err = await this.goe(this.go_load(img)); + return promise.then(() => null).catch((err) => err); + }, + async go_load(obj, act) { + return new Promise((resolve, reject) => { + if (act == 'exec') { //特例 + obj.exec(async data => { + resolve(data); + }); + } else { + obj.onload = (data) => { + resolve(data); + } + obj.onerror = err => { + console.log('go_load error:', err); + reject('load error'); + } + } + }); + } + } + }); + + } +}; \ No newline at end of file diff --git a/fapp/ciyon_ap/util/gcoord.js b/fapp/ciyon_ap/util/gcoord.js new file mode 100644 index 0000000..2e05075 --- /dev/null +++ b/fapp/ciyon_ap/util/gcoord.js @@ -0,0 +1,8 @@ +/** + * @preserve + * gcoord 1.0.6, geographic coordinate library + * Copyright (c) 2024 Jiulong Hu + */ +var gcoord=function(){"use strict";var r=function(){return r=Object.assign||function(r){for(var t,e=1,n=arguments.length;e=72.004&&r<=137.8347&&t>=.8293&&t<=55.8271}function f(r,c){var f,l,s,h=(s=300+(f=r-105)+2*(l=c-35)+.1*f*f+.1*f*l+.1*n(a(f)),s+=2*(20*t(6*f*o)+20*t(2*f*o))/3,(s+=2*(20*t(f*o)+40*t(f/3*o))/3)+2*(150*t(f/12*o)+300*t(f/30*o))/3),g=function(r,e){var i=2*r-100+3*e+.2*e*e+.1*r*e+.2*n(a(r));return i+=2*(20*t(6*r*o)+20*t(2*r*o))/3,i+=2*(20*t(e*o)+40*t(e/3*o))/3,i+2*(160*t(e/12*o)+320*t(e*o/30))/3}(r-105,c-35),M=c/180*o,v=t(M),p=n(v=1-u*v*v);return[h=180*h/(i/p*e(M)*o),g=180*g/(i*(1-u)/(v*p)*o)]}function l(r){var t=r[0],e=r[1];if(!c(t,e))return[t,e];var n=f(t,e);return[t+n[0],e+n[1]]}function s(r){var t=r[0],e=r[1];if(!c(t,e))return[t,e];for(var n=[t,e],o=n[0],i=n[1],u=l([o,i]),f=u[0]-t,s=u[1]-e;a(f)>1e-6||a(s)>1e-6;)f=(u=l([o-=f,i-=s]))[0]-t,s=u[1]-e;return[o,i]}var h=Math.sin,g=Math.cos,M=Math.atan2,v=Math.sqrt,p=3e3*Math.PI/180;function G(r){var t=r[0]-.0065,e=r[1]-.006,n=v(t*t+e*e)-2e-5*h(e*p),a=M(e,t)-3e-6*g(t*p);return[n*g(a),n*h(a)]}function d(r){var t=r[0],e=r[1],n=v(t*t+e*e)+2e-5*h(e*p),a=M(e,t)+3e-6*g(t*p);return[n*g(a)+.0065,n*h(a)+.006]}var S=180/Math.PI,y=Math.PI/180,P=6378137,b=20037508.342789244;function B(r){return[r[0]*S/P,(.5*Math.PI-2*Math.atan(Math.exp(-r[1]/P)))*S]}function C(r){var t=Math.abs(r[0])<=180?r[0]:r[0]-360*(r[0]<0?-1:1),e=[P*t*y,P*Math.log(Math.tan(.25*Math.PI+.5*r[1]*y))];return e[0]>b&&(e[0]=b),e[0]<-b&&(e[0]=-b),e[1]>b&&(e[1]=b),e[1]<-b&&(e[1]=-b),e}var D,E,m,w,I,W,k=Math.abs,J=[12890594.86,8362377.87,5591021,3481989.83,1678043.12,0],x=[75,60,45,30,15,0],L=[[1.410526172116255e-8,898305509648872e-20,-1.9939833816331,200.9824383106796,-187.2403703815547,91.6087516669843,-23.38765649603339,2.57121317296198,-.03801003308653,17337981.2],[-7.435856389565537e-9,8983055097726239e-21,-.78625201886289,96.32687599759846,-1.85204757529826,-59.36935905485877,47.40033549296737,-16.50741931063887,2.28786674699375,10260144.86],[-3.030883460898826e-8,898305509983578e-20,.30071316287616,59.74293618442277,7.357984074871,-25.38371002664745,13.45380521110908,-3.29883767235584,.32710905363475,6856817.37],[-1.981981304930552e-8,8983055099779535e-21,.03278182852591,40.31678527705744,.65659298677277,-4.44255534477492,.85341911805263,.12923347998204,-.04625736007561,4482777.06],[3.09191371068437e-9,8983055096812155e-21,6995724062e-14,23.10934304144901,-.00023663490511,-.6321817810242,-.00663494467273,.03430082397953,-.00466043876332,2555164.4],[2.890871144776878e-9,8983055095805407e-21,-3.068298e-8,7.47137025468032,-353937994e-14,-.02145144861037,-1234426596e-14,.00010322952773,-323890364e-14,826088.5]],j=[[-.0015702102444,111320.7020616939,0x60e374c3105a3,-0x24bb4115e2e164,0x5cc55543bb0ae8,-0x7ce070193f3784,0x5e7ca61ddf8150,-0x261a578d8b24d0,0x665d60f3742ca,82.5],[.0008277824516172526,111320.7020463578,647795574.6671607,-4082003173.641316,10774905663.51142,-15171875531.51559,12053065338.62167,-5124939663.577472,913311935.9512032,67.5],[.00337398766765,111320.7020202162,4481351.045890365,-23393751.19931662,79682215.47186455,-115964993.2797253,97236711.15602145,-43661946.33752821,8477230.501135234,52.5],[.00220636496208,111320.7020209128,51751.86112841131,3796837.749470245,992013.7397791013,-1221952.21711287,1340652.697009075,-620943.6990984312,144416.9293806241,37.5],[-.0003441963504368392,111320.7020576856,278.2353980772752,2485758.690035394,6070.750963243378,54821.18345352118,9540.606633304236,-2710.55326746645,1405.483844121726,22.5],[-.0003218135878613132,111320.7020701615,.00369383431289,823725.6402795718,.46104986909093,2351.343141331292,1.58060784298199,8.77738589078284,.37238884252424,7.45]];function q(r,t,e){var n=k(t)/e[9],a=e[0]+e[1]*k(r),o=e[2]+e[3]*n+e[4]*Math.pow(n,2)+e[5]*Math.pow(n,3)+e[6]*Math.pow(n,4)+e[7]*Math.pow(n,5)+e[8]*Math.pow(n,6);return[a*=r<0?-1:1,o*=t<0?-1:1]}function N(r){for(var t=r[0],e=r[1],n=[],a=0;ax[a]){n=j[a];break}return q(t,e,n)}function O(r){for(var t=r[0],e=r[1],n=[],a=0;a=J[a]){n=L[a];break}return q(t,e,n)}function T(r,t){if(!r)throw new Error(t)}function A(r){return!!r&&"[object Array]"===Object.prototype.toString.call(r)}function F(r){return!isNaN(Number(r))&&null!==r&&!A(r)}function R(){for(var r=[],t=0;t=2,"Invalid input coordinate: ".concat(r)),T(F(r[0])&&F(r[1]),"Invalid input coordinate: ".concat(r)),r=r.map(Number),i=!0);var u=a;return i?u(r):(U(r,(function(r){var t;t=u(r),r[0]=t[0],r[1]=t[1]})),r)}});return H}(); + +export default gcoord diff --git a/fapp/ciyon_ap/util/lang/en.json b/fapp/ciyon_ap/util/lang/en.json new file mode 100644 index 0000000..81f70f2 --- /dev/null +++ b/fapp/ciyon_ap/util/lang/en.json @@ -0,0 +1,105 @@ +{ + "code":1, + "lang.showname": "English", + "lang.chname": "英文", + "apptitle": "Ciyon", + "关闭":"Close", + "刷新":"Refresh", + "全部":"All", + "未审核":"Unreviewed", + "审核中":"Reviewing", + "驳回":"Rejected", + "撤回":"Withdraw", + "通过":"Passed", + "变更":"Change", + "删除":"Delete", + "审核":"Review", + "详情": "Detail", + "刚刚": "Just Now", + "多语言切换": "Language Switch", + + "tabbar.index": "Plaza", + "tabbar.me": "Me", + "login.xieyi": "/pages/pub/paper?id=3", + "login.yinsi": "/pages/pub/paper?id=2", + "login.tablogin": "Login", + "login.tabreg": "Register", + "login.tabforget": "Forgot Password", + "login.form_mobile": "Mobile", + "login.form_pass": "Password", + "login.form_setpass": "Set Password", + "login.form_repass": "Re Password", + "login.btn_reg": "Register Now", + "login.btn_login": "Login Now", + "login.btn_loginwx": "Weixin Reg/Login", + "login.btn_forget": "Find Password Now", + + "query.pselect": "Please select filter query", + "query.btn_query": "Query", + "query.btn_run":"Run Query", + "query.btn_reset":"Reset", + "query.btn_close":"Close", + + "page.btn_pub":"Publish", + "page.btn_edit":"Edit", + "page.btn_submit":"Submit", + "page.btn_refresh":"Refresh", + "page.loading":"Loading", + + + "alert.deftitle":" Warm Tips", + "audio.rate":"speed", + "capcode.noinput":"Please Enter Account", + + "placeholder.select": "Please Select", + "placeholder.key": "Enter Keyword Query", + + "searchbar.placeholder": "Search", + "searchbar.btn": "Search", + "list.nodatamsg": "No Data", + "selcas.done": "Done", + "selcas.clear": "Clear", + "select.nosearch": "No Search Result", + "select.nodata": "No Selected Data", + "selmap.select": "Please Choose Location", + "selmap.loced": "Positioned ✔", + "selmap.noselect": "No Location Selected", + "showimgs.att": "attachment", + "time.now":"Now", + + "upload.uploadingmsg": "Uploading, Please Waiting...", + "upload.uploading": "Uploading...", + "upload.menu_rehcam": "From CiyCamera", + "upload.menu_camera": "From Camera", + "upload.menu_album": "From Album", + "upload.menu_message": "From Message", + "upload.maxmsg": "Up to {n} can be uploaded", + "upload.tip": "Upload", + + "handsign.close":"Close", + "handsign.rewrite":"Rewrite", + "handsign.done":"Done", + + "cyc.month": "month", + "cyc.day": "day", + "cyc.min": "minute", + "cyc.sec": "second", + "week.0": "Sun", + "week.1": "Mon", + "week.2": "Tue", + "week.3": "Wed", + "week.4": "Thu", + "week.5": "Fri", + "week.6": "Sat", + "calendar.year": "Year", + "calendar.month": "Mon", + "calendar.today":"Today", + "calendar.tomonth": "ThisMouth", + "calendar.nodate":"Select None Date", + + "inputdate.date":"Select Date", + "inputdate.hour":"Select Hour", + "inputdate.minute":"Select Min", + "inputdate.now":"Now", + "inputdate.done":"Done" +} \ No newline at end of file diff --git a/fapp/ciyon_ap/util/lang/fr.json b/fapp/ciyon_ap/util/lang/fr.json new file mode 100644 index 0000000..5685360 --- /dev/null +++ b/fapp/ciyon_ap/util/lang/fr.json @@ -0,0 +1,106 @@ +{ + "code":1, + "lang.showname": "Français", + "lang.chname": "法文", + "apptitle": "众产Ciyon", + "关闭": "Fermé", + "刷新": "Rafraîchir", + "全部": "Tous", + "未审核": "Non vérifié", + "审核中": "En vérification", + "驳回": "Rejeter", + "撤回": "Retirer", + "通过": "Approuver", + "变更": "Modifier", + "删除": "Supprimer", + "审核": "Vérifier", + "详情": "Détails", + "刚刚": "À l'instant", + "多语言切换": "Changement de langue", + + "tabbar.index": "Place", + "tabbar.me": "Moi", + "login.xieyi": "/pages/pub/paper?id=3", + "login.yinsi": "/pages/pub/paper?id=2", + "login.tablogin": "Connexion", + "login.tabreg": "Inscription", + "login.tabforget": "Récupérer MDP", + "login.form_mobile": "Téléphone", + "login.form_pass": "Mot de passe", + "login.form_setpass": "Définir MDP", + "login.form_repass": "Confirmer MDP", + "login.btn_reg": "S'inscrire", + "login.btn_login": "Se connecter", + "login.btn_loginwx": "WeChat Connexion", + "login.btn_forget": "Récupérer MDP", + + "query.pselect": "Sélectionnez des critères", + "query.btn_query": "Filtrer", + "query.btn_run": "Rechercher", + "query.btn_reset": "Réinitialiser", + "query.btn_close": "Fermer", + + "page.btn_pub":"Publier", + "page.btn_edit":"Éditer", + "page.btn_submit": "Soumettre", + "page.btn_refresh": "Actualiser", + "page.loading": "Chargement", + + "alert.deftitle": "Conseil", + "audio.rate": "Vitesse", + "capcode.noinput": "Entrez un compte", + + "placeholder.select": "Sélectionnez", + "placeholder.key": "Filtrer par mot-clé", + + "searchbar.placeholder": "Rechercher", + "searchbar.btn": "Recherche", + "list.nodatamsg": "Aucune donnée", + "selcas.done": "Terminer", + "selcas.clear": "Vider", + "select.nosearch": "Aucun résultat", + "select.nodata": "Aucune option", + "selmap.select": "Sélectionnez un lieu", + "selmap.loced": "Localisé ✔", + "selmap.noselect": "Lieu non sélectionné", + "showimgs.att": "Pièce jointe", + "time.now": "Maintenant", + + "upload.uploadingmsg": "Téléchargement en cours...", + "upload.uploading": "En cours...", + "upload.menu_rehcam": "Appareil photo", + "upload.menu_camera": "Prendre photo", + "upload.menu_album": "Galerie", + "upload.menu_message": "Conversations", + "upload.maxmsg": "Max {n} fichiers", + "upload.tip": "Télécharger", + + "handsign.close": "Fermer", + "handsign.rewrite": "Réeécrire", + "handsign.done": "Valider", + + "cyc.month": "Mois", + "cyc.day": "Jour", + "cyc.min": "Minute", + "cyc.sec": "Seconde", + + "week.0": "Dim", + "week.1": "Lun", + "week.2": "Mar", + "week.3": "Mer", + "week.4": "Jeu", + "week.5": "Ven", + "week.6": "Sam", + + "calendar.year": "Année", + "calendar.month": "Mois", + "calendar.today": "Aujourd'hui", + "calendar.tomonth": "Ce mois", + "calendar.nodate": "Aucune date", + + "inputdate.date": "Choisir date", + "inputdate.hour": "Choisir heure", + "inputdate.minute": "Choisir minute", + "inputdate.now": "Maintenant", + "inputdate.done": "Valider" +} \ No newline at end of file diff --git a/fapp/ciyon_ap/util/lang/ja.json b/fapp/ciyon_ap/util/lang/ja.json new file mode 100644 index 0000000..2ac26fd --- /dev/null +++ b/fapp/ciyon_ap/util/lang/ja.json @@ -0,0 +1,108 @@ +{ + "code":1, + "lang.showname": "日本語", + "lang.chname": "日文", + "apptitle": "众产Ciyon", + + "关闭":"閉じる", + "刷新":"リフレッシュ", + "全部":"すべて", + "未审核":"未審査", + "审核中":"審査中", + "驳回":"却下", + "撤回":"", + "通过":"承認", + "变更":"变更", + "删除":"削除", + "审核":"レビュー", + "详情": "詳細", + "刚刚": "ちょうど", + "多语言切换": "言語切り替え", + + "tabbar.index": "プラザ", + "tabbar.me": "マイ", + "login.xieyi": "/pages/pub/paper?id=3", + "login.yinsi": "/pages/pub/paper?id=2", + "login.tablogin": "ログインする", + "login.tabreg": "登録する", + "login.tabforget": "パスワードを取り戻す", + "login.form_mobile": "携帯番号", + "login.form_pass": "パスワード", + "login.form_setpass": "パスワードの設定", + "login.form_repass": "さいにゅうりょく", + "login.btn_reg": "登録する", + "login.btn_login": "登録する", + "login.btn_loginwx": "ウィーチャット登録/ログイン", + "login.btn_forget": "今すぐパスワードを取り戻す", + + "query.pselect": "フィルタ条件を選択してください", + "query.btn_query": "フィルタリング", + "query.btn_run":"クエリーの実行", + "query.btn_reset":"リセット", + "query.btn_close":"閉じる", + + "page.btn_pub":"公開", + "page.btn_edit":"編集", + "page.btn_submit":"送信", + "page.btn_refresh":"リフレッシュ", + "page.loading":"ロード中", + + + "alert.deftitle":"暖かいヒント", + "audio.rate":"スピードを上げる", + "capcode.noinput":"アカウントを入力してください", + + "placeholder.select": "選択してください", + "placeholder.key": "入力キーワードフィルタ", + "searchbar.placeholder": "検索", + "searchbar.btn": "検索", + "list.nodatamsg": "データなし", + "selcas.done": "完了", + "selcas.clear": "クリア", + "select.nosearch": "検索結果なし", + "select.nodata": "選択可能なデータがありません", + "selmap.select": "位置を選択してください", + "selmap.loced": "位置を確定しました ✔", + "selmap.noselect": "マップ上の位置が選択されていません", + "showimgs.att": "添付ファイル", + "time.now":"たった今", + + "upload.uploadingmsg": "アップロード中、しばらくお待ちください...", + "upload.uploading": "アップロード中...", + "upload.menu_rehcam": "カメラ", + "upload.menu_camera": "写真を撮る", + "upload.menu_album": "アルバムから選択", + "upload.menu_message": "メッセージから選択", + "upload.maxmsg": "最大{n}個までアップロード可能です", + "upload.tip": "アップロード", + + "handsign.close":"閉じる", + "handsign.rewrite":"再入力", + "handsign.done":"完了", + + + "cyc.month": "月", + "cyc.day": "日", + "cyc.min": "分", + "cyc.sec": "秒", + + "week.0": "日", + "week.1": "月", + "week.2": "火", + "week.3": "水", + "week.4": "木", + "week.5": "金", + "week.6": "土", + + "calendar.year": "年", + "calendar.month": "月", + "calendar.today": "今日", + "calendar.tomonth": "今月", + "calendar.nodate": "キャンセル", + + "inputdate.date": "日付を選択", + "inputdate.hour": "時間を選択", + "inputdate.minute": "分を選択", + "inputdate.now": "現在", + "inputdate.done": "完了" +} \ No newline at end of file diff --git a/fapp/ciyon_ap/util/lang/zh-Hans.json b/fapp/ciyon_ap/util/lang/zh-Hans.json new file mode 100644 index 0000000..88e81f2 --- /dev/null +++ b/fapp/ciyon_ap/util/lang/zh-Hans.json @@ -0,0 +1,109 @@ +{ + "code":1, + "lang.showname": "简体中文", + "lang.chname": "简体中文", + "apptitle": "众产Ciyon", + "关闭":"关闭", + "刷新":"刷新", + "全部":"全部", + "未审核":"未审核", + "审核中":"审核中", + "驳回":"驳回", + "撤回":"撤回", + "通过":"通过", + "变更":"变更", + "删除":"删除", + "审核":"审核", + "详情": "详情", + "刚刚": "刚刚", + "多语言切换": "多语言切换", + + "tabbar.index": "广场", + "tabbar.me": "我的", + "login.xieyi": "/pages/pub/paper?id=3", + "login.yinsi": "/pages/pub/paper?id=2", + "login.tablogin": "登录", + "login.tabreg": "注册", + "login.tabforget": "找回密码", + "login.form_mobile": "手机号", + "login.form_pass": "密 码", + "login.form_setpass": "设置密码", + "login.form_repass": "再次输入", + "login.btn_reg": "立即注册", + "login.btn_login": "登  录", + "login.btn_loginwx": "微信一键注册/登录", + "login.btn_forget": "立即找回密码", + + "query.pselect": "请选择筛选条件", + "query.btn_query": "筛选", + "query.btn_run":"执行查询", + "query.btn_reset":"重置", + "query.btn_close":"关闭", + + "page.btn_pub":"发布", + "page.btn_edit":"修改", + "page.btn_submit":"提交", + "page.btn_refresh":"刷新", + "page.loading":"加载中", + + + "alert.deftitle":"温馨提示", + "audio.rate":"倍速", + "capcode.noinput":"请输入账号", + + "placeholder.select": "请选择", + "placeholder.key": "输入关键字筛选", + + "searchbar.placeholder": "搜索", + "searchbar.btn": "搜索", + "list.nodatamsg": "无数据", + "selcas.done": "完成", + "selcas.clear": "清空", + "select.nosearch": "无搜索结果", + "select.nodata": "无可选数据", + "selmap.select": "请选择位置", + "selmap.loced": "已定位 ✔", + "selmap.noselect": "未选择地图位置", + "showimgs.att": "附件", + "time.now":"刚刚", + + "upload.uploadingmsg": "上传中,请稍后操作...", + "upload.uploading": "上传中...", + "upload.menu_rehcam": "相机", + "upload.menu_camera": "拍摄", + "upload.menu_album": "从相册选择", + "upload.menu_message": "从会话选择", + "upload.maxmsg": "最多可上传{n}个", + "upload.tip": "上传", + + "handsign.close":"关闭", + "handsign.rewrite":"重写", + "handsign.done":"完成", + + "cyc.month": "月", + "cyc.day": "天", + "cyc.hour": "小时", + "cyc.min": "分钟", + "cyc.sec": "秒", + + "week.0":"日", + "week.1":"一", + "week.2":"二", + "week.3":"三", + "week.4":"四", + "week.5":"五", + "week.6":"六", + + "calendar.year":"年", + "calendar.month":"月", + "calendar.today":"今天", + "calendar.tomonth": "本月", + "calendar.nodate":"不选日期", + + + "inputdate.date":"选择日期", + "inputdate.hour":"选择小时", + "inputdate.minute":"选择分钟", + "inputdate.now":"此刻", + "inputdate.done":"完成" +} \ No newline at end of file diff --git a/fapp/ciyon_ap/util/lang/zh-Hant.json b/fapp/ciyon_ap/util/lang/zh-Hant.json new file mode 100644 index 0000000..290a175 --- /dev/null +++ b/fapp/ciyon_ap/util/lang/zh-Hant.json @@ -0,0 +1,108 @@ +{ + "code":1, + "lang.showname": "繁體中文", + "lang.chname": "繁体中文", + "apptitle": "眾產Ciyon", + "关闭":"關閉", + "刷新":"重新", + "全部":"全部", + "未审核":"未審核", + "审核中":"審核中", + "驳回":"駁回", + "撤回":"撤回", + "通过":"通過", + "变更":"變更", + "删除":"刪除", + "审核":"審核", + "详情": "詳情", + "刚刚": "剛剛", + "多语言切换": "多語言切換", + + "tabbar.index": "廣場", + "tabbar.me": "我", + + "login.xieyi": "/pages/pub/paper?id=3", + "login.yinsi": "/pages/pub/paper?id=2", + "login.tablogin": "鄧入", + "login.tabreg": "註冊", + "login.tabforget": "找回密碼", + "login.form_mobile": "手機號", + "login.form_pass": "密 碼", + "login.form_setpass": "設置密碼", + "login.form_repass": "再次輸入", + "login.btn_reg": "立即註冊", + "login.btn_login": "鄧  入", + "login.btn_loginwx": "微信一鍵註冊/鄧入", + "login.btn_forget": "立即找回密碼", + + "query.pselect": "請選擇篩選條件", + "query.btn_query": "篩選", + "query.btn_run":"執行查詢", + "query.btn_reset":"重置", + "query.btn_close":"關閉", + + "page.btn_pub":"發佈", + "page.btn_edit":"編輯", + "page.btn_submit":"提交", + "page.btn_refresh":"刷新", + "page.loading":"載入中", + + + "alert.deftitle":"溫馨提示", + "audio.rate":"倍速", + "capcode.noinput":"請輸入賬號", + + "placeholder.select": "請選擇", + "placeholder.key": "輸入關鍵字篩選", + + "searchbar.placeholder": "檢索", + "searchbar.btn": "檢索", + "list.nodatamsg": "無數據", + "selcas.done": "完成", + "selcas.clear": "清空", + "select.nosearch": "無檢索結果", + "select.nodata": "無可選數據", + "selmap.select": "請選擇位置", + "selmap.loced": "已定位 ✔", + "selmap.noselect": "未選擇地圖位置", + "showimgs.att": "附件", + "time.now":"剛剛", + + "upload.uploadingmsg": "上傳中,請稍後操作...", + "upload.uploading": "上傳中...", + "upload.menu_rehcam": "相機", + "upload.menu_camera": "拍攝", + "upload.menu_album": "從相冊選擇", + "upload.menu_message": "從會話選擇", + "upload.maxmsg": "最多可上傳{n}個", + "upload.tip": "上傳", + + "handsign.close":"關閉", + "handsign.rewrite":"重寫", + "handsign.done":"完成", + + "cyc.month": "月", + "cyc.day": "天", + "cyc.min": "分鐘", + "cyc.sec": "秒", + + "week.0": "日", + "week.1": "一", + "week.2": "二", + "week.3": "三", + "week.4": "四", + "week.5": "五", + "week.6": "六", + + "calendar.year": "年", + "calendar.month": "月", + "calendar.today": "今天", + "calendar.tomonth": "本月", + "calendar.nodate": "不選日期", + + "inputdate.date": "選擇日期", + "inputdate.hour": "選擇小時", + "inputdate.minute": "選擇分鐘", + "inputdate.now": "此刻", + "inputdate.done": "完成" +} \ No newline at end of file diff --git a/fapp/ciyon_ap/util/langload.js b/fapp/ciyon_ap/util/langload.js new file mode 100644 index 0000000..66e4bb0 --- /dev/null +++ b/fapp/ciyon_ap/util/langload.js @@ -0,0 +1,12 @@ +import en from './lang/en.json' +import zhHans from './lang/zh-Hans.json' +import zhHant from './lang/zh-Hant.json' +import ja from './lang/ja.json' +import fr from './lang/fr.json' +export default { + en, + ja, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/fapp/ciyon_ap/util/md5.js b/fapp/ciyon_ap/util/md5.js new file mode 100644 index 0000000..c8fbf21 --- /dev/null +++ b/fapp/ciyon_ap/util/md5.js @@ -0,0 +1,259 @@ +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +/* + * Configurable variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + */ +var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ +var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ +var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ + +/* + * These are the functions you'll usually want to call + * They take string arguments and return either hex or base-64 encoded strings + */ +function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));} +function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));} +function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));} +function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); } +function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); } +function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); } + +/* + * Perform a simple self-test to see if the VM is working + */ +function md5_vm_test() +{ + return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; +} + +/* + * Calculate the MD5 of an array of little-endian words, and a bit length + */ +function core_md5(x, len) +{ + /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + + for(var i = 0; i < x.length; i += 16) + { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + + a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); + d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); + d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); + d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i+10], 17, -42063); + b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); + d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); + + a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); + d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); + c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); + d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); + c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); + d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); + c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); + d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); + c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); + + a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); + d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); + d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); + d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); + d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); + + a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); + d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); + d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); + d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); + d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return Array(a, b, c, d); + +} + +/* + * These functions implement the four basic operations the algorithm uses. + */ +function md5_cmn(q, a, b, x, s, t) +{ + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); +} +function md5_ff(a, b, c, d, x, s, t) +{ + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5_gg(a, b, c, d, x, s, t) +{ + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5_hh(a, b, c, d, x, s, t) +{ + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5_ii(a, b, c, d, x, s, t) +{ + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +/* + * Calculate the HMAC-MD5, of a key and some data + */ +function core_hmac_md5(key, data) +{ + var bkey = str2binl(key); + if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz); + + var ipad = Array(16), opad = Array(16); + for(var i = 0; i < 16; i++) + { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + + var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); + return core_md5(opad.concat(hash), 512 + 128); +} + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ +function bit_rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* + * Convert a string to an array of little-endian words + * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. + */ +function str2binl(str) +{ + var bin = Array(); + var mask = (1 << chrsz) - 1; + for(var i = 0; i < str.length * chrsz; i += chrsz) + bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32); + return bin; +} + +/* + * Convert an array of little-endian words to a string + */ +function binl2str(bin) +{ + var str = ""; + var mask = (1 << chrsz) - 1; + for(var i = 0; i < bin.length * 32; i += chrsz) + str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask); + return str; +} + +/* + * Convert an array of little-endian words to a hex string. + */ +function binl2hex(binarray) +{ + var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; + var str = ""; + for(var i = 0; i < binarray.length * 4; i++) + { + str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + + hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); + } + return str; +} + +/* + * Convert an array of little-endian words to a base-64 string + */ +function binl2b64(binarray) +{ + var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var str = ""; + for(var i = 0; i < binarray.length * 4; i += 3) + { + var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) + | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) + | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF); + for(var j = 0; j < 4; j++) + { + if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; + else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); + } + } + return str; +} +export default { + md5: hex_md5 +} diff --git a/fapp/ciyon_ap/util/style.css b/fapp/ciyon_ap/util/style.css new file mode 100644 index 0000000..f5cb94e --- /dev/null +++ b/fapp/ciyon_ap/util/style.css @@ -0,0 +1,1313 @@ +/* +================================================================================= +* License: GPL-2.0 license +* Author: 众产® https://ciy.cn/code +* Version: 0.1.0 +================================================================================= +--txt[1-9] 文字色系 +--bg[1-9] 背景边框色系 +--man/imp/warn/dag 强调色系 + +.ciy* 常用专属样式 +.btn 定制button样式 +.md* 简约MarkDown样式 + +*/ +page, +body { + /* 1 淡 5 9浓 */ + + /* +zIndex z-index 规划: +1-9 页内rel +10-30 页内fix btnadd 10; +31-39 组件fix +40-49 header/tabbar fix +50-60 auth登录? +99 captcha +100-120 tip/冒泡提示 +50000 header/tabbar +50005 camera +50010 组件全屏mask +50020 alert +50030 toast + + +title bg2 +card bg2 title bg4 +grid bg3 +pagebg bg4 +tabbar bg3 bg6 +card bg3 +*/ + + /* 文字色 */ + --txt1: #8c9ba4; + --txt2: #818e97; + --txt3: #738088; + --txt4: #646e76; + --txt5: #576067; + --txt6: #454d52; + --txt7: #2c3236; + --txt8: #060708; + --txt9: #000000; + + /* 背景边框色 */ + --bg1: #ffffff; + --bg2: #fbfbfc; + --bg3: #f7f8f8; + --bg4: #f0f2f2; + --bg5: #e3e6e7; + --bg6: #cdd2d4; + --bg7: #afb6b9; + --bg8: #939da1; + --bg9: #7e8a8e; + + + /* 主色 */ + --man2: #e1f6ff; + --man3: #a6d2fa; + --man4: #80c1f3; + --man5: #1E9FFF; + --man6: #1989d8; + --man7: #8568f7; + --mant: #ffffff; + + /* 成功色 */ + --succ4: #02dd40; + --succ5: #03a547; + --succ6: #036d2d; + --succt: #ffffff; + /* 警示色 */ + --warn4: #fcfbc7; + --warn5: #f5d417; + --warn6: #e39725; + --warnt: #ffffff; + /* 失败色 */ + --dag4: #ffac37; + --dag5: #e34242; + --dag6: #a91313; + --dagt: #ffffff; + + --e-switch-bg: #ffffff; + --e-switch-br: #dcdcdc; + --e-switch-txt: #2c3236; + --e-switch-chkbgdis: #1b709e; + --e-switch-chkbg: #19a2fc; + --e-switch-chktxt: #ffffff; + --e-switch-shadow: 0 2px 5px 1px #00000042; + + --e-userbg1: #aedc05; + --e-userbg2: #16ea2e; + --e-headerbg1: #dff7ff; + --e-headerbg2: #eaffe6; +} + +.dark { + /* 文字色 */ + --txt1: #8d9ca6; + --txt2: #98a5ae; + --txt3: #a5b1b9; + --txt4: #b1bbc2; + --txt5: #c2cad0; + --txt6: #d3d9dd; + --txt7: #e7eaec; + --txt8: #f5f6f7; + --txt9: #ffffff; + + /* 背景边框色 */ + --bg1: #000000; + --bg2: #0d1112; + --bg3: #151a1b; + --bg4: #1f2526; + --bg5: #272e2f; + --bg6: #32393b; + --bg7: #485155; + --bg8: #5d686d; + --bg9: #6f7c82; + + + --man3: #032c44; + --man4: #175787; + --man5: #1E9FFF; + --man6: #83c1f1; + --man7: #8568f7; + --mant: #ffffff; + + /* 成功色 */ + --succ4: #036d2d; + --succ5: #03a547; + --succ6: #02dd40; + --succt: #ffffff; + /* 警示色 */ + --warn4: #e39725; + --warn5: #f5d417; + --warn6: #fcfbc7; + --warnt: #ffffff; + /* 失败色 */ + --dag4: #a91313; + --dag5: #e34242; + --dag6: #f9ddc0; + --dagt: #ffffff; + + --e-userbg1: #b9b527; + --e-userbg2: #00770e; + + --e-headerbg1: #07bff1; + --e-headerbg2: #2c700c; +} + +page, +body, +view, +text { + box-sizing: border-box; + /* font-size: clamp(14px, 4vw, 40px); */ + font-size-adjust: ex-height 0.53; + user-select: text; + -webkit-user-select: text; +} + +::-webkit-scrollbar { + display: none; +} + +.def { + background: var(--bg2) !important; + color: var(--txt7) !important; +} + +.def.b { + border: 1px solid var(--bg6) !important; +} + +.def.liner { + background: linear-gradient(310deg, var(--bg3), var(--bg6)) !important; +} + +.dag { + background: var(--dag5) !important; + color: var(--dagt) !important; + border: 1px solid var(--dag5) !important; +} + +.dag.b { + border: 1px solid var(--dag6) !important; +} + +.dag.liner { + background: linear-gradient(310deg, var(--dag5), var(--dag6)) !important; +} + +.succ { + background: var(--succ5) !important; + color: var(--succt) !important; + border: 1px solid var(--succ5) !important; +} + +.succ.b { + border: 1px solid var(--succ6) !important; +} + +.succ.liner { + background: linear-gradient(310deg, var(--succ5), var(--succ6)) !important; +} + +.warn { + background: var(--warn6) !important; + color: var(--warnt) !important; + border: 1px solid var(--warn6) !important; +} + +.warn.b { + border: 1px solid var(--warn6) !important; +} + +.warn.liner { + background: linear-gradient(310deg, var(--warn5), var(--warn6)) !important; +} + +.man { + background: var(--man6) !important; + color: var(--mant) !important; + border: 1px solid var(--man6) !important; +} + +.man.b { + border: 1px solid var(--man7) !important; +} + +.man.liner { + background: linear-gradient(310deg, var(--man6), var(--man7)) !important; +} + +/*列表页*/ +.ciy-list { + position: relative; + margin: 1rem; + padding: 0.8rem; + background: var(--bg1); + border-radius: 0.5rem; + overflow: hidden; + transition: transform ease-in 0.5s; +} + +.ciy-list.del { + transform: translateX(-100vw); + opacity: 0.5; +} + +.ciy-list .l0 { + font-size: 0.8rem; + padding-right: 6rem; + color: var(--txt1); +} + +.ciy-list .l1 { + font-size: 1.2rem; + padding: 0.5rem; +} + +.ciy-list .l2 { + display: flex; + align-items: center; + padding: 0.5em 0; +} + +.ciy-list .l2>label { + color: var(--txt9); + min-width: 5rem; + flex-shrink: 0; + white-space: nowrap; + padding-right: 1rem; +} + +.ciy-list .l2>view { + flex: 1; + color: var(--txt6); + text-align: right; +} + +.ciy-list .l3 { + font-size: 0.9rem; + padding: 0.3em 1.3rem; + color: var(--txt3); +} + +.ciy-list .rtz { + position: absolute; + top: 1rem; + right: -2.5rem; + height: 2rem; + line-height: 2rem; + width: 9rem; + text-align: center; + transform: rotate(45deg); +} + +.ciy-list .rt { + position: absolute; + top: 0.5rem; + right: 0.8rem; + text-align: right; + font-size: 0.9rem; +} + +.ciy-list .rb { + text-align: right; + font-size: 0.9rem; +} + +.ciy-list .lb { + position: absolute; + bottom: 0.9rem; + left: 1.2rem; + font-size: 0.9rem; +} + +.ciy-list .dot { + position: absolute; + bottom: 0.5rem; + right: 1rem; + padding: 1rem; + width: 1.3rem; + height: 1.3rem; + background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUwOS4xMDAyMzQyNiA1MTJtLTE1My4yNzMzMzEzNCAwYTE1My4yNzMzMzEzNiAxNTMuMjczMzMxMzYgMCAxIDAgMzA2LjU0NjY2MjcgMCAxNTMuMjczMzMxMzYgMTUzLjI3MzMzMTM2IDAgMSAwLTMwNi41NDY2NjI3IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PHBhdGggZD0iTTc4OS43NjE4NDA4MiA1MTJtLTkxLjQ2MTE4MTY0IDBhOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAgMTgyLjkyMjM2MzI5IDAgOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAtMTgyLjkyMjM2MzI5IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PHBhdGggZD0iTTIzNC4yMzgxNTkxOCA1MTJtLTkxLjQ2MTE4MTY0IDBhOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAgMTgyLjkyMjM2MzI4IDAgOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAtMTgyLjkyMjM2MzI4IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PC9zdmc+"); +} + + +.ciy-add { + position: fixed; + bottom: 1rem; + right: 1rem; + width: 4rem; + height: 4rem; + opacity: 0.95; + z-index: 10; + border-radius: 2rem; + background: linear-gradient(90deg, #8568f7, #4981ff); +} + +.ciy-add::after { + content: ' '; + position: absolute; + margin: 1rem; + width: 2rem; + height: 2rem; + background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkyNS42OTYgMzg0cTE5LjQ1NiAwIDM3LjM3NiA3LjY4dDMwLjcyIDIwLjQ4IDIwLjQ4IDMwLjcyIDcuNjggMzcuMzc2cTAgMjAuNDgtNy42OCAzNy44ODh0LTIwLjQ4IDMwLjIwOC0zMC43MiAyMC40OC0zNy4zNzYgNy42OGwtMjg3Ljc0NCAwIDAgMjg3Ljc0NHEwIDIwLjQ4LTcuNjggMzcuODg4dC0yMC40OCAzMC4yMDgtMzAuNzIgMjAuNDgtMzcuMzc2IDcuNjhxLTIwLjQ4IDAtMzcuODg4LTcuNjh0LTMwLjIwOC0yMC40OC0yMC40OC0zMC4yMDgtNy42OC0zNy44ODhsMC0yODcuNzQ0LTI4Ny43NDQgMHEtMjAuNDggMC0zNy44ODgtNy42OHQtMzAuMjA4LTIwLjQ4LTIwLjQ4LTMwLjIwOC03LjY4LTM3Ljg4OHEwLTE5LjQ1NiA3LjY4LTM3LjM3NnQyMC40OC0zMC43MiAzMC4yMDgtMjAuNDggMzcuODg4LTcuNjhsMjg3Ljc0NCAwIDAtMjg3Ljc0NHEwLTE5LjQ1NiA3LjY4LTM3LjM3NnQyMC40OC0zMC43MiAzMC4yMDgtMjAuNDggMzcuODg4LTcuNjhxMzkuOTM2IDAgNjguMDk2IDI4LjE2dDI4LjE2IDY4LjA5NmwwIDI4Ny43NDQgMjg3Ljc0NCAweiIgZGF0YS1zcG0tYW5jaG9yLWlkPSJhMzEzeC5zZWFyY2hfaW5kZXguMC5pNi41NTEwM2E4MW5Iald1ViIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjwvc3ZnPg=="); +} + +.ciy-close { + position: absolute; + font-size: 2rem; + color: var(--dagt); + line-height: 0.9rem; + background: var(--dag5); + width: 1rem; + height: 1rem; + text-align: center; + border-radius: 50%; +} + +.btn { + background: linear-gradient(347deg, var(--man5), var(--man7)); + color: var(--mant); + border: 1px solid var(--man6); + position: relative; + display: inline-block; + padding: 0.5em 0.8rem; + font-size: 1rem; + line-height: 1rem; + margin: 2px; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + border-radius: 0.7rem; +} + +.btn::after { + content: "Loading..."; + position: absolute; + bottom: 0; + right: 0.3rem; + width: auto; + height: auto; + top: auto; + left: auto; + font-size: 1rem; + transform-origin: right bottom; + opacity: 0; + transform: scale(0.8); + transition: all 0.3s; +} + +.btn.button-hover, +.btn:active { + background: var(--man5); + color: var(--mant); + border: 1px solid var(--bg9); +} + +.btn.loading::after { + opacity: 0.5; + transform: scale(0.4); +} + +.btn.lg { + font-size: 1.3rem; + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.btn.lgg { + font-size: 1.5rem; + padding: 0.7em 1.5rem; +} + +.btn.sm { + font-size: 0.8rem; +} + +.btn.smm { + font-size: 0.7rem; +} + +.btn.xs { + font-size: 0.7rem; + padding: 0.2em 0.8rem; +} + +.btn.sq { + border-radius: 0.3rem; +} + +.btn.cc { + border-radius: 1.5rem; +} + +.btn.long { + width: 80%; +} + +.btn[disabled] { + opacity: 0.5; +} + +.btn.def { + border: 1px solid var(--bg6); +} + +.btn.def:active { + background: var(--bg1) !important; + color: var(--txt9) !important; + border: 1px solid var(--bg9); +} + +.btn.tran { + border: none; + background: transparent; +} + + +/*页面flex布局模式*/ +.ciy-page { + display: flex; + flex-direction: column; + height: 100vh; +} + +.ciy-page .main { + flex: 1; + overflow: auto; +} + +/*说明块*/ +.ciy-tip { + background: var(--warn4); + margin: 0.5rem; + padding: 0.5rem; + border: 1px solid var(--warn5); + border-radius: 0.3rem; + color: var(--txt8); +} + +/*断行*/ +.ciy-height { + height: 0.3rem; +} + + +/*分隔线装饰*/ +.ciy-hr { + position: relative; + z-index: 10; + height: 1px; + width: 100%; + flex: none; + background: linear-gradient(90deg, transparent, var(--bg7), transparent); +} + +/*九宫格*/ +.ciy-grid { + display: flex; + flex-wrap: wrap; +} + +.ciy-grid .grid { + width: 25%; + text-align: center; + padding-top: 0.8rem; + padding-bottom: 0.2rem; +} + +.ciy-grid.grid3 .grid { + width: 33.3%; +} + +.ciy-grid.grid5 .grid { + width: 20%; +} + +.ciy-grid .name { + padding: 0.5em 0; + color: var(--txt7); + font-size: 0.9rem; + user-select: none; + -webkit-user-select: none; +} + +.ciy-grid .icon { + width: 2rem; + height: 2rem; + display: block; + position: relative; + margin: 0 auto; + background-size: cover; +} + +.ciy-grid .br { + width: 100%; + height: 0; +} + +.ciy-grid .title { + width: 100%; + margin: 1em 0 0 0.5rem; + font-weight: bolder; + text-shadow: 0 0 2px var(--bg2); + letter-spacing: 2px; + color: var(--txt7); +} + +/*标题分隔*/ +.ciy-title { + display: flex; + align-items: center; + padding: 0.8em 1rem; + font-size: 1.1rem; + position: relative; + font-weight: bolder; + color: var(--txt9); +} + +.ciy-title.mk::before { + content: ""; + width: 0.4rem; + height: 1.5rem; + margin-right: 0.3rem; + border-radius: 0.3rem; + vertical-align: middle; + background: linear-gradient(-60deg, var(--man4), var(--man7)); +} + + +.ciy-title .title { + flex: 1; + color: var(--txt9); +} + +.ciy-title .right { + font-size: 0.9rem; + font-weight: normal; + color: var(--txt5); +} + +.ciy-caption { + display: flex; + align-items: center; + padding: 0.8em 1rem; + font-size: 1.1rem; + position: relative; + font-weight: bolder; + background: var(--bg2); + color: var(--txt7); + border-top: 1px solid var(--bg5); + border-bottom: 1px solid var(--bg6); +} + +.ciy-caption.mk::before { + content: ""; + width: 0.3rem; + height: 1.5rem; + margin-right: 0.3rem; + border-radius: 0.3rem; + vertical-align: middle; + background: var(--man5); +} + +.ciy-caption .title { + flex: 1; + color: var(--txt9); +} + +.ciy-caption .right { + font-size: 0.9rem; + font-weight: normal; + color: var(--txt5); +} + +.ciy-caption .sub { + position: absolute; + bottom: 0; + left: 3rem; + font-size: 0.7rem; + font-weight: normal; + color: var(--txt1); +} + +/*卡片块*/ +.ciy-card { + margin: 0.5rem; + border: 1px solid var(--bg6); + border-radius: 0.3rem; + box-shadow: 0 0 6px var(--bg6); + background: var(--bg2); + position: relative; +} + +.ciy-card>.title { + border-radius: 0.3em 0.3em 0 0; + padding-left: 1rem; + height: 2.5rem; + line-height: 2.5rem; + background: var(--bg4); + font-weight: bold; +} + +.ciy-card>.title.mk::before { + content: ""; + width: 0.2rem; + display: inline-block; + border-radius: 0.2rem; + margin-right: 0.4rem; + vertical-align: middle; + height: 1.5rem; + background: var(--man5); +} + +.ciy-card .right { + position: absolute; + height: 2.5rem; + line-height: 2.5rem; + padding-right: 1rem; + color: var(--txt5); + top: 0; + right: 0; +} + +.ciy-card>.content { + padding: 1rem; +} + +.ciy-card>.content>view { + line-height: 1.5rem; + margin-bottom: 0.5rem; +} + +.ciy-load { + padding: 3em 0 8em 3rem; + line-height: 2rem; + background: linear-gradient(180deg, var(--bg5), transparent); +} + +.ciy-skeleton { + background: var(--bg4); + background: linear-gradient(45deg, var(--bg4) 25%, var(--bg1) 50%, var(--bg4) 75%); + background-size: 200% 100%; + animation: skeleton 3s linear infinite; + border-radius: 0.3rem; + margin-bottom: 1rem; +} + +@keyframes skeleton { + 0% { + background-position: 200% 0; + } + + 100% { + background-position: -200% 0; + } +} + +.code, +.kbd { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.1em 0.4em 0 0.4rem; + margin: 0 0.2rem; + font-size: 0.9rem; + line-height: 1.3rem; + border-radius: 0.2rem; + display: inline-block; + vertical-align: baseline; +} + +.code { + color: #bd210c; + border: 1px solid #f5dde3; + background-color: #f9f2f4; +} + +.kbd { + color: #ffffff; + background: linear-gradient(340deg, var(--man5), var(--man7)); +} + +.ciy-icon-arrow { + background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE5MiAzNjBjMC0xMC43NTIgMy45NjgtMjAuMDk2IDExLjkwNC0yOC4wOTZDMjExLjkwNCAzMjMuOTA0IDIyMS4yNDggMzIwIDIzMiAzMjBsNTYwIDBjMTAuODE2IDAgMjAuMTYgMy45MDQgMjguMDk2IDExLjkwNEM4MjguMDk2IDMzOS45MDQgODMyIDM0OS4yNDggODMyIDM2MHMtMy45MDQgMjAuMDk2LTExLjkwNCAyOC4wOTZsLTI4MCAyODBDNTMyLjE2IDY3NS45NjggNTIyLjgxNiA2ODAgNTEyIDY4MGMtMTAuNzUyIDAtMjAuMDk2LTMuOTY4LTI4LjA5Ni0xMS45MDRMMjAzLjkwNCAzODguMDk2QzE5NS45NjggMzgwLjA5NiAxOTIgMzcwLjc1MiAxOTIgMzYweiIgZmlsbD0iIzhhOGE4YSI+PC9wYXRoPjwvc3ZnPg=="); +} + +.ciy-form-group { + background: var(--bg2); + margin: 1rem; + overflow: hidden; + border-radius: 0.5rem; + position: relative; + border: 1px solid var(--bg4); + border-bottom: 2px solid var(--bg6); + +} + +.ciy-bottom { + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 1rem; + z-index: 40; + text-align: center; + background: var(--bg1); + border-top: 1px solid var(--bg6); +} + +.ciy-form-bottom { + position: relative; + z-index: 40; + text-align: center; + padding: 0.5em 0; +} + +.ciy-form { + width: 100%; + display: flex; + position: relative; + align-items: center; + border-bottom: 1px solid var(--bg5); + min-height: 4rem; +} + +.ciy-form>view { + text-align: right; + flex: 1; +} + +.ciy-form>view:last-child { + margin-right: 1rem; +} + +.ciy-form>label { + margin: 0 1rem; + flex-shrink: 0; + white-space: nowrap; + align-self: flex-start; + line-height: 4rem; +} + +.ciy-form>label.imp { + font-weight: bold; +} + +.ciy-form>label.imp::before { + content: ''; + position: absolute; + left: 0.3rem; + top: 0.8rem; + width: 0.4rem; + height: 0.4rem; + background: var(--dag5); + border-radius: 50%; +} + +.char2 label.imp::before, +.char3 label.imp::before, +.char4 label.imp::before, +.char5 label.imp::before, +.char6 label.imp::before { + right: -0.5rem; + left: auto; +} + +.char2 label, +.char3 label, +.char4 label, +.char5 label, +.char6 label { + text-align: right; + position: relative; +} + +.char2 label { + min-width: 2rem; +} + +.char3 label { + min-width: 3rem; +} + +.char4 label { + min-width: 4rem; +} + +.char5 label { + min-width: 5rem; +} + +.char6 label { + min-width: 6rem; +} + +.ciy-form.v { + flex-direction: column; + align-items: flex-start; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.ciy-form.v>view { + text-align: left; + margin: 0 0.5rem; + width: calc(100% - 1em); +} + +.ciy-form.v>label { + height: 2rem; + line-height: 2rem; +} + +.ciy-waterfall { + column-count: 2; + column-gap: 0.5rem; +} + +.ciy-waterfall .itmcont { + margin-bottom: 0.5rem; + width: 100%; + break-inside: avoid; +} + +.ciy-edit:focus { + outline: none; + box-shadow: 0 0 1em var(--bg1) inset; +} + +.md-h1 { + font-weight: bold; + font-size: 1.2rem; + line-height: 1.5rem; + text-align: left; + padding: 0.5em 0 0.5em 0.5rem; +} + +.md-h2 { + font-weight: bold; + font-size: 1.1rem; + line-height: 1.8rem; + padding: 0.5em 0 0.5em 0.5rem; +} + +.md-h3, +.md-h4, +.md-h5 { + font-weight: bold; + font-size: 1rem; + line-height: 1.5rem; + padding: 0.5em 0 0.5em 0.5rem; +} + +.md-content { + font-size: 1rem; + text-indent: 1rem; + line-height: 2rem; + white-space: pre-wrap; +} + +.md-code { + text-indent: 0; + padding: 0.2em 0.4rem; + font-size: 0.9rem; + line-height: 1rem; + margin: 0 0.2rem; + display: inline-block; + white-space: nowrap; + color: #ffffff; + background: linear-gradient(340deg, var(--man5), var(--man7)); + border-radius: 0.2rem; +} + +.md-table-div { + width: 100%; + overflow: auto; +} + +.md-table { + border-collapse: collapse; + background: var(--bg2); + white-space: nowrap; +} + +.md-table th, .md-table td { + border: 1px solid var(--bg6); + padding: 0.5em; + text-align: left; +} + +.txt-smmm.txt-smmm.txt-smmm { + font-size: 0.7rem; +} + +.txt-smm.txt-smm.txt-smm { + font-size: 0.8rem; +} + +.txt-sm.txt-sm.txt-sm { + font-size: 0.9rem; +} + +.txt-lg.txt-lg.txt-lg { + font-size: 1.2rem; +} + +.txt-lgg.txt-lgg.txt-lgg { + font-size: 1.5rem; +} + +.txt-lggg.txt-lggg.txt-lggg { + font-size: 2rem; +} + +.txt-lgggg.txt-lgggg.txt-lgggg { + font-size: 3rem; +} + +.txt-wb.txt-wb.txt-wb { + font-weight: bold; +} + +.txt-wl.txt-wl.txt-wl { + font-weight: 300; +} + +.txt-un.txt-un.txt-un { + text-decoration: underline; +} + +.txt-del.txt-del.txt-del { + text-decoration: line-through; +} + +.txt-left.txt-left.txt-left { + text-align: left; +} + +.txt-center.txt-center.txt-center { + text-align: center; +} + +.txt-right.txt-right.txt-right { + text-align: right; +} + +.txt-just.txt-just { + text-align: justify; +} + +.txt-nowrap.txt-nowrap { + white-space: nowrap; +} + +.txt-over.txt-over { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.txt1.txt1.txt1 { + color: var(--txt1); +} + +.txt2.txt2.txt2 { + color: var(--txt2); +} + +.txt3.txt3.txt3 { + color: var(--txt3); +} + +.txt4.txt4.txt4 { + color: var(--txt4); +} + +.txt5.txt5.txt5 { + color: var(--txt5); +} + +.txt6.txt6.txt6 { + color: var(--txt6); +} + +.txt7.txt7.txt7 { + color: var(--txt7); +} + +.txt8.txt8.txt8 { + color: var(--txt8); +} + +.txt9.txt9.txt9 { + color: var(--txt9); +} + +.bg1.bg1.bg1 { + background-color: var(--bg1); +} + +.bg2.bg2.bg2 { + background-color: var(--bg2); +} + +.bg3.bg3.bg3 { + background-color: var(--bg3); +} + +.bg4.bg4.bg4 { + background-color: var(--bg4); +} + +.bg5.bg5.bg5 { + background-color: var(--bg5); +} + +.bg6.bg6.bg6 { + background-color: var(--bg6); +} + +.bg7.bg7.bg7 { + background-color: var(--bg7); +} + +.bg8.bg8.bg8 { + background-color: var(--bg8); +} + +.bg9.bg9.bg9 { + background-color: var(--bg9); +} + +.px1.px1.px1 { + padding-left: 0.25rem; + padding-right: 0.25rem; +} + +.px2.px2.px2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +.px3.px3.px3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.px4.px4.px4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.py1.py1.py1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.py2.py2.py2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py3.py3.py3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.py4.py4.py4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.mx0.mx0.mx0 { + margin-left: 0; + margin-right: 0; +} + +.mx1.mx1.mx1 { + margin-left: 0.25rem; + margin-right: 0.25rem; +} + +.mx2.mx2.mx2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} + +.mx3.mx3.mx3 { + margin-left: 0.75rem; + margin-right: 0.75rem; +} + +.mx4.mx4.mx4 { + margin-left: 1rem; + margin-right: 1rem; +} + +.my0.my0.my0 { + margin-top: 0; + margin-bottom: 0; +} + +.my1.my1.my1 { + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} + +.my2.my2.my2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.my3.my3.my3 { + margin-top: 0.75rem; + margin-bottom: 0.75rem; +} + +.my4.my4.my4 { + margin-top: 1rem; + margin-bottom: 1rem; +} + +.block.block { + display: block; +} + +.flex.flex { + display: flex; +} + +.flexcol.flexcol { + display: flex; + flex-direction: column; +} + +.flex1.flex1 { + flex: 1; + min-width: 0; +} + +.flexnone.flexnone { + flex: none; +} + +.flex-center.flex-center { + align-items: center; +} + +.flex-wrap.flex-wrap { + flex-wrap: wrap; +} + +.hide.hide.hide { + display: none; +} + +.noselect.noselect.noselect { + user-select: none; + -webkit-user-select: none; +} + +.tran5.tran5.tran5 { + transition: all .5s; + -webkit-transition: all .5s; +} + +.sta.sta.sta { + position: static; +} + +.abs.abs.abs { + position: absolute; +} + +.fix.fix.fix { + position: fixed; +} + +.rel.rel.rel { + position: relative; +} + +.sti.sti.sti { + position: sticky; + z-index: 40; +} + +.t0.t0.t0, .top0.top0.top0 { + top: 0; +} + +.l0.l0.l0, .left0.left0.left0 { + left: 0; +} + +.r0.r0.r0, .right0.right0.right0 { + right: 0; +} + +.b0.b0.b0, .bottom0.bottom0.bottom0 { + bottom: 0; +} + +.t1.t1.t1, .top1.top1.top1 { + top: 0.5rem; +} + +.l1.l1.l1, .left1.left1.left1 { + left: 0.5rem; +} + +.r1.r1.r1, .right1.right1.right1 { + right: 0.5rem; +} + +.b1.b1.b1, .bottom1.bottom1.bottom1 { + bottom: 0.5rem; +} + +.t2.t2.t2, .top2.top2.top2 { + top: 1rem; +} + +.l2.l2.l2, .left2.left2.left2 { + left: 1rem; +} + +.r2.r2.r2, .right2.right2.right2 { + right: 1rem; +} + +.b2.b2.b2, .bottom2.bottom2.bottom2 { + bottom: 1rem; +} + +.lh1.lh1.lh1 { + line-height: 1rem; +} + +.lh2.lh2.lh2 { + line-height: 1.5rem; +} + +.lh3.lh3.lh3 { + line-height: 2rem; +} + +.lh4.lh4.lh4 { + line-height: 2.5rem; +} + +.ti1.ti1.ti1 { + text-indent: 1em; +} + +.ti2.ti2.ti2 { + text-indent: 2em; +} diff --git a/fapp/ciyon_ap/util/websocket.js b/fapp/ciyon_ap/util/websocket.js new file mode 100644 index 0000000..a5f2903 --- /dev/null +++ b/fapp/ciyon_ap/util/websocket.js @@ -0,0 +1,122 @@ +var websocket = function(addr) { + var app = getApp(); + var thos = this; + this.buffer = new Array(); //发送数据缓冲区 + this.reOpenData = [2, 5, 3, 5, 5, 3, 5, 8, 10, 20, 30, 30]; //断线重连,每次间隔时间/秒 + this.reOpen = 0; //断线重连次数 + this.keepAliveTimer = setInterval(function() { + console.log('keep'); + try { + if (thos.wsock && thos.wsock.readyState !== 1) { + thos.reOpenSec--; + if (thos.reOpenSec <= 0) { + thos.reOpen++; + thos.reOpenSec = 10; + thos.open(); + } + return; + } + if (thos.buffer.length > 0) { + var data = thos.buffer.pop(); + thos.send(data); + } else { + if (new Date().getTime() - thos.last_health_time >= 15000 && thos.wsock + .readyState === 1) { + thos.wsock.send({ + data: 'h' + }); + thos.last_health_time = new Date().getTime(); + } + } + } catch (err) { + app.uperr("app.ws.error", err); + } + }, 1000); + this.setOpenSec = function() { + (thos.reOpen < thos.reOpenData.length) ? thos.reOpenSec = thos.reOpenData[thos.reOpen]: thos + .reOpenSec = 90; //断线重试太多后的间隔时间 + } + this.open = function() { + try { + if (thos.wsock && thos.wsock.trueClose) + return; + thos.setOpenSec(); + if (thos.wsock) { + if (thos.wsock.readyState == 1) + return; + thos.wsock.close(); + } + thos.wsock = uni.connectSocket({ + url: addr, + complete: () => {} + }); + thos.wsock.onOpen(function(event) { + try { + thos.reOpen = 0; + thos.last_health_time = new Date().getTime(); + if (typeof(thos.onopen) == "function") + thos.onopen(event); + } catch (err) { + app.uperr('app.ws.onopen', err); + } + }); + thos.wsock.onMessage(function(e) { + try { + if (typeof(thos.onmessage) == "function") + thos.onmessage(e); + } catch (err) { + app.uperr('app.ws.onmessage', err); + } + }); + thos.wsock.onClose(function(e) { + try { + if (thos.wsock.trueClose) { + clearInterval(thos.keepAliveTimer); + return; + } + thos.setOpenSec(); + if (typeof(thos.onclose) == "function") + thos.onclose(e); + } catch (err) { + app.uperr('app.ws.onclose', err); + } + }); + thos.wsock.onError(function(e) { + try { + thos.setOpenSec(); + if (typeof(thos.onerror) == "function") + thos.onerror(e); + } catch (err) { + app.uperr('app.ws.onerror', err); + } + }); + } catch (err) { + console.log(app, err); + app.uperr('app.ws.open', err); + } + } + this.send = function(msg) { + try { + if (this.wsock === undefined || this.wsock.trueClose) + return false; + if (this.wsock.readyState !== 1 || this.wsock.bufferedAmount > 0) + this.buffer.push(msg); + else { + this.wsock.send({ + data: msg + }); + this.last_health_time = new Date().getTime(); + } + return true; + } catch (err) { + app.uperr('app.ws.send', err); + } + } + this.close = function(send) { + this.wsock.trueClose = true; + this.wsock.close(); + } + this.open(); +}; + +export default websocket \ No newline at end of file diff --git a/fapp/ciyon_ap/vite.config.js b/fapp/ciyon_ap/vite.config.js new file mode 100644 index 0000000..9c20def --- /dev/null +++ b/fapp/ciyon_ap/vite.config.js @@ -0,0 +1,42 @@ +import { + defineConfig +} from 'vite' +import uni from '@dcloudio/vite-plugin-uni' +// @yck-web/vite-plugin-template-inset +const htmlPlugin_ciy = () => { + return { + name: 'html-transform', + transform(code, path) { + if (path.substring(path.length - 4) == '.vue' && path.indexOf('/pages/') > -1) { + // :background-text-style="meta.theme" + let pft = ''; //''; + pft += ''; + pft += ''; //暂时只做微信生态 + pft += ''; + pft += ''; + //pft += ''; + pft += ''; + + let pfb = ''; + code = code.replace('