diff --git a/.browserslistrc b/.browserslistrc
new file mode 100644
index 0000000..d6471a3
--- /dev/null
+++ b/.browserslistrc
@@ -0,0 +1,2 @@
+> 1%
+last 2 versions
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..0d0f62a
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,8 @@
+/public/
+/dist/
+/node_modules/
+/src/icons/svg/
+/mock/
+/cool/
+/src/cool/
+vue.config.js
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..39bd413
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,14 @@
+module.exports = {
+ root: true,
+ env: {
+ node: true
+ },
+ extends: ["plugin:vue/essential", "@vue/prettier"],
+ rules: {
+ "no-console": "off",
+ "comma-dangle": [2, "never"]
+ },
+ parserOptions: {
+ parser: "@typescript-eslint/parser"
+ }
+};
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..27ef30a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+yarn.lock
+
+# Editor directories and files
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..b82b0c6
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,9 @@
+{
+ "tabWidth": 4,
+ "useTabs": true,
+ "semi": true,
+ "jsxBracketSameLine": true,
+ "singleQuote": false,
+ "printWidth": 100,
+ "trailingComma": "none"
+}
diff --git a/.vscode/crud.code-snippets b/.vscode/crud.code-snippets
new file mode 100644
index 0000000..a86c776
--- /dev/null
+++ b/.vscode/crud.code-snippets
@@ -0,0 +1,61 @@
+{
+ "cl-crud": {
+ "prefix": "cl-crud",
+ "body": [
+ "",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "",
+ " ",
+ " ",
+ " ",
+ " ",
+ "",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "",
+ " ",
+ " ",
+ " ",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "description": "cl-crud snippets"
+ }
+}
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..83140ce
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 cool-team-official
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index f1ae8d2..1eadaef 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,57 @@
-#cool-admin
+#### 介绍
+
+配置化编码,单表 CRUD 只需少量配置;写更少的代码,实现更多的功能;简洁、高效、可扩展、高度解耦
+
+#### 浏览器兼容性
+
+支持所有符合 ES5 标准的浏览器(不支持 IE8 及以下版本).
+
+#### 在线社区
+
+[传送门](https://bbs.cool-js.com/)
+
+## 先决条件
+
+请确保您的操作系统上安装了 Node.js(> = 8.9.0)、@vue/cli。
+
+## 安装项目依赖
+
+推荐使用 `yarn`:
+
+```shell
+yarn
+```
+
+解决 `node-sass` 网络慢的方法:
+
+```shell
+yarn config set sass-binary-site http://npm.taobao.org/mirrors/node-sass
+```
+
+## 安装扩展组件的依赖
+
+安装 `cl-admin-cli` 脚手架:
+
+```shell
+npm install cl-admin-cli -g
+```
+
+安装扩展组件依赖:
+
+```shell
+cl install
+```
+
+## 运行应用程序
+
+安装过程完成后,运行以下命令启动服务。您可以在浏览器中预览网站 [http://localhost:9000](http://localhost:9000)
+
+```shell
+yarn serve
+```
+
+## 分析包内容
+
+```shell
+yarn report
+```
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..32df09b
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,13 @@
+module.exports = {
+ presets: ["@vue/app"],
+ plugins: [
+ ["jsx-v-model"],
+ [
+ "component",
+ {
+ libraryName: "element-ui",
+ styleLibraryName: "theme-chalk"
+ }
+ ]
+ ]
+};
diff --git a/cool/components/base/common/index.js b/cool/components/base/common/index.js
new file mode 100644
index 0000000..cfee74b
--- /dev/null
+++ b/cool/components/base/common/index.js
@@ -0,0 +1,22 @@
+import { iconfontUrl } from "@/config/env";
+
+if (iconfontUrl) {
+ const link = document.createElement("link");
+ link.type = "text/css";
+ link.rel = "stylesheet";
+ link.href = iconfontUrl;
+ document.getElementsByTagName("head")[0].appendChild(link);
+}
+
+const requireAll = (requireContext) => requireContext.keys().map(requireContext);
+const req = require.context("@/icons/svg/", false, /\.svg$/);
+requireAll(req);
+
+export function iconList() {
+ return req
+ .keys()
+ .map(req)
+ .map((e) => e.default.id)
+ .filter((e) => e.includes("icon"))
+ .sort();
+}
diff --git a/cool/components/base/components/avatar/index.vue b/cool/components/base/components/avatar/index.vue
new file mode 100644
index 0000000..77bb3a6
--- /dev/null
+++ b/cool/components/base/components/avatar/index.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/dept/check.vue b/cool/components/base/components/dept/check.vue
new file mode 100644
index 0000000..5c67d97
--- /dev/null
+++ b/cool/components/base/components/dept/check.vue
@@ -0,0 +1,138 @@
+
+
+
{{ title }}
+
+
+
+ 是否关联上下级
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/dept/move.vue b/cool/components/base/components/dept/move.vue
new file mode 100644
index 0000000..8b5f72c
--- /dev/null
+++ b/cool/components/base/components/dept/move.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
diff --git a/cool/components/base/components/dept/tree.vue b/cool/components/base/components/dept/tree.vue
new file mode 100644
index 0000000..574f597
--- /dev/null
+++ b/cool/components/base/components/dept/tree.vue
@@ -0,0 +1,422 @@
+
+
+
+
+
+
+
+
+ {{
+ node.label
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/icon-svg/index.vue b/cool/components/base/components/icon-svg/index.vue
new file mode 100644
index 0000000..ae4ebdb
--- /dev/null
+++ b/cool/components/base/components/icon-svg/index.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/index.js b/cool/components/base/components/index.js
new file mode 100644
index 0000000..1172189
--- /dev/null
+++ b/cool/components/base/components/index.js
@@ -0,0 +1,35 @@
+import Avatar from "./avatar";
+import Scrollbar from "./scrollbar";
+import RouteNav from "./route-nav";
+import Process from "./process";
+import IconSvg from "./icon-svg";
+import DeptCheck from "./dept/check";
+import DeptMove from "./dept/move";
+import DeptTree from "./dept/tree";
+import MenuSlider from "./menu/slider";
+import MenuTopbar from "./menu/topbar";
+import MenuFile from "./menu/file";
+import MenuIcons from "./menu/icons";
+import MenuPerms from "./menu/perms";
+import MenuTree from "./menu/tree";
+import RoleSelect from "./role/select";
+import RolePerms from "./role/perms";
+
+export default {
+ Avatar,
+ Scrollbar,
+ RouteNav,
+ Process,
+ IconSvg,
+ DeptCheck,
+ DeptMove,
+ DeptTree,
+ MenuSlider,
+ MenuTopbar,
+ MenuFile,
+ MenuIcons,
+ MenuPerms,
+ MenuTree,
+ RoleSelect,
+ RolePerms
+};
diff --git a/cool/components/base/components/menu/file.vue b/cool/components/base/components/menu/file.vue
new file mode 100644
index 0000000..197adc8
--- /dev/null
+++ b/cool/components/base/components/menu/file.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/menu/icons.vue b/cool/components/base/components/menu/icons.vue
new file mode 100644
index 0000000..af0820e
--- /dev/null
+++ b/cool/components/base/components/menu/icons.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+.
+
diff --git a/cool/components/base/components/menu/perms.vue b/cool/components/base/components/menu/perms.vue
new file mode 100644
index 0000000..25b63a2
--- /dev/null
+++ b/cool/components/base/components/menu/perms.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
diff --git a/cool/components/base/components/menu/slider/index.js b/cool/components/base/components/menu/slider/index.js
new file mode 100644
index 0000000..a645698
--- /dev/null
+++ b/cool/components/base/components/menu/slider/index.js
@@ -0,0 +1,81 @@
+import { mapGetters } from "vuex";
+import "./index.scss";
+
+export default {
+ name: "cl-menu-slider",
+
+ data() {
+ return {
+ visible: true
+ };
+ },
+
+ computed: {
+ ...mapGetters(["menuList", "menuCollapse", "browser"])
+ },
+
+ watch: {
+ menuList() {
+ this.visible = false;
+
+ setTimeout(() => {
+ this.visible = true;
+ }, 0);
+ }
+ },
+
+ methods: {
+ toView(url) {
+ if (url != this.$route.path) {
+ this.$router.push(url);
+ }
+ }
+ },
+
+ render() {
+ const fn = (list) => {
+ return list
+ .filter((e) => e.isShow)
+ .map((e) => {
+ let html = null;
+
+ if (e.type == 0) {
+ html = (
+
+
+
+ {e.name}
+
+ {fn(e.children)}
+
+ );
+ } else {
+ html = (
+
+
+ {e.name}
+
+ );
+ }
+
+ return html;
+ });
+ };
+
+ let el = fn(this.menuList);
+
+ return (
+ this.visible && (
+
+ )
+ );
+ }
+};
diff --git a/cool/components/base/components/menu/slider/index.scss b/cool/components/base/components/menu/slider/index.scss
new file mode 100644
index 0000000..2fda6ae
--- /dev/null
+++ b/cool/components/base/components/menu/slider/index.scss
@@ -0,0 +1,94 @@
+.cl-slider-menu {
+ height: 100%;
+ overflow-y: auto;
+
+ &::-webkit-scrollbar {
+ width: 0;
+ height: 0;
+ }
+
+ .el-menu {
+ border-right: 0;
+ background-color: $color-main;
+
+ &-item {
+ &.is-active {
+ background-color: $color-primary;
+ color: #fff;
+ }
+ }
+
+ .el-submenu__title,
+ .el-menu-item {
+ &:hover {
+ background-color: $color-primary;
+ }
+ }
+
+ .el-submenu {
+ &.is-opened {
+ background-color: #2b3043;
+
+ .el-menu {
+ background-color: #2b3043;
+ }
+ }
+ }
+
+ .el-submenu__title,
+ &-item,
+ &__title {
+ color: #eee;
+ letter-spacing: 0.5px;
+ height: 50px;
+ line-height: 50px;
+
+ .icon-svg {
+ font-size: 16px;
+ margin: 0 15px 0 5px;
+ position: relative;
+ }
+
+ span {
+ font-size: 12px;
+ letter-spacing: 1px;
+ display: inline-block;
+ }
+ }
+
+ &--collapse {
+ .el-submenu__title {
+ .icon-svg {
+ margin-left: 2px;
+ font-size: 19px;
+ }
+ }
+ }
+ }
+}
+
+.el-menu {
+ &--vertical {
+ .el-submenu {
+ &__title {
+ display: flex;
+ align-items: center;
+
+ .icon-svg {
+ font-size: 18px;
+ margin-right: 10px;
+ }
+ }
+ }
+
+ .el-menu-item {
+ display: flex;
+ align-items: center;
+
+ .icon-svg {
+ font-size: 18px;
+ margin-right: 10px;
+ }
+ }
+ }
+}
diff --git a/cool/components/base/components/menu/topbar.vue b/cool/components/base/components/menu/topbar.vue
new file mode 100644
index 0000000..e8e5ea9
--- /dev/null
+++ b/cool/components/base/components/menu/topbar.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/menu/tree.vue b/cool/components/base/components/menu/tree.vue
new file mode 100644
index 0000000..176d0db
--- /dev/null
+++ b/cool/components/base/components/menu/tree.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/process/index.vue b/cool/components/base/components/process/index.vue
new file mode 100644
index 0000000..673e96a
--- /dev/null
+++ b/cool/components/base/components/process/index.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/role/perms.vue b/cool/components/base/components/role/perms.vue
new file mode 100644
index 0000000..541c025
--- /dev/null
+++ b/cool/components/base/components/role/perms.vue
@@ -0,0 +1,128 @@
+
+
+
{{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/role/select.vue b/cool/components/base/components/role/select.vue
new file mode 100644
index 0000000..59f0bd0
--- /dev/null
+++ b/cool/components/base/components/role/select.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/route-nav/index.vue b/cool/components/base/components/route-nav/index.vue
new file mode 100644
index 0000000..1d6ace8
--- /dev/null
+++ b/cool/components/base/components/route-nav/index.vue
@@ -0,0 +1,104 @@
+
+
+
+ {{ lastName }}
+
+
+
+ 首页
+ {{
+ (item.meta && item.meta.label) || item.name
+ }}
+
+
+
+
+
+
+
diff --git a/cool/components/base/components/scrollbar/index.vue b/cool/components/base/components/scrollbar/index.vue
new file mode 100644
index 0000000..bb3035f
--- /dev/null
+++ b/cool/components/base/components/scrollbar/index.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
diff --git a/cool/components/base/directives/index.js b/cool/components/base/directives/index.js
new file mode 100644
index 0000000..97eac95
--- /dev/null
+++ b/cool/components/base/directives/index.js
@@ -0,0 +1,7 @@
+import permission, { checkPerm } from "./permission";
+
+export { checkPerm };
+
+export default {
+ permission
+};
diff --git a/cool/components/base/directives/permission.js b/cool/components/base/directives/permission.js
new file mode 100644
index 0000000..ad7c274
--- /dev/null
+++ b/cool/components/base/directives/permission.js
@@ -0,0 +1,42 @@
+import store from "@/store";
+
+function change(el, binding) {
+ el.style.display = checkPerm(binding.value) ? el.getAttribute("_display") : "none";
+}
+
+function parse(value) {
+ const permission = store.getters.permission;
+
+ if (typeof value == "string") {
+ return value ? permission.some((e) => e.includes(value.replace(/\s/g, ""))) : false;
+ } else {
+ return Boolean(value);
+ }
+}
+
+export default {
+ inserted(el, binding) {
+ el.setAttribute("_display", el.style.display || "");
+
+ change(el, binding);
+ },
+ update: change
+};
+
+export const checkPerm = (value) => {
+ if (!value) {
+ return false;
+ }
+
+ if (Object.prototype.toString.call(value) === "[object Object]") {
+ if (value.or) {
+ return value.or.some(parse);
+ }
+
+ if (value.and) {
+ return value.and.some((e) => !parse(e)) ? false : true;
+ }
+ }
+
+ return parse(value);
+};
diff --git a/cool/components/base/filters/index.js b/cool/components/base/filters/index.js
new file mode 100644
index 0000000..dcbd3d3
--- /dev/null
+++ b/cool/components/base/filters/index.js
@@ -0,0 +1,17 @@
+export default {
+ default_avatar(url) {
+ if (!url) {
+ return require("../static/images/default-avatar.png");
+ }
+
+ return url;
+ },
+
+ default_name(name) {
+ if (!name) {
+ return "未命名";
+ }
+
+ return name;
+ }
+};
diff --git a/cool/components/base/index.js b/cool/components/base/index.js
new file mode 100644
index 0000000..0ab89dc
--- /dev/null
+++ b/cool/components/base/index.js
@@ -0,0 +1,12 @@
+import components from "./components";
+import filters from "./filters";
+import pages from "./pages";
+import views from "./views";
+import store from "./store";
+import service from "./service";
+import directives, { checkPerm } from "./directives";
+import { iconList } from "./common";
+import "./static/css/index.scss";
+
+export { iconList, checkPerm };
+export default { components, filters, pages, views, store, service, directives };
diff --git a/cool/components/base/package.json b/cool/components/base/package.json
new file mode 100644
index 0000000..5999d0b
--- /dev/null
+++ b/cool/components/base/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "base",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "uuid": "^8.3.2"
+ }
+}
diff --git a/cool/components/base/pages/error-page/403.vue b/cool/components/base/pages/error-page/403.vue
new file mode 100644
index 0000000..4efc96d
--- /dev/null
+++ b/cool/components/base/pages/error-page/403.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/cool/components/base/pages/error-page/404.vue b/cool/components/base/pages/error-page/404.vue
new file mode 100644
index 0000000..4822d17
--- /dev/null
+++ b/cool/components/base/pages/error-page/404.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/cool/components/base/pages/error-page/500.vue b/cool/components/base/pages/error-page/500.vue
new file mode 100644
index 0000000..6b98d87
--- /dev/null
+++ b/cool/components/base/pages/error-page/500.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/cool/components/base/pages/error-page/502.vue b/cool/components/base/pages/error-page/502.vue
new file mode 100644
index 0000000..479cfe6
--- /dev/null
+++ b/cool/components/base/pages/error-page/502.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/cool/components/base/pages/error-page/components/error-page.vue b/cool/components/base/pages/error-page/components/error-page.vue
new file mode 100644
index 0000000..7f86d5b
--- /dev/null
+++ b/cool/components/base/pages/error-page/components/error-page.vue
@@ -0,0 +1,160 @@
+
+
+
{{ code }}
+
{{ desc }}
+
+
+
+
+
+ {{ item.name }}
+ {{ item.path }}
+
+
+
+ 跳转
+
+
+
+ 回到首页
+ 返回上一页
+ 重新登录
+
+
+
+
+
+ 返回登录页
+
+
+
+
Copyright © cool-admin-pro 2020
+
+
+
+
+
+
diff --git a/cool/components/base/pages/iframe/index.vue b/cool/components/base/pages/iframe/index.vue
new file mode 100644
index 0000000..28faf0d
--- /dev/null
+++ b/cool/components/base/pages/iframe/index.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/pages/index.js b/cool/components/base/pages/index.js
new file mode 100644
index 0000000..38070f4
--- /dev/null
+++ b/cool/components/base/pages/index.js
@@ -0,0 +1,22 @@
+export default [
+ {
+ path: '/403',
+ component: () => import("./error-page/403")
+ },
+ {
+ path: '/404',
+ component: () => import("./error-page/404")
+ },
+ {
+ path: '/500',
+ component: () => import("./error-page/500")
+ },
+ {
+ path: '/502',
+ component: () => import("./error-page/502")
+ },
+ {
+ path: '/login',
+ component: () => import("./login")
+ }
+]
diff --git a/cool/components/base/pages/login/components/captcha.vue b/cool/components/base/pages/login/components/captcha.vue
new file mode 100644
index 0000000..a1b6af5
--- /dev/null
+++ b/cool/components/base/pages/login/components/captcha.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/pages/login/index.vue b/cool/components/base/pages/login/index.vue
new file mode 100644
index 0000000..ed0e2aa
--- /dev/null
+++ b/cool/components/base/pages/login/index.vue
@@ -0,0 +1,205 @@
+
+
+
+
+
COOL ADMIN是一款快速开发后台权限管理系统
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
登录
+
+
+
+
+
+
+
diff --git a/cool/components/base/service/common.js b/cool/components/base/service/common.js
new file mode 100644
index 0000000..ce733a7
--- /dev/null
+++ b/cool/components/base/service/common.js
@@ -0,0 +1,80 @@
+import { BaseService, Service } from "cl-admin";
+
+@Service("comm")
+class Common extends BaseService {
+ /**
+ * 文件上传模式
+ */
+ uploadMode() {
+ return this.request({
+ url: "/uploadMode"
+ });
+ }
+
+ /**
+ * 文件上传,如果模式是 cloud,返回对应参数
+ *
+ * @returns
+ * @memberof CommonService
+ */
+ upload(params) {
+ return this.request({
+ url: "/upload",
+ method: "POST",
+ params
+ });
+ }
+
+ /**
+ * 用户退出
+ */
+ userLogout() {
+ return this.request({
+ url: "/logout",
+ method: "POST"
+ });
+ }
+
+ /**
+ * 用户信息
+ *
+ * @returns
+ * @memberof CommonService
+ */
+ userInfo() {
+ return this.request({
+ url: "/person"
+ });
+ }
+
+ /**
+ * 用户信息修改
+ *
+ * @param {*} params
+ * @returns
+ * @memberof CommonService
+ */
+ userUpdate(params) {
+ return this.request({
+ url: "/personUpdate",
+ method: "POST",
+ data: {
+ ...params
+ }
+ });
+ }
+
+ /**
+ * 权限信息
+ *
+ * @returns
+ * @memberof CommonService
+ */
+ permMenu() {
+ return this.request({
+ url: "/permmenu"
+ });
+ }
+}
+
+export default Common;
diff --git a/cool/components/base/service/dept.js b/cool/components/base/service/dept.js
new file mode 100644
index 0000000..fb77c36
--- /dev/null
+++ b/cool/components/base/service/dept.js
@@ -0,0 +1,15 @@
+import { BaseService, Service, Permission } from "cl-admin";
+
+@Service("sys/department")
+class SysDepartment extends BaseService {
+ @Permission("order")
+ order(data) {
+ return this.request({
+ url: "/order",
+ method: "POST",
+ data
+ });
+ }
+}
+
+export default SysDepartment;
diff --git a/cool/components/base/service/index.js b/cool/components/base/service/index.js
new file mode 100644
index 0000000..b076d8f
--- /dev/null
+++ b/cool/components/base/service/index.js
@@ -0,0 +1,21 @@
+import Common from "./common";
+import Open from "./open";
+import SysUser from "./user";
+import SysMenu from "./menu";
+import SysRole from "./role";
+import SysDept from "./dept";
+import PluginInfo from "./plugin";
+
+export default {
+ common: new Common(),
+ open: new Open(),
+ system: {
+ user: new SysUser(),
+ menu: new SysMenu(),
+ role: new SysRole(),
+ dept: new SysDept()
+ },
+ plugin: {
+ info: new PluginInfo()
+ }
+};
diff --git a/cool/components/base/service/menu.js b/cool/components/base/service/menu.js
new file mode 100644
index 0000000..e866c19
--- /dev/null
+++ b/cool/components/base/service/menu.js
@@ -0,0 +1,6 @@
+import { BaseService, Service } from "cl-admin";
+
+@Service("sys/menu")
+class SysMenu extends BaseService {}
+
+export default SysMenu;
diff --git a/cool/components/base/service/open.js b/cool/components/base/service/open.js
new file mode 100644
index 0000000..4dddacb
--- /dev/null
+++ b/cool/components/base/service/open.js
@@ -0,0 +1,56 @@
+import { BaseService, Service } from "cl-admin";
+
+@Service("open")
+class Open extends BaseService {
+ /**
+ * 用户登录
+ *
+ * @param {*} { username, password, captchaId, verifyCode }
+ * @returns
+ * @memberof CommonService
+ */
+ userLogin({ username, password, captchaId, verifyCode }) {
+ return this.request({
+ url: "/login",
+ method: "POST",
+ data: {
+ username,
+ password,
+ captchaId,
+ verifyCode
+ }
+ });
+ }
+
+ /**
+ * 图片验证码 svg
+ *
+ * @param {*} { height, width }
+ * @returns
+ * @memberof CommonService
+ */
+ captcha({ height, width }) {
+ return this.request({
+ url: "/captcha",
+ params: {
+ height,
+ width
+ }
+ });
+ }
+
+ /**
+ * 刷新 token
+ * @param {string} token
+ */
+ refreshToken(token) {
+ return this.request({
+ url: "/refreshToken",
+ params: {
+ refreshToken: token
+ }
+ });
+ }
+}
+
+export default Open;
diff --git a/cool/components/base/service/plugin.js b/cool/components/base/service/plugin.js
new file mode 100644
index 0000000..d3bef7d
--- /dev/null
+++ b/cool/components/base/service/plugin.js
@@ -0,0 +1,32 @@
+import { BaseService, Service, Permission } from "cl-admin";
+
+@Service("plugin/info")
+class PluginInfo extends BaseService {
+ @Permission("config")
+ config(data) {
+ return this.request({
+ url: "/config",
+ method: "POST",
+ data
+ });
+ }
+
+ @Permission("getConfig")
+ getConfig(params) {
+ return this.request({
+ url: "/getConfig",
+ params
+ });
+ }
+
+ @Permission("enable")
+ enable(data) {
+ return this.request({
+ url: "/enable",
+ method: "POST",
+ data
+ });
+ }
+}
+
+export default PluginInfo;
diff --git a/cool/components/base/service/role.js b/cool/components/base/service/role.js
new file mode 100644
index 0000000..05d8de0
--- /dev/null
+++ b/cool/components/base/service/role.js
@@ -0,0 +1,6 @@
+import { BaseService, Service } from "cl-admin";
+
+@Service("sys/role")
+class SysRole extends BaseService {}
+
+export default SysRole;
diff --git a/cool/components/base/service/user.js b/cool/components/base/service/user.js
new file mode 100644
index 0000000..9819a95
--- /dev/null
+++ b/cool/components/base/service/user.js
@@ -0,0 +1,15 @@
+import { BaseService, Service, Permission } from "cl-admin";
+
+@Service("sys/user")
+class SysUser extends BaseService {
+ @Permission("move")
+ move(data) {
+ return this.request({
+ url: "/move",
+ method: "POST",
+ data
+ });
+ }
+}
+
+export default SysUser;
diff --git a/cool/components/base/static/css/index.scss b/cool/components/base/static/css/index.scss
new file mode 100644
index 0000000..1dd00b9
--- /dev/null
+++ b/cool/components/base/static/css/index.scss
@@ -0,0 +1 @@
+@import "./theme.scss";
diff --git a/cool/components/base/static/css/theme.scss b/cool/components/base/static/css/theme.scss
new file mode 100644
index 0000000..4ab24dc
--- /dev/null
+++ b/cool/components/base/static/css/theme.scss
@@ -0,0 +1,126 @@
+// customize style
+.scroller1 {
+ overflow: hidden auto;
+ position: relative;
+ z-index: 9;
+
+ &::-webkit-scrollbar-track {
+ background: transparent;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background-color: rgba(144, 147, 153, 0.3);
+ border-radius: 6px;
+ }
+
+ &::-webkit-scrollbar {
+ height: 6px;
+ width: 6px;
+ }
+}
+
+// Element-ui theme
+.el-input-number {
+ .el-input-number__decrease,
+ .el-input-number__increase {
+ border: 0 !important;
+ background-color: transparent;
+ }
+}
+
+.el-dialog {
+ .el-dialog__header {
+ padding: 10px;
+ text-align: center;
+ border-bottom: 1px solid #f7f7f7;
+
+ .el-dialog__title {
+ font-size: 15px;
+ letter-spacing: 0.5px;
+ }
+
+ .el-dialog__headerbtn {
+ top: 13px;
+
+ .el-dialog__close {
+ font-size: 18px;
+ }
+ }
+ }
+
+ .el-dialog__body {
+ padding: 20px;
+ }
+
+ .el-dialog__footer {
+ padding-bottom: 15px;
+ }
+}
+
+.el-message {
+ &.el-message--success,
+ &.el-message--error,
+ &.el-message--info,
+ &.el-message--warning {
+ min-width: auto;
+ background-color: #fff;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+ border: 0;
+ padding: 12px 20px 12px 15px;
+
+ .el-message__icon {
+ font-size: 16px;
+ }
+
+ .el-message__content {
+ color: #999;
+ }
+ }
+}
+
+.el-table {
+ &__header {
+ th {
+ padding: 0 !important;
+ background-color: #ebeef5 !important;
+ height: 36px;
+ line-height: 36px;
+ }
+
+ .cell {
+ color: $color-main;
+ font-weight: normal;
+ }
+ }
+
+ &__body {
+ &-wrapper {
+ @media only screen and (max-width: 768px) {
+ &::-webkit-scrollbar {
+ height: 6px;
+ width: 6px;
+ }
+ }
+ }
+ }
+
+ &__column {
+ &-filter-trigger {
+ margin-left: 5px;
+ }
+ }
+
+ &-column--selection {
+ .cell {
+ padding: 0 14px !important;
+ }
+ }
+}
+
+.el-table-filter {
+ margin-top: 5px !important;
+
+ .el-checkbox__label {
+ font-size: 12px;
+ }
+}
diff --git a/cool/components/base/static/images/default-avatar.png b/cool/components/base/static/images/default-avatar.png
new file mode 100644
index 0000000..1ede40f
Binary files /dev/null and b/cool/components/base/static/images/default-avatar.png differ
diff --git a/cool/components/base/static/images/logo.png b/cool/components/base/static/images/logo.png
new file mode 100644
index 0000000..035b79c
Binary files /dev/null and b/cool/components/base/static/images/logo.png differ
diff --git a/cool/components/base/store/app.js b/cool/components/base/store/app.js
new file mode 100644
index 0000000..defa36f
--- /dev/null
+++ b/cool/components/base/store/app.js
@@ -0,0 +1,58 @@
+import { app } from "@/config/env";
+import { getBrowser } from "cl-admin/utils";
+
+export default {
+ state: {
+ info: {
+ name: app.name
+ },
+ conf: {
+ ...app.conf
+ },
+ browser: {
+ isMobile: false
+ },
+ collapse: false,
+ upload: {
+ mode: "local"
+ }
+ },
+ getters: {
+ // 应用信息
+ appInfo: (state) => state.info,
+ // 应用配置
+ conf: (state) => state.conf,
+ // 浏览器信息
+ browser: (state) => state.browser,
+ // 左侧菜单是否收起
+ menuCollapse: (state) => state.collapse,
+ // 上传配置
+ upload: (state) => state.upload
+ },
+ actions: {
+ appLoad({ getters, dispatch }) {
+ if (getters.token) {
+ // 读取菜单权限
+ dispatch("permMenu");
+ // 获取用户信息
+ dispatch("userInfo");
+ // 设置上传配置
+ dispatch("setUpload");
+ }
+ },
+ setUpload({ state }) {
+ this.$service.common.uploadMode().then((res) => {
+ state.upload = res;
+ });
+ }
+ },
+ mutations: {
+ SET_BROWSER(state) {
+ state.browser = getBrowser();
+ },
+
+ COLLAPSE_MENU(state, val = false) {
+ state.collapse = val;
+ }
+ }
+};
diff --git a/cool/components/base/store/component.js b/cool/components/base/store/component.js
new file mode 100644
index 0000000..59d8f72
--- /dev/null
+++ b/cool/components/base/store/component.js
@@ -0,0 +1,33 @@
+export default {
+ state: {
+ info: {},
+ list: [],
+ modules: []
+ },
+
+ getters: {
+ // 组件信息
+ components: (state) => state.info,
+ // 组件列表
+ componentList: (state) => state.list,
+ // 组件模块
+ componentModules: (state) => state.modules
+ },
+
+ mutations: {
+ SET_COMPONENT(state, list) {
+ let d = {};
+
+ list.forEach((e) => {
+ d[e.name] = e;
+ });
+
+ state.list = list;
+ state.info = d;
+ },
+
+ SET_COMPONENT_MODULES(state, list) {
+ state.modules = list;
+ }
+ }
+};
diff --git a/cool/components/base/store/index.js b/cool/components/base/store/index.js
new file mode 100644
index 0000000..ab8c304
--- /dev/null
+++ b/cool/components/base/store/index.js
@@ -0,0 +1,7 @@
+import user from "./user";
+import app from "./app";
+import process from "./process";
+import component from "./component";
+import menu from "./menu";
+
+export default { user, app, process, component, menu };
diff --git a/cool/components/base/store/menu.js b/cool/components/base/store/menu.js
new file mode 100644
index 0000000..0279aed
--- /dev/null
+++ b/cool/components/base/store/menu.js
@@ -0,0 +1,152 @@
+import store from "store";
+import { Message } from "element-ui";
+import { deepTree, revDeepTree, isArray, isEmpty } from "cl-admin/utils";
+import { revisePath } from "cool/components/base/utils";
+import router from "@/router";
+import { menuList } from "@/config/env";
+
+export default {
+ state: {
+ // 视图路由,type=1
+ routes: store.get("viewRoutes") || [],
+ // 树形菜单
+ group: store.get("menuGroup") || [],
+ // showAMenu 模式下,顶级菜单的序号
+ index: 0,
+ // 左侧菜单
+ menu: [],
+ // 权限列表
+ permission: []
+ },
+ getters: {
+ // 树形菜单列表
+ menuGroup: (state) => state.group,
+ // 左侧菜单
+ menuList: (state) => state.menu,
+ // 视图路由
+ routes: (state) => state.routes,
+ // 权限列表
+ permission: (state) => state.permission
+ },
+ actions: {
+ // 设置菜单、权限
+ permMenu({ commit, state, getters }) {
+ return new Promise((resolve, reject) => {
+ const next = (res) => {
+ if (!isArray(res.menus)) {
+ res.menus = [];
+ }
+
+ if (!isArray(res.perms)) {
+ res.perms = [];
+ }
+
+ const routes = res.menus
+ .filter((e) => e.type != 2)
+ .map((e) => {
+ let r = {
+ moduleName:
+ e.moduleName || (e.router || "").substr(1).replace(/\//g, "-"),
+ id: e.id,
+ parentId: e.parentId,
+ path: revisePath(e.router || e.id),
+ viewPath: e.viewPath,
+ type: e.type,
+ name: e.name,
+ icon: e.icon,
+ orderNum: e.orderNum,
+ isShow: isEmpty(e.isShow) ? true : e.isShow,
+ meta: {
+ label: e.name,
+ keepAlive: e.keepAlive
+ },
+ children: []
+ };
+
+ // 匹配存储的组件模块
+ let m = getters.componentModules.find(
+ (m) => m.moduleName === r.moduleName
+ );
+
+ if (m) {
+ // 注册组件实例
+ r.component = m.component;
+ }
+
+ return r;
+ });
+
+ // 转成树形菜单
+ const menuGroup = deepTree(routes);
+
+ // 设置权限
+ commit("SET_PERMIESSION", res.perms);
+ // 设置菜单组
+ commit("SET_MENU_GROUP", menuGroup);
+ // 设置视图路由
+ commit(
+ "SET_VIEW_ROUTES",
+ routes.filter((e) => e.type == 1)
+ );
+ // 设置菜单
+ commit("SET_MENU_LIST", state.index);
+
+ resolve(menuGroup);
+ };
+
+ // 监测自定义菜单
+ if (!getters.conf.customMenu) {
+ this.$service.common
+ .permMenu()
+ .then((res) => {
+ next(res);
+ })
+ .catch((err) => {
+ Message.error("菜单加载异常");
+ console.error(err);
+ reject(err);
+ });
+ } else {
+ next({
+ menus: revDeepTree(menuList)
+ });
+ }
+ });
+ }
+ },
+ mutations: {
+ // 设置树形菜单列表
+ SET_MENU_GROUP(state, list) {
+ state.group = list;
+ store.set("menuGroup", list);
+ },
+
+ // 设置视图路由
+ SET_VIEW_ROUTES(state, list) {
+ router.$plugin.addViews(list);
+
+ state.routes = list;
+ store.set("viewRoutes", list);
+ },
+
+ // 设置左侧菜单
+ SET_MENU_LIST(state, index) {
+ const { showAMenu } = this.getters.conf;
+
+ if (showAMenu) {
+ const { children = [] } = state.group[index] || {};
+
+ state.index = index;
+ state.menu = children;
+ } else {
+ state.menu = state.group;
+ }
+ },
+
+ // 设置权限
+ SET_PERMIESSION(state, list) {
+ state.permission = list;
+ store.set("permission", list);
+ }
+ }
+};
diff --git a/cool/components/base/store/process.js b/cool/components/base/store/process.js
new file mode 100644
index 0000000..d6f163c
--- /dev/null
+++ b/cool/components/base/store/process.js
@@ -0,0 +1,57 @@
+const fMenu = {
+ label: "首页",
+ value: "/",
+ active: true
+};
+
+export default {
+ state: {
+ list: [fMenu]
+ },
+ getters: {
+ // 窗口列表
+ processList: (state) => state.list
+ },
+ mutations: {
+ ADD_PROCESS(state, item) {
+ const index = state.list.findIndex(
+ (e) => e.value.split("?")[0] === item.value.split("?")[0]
+ );
+
+ state.list.map((e) => {
+ e.active = e.value == item.value;
+ });
+
+ if (index < 0) {
+ if (item.value == "/") {
+ item.label = fMenu.label;
+ }
+
+ if (item.label) {
+ state.list.push({
+ ...item,
+ active: true
+ });
+ }
+ } else {
+ state.list[index].active = true;
+ state.list[index].label = item.label;
+ state.list[index].value = item.value;
+ }
+ },
+
+ DEL_PROCESS(state, index) {
+ if (index != 0) {
+ state.list.splice(index, 1);
+ }
+ },
+
+ SET_PROCESS(state, list) {
+ state.list = list;
+ },
+
+ RESET_PROCESS(state) {
+ state.list = [fMenu];
+ }
+ }
+};
diff --git a/cool/components/base/store/user.js b/cool/components/base/store/user.js
new file mode 100644
index 0000000..0f05e3a
--- /dev/null
+++ b/cool/components/base/store/user.js
@@ -0,0 +1,103 @@
+import { storage, href } from "cl-admin/utils";
+
+// 用户信息
+let info = storage.get("userInfo") || {};
+// 授权标识
+let token = storage.get("token") || null;
+
+export default {
+ state: {
+ token,
+ info
+ },
+ getters: {
+ userInfo: (state) => state.info,
+ token: (state) => state.token
+ },
+ actions: {
+ // 用户登录
+ userLogin({ commit }, form) {
+ return this.$service.open.userLogin(form).then((res) => {
+ commit("SET_TOKEN", res);
+ return res;
+ });
+ },
+
+ // 用户退出
+ userLogout({ dispatch }) {
+ return new Promise((resolve) => {
+ this.$service.common.userLogout().done(() => {
+ dispatch("userRemove").then(() => {
+ resolve();
+ });
+ });
+ });
+ },
+
+ // 用户信息
+ userInfo({ commit }) {
+ return this.$service.common.userInfo().then((res) => {
+ commit("SET_USERINFO", res);
+ return res;
+ });
+ },
+
+ // 用户移除
+ userRemove({ commit }) {
+ console.log(222);
+ commit("CLEAR_USER");
+ commit("CLEAR_TOKEN");
+ commit("RESET_PROCESS");
+ commit("SET_MENU_GROUP", []);
+ commit("SET_VIEW_ROUTES", []);
+ commit("SET_MENU_LIST", 0);
+ },
+
+ // 刷新token
+ refreshToken({ commit, dispatch }) {
+ return new Promise((resolve, reject) => {
+ this.$service.open
+ .refreshToken(storage.get("refreshToken"))
+ .then((res) => {
+ commit("SET_TOKEN", res);
+ resolve(res.token);
+ })
+ .catch((err) => {
+ dispatch("userRemove");
+ href("/login");
+ reject(err);
+ });
+ });
+ }
+ },
+ mutations: {
+ // 设置用户信息
+ SET_USERINFO(state, val) {
+ state.info = val;
+ storage.set("userInfo", val);
+ },
+
+ // 设置授权标识
+ SET_TOKEN(state, { token, expire, refreshToken, refreshExpire }) {
+ // 请求的唯一标识
+ state.token = token;
+ storage.set("token", token, expire);
+
+ // 刷新 token 的唯一标识
+ storage.set("refreshToken", refreshToken, refreshExpire);
+ },
+
+ // 移除授权标识
+ CLEAR_TOKEN(state) {
+ state.token = null;
+ storage.remove("token");
+ storage.remove("refreshToken");
+ },
+
+ // 移除用户信息
+ CLEAR_USER(state) {
+ state.info = {};
+ storage.remove("userInfo");
+ }
+ }
+};
diff --git a/cool/components/base/utils/index.js b/cool/components/base/utils/index.js
new file mode 100644
index 0000000..2f50527
--- /dev/null
+++ b/cool/components/base/utils/index.js
@@ -0,0 +1,31 @@
+export const revisePath = (path) => {
+ if (!path) {
+ return "";
+ }
+
+ if (path[0] == "/") {
+ return path;
+ } else {
+ return `/${path}`;
+ }
+};
+
+export function firstMenu(list) {
+ let path = "";
+
+ const fn = (arr) => {
+ arr.forEach((e) => {
+ if (e.type == 1) {
+ if (!path) {
+ path = e.path;
+ }
+ } else {
+ fn(e.children);
+ }
+ });
+ };
+
+ fn(list);
+
+ return path || "/404";
+}
diff --git a/cool/components/base/views/index.js b/cool/components/base/views/index.js
new file mode 100644
index 0000000..5c92f33
--- /dev/null
+++ b/cool/components/base/views/index.js
@@ -0,0 +1,35 @@
+export default [
+ {
+ label: "个人中心",
+ path: "/my/info",
+ component: () => import("./info")
+ },
+ {
+ moduleName: "sys-user",
+ label: "用户列表",
+ path: "/sys/user",
+ icon: "icon-user",
+ component: () => import("./user")
+ },
+ {
+ moduleName: "sys-menu",
+ label: "菜单列表",
+ path: "/sys/menu",
+ icon: "icon-menu",
+ component: () => import("./menu")
+ },
+ {
+ moduleName: "sys-role",
+ label: "角色列表",
+ path: "/sys/role",
+ icon: "icon-common",
+ component: () => import("./role")
+ },
+ {
+ moduleName: "plugin",
+ label: "插件列表",
+ path: "/plugin",
+ icon: "icon-menu",
+ component: () => import("./plugin")
+ }
+];
diff --git a/cool/components/base/views/info.vue b/cool/components/base/views/info.vue
new file mode 100644
index 0000000..32a3eda
--- /dev/null
+++ b/cool/components/base/views/info.vue
@@ -0,0 +1,90 @@
+
+
+
基本信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存修改
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/views/menu.vue b/cool/components/base/views/menu.vue
new file mode 100644
index 0000000..d643ac4
--- /dev/null
+++ b/cool/components/base/views/menu.vue
@@ -0,0 +1,391 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.name }}
+ 隐藏
+
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+ {{
+ scope.row.router
+ }}
+ {{ scope.row.router }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/views/plugin.vue b/cool/components/base/views/plugin.vue
new file mode 100644
index 0000000..0120af9
--- /dev/null
+++ b/cool/components/base/views/plugin.vue
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/views/role.vue b/cool/components/base/views/role.vue
new file mode 100644
index 0000000..28a1ec9
--- /dev/null
+++ b/cool/components/base/views/role.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/base/views/user.vue b/cool/components/base/views/user.vue
new file mode 100644
index 0000000..81d06ea
--- /dev/null
+++ b/cool/components/base/views/user.vue
@@ -0,0 +1,544 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 转移
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+ 转移
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/chat/components/box.vue b/cool/components/chat/components/box.vue
new file mode 100644
index 0000000..62f7eb4
--- /dev/null
+++ b/cool/components/chat/components/box.vue
@@ -0,0 +1,807 @@
+
+
+
+
+
+
+
diff --git a/cool/components/chat/components/emoji.vue b/cool/components/chat/components/emoji.vue
new file mode 100644
index 0000000..6e9ace2
--- /dev/null
+++ b/cool/components/chat/components/emoji.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
diff --git a/cool/components/chat/components/icon-voice.vue b/cool/components/chat/components/icon-voice.vue
new file mode 100644
index 0000000..f08a09d
--- /dev/null
+++ b/cool/components/chat/components/icon-voice.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/chat/components/index.js b/cool/components/chat/components/index.js
new file mode 100644
index 0000000..1fb09af
--- /dev/null
+++ b/cool/components/chat/components/index.js
@@ -0,0 +1,4 @@
+import ChatBox from "./box";
+import Notice from "./notice";
+
+export default { ChatBox, Notice };
diff --git a/cool/components/chat/components/message.vue b/cool/components/chat/components/message.vue
new file mode 100644
index 0000000..450dc4b
--- /dev/null
+++ b/cool/components/chat/components/message.vue
@@ -0,0 +1,345 @@
+
+
+
+
+ {{ item._date }}
+
+
+
+
+
+
+
+
+
{{ item.nickName }}
+
+
+
+
{{ item.content.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.content.duration | duration }}"
+
+
+
+
+
+
+
+
+
+
+
+ 待扩展消息类型
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/chat/components/notice.vue b/cool/components/chat/components/notice.vue
new file mode 100644
index 0000000..df0b6dc
--- /dev/null
+++ b/cool/components/chat/components/notice.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/chat/index.js b/cool/components/chat/index.js
new file mode 100644
index 0000000..532ee77
--- /dev/null
+++ b/cool/components/chat/index.js
@@ -0,0 +1,4 @@
+import components from "./components";
+import service from "./service";
+
+export default { components, service };
diff --git a/cool/components/chat/package.json b/cool/components/chat/package.json
new file mode 100644
index 0000000..3b674eb
--- /dev/null
+++ b/cool/components/chat/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "chat",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "dayjs": "^1.10.4",
+ "socket.io-client": "^3.1.1"
+ }
+}
diff --git a/cool/components/chat/service/index.js b/cool/components/chat/service/index.js
new file mode 100644
index 0000000..5764dc9
--- /dev/null
+++ b/cool/components/chat/service/index.js
@@ -0,0 +1,9 @@
+import ImMessage from "./message";
+import ImSession from "./session";
+
+export default {
+ im: {
+ message: new ImMessage(),
+ session: new ImSession()
+ }
+};
diff --git a/cool/components/chat/service/message.js b/cool/components/chat/service/message.js
new file mode 100644
index 0000000..6e0185d
--- /dev/null
+++ b/cool/components/chat/service/message.js
@@ -0,0 +1,15 @@
+import { BaseService, Service, Permission } from "cl-admin";
+
+@Service("app/im/message")
+class ImMessage extends BaseService {
+ @Permission("read")
+ read(data) {
+ return this.request({
+ url: "/read",
+ method: "POST",
+ data
+ });
+ }
+}
+
+export default ImMessage;
diff --git a/cool/components/chat/service/session.js b/cool/components/chat/service/session.js
new file mode 100644
index 0000000..ce436a7
--- /dev/null
+++ b/cool/components/chat/service/session.js
@@ -0,0 +1,13 @@
+import { BaseService, Service, Permission } from "cl-admin";
+
+@Service("app/im/session")
+class ImSession extends BaseService {
+ @Permission("unreadCount")
+ unreadCount() {
+ return this.request({
+ url: "/unreadCount"
+ });
+ }
+}
+
+export default ImSession;
diff --git a/cool/components/chat/static/images/custom-avatar.png b/cool/components/chat/static/images/custom-avatar.png
new file mode 100644
index 0000000..d69c80f
Binary files /dev/null and b/cool/components/chat/static/images/custom-avatar.png differ
diff --git a/cool/components/chat/static/images/emoji.png b/cool/components/chat/static/images/emoji.png
new file mode 100644
index 0000000..b233094
Binary files /dev/null and b/cool/components/chat/static/images/emoji.png differ
diff --git a/cool/components/chat/static/images/image.png b/cool/components/chat/static/images/image.png
new file mode 100644
index 0000000..e119fa2
Binary files /dev/null and b/cool/components/chat/static/images/image.png differ
diff --git a/cool/components/chat/static/images/video.png b/cool/components/chat/static/images/video.png
new file mode 100644
index 0000000..80dd1be
Binary files /dev/null and b/cool/components/chat/static/images/video.png differ
diff --git a/cool/components/chat/static/notify.mp3 b/cool/components/chat/static/notify.mp3
new file mode 100644
index 0000000..594a32b
Binary files /dev/null and b/cool/components/chat/static/notify.mp3 differ
diff --git a/cool/components/chat/utils/index.js b/cool/components/chat/utils/index.js
new file mode 100644
index 0000000..0a7140b
--- /dev/null
+++ b/cool/components/chat/utils/index.js
@@ -0,0 +1,31 @@
+import { isObject } from "cl-admin/utils";
+
+export function parseContent({ content, contentType }) {
+ let data = isObject(content) ? content : JSON.parse(content);
+ let text = "";
+
+ switch (contentType) {
+ case 0:
+ text = data.text;
+ break;
+ case 1:
+ text = "[图片]";
+ break;
+ case 2:
+ text = "[表情]";
+ break;
+ case 3:
+ text = "[语音]";
+ break;
+ case 4:
+ text = "[视频]";
+ break;
+ case 5:
+ text = "[商品信息]";
+ break;
+ }
+
+ data._text = text;
+
+ return data;
+}
diff --git a/cool/components/codemirror/components/index.vue b/cool/components/codemirror/components/index.vue
new file mode 100644
index 0000000..6e97848
--- /dev/null
+++ b/cool/components/codemirror/components/index.vue
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/codemirror/index.js b/cool/components/codemirror/index.js
new file mode 100644
index 0000000..0878c4e
--- /dev/null
+++ b/cool/components/codemirror/index.js
@@ -0,0 +1,7 @@
+import Codemirror from "./components";
+
+export default {
+ components: {
+ Codemirror
+ }
+};
diff --git a/cool/components/codemirror/package.json b/cool/components/codemirror/package.json
new file mode 100644
index 0000000..7cb4639
--- /dev/null
+++ b/cool/components/codemirror/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "codemirror",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "codemirror": "^5.59.2",
+ "js-beautify": "^1.13.5",
+ "vue-codemirror": "^4.0.6"
+ }
+}
diff --git a/cool/components/copy/directives/index.js b/cool/components/copy/directives/index.js
new file mode 100644
index 0000000..a51d939
--- /dev/null
+++ b/cool/components/copy/directives/index.js
@@ -0,0 +1,28 @@
+import { Message } from "element-ui";
+import Clipboard from "clipboard";
+
+function copyboard() {
+ const clipboard = new Clipboard("._copy-btn");
+
+ clipboard.on("success", (e) => {
+ Message.success("复制成功");
+ e.clearSelection();
+ });
+
+ clipboard.on("error", (err) => {
+ console.error(err);
+ Message.success("复制失败");
+ });
+}
+
+copyboard();
+
+export default {
+ inserted: (el, binding) => {
+ el.className = el.className + " _copy-btn";
+ el.setAttribute("data-clipboard-text", binding.value);
+ },
+ update: (el, binding) => {
+ el.setAttribute("data-clipboard-text", binding.value);
+ }
+};
diff --git a/cool/components/copy/index.js b/cool/components/copy/index.js
new file mode 100644
index 0000000..c93b2bd
--- /dev/null
+++ b/cool/components/copy/index.js
@@ -0,0 +1,7 @@
+import copy from "./directives";
+
+export default {
+ directives: {
+ copy
+ }
+};
diff --git a/cool/components/copy/package.json b/cool/components/copy/package.json
new file mode 100644
index 0000000..818daa5
--- /dev/null
+++ b/cool/components/copy/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "copy",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "clipboard": "^2.0.6",
+ "tape": "^5.1.1"
+ }
+}
diff --git a/cool/components/demo/index.js b/cool/components/demo/index.js
new file mode 100644
index 0000000..3c5dcb8
--- /dev/null
+++ b/cool/components/demo/index.js
@@ -0,0 +1,5 @@
+import views from './views'
+
+export default {
+ views
+};
diff --git a/cool/components/demo/package.json b/cool/components/demo/package.json
new file mode 100644
index 0000000..7859683
--- /dev/null
+++ b/cool/components/demo/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "demo",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "dayjs": "^1.10.4"
+ }
+}
diff --git a/cool/components/demo/utils/service.js b/cool/components/demo/utils/service.js
new file mode 100644
index 0000000..4ad2503
--- /dev/null
+++ b/cool/components/demo/utils/service.js
@@ -0,0 +1,107 @@
+import dayjs from 'dayjs'
+
+let id = 10
+
+export const UserList = [
+ {
+ id: 1,
+ name: "刘一",
+ createTime: "2019年09月02日",
+ price: 75.99,
+ status: 1
+ },
+ {
+ id: 2,
+ name: "陈二",
+ createTime: "2019年09月05日",
+ price: 242.1,
+ status: 1
+ },
+ {
+ id: 3,
+ name: "张三",
+ createTime: "2019年09月12日",
+ price: 74.11,
+ status: 0
+ },
+ {
+ id: 4,
+ name: "李四",
+ createTime: "2019年09月13日",
+ price: 276.64,
+ status: 0
+ },
+ {
+ id: 5,
+ name: "王五",
+ createTime: "2019年09月18日",
+ price: 160.23,
+ status: 1
+ }
+];
+
+export const TestService = {
+ page: (p) => {
+ console.log("GET[page]", p);
+ console.log(p)
+
+ let total = 0
+
+ let list = UserList.filter((e, i) => {
+ if (p.name) {
+ return e.name.includes(p.name)
+ }
+
+ if (![undefined, null, ''].includes(p.status)) {
+ return e.status === p.status
+ }
+
+ total++
+
+ if (i >= (p.page - 1) * p.size && i < p.page * p.size) {
+ return true
+ } else {
+ return false
+ }
+ })
+
+ return Promise.resolve({
+ list,
+ pagination: {
+ page: p.page,
+ size: p.size,
+ total
+ }
+ });
+ },
+ info: (d) => {
+ console.log("GET[info]", d);
+ return new Promise((resolve) => {
+ resolve(UserList.find(e.id == d.id));
+ });
+ },
+ add: (d) => {
+ console.log("POST[add]", d);
+ UserList.push({
+ ...d,
+ id: id++,
+ createTime: dayjs().format('YYYY年MM月DD日')
+ })
+ return Promise.resolve();
+ },
+ delete: (d) => {
+ console.log("POST[delete]", d);
+ let ids = d.ids.split(',')
+ ids.forEach(id => {
+ const index = UserList.findIndex(e => e.id == id)
+ UserList.splice(index, 1)
+ })
+ return Promise.resolve();
+ },
+ update: (d) => {
+ console.log("POST[update]", d);
+ let item = UserList.find(e => e.id == d.id)
+ Object.assign(item, d)
+ return Promise.resolve();
+ }
+};
diff --git a/cool/components/demo/views/components/b-cl-context-menu.vue b/cool/components/demo/views/components/b-cl-context-menu.vue
new file mode 100644
index 0000000..d5e031c
--- /dev/null
+++ b/cool/components/demo/views/components/b-cl-context-menu.vue
@@ -0,0 +1,80 @@
+
+
+
+ cl-context-menu
+ 右键菜单
+
+
+
+ 2019/10/23
+
+
+
+
+
+
+
diff --git a/cool/components/demo/views/components/b-cl-crud.vue b/cool/components/demo/views/components/b-cl-crud.vue
new file mode 100644
index 0000000..fcc1352
--- /dev/null
+++ b/cool/components/demo/views/components/b-cl-crud.vue
@@ -0,0 +1,14 @@
+
+
+
+ cl-crud
+ 增删改查,加强
+
+
+ 传送门
+
+
+ 2019/09/25
+
+
+
diff --git a/cool/components/demo/views/components/b-cl-editor-quill.vue b/cool/components/demo/views/components/b-cl-editor-quill.vue
new file mode 100644
index 0000000..36f7166
--- /dev/null
+++ b/cool/components/demo/views/components/b-cl-editor-quill.vue
@@ -0,0 +1,14 @@
+
+
+
+ cl-editor-quill
+ Quill 富文本编辑器
+
+
+ 传送门
+
+
+ 2019/11/07
+
+
+
diff --git a/cool/components/demo/views/components/b-cl-form.vue b/cool/components/demo/views/components/b-cl-form.vue
new file mode 100644
index 0000000..3b047aa
--- /dev/null
+++ b/cool/components/demo/views/components/b-cl-form.vue
@@ -0,0 +1,140 @@
+
+
+
+ cl-form
+ 自定义表单
+
+
+
+ 填写邀请码
+
+
+
+ 2019/10/11
+
+
+
+
+
+
+
diff --git a/cool/components/demo/views/components/b-cl-upload.vue b/cool/components/demo/views/components/b-cl-upload.vue
new file mode 100644
index 0000000..502efbb
--- /dev/null
+++ b/cool/components/demo/views/components/b-cl-upload.vue
@@ -0,0 +1,41 @@
+
+
+
+ cl-upload
+ 图片上传
+
+
+ 传送门
+
+
+ 2019/09/25
+
+
+
+
+
+
+
diff --git a/cool/components/demo/views/components/b-error-page.vue b/cool/components/demo/views/components/b-error-page.vue
new file mode 100644
index 0000000..86ce9ac
--- /dev/null
+++ b/cool/components/demo/views/components/b-error-page.vue
@@ -0,0 +1,29 @@
+
+
+
+ error-page
+ 错误页
+
+
+
+ 403
+ 404
+ 500
+ 502
+
+
+
+ 2019/10/25
+
+
+
+
+
diff --git a/cool/components/demo/views/components/b-icon-svg.vue b/cool/components/demo/views/components/b-icon-svg.vue
new file mode 100644
index 0000000..2bd9d41
--- /dev/null
+++ b/cool/components/demo/views/components/b-icon-svg.vue
@@ -0,0 +1,26 @@
+
+
+
+ icon-svg
+ svg图片库
+
+
+
+
+
+
+
+ 2019/09/25
+
+
+
+
+
diff --git a/cool/components/demo/views/components/b-v-copy.vue b/cool/components/demo/views/components/b-v-copy.vue
new file mode 100644
index 0000000..5c73373
--- /dev/null
+++ b/cool/components/demo/views/components/b-v-copy.vue
@@ -0,0 +1,18 @@
+
+
+
+ v-copy
+ 复制到剪贴板
+
+
+
+
+ https://www.cool-admin.com
+
+
+
+
+ 2019/09/25
+
+
+
diff --git a/cool/components/demo/views/crud.vue b/cool/components/demo/views/crud.vue
new file mode 100644
index 0000000..9b3b257
--- /dev/null
+++ b/cool/components/demo/views/crud.vue
@@ -0,0 +1,613 @@
+
+
+
+
+
+
+
+
+ {
+ refresh({
+ status: val,
+ page: 1
+ });
+ }
+ "
+ >
+
+
+
+
+
+ 自定义测试表单
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加行
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/demo/views/demo.vue b/cool/components/demo/views/demo.vue
new file mode 100644
index 0000000..f5cfcba
--- /dev/null
+++ b/cool/components/demo/views/demo.vue
@@ -0,0 +1,215 @@
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/demo/views/editor-quill.vue b/cool/components/demo/views/editor-quill.vue
new file mode 100644
index 0000000..b662b95
--- /dev/null
+++ b/cool/components/demo/views/editor-quill.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/demo/views/index.js b/cool/components/demo/views/index.js
new file mode 100644
index 0000000..97e2dbf
--- /dev/null
+++ b/cool/components/demo/views/index.js
@@ -0,0 +1,26 @@
+export default [
+ {
+ moduleName: "crud",
+ label: "crud 示例",
+ path: "/crud",
+ component: () => import("./crud")
+ },
+ {
+ moduleName: "editor-quill",
+ label: "quill 富文本编辑器",
+ path: "/editor-quill",
+ component: () => import("./editor-quill")
+ },
+ {
+ moduleName: "upload",
+ label: "文件上传",
+ path: "/upload",
+ component: () => import("./upload")
+ },
+ {
+ moduleName: "demo",
+ label: "组件预览",
+ path: "/demo",
+ component: () => import("./demo")
+ }
+];
diff --git a/cool/components/demo/views/upload.vue b/cool/components/demo/views/upload.vue
new file mode 100644
index 0000000..e62d159
--- /dev/null
+++ b/cool/components/demo/views/upload.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
指定类型上传 accept=.jpg,.png
+
+
+
+
+
多图上传 picture-card
+
+
+
+
+
+
+
+
+
+
拖拽上传
+
+
+ 将文件拖到此处,或点击上传
+
+
+
+
+
文件空间
+
+
+
选择的文件:{{ urls }}
+
+
+
+
+
+
+
diff --git a/cool/components/distpicker/components/data.json b/cool/components/distpicker/components/data.json
new file mode 100644
index 0000000..4d5647f
--- /dev/null
+++ b/cool/components/distpicker/components/data.json
@@ -0,0 +1,5312 @@
+[
+ {
+ "code": "11",
+ "name": "北京市",
+ "children": [
+ {
+ "code": "1101",
+ "name": "市辖区",
+ "children": [
+ { "code": "110101", "name": "东城区" },
+ { "code": "110102", "name": "西城区" },
+ { "code": "110105", "name": "朝阳区" },
+ { "code": "110106", "name": "丰台区" },
+ { "code": "110107", "name": "石景山区" },
+ { "code": "110108", "name": "海淀区" },
+ { "code": "110109", "name": "门头沟区" },
+ { "code": "110111", "name": "房山区" },
+ { "code": "110112", "name": "通州区" },
+ { "code": "110113", "name": "顺义区" },
+ { "code": "110114", "name": "昌平区" },
+ { "code": "110115", "name": "大兴区" },
+ { "code": "110116", "name": "怀柔区" },
+ { "code": "110117", "name": "平谷区" },
+ { "code": "110118", "name": "密云区" },
+ { "code": "110119", "name": "延庆区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "12",
+ "name": "天津市",
+ "children": [
+ {
+ "code": "1201",
+ "name": "市辖区",
+ "children": [
+ { "code": "120101", "name": "和平区" },
+ { "code": "120102", "name": "河东区" },
+ { "code": "120103", "name": "河西区" },
+ { "code": "120104", "name": "南开区" },
+ { "code": "120105", "name": "河北区" },
+ { "code": "120106", "name": "红桥区" },
+ { "code": "120110", "name": "东丽区" },
+ { "code": "120111", "name": "西青区" },
+ { "code": "120112", "name": "津南区" },
+ { "code": "120113", "name": "北辰区" },
+ { "code": "120114", "name": "武清区" },
+ { "code": "120115", "name": "宝坻区" },
+ { "code": "120116", "name": "滨海新区" },
+ { "code": "120117", "name": "宁河区" },
+ { "code": "120118", "name": "静海区" },
+ { "code": "120119", "name": "蓟州区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "13",
+ "name": "河北省",
+ "children": [
+ {
+ "code": "1301",
+ "name": "石家庄市",
+ "children": [
+ { "code": "130102", "name": "长安区" },
+ { "code": "130104", "name": "桥西区" },
+ { "code": "130105", "name": "新华区" },
+ { "code": "130107", "name": "井陉矿区" },
+ { "code": "130108", "name": "裕华区" },
+ { "code": "130109", "name": "藁城区" },
+ { "code": "130110", "name": "鹿泉区" },
+ { "code": "130111", "name": "栾城区" },
+ { "code": "130121", "name": "井陉县" },
+ { "code": "130123", "name": "正定县" },
+ { "code": "130125", "name": "行唐县" },
+ { "code": "130126", "name": "灵寿县" },
+ { "code": "130127", "name": "高邑县" },
+ { "code": "130128", "name": "深泽县" },
+ { "code": "130129", "name": "赞皇县" },
+ { "code": "130130", "name": "无极县" },
+ { "code": "130131", "name": "平山县" },
+ { "code": "130132", "name": "元氏县" },
+ { "code": "130133", "name": "赵县" },
+ { "code": "130171", "name": "石家庄高新技术产业开发区" },
+ { "code": "130172", "name": "石家庄循环化工园区" },
+ { "code": "130181", "name": "辛集市" },
+ { "code": "130183", "name": "晋州市" },
+ { "code": "130184", "name": "新乐市" }
+ ]
+ },
+ {
+ "code": "1302",
+ "name": "唐山市",
+ "children": [
+ { "code": "130202", "name": "路南区" },
+ { "code": "130203", "name": "路北区" },
+ { "code": "130204", "name": "古冶区" },
+ { "code": "130205", "name": "开平区" },
+ { "code": "130207", "name": "丰南区" },
+ { "code": "130208", "name": "丰润区" },
+ { "code": "130209", "name": "曹妃甸区" },
+ { "code": "130224", "name": "滦南县" },
+ { "code": "130225", "name": "乐亭县" },
+ { "code": "130227", "name": "迁西县" },
+ { "code": "130229", "name": "玉田县" },
+ { "code": "130271", "name": "河北唐山芦台经济开发区" },
+ { "code": "130272", "name": "唐山市汉沽管理区" },
+ { "code": "130273", "name": "唐山高新技术产业开发区" },
+ { "code": "130274", "name": "河北唐山海港经济开发区" },
+ { "code": "130281", "name": "遵化市" },
+ { "code": "130283", "name": "迁安市" },
+ { "code": "130284", "name": "滦州市" }
+ ]
+ },
+ {
+ "code": "1303",
+ "name": "秦皇岛市",
+ "children": [
+ { "code": "130302", "name": "海港区" },
+ { "code": "130303", "name": "山海关区" },
+ { "code": "130304", "name": "北戴河区" },
+ { "code": "130306", "name": "抚宁区" },
+ { "code": "130321", "name": "青龙满族自治县" },
+ { "code": "130322", "name": "昌黎县" },
+ { "code": "130324", "name": "卢龙县" },
+ { "code": "130371", "name": "秦皇岛市经济技术开发区" },
+ { "code": "130372", "name": "北戴河新区" }
+ ]
+ },
+ {
+ "code": "1304",
+ "name": "邯郸市",
+ "children": [
+ { "code": "130402", "name": "邯山区" },
+ { "code": "130403", "name": "丛台区" },
+ { "code": "130404", "name": "复兴区" },
+ { "code": "130406", "name": "峰峰矿区" },
+ { "code": "130407", "name": "肥乡区" },
+ { "code": "130408", "name": "永年区" },
+ { "code": "130423", "name": "临漳县" },
+ { "code": "130424", "name": "成安县" },
+ { "code": "130425", "name": "大名县" },
+ { "code": "130426", "name": "涉县" },
+ { "code": "130427", "name": "磁县" },
+ { "code": "130430", "name": "邱县" },
+ { "code": "130431", "name": "鸡泽县" },
+ { "code": "130432", "name": "广平县" },
+ { "code": "130433", "name": "馆陶县" },
+ { "code": "130434", "name": "魏县" },
+ { "code": "130435", "name": "曲周县" },
+ { "code": "130471", "name": "邯郸经济技术开发区" },
+ { "code": "130473", "name": "邯郸冀南新区" },
+ { "code": "130481", "name": "武安市" }
+ ]
+ },
+ {
+ "code": "1305",
+ "name": "邢台市",
+ "children": [
+ { "code": "130502", "name": "桥东区" },
+ { "code": "130503", "name": "桥西区" },
+ { "code": "130521", "name": "邢台县" },
+ { "code": "130522", "name": "临城县" },
+ { "code": "130523", "name": "内丘县" },
+ { "code": "130524", "name": "柏乡县" },
+ { "code": "130525", "name": "隆尧县" },
+ { "code": "130526", "name": "任县" },
+ { "code": "130527", "name": "南和县" },
+ { "code": "130528", "name": "宁晋县" },
+ { "code": "130529", "name": "巨鹿县" },
+ { "code": "130530", "name": "新河县" },
+ { "code": "130531", "name": "广宗县" },
+ { "code": "130532", "name": "平乡县" },
+ { "code": "130533", "name": "威县" },
+ { "code": "130534", "name": "清河县" },
+ { "code": "130535", "name": "临西县" },
+ { "code": "130571", "name": "河北邢台经济开发区" },
+ { "code": "130581", "name": "南宫市" },
+ { "code": "130582", "name": "沙河市" }
+ ]
+ },
+ {
+ "code": "1306",
+ "name": "保定市",
+ "children": [
+ { "code": "130602", "name": "竞秀区" },
+ { "code": "130606", "name": "莲池区" },
+ { "code": "130607", "name": "满城区" },
+ { "code": "130608", "name": "清苑区" },
+ { "code": "130609", "name": "徐水区" },
+ { "code": "130623", "name": "涞水县" },
+ { "code": "130624", "name": "阜平县" },
+ { "code": "130626", "name": "定兴县" },
+ { "code": "130627", "name": "唐县" },
+ { "code": "130628", "name": "高阳县" },
+ { "code": "130629", "name": "容城县" },
+ { "code": "130630", "name": "涞源县" },
+ { "code": "130631", "name": "望都县" },
+ { "code": "130632", "name": "安新县" },
+ { "code": "130633", "name": "易县" },
+ { "code": "130634", "name": "曲阳县" },
+ { "code": "130635", "name": "蠡县" },
+ { "code": "130636", "name": "顺平县" },
+ { "code": "130637", "name": "博野县" },
+ { "code": "130638", "name": "雄县" },
+ { "code": "130671", "name": "保定高新技术产业开发区" },
+ { "code": "130672", "name": "保定白沟新城" },
+ { "code": "130681", "name": "涿州市" },
+ { "code": "130682", "name": "定州市" },
+ { "code": "130683", "name": "安国市" },
+ { "code": "130684", "name": "高碑店市" }
+ ]
+ },
+ {
+ "code": "1307",
+ "name": "张家口市",
+ "children": [
+ { "code": "130702", "name": "桥东区" },
+ { "code": "130703", "name": "桥西区" },
+ { "code": "130705", "name": "宣化区" },
+ { "code": "130706", "name": "下花园区" },
+ { "code": "130708", "name": "万全区" },
+ { "code": "130709", "name": "崇礼区" },
+ { "code": "130722", "name": "张北县" },
+ { "code": "130723", "name": "康保县" },
+ { "code": "130724", "name": "沽源县" },
+ { "code": "130725", "name": "尚义县" },
+ { "code": "130726", "name": "蔚县" },
+ { "code": "130727", "name": "阳原县" },
+ { "code": "130728", "name": "怀安县" },
+ { "code": "130730", "name": "怀来县" },
+ { "code": "130731", "name": "涿鹿县" },
+ { "code": "130732", "name": "赤城县" },
+ { "code": "130771", "name": "张家口经济开发区" },
+ { "code": "130772", "name": "张家口市察北管理区" },
+ { "code": "130773", "name": "张家口市塞北管理区" }
+ ]
+ },
+ {
+ "code": "1308",
+ "name": "承德市",
+ "children": [
+ { "code": "130802", "name": "双桥区" },
+ { "code": "130803", "name": "双滦区" },
+ { "code": "130804", "name": "鹰手营子矿区" },
+ { "code": "130821", "name": "承德县" },
+ { "code": "130822", "name": "兴隆县" },
+ { "code": "130824", "name": "滦平县" },
+ { "code": "130825", "name": "隆化县" },
+ { "code": "130826", "name": "丰宁满族自治县" },
+ { "code": "130827", "name": "宽城满族自治县" },
+ { "code": "130828", "name": "围场满族蒙古族自治县" },
+ { "code": "130871", "name": "承德高新技术产业开发区" },
+ { "code": "130881", "name": "平泉市" }
+ ]
+ },
+ {
+ "code": "1309",
+ "name": "沧州市",
+ "children": [
+ { "code": "130902", "name": "新华区" },
+ { "code": "130903", "name": "运河区" },
+ { "code": "130921", "name": "沧县" },
+ { "code": "130922", "name": "青县" },
+ { "code": "130923", "name": "东光县" },
+ { "code": "130924", "name": "海兴县" },
+ { "code": "130925", "name": "盐山县" },
+ { "code": "130926", "name": "肃宁县" },
+ { "code": "130927", "name": "南皮县" },
+ { "code": "130928", "name": "吴桥县" },
+ { "code": "130929", "name": "献县" },
+ { "code": "130930", "name": "孟村回族自治县" },
+ { "code": "130971", "name": "河北沧州经济开发区" },
+ { "code": "130972", "name": "沧州高新技术产业开发区" },
+ { "code": "130973", "name": "沧州渤海新区" },
+ { "code": "130981", "name": "泊头市" },
+ { "code": "130982", "name": "任丘市" },
+ { "code": "130983", "name": "黄骅市" },
+ { "code": "130984", "name": "河间市" }
+ ]
+ },
+ {
+ "code": "1310",
+ "name": "廊坊市",
+ "children": [
+ { "code": "131002", "name": "安次区" },
+ { "code": "131003", "name": "广阳区" },
+ { "code": "131022", "name": "固安县" },
+ { "code": "131023", "name": "永清县" },
+ { "code": "131024", "name": "香河县" },
+ { "code": "131025", "name": "大城县" },
+ { "code": "131026", "name": "文安县" },
+ { "code": "131028", "name": "大厂回族自治县" },
+ { "code": "131071", "name": "廊坊经济技术开发区" },
+ { "code": "131081", "name": "霸州市" },
+ { "code": "131082", "name": "三河市" }
+ ]
+ },
+ {
+ "code": "1311",
+ "name": "衡水市",
+ "children": [
+ { "code": "131102", "name": "桃城区" },
+ { "code": "131103", "name": "冀州区" },
+ { "code": "131121", "name": "枣强县" },
+ { "code": "131122", "name": "武邑县" },
+ { "code": "131123", "name": "武强县" },
+ { "code": "131124", "name": "饶阳县" },
+ { "code": "131125", "name": "安平县" },
+ { "code": "131126", "name": "故城县" },
+ { "code": "131127", "name": "景县" },
+ { "code": "131128", "name": "阜城县" },
+ { "code": "131171", "name": "河北衡水高新技术产业开发区" },
+ { "code": "131172", "name": "衡水滨湖新区" },
+ { "code": "131182", "name": "深州市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "14",
+ "name": "山西省",
+ "children": [
+ {
+ "code": "1401",
+ "name": "太原市",
+ "children": [
+ { "code": "140105", "name": "小店区" },
+ { "code": "140106", "name": "迎泽区" },
+ { "code": "140107", "name": "杏花岭区" },
+ { "code": "140108", "name": "尖草坪区" },
+ { "code": "140109", "name": "万柏林区" },
+ { "code": "140110", "name": "晋源区" },
+ { "code": "140121", "name": "清徐县" },
+ { "code": "140122", "name": "阳曲县" },
+ { "code": "140123", "name": "娄烦县" },
+ { "code": "140171", "name": "山西转型综合改革示范区" },
+ { "code": "140181", "name": "古交市" }
+ ]
+ },
+ {
+ "code": "1402",
+ "name": "大同市",
+ "children": [
+ { "code": "140212", "name": "新荣区" },
+ { "code": "140213", "name": "平城区" },
+ { "code": "140214", "name": "云冈区" },
+ { "code": "140215", "name": "云州区" },
+ { "code": "140221", "name": "阳高县" },
+ { "code": "140222", "name": "天镇县" },
+ { "code": "140223", "name": "广灵县" },
+ { "code": "140224", "name": "灵丘县" },
+ { "code": "140225", "name": "浑源县" },
+ { "code": "140226", "name": "左云县" },
+ { "code": "140271", "name": "山西大同经济开发区" }
+ ]
+ },
+ {
+ "code": "1403",
+ "name": "阳泉市",
+ "children": [
+ { "code": "140302", "name": "城区" },
+ { "code": "140303", "name": "矿区" },
+ { "code": "140311", "name": "郊区" },
+ { "code": "140321", "name": "平定县" },
+ { "code": "140322", "name": "盂县" }
+ ]
+ },
+ {
+ "code": "1404",
+ "name": "长治市",
+ "children": [
+ { "code": "140403", "name": "潞州区" },
+ { "code": "140404", "name": "上党区" },
+ { "code": "140405", "name": "屯留区" },
+ { "code": "140406", "name": "潞城区" },
+ { "code": "140423", "name": "襄垣县" },
+ { "code": "140425", "name": "平顺县" },
+ { "code": "140426", "name": "黎城县" },
+ { "code": "140427", "name": "壶关县" },
+ { "code": "140428", "name": "长子县" },
+ { "code": "140429", "name": "武乡县" },
+ { "code": "140430", "name": "沁县" },
+ { "code": "140431", "name": "沁源县" },
+ { "code": "140471", "name": "山西长治高新技术产业园区" }
+ ]
+ },
+ {
+ "code": "1405",
+ "name": "晋城市",
+ "children": [
+ { "code": "140502", "name": "城区" },
+ { "code": "140521", "name": "沁水县" },
+ { "code": "140522", "name": "阳城县" },
+ { "code": "140524", "name": "陵川县" },
+ { "code": "140525", "name": "泽州县" },
+ { "code": "140581", "name": "高平市" }
+ ]
+ },
+ {
+ "code": "1406",
+ "name": "朔州市",
+ "children": [
+ { "code": "140602", "name": "朔城区" },
+ { "code": "140603", "name": "平鲁区" },
+ { "code": "140621", "name": "山阴县" },
+ { "code": "140622", "name": "应县" },
+ { "code": "140623", "name": "右玉县" },
+ { "code": "140671", "name": "山西朔州经济开发区" },
+ { "code": "140681", "name": "怀仁市" }
+ ]
+ },
+ {
+ "code": "1407",
+ "name": "晋中市",
+ "children": [
+ { "code": "140702", "name": "榆次区" },
+ { "code": "140721", "name": "榆社县" },
+ { "code": "140722", "name": "左权县" },
+ { "code": "140723", "name": "和顺县" },
+ { "code": "140724", "name": "昔阳县" },
+ { "code": "140725", "name": "寿阳县" },
+ { "code": "140726", "name": "太谷县" },
+ { "code": "140727", "name": "祁县" },
+ { "code": "140728", "name": "平遥县" },
+ { "code": "140729", "name": "灵石县" },
+ { "code": "140781", "name": "介休市" }
+ ]
+ },
+ {
+ "code": "1408",
+ "name": "运城市",
+ "children": [
+ { "code": "140802", "name": "盐湖区" },
+ { "code": "140821", "name": "临猗县" },
+ { "code": "140822", "name": "万荣县" },
+ { "code": "140823", "name": "闻喜县" },
+ { "code": "140824", "name": "稷山县" },
+ { "code": "140825", "name": "新绛县" },
+ { "code": "140826", "name": "绛县" },
+ { "code": "140827", "name": "垣曲县" },
+ { "code": "140828", "name": "夏县" },
+ { "code": "140829", "name": "平陆县" },
+ { "code": "140830", "name": "芮城县" },
+ { "code": "140881", "name": "永济市" },
+ { "code": "140882", "name": "河津市" }
+ ]
+ },
+ {
+ "code": "1409",
+ "name": "忻州市",
+ "children": [
+ { "code": "140902", "name": "忻府区" },
+ { "code": "140921", "name": "定襄县" },
+ { "code": "140922", "name": "五台县" },
+ { "code": "140923", "name": "代县" },
+ { "code": "140924", "name": "繁峙县" },
+ { "code": "140925", "name": "宁武县" },
+ { "code": "140926", "name": "静乐县" },
+ { "code": "140927", "name": "神池县" },
+ { "code": "140928", "name": "五寨县" },
+ { "code": "140929", "name": "岢岚县" },
+ { "code": "140930", "name": "河曲县" },
+ { "code": "140931", "name": "保德县" },
+ { "code": "140932", "name": "偏关县" },
+ { "code": "140971", "name": "五台山风景名胜区" },
+ { "code": "140981", "name": "原平市" }
+ ]
+ },
+ {
+ "code": "1410",
+ "name": "临汾市",
+ "children": [
+ { "code": "141002", "name": "尧都区" },
+ { "code": "141021", "name": "曲沃县" },
+ { "code": "141022", "name": "翼城县" },
+ { "code": "141023", "name": "襄汾县" },
+ { "code": "141024", "name": "洪洞县" },
+ { "code": "141025", "name": "古县" },
+ { "code": "141026", "name": "安泽县" },
+ { "code": "141027", "name": "浮山县" },
+ { "code": "141028", "name": "吉县" },
+ { "code": "141029", "name": "乡宁县" },
+ { "code": "141030", "name": "大宁县" },
+ { "code": "141031", "name": "隰县" },
+ { "code": "141032", "name": "永和县" },
+ { "code": "141033", "name": "蒲县" },
+ { "code": "141034", "name": "汾西县" },
+ { "code": "141081", "name": "侯马市" },
+ { "code": "141082", "name": "霍州市" }
+ ]
+ },
+ {
+ "code": "1411",
+ "name": "吕梁市",
+ "children": [
+ { "code": "141102", "name": "离石区" },
+ { "code": "141121", "name": "文水县" },
+ { "code": "141122", "name": "交城县" },
+ { "code": "141123", "name": "兴县" },
+ { "code": "141124", "name": "临县" },
+ { "code": "141125", "name": "柳林县" },
+ { "code": "141126", "name": "石楼县" },
+ { "code": "141127", "name": "岚县" },
+ { "code": "141128", "name": "方山县" },
+ { "code": "141129", "name": "中阳县" },
+ { "code": "141130", "name": "交口县" },
+ { "code": "141181", "name": "孝义市" },
+ { "code": "141182", "name": "汾阳市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "15",
+ "name": "内蒙古自治区",
+ "children": [
+ {
+ "code": "1501",
+ "name": "呼和浩特市",
+ "children": [
+ { "code": "150102", "name": "新城区" },
+ { "code": "150103", "name": "回民区" },
+ { "code": "150104", "name": "玉泉区" },
+ { "code": "150105", "name": "赛罕区" },
+ { "code": "150121", "name": "土默特左旗" },
+ { "code": "150122", "name": "托克托县" },
+ { "code": "150123", "name": "和林格尔县" },
+ { "code": "150124", "name": "清水河县" },
+ { "code": "150125", "name": "武川县" },
+ { "code": "150171", "name": "呼和浩特金海工业园区" },
+ { "code": "150172", "name": "呼和浩特经济技术开发区" }
+ ]
+ },
+ {
+ "code": "1502",
+ "name": "包头市",
+ "children": [
+ { "code": "150202", "name": "东河区" },
+ { "code": "150203", "name": "昆都仑区" },
+ { "code": "150204", "name": "青山区" },
+ { "code": "150205", "name": "石拐区" },
+ { "code": "150206", "name": "白云鄂博矿区" },
+ { "code": "150207", "name": "九原区" },
+ { "code": "150221", "name": "土默特右旗" },
+ { "code": "150222", "name": "固阳县" },
+ { "code": "150223", "name": "达尔罕茂明安联合旗" },
+ { "code": "150271", "name": "包头稀土高新技术产业开发区" }
+ ]
+ },
+ {
+ "code": "1503",
+ "name": "乌海市",
+ "children": [
+ { "code": "150302", "name": "海勃湾区" },
+ { "code": "150303", "name": "海南区" },
+ { "code": "150304", "name": "乌达区" }
+ ]
+ },
+ {
+ "code": "1504",
+ "name": "赤峰市",
+ "children": [
+ { "code": "150402", "name": "红山区" },
+ { "code": "150403", "name": "元宝山区" },
+ { "code": "150404", "name": "松山区" },
+ { "code": "150421", "name": "阿鲁科尔沁旗" },
+ { "code": "150422", "name": "巴林左旗" },
+ { "code": "150423", "name": "巴林右旗" },
+ { "code": "150424", "name": "林西县" },
+ { "code": "150425", "name": "克什克腾旗" },
+ { "code": "150426", "name": "翁牛特旗" },
+ { "code": "150428", "name": "喀喇沁旗" },
+ { "code": "150429", "name": "宁城县" },
+ { "code": "150430", "name": "敖汉旗" }
+ ]
+ },
+ {
+ "code": "1505",
+ "name": "通辽市",
+ "children": [
+ { "code": "150502", "name": "科尔沁区" },
+ { "code": "150521", "name": "科尔沁左翼中旗" },
+ { "code": "150522", "name": "科尔沁左翼后旗" },
+ { "code": "150523", "name": "开鲁县" },
+ { "code": "150524", "name": "库伦旗" },
+ { "code": "150525", "name": "奈曼旗" },
+ { "code": "150526", "name": "扎鲁特旗" },
+ { "code": "150571", "name": "通辽经济技术开发区" },
+ { "code": "150581", "name": "霍林郭勒市" }
+ ]
+ },
+ {
+ "code": "1506",
+ "name": "鄂尔多斯市",
+ "children": [
+ { "code": "150602", "name": "东胜区" },
+ { "code": "150603", "name": "康巴什区" },
+ { "code": "150621", "name": "达拉特旗" },
+ { "code": "150622", "name": "准格尔旗" },
+ { "code": "150623", "name": "鄂托克前旗" },
+ { "code": "150624", "name": "鄂托克旗" },
+ { "code": "150625", "name": "杭锦旗" },
+ { "code": "150626", "name": "乌审旗" },
+ { "code": "150627", "name": "伊金霍洛旗" }
+ ]
+ },
+ {
+ "code": "1507",
+ "name": "呼伦贝尔市",
+ "children": [
+ { "code": "150702", "name": "海拉尔区" },
+ { "code": "150703", "name": "扎赉诺尔区" },
+ { "code": "150721", "name": "阿荣旗" },
+ { "code": "150722", "name": "莫力达瓦达斡尔族自治旗" },
+ { "code": "150723", "name": "鄂伦春自治旗" },
+ { "code": "150724", "name": "鄂温克族自治旗" },
+ { "code": "150725", "name": "陈巴尔虎旗" },
+ { "code": "150726", "name": "新巴尔虎左旗" },
+ { "code": "150727", "name": "新巴尔虎右旗" },
+ { "code": "150781", "name": "满洲里市" },
+ { "code": "150782", "name": "牙克石市" },
+ { "code": "150783", "name": "扎兰屯市" },
+ { "code": "150784", "name": "额尔古纳市" },
+ { "code": "150785", "name": "根河市" }
+ ]
+ },
+ {
+ "code": "1508",
+ "name": "巴彦淖尔市",
+ "children": [
+ { "code": "150802", "name": "临河区" },
+ { "code": "150821", "name": "五原县" },
+ { "code": "150822", "name": "磴口县" },
+ { "code": "150823", "name": "乌拉特前旗" },
+ { "code": "150824", "name": "乌拉特中旗" },
+ { "code": "150825", "name": "乌拉特后旗" },
+ { "code": "150826", "name": "杭锦后旗" }
+ ]
+ },
+ {
+ "code": "1509",
+ "name": "乌兰察布市",
+ "children": [
+ { "code": "150902", "name": "集宁区" },
+ { "code": "150921", "name": "卓资县" },
+ { "code": "150922", "name": "化德县" },
+ { "code": "150923", "name": "商都县" },
+ { "code": "150924", "name": "兴和县" },
+ { "code": "150925", "name": "凉城县" },
+ { "code": "150926", "name": "察哈尔右翼前旗" },
+ { "code": "150927", "name": "察哈尔右翼中旗" },
+ { "code": "150928", "name": "察哈尔右翼后旗" },
+ { "code": "150929", "name": "四子王旗" },
+ { "code": "150981", "name": "丰镇市" }
+ ]
+ },
+ {
+ "code": "1522",
+ "name": "兴安盟",
+ "children": [
+ { "code": "152201", "name": "乌兰浩特市" },
+ { "code": "152202", "name": "阿尔山市" },
+ { "code": "152221", "name": "科尔沁右翼前旗" },
+ { "code": "152222", "name": "科尔沁右翼中旗" },
+ { "code": "152223", "name": "扎赉特旗" },
+ { "code": "152224", "name": "突泉县" }
+ ]
+ },
+ {
+ "code": "1525",
+ "name": "锡林郭勒盟",
+ "children": [
+ { "code": "152501", "name": "二连浩特市" },
+ { "code": "152502", "name": "锡林浩特市" },
+ { "code": "152522", "name": "阿巴嘎旗" },
+ { "code": "152523", "name": "苏尼特左旗" },
+ { "code": "152524", "name": "苏尼特右旗" },
+ { "code": "152525", "name": "东乌珠穆沁旗" },
+ { "code": "152526", "name": "西乌珠穆沁旗" },
+ { "code": "152527", "name": "太仆寺旗" },
+ { "code": "152528", "name": "镶黄旗" },
+ { "code": "152529", "name": "正镶白旗" },
+ { "code": "152530", "name": "正蓝旗" },
+ { "code": "152531", "name": "多伦县" },
+ { "code": "152571", "name": "乌拉盖管委会" }
+ ]
+ },
+ {
+ "code": "1529",
+ "name": "阿拉善盟",
+ "children": [
+ { "code": "152921", "name": "阿拉善左旗" },
+ { "code": "152922", "name": "阿拉善右旗" },
+ { "code": "152923", "name": "额济纳旗" },
+ { "code": "152971", "name": "内蒙古阿拉善经济开发区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "21",
+ "name": "辽宁省",
+ "children": [
+ {
+ "code": "2101",
+ "name": "沈阳市",
+ "children": [
+ { "code": "210102", "name": "和平区" },
+ { "code": "210103", "name": "沈河区" },
+ { "code": "210104", "name": "大东区" },
+ { "code": "210105", "name": "皇姑区" },
+ { "code": "210106", "name": "铁西区" },
+ { "code": "210111", "name": "苏家屯区" },
+ { "code": "210112", "name": "浑南区" },
+ { "code": "210113", "name": "沈北新区" },
+ { "code": "210114", "name": "于洪区" },
+ { "code": "210115", "name": "辽中区" },
+ { "code": "210123", "name": "康平县" },
+ { "code": "210124", "name": "法库县" },
+ { "code": "210181", "name": "新民市" }
+ ]
+ },
+ {
+ "code": "2102",
+ "name": "大连市",
+ "children": [
+ { "code": "210202", "name": "中山区" },
+ { "code": "210203", "name": "西岗区" },
+ { "code": "210204", "name": "沙河口区" },
+ { "code": "210211", "name": "甘井子区" },
+ { "code": "210212", "name": "旅顺口区" },
+ { "code": "210213", "name": "金州区" },
+ { "code": "210214", "name": "普兰店区" },
+ { "code": "210224", "name": "长海县" },
+ { "code": "210281", "name": "瓦房店市" },
+ { "code": "210283", "name": "庄河市" }
+ ]
+ },
+ {
+ "code": "2103",
+ "name": "鞍山市",
+ "children": [
+ { "code": "210302", "name": "铁东区" },
+ { "code": "210303", "name": "铁西区" },
+ { "code": "210304", "name": "立山区" },
+ { "code": "210311", "name": "千山区" },
+ { "code": "210321", "name": "台安县" },
+ { "code": "210323", "name": "岫岩满族自治县" },
+ { "code": "210381", "name": "海城市" }
+ ]
+ },
+ {
+ "code": "2104",
+ "name": "抚顺市",
+ "children": [
+ { "code": "210402", "name": "新抚区" },
+ { "code": "210403", "name": "东洲区" },
+ { "code": "210404", "name": "望花区" },
+ { "code": "210411", "name": "顺城区" },
+ { "code": "210421", "name": "抚顺县" },
+ { "code": "210422", "name": "新宾满族自治县" },
+ { "code": "210423", "name": "清原满族自治县" }
+ ]
+ },
+ {
+ "code": "2105",
+ "name": "本溪市",
+ "children": [
+ { "code": "210502", "name": "平山区" },
+ { "code": "210503", "name": "溪湖区" },
+ { "code": "210504", "name": "明山区" },
+ { "code": "210505", "name": "南芬区" },
+ { "code": "210521", "name": "本溪满族自治县" },
+ { "code": "210522", "name": "桓仁满族自治县" }
+ ]
+ },
+ {
+ "code": "2106",
+ "name": "丹东市",
+ "children": [
+ { "code": "210602", "name": "元宝区" },
+ { "code": "210603", "name": "振兴区" },
+ { "code": "210604", "name": "振安区" },
+ { "code": "210624", "name": "宽甸满族自治县" },
+ { "code": "210681", "name": "东港市" },
+ { "code": "210682", "name": "凤城市" }
+ ]
+ },
+ {
+ "code": "2107",
+ "name": "锦州市",
+ "children": [
+ { "code": "210702", "name": "古塔区" },
+ { "code": "210703", "name": "凌河区" },
+ { "code": "210711", "name": "太和区" },
+ { "code": "210726", "name": "黑山县" },
+ { "code": "210727", "name": "义县" },
+ { "code": "210781", "name": "凌海市" },
+ { "code": "210782", "name": "北镇市" }
+ ]
+ },
+ {
+ "code": "2108",
+ "name": "营口市",
+ "children": [
+ { "code": "210802", "name": "站前区" },
+ { "code": "210803", "name": "西市区" },
+ { "code": "210804", "name": "鲅鱼圈区" },
+ { "code": "210811", "name": "老边区" },
+ { "code": "210881", "name": "盖州市" },
+ { "code": "210882", "name": "大石桥市" }
+ ]
+ },
+ {
+ "code": "2109",
+ "name": "阜新市",
+ "children": [
+ { "code": "210902", "name": "海州区" },
+ { "code": "210903", "name": "新邱区" },
+ { "code": "210904", "name": "太平区" },
+ { "code": "210905", "name": "清河门区" },
+ { "code": "210911", "name": "细河区" },
+ { "code": "210921", "name": "阜新蒙古族自治县" },
+ { "code": "210922", "name": "彰武县" }
+ ]
+ },
+ {
+ "code": "2110",
+ "name": "辽阳市",
+ "children": [
+ { "code": "211002", "name": "白塔区" },
+ { "code": "211003", "name": "文圣区" },
+ { "code": "211004", "name": "宏伟区" },
+ { "code": "211005", "name": "弓长岭区" },
+ { "code": "211011", "name": "太子河区" },
+ { "code": "211021", "name": "辽阳县" },
+ { "code": "211081", "name": "灯塔市" }
+ ]
+ },
+ {
+ "code": "2111",
+ "name": "盘锦市",
+ "children": [
+ { "code": "211102", "name": "双台子区" },
+ { "code": "211103", "name": "兴隆台区" },
+ { "code": "211104", "name": "大洼区" },
+ { "code": "211122", "name": "盘山县" }
+ ]
+ },
+ {
+ "code": "2112",
+ "name": "铁岭市",
+ "children": [
+ { "code": "211202", "name": "银州区" },
+ { "code": "211204", "name": "清河区" },
+ { "code": "211221", "name": "铁岭县" },
+ { "code": "211223", "name": "西丰县" },
+ { "code": "211224", "name": "昌图县" },
+ { "code": "211281", "name": "调兵山市" },
+ { "code": "211282", "name": "开原市" }
+ ]
+ },
+ {
+ "code": "2113",
+ "name": "朝阳市",
+ "children": [
+ { "code": "211302", "name": "双塔区" },
+ { "code": "211303", "name": "龙城区" },
+ { "code": "211321", "name": "朝阳县" },
+ { "code": "211322", "name": "建平县" },
+ { "code": "211324", "name": "喀喇沁左翼蒙古族自治县" },
+ { "code": "211381", "name": "北票市" },
+ { "code": "211382", "name": "凌源市" }
+ ]
+ },
+ {
+ "code": "2114",
+ "name": "葫芦岛市",
+ "children": [
+ { "code": "211402", "name": "连山区" },
+ { "code": "211403", "name": "龙港区" },
+ { "code": "211404", "name": "南票区" },
+ { "code": "211421", "name": "绥中县" },
+ { "code": "211422", "name": "建昌县" },
+ { "code": "211481", "name": "兴城市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "22",
+ "name": "吉林省",
+ "children": [
+ {
+ "code": "2201",
+ "name": "长春市",
+ "children": [
+ { "code": "220102", "name": "南关区" },
+ { "code": "220103", "name": "宽城区" },
+ { "code": "220104", "name": "朝阳区" },
+ { "code": "220105", "name": "二道区" },
+ { "code": "220106", "name": "绿园区" },
+ { "code": "220112", "name": "双阳区" },
+ { "code": "220113", "name": "九台区" },
+ { "code": "220122", "name": "农安县" },
+ { "code": "220171", "name": "长春经济技术开发区" },
+ { "code": "220172", "name": "长春净月高新技术产业开发区" },
+ { "code": "220173", "name": "长春高新技术产业开发区" },
+ { "code": "220174", "name": "长春汽车经济技术开发区" },
+ { "code": "220182", "name": "榆树市" },
+ { "code": "220183", "name": "德惠市" }
+ ]
+ },
+ {
+ "code": "2202",
+ "name": "吉林市",
+ "children": [
+ { "code": "220202", "name": "昌邑区" },
+ { "code": "220203", "name": "龙潭区" },
+ { "code": "220204", "name": "船营区" },
+ { "code": "220211", "name": "丰满区" },
+ { "code": "220221", "name": "永吉县" },
+ { "code": "220271", "name": "吉林经济开发区" },
+ { "code": "220272", "name": "吉林高新技术产业开发区" },
+ { "code": "220273", "name": "吉林中国新加坡食品区" },
+ { "code": "220281", "name": "蛟河市" },
+ { "code": "220282", "name": "桦甸市" },
+ { "code": "220283", "name": "舒兰市" },
+ { "code": "220284", "name": "磐石市" }
+ ]
+ },
+ {
+ "code": "2203",
+ "name": "四平市",
+ "children": [
+ { "code": "220302", "name": "铁西区" },
+ { "code": "220303", "name": "铁东区" },
+ { "code": "220322", "name": "梨树县" },
+ { "code": "220323", "name": "伊通满族自治县" },
+ { "code": "220381", "name": "公主岭市" },
+ { "code": "220382", "name": "双辽市" }
+ ]
+ },
+ {
+ "code": "2204",
+ "name": "辽源市",
+ "children": [
+ { "code": "220402", "name": "龙山区" },
+ { "code": "220403", "name": "西安区" },
+ { "code": "220421", "name": "东丰县" },
+ { "code": "220422", "name": "东辽县" }
+ ]
+ },
+ {
+ "code": "2205",
+ "name": "通化市",
+ "children": [
+ { "code": "220502", "name": "东昌区" },
+ { "code": "220503", "name": "二道江区" },
+ { "code": "220521", "name": "通化县" },
+ { "code": "220523", "name": "辉南县" },
+ { "code": "220524", "name": "柳河县" },
+ { "code": "220581", "name": "梅河口市" },
+ { "code": "220582", "name": "集安市" }
+ ]
+ },
+ {
+ "code": "2206",
+ "name": "白山市",
+ "children": [
+ { "code": "220602", "name": "浑江区" },
+ { "code": "220605", "name": "江源区" },
+ { "code": "220621", "name": "抚松县" },
+ { "code": "220622", "name": "靖宇县" },
+ { "code": "220623", "name": "长白朝鲜族自治县" },
+ { "code": "220681", "name": "临江市" }
+ ]
+ },
+ {
+ "code": "2207",
+ "name": "松原市",
+ "children": [
+ { "code": "220702", "name": "宁江区" },
+ { "code": "220721", "name": "前郭尔罗斯蒙古族自治县" },
+ { "code": "220722", "name": "长岭县" },
+ { "code": "220723", "name": "乾安县" },
+ { "code": "220771", "name": "吉林松原经济开发区" },
+ { "code": "220781", "name": "扶余市" }
+ ]
+ },
+ {
+ "code": "2208",
+ "name": "白城市",
+ "children": [
+ { "code": "220802", "name": "洮北区" },
+ { "code": "220821", "name": "镇赉县" },
+ { "code": "220822", "name": "通榆县" },
+ { "code": "220871", "name": "吉林白城经济开发区" },
+ { "code": "220881", "name": "洮南市" },
+ { "code": "220882", "name": "大安市" }
+ ]
+ },
+ {
+ "code": "2224",
+ "name": "延边朝鲜族自治州",
+ "children": [
+ { "code": "222401", "name": "延吉市" },
+ { "code": "222402", "name": "图们市" },
+ { "code": "222403", "name": "敦化市" },
+ { "code": "222404", "name": "珲春市" },
+ { "code": "222405", "name": "龙井市" },
+ { "code": "222406", "name": "和龙市" },
+ { "code": "222424", "name": "汪清县" },
+ { "code": "222426", "name": "安图县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "23",
+ "name": "黑龙江省",
+ "children": [
+ {
+ "code": "2301",
+ "name": "哈尔滨市",
+ "children": [
+ { "code": "230102", "name": "道里区" },
+ { "code": "230103", "name": "南岗区" },
+ { "code": "230104", "name": "道外区" },
+ { "code": "230108", "name": "平房区" },
+ { "code": "230109", "name": "松北区" },
+ { "code": "230110", "name": "香坊区" },
+ { "code": "230111", "name": "呼兰区" },
+ { "code": "230112", "name": "阿城区" },
+ { "code": "230113", "name": "双城区" },
+ { "code": "230123", "name": "依兰县" },
+ { "code": "230124", "name": "方正县" },
+ { "code": "230125", "name": "宾县" },
+ { "code": "230126", "name": "巴彦县" },
+ { "code": "230127", "name": "木兰县" },
+ { "code": "230128", "name": "通河县" },
+ { "code": "230129", "name": "延寿县" },
+ { "code": "230183", "name": "尚志市" },
+ { "code": "230184", "name": "五常市" }
+ ]
+ },
+ {
+ "code": "2302",
+ "name": "齐齐哈尔市",
+ "children": [
+ { "code": "230202", "name": "龙沙区" },
+ { "code": "230203", "name": "建华区" },
+ { "code": "230204", "name": "铁锋区" },
+ { "code": "230205", "name": "昂昂溪区" },
+ { "code": "230206", "name": "富拉尔基区" },
+ { "code": "230207", "name": "碾子山区" },
+ { "code": "230208", "name": "梅里斯达斡尔族区" },
+ { "code": "230221", "name": "龙江县" },
+ { "code": "230223", "name": "依安县" },
+ { "code": "230224", "name": "泰来县" },
+ { "code": "230225", "name": "甘南县" },
+ { "code": "230227", "name": "富裕县" },
+ { "code": "230229", "name": "克山县" },
+ { "code": "230230", "name": "克东县" },
+ { "code": "230231", "name": "拜泉县" },
+ { "code": "230281", "name": "讷河市" }
+ ]
+ },
+ {
+ "code": "2303",
+ "name": "鸡西市",
+ "children": [
+ { "code": "230302", "name": "鸡冠区" },
+ { "code": "230303", "name": "恒山区" },
+ { "code": "230304", "name": "滴道区" },
+ { "code": "230305", "name": "梨树区" },
+ { "code": "230306", "name": "城子河区" },
+ { "code": "230307", "name": "麻山区" },
+ { "code": "230321", "name": "鸡东县" },
+ { "code": "230381", "name": "虎林市" },
+ { "code": "230382", "name": "密山市" }
+ ]
+ },
+ {
+ "code": "2304",
+ "name": "鹤岗市",
+ "children": [
+ { "code": "230402", "name": "向阳区" },
+ { "code": "230403", "name": "工农区" },
+ { "code": "230404", "name": "南山区" },
+ { "code": "230405", "name": "兴安区" },
+ { "code": "230406", "name": "东山区" },
+ { "code": "230407", "name": "兴山区" },
+ { "code": "230421", "name": "萝北县" },
+ { "code": "230422", "name": "绥滨县" }
+ ]
+ },
+ {
+ "code": "2305",
+ "name": "双鸭山市",
+ "children": [
+ { "code": "230502", "name": "尖山区" },
+ { "code": "230503", "name": "岭东区" },
+ { "code": "230505", "name": "四方台区" },
+ { "code": "230506", "name": "宝山区" },
+ { "code": "230521", "name": "集贤县" },
+ { "code": "230522", "name": "友谊县" },
+ { "code": "230523", "name": "宝清县" },
+ { "code": "230524", "name": "饶河县" }
+ ]
+ },
+ {
+ "code": "2306",
+ "name": "大庆市",
+ "children": [
+ { "code": "230602", "name": "萨尔图区" },
+ { "code": "230603", "name": "龙凤区" },
+ { "code": "230604", "name": "让胡路区" },
+ { "code": "230605", "name": "红岗区" },
+ { "code": "230606", "name": "大同区" },
+ { "code": "230621", "name": "肇州县" },
+ { "code": "230622", "name": "肇源县" },
+ { "code": "230623", "name": "林甸县" },
+ { "code": "230624", "name": "杜尔伯特蒙古族自治县" },
+ { "code": "230671", "name": "大庆高新技术产业开发区" }
+ ]
+ },
+ {
+ "code": "2307",
+ "name": "伊春市",
+ "children": [
+ { "code": "230717", "name": "伊美区" },
+ { "code": "230718", "name": "乌翠区" },
+ { "code": "230719", "name": "友好区" },
+ { "code": "230722", "name": "嘉荫县" },
+ { "code": "230723", "name": "汤旺县" },
+ { "code": "230724", "name": "丰林县" },
+ { "code": "230725", "name": "大箐山县" },
+ { "code": "230726", "name": "南岔县" },
+ { "code": "230751", "name": "金林区" },
+ { "code": "230781", "name": "铁力市" }
+ ]
+ },
+ {
+ "code": "2308",
+ "name": "佳木斯市",
+ "children": [
+ { "code": "230803", "name": "向阳区" },
+ { "code": "230804", "name": "前进区" },
+ { "code": "230805", "name": "东风区" },
+ { "code": "230811", "name": "郊区" },
+ { "code": "230822", "name": "桦南县" },
+ { "code": "230826", "name": "桦川县" },
+ { "code": "230828", "name": "汤原县" },
+ { "code": "230881", "name": "同江市" },
+ { "code": "230882", "name": "富锦市" },
+ { "code": "230883", "name": "抚远市" }
+ ]
+ },
+ {
+ "code": "2309",
+ "name": "七台河市",
+ "children": [
+ { "code": "230902", "name": "新兴区" },
+ { "code": "230903", "name": "桃山区" },
+ { "code": "230904", "name": "茄子河区" },
+ { "code": "230921", "name": "勃利县" }
+ ]
+ },
+ {
+ "code": "2310",
+ "name": "牡丹江市",
+ "children": [
+ { "code": "231002", "name": "东安区" },
+ { "code": "231003", "name": "阳明区" },
+ { "code": "231004", "name": "爱民区" },
+ { "code": "231005", "name": "西安区" },
+ { "code": "231025", "name": "林口县" },
+ { "code": "231071", "name": "牡丹江经济技术开发区" },
+ { "code": "231081", "name": "绥芬河市" },
+ { "code": "231083", "name": "海林市" },
+ { "code": "231084", "name": "宁安市" },
+ { "code": "231085", "name": "穆棱市" },
+ { "code": "231086", "name": "东宁市" }
+ ]
+ },
+ {
+ "code": "2311",
+ "name": "黑河市",
+ "children": [
+ { "code": "231102", "name": "爱辉区" },
+ { "code": "231123", "name": "逊克县" },
+ { "code": "231124", "name": "孙吴县" },
+ { "code": "231181", "name": "北安市" },
+ { "code": "231182", "name": "五大连池市" },
+ { "code": "231183", "name": "嫩江市" }
+ ]
+ },
+ {
+ "code": "2312",
+ "name": "绥化市",
+ "children": [
+ { "code": "231202", "name": "北林区" },
+ { "code": "231221", "name": "望奎县" },
+ { "code": "231222", "name": "兰西县" },
+ { "code": "231223", "name": "青冈县" },
+ { "code": "231224", "name": "庆安县" },
+ { "code": "231225", "name": "明水县" },
+ { "code": "231226", "name": "绥棱县" },
+ { "code": "231281", "name": "安达市" },
+ { "code": "231282", "name": "肇东市" },
+ { "code": "231283", "name": "海伦市" }
+ ]
+ },
+ {
+ "code": "2327",
+ "name": "大兴安岭地区",
+ "children": [
+ { "code": "232701", "name": "漠河市" },
+ { "code": "232721", "name": "呼玛县" },
+ { "code": "232722", "name": "塔河县" },
+ { "code": "232761", "name": "加格达奇区" },
+ { "code": "232762", "name": "松岭区" },
+ { "code": "232763", "name": "新林区" },
+ { "code": "232764", "name": "呼中区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "31",
+ "name": "上海市",
+ "children": [
+ {
+ "code": "3101",
+ "name": "市辖区",
+ "children": [
+ { "code": "310101", "name": "黄浦区" },
+ { "code": "310104", "name": "徐汇区" },
+ { "code": "310105", "name": "长宁区" },
+ { "code": "310106", "name": "静安区" },
+ { "code": "310107", "name": "普陀区" },
+ { "code": "310109", "name": "虹口区" },
+ { "code": "310110", "name": "杨浦区" },
+ { "code": "310112", "name": "闵行区" },
+ { "code": "310113", "name": "宝山区" },
+ { "code": "310114", "name": "嘉定区" },
+ { "code": "310115", "name": "浦东新区" },
+ { "code": "310116", "name": "金山区" },
+ { "code": "310117", "name": "松江区" },
+ { "code": "310118", "name": "青浦区" },
+ { "code": "310120", "name": "奉贤区" },
+ { "code": "310151", "name": "崇明区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "32",
+ "name": "江苏省",
+ "children": [
+ {
+ "code": "3201",
+ "name": "南京市",
+ "children": [
+ { "code": "320102", "name": "玄武区" },
+ { "code": "320104", "name": "秦淮区" },
+ { "code": "320105", "name": "建邺区" },
+ { "code": "320106", "name": "鼓楼区" },
+ { "code": "320111", "name": "浦口区" },
+ { "code": "320113", "name": "栖霞区" },
+ { "code": "320114", "name": "雨花台区" },
+ { "code": "320115", "name": "江宁区" },
+ { "code": "320116", "name": "六合区" },
+ { "code": "320117", "name": "溧水区" },
+ { "code": "320118", "name": "高淳区" }
+ ]
+ },
+ {
+ "code": "3202",
+ "name": "无锡市",
+ "children": [
+ { "code": "320205", "name": "锡山区" },
+ { "code": "320206", "name": "惠山区" },
+ { "code": "320211", "name": "滨湖区" },
+ { "code": "320213", "name": "梁溪区" },
+ { "code": "320214", "name": "新吴区" },
+ { "code": "320281", "name": "江阴市" },
+ { "code": "320282", "name": "宜兴市" }
+ ]
+ },
+ {
+ "code": "3203",
+ "name": "徐州市",
+ "children": [
+ { "code": "320302", "name": "鼓楼区" },
+ { "code": "320303", "name": "云龙区" },
+ { "code": "320305", "name": "贾汪区" },
+ { "code": "320311", "name": "泉山区" },
+ { "code": "320312", "name": "铜山区" },
+ { "code": "320321", "name": "丰县" },
+ { "code": "320322", "name": "沛县" },
+ { "code": "320324", "name": "睢宁县" },
+ { "code": "320371", "name": "徐州经济技术开发区" },
+ { "code": "320381", "name": "新沂市" },
+ { "code": "320382", "name": "邳州市" }
+ ]
+ },
+ {
+ "code": "3204",
+ "name": "常州市",
+ "children": [
+ { "code": "320402", "name": "天宁区" },
+ { "code": "320404", "name": "钟楼区" },
+ { "code": "320411", "name": "新北区" },
+ { "code": "320412", "name": "武进区" },
+ { "code": "320413", "name": "金坛区" },
+ { "code": "320481", "name": "溧阳市" }
+ ]
+ },
+ {
+ "code": "3205",
+ "name": "苏州市",
+ "children": [
+ { "code": "320505", "name": "虎丘区" },
+ { "code": "320506", "name": "吴中区" },
+ { "code": "320507", "name": "相城区" },
+ { "code": "320508", "name": "姑苏区" },
+ { "code": "320509", "name": "吴江区" },
+ { "code": "320571", "name": "苏州工业园区" },
+ { "code": "320581", "name": "常熟市" },
+ { "code": "320582", "name": "张家港市" },
+ { "code": "320583", "name": "昆山市" },
+ { "code": "320585", "name": "太仓市" }
+ ]
+ },
+ {
+ "code": "3206",
+ "name": "南通市",
+ "children": [
+ { "code": "320602", "name": "崇川区" },
+ { "code": "320611", "name": "港闸区" },
+ { "code": "320612", "name": "通州区" },
+ { "code": "320623", "name": "如东县" },
+ { "code": "320671", "name": "南通经济技术开发区" },
+ { "code": "320681", "name": "启东市" },
+ { "code": "320682", "name": "如皋市" },
+ { "code": "320684", "name": "海门市" },
+ { "code": "320685", "name": "海安市" }
+ ]
+ },
+ {
+ "code": "3207",
+ "name": "连云港市",
+ "children": [
+ { "code": "320703", "name": "连云区" },
+ { "code": "320706", "name": "海州区" },
+ { "code": "320707", "name": "赣榆区" },
+ { "code": "320722", "name": "东海县" },
+ { "code": "320723", "name": "灌云县" },
+ { "code": "320724", "name": "灌南县" },
+ { "code": "320771", "name": "连云港经济技术开发区" },
+ { "code": "320772", "name": "连云港高新技术产业开发区" }
+ ]
+ },
+ {
+ "code": "3208",
+ "name": "淮安市",
+ "children": [
+ { "code": "320803", "name": "淮安区" },
+ { "code": "320804", "name": "淮阴区" },
+ { "code": "320812", "name": "清江浦区" },
+ { "code": "320813", "name": "洪泽区" },
+ { "code": "320826", "name": "涟水县" },
+ { "code": "320830", "name": "盱眙县" },
+ { "code": "320831", "name": "金湖县" },
+ { "code": "320871", "name": "淮安经济技术开发区" }
+ ]
+ },
+ {
+ "code": "3209",
+ "name": "盐城市",
+ "children": [
+ { "code": "320902", "name": "亭湖区" },
+ { "code": "320903", "name": "盐都区" },
+ { "code": "320904", "name": "大丰区" },
+ { "code": "320921", "name": "响水县" },
+ { "code": "320922", "name": "滨海县" },
+ { "code": "320923", "name": "阜宁县" },
+ { "code": "320924", "name": "射阳县" },
+ { "code": "320925", "name": "建湖县" },
+ { "code": "320971", "name": "盐城经济技术开发区" },
+ { "code": "320981", "name": "东台市" }
+ ]
+ },
+ {
+ "code": "3210",
+ "name": "扬州市",
+ "children": [
+ { "code": "321002", "name": "广陵区" },
+ { "code": "321003", "name": "邗江区" },
+ { "code": "321012", "name": "江都区" },
+ { "code": "321023", "name": "宝应县" },
+ { "code": "321071", "name": "扬州经济技术开发区" },
+ { "code": "321081", "name": "仪征市" },
+ { "code": "321084", "name": "高邮市" }
+ ]
+ },
+ {
+ "code": "3211",
+ "name": "镇江市",
+ "children": [
+ { "code": "321102", "name": "京口区" },
+ { "code": "321111", "name": "润州区" },
+ { "code": "321112", "name": "丹徒区" },
+ { "code": "321171", "name": "镇江新区" },
+ { "code": "321181", "name": "丹阳市" },
+ { "code": "321182", "name": "扬中市" },
+ { "code": "321183", "name": "句容市" }
+ ]
+ },
+ {
+ "code": "3212",
+ "name": "泰州市",
+ "children": [
+ { "code": "321202", "name": "海陵区" },
+ { "code": "321203", "name": "高港区" },
+ { "code": "321204", "name": "姜堰区" },
+ { "code": "321271", "name": "泰州医药高新技术产业开发区" },
+ { "code": "321281", "name": "兴化市" },
+ { "code": "321282", "name": "靖江市" },
+ { "code": "321283", "name": "泰兴市" }
+ ]
+ },
+ {
+ "code": "3213",
+ "name": "宿迁市",
+ "children": [
+ { "code": "321302", "name": "宿城区" },
+ { "code": "321311", "name": "宿豫区" },
+ { "code": "321322", "name": "沭阳县" },
+ { "code": "321323", "name": "泗阳县" },
+ { "code": "321324", "name": "泗洪县" },
+ { "code": "321371", "name": "宿迁经济技术开发区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "33",
+ "name": "浙江省",
+ "children": [
+ {
+ "code": "3301",
+ "name": "杭州市",
+ "children": [
+ { "code": "330102", "name": "上城区" },
+ { "code": "330103", "name": "下城区" },
+ { "code": "330104", "name": "江干区" },
+ { "code": "330105", "name": "拱墅区" },
+ { "code": "330106", "name": "西湖区" },
+ { "code": "330108", "name": "滨江区" },
+ { "code": "330109", "name": "萧山区" },
+ { "code": "330110", "name": "余杭区" },
+ { "code": "330111", "name": "富阳区" },
+ { "code": "330112", "name": "临安区" },
+ { "code": "330122", "name": "桐庐县" },
+ { "code": "330127", "name": "淳安县" },
+ { "code": "330182", "name": "建德市" }
+ ]
+ },
+ {
+ "code": "3302",
+ "name": "宁波市",
+ "children": [
+ { "code": "330203", "name": "海曙区" },
+ { "code": "330205", "name": "江北区" },
+ { "code": "330206", "name": "北仑区" },
+ { "code": "330211", "name": "镇海区" },
+ { "code": "330212", "name": "鄞州区" },
+ { "code": "330213", "name": "奉化区" },
+ { "code": "330225", "name": "象山县" },
+ { "code": "330226", "name": "宁海县" },
+ { "code": "330281", "name": "余姚市" },
+ { "code": "330282", "name": "慈溪市" }
+ ]
+ },
+ {
+ "code": "3303",
+ "name": "温州市",
+ "children": [
+ { "code": "330302", "name": "鹿城区" },
+ { "code": "330303", "name": "龙湾区" },
+ { "code": "330304", "name": "瓯海区" },
+ { "code": "330305", "name": "洞头区" },
+ { "code": "330324", "name": "永嘉县" },
+ { "code": "330326", "name": "平阳县" },
+ { "code": "330327", "name": "苍南县" },
+ { "code": "330328", "name": "文成县" },
+ { "code": "330329", "name": "泰顺县" },
+ { "code": "330371", "name": "温州经济技术开发区" },
+ { "code": "330381", "name": "瑞安市" },
+ { "code": "330382", "name": "乐清市" },
+ { "code": "330383", "name": "龙港市" }
+ ]
+ },
+ {
+ "code": "3304",
+ "name": "嘉兴市",
+ "children": [
+ { "code": "330402", "name": "南湖区" },
+ { "code": "330411", "name": "秀洲区" },
+ { "code": "330421", "name": "嘉善县" },
+ { "code": "330424", "name": "海盐县" },
+ { "code": "330481", "name": "海宁市" },
+ { "code": "330482", "name": "平湖市" },
+ { "code": "330483", "name": "桐乡市" }
+ ]
+ },
+ {
+ "code": "3305",
+ "name": "湖州市",
+ "children": [
+ { "code": "330502", "name": "吴兴区" },
+ { "code": "330503", "name": "南浔区" },
+ { "code": "330521", "name": "德清县" },
+ { "code": "330522", "name": "长兴县" },
+ { "code": "330523", "name": "安吉县" }
+ ]
+ },
+ {
+ "code": "3306",
+ "name": "绍兴市",
+ "children": [
+ { "code": "330602", "name": "越城区" },
+ { "code": "330603", "name": "柯桥区" },
+ { "code": "330604", "name": "上虞区" },
+ { "code": "330624", "name": "新昌县" },
+ { "code": "330681", "name": "诸暨市" },
+ { "code": "330683", "name": "嵊州市" }
+ ]
+ },
+ {
+ "code": "3307",
+ "name": "金华市",
+ "children": [
+ { "code": "330702", "name": "婺城区" },
+ { "code": "330703", "name": "金东区" },
+ { "code": "330723", "name": "武义县" },
+ { "code": "330726", "name": "浦江县" },
+ { "code": "330727", "name": "磐安县" },
+ { "code": "330781", "name": "兰溪市" },
+ { "code": "330782", "name": "义乌市" },
+ { "code": "330783", "name": "东阳市" },
+ { "code": "330784", "name": "永康市" }
+ ]
+ },
+ {
+ "code": "3308",
+ "name": "衢州市",
+ "children": [
+ { "code": "330802", "name": "柯城区" },
+ { "code": "330803", "name": "衢江区" },
+ { "code": "330822", "name": "常山县" },
+ { "code": "330824", "name": "开化县" },
+ { "code": "330825", "name": "龙游县" },
+ { "code": "330881", "name": "江山市" }
+ ]
+ },
+ {
+ "code": "3309",
+ "name": "舟山市",
+ "children": [
+ { "code": "330902", "name": "定海区" },
+ { "code": "330903", "name": "普陀区" },
+ { "code": "330921", "name": "岱山县" },
+ { "code": "330922", "name": "嵊泗县" }
+ ]
+ },
+ {
+ "code": "3310",
+ "name": "台州市",
+ "children": [
+ { "code": "331002", "name": "椒江区" },
+ { "code": "331003", "name": "黄岩区" },
+ { "code": "331004", "name": "路桥区" },
+ { "code": "331022", "name": "三门县" },
+ { "code": "331023", "name": "天台县" },
+ { "code": "331024", "name": "仙居县" },
+ { "code": "331081", "name": "温岭市" },
+ { "code": "331082", "name": "临海市" },
+ { "code": "331083", "name": "玉环市" }
+ ]
+ },
+ {
+ "code": "3311",
+ "name": "丽水市",
+ "children": [
+ { "code": "331102", "name": "莲都区" },
+ { "code": "331121", "name": "青田县" },
+ { "code": "331122", "name": "缙云县" },
+ { "code": "331123", "name": "遂昌县" },
+ { "code": "331124", "name": "松阳县" },
+ { "code": "331125", "name": "云和县" },
+ { "code": "331126", "name": "庆元县" },
+ { "code": "331127", "name": "景宁畲族自治县" },
+ { "code": "331181", "name": "龙泉市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "34",
+ "name": "安徽省",
+ "children": [
+ {
+ "code": "3401",
+ "name": "合肥市",
+ "children": [
+ { "code": "340102", "name": "瑶海区" },
+ { "code": "340103", "name": "庐阳区" },
+ { "code": "340104", "name": "蜀山区" },
+ { "code": "340111", "name": "包河区" },
+ { "code": "340121", "name": "长丰县" },
+ { "code": "340122", "name": "肥东县" },
+ { "code": "340123", "name": "肥西县" },
+ { "code": "340124", "name": "庐江县" },
+ { "code": "340171", "name": "合肥高新技术产业开发区" },
+ { "code": "340172", "name": "合肥经济技术开发区" },
+ { "code": "340173", "name": "合肥新站高新技术产业开发区" },
+ { "code": "340181", "name": "巢湖市" }
+ ]
+ },
+ {
+ "code": "3402",
+ "name": "芜湖市",
+ "children": [
+ { "code": "340202", "name": "镜湖区" },
+ { "code": "340203", "name": "弋江区" },
+ { "code": "340207", "name": "鸠江区" },
+ { "code": "340208", "name": "三山区" },
+ { "code": "340221", "name": "芜湖县" },
+ { "code": "340222", "name": "繁昌县" },
+ { "code": "340223", "name": "南陵县" },
+ { "code": "340225", "name": "无为县" },
+ { "code": "340271", "name": "芜湖经济技术开发区" },
+ { "code": "340272", "name": "安徽芜湖长江大桥经济开发区" }
+ ]
+ },
+ {
+ "code": "3403",
+ "name": "蚌埠市",
+ "children": [
+ { "code": "340302", "name": "龙子湖区" },
+ { "code": "340303", "name": "蚌山区" },
+ { "code": "340304", "name": "禹会区" },
+ { "code": "340311", "name": "淮上区" },
+ { "code": "340321", "name": "怀远县" },
+ { "code": "340322", "name": "五河县" },
+ { "code": "340323", "name": "固镇县" },
+ { "code": "340371", "name": "蚌埠市高新技术开发区" },
+ { "code": "340372", "name": "蚌埠市经济开发区" }
+ ]
+ },
+ {
+ "code": "3404",
+ "name": "淮南市",
+ "children": [
+ { "code": "340402", "name": "大通区" },
+ { "code": "340403", "name": "田家庵区" },
+ { "code": "340404", "name": "谢家集区" },
+ { "code": "340405", "name": "八公山区" },
+ { "code": "340406", "name": "潘集区" },
+ { "code": "340421", "name": "凤台县" },
+ { "code": "340422", "name": "寿县" }
+ ]
+ },
+ {
+ "code": "3405",
+ "name": "马鞍山市",
+ "children": [
+ { "code": "340503", "name": "花山区" },
+ { "code": "340504", "name": "雨山区" },
+ { "code": "340506", "name": "博望区" },
+ { "code": "340521", "name": "当涂县" },
+ { "code": "340522", "name": "含山县" },
+ { "code": "340523", "name": "和县" }
+ ]
+ },
+ {
+ "code": "3406",
+ "name": "淮北市",
+ "children": [
+ { "code": "340602", "name": "杜集区" },
+ { "code": "340603", "name": "相山区" },
+ { "code": "340604", "name": "烈山区" },
+ { "code": "340621", "name": "濉溪县" }
+ ]
+ },
+ {
+ "code": "3407",
+ "name": "铜陵市",
+ "children": [
+ { "code": "340705", "name": "铜官区" },
+ { "code": "340706", "name": "义安区" },
+ { "code": "340711", "name": "郊区" },
+ { "code": "340722", "name": "枞阳县" }
+ ]
+ },
+ {
+ "code": "3408",
+ "name": "安庆市",
+ "children": [
+ { "code": "340802", "name": "迎江区" },
+ { "code": "340803", "name": "大观区" },
+ { "code": "340811", "name": "宜秀区" },
+ { "code": "340822", "name": "怀宁县" },
+ { "code": "340825", "name": "太湖县" },
+ { "code": "340826", "name": "宿松县" },
+ { "code": "340827", "name": "望江县" },
+ { "code": "340828", "name": "岳西县" },
+ { "code": "340871", "name": "安徽安庆经济开发区" },
+ { "code": "340881", "name": "桐城市" },
+ { "code": "340882", "name": "潜山市" }
+ ]
+ },
+ {
+ "code": "3410",
+ "name": "黄山市",
+ "children": [
+ { "code": "341002", "name": "屯溪区" },
+ { "code": "341003", "name": "黄山区" },
+ { "code": "341004", "name": "徽州区" },
+ { "code": "341021", "name": "歙县" },
+ { "code": "341022", "name": "休宁县" },
+ { "code": "341023", "name": "黟县" },
+ { "code": "341024", "name": "祁门县" }
+ ]
+ },
+ {
+ "code": "3411",
+ "name": "滁州市",
+ "children": [
+ { "code": "341102", "name": "琅琊区" },
+ { "code": "341103", "name": "南谯区" },
+ { "code": "341122", "name": "来安县" },
+ { "code": "341124", "name": "全椒县" },
+ { "code": "341125", "name": "定远县" },
+ { "code": "341126", "name": "凤阳县" },
+ { "code": "341171", "name": "苏滁现代产业园" },
+ { "code": "341172", "name": "滁州经济技术开发区" },
+ { "code": "341181", "name": "天长市" },
+ { "code": "341182", "name": "明光市" }
+ ]
+ },
+ {
+ "code": "3412",
+ "name": "阜阳市",
+ "children": [
+ { "code": "341202", "name": "颍州区" },
+ { "code": "341203", "name": "颍东区" },
+ { "code": "341204", "name": "颍泉区" },
+ { "code": "341221", "name": "临泉县" },
+ { "code": "341222", "name": "太和县" },
+ { "code": "341225", "name": "阜南县" },
+ { "code": "341226", "name": "颍上县" },
+ { "code": "341271", "name": "阜阳合肥现代产业园区" },
+ { "code": "341272", "name": "阜阳经济技术开发区" },
+ { "code": "341282", "name": "界首市" }
+ ]
+ },
+ {
+ "code": "3413",
+ "name": "宿州市",
+ "children": [
+ { "code": "341302", "name": "埇桥区" },
+ { "code": "341321", "name": "砀山县" },
+ { "code": "341322", "name": "萧县" },
+ { "code": "341323", "name": "灵璧县" },
+ { "code": "341324", "name": "泗县" },
+ { "code": "341371", "name": "宿州马鞍山现代产业园区" },
+ { "code": "341372", "name": "宿州经济技术开发区" }
+ ]
+ },
+ {
+ "code": "3415",
+ "name": "六安市",
+ "children": [
+ { "code": "341502", "name": "金安区" },
+ { "code": "341503", "name": "裕安区" },
+ { "code": "341504", "name": "叶集区" },
+ { "code": "341522", "name": "霍邱县" },
+ { "code": "341523", "name": "舒城县" },
+ { "code": "341524", "name": "金寨县" },
+ { "code": "341525", "name": "霍山县" }
+ ]
+ },
+ {
+ "code": "3416",
+ "name": "亳州市",
+ "children": [
+ { "code": "341602", "name": "谯城区" },
+ { "code": "341621", "name": "涡阳县" },
+ { "code": "341622", "name": "蒙城县" },
+ { "code": "341623", "name": "利辛县" }
+ ]
+ },
+ {
+ "code": "3417",
+ "name": "池州市",
+ "children": [
+ { "code": "341702", "name": "贵池区" },
+ { "code": "341721", "name": "东至县" },
+ { "code": "341722", "name": "石台县" },
+ { "code": "341723", "name": "青阳县" }
+ ]
+ },
+ {
+ "code": "3418",
+ "name": "宣城市",
+ "children": [
+ { "code": "341802", "name": "宣州区" },
+ { "code": "341821", "name": "郎溪县" },
+ { "code": "341823", "name": "泾县" },
+ { "code": "341824", "name": "绩溪县" },
+ { "code": "341825", "name": "旌德县" },
+ { "code": "341871", "name": "宣城市经济开发区" },
+ { "code": "341881", "name": "宁国市" },
+ { "code": "341882", "name": "广德市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "35",
+ "name": "福建省",
+ "children": [
+ {
+ "code": "3501",
+ "name": "福州市",
+ "children": [
+ { "code": "350102", "name": "鼓楼区" },
+ { "code": "350103", "name": "台江区" },
+ { "code": "350104", "name": "仓山区" },
+ { "code": "350105", "name": "马尾区" },
+ { "code": "350111", "name": "晋安区" },
+ { "code": "350112", "name": "长乐区" },
+ { "code": "350121", "name": "闽侯县" },
+ { "code": "350122", "name": "连江县" },
+ { "code": "350123", "name": "罗源县" },
+ { "code": "350124", "name": "闽清县" },
+ { "code": "350125", "name": "永泰县" },
+ { "code": "350128", "name": "平潭县" },
+ { "code": "350181", "name": "福清市" }
+ ]
+ },
+ {
+ "code": "3502",
+ "name": "厦门市",
+ "children": [
+ { "code": "350203", "name": "思明区" },
+ { "code": "350205", "name": "海沧区" },
+ { "code": "350206", "name": "湖里区" },
+ { "code": "350211", "name": "集美区" },
+ { "code": "350212", "name": "同安区" },
+ { "code": "350213", "name": "翔安区" }
+ ]
+ },
+ {
+ "code": "3503",
+ "name": "莆田市",
+ "children": [
+ { "code": "350302", "name": "城厢区" },
+ { "code": "350303", "name": "涵江区" },
+ { "code": "350304", "name": "荔城区" },
+ { "code": "350305", "name": "秀屿区" },
+ { "code": "350322", "name": "仙游县" }
+ ]
+ },
+ {
+ "code": "3504",
+ "name": "三明市",
+ "children": [
+ { "code": "350402", "name": "梅列区" },
+ { "code": "350403", "name": "三元区" },
+ { "code": "350421", "name": "明溪县" },
+ { "code": "350423", "name": "清流县" },
+ { "code": "350424", "name": "宁化县" },
+ { "code": "350425", "name": "大田县" },
+ { "code": "350426", "name": "尤溪县" },
+ { "code": "350427", "name": "沙县" },
+ { "code": "350428", "name": "将乐县" },
+ { "code": "350429", "name": "泰宁县" },
+ { "code": "350430", "name": "建宁县" },
+ { "code": "350481", "name": "永安市" }
+ ]
+ },
+ {
+ "code": "3505",
+ "name": "泉州市",
+ "children": [
+ { "code": "350502", "name": "鲤城区" },
+ { "code": "350503", "name": "丰泽区" },
+ { "code": "350504", "name": "洛江区" },
+ { "code": "350505", "name": "泉港区" },
+ { "code": "350521", "name": "惠安县" },
+ { "code": "350524", "name": "安溪县" },
+ { "code": "350525", "name": "永春县" },
+ { "code": "350526", "name": "德化县" },
+ { "code": "350527", "name": "金门县" },
+ { "code": "350581", "name": "石狮市" },
+ { "code": "350582", "name": "晋江市" },
+ { "code": "350583", "name": "南安市" }
+ ]
+ },
+ {
+ "code": "3506",
+ "name": "漳州市",
+ "children": [
+ { "code": "350602", "name": "芗城区" },
+ { "code": "350603", "name": "龙文区" },
+ { "code": "350622", "name": "云霄县" },
+ { "code": "350623", "name": "漳浦县" },
+ { "code": "350624", "name": "诏安县" },
+ { "code": "350625", "name": "长泰县" },
+ { "code": "350626", "name": "东山县" },
+ { "code": "350627", "name": "南靖县" },
+ { "code": "350628", "name": "平和县" },
+ { "code": "350629", "name": "华安县" },
+ { "code": "350681", "name": "龙海市" }
+ ]
+ },
+ {
+ "code": "3507",
+ "name": "南平市",
+ "children": [
+ { "code": "350702", "name": "延平区" },
+ { "code": "350703", "name": "建阳区" },
+ { "code": "350721", "name": "顺昌县" },
+ { "code": "350722", "name": "浦城县" },
+ { "code": "350723", "name": "光泽县" },
+ { "code": "350724", "name": "松溪县" },
+ { "code": "350725", "name": "政和县" },
+ { "code": "350781", "name": "邵武市" },
+ { "code": "350782", "name": "武夷山市" },
+ { "code": "350783", "name": "建瓯市" }
+ ]
+ },
+ {
+ "code": "3508",
+ "name": "龙岩市",
+ "children": [
+ { "code": "350802", "name": "新罗区" },
+ { "code": "350803", "name": "永定区" },
+ { "code": "350821", "name": "长汀县" },
+ { "code": "350823", "name": "上杭县" },
+ { "code": "350824", "name": "武平县" },
+ { "code": "350825", "name": "连城县" },
+ { "code": "350881", "name": "漳平市" }
+ ]
+ },
+ {
+ "code": "3509",
+ "name": "宁德市",
+ "children": [
+ { "code": "350902", "name": "蕉城区" },
+ { "code": "350921", "name": "霞浦县" },
+ { "code": "350922", "name": "古田县" },
+ { "code": "350923", "name": "屏南县" },
+ { "code": "350924", "name": "寿宁县" },
+ { "code": "350925", "name": "周宁县" },
+ { "code": "350926", "name": "柘荣县" },
+ { "code": "350981", "name": "福安市" },
+ { "code": "350982", "name": "福鼎市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "36",
+ "name": "江西省",
+ "children": [
+ {
+ "code": "3601",
+ "name": "南昌市",
+ "children": [
+ { "code": "360102", "name": "东湖区" },
+ { "code": "360103", "name": "西湖区" },
+ { "code": "360104", "name": "青云谱区" },
+ { "code": "360105", "name": "湾里区" },
+ { "code": "360111", "name": "青山湖区" },
+ { "code": "360112", "name": "新建区" },
+ { "code": "360121", "name": "南昌县" },
+ { "code": "360123", "name": "安义县" },
+ { "code": "360124", "name": "进贤县" }
+ ]
+ },
+ {
+ "code": "3602",
+ "name": "景德镇市",
+ "children": [
+ { "code": "360202", "name": "昌江区" },
+ { "code": "360203", "name": "珠山区" },
+ { "code": "360222", "name": "浮梁县" },
+ { "code": "360281", "name": "乐平市" }
+ ]
+ },
+ {
+ "code": "3603",
+ "name": "萍乡市",
+ "children": [
+ { "code": "360302", "name": "安源区" },
+ { "code": "360313", "name": "湘东区" },
+ { "code": "360321", "name": "莲花县" },
+ { "code": "360322", "name": "上栗县" },
+ { "code": "360323", "name": "芦溪县" }
+ ]
+ },
+ {
+ "code": "3604",
+ "name": "九江市",
+ "children": [
+ { "code": "360402", "name": "濂溪区" },
+ { "code": "360403", "name": "浔阳区" },
+ { "code": "360404", "name": "柴桑区" },
+ { "code": "360423", "name": "武宁县" },
+ { "code": "360424", "name": "修水县" },
+ { "code": "360425", "name": "永修县" },
+ { "code": "360426", "name": "德安县" },
+ { "code": "360428", "name": "都昌县" },
+ { "code": "360429", "name": "湖口县" },
+ { "code": "360430", "name": "彭泽县" },
+ { "code": "360481", "name": "瑞昌市" },
+ { "code": "360482", "name": "共青城市" },
+ { "code": "360483", "name": "庐山市" }
+ ]
+ },
+ {
+ "code": "3605",
+ "name": "新余市",
+ "children": [
+ { "code": "360502", "name": "渝水区" },
+ { "code": "360521", "name": "分宜县" }
+ ]
+ },
+ {
+ "code": "3606",
+ "name": "鹰潭市",
+ "children": [
+ { "code": "360602", "name": "月湖区" },
+ { "code": "360603", "name": "余江区" },
+ { "code": "360681", "name": "贵溪市" }
+ ]
+ },
+ {
+ "code": "3607",
+ "name": "赣州市",
+ "children": [
+ { "code": "360702", "name": "章贡区" },
+ { "code": "360703", "name": "南康区" },
+ { "code": "360704", "name": "赣县区" },
+ { "code": "360722", "name": "信丰县" },
+ { "code": "360723", "name": "大余县" },
+ { "code": "360724", "name": "上犹县" },
+ { "code": "360725", "name": "崇义县" },
+ { "code": "360726", "name": "安远县" },
+ { "code": "360727", "name": "龙南县" },
+ { "code": "360728", "name": "定南县" },
+ { "code": "360729", "name": "全南县" },
+ { "code": "360730", "name": "宁都县" },
+ { "code": "360731", "name": "于都县" },
+ { "code": "360732", "name": "兴国县" },
+ { "code": "360733", "name": "会昌县" },
+ { "code": "360734", "name": "寻乌县" },
+ { "code": "360735", "name": "石城县" },
+ { "code": "360781", "name": "瑞金市" }
+ ]
+ },
+ {
+ "code": "3608",
+ "name": "吉安市",
+ "children": [
+ { "code": "360802", "name": "吉州区" },
+ { "code": "360803", "name": "青原区" },
+ { "code": "360821", "name": "吉安县" },
+ { "code": "360822", "name": "吉水县" },
+ { "code": "360823", "name": "峡江县" },
+ { "code": "360824", "name": "新干县" },
+ { "code": "360825", "name": "永丰县" },
+ { "code": "360826", "name": "泰和县" },
+ { "code": "360827", "name": "遂川县" },
+ { "code": "360828", "name": "万安县" },
+ { "code": "360829", "name": "安福县" },
+ { "code": "360830", "name": "永新县" },
+ { "code": "360881", "name": "井冈山市" }
+ ]
+ },
+ {
+ "code": "3609",
+ "name": "宜春市",
+ "children": [
+ { "code": "360902", "name": "袁州区" },
+ { "code": "360921", "name": "奉新县" },
+ { "code": "360922", "name": "万载县" },
+ { "code": "360923", "name": "上高县" },
+ { "code": "360924", "name": "宜丰县" },
+ { "code": "360925", "name": "靖安县" },
+ { "code": "360926", "name": "铜鼓县" },
+ { "code": "360981", "name": "丰城市" },
+ { "code": "360982", "name": "樟树市" },
+ { "code": "360983", "name": "高安市" }
+ ]
+ },
+ {
+ "code": "3610",
+ "name": "抚州市",
+ "children": [
+ { "code": "361002", "name": "临川区" },
+ { "code": "361003", "name": "东乡区" },
+ { "code": "361021", "name": "南城县" },
+ { "code": "361022", "name": "黎川县" },
+ { "code": "361023", "name": "南丰县" },
+ { "code": "361024", "name": "崇仁县" },
+ { "code": "361025", "name": "乐安县" },
+ { "code": "361026", "name": "宜黄县" },
+ { "code": "361027", "name": "金溪县" },
+ { "code": "361028", "name": "资溪县" },
+ { "code": "361030", "name": "广昌县" }
+ ]
+ },
+ {
+ "code": "3611",
+ "name": "上饶市",
+ "children": [
+ { "code": "361102", "name": "信州区" },
+ { "code": "361103", "name": "广丰区" },
+ { "code": "361104", "name": "广信区" },
+ { "code": "361123", "name": "玉山县" },
+ { "code": "361124", "name": "铅山县" },
+ { "code": "361125", "name": "横峰县" },
+ { "code": "361126", "name": "弋阳县" },
+ { "code": "361127", "name": "余干县" },
+ { "code": "361128", "name": "鄱阳县" },
+ { "code": "361129", "name": "万年县" },
+ { "code": "361130", "name": "婺源县" },
+ { "code": "361181", "name": "德兴市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "37",
+ "name": "山东省",
+ "children": [
+ {
+ "code": "3701",
+ "name": "济南市",
+ "children": [
+ { "code": "370102", "name": "历下区" },
+ { "code": "370103", "name": "市中区" },
+ { "code": "370104", "name": "槐荫区" },
+ { "code": "370105", "name": "天桥区" },
+ { "code": "370112", "name": "历城区" },
+ { "code": "370113", "name": "长清区" },
+ { "code": "370114", "name": "章丘区" },
+ { "code": "370115", "name": "济阳区" },
+ { "code": "370116", "name": "莱芜区" },
+ { "code": "370117", "name": "钢城区" },
+ { "code": "370124", "name": "平阴县" },
+ { "code": "370126", "name": "商河县" },
+ { "code": "370171", "name": "济南高新技术产业开发区" }
+ ]
+ },
+ {
+ "code": "3702",
+ "name": "青岛市",
+ "children": [
+ { "code": "370202", "name": "市南区" },
+ { "code": "370203", "name": "市北区" },
+ { "code": "370211", "name": "黄岛区" },
+ { "code": "370212", "name": "崂山区" },
+ { "code": "370213", "name": "李沧区" },
+ { "code": "370214", "name": "城阳区" },
+ { "code": "370215", "name": "即墨区" },
+ { "code": "370271", "name": "青岛高新技术产业开发区" },
+ { "code": "370281", "name": "胶州市" },
+ { "code": "370283", "name": "平度市" },
+ { "code": "370285", "name": "莱西市" }
+ ]
+ },
+ {
+ "code": "3703",
+ "name": "淄博市",
+ "children": [
+ { "code": "370302", "name": "淄川区" },
+ { "code": "370303", "name": "张店区" },
+ { "code": "370304", "name": "博山区" },
+ { "code": "370305", "name": "临淄区" },
+ { "code": "370306", "name": "周村区" },
+ { "code": "370321", "name": "桓台县" },
+ { "code": "370322", "name": "高青县" },
+ { "code": "370323", "name": "沂源县" }
+ ]
+ },
+ {
+ "code": "3704",
+ "name": "枣庄市",
+ "children": [
+ { "code": "370402", "name": "市中区" },
+ { "code": "370403", "name": "薛城区" },
+ { "code": "370404", "name": "峄城区" },
+ { "code": "370405", "name": "台儿庄区" },
+ { "code": "370406", "name": "山亭区" },
+ { "code": "370481", "name": "滕州市" }
+ ]
+ },
+ {
+ "code": "3705",
+ "name": "东营市",
+ "children": [
+ { "code": "370502", "name": "东营区" },
+ { "code": "370503", "name": "河口区" },
+ { "code": "370505", "name": "垦利区" },
+ { "code": "370522", "name": "利津县" },
+ { "code": "370523", "name": "广饶县" },
+ { "code": "370571", "name": "东营经济技术开发区" },
+ { "code": "370572", "name": "东营港经济开发区" }
+ ]
+ },
+ {
+ "code": "3706",
+ "name": "烟台市",
+ "children": [
+ { "code": "370602", "name": "芝罘区" },
+ { "code": "370611", "name": "福山区" },
+ { "code": "370612", "name": "牟平区" },
+ { "code": "370613", "name": "莱山区" },
+ { "code": "370634", "name": "长岛县" },
+ { "code": "370671", "name": "烟台高新技术产业开发区" },
+ { "code": "370672", "name": "烟台经济技术开发区" },
+ { "code": "370681", "name": "龙口市" },
+ { "code": "370682", "name": "莱阳市" },
+ { "code": "370683", "name": "莱州市" },
+ { "code": "370684", "name": "蓬莱市" },
+ { "code": "370685", "name": "招远市" },
+ { "code": "370686", "name": "栖霞市" },
+ { "code": "370687", "name": "海阳市" }
+ ]
+ },
+ {
+ "code": "3707",
+ "name": "潍坊市",
+ "children": [
+ { "code": "370702", "name": "潍城区" },
+ { "code": "370703", "name": "寒亭区" },
+ { "code": "370704", "name": "坊子区" },
+ { "code": "370705", "name": "奎文区" },
+ { "code": "370724", "name": "临朐县" },
+ { "code": "370725", "name": "昌乐县" },
+ { "code": "370772", "name": "潍坊滨海经济技术开发区" },
+ { "code": "370781", "name": "青州市" },
+ { "code": "370782", "name": "诸城市" },
+ { "code": "370783", "name": "寿光市" },
+ { "code": "370784", "name": "安丘市" },
+ { "code": "370785", "name": "高密市" },
+ { "code": "370786", "name": "昌邑市" }
+ ]
+ },
+ {
+ "code": "3708",
+ "name": "济宁市",
+ "children": [
+ { "code": "370811", "name": "任城区" },
+ { "code": "370812", "name": "兖州区" },
+ { "code": "370826", "name": "微山县" },
+ { "code": "370827", "name": "鱼台县" },
+ { "code": "370828", "name": "金乡县" },
+ { "code": "370829", "name": "嘉祥县" },
+ { "code": "370830", "name": "汶上县" },
+ { "code": "370831", "name": "泗水县" },
+ { "code": "370832", "name": "梁山县" },
+ { "code": "370871", "name": "济宁高新技术产业开发区" },
+ { "code": "370881", "name": "曲阜市" },
+ { "code": "370883", "name": "邹城市" }
+ ]
+ },
+ {
+ "code": "3709",
+ "name": "泰安市",
+ "children": [
+ { "code": "370902", "name": "泰山区" },
+ { "code": "370911", "name": "岱岳区" },
+ { "code": "370921", "name": "宁阳县" },
+ { "code": "370923", "name": "东平县" },
+ { "code": "370982", "name": "新泰市" },
+ { "code": "370983", "name": "肥城市" }
+ ]
+ },
+ {
+ "code": "3710",
+ "name": "威海市",
+ "children": [
+ { "code": "371002", "name": "环翠区" },
+ { "code": "371003", "name": "文登区" },
+ { "code": "371071", "name": "威海火炬高技术产业开发区" },
+ { "code": "371072", "name": "威海经济技术开发区" },
+ { "code": "371073", "name": "威海临港经济技术开发区" },
+ { "code": "371082", "name": "荣成市" },
+ { "code": "371083", "name": "乳山市" }
+ ]
+ },
+ {
+ "code": "3711",
+ "name": "日照市",
+ "children": [
+ { "code": "371102", "name": "东港区" },
+ { "code": "371103", "name": "岚山区" },
+ { "code": "371121", "name": "五莲县" },
+ { "code": "371122", "name": "莒县" },
+ { "code": "371171", "name": "日照经济技术开发区" }
+ ]
+ },
+ {
+ "code": "3713",
+ "name": "临沂市",
+ "children": [
+ { "code": "371302", "name": "兰山区" },
+ { "code": "371311", "name": "罗庄区" },
+ { "code": "371312", "name": "河东区" },
+ { "code": "371321", "name": "沂南县" },
+ { "code": "371322", "name": "郯城县" },
+ { "code": "371323", "name": "沂水县" },
+ { "code": "371324", "name": "兰陵县" },
+ { "code": "371325", "name": "费县" },
+ { "code": "371326", "name": "平邑县" },
+ { "code": "371327", "name": "莒南县" },
+ { "code": "371328", "name": "蒙阴县" },
+ { "code": "371329", "name": "临沭县" },
+ { "code": "371371", "name": "临沂高新技术产业开发区" },
+ { "code": "371372", "name": "临沂经济技术开发区" },
+ { "code": "371373", "name": "临沂临港经济开发区" }
+ ]
+ },
+ {
+ "code": "3714",
+ "name": "德州市",
+ "children": [
+ { "code": "371402", "name": "德城区" },
+ { "code": "371403", "name": "陵城区" },
+ { "code": "371422", "name": "宁津县" },
+ { "code": "371423", "name": "庆云县" },
+ { "code": "371424", "name": "临邑县" },
+ { "code": "371425", "name": "齐河县" },
+ { "code": "371426", "name": "平原县" },
+ { "code": "371427", "name": "夏津县" },
+ { "code": "371428", "name": "武城县" },
+ { "code": "371471", "name": "德州经济技术开发区" },
+ { "code": "371472", "name": "德州运河经济开发区" },
+ { "code": "371481", "name": "乐陵市" },
+ { "code": "371482", "name": "禹城市" }
+ ]
+ },
+ {
+ "code": "3715",
+ "name": "聊城市",
+ "children": [
+ { "code": "371502", "name": "东昌府区" },
+ { "code": "371503", "name": "茌平区" },
+ { "code": "371521", "name": "阳谷县" },
+ { "code": "371522", "name": "莘县" },
+ { "code": "371524", "name": "东阿县" },
+ { "code": "371525", "name": "冠县" },
+ { "code": "371526", "name": "高唐县" },
+ { "code": "371581", "name": "临清市" }
+ ]
+ },
+ {
+ "code": "3716",
+ "name": "滨州市",
+ "children": [
+ { "code": "371602", "name": "滨城区" },
+ { "code": "371603", "name": "沾化区" },
+ { "code": "371621", "name": "惠民县" },
+ { "code": "371622", "name": "阳信县" },
+ { "code": "371623", "name": "无棣县" },
+ { "code": "371625", "name": "博兴县" },
+ { "code": "371681", "name": "邹平市" }
+ ]
+ },
+ {
+ "code": "3717",
+ "name": "菏泽市",
+ "children": [
+ { "code": "371702", "name": "牡丹区" },
+ { "code": "371703", "name": "定陶区" },
+ { "code": "371721", "name": "曹县" },
+ { "code": "371722", "name": "单县" },
+ { "code": "371723", "name": "成武县" },
+ { "code": "371724", "name": "巨野县" },
+ { "code": "371725", "name": "郓城县" },
+ { "code": "371726", "name": "鄄城县" },
+ { "code": "371728", "name": "东明县" },
+ { "code": "371771", "name": "菏泽经济技术开发区" },
+ { "code": "371772", "name": "菏泽高新技术开发区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "41",
+ "name": "河南省",
+ "children": [
+ {
+ "code": "4101",
+ "name": "郑州市",
+ "children": [
+ { "code": "410102", "name": "中原区" },
+ { "code": "410103", "name": "二七区" },
+ { "code": "410104", "name": "管城回族区" },
+ { "code": "410105", "name": "金水区" },
+ { "code": "410106", "name": "上街区" },
+ { "code": "410108", "name": "惠济区" },
+ { "code": "410122", "name": "中牟县" },
+ { "code": "410171", "name": "郑州经济技术开发区" },
+ { "code": "410172", "name": "郑州高新技术产业开发区" },
+ { "code": "410173", "name": "郑州航空港经济综合实验区" },
+ { "code": "410181", "name": "巩义市" },
+ { "code": "410182", "name": "荥阳市" },
+ { "code": "410183", "name": "新密市" },
+ { "code": "410184", "name": "新郑市" },
+ { "code": "410185", "name": "登封市" }
+ ]
+ },
+ {
+ "code": "4102",
+ "name": "开封市",
+ "children": [
+ { "code": "410202", "name": "龙亭区" },
+ { "code": "410203", "name": "顺河回族区" },
+ { "code": "410204", "name": "鼓楼区" },
+ { "code": "410205", "name": "禹王台区" },
+ { "code": "410212", "name": "祥符区" },
+ { "code": "410221", "name": "杞县" },
+ { "code": "410222", "name": "通许县" },
+ { "code": "410223", "name": "尉氏县" },
+ { "code": "410225", "name": "兰考县" }
+ ]
+ },
+ {
+ "code": "4103",
+ "name": "洛阳市",
+ "children": [
+ { "code": "410302", "name": "老城区" },
+ { "code": "410303", "name": "西工区" },
+ { "code": "410304", "name": "瀍河回族区" },
+ { "code": "410305", "name": "涧西区" },
+ { "code": "410306", "name": "吉利区" },
+ { "code": "410311", "name": "洛龙区" },
+ { "code": "410322", "name": "孟津县" },
+ { "code": "410323", "name": "新安县" },
+ { "code": "410324", "name": "栾川县" },
+ { "code": "410325", "name": "嵩县" },
+ { "code": "410326", "name": "汝阳县" },
+ { "code": "410327", "name": "宜阳县" },
+ { "code": "410328", "name": "洛宁县" },
+ { "code": "410329", "name": "伊川县" },
+ { "code": "410371", "name": "洛阳高新技术产业开发区" },
+ { "code": "410381", "name": "偃师市" }
+ ]
+ },
+ {
+ "code": "4104",
+ "name": "平顶山市",
+ "children": [
+ { "code": "410402", "name": "新华区" },
+ { "code": "410403", "name": "卫东区" },
+ { "code": "410404", "name": "石龙区" },
+ { "code": "410411", "name": "湛河区" },
+ { "code": "410421", "name": "宝丰县" },
+ { "code": "410422", "name": "叶县" },
+ { "code": "410423", "name": "鲁山县" },
+ { "code": "410425", "name": "郏县" },
+ { "code": "410471", "name": "平顶山高新技术产业开发区" },
+ { "code": "410472", "name": "平顶山市城乡一体化示范区" },
+ { "code": "410481", "name": "舞钢市" },
+ { "code": "410482", "name": "汝州市" }
+ ]
+ },
+ {
+ "code": "4105",
+ "name": "安阳市",
+ "children": [
+ { "code": "410502", "name": "文峰区" },
+ { "code": "410503", "name": "北关区" },
+ { "code": "410505", "name": "殷都区" },
+ { "code": "410506", "name": "龙安区" },
+ { "code": "410522", "name": "安阳县" },
+ { "code": "410523", "name": "汤阴县" },
+ { "code": "410526", "name": "滑县" },
+ { "code": "410527", "name": "内黄县" },
+ { "code": "410571", "name": "安阳高新技术产业开发区" },
+ { "code": "410581", "name": "林州市" }
+ ]
+ },
+ {
+ "code": "4106",
+ "name": "鹤壁市",
+ "children": [
+ { "code": "410602", "name": "鹤山区" },
+ { "code": "410603", "name": "山城区" },
+ { "code": "410611", "name": "淇滨区" },
+ { "code": "410621", "name": "浚县" },
+ { "code": "410622", "name": "淇县" },
+ { "code": "410671", "name": "鹤壁经济技术开发区" }
+ ]
+ },
+ {
+ "code": "4107",
+ "name": "新乡市",
+ "children": [
+ { "code": "410702", "name": "红旗区" },
+ { "code": "410703", "name": "卫滨区" },
+ { "code": "410704", "name": "凤泉区" },
+ { "code": "410711", "name": "牧野区" },
+ { "code": "410721", "name": "新乡县" },
+ { "code": "410724", "name": "获嘉县" },
+ { "code": "410725", "name": "原阳县" },
+ { "code": "410726", "name": "延津县" },
+ { "code": "410727", "name": "封丘县" },
+ { "code": "410771", "name": "新乡高新技术产业开发区" },
+ { "code": "410772", "name": "新乡经济技术开发区" },
+ { "code": "410773", "name": "新乡市平原城乡一体化示范区" },
+ { "code": "410781", "name": "卫辉市" },
+ { "code": "410782", "name": "辉县市" },
+ { "code": "410783", "name": "长垣市" }
+ ]
+ },
+ {
+ "code": "4108",
+ "name": "焦作市",
+ "children": [
+ { "code": "410802", "name": "解放区" },
+ { "code": "410803", "name": "中站区" },
+ { "code": "410804", "name": "马村区" },
+ { "code": "410811", "name": "山阳区" },
+ { "code": "410821", "name": "修武县" },
+ { "code": "410822", "name": "博爱县" },
+ { "code": "410823", "name": "武陟县" },
+ { "code": "410825", "name": "温县" },
+ { "code": "410871", "name": "焦作城乡一体化示范区" },
+ { "code": "410882", "name": "沁阳市" },
+ { "code": "410883", "name": "孟州市" }
+ ]
+ },
+ {
+ "code": "4109",
+ "name": "濮阳市",
+ "children": [
+ { "code": "410902", "name": "华龙区" },
+ { "code": "410922", "name": "清丰县" },
+ { "code": "410923", "name": "南乐县" },
+ { "code": "410926", "name": "范县" },
+ { "code": "410927", "name": "台前县" },
+ { "code": "410928", "name": "濮阳县" },
+ { "code": "410971", "name": "河南濮阳工业园区" },
+ { "code": "410972", "name": "濮阳经济技术开发区" }
+ ]
+ },
+ {
+ "code": "4110",
+ "name": "许昌市",
+ "children": [
+ { "code": "411002", "name": "魏都区" },
+ { "code": "411003", "name": "建安区" },
+ { "code": "411024", "name": "鄢陵县" },
+ { "code": "411025", "name": "襄城县" },
+ { "code": "411071", "name": "许昌经济技术开发区" },
+ { "code": "411081", "name": "禹州市" },
+ { "code": "411082", "name": "长葛市" }
+ ]
+ },
+ {
+ "code": "4111",
+ "name": "漯河市",
+ "children": [
+ { "code": "411102", "name": "源汇区" },
+ { "code": "411103", "name": "郾城区" },
+ { "code": "411104", "name": "召陵区" },
+ { "code": "411121", "name": "舞阳县" },
+ { "code": "411122", "name": "临颍县" },
+ { "code": "411171", "name": "漯河经济技术开发区" }
+ ]
+ },
+ {
+ "code": "4112",
+ "name": "三门峡市",
+ "children": [
+ { "code": "411202", "name": "湖滨区" },
+ { "code": "411203", "name": "陕州区" },
+ { "code": "411221", "name": "渑池县" },
+ { "code": "411224", "name": "卢氏县" },
+ { "code": "411271", "name": "河南三门峡经济开发区" },
+ { "code": "411281", "name": "义马市" },
+ { "code": "411282", "name": "灵宝市" }
+ ]
+ },
+ {
+ "code": "4113",
+ "name": "南阳市",
+ "children": [
+ { "code": "411302", "name": "宛城区" },
+ { "code": "411303", "name": "卧龙区" },
+ { "code": "411321", "name": "南召县" },
+ { "code": "411322", "name": "方城县" },
+ { "code": "411323", "name": "西峡县" },
+ { "code": "411324", "name": "镇平县" },
+ { "code": "411325", "name": "内乡县" },
+ { "code": "411326", "name": "淅川县" },
+ { "code": "411327", "name": "社旗县" },
+ { "code": "411328", "name": "唐河县" },
+ { "code": "411329", "name": "新野县" },
+ { "code": "411330", "name": "桐柏县" },
+ { "code": "411371", "name": "南阳高新技术产业开发区" },
+ { "code": "411372", "name": "南阳市城乡一体化示范区" },
+ { "code": "411381", "name": "邓州市" }
+ ]
+ },
+ {
+ "code": "4114",
+ "name": "商丘市",
+ "children": [
+ { "code": "411402", "name": "梁园区" },
+ { "code": "411403", "name": "睢阳区" },
+ { "code": "411421", "name": "民权县" },
+ { "code": "411422", "name": "睢县" },
+ { "code": "411423", "name": "宁陵县" },
+ { "code": "411424", "name": "柘城县" },
+ { "code": "411425", "name": "虞城县" },
+ { "code": "411426", "name": "夏邑县" },
+ { "code": "411471", "name": "豫东综合物流产业聚集区" },
+ { "code": "411472", "name": "河南商丘经济开发区" },
+ { "code": "411481", "name": "永城市" }
+ ]
+ },
+ {
+ "code": "4115",
+ "name": "信阳市",
+ "children": [
+ { "code": "411502", "name": "浉河区" },
+ { "code": "411503", "name": "平桥区" },
+ { "code": "411521", "name": "罗山县" },
+ { "code": "411522", "name": "光山县" },
+ { "code": "411523", "name": "新县" },
+ { "code": "411524", "name": "商城县" },
+ { "code": "411525", "name": "固始县" },
+ { "code": "411526", "name": "潢川县" },
+ { "code": "411527", "name": "淮滨县" },
+ { "code": "411528", "name": "息县" },
+ { "code": "411571", "name": "信阳高新技术产业开发区" }
+ ]
+ },
+ {
+ "code": "4116",
+ "name": "周口市",
+ "children": [
+ { "code": "411602", "name": "川汇区" },
+ { "code": "411603", "name": "淮阳区" },
+ { "code": "411621", "name": "扶沟县" },
+ { "code": "411622", "name": "西华县" },
+ { "code": "411623", "name": "商水县" },
+ { "code": "411624", "name": "沈丘县" },
+ { "code": "411625", "name": "郸城县" },
+ { "code": "411627", "name": "太康县" },
+ { "code": "411628", "name": "鹿邑县" },
+ { "code": "411671", "name": "河南周口经济开发区" },
+ { "code": "411681", "name": "项城市" }
+ ]
+ },
+ {
+ "code": "4117",
+ "name": "驻马店市",
+ "children": [
+ { "code": "411702", "name": "驿城区" },
+ { "code": "411721", "name": "西平县" },
+ { "code": "411722", "name": "上蔡县" },
+ { "code": "411723", "name": "平舆县" },
+ { "code": "411724", "name": "正阳县" },
+ { "code": "411725", "name": "确山县" },
+ { "code": "411726", "name": "泌阳县" },
+ { "code": "411727", "name": "汝南县" },
+ { "code": "411728", "name": "遂平县" },
+ { "code": "411729", "name": "新蔡县" },
+ { "code": "411771", "name": "河南驻马店经济开发区" }
+ ]
+ },
+ {
+ "code": "4190",
+ "name": "省直辖县级行政区划",
+ "children": [{ "code": "419001", "name": "济源市" }]
+ }
+ ]
+ },
+ {
+ "code": "42",
+ "name": "湖北省",
+ "children": [
+ {
+ "code": "4201",
+ "name": "武汉市",
+ "children": [
+ { "code": "420102", "name": "江岸区" },
+ { "code": "420103", "name": "江汉区" },
+ { "code": "420104", "name": "硚口区" },
+ { "code": "420105", "name": "汉阳区" },
+ { "code": "420106", "name": "武昌区" },
+ { "code": "420107", "name": "青山区" },
+ { "code": "420111", "name": "洪山区" },
+ { "code": "420112", "name": "东西湖区" },
+ { "code": "420113", "name": "汉南区" },
+ { "code": "420114", "name": "蔡甸区" },
+ { "code": "420115", "name": "江夏区" },
+ { "code": "420116", "name": "黄陂区" },
+ { "code": "420117", "name": "新洲区" }
+ ]
+ },
+ {
+ "code": "4202",
+ "name": "黄石市",
+ "children": [
+ { "code": "420202", "name": "黄石港区" },
+ { "code": "420203", "name": "西塞山区" },
+ { "code": "420204", "name": "下陆区" },
+ { "code": "420205", "name": "铁山区" },
+ { "code": "420222", "name": "阳新县" },
+ { "code": "420281", "name": "大冶市" }
+ ]
+ },
+ {
+ "code": "4203",
+ "name": "十堰市",
+ "children": [
+ { "code": "420302", "name": "茅箭区" },
+ { "code": "420303", "name": "张湾区" },
+ { "code": "420304", "name": "郧阳区" },
+ { "code": "420322", "name": "郧西县" },
+ { "code": "420323", "name": "竹山县" },
+ { "code": "420324", "name": "竹溪县" },
+ { "code": "420325", "name": "房县" },
+ { "code": "420381", "name": "丹江口市" }
+ ]
+ },
+ {
+ "code": "4205",
+ "name": "宜昌市",
+ "children": [
+ { "code": "420502", "name": "西陵区" },
+ { "code": "420503", "name": "伍家岗区" },
+ { "code": "420504", "name": "点军区" },
+ { "code": "420505", "name": "猇亭区" },
+ { "code": "420506", "name": "夷陵区" },
+ { "code": "420525", "name": "远安县" },
+ { "code": "420526", "name": "兴山县" },
+ { "code": "420527", "name": "秭归县" },
+ { "code": "420528", "name": "长阳土家族自治县" },
+ { "code": "420529", "name": "五峰土家族自治县" },
+ { "code": "420581", "name": "宜都市" },
+ { "code": "420582", "name": "当阳市" },
+ { "code": "420583", "name": "枝江市" }
+ ]
+ },
+ {
+ "code": "4206",
+ "name": "襄阳市",
+ "children": [
+ { "code": "420602", "name": "襄城区" },
+ { "code": "420606", "name": "樊城区" },
+ { "code": "420607", "name": "襄州区" },
+ { "code": "420624", "name": "南漳县" },
+ { "code": "420625", "name": "谷城县" },
+ { "code": "420626", "name": "保康县" },
+ { "code": "420682", "name": "老河口市" },
+ { "code": "420683", "name": "枣阳市" },
+ { "code": "420684", "name": "宜城市" }
+ ]
+ },
+ {
+ "code": "4207",
+ "name": "鄂州市",
+ "children": [
+ { "code": "420702", "name": "梁子湖区" },
+ { "code": "420703", "name": "华容区" },
+ { "code": "420704", "name": "鄂城区" }
+ ]
+ },
+ {
+ "code": "4208",
+ "name": "荆门市",
+ "children": [
+ { "code": "420802", "name": "东宝区" },
+ { "code": "420804", "name": "掇刀区" },
+ { "code": "420822", "name": "沙洋县" },
+ { "code": "420881", "name": "钟祥市" },
+ { "code": "420882", "name": "京山市" }
+ ]
+ },
+ {
+ "code": "4209",
+ "name": "孝感市",
+ "children": [
+ { "code": "420902", "name": "孝南区" },
+ { "code": "420921", "name": "孝昌县" },
+ { "code": "420922", "name": "大悟县" },
+ { "code": "420923", "name": "云梦县" },
+ { "code": "420981", "name": "应城市" },
+ { "code": "420982", "name": "安陆市" },
+ { "code": "420984", "name": "汉川市" }
+ ]
+ },
+ {
+ "code": "4210",
+ "name": "荆州市",
+ "children": [
+ { "code": "421002", "name": "沙市区" },
+ { "code": "421003", "name": "荆州区" },
+ { "code": "421022", "name": "公安县" },
+ { "code": "421023", "name": "监利县" },
+ { "code": "421024", "name": "江陵县" },
+ { "code": "421071", "name": "荆州经济技术开发区" },
+ { "code": "421081", "name": "石首市" },
+ { "code": "421083", "name": "洪湖市" },
+ { "code": "421087", "name": "松滋市" }
+ ]
+ },
+ {
+ "code": "4211",
+ "name": "黄冈市",
+ "children": [
+ { "code": "421102", "name": "黄州区" },
+ { "code": "421121", "name": "团风县" },
+ { "code": "421122", "name": "红安县" },
+ { "code": "421123", "name": "罗田县" },
+ { "code": "421124", "name": "英山县" },
+ { "code": "421125", "name": "浠水县" },
+ { "code": "421126", "name": "蕲春县" },
+ { "code": "421127", "name": "黄梅县" },
+ { "code": "421171", "name": "龙感湖管理区" },
+ { "code": "421181", "name": "麻城市" },
+ { "code": "421182", "name": "武穴市" }
+ ]
+ },
+ {
+ "code": "4212",
+ "name": "咸宁市",
+ "children": [
+ { "code": "421202", "name": "咸安区" },
+ { "code": "421221", "name": "嘉鱼县" },
+ { "code": "421222", "name": "通城县" },
+ { "code": "421223", "name": "崇阳县" },
+ { "code": "421224", "name": "通山县" },
+ { "code": "421281", "name": "赤壁市" }
+ ]
+ },
+ {
+ "code": "4213",
+ "name": "随州市",
+ "children": [
+ { "code": "421303", "name": "曾都区" },
+ { "code": "421321", "name": "随县" },
+ { "code": "421381", "name": "广水市" }
+ ]
+ },
+ {
+ "code": "4228",
+ "name": "恩施土家族苗族自治州",
+ "children": [
+ { "code": "422801", "name": "恩施市" },
+ { "code": "422802", "name": "利川市" },
+ { "code": "422822", "name": "建始县" },
+ { "code": "422823", "name": "巴东县" },
+ { "code": "422825", "name": "宣恩县" },
+ { "code": "422826", "name": "咸丰县" },
+ { "code": "422827", "name": "来凤县" },
+ { "code": "422828", "name": "鹤峰县" }
+ ]
+ },
+ {
+ "code": "4290",
+ "name": "省直辖县级行政区划",
+ "children": [
+ { "code": "429004", "name": "仙桃市" },
+ { "code": "429005", "name": "潜江市" },
+ { "code": "429006", "name": "天门市" },
+ { "code": "429021", "name": "神农架林区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "43",
+ "name": "湖南省",
+ "children": [
+ {
+ "code": "4301",
+ "name": "长沙市",
+ "children": [
+ { "code": "430102", "name": "芙蓉区" },
+ { "code": "430103", "name": "天心区" },
+ { "code": "430104", "name": "岳麓区" },
+ { "code": "430105", "name": "开福区" },
+ { "code": "430111", "name": "雨花区" },
+ { "code": "430112", "name": "望城区" },
+ { "code": "430121", "name": "长沙县" },
+ { "code": "430181", "name": "浏阳市" },
+ { "code": "430182", "name": "宁乡市" }
+ ]
+ },
+ {
+ "code": "4302",
+ "name": "株洲市",
+ "children": [
+ { "code": "430202", "name": "荷塘区" },
+ { "code": "430203", "name": "芦淞区" },
+ { "code": "430204", "name": "石峰区" },
+ { "code": "430211", "name": "天元区" },
+ { "code": "430212", "name": "渌口区" },
+ { "code": "430223", "name": "攸县" },
+ { "code": "430224", "name": "茶陵县" },
+ { "code": "430225", "name": "炎陵县" },
+ { "code": "430271", "name": "云龙示范区" },
+ { "code": "430281", "name": "醴陵市" }
+ ]
+ },
+ {
+ "code": "4303",
+ "name": "湘潭市",
+ "children": [
+ { "code": "430302", "name": "雨湖区" },
+ { "code": "430304", "name": "岳塘区" },
+ { "code": "430321", "name": "湘潭县" },
+ { "code": "430371", "name": "湖南湘潭高新技术产业园区" },
+ { "code": "430372", "name": "湘潭昭山示范区" },
+ { "code": "430373", "name": "湘潭九华示范区" },
+ { "code": "430381", "name": "湘乡市" },
+ { "code": "430382", "name": "韶山市" }
+ ]
+ },
+ {
+ "code": "4304",
+ "name": "衡阳市",
+ "children": [
+ { "code": "430405", "name": "珠晖区" },
+ { "code": "430406", "name": "雁峰区" },
+ { "code": "430407", "name": "石鼓区" },
+ { "code": "430408", "name": "蒸湘区" },
+ { "code": "430412", "name": "南岳区" },
+ { "code": "430421", "name": "衡阳县" },
+ { "code": "430422", "name": "衡南县" },
+ { "code": "430423", "name": "衡山县" },
+ { "code": "430424", "name": "衡东县" },
+ { "code": "430426", "name": "祁东县" },
+ { "code": "430471", "name": "衡阳综合保税区" },
+ { "code": "430472", "name": "湖南衡阳高新技术产业园区" },
+ { "code": "430473", "name": "湖南衡阳松木经济开发区" },
+ { "code": "430481", "name": "耒阳市" },
+ { "code": "430482", "name": "常宁市" }
+ ]
+ },
+ {
+ "code": "4305",
+ "name": "邵阳市",
+ "children": [
+ { "code": "430502", "name": "双清区" },
+ { "code": "430503", "name": "大祥区" },
+ { "code": "430511", "name": "北塔区" },
+ { "code": "430522", "name": "新邵县" },
+ { "code": "430523", "name": "邵阳县" },
+ { "code": "430524", "name": "隆回县" },
+ { "code": "430525", "name": "洞口县" },
+ { "code": "430527", "name": "绥宁县" },
+ { "code": "430528", "name": "新宁县" },
+ { "code": "430529", "name": "城步苗族自治县" },
+ { "code": "430581", "name": "武冈市" },
+ { "code": "430582", "name": "邵东市" }
+ ]
+ },
+ {
+ "code": "4306",
+ "name": "岳阳市",
+ "children": [
+ { "code": "430602", "name": "岳阳楼区" },
+ { "code": "430603", "name": "云溪区" },
+ { "code": "430611", "name": "君山区" },
+ { "code": "430621", "name": "岳阳县" },
+ { "code": "430623", "name": "华容县" },
+ { "code": "430624", "name": "湘阴县" },
+ { "code": "430626", "name": "平江县" },
+ { "code": "430671", "name": "岳阳市屈原管理区" },
+ { "code": "430681", "name": "汨罗市" },
+ { "code": "430682", "name": "临湘市" }
+ ]
+ },
+ {
+ "code": "4307",
+ "name": "常德市",
+ "children": [
+ { "code": "430702", "name": "武陵区" },
+ { "code": "430703", "name": "鼎城区" },
+ { "code": "430721", "name": "安乡县" },
+ { "code": "430722", "name": "汉寿县" },
+ { "code": "430723", "name": "澧县" },
+ { "code": "430724", "name": "临澧县" },
+ { "code": "430725", "name": "桃源县" },
+ { "code": "430726", "name": "石门县" },
+ { "code": "430771", "name": "常德市西洞庭管理区" },
+ { "code": "430781", "name": "津市市" }
+ ]
+ },
+ {
+ "code": "4308",
+ "name": "张家界市",
+ "children": [
+ { "code": "430802", "name": "永定区" },
+ { "code": "430811", "name": "武陵源区" },
+ { "code": "430821", "name": "慈利县" },
+ { "code": "430822", "name": "桑植县" }
+ ]
+ },
+ {
+ "code": "4309",
+ "name": "益阳市",
+ "children": [
+ { "code": "430902", "name": "资阳区" },
+ { "code": "430903", "name": "赫山区" },
+ { "code": "430921", "name": "南县" },
+ { "code": "430922", "name": "桃江县" },
+ { "code": "430923", "name": "安化县" },
+ { "code": "430971", "name": "益阳市大通湖管理区" },
+ { "code": "430972", "name": "湖南益阳高新技术产业园区" },
+ { "code": "430981", "name": "沅江市" }
+ ]
+ },
+ {
+ "code": "4310",
+ "name": "郴州市",
+ "children": [
+ { "code": "431002", "name": "北湖区" },
+ { "code": "431003", "name": "苏仙区" },
+ { "code": "431021", "name": "桂阳县" },
+ { "code": "431022", "name": "宜章县" },
+ { "code": "431023", "name": "永兴县" },
+ { "code": "431024", "name": "嘉禾县" },
+ { "code": "431025", "name": "临武县" },
+ { "code": "431026", "name": "汝城县" },
+ { "code": "431027", "name": "桂东县" },
+ { "code": "431028", "name": "安仁县" },
+ { "code": "431081", "name": "资兴市" }
+ ]
+ },
+ {
+ "code": "4311",
+ "name": "永州市",
+ "children": [
+ { "code": "431102", "name": "零陵区" },
+ { "code": "431103", "name": "冷水滩区" },
+ { "code": "431121", "name": "祁阳县" },
+ { "code": "431122", "name": "东安县" },
+ { "code": "431123", "name": "双牌县" },
+ { "code": "431124", "name": "道县" },
+ { "code": "431125", "name": "江永县" },
+ { "code": "431126", "name": "宁远县" },
+ { "code": "431127", "name": "蓝山县" },
+ { "code": "431128", "name": "新田县" },
+ { "code": "431129", "name": "江华瑶族自治县" },
+ { "code": "431171", "name": "永州经济技术开发区" },
+ { "code": "431172", "name": "永州市金洞管理区" },
+ { "code": "431173", "name": "永州市回龙圩管理区" }
+ ]
+ },
+ {
+ "code": "4312",
+ "name": "怀化市",
+ "children": [
+ { "code": "431202", "name": "鹤城区" },
+ { "code": "431221", "name": "中方县" },
+ { "code": "431222", "name": "沅陵县" },
+ { "code": "431223", "name": "辰溪县" },
+ { "code": "431224", "name": "溆浦县" },
+ { "code": "431225", "name": "会同县" },
+ { "code": "431226", "name": "麻阳苗族自治县" },
+ { "code": "431227", "name": "新晃侗族自治县" },
+ { "code": "431228", "name": "芷江侗族自治县" },
+ { "code": "431229", "name": "靖州苗族侗族自治县" },
+ { "code": "431230", "name": "通道侗族自治县" },
+ { "code": "431271", "name": "怀化市洪江管理区" },
+ { "code": "431281", "name": "洪江市" }
+ ]
+ },
+ {
+ "code": "4313",
+ "name": "娄底市",
+ "children": [
+ { "code": "431302", "name": "娄星区" },
+ { "code": "431321", "name": "双峰县" },
+ { "code": "431322", "name": "新化县" },
+ { "code": "431381", "name": "冷水江市" },
+ { "code": "431382", "name": "涟源市" }
+ ]
+ },
+ {
+ "code": "4331",
+ "name": "湘西土家族苗族自治州",
+ "children": [
+ { "code": "433101", "name": "吉首市" },
+ { "code": "433122", "name": "泸溪县" },
+ { "code": "433123", "name": "凤凰县" },
+ { "code": "433124", "name": "花垣县" },
+ { "code": "433125", "name": "保靖县" },
+ { "code": "433126", "name": "古丈县" },
+ { "code": "433127", "name": "永顺县" },
+ { "code": "433130", "name": "龙山县" },
+ { "code": "433173", "name": "湖南永顺经济开发区" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "44",
+ "name": "广东省",
+ "children": [
+ {
+ "code": "4401",
+ "name": "广州市",
+ "children": [
+ { "code": "440103", "name": "荔湾区" },
+ { "code": "440104", "name": "越秀区" },
+ { "code": "440105", "name": "海珠区" },
+ { "code": "440106", "name": "天河区" },
+ { "code": "440111", "name": "白云区" },
+ { "code": "440112", "name": "黄埔区" },
+ { "code": "440113", "name": "番禺区" },
+ { "code": "440114", "name": "花都区" },
+ { "code": "440115", "name": "南沙区" },
+ { "code": "440117", "name": "从化区" },
+ { "code": "440118", "name": "增城区" }
+ ]
+ },
+ {
+ "code": "4402",
+ "name": "韶关市",
+ "children": [
+ { "code": "440203", "name": "武江区" },
+ { "code": "440204", "name": "浈江区" },
+ { "code": "440205", "name": "曲江区" },
+ { "code": "440222", "name": "始兴县" },
+ { "code": "440224", "name": "仁化县" },
+ { "code": "440229", "name": "翁源县" },
+ { "code": "440232", "name": "乳源瑶族自治县" },
+ { "code": "440233", "name": "新丰县" },
+ { "code": "440281", "name": "乐昌市" },
+ { "code": "440282", "name": "南雄市" }
+ ]
+ },
+ {
+ "code": "4403",
+ "name": "深圳市",
+ "children": [
+ { "code": "440303", "name": "罗湖区" },
+ { "code": "440304", "name": "福田区" },
+ { "code": "440305", "name": "南山区" },
+ { "code": "440306", "name": "宝安区" },
+ { "code": "440307", "name": "龙岗区" },
+ { "code": "440308", "name": "盐田区" },
+ { "code": "440309", "name": "龙华区" },
+ { "code": "440310", "name": "坪山区" },
+ { "code": "440311", "name": "光明区" }
+ ]
+ },
+ {
+ "code": "4404",
+ "name": "珠海市",
+ "children": [
+ { "code": "440402", "name": "香洲区" },
+ { "code": "440403", "name": "斗门区" },
+ { "code": "440404", "name": "金湾区" }
+ ]
+ },
+ {
+ "code": "4405",
+ "name": "汕头市",
+ "children": [
+ { "code": "440507", "name": "龙湖区" },
+ { "code": "440511", "name": "金平区" },
+ { "code": "440512", "name": "濠江区" },
+ { "code": "440513", "name": "潮阳区" },
+ { "code": "440514", "name": "潮南区" },
+ { "code": "440515", "name": "澄海区" },
+ { "code": "440523", "name": "南澳县" }
+ ]
+ },
+ {
+ "code": "4406",
+ "name": "佛山市",
+ "children": [
+ { "code": "440604", "name": "禅城区" },
+ { "code": "440605", "name": "南海区" },
+ { "code": "440606", "name": "顺德区" },
+ { "code": "440607", "name": "三水区" },
+ { "code": "440608", "name": "高明区" }
+ ]
+ },
+ {
+ "code": "4407",
+ "name": "江门市",
+ "children": [
+ { "code": "440703", "name": "蓬江区" },
+ { "code": "440704", "name": "江海区" },
+ { "code": "440705", "name": "新会区" },
+ { "code": "440781", "name": "台山市" },
+ { "code": "440783", "name": "开平市" },
+ { "code": "440784", "name": "鹤山市" },
+ { "code": "440785", "name": "恩平市" }
+ ]
+ },
+ {
+ "code": "4408",
+ "name": "湛江市",
+ "children": [
+ { "code": "440802", "name": "赤坎区" },
+ { "code": "440803", "name": "霞山区" },
+ { "code": "440804", "name": "坡头区" },
+ { "code": "440811", "name": "麻章区" },
+ { "code": "440823", "name": "遂溪县" },
+ { "code": "440825", "name": "徐闻县" },
+ { "code": "440881", "name": "廉江市" },
+ { "code": "440882", "name": "雷州市" },
+ { "code": "440883", "name": "吴川市" }
+ ]
+ },
+ {
+ "code": "4409",
+ "name": "茂名市",
+ "children": [
+ { "code": "440902", "name": "茂南区" },
+ { "code": "440904", "name": "电白区" },
+ { "code": "440981", "name": "高州市" },
+ { "code": "440982", "name": "化州市" },
+ { "code": "440983", "name": "信宜市" }
+ ]
+ },
+ {
+ "code": "4412",
+ "name": "肇庆市",
+ "children": [
+ { "code": "441202", "name": "端州区" },
+ { "code": "441203", "name": "鼎湖区" },
+ { "code": "441204", "name": "高要区" },
+ { "code": "441223", "name": "广宁县" },
+ { "code": "441224", "name": "怀集县" },
+ { "code": "441225", "name": "封开县" },
+ { "code": "441226", "name": "德庆县" },
+ { "code": "441284", "name": "四会市" }
+ ]
+ },
+ {
+ "code": "4413",
+ "name": "惠州市",
+ "children": [
+ { "code": "441302", "name": "惠城区" },
+ { "code": "441303", "name": "惠阳区" },
+ { "code": "441322", "name": "博罗县" },
+ { "code": "441323", "name": "惠东县" },
+ { "code": "441324", "name": "龙门县" }
+ ]
+ },
+ {
+ "code": "4414",
+ "name": "梅州市",
+ "children": [
+ { "code": "441402", "name": "梅江区" },
+ { "code": "441403", "name": "梅县区" },
+ { "code": "441422", "name": "大埔县" },
+ { "code": "441423", "name": "丰顺县" },
+ { "code": "441424", "name": "五华县" },
+ { "code": "441426", "name": "平远县" },
+ { "code": "441427", "name": "蕉岭县" },
+ { "code": "441481", "name": "兴宁市" }
+ ]
+ },
+ {
+ "code": "4415",
+ "name": "汕尾市",
+ "children": [
+ { "code": "441502", "name": "城区" },
+ { "code": "441521", "name": "海丰县" },
+ { "code": "441523", "name": "陆河县" },
+ { "code": "441581", "name": "陆丰市" }
+ ]
+ },
+ {
+ "code": "4416",
+ "name": "河源市",
+ "children": [
+ { "code": "441602", "name": "源城区" },
+ { "code": "441621", "name": "紫金县" },
+ { "code": "441622", "name": "龙川县" },
+ { "code": "441623", "name": "连平县" },
+ { "code": "441624", "name": "和平县" },
+ { "code": "441625", "name": "东源县" }
+ ]
+ },
+ {
+ "code": "4417",
+ "name": "阳江市",
+ "children": [
+ { "code": "441702", "name": "江城区" },
+ { "code": "441704", "name": "阳东区" },
+ { "code": "441721", "name": "阳西县" },
+ { "code": "441781", "name": "阳春市" }
+ ]
+ },
+ {
+ "code": "4418",
+ "name": "清远市",
+ "children": [
+ { "code": "441802", "name": "清城区" },
+ { "code": "441803", "name": "清新区" },
+ { "code": "441821", "name": "佛冈县" },
+ { "code": "441823", "name": "阳山县" },
+ { "code": "441825", "name": "连山壮族瑶族自治县" },
+ { "code": "441826", "name": "连南瑶族自治县" },
+ { "code": "441881", "name": "英德市" },
+ { "code": "441882", "name": "连州市" }
+ ]
+ },
+ {
+ "code": "4419",
+ "name": "东莞市",
+ "children": [
+ { "code": "441900003", "name": "东城街道" },
+ { "code": "441900004", "name": "南城街道" },
+ { "code": "441900005", "name": "万江街道" },
+ { "code": "441900006", "name": "莞城街道" },
+ { "code": "441900101", "name": "石碣镇" },
+ { "code": "441900102", "name": "石龙镇" },
+ { "code": "441900103", "name": "茶山镇" },
+ { "code": "441900104", "name": "石排镇" },
+ { "code": "441900105", "name": "企石镇" },
+ { "code": "441900106", "name": "横沥镇" },
+ { "code": "441900107", "name": "桥头镇" },
+ { "code": "441900108", "name": "谢岗镇" },
+ { "code": "441900109", "name": "东坑镇" },
+ { "code": "441900110", "name": "常平镇" },
+ { "code": "441900111", "name": "寮步镇" },
+ { "code": "441900112", "name": "樟木头镇" },
+ { "code": "441900113", "name": "大朗镇" },
+ { "code": "441900114", "name": "黄江镇" },
+ { "code": "441900115", "name": "清溪镇" },
+ { "code": "441900116", "name": "塘厦镇" },
+ { "code": "441900117", "name": "凤岗镇" },
+ { "code": "441900118", "name": "大岭山镇" },
+ { "code": "441900119", "name": "长安镇" },
+ { "code": "441900121", "name": "虎门镇" },
+ { "code": "441900122", "name": "厚街镇" },
+ { "code": "441900123", "name": "沙田镇" },
+ { "code": "441900124", "name": "道滘镇" },
+ { "code": "441900125", "name": "洪梅镇" },
+ { "code": "441900126", "name": "麻涌镇" },
+ { "code": "441900127", "name": "望牛墩镇" },
+ { "code": "441900128", "name": "中堂镇" },
+ { "code": "441900129", "name": "高埗镇" },
+ { "code": "441900401", "name": "松山湖" },
+ { "code": "441900402", "name": "东莞港" },
+ { "code": "441900403", "name": "东莞生态园" }
+ ]
+ },
+ {
+ "code": "4420",
+ "name": "中山市",
+ "children": [
+ { "code": "442000001", "name": "石岐街道" },
+ { "code": "442000002", "name": "东区街道" },
+ { "code": "442000003", "name": "中山港街道" },
+ { "code": "442000004", "name": "西区街道" },
+ { "code": "442000005", "name": "南区街道" },
+ { "code": "442000006", "name": "五桂山街道" },
+ { "code": "442000100", "name": "小榄镇" },
+ { "code": "442000101", "name": "黄圃镇" },
+ { "code": "442000102", "name": "民众镇" },
+ { "code": "442000103", "name": "东凤镇" },
+ { "code": "442000104", "name": "东升镇" },
+ { "code": "442000105", "name": "古镇镇" },
+ { "code": "442000106", "name": "沙溪镇" },
+ { "code": "442000107", "name": "坦洲镇" },
+ { "code": "442000108", "name": "港口镇" },
+ { "code": "442000109", "name": "三角镇" },
+ { "code": "442000110", "name": "横栏镇" },
+ { "code": "442000111", "name": "南头镇" },
+ { "code": "442000112", "name": "阜沙镇" },
+ { "code": "442000113", "name": "南朗镇" },
+ { "code": "442000114", "name": "三乡镇" },
+ { "code": "442000115", "name": "板芙镇" },
+ { "code": "442000116", "name": "大涌镇" },
+ { "code": "442000117", "name": "神湾镇" }
+ ]
+ },
+ {
+ "code": "4451",
+ "name": "潮州市",
+ "children": [
+ { "code": "445102", "name": "湘桥区" },
+ { "code": "445103", "name": "潮安区" },
+ { "code": "445122", "name": "饶平县" }
+ ]
+ },
+ {
+ "code": "4452",
+ "name": "揭阳市",
+ "children": [
+ { "code": "445202", "name": "榕城区" },
+ { "code": "445203", "name": "揭东区" },
+ { "code": "445222", "name": "揭西县" },
+ { "code": "445224", "name": "惠来县" },
+ { "code": "445281", "name": "普宁市" }
+ ]
+ },
+ {
+ "code": "4453",
+ "name": "云浮市",
+ "children": [
+ { "code": "445302", "name": "云城区" },
+ { "code": "445303", "name": "云安区" },
+ { "code": "445321", "name": "新兴县" },
+ { "code": "445322", "name": "郁南县" },
+ { "code": "445381", "name": "罗定市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "45",
+ "name": "广西壮族自治区",
+ "children": [
+ {
+ "code": "4501",
+ "name": "南宁市",
+ "children": [
+ { "code": "450102", "name": "兴宁区" },
+ { "code": "450103", "name": "青秀区" },
+ { "code": "450105", "name": "江南区" },
+ { "code": "450107", "name": "西乡塘区" },
+ { "code": "450108", "name": "良庆区" },
+ { "code": "450109", "name": "邕宁区" },
+ { "code": "450110", "name": "武鸣区" },
+ { "code": "450123", "name": "隆安县" },
+ { "code": "450124", "name": "马山县" },
+ { "code": "450125", "name": "上林县" },
+ { "code": "450126", "name": "宾阳县" },
+ { "code": "450127", "name": "横县" }
+ ]
+ },
+ {
+ "code": "4502",
+ "name": "柳州市",
+ "children": [
+ { "code": "450202", "name": "城中区" },
+ { "code": "450203", "name": "鱼峰区" },
+ { "code": "450204", "name": "柳南区" },
+ { "code": "450205", "name": "柳北区" },
+ { "code": "450206", "name": "柳江区" },
+ { "code": "450222", "name": "柳城县" },
+ { "code": "450223", "name": "鹿寨县" },
+ { "code": "450224", "name": "融安县" },
+ { "code": "450225", "name": "融水苗族自治县" },
+ { "code": "450226", "name": "三江侗族自治县" }
+ ]
+ },
+ {
+ "code": "4503",
+ "name": "桂林市",
+ "children": [
+ { "code": "450302", "name": "秀峰区" },
+ { "code": "450303", "name": "叠彩区" },
+ { "code": "450304", "name": "象山区" },
+ { "code": "450305", "name": "七星区" },
+ { "code": "450311", "name": "雁山区" },
+ { "code": "450312", "name": "临桂区" },
+ { "code": "450321", "name": "阳朔县" },
+ { "code": "450323", "name": "灵川县" },
+ { "code": "450324", "name": "全州县" },
+ { "code": "450325", "name": "兴安县" },
+ { "code": "450326", "name": "永福县" },
+ { "code": "450327", "name": "灌阳县" },
+ { "code": "450328", "name": "龙胜各族自治县" },
+ { "code": "450329", "name": "资源县" },
+ { "code": "450330", "name": "平乐县" },
+ { "code": "450332", "name": "恭城瑶族自治县" },
+ { "code": "450381", "name": "荔浦市" }
+ ]
+ },
+ {
+ "code": "4504",
+ "name": "梧州市",
+ "children": [
+ { "code": "450403", "name": "万秀区" },
+ { "code": "450405", "name": "长洲区" },
+ { "code": "450406", "name": "龙圩区" },
+ { "code": "450421", "name": "苍梧县" },
+ { "code": "450422", "name": "藤县" },
+ { "code": "450423", "name": "蒙山县" },
+ { "code": "450481", "name": "岑溪市" }
+ ]
+ },
+ {
+ "code": "4505",
+ "name": "北海市",
+ "children": [
+ { "code": "450502", "name": "海城区" },
+ { "code": "450503", "name": "银海区" },
+ { "code": "450512", "name": "铁山港区" },
+ { "code": "450521", "name": "合浦县" }
+ ]
+ },
+ {
+ "code": "4506",
+ "name": "防城港市",
+ "children": [
+ { "code": "450602", "name": "港口区" },
+ { "code": "450603", "name": "防城区" },
+ { "code": "450621", "name": "上思县" },
+ { "code": "450681", "name": "东兴市" }
+ ]
+ },
+ {
+ "code": "4507",
+ "name": "钦州市",
+ "children": [
+ { "code": "450702", "name": "钦南区" },
+ { "code": "450703", "name": "钦北区" },
+ { "code": "450721", "name": "灵山县" },
+ { "code": "450722", "name": "浦北县" }
+ ]
+ },
+ {
+ "code": "4508",
+ "name": "贵港市",
+ "children": [
+ { "code": "450802", "name": "港北区" },
+ { "code": "450803", "name": "港南区" },
+ { "code": "450804", "name": "覃塘区" },
+ { "code": "450821", "name": "平南县" },
+ { "code": "450881", "name": "桂平市" }
+ ]
+ },
+ {
+ "code": "4509",
+ "name": "玉林市",
+ "children": [
+ { "code": "450902", "name": "玉州区" },
+ { "code": "450903", "name": "福绵区" },
+ { "code": "450921", "name": "容县" },
+ { "code": "450922", "name": "陆川县" },
+ { "code": "450923", "name": "博白县" },
+ { "code": "450924", "name": "兴业县" },
+ { "code": "450981", "name": "北流市" }
+ ]
+ },
+ {
+ "code": "4510",
+ "name": "百色市",
+ "children": [
+ { "code": "451002", "name": "右江区" },
+ { "code": "451003", "name": "田阳区" },
+ { "code": "451022", "name": "田东县" },
+ { "code": "451023", "name": "平果县" },
+ { "code": "451024", "name": "德保县" },
+ { "code": "451026", "name": "那坡县" },
+ { "code": "451027", "name": "凌云县" },
+ { "code": "451028", "name": "乐业县" },
+ { "code": "451029", "name": "田林县" },
+ { "code": "451030", "name": "西林县" },
+ { "code": "451031", "name": "隆林各族自治县" },
+ { "code": "451081", "name": "靖西市" }
+ ]
+ },
+ {
+ "code": "4511",
+ "name": "贺州市",
+ "children": [
+ { "code": "451102", "name": "八步区" },
+ { "code": "451103", "name": "平桂区" },
+ { "code": "451121", "name": "昭平县" },
+ { "code": "451122", "name": "钟山县" },
+ { "code": "451123", "name": "富川瑶族自治县" }
+ ]
+ },
+ {
+ "code": "4512",
+ "name": "河池市",
+ "children": [
+ { "code": "451202", "name": "金城江区" },
+ { "code": "451203", "name": "宜州区" },
+ { "code": "451221", "name": "南丹县" },
+ { "code": "451222", "name": "天峨县" },
+ { "code": "451223", "name": "凤山县" },
+ { "code": "451224", "name": "东兰县" },
+ { "code": "451225", "name": "罗城仫佬族自治县" },
+ { "code": "451226", "name": "环江毛南族自治县" },
+ { "code": "451227", "name": "巴马瑶族自治县" },
+ { "code": "451228", "name": "都安瑶族自治县" },
+ { "code": "451229", "name": "大化瑶族自治县" }
+ ]
+ },
+ {
+ "code": "4513",
+ "name": "来宾市",
+ "children": [
+ { "code": "451302", "name": "兴宾区" },
+ { "code": "451321", "name": "忻城县" },
+ { "code": "451322", "name": "象州县" },
+ { "code": "451323", "name": "武宣县" },
+ { "code": "451324", "name": "金秀瑶族自治县" },
+ { "code": "451381", "name": "合山市" }
+ ]
+ },
+ {
+ "code": "4514",
+ "name": "崇左市",
+ "children": [
+ { "code": "451402", "name": "江州区" },
+ { "code": "451421", "name": "扶绥县" },
+ { "code": "451422", "name": "宁明县" },
+ { "code": "451423", "name": "龙州县" },
+ { "code": "451424", "name": "大新县" },
+ { "code": "451425", "name": "天等县" },
+ { "code": "451481", "name": "凭祥市" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "46",
+ "name": "海南省",
+ "children": [
+ {
+ "code": "4601",
+ "name": "海口市",
+ "children": [
+ { "code": "460105", "name": "秀英区" },
+ { "code": "460106", "name": "龙华区" },
+ { "code": "460107", "name": "琼山区" },
+ { "code": "460108", "name": "美兰区" }
+ ]
+ },
+ {
+ "code": "4602",
+ "name": "三亚市",
+ "children": [
+ { "code": "460202", "name": "海棠区" },
+ { "code": "460203", "name": "吉阳区" },
+ { "code": "460204", "name": "天涯区" },
+ { "code": "460205", "name": "崖州区" }
+ ]
+ },
+ {
+ "code": "4603",
+ "name": "三沙市",
+ "children": [
+ { "code": "460321", "name": "西沙群岛" },
+ { "code": "460322", "name": "南沙群岛" },
+ { "code": "460323", "name": "中沙群岛的岛礁及其海域" }
+ ]
+ },
+ {
+ "code": "4604",
+ "name": "儋州市",
+ "children": [
+ { "code": "460400100", "name": "那大镇" },
+ { "code": "460400101", "name": "和庆镇" },
+ { "code": "460400102", "name": "南丰镇" },
+ { "code": "460400103", "name": "大成镇" },
+ { "code": "460400104", "name": "雅星镇" },
+ { "code": "460400105", "name": "兰洋镇" },
+ { "code": "460400106", "name": "光村镇" },
+ { "code": "460400107", "name": "木棠镇" },
+ { "code": "460400108", "name": "海头镇" },
+ { "code": "460400109", "name": "峨蔓镇" },
+ { "code": "460400111", "name": "王五镇" },
+ { "code": "460400112", "name": "白马井镇" },
+ { "code": "460400113", "name": "中和镇" },
+ { "code": "460400114", "name": "排浦镇" },
+ { "code": "460400115", "name": "东成镇" },
+ { "code": "460400116", "name": "新州镇" },
+ { "code": "460400499", "name": "洋浦经济开发区" },
+ { "code": "460400500", "name": "华南热作学院" }
+ ]
+ },
+ {
+ "code": "4690",
+ "name": "省直辖县级行政区划",
+ "children": [
+ { "code": "469001", "name": "五指山市" },
+ { "code": "469002", "name": "琼海市" },
+ { "code": "469005", "name": "文昌市" },
+ { "code": "469006", "name": "万宁市" },
+ { "code": "469007", "name": "东方市" },
+ { "code": "469021", "name": "定安县" },
+ { "code": "469022", "name": "屯昌县" },
+ { "code": "469023", "name": "澄迈县" },
+ { "code": "469024", "name": "临高县" },
+ { "code": "469025", "name": "白沙黎族自治县" },
+ { "code": "469026", "name": "昌江黎族自治县" },
+ { "code": "469027", "name": "乐东黎族自治县" },
+ { "code": "469028", "name": "陵水黎族自治县" },
+ { "code": "469029", "name": "保亭黎族苗族自治县" },
+ { "code": "469030", "name": "琼中黎族苗族自治县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "50",
+ "name": "重庆市",
+ "children": [
+ {
+ "code": "5001",
+ "name": "市辖区",
+ "children": [
+ { "code": "500101", "name": "万州区" },
+ { "code": "500102", "name": "涪陵区" },
+ { "code": "500103", "name": "渝中区" },
+ { "code": "500104", "name": "大渡口区" },
+ { "code": "500105", "name": "江北区" },
+ { "code": "500106", "name": "沙坪坝区" },
+ { "code": "500107", "name": "九龙坡区" },
+ { "code": "500108", "name": "南岸区" },
+ { "code": "500109", "name": "北碚区" },
+ { "code": "500110", "name": "綦江区" },
+ { "code": "500111", "name": "大足区" },
+ { "code": "500112", "name": "渝北区" },
+ { "code": "500113", "name": "巴南区" },
+ { "code": "500114", "name": "黔江区" },
+ { "code": "500115", "name": "长寿区" },
+ { "code": "500116", "name": "江津区" },
+ { "code": "500117", "name": "合川区" },
+ { "code": "500118", "name": "永川区" },
+ { "code": "500119", "name": "南川区" },
+ { "code": "500120", "name": "璧山区" },
+ { "code": "500151", "name": "铜梁区" },
+ { "code": "500152", "name": "潼南区" },
+ { "code": "500153", "name": "荣昌区" },
+ { "code": "500154", "name": "开州区" },
+ { "code": "500155", "name": "梁平区" },
+ { "code": "500156", "name": "武隆区" }
+ ]
+ },
+ {
+ "code": "5002",
+ "name": "县",
+ "children": [
+ { "code": "500229", "name": "城口县" },
+ { "code": "500230", "name": "丰都县" },
+ { "code": "500231", "name": "垫江县" },
+ { "code": "500233", "name": "忠县" },
+ { "code": "500235", "name": "云阳县" },
+ { "code": "500236", "name": "奉节县" },
+ { "code": "500237", "name": "巫山县" },
+ { "code": "500238", "name": "巫溪县" },
+ { "code": "500240", "name": "石柱土家族自治县" },
+ { "code": "500241", "name": "秀山土家族苗族自治县" },
+ { "code": "500242", "name": "酉阳土家族苗族自治县" },
+ { "code": "500243", "name": "彭水苗族土家族自治县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "51",
+ "name": "四川省",
+ "children": [
+ {
+ "code": "5101",
+ "name": "成都市",
+ "children": [
+ { "code": "510104", "name": "锦江区" },
+ { "code": "510105", "name": "青羊区" },
+ { "code": "510106", "name": "金牛区" },
+ { "code": "510107", "name": "武侯区" },
+ { "code": "510108", "name": "成华区" },
+ { "code": "510112", "name": "龙泉驿区" },
+ { "code": "510113", "name": "青白江区" },
+ { "code": "510114", "name": "新都区" },
+ { "code": "510115", "name": "温江区" },
+ { "code": "510116", "name": "双流区" },
+ { "code": "510117", "name": "郫都区" },
+ { "code": "510121", "name": "金堂县" },
+ { "code": "510129", "name": "大邑县" },
+ { "code": "510131", "name": "蒲江县" },
+ { "code": "510132", "name": "新津县" },
+ { "code": "510181", "name": "都江堰市" },
+ { "code": "510182", "name": "彭州市" },
+ { "code": "510183", "name": "邛崃市" },
+ { "code": "510184", "name": "崇州市" },
+ { "code": "510185", "name": "简阳市" }
+ ]
+ },
+ {
+ "code": "5103",
+ "name": "自贡市",
+ "children": [
+ { "code": "510302", "name": "自流井区" },
+ { "code": "510303", "name": "贡井区" },
+ { "code": "510304", "name": "大安区" },
+ { "code": "510311", "name": "沿滩区" },
+ { "code": "510321", "name": "荣县" },
+ { "code": "510322", "name": "富顺县" }
+ ]
+ },
+ {
+ "code": "5104",
+ "name": "攀枝花市",
+ "children": [
+ { "code": "510402", "name": "东区" },
+ { "code": "510403", "name": "西区" },
+ { "code": "510411", "name": "仁和区" },
+ { "code": "510421", "name": "米易县" },
+ { "code": "510422", "name": "盐边县" }
+ ]
+ },
+ {
+ "code": "5105",
+ "name": "泸州市",
+ "children": [
+ { "code": "510502", "name": "江阳区" },
+ { "code": "510503", "name": "纳溪区" },
+ { "code": "510504", "name": "龙马潭区" },
+ { "code": "510521", "name": "泸县" },
+ { "code": "510522", "name": "合江县" },
+ { "code": "510524", "name": "叙永县" },
+ { "code": "510525", "name": "古蔺县" }
+ ]
+ },
+ {
+ "code": "5106",
+ "name": "德阳市",
+ "children": [
+ { "code": "510603", "name": "旌阳区" },
+ { "code": "510604", "name": "罗江区" },
+ { "code": "510623", "name": "中江县" },
+ { "code": "510681", "name": "广汉市" },
+ { "code": "510682", "name": "什邡市" },
+ { "code": "510683", "name": "绵竹市" }
+ ]
+ },
+ {
+ "code": "5107",
+ "name": "绵阳市",
+ "children": [
+ { "code": "510703", "name": "涪城区" },
+ { "code": "510704", "name": "游仙区" },
+ { "code": "510705", "name": "安州区" },
+ { "code": "510722", "name": "三台县" },
+ { "code": "510723", "name": "盐亭县" },
+ { "code": "510725", "name": "梓潼县" },
+ { "code": "510726", "name": "北川羌族自治县" },
+ { "code": "510727", "name": "平武县" },
+ { "code": "510781", "name": "江油市" }
+ ]
+ },
+ {
+ "code": "5108",
+ "name": "广元市",
+ "children": [
+ { "code": "510802", "name": "利州区" },
+ { "code": "510811", "name": "昭化区" },
+ { "code": "510812", "name": "朝天区" },
+ { "code": "510821", "name": "旺苍县" },
+ { "code": "510822", "name": "青川县" },
+ { "code": "510823", "name": "剑阁县" },
+ { "code": "510824", "name": "苍溪县" }
+ ]
+ },
+ {
+ "code": "5109",
+ "name": "遂宁市",
+ "children": [
+ { "code": "510903", "name": "船山区" },
+ { "code": "510904", "name": "安居区" },
+ { "code": "510921", "name": "蓬溪县" },
+ { "code": "510923", "name": "大英县" },
+ { "code": "510981", "name": "射洪市" }
+ ]
+ },
+ {
+ "code": "5110",
+ "name": "内江市",
+ "children": [
+ { "code": "511002", "name": "市中区" },
+ { "code": "511011", "name": "东兴区" },
+ { "code": "511024", "name": "威远县" },
+ { "code": "511025", "name": "资中县" },
+ { "code": "511071", "name": "内江经济开发区" },
+ { "code": "511083", "name": "隆昌市" }
+ ]
+ },
+ {
+ "code": "5111",
+ "name": "乐山市",
+ "children": [
+ { "code": "511102", "name": "市中区" },
+ { "code": "511111", "name": "沙湾区" },
+ { "code": "511112", "name": "五通桥区" },
+ { "code": "511113", "name": "金口河区" },
+ { "code": "511123", "name": "犍为县" },
+ { "code": "511124", "name": "井研县" },
+ { "code": "511126", "name": "夹江县" },
+ { "code": "511129", "name": "沐川县" },
+ { "code": "511132", "name": "峨边彝族自治县" },
+ { "code": "511133", "name": "马边彝族自治县" },
+ { "code": "511181", "name": "峨眉山市" }
+ ]
+ },
+ {
+ "code": "5113",
+ "name": "南充市",
+ "children": [
+ { "code": "511302", "name": "顺庆区" },
+ { "code": "511303", "name": "高坪区" },
+ { "code": "511304", "name": "嘉陵区" },
+ { "code": "511321", "name": "南部县" },
+ { "code": "511322", "name": "营山县" },
+ { "code": "511323", "name": "蓬安县" },
+ { "code": "511324", "name": "仪陇县" },
+ { "code": "511325", "name": "西充县" },
+ { "code": "511381", "name": "阆中市" }
+ ]
+ },
+ {
+ "code": "5114",
+ "name": "眉山市",
+ "children": [
+ { "code": "511402", "name": "东坡区" },
+ { "code": "511403", "name": "彭山区" },
+ { "code": "511421", "name": "仁寿县" },
+ { "code": "511423", "name": "洪雅县" },
+ { "code": "511424", "name": "丹棱县" },
+ { "code": "511425", "name": "青神县" }
+ ]
+ },
+ {
+ "code": "5115",
+ "name": "宜宾市",
+ "children": [
+ { "code": "511502", "name": "翠屏区" },
+ { "code": "511503", "name": "南溪区" },
+ { "code": "511504", "name": "叙州区" },
+ { "code": "511523", "name": "江安县" },
+ { "code": "511524", "name": "长宁县" },
+ { "code": "511525", "name": "高县" },
+ { "code": "511526", "name": "珙县" },
+ { "code": "511527", "name": "筠连县" },
+ { "code": "511528", "name": "兴文县" },
+ { "code": "511529", "name": "屏山县" }
+ ]
+ },
+ {
+ "code": "5116",
+ "name": "广安市",
+ "children": [
+ { "code": "511602", "name": "广安区" },
+ { "code": "511603", "name": "前锋区" },
+ { "code": "511621", "name": "岳池县" },
+ { "code": "511622", "name": "武胜县" },
+ { "code": "511623", "name": "邻水县" },
+ { "code": "511681", "name": "华蓥市" }
+ ]
+ },
+ {
+ "code": "5117",
+ "name": "达州市",
+ "children": [
+ { "code": "511702", "name": "通川区" },
+ { "code": "511703", "name": "达川区" },
+ { "code": "511722", "name": "宣汉县" },
+ { "code": "511723", "name": "开江县" },
+ { "code": "511724", "name": "大竹县" },
+ { "code": "511725", "name": "渠县" },
+ { "code": "511771", "name": "达州经济开发区" },
+ { "code": "511781", "name": "万源市" }
+ ]
+ },
+ {
+ "code": "5118",
+ "name": "雅安市",
+ "children": [
+ { "code": "511802", "name": "雨城区" },
+ { "code": "511803", "name": "名山区" },
+ { "code": "511822", "name": "荥经县" },
+ { "code": "511823", "name": "汉源县" },
+ { "code": "511824", "name": "石棉县" },
+ { "code": "511825", "name": "天全县" },
+ { "code": "511826", "name": "芦山县" },
+ { "code": "511827", "name": "宝兴县" }
+ ]
+ },
+ {
+ "code": "5119",
+ "name": "巴中市",
+ "children": [
+ { "code": "511902", "name": "巴州区" },
+ { "code": "511903", "name": "恩阳区" },
+ { "code": "511921", "name": "通江县" },
+ { "code": "511922", "name": "南江县" },
+ { "code": "511923", "name": "平昌县" },
+ { "code": "511971", "name": "巴中经济开发区" }
+ ]
+ },
+ {
+ "code": "5120",
+ "name": "资阳市",
+ "children": [
+ { "code": "512002", "name": "雁江区" },
+ { "code": "512021", "name": "安岳县" },
+ { "code": "512022", "name": "乐至县" }
+ ]
+ },
+ {
+ "code": "5132",
+ "name": "阿坝藏族羌族自治州",
+ "children": [
+ { "code": "513201", "name": "马尔康市" },
+ { "code": "513221", "name": "汶川县" },
+ { "code": "513222", "name": "理县" },
+ { "code": "513223", "name": "茂县" },
+ { "code": "513224", "name": "松潘县" },
+ { "code": "513225", "name": "九寨沟县" },
+ { "code": "513226", "name": "金川县" },
+ { "code": "513227", "name": "小金县" },
+ { "code": "513228", "name": "黑水县" },
+ { "code": "513230", "name": "壤塘县" },
+ { "code": "513231", "name": "阿坝县" },
+ { "code": "513232", "name": "若尔盖县" },
+ { "code": "513233", "name": "红原县" }
+ ]
+ },
+ {
+ "code": "5133",
+ "name": "甘孜藏族自治州",
+ "children": [
+ { "code": "513301", "name": "康定市" },
+ { "code": "513322", "name": "泸定县" },
+ { "code": "513323", "name": "丹巴县" },
+ { "code": "513324", "name": "九龙县" },
+ { "code": "513325", "name": "雅江县" },
+ { "code": "513326", "name": "道孚县" },
+ { "code": "513327", "name": "炉霍县" },
+ { "code": "513328", "name": "甘孜县" },
+ { "code": "513329", "name": "新龙县" },
+ { "code": "513330", "name": "德格县" },
+ { "code": "513331", "name": "白玉县" },
+ { "code": "513332", "name": "石渠县" },
+ { "code": "513333", "name": "色达县" },
+ { "code": "513334", "name": "理塘县" },
+ { "code": "513335", "name": "巴塘县" },
+ { "code": "513336", "name": "乡城县" },
+ { "code": "513337", "name": "稻城县" },
+ { "code": "513338", "name": "得荣县" }
+ ]
+ },
+ {
+ "code": "5134",
+ "name": "凉山彝族自治州",
+ "children": [
+ { "code": "513401", "name": "西昌市" },
+ { "code": "513422", "name": "木里藏族自治县" },
+ { "code": "513423", "name": "盐源县" },
+ { "code": "513424", "name": "德昌县" },
+ { "code": "513425", "name": "会理县" },
+ { "code": "513426", "name": "会东县" },
+ { "code": "513427", "name": "宁南县" },
+ { "code": "513428", "name": "普格县" },
+ { "code": "513429", "name": "布拖县" },
+ { "code": "513430", "name": "金阳县" },
+ { "code": "513431", "name": "昭觉县" },
+ { "code": "513432", "name": "喜德县" },
+ { "code": "513433", "name": "冕宁县" },
+ { "code": "513434", "name": "越西县" },
+ { "code": "513435", "name": "甘洛县" },
+ { "code": "513436", "name": "美姑县" },
+ { "code": "513437", "name": "雷波县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "52",
+ "name": "贵州省",
+ "children": [
+ {
+ "code": "5201",
+ "name": "贵阳市",
+ "children": [
+ { "code": "520102", "name": "南明区" },
+ { "code": "520103", "name": "云岩区" },
+ { "code": "520111", "name": "花溪区" },
+ { "code": "520112", "name": "乌当区" },
+ { "code": "520113", "name": "白云区" },
+ { "code": "520115", "name": "观山湖区" },
+ { "code": "520121", "name": "开阳县" },
+ { "code": "520122", "name": "息烽县" },
+ { "code": "520123", "name": "修文县" },
+ { "code": "520181", "name": "清镇市" }
+ ]
+ },
+ {
+ "code": "5202",
+ "name": "六盘水市",
+ "children": [
+ { "code": "520201", "name": "钟山区" },
+ { "code": "520203", "name": "六枝特区" },
+ { "code": "520221", "name": "水城县" },
+ { "code": "520281", "name": "盘州市" }
+ ]
+ },
+ {
+ "code": "5203",
+ "name": "遵义市",
+ "children": [
+ { "code": "520302", "name": "红花岗区" },
+ { "code": "520303", "name": "汇川区" },
+ { "code": "520304", "name": "播州区" },
+ { "code": "520322", "name": "桐梓县" },
+ { "code": "520323", "name": "绥阳县" },
+ { "code": "520324", "name": "正安县" },
+ { "code": "520325", "name": "道真仡佬族苗族自治县" },
+ { "code": "520326", "name": "务川仡佬族苗族自治县" },
+ { "code": "520327", "name": "凤冈县" },
+ { "code": "520328", "name": "湄潭县" },
+ { "code": "520329", "name": "余庆县" },
+ { "code": "520330", "name": "习水县" },
+ { "code": "520381", "name": "赤水市" },
+ { "code": "520382", "name": "仁怀市" }
+ ]
+ },
+ {
+ "code": "5204",
+ "name": "安顺市",
+ "children": [
+ { "code": "520402", "name": "西秀区" },
+ { "code": "520403", "name": "平坝区" },
+ { "code": "520422", "name": "普定县" },
+ { "code": "520423", "name": "镇宁布依族苗族自治县" },
+ { "code": "520424", "name": "关岭布依族苗族自治县" },
+ { "code": "520425", "name": "紫云苗族布依族自治县" }
+ ]
+ },
+ {
+ "code": "5205",
+ "name": "毕节市",
+ "children": [
+ { "code": "520502", "name": "七星关区" },
+ { "code": "520521", "name": "大方县" },
+ { "code": "520522", "name": "黔西县" },
+ { "code": "520523", "name": "金沙县" },
+ { "code": "520524", "name": "织金县" },
+ { "code": "520525", "name": "纳雍县" },
+ { "code": "520526", "name": "威宁彝族回族苗族自治县" },
+ { "code": "520527", "name": "赫章县" }
+ ]
+ },
+ {
+ "code": "5206",
+ "name": "铜仁市",
+ "children": [
+ { "code": "520602", "name": "碧江区" },
+ { "code": "520603", "name": "万山区" },
+ { "code": "520621", "name": "江口县" },
+ { "code": "520622", "name": "玉屏侗族自治县" },
+ { "code": "520623", "name": "石阡县" },
+ { "code": "520624", "name": "思南县" },
+ { "code": "520625", "name": "印江土家族苗族自治县" },
+ { "code": "520626", "name": "德江县" },
+ { "code": "520627", "name": "沿河土家族自治县" },
+ { "code": "520628", "name": "松桃苗族自治县" }
+ ]
+ },
+ {
+ "code": "5223",
+ "name": "黔西南布依族苗族自治州",
+ "children": [
+ { "code": "522301", "name": "兴义市" },
+ { "code": "522302", "name": "兴仁市" },
+ { "code": "522323", "name": "普安县" },
+ { "code": "522324", "name": "晴隆县" },
+ { "code": "522325", "name": "贞丰县" },
+ { "code": "522326", "name": "望谟县" },
+ { "code": "522327", "name": "册亨县" },
+ { "code": "522328", "name": "安龙县" }
+ ]
+ },
+ {
+ "code": "5226",
+ "name": "黔东南苗族侗族自治州",
+ "children": [
+ { "code": "522601", "name": "凯里市" },
+ { "code": "522622", "name": "黄平县" },
+ { "code": "522623", "name": "施秉县" },
+ { "code": "522624", "name": "三穗县" },
+ { "code": "522625", "name": "镇远县" },
+ { "code": "522626", "name": "岑巩县" },
+ { "code": "522627", "name": "天柱县" },
+ { "code": "522628", "name": "锦屏县" },
+ { "code": "522629", "name": "剑河县" },
+ { "code": "522630", "name": "台江县" },
+ { "code": "522631", "name": "黎平县" },
+ { "code": "522632", "name": "榕江县" },
+ { "code": "522633", "name": "从江县" },
+ { "code": "522634", "name": "雷山县" },
+ { "code": "522635", "name": "麻江县" },
+ { "code": "522636", "name": "丹寨县" }
+ ]
+ },
+ {
+ "code": "5227",
+ "name": "黔南布依族苗族自治州",
+ "children": [
+ { "code": "522701", "name": "都匀市" },
+ { "code": "522702", "name": "福泉市" },
+ { "code": "522722", "name": "荔波县" },
+ { "code": "522723", "name": "贵定县" },
+ { "code": "522725", "name": "瓮安县" },
+ { "code": "522726", "name": "独山县" },
+ { "code": "522727", "name": "平塘县" },
+ { "code": "522728", "name": "罗甸县" },
+ { "code": "522729", "name": "长顺县" },
+ { "code": "522730", "name": "龙里县" },
+ { "code": "522731", "name": "惠水县" },
+ { "code": "522732", "name": "三都水族自治县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "53",
+ "name": "云南省",
+ "children": [
+ {
+ "code": "5301",
+ "name": "昆明市",
+ "children": [
+ { "code": "530102", "name": "五华区" },
+ { "code": "530103", "name": "盘龙区" },
+ { "code": "530111", "name": "官渡区" },
+ { "code": "530112", "name": "西山区" },
+ { "code": "530113", "name": "东川区" },
+ { "code": "530114", "name": "呈贡区" },
+ { "code": "530115", "name": "晋宁区" },
+ { "code": "530124", "name": "富民县" },
+ { "code": "530125", "name": "宜良县" },
+ { "code": "530126", "name": "石林彝族自治县" },
+ { "code": "530127", "name": "嵩明县" },
+ { "code": "530128", "name": "禄劝彝族苗族自治县" },
+ { "code": "530129", "name": "寻甸回族彝族自治县" },
+ { "code": "530181", "name": "安宁市" }
+ ]
+ },
+ {
+ "code": "5303",
+ "name": "曲靖市",
+ "children": [
+ { "code": "530302", "name": "麒麟区" },
+ { "code": "530303", "name": "沾益区" },
+ { "code": "530304", "name": "马龙区" },
+ { "code": "530322", "name": "陆良县" },
+ { "code": "530323", "name": "师宗县" },
+ { "code": "530324", "name": "罗平县" },
+ { "code": "530325", "name": "富源县" },
+ { "code": "530326", "name": "会泽县" },
+ { "code": "530381", "name": "宣威市" }
+ ]
+ },
+ {
+ "code": "5304",
+ "name": "玉溪市",
+ "children": [
+ { "code": "530402", "name": "红塔区" },
+ { "code": "530403", "name": "江川区" },
+ { "code": "530422", "name": "澄江县" },
+ { "code": "530423", "name": "通海县" },
+ { "code": "530424", "name": "华宁县" },
+ { "code": "530425", "name": "易门县" },
+ { "code": "530426", "name": "峨山彝族自治县" },
+ { "code": "530427", "name": "新平彝族傣族自治县" },
+ { "code": "530428", "name": "元江哈尼族彝族傣族自治县" }
+ ]
+ },
+ {
+ "code": "5305",
+ "name": "保山市",
+ "children": [
+ { "code": "530502", "name": "隆阳区" },
+ { "code": "530521", "name": "施甸县" },
+ { "code": "530523", "name": "龙陵县" },
+ { "code": "530524", "name": "昌宁县" },
+ { "code": "530581", "name": "腾冲市" }
+ ]
+ },
+ {
+ "code": "5306",
+ "name": "昭通市",
+ "children": [
+ { "code": "530602", "name": "昭阳区" },
+ { "code": "530621", "name": "鲁甸县" },
+ { "code": "530622", "name": "巧家县" },
+ { "code": "530623", "name": "盐津县" },
+ { "code": "530624", "name": "大关县" },
+ { "code": "530625", "name": "永善县" },
+ { "code": "530626", "name": "绥江县" },
+ { "code": "530627", "name": "镇雄县" },
+ { "code": "530628", "name": "彝良县" },
+ { "code": "530629", "name": "威信县" },
+ { "code": "530681", "name": "水富市" }
+ ]
+ },
+ {
+ "code": "5307",
+ "name": "丽江市",
+ "children": [
+ { "code": "530702", "name": "古城区" },
+ { "code": "530721", "name": "玉龙纳西族自治县" },
+ { "code": "530722", "name": "永胜县" },
+ { "code": "530723", "name": "华坪县" },
+ { "code": "530724", "name": "宁蒗彝族自治县" }
+ ]
+ },
+ {
+ "code": "5308",
+ "name": "普洱市",
+ "children": [
+ { "code": "530802", "name": "思茅区" },
+ { "code": "530821", "name": "宁洱哈尼族彝族自治县" },
+ { "code": "530822", "name": "墨江哈尼族自治县" },
+ { "code": "530823", "name": "景东彝族自治县" },
+ { "code": "530824", "name": "景谷傣族彝族自治县" },
+ { "code": "530825", "name": "镇沅彝族哈尼族拉祜族自治县" },
+ { "code": "530826", "name": "江城哈尼族彝族自治县" },
+ { "code": "530827", "name": "孟连傣族拉祜族佤族自治县" },
+ { "code": "530828", "name": "澜沧拉祜族自治县" },
+ { "code": "530829", "name": "西盟佤族自治县" }
+ ]
+ },
+ {
+ "code": "5309",
+ "name": "临沧市",
+ "children": [
+ { "code": "530902", "name": "临翔区" },
+ { "code": "530921", "name": "凤庆县" },
+ { "code": "530922", "name": "云县" },
+ { "code": "530923", "name": "永德县" },
+ { "code": "530924", "name": "镇康县" },
+ { "code": "530925", "name": "双江拉祜族佤族布朗族傣族自治县" },
+ { "code": "530926", "name": "耿马傣族佤族自治县" },
+ { "code": "530927", "name": "沧源佤族自治县" }
+ ]
+ },
+ {
+ "code": "5323",
+ "name": "楚雄彝族自治州",
+ "children": [
+ { "code": "532301", "name": "楚雄市" },
+ { "code": "532322", "name": "双柏县" },
+ { "code": "532323", "name": "牟定县" },
+ { "code": "532324", "name": "南华县" },
+ { "code": "532325", "name": "姚安县" },
+ { "code": "532326", "name": "大姚县" },
+ { "code": "532327", "name": "永仁县" },
+ { "code": "532328", "name": "元谋县" },
+ { "code": "532329", "name": "武定县" },
+ { "code": "532331", "name": "禄丰县" }
+ ]
+ },
+ {
+ "code": "5325",
+ "name": "红河哈尼族彝族自治州",
+ "children": [
+ { "code": "532501", "name": "个旧市" },
+ { "code": "532502", "name": "开远市" },
+ { "code": "532503", "name": "蒙自市" },
+ { "code": "532504", "name": "弥勒市" },
+ { "code": "532523", "name": "屏边苗族自治县" },
+ { "code": "532524", "name": "建水县" },
+ { "code": "532525", "name": "石屏县" },
+ { "code": "532527", "name": "泸西县" },
+ { "code": "532528", "name": "元阳县" },
+ { "code": "532529", "name": "红河县" },
+ { "code": "532530", "name": "金平苗族瑶族傣族自治县" },
+ { "code": "532531", "name": "绿春县" },
+ { "code": "532532", "name": "河口瑶族自治县" }
+ ]
+ },
+ {
+ "code": "5326",
+ "name": "文山壮族苗族自治州",
+ "children": [
+ { "code": "532601", "name": "文山市" },
+ { "code": "532622", "name": "砚山县" },
+ { "code": "532623", "name": "西畴县" },
+ { "code": "532624", "name": "麻栗坡县" },
+ { "code": "532625", "name": "马关县" },
+ { "code": "532626", "name": "丘北县" },
+ { "code": "532627", "name": "广南县" },
+ { "code": "532628", "name": "富宁县" }
+ ]
+ },
+ {
+ "code": "5328",
+ "name": "西双版纳傣族自治州",
+ "children": [
+ { "code": "532801", "name": "景洪市" },
+ { "code": "532822", "name": "勐海县" },
+ { "code": "532823", "name": "勐腊县" }
+ ]
+ },
+ {
+ "code": "5329",
+ "name": "大理白族自治州",
+ "children": [
+ { "code": "532901", "name": "大理市" },
+ { "code": "532922", "name": "漾濞彝族自治县" },
+ { "code": "532923", "name": "祥云县" },
+ { "code": "532924", "name": "宾川县" },
+ { "code": "532925", "name": "弥渡县" },
+ { "code": "532926", "name": "南涧彝族自治县" },
+ { "code": "532927", "name": "巍山彝族回族自治县" },
+ { "code": "532928", "name": "永平县" },
+ { "code": "532929", "name": "云龙县" },
+ { "code": "532930", "name": "洱源县" },
+ { "code": "532931", "name": "剑川县" },
+ { "code": "532932", "name": "鹤庆县" }
+ ]
+ },
+ {
+ "code": "5331",
+ "name": "德宏傣族景颇族自治州",
+ "children": [
+ { "code": "533102", "name": "瑞丽市" },
+ { "code": "533103", "name": "芒市" },
+ { "code": "533122", "name": "梁河县" },
+ { "code": "533123", "name": "盈江县" },
+ { "code": "533124", "name": "陇川县" }
+ ]
+ },
+ {
+ "code": "5333",
+ "name": "怒江傈僳族自治州",
+ "children": [
+ { "code": "533301", "name": "泸水市" },
+ { "code": "533323", "name": "福贡县" },
+ { "code": "533324", "name": "贡山独龙族怒族自治县" },
+ { "code": "533325", "name": "兰坪白族普米族自治县" }
+ ]
+ },
+ {
+ "code": "5334",
+ "name": "迪庆藏族自治州",
+ "children": [
+ { "code": "533401", "name": "香格里拉市" },
+ { "code": "533422", "name": "德钦县" },
+ { "code": "533423", "name": "维西傈僳族自治县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "54",
+ "name": "西藏自治区",
+ "children": [
+ {
+ "code": "5401",
+ "name": "拉萨市",
+ "children": [
+ { "code": "540102", "name": "城关区" },
+ { "code": "540103", "name": "堆龙德庆区" },
+ { "code": "540104", "name": "达孜区" },
+ { "code": "540121", "name": "林周县" },
+ { "code": "540122", "name": "当雄县" },
+ { "code": "540123", "name": "尼木县" },
+ { "code": "540124", "name": "曲水县" },
+ { "code": "540127", "name": "墨竹工卡县" },
+ { "code": "540171", "name": "格尔木藏青工业园区" },
+ { "code": "540172", "name": "拉萨经济技术开发区" },
+ { "code": "540173", "name": "西藏文化旅游创意园区" },
+ { "code": "540174", "name": "达孜工业园区" }
+ ]
+ },
+ {
+ "code": "5402",
+ "name": "日喀则市",
+ "children": [
+ { "code": "540202", "name": "桑珠孜区" },
+ { "code": "540221", "name": "南木林县" },
+ { "code": "540222", "name": "江孜县" },
+ { "code": "540223", "name": "定日县" },
+ { "code": "540224", "name": "萨迦县" },
+ { "code": "540225", "name": "拉孜县" },
+ { "code": "540226", "name": "昂仁县" },
+ { "code": "540227", "name": "谢通门县" },
+ { "code": "540228", "name": "白朗县" },
+ { "code": "540229", "name": "仁布县" },
+ { "code": "540230", "name": "康马县" },
+ { "code": "540231", "name": "定结县" },
+ { "code": "540232", "name": "仲巴县" },
+ { "code": "540233", "name": "亚东县" },
+ { "code": "540234", "name": "吉隆县" },
+ { "code": "540235", "name": "聂拉木县" },
+ { "code": "540236", "name": "萨嘎县" },
+ { "code": "540237", "name": "岗巴县" }
+ ]
+ },
+ {
+ "code": "5403",
+ "name": "昌都市",
+ "children": [
+ { "code": "540302", "name": "卡若区" },
+ { "code": "540321", "name": "江达县" },
+ { "code": "540322", "name": "贡觉县" },
+ { "code": "540323", "name": "类乌齐县" },
+ { "code": "540324", "name": "丁青县" },
+ { "code": "540325", "name": "察雅县" },
+ { "code": "540326", "name": "八宿县" },
+ { "code": "540327", "name": "左贡县" },
+ { "code": "540328", "name": "芒康县" },
+ { "code": "540329", "name": "洛隆县" },
+ { "code": "540330", "name": "边坝县" }
+ ]
+ },
+ {
+ "code": "5404",
+ "name": "林芝市",
+ "children": [
+ { "code": "540402", "name": "巴宜区" },
+ { "code": "540421", "name": "工布江达县" },
+ { "code": "540422", "name": "米林县" },
+ { "code": "540423", "name": "墨脱县" },
+ { "code": "540424", "name": "波密县" },
+ { "code": "540425", "name": "察隅县" },
+ { "code": "540426", "name": "朗县" }
+ ]
+ },
+ {
+ "code": "5405",
+ "name": "山南市",
+ "children": [
+ { "code": "540502", "name": "乃东区" },
+ { "code": "540521", "name": "扎囊县" },
+ { "code": "540522", "name": "贡嘎县" },
+ { "code": "540523", "name": "桑日县" },
+ { "code": "540524", "name": "琼结县" },
+ { "code": "540525", "name": "曲松县" },
+ { "code": "540526", "name": "措美县" },
+ { "code": "540527", "name": "洛扎县" },
+ { "code": "540528", "name": "加查县" },
+ { "code": "540529", "name": "隆子县" },
+ { "code": "540530", "name": "错那县" },
+ { "code": "540531", "name": "浪卡子县" }
+ ]
+ },
+ {
+ "code": "5406",
+ "name": "那曲市",
+ "children": [
+ { "code": "540602", "name": "色尼区" },
+ { "code": "540621", "name": "嘉黎县" },
+ { "code": "540622", "name": "比如县" },
+ { "code": "540623", "name": "聂荣县" },
+ { "code": "540624", "name": "安多县" },
+ { "code": "540625", "name": "申扎县" },
+ { "code": "540626", "name": "索县" },
+ { "code": "540627", "name": "班戈县" },
+ { "code": "540628", "name": "巴青县" },
+ { "code": "540629", "name": "尼玛县" },
+ { "code": "540630", "name": "双湖县" }
+ ]
+ },
+ {
+ "code": "5425",
+ "name": "阿里地区",
+ "children": [
+ { "code": "542521", "name": "普兰县" },
+ { "code": "542522", "name": "札达县" },
+ { "code": "542523", "name": "噶尔县" },
+ { "code": "542524", "name": "日土县" },
+ { "code": "542525", "name": "革吉县" },
+ { "code": "542526", "name": "改则县" },
+ { "code": "542527", "name": "措勤县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "61",
+ "name": "陕西省",
+ "children": [
+ {
+ "code": "6101",
+ "name": "西安市",
+ "children": [
+ { "code": "610102", "name": "新城区" },
+ { "code": "610103", "name": "碑林区" },
+ { "code": "610104", "name": "莲湖区" },
+ { "code": "610111", "name": "灞桥区" },
+ { "code": "610112", "name": "未央区" },
+ { "code": "610113", "name": "雁塔区" },
+ { "code": "610114", "name": "阎良区" },
+ { "code": "610115", "name": "临潼区" },
+ { "code": "610116", "name": "长安区" },
+ { "code": "610117", "name": "高陵区" },
+ { "code": "610118", "name": "鄠邑区" },
+ { "code": "610122", "name": "蓝田县" },
+ { "code": "610124", "name": "周至县" }
+ ]
+ },
+ {
+ "code": "6102",
+ "name": "铜川市",
+ "children": [
+ { "code": "610202", "name": "王益区" },
+ { "code": "610203", "name": "印台区" },
+ { "code": "610204", "name": "耀州区" },
+ { "code": "610222", "name": "宜君县" }
+ ]
+ },
+ {
+ "code": "6103",
+ "name": "宝鸡市",
+ "children": [
+ { "code": "610302", "name": "渭滨区" },
+ { "code": "610303", "name": "金台区" },
+ { "code": "610304", "name": "陈仓区" },
+ { "code": "610322", "name": "凤翔县" },
+ { "code": "610323", "name": "岐山县" },
+ { "code": "610324", "name": "扶风县" },
+ { "code": "610326", "name": "眉县" },
+ { "code": "610327", "name": "陇县" },
+ { "code": "610328", "name": "千阳县" },
+ { "code": "610329", "name": "麟游县" },
+ { "code": "610330", "name": "凤县" },
+ { "code": "610331", "name": "太白县" }
+ ]
+ },
+ {
+ "code": "6104",
+ "name": "咸阳市",
+ "children": [
+ { "code": "610402", "name": "秦都区" },
+ { "code": "610403", "name": "杨陵区" },
+ { "code": "610404", "name": "渭城区" },
+ { "code": "610422", "name": "三原县" },
+ { "code": "610423", "name": "泾阳县" },
+ { "code": "610424", "name": "乾县" },
+ { "code": "610425", "name": "礼泉县" },
+ { "code": "610426", "name": "永寿县" },
+ { "code": "610428", "name": "长武县" },
+ { "code": "610429", "name": "旬邑县" },
+ { "code": "610430", "name": "淳化县" },
+ { "code": "610431", "name": "武功县" },
+ { "code": "610481", "name": "兴平市" },
+ { "code": "610482", "name": "彬州市" }
+ ]
+ },
+ {
+ "code": "6105",
+ "name": "渭南市",
+ "children": [
+ { "code": "610502", "name": "临渭区" },
+ { "code": "610503", "name": "华州区" },
+ { "code": "610522", "name": "潼关县" },
+ { "code": "610523", "name": "大荔县" },
+ { "code": "610524", "name": "合阳县" },
+ { "code": "610525", "name": "澄城县" },
+ { "code": "610526", "name": "蒲城县" },
+ { "code": "610527", "name": "白水县" },
+ { "code": "610528", "name": "富平县" },
+ { "code": "610581", "name": "韩城市" },
+ { "code": "610582", "name": "华阴市" }
+ ]
+ },
+ {
+ "code": "6106",
+ "name": "延安市",
+ "children": [
+ { "code": "610602", "name": "宝塔区" },
+ { "code": "610603", "name": "安塞区" },
+ { "code": "610621", "name": "延长县" },
+ { "code": "610622", "name": "延川县" },
+ { "code": "610625", "name": "志丹县" },
+ { "code": "610626", "name": "吴起县" },
+ { "code": "610627", "name": "甘泉县" },
+ { "code": "610628", "name": "富县" },
+ { "code": "610629", "name": "洛川县" },
+ { "code": "610630", "name": "宜川县" },
+ { "code": "610631", "name": "黄龙县" },
+ { "code": "610632", "name": "黄陵县" },
+ { "code": "610681", "name": "子长市" }
+ ]
+ },
+ {
+ "code": "6107",
+ "name": "汉中市",
+ "children": [
+ { "code": "610702", "name": "汉台区" },
+ { "code": "610703", "name": "南郑区" },
+ { "code": "610722", "name": "城固县" },
+ { "code": "610723", "name": "洋县" },
+ { "code": "610724", "name": "西乡县" },
+ { "code": "610725", "name": "勉县" },
+ { "code": "610726", "name": "宁强县" },
+ { "code": "610727", "name": "略阳县" },
+ { "code": "610728", "name": "镇巴县" },
+ { "code": "610729", "name": "留坝县" },
+ { "code": "610730", "name": "佛坪县" }
+ ]
+ },
+ {
+ "code": "6108",
+ "name": "榆林市",
+ "children": [
+ { "code": "610802", "name": "榆阳区" },
+ { "code": "610803", "name": "横山区" },
+ { "code": "610822", "name": "府谷县" },
+ { "code": "610824", "name": "靖边县" },
+ { "code": "610825", "name": "定边县" },
+ { "code": "610826", "name": "绥德县" },
+ { "code": "610827", "name": "米脂县" },
+ { "code": "610828", "name": "佳县" },
+ { "code": "610829", "name": "吴堡县" },
+ { "code": "610830", "name": "清涧县" },
+ { "code": "610831", "name": "子洲县" },
+ { "code": "610881", "name": "神木市" }
+ ]
+ },
+ {
+ "code": "6109",
+ "name": "安康市",
+ "children": [
+ { "code": "610902", "name": "汉滨区" },
+ { "code": "610921", "name": "汉阴县" },
+ { "code": "610922", "name": "石泉县" },
+ { "code": "610923", "name": "宁陕县" },
+ { "code": "610924", "name": "紫阳县" },
+ { "code": "610925", "name": "岚皋县" },
+ { "code": "610926", "name": "平利县" },
+ { "code": "610927", "name": "镇坪县" },
+ { "code": "610928", "name": "旬阳县" },
+ { "code": "610929", "name": "白河县" }
+ ]
+ },
+ {
+ "code": "6110",
+ "name": "商洛市",
+ "children": [
+ { "code": "611002", "name": "商州区" },
+ { "code": "611021", "name": "洛南县" },
+ { "code": "611022", "name": "丹凤县" },
+ { "code": "611023", "name": "商南县" },
+ { "code": "611024", "name": "山阳县" },
+ { "code": "611025", "name": "镇安县" },
+ { "code": "611026", "name": "柞水县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "62",
+ "name": "甘肃省",
+ "children": [
+ {
+ "code": "6201",
+ "name": "兰州市",
+ "children": [
+ { "code": "620102", "name": "城关区" },
+ { "code": "620103", "name": "七里河区" },
+ { "code": "620104", "name": "西固区" },
+ { "code": "620105", "name": "安宁区" },
+ { "code": "620111", "name": "红古区" },
+ { "code": "620121", "name": "永登县" },
+ { "code": "620122", "name": "皋兰县" },
+ { "code": "620123", "name": "榆中县" },
+ { "code": "620171", "name": "兰州新区" }
+ ]
+ },
+ {
+ "code": "6202",
+ "name": "嘉峪关市",
+ "children": [
+ { "code": "620201100", "name": "新城镇" },
+ { "code": "620201101", "name": "峪泉镇" },
+ { "code": "620201102", "name": "文殊镇" },
+ { "code": "620201401", "name": "雄关区" },
+ { "code": "620201402", "name": "镜铁区" },
+ { "code": "620201403", "name": "长城区" }
+ ]
+ },
+ {
+ "code": "6203",
+ "name": "金昌市",
+ "children": [
+ { "code": "620302", "name": "金川区" },
+ { "code": "620321", "name": "永昌县" }
+ ]
+ },
+ {
+ "code": "6204",
+ "name": "白银市",
+ "children": [
+ { "code": "620402", "name": "白银区" },
+ { "code": "620403", "name": "平川区" },
+ { "code": "620421", "name": "靖远县" },
+ { "code": "620422", "name": "会宁县" },
+ { "code": "620423", "name": "景泰县" }
+ ]
+ },
+ {
+ "code": "6205",
+ "name": "天水市",
+ "children": [
+ { "code": "620502", "name": "秦州区" },
+ { "code": "620503", "name": "麦积区" },
+ { "code": "620521", "name": "清水县" },
+ { "code": "620522", "name": "秦安县" },
+ { "code": "620523", "name": "甘谷县" },
+ { "code": "620524", "name": "武山县" },
+ { "code": "620525", "name": "张家川回族自治县" }
+ ]
+ },
+ {
+ "code": "6206",
+ "name": "武威市",
+ "children": [
+ { "code": "620602", "name": "凉州区" },
+ { "code": "620621", "name": "民勤县" },
+ { "code": "620622", "name": "古浪县" },
+ { "code": "620623", "name": "天祝藏族自治县" }
+ ]
+ },
+ {
+ "code": "6207",
+ "name": "张掖市",
+ "children": [
+ { "code": "620702", "name": "甘州区" },
+ { "code": "620721", "name": "肃南裕固族自治县" },
+ { "code": "620722", "name": "民乐县" },
+ { "code": "620723", "name": "临泽县" },
+ { "code": "620724", "name": "高台县" },
+ { "code": "620725", "name": "山丹县" }
+ ]
+ },
+ {
+ "code": "6208",
+ "name": "平凉市",
+ "children": [
+ { "code": "620802", "name": "崆峒区" },
+ { "code": "620821", "name": "泾川县" },
+ { "code": "620822", "name": "灵台县" },
+ { "code": "620823", "name": "崇信县" },
+ { "code": "620825", "name": "庄浪县" },
+ { "code": "620826", "name": "静宁县" },
+ { "code": "620881", "name": "华亭市" }
+ ]
+ },
+ {
+ "code": "6209",
+ "name": "酒泉市",
+ "children": [
+ { "code": "620902", "name": "肃州区" },
+ { "code": "620921", "name": "金塔县" },
+ { "code": "620922", "name": "瓜州县" },
+ { "code": "620923", "name": "肃北蒙古族自治县" },
+ { "code": "620924", "name": "阿克塞哈萨克族自治县" },
+ { "code": "620981", "name": "玉门市" },
+ { "code": "620982", "name": "敦煌市" }
+ ]
+ },
+ {
+ "code": "6210",
+ "name": "庆阳市",
+ "children": [
+ { "code": "621002", "name": "西峰区" },
+ { "code": "621021", "name": "庆城县" },
+ { "code": "621022", "name": "环县" },
+ { "code": "621023", "name": "华池县" },
+ { "code": "621024", "name": "合水县" },
+ { "code": "621025", "name": "正宁县" },
+ { "code": "621026", "name": "宁县" },
+ { "code": "621027", "name": "镇原县" }
+ ]
+ },
+ {
+ "code": "6211",
+ "name": "定西市",
+ "children": [
+ { "code": "621102", "name": "安定区" },
+ { "code": "621121", "name": "通渭县" },
+ { "code": "621122", "name": "陇西县" },
+ { "code": "621123", "name": "渭源县" },
+ { "code": "621124", "name": "临洮县" },
+ { "code": "621125", "name": "漳县" },
+ { "code": "621126", "name": "岷县" }
+ ]
+ },
+ {
+ "code": "6212",
+ "name": "陇南市",
+ "children": [
+ { "code": "621202", "name": "武都区" },
+ { "code": "621221", "name": "成县" },
+ { "code": "621222", "name": "文县" },
+ { "code": "621223", "name": "宕昌县" },
+ { "code": "621224", "name": "康县" },
+ { "code": "621225", "name": "西和县" },
+ { "code": "621226", "name": "礼县" },
+ { "code": "621227", "name": "徽县" },
+ { "code": "621228", "name": "两当县" }
+ ]
+ },
+ {
+ "code": "6229",
+ "name": "临夏回族自治州",
+ "children": [
+ { "code": "622901", "name": "临夏市" },
+ { "code": "622921", "name": "临夏县" },
+ { "code": "622922", "name": "康乐县" },
+ { "code": "622923", "name": "永靖县" },
+ { "code": "622924", "name": "广河县" },
+ { "code": "622925", "name": "和政县" },
+ { "code": "622926", "name": "东乡族自治县" },
+ { "code": "622927", "name": "积石山保安族东乡族撒拉族自治县" }
+ ]
+ },
+ {
+ "code": "6230",
+ "name": "甘南藏族自治州",
+ "children": [
+ { "code": "623001", "name": "合作市" },
+ { "code": "623021", "name": "临潭县" },
+ { "code": "623022", "name": "卓尼县" },
+ { "code": "623023", "name": "舟曲县" },
+ { "code": "623024", "name": "迭部县" },
+ { "code": "623025", "name": "玛曲县" },
+ { "code": "623026", "name": "碌曲县" },
+ { "code": "623027", "name": "夏河县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "63",
+ "name": "青海省",
+ "children": [
+ {
+ "code": "6301",
+ "name": "西宁市",
+ "children": [
+ { "code": "630102", "name": "城东区" },
+ { "code": "630103", "name": "城中区" },
+ { "code": "630104", "name": "城西区" },
+ { "code": "630105", "name": "城北区" },
+ { "code": "630121", "name": "大通回族土族自治县" },
+ { "code": "630122", "name": "湟中县" },
+ { "code": "630123", "name": "湟源县" }
+ ]
+ },
+ {
+ "code": "6302",
+ "name": "海东市",
+ "children": [
+ { "code": "630202", "name": "乐都区" },
+ { "code": "630203", "name": "平安区" },
+ { "code": "630222", "name": "民和回族土族自治县" },
+ { "code": "630223", "name": "互助土族自治县" },
+ { "code": "630224", "name": "化隆回族自治县" },
+ { "code": "630225", "name": "循化撒拉族自治县" }
+ ]
+ },
+ {
+ "code": "6322",
+ "name": "海北藏族自治州",
+ "children": [
+ { "code": "632221", "name": "门源回族自治县" },
+ { "code": "632222", "name": "祁连县" },
+ { "code": "632223", "name": "海晏县" },
+ { "code": "632224", "name": "刚察县" }
+ ]
+ },
+ {
+ "code": "6323",
+ "name": "黄南藏族自治州",
+ "children": [
+ { "code": "632321", "name": "同仁县" },
+ { "code": "632322", "name": "尖扎县" },
+ { "code": "632323", "name": "泽库县" },
+ { "code": "632324", "name": "河南蒙古族自治县" }
+ ]
+ },
+ {
+ "code": "6325",
+ "name": "海南藏族自治州",
+ "children": [
+ { "code": "632521", "name": "共和县" },
+ { "code": "632522", "name": "同德县" },
+ { "code": "632523", "name": "贵德县" },
+ { "code": "632524", "name": "兴海县" },
+ { "code": "632525", "name": "贵南县" }
+ ]
+ },
+ {
+ "code": "6326",
+ "name": "果洛藏族自治州",
+ "children": [
+ { "code": "632621", "name": "玛沁县" },
+ { "code": "632622", "name": "班玛县" },
+ { "code": "632623", "name": "甘德县" },
+ { "code": "632624", "name": "达日县" },
+ { "code": "632625", "name": "久治县" },
+ { "code": "632626", "name": "玛多县" }
+ ]
+ },
+ {
+ "code": "6327",
+ "name": "玉树藏族自治州",
+ "children": [
+ { "code": "632701", "name": "玉树市" },
+ { "code": "632722", "name": "杂多县" },
+ { "code": "632723", "name": "称多县" },
+ { "code": "632724", "name": "治多县" },
+ { "code": "632725", "name": "囊谦县" },
+ { "code": "632726", "name": "曲麻莱县" }
+ ]
+ },
+ {
+ "code": "6328",
+ "name": "海西蒙古族藏族自治州",
+ "children": [
+ { "code": "632801", "name": "格尔木市" },
+ { "code": "632802", "name": "德令哈市" },
+ { "code": "632803", "name": "茫崖市" },
+ { "code": "632821", "name": "乌兰县" },
+ { "code": "632822", "name": "都兰县" },
+ { "code": "632823", "name": "天峻县" },
+ { "code": "632857", "name": "大柴旦行政委员会" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "64",
+ "name": "宁夏回族自治区",
+ "children": [
+ {
+ "code": "6401",
+ "name": "银川市",
+ "children": [
+ { "code": "640104", "name": "兴庆区" },
+ { "code": "640105", "name": "西夏区" },
+ { "code": "640106", "name": "金凤区" },
+ { "code": "640121", "name": "永宁县" },
+ { "code": "640122", "name": "贺兰县" },
+ { "code": "640181", "name": "灵武市" }
+ ]
+ },
+ {
+ "code": "6402",
+ "name": "石嘴山市",
+ "children": [
+ { "code": "640202", "name": "大武口区" },
+ { "code": "640205", "name": "惠农区" },
+ { "code": "640221", "name": "平罗县" }
+ ]
+ },
+ {
+ "code": "6403",
+ "name": "吴忠市",
+ "children": [
+ { "code": "640302", "name": "利通区" },
+ { "code": "640303", "name": "红寺堡区" },
+ { "code": "640323", "name": "盐池县" },
+ { "code": "640324", "name": "同心县" },
+ { "code": "640381", "name": "青铜峡市" }
+ ]
+ },
+ {
+ "code": "6404",
+ "name": "固原市",
+ "children": [
+ { "code": "640402", "name": "原州区" },
+ { "code": "640422", "name": "西吉县" },
+ { "code": "640423", "name": "隆德县" },
+ { "code": "640424", "name": "泾源县" },
+ { "code": "640425", "name": "彭阳县" }
+ ]
+ },
+ {
+ "code": "6405",
+ "name": "中卫市",
+ "children": [
+ { "code": "640502", "name": "沙坡头区" },
+ { "code": "640521", "name": "中宁县" },
+ { "code": "640522", "name": "海原县" }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "65",
+ "name": "新疆维吾尔自治区",
+ "children": [
+ {
+ "code": "6501",
+ "name": "乌鲁木齐市",
+ "children": [
+ { "code": "650102", "name": "天山区" },
+ { "code": "650103", "name": "沙依巴克区" },
+ { "code": "650104", "name": "新市区" },
+ { "code": "650105", "name": "水磨沟区" },
+ { "code": "650106", "name": "头屯河区" },
+ { "code": "650107", "name": "达坂城区" },
+ { "code": "650109", "name": "米东区" },
+ { "code": "650121", "name": "乌鲁木齐县" }
+ ]
+ },
+ {
+ "code": "6502",
+ "name": "克拉玛依市",
+ "children": [
+ { "code": "650202", "name": "独山子区" },
+ { "code": "650203", "name": "克拉玛依区" },
+ { "code": "650204", "name": "白碱滩区" },
+ { "code": "650205", "name": "乌尔禾区" }
+ ]
+ },
+ {
+ "code": "6504",
+ "name": "吐鲁番市",
+ "children": [
+ { "code": "650402", "name": "高昌区" },
+ { "code": "650421", "name": "鄯善县" },
+ { "code": "650422", "name": "托克逊县" }
+ ]
+ },
+ {
+ "code": "6505",
+ "name": "哈密市",
+ "children": [
+ { "code": "650502", "name": "伊州区" },
+ { "code": "650521", "name": "巴里坤哈萨克自治县" },
+ { "code": "650522", "name": "伊吾县" }
+ ]
+ },
+ {
+ "code": "6523",
+ "name": "昌吉回族自治州",
+ "children": [
+ { "code": "652301", "name": "昌吉市" },
+ { "code": "652302", "name": "阜康市" },
+ { "code": "652323", "name": "呼图壁县" },
+ { "code": "652324", "name": "玛纳斯县" },
+ { "code": "652325", "name": "奇台县" },
+ { "code": "652327", "name": "吉木萨尔县" },
+ { "code": "652328", "name": "木垒哈萨克自治县" }
+ ]
+ },
+ {
+ "code": "6527",
+ "name": "博尔塔拉蒙古自治州",
+ "children": [
+ { "code": "652701", "name": "博乐市" },
+ { "code": "652702", "name": "阿拉山口市" },
+ { "code": "652722", "name": "精河县" },
+ { "code": "652723", "name": "温泉县" }
+ ]
+ },
+ {
+ "code": "6528",
+ "name": "巴音郭楞蒙古自治州",
+ "children": [
+ { "code": "652801", "name": "库尔勒市" },
+ { "code": "652822", "name": "轮台县" },
+ { "code": "652823", "name": "尉犁县" },
+ { "code": "652824", "name": "若羌县" },
+ { "code": "652825", "name": "且末县" },
+ { "code": "652826", "name": "焉耆回族自治县" },
+ { "code": "652827", "name": "和静县" },
+ { "code": "652828", "name": "和硕县" },
+ { "code": "652829", "name": "博湖县" },
+ { "code": "652871", "name": "库尔勒经济技术开发区" }
+ ]
+ },
+ {
+ "code": "6529",
+ "name": "阿克苏地区",
+ "children": [
+ { "code": "652901", "name": "阿克苏市" },
+ { "code": "652922", "name": "温宿县" },
+ { "code": "652923", "name": "库车县" },
+ { "code": "652924", "name": "沙雅县" },
+ { "code": "652925", "name": "新和县" },
+ { "code": "652926", "name": "拜城县" },
+ { "code": "652927", "name": "乌什县" },
+ { "code": "652928", "name": "阿瓦提县" },
+ { "code": "652929", "name": "柯坪县" }
+ ]
+ },
+ {
+ "code": "6530",
+ "name": "克孜勒苏柯尔克孜自治州",
+ "children": [
+ { "code": "653001", "name": "阿图什市" },
+ { "code": "653022", "name": "阿克陶县" },
+ { "code": "653023", "name": "阿合奇县" },
+ { "code": "653024", "name": "乌恰县" }
+ ]
+ },
+ {
+ "code": "6531",
+ "name": "喀什地区",
+ "children": [
+ { "code": "653101", "name": "喀什市" },
+ { "code": "653121", "name": "疏附县" },
+ { "code": "653122", "name": "疏勒县" },
+ { "code": "653123", "name": "英吉沙县" },
+ { "code": "653124", "name": "泽普县" },
+ { "code": "653125", "name": "莎车县" },
+ { "code": "653126", "name": "叶城县" },
+ { "code": "653127", "name": "麦盖提县" },
+ { "code": "653128", "name": "岳普湖县" },
+ { "code": "653129", "name": "伽师县" },
+ { "code": "653130", "name": "巴楚县" },
+ { "code": "653131", "name": "塔什库尔干塔吉克自治县" }
+ ]
+ },
+ {
+ "code": "6532",
+ "name": "和田地区",
+ "children": [
+ { "code": "653201", "name": "和田市" },
+ { "code": "653221", "name": "和田县" },
+ { "code": "653222", "name": "墨玉县" },
+ { "code": "653223", "name": "皮山县" },
+ { "code": "653224", "name": "洛浦县" },
+ { "code": "653225", "name": "策勒县" },
+ { "code": "653226", "name": "于田县" },
+ { "code": "653227", "name": "民丰县" }
+ ]
+ },
+ {
+ "code": "6540",
+ "name": "伊犁哈萨克自治州",
+ "children": [
+ { "code": "654002", "name": "伊宁市" },
+ { "code": "654003", "name": "奎屯市" },
+ { "code": "654004", "name": "霍尔果斯市" },
+ { "code": "654021", "name": "伊宁县" },
+ { "code": "654022", "name": "察布查尔锡伯自治县" },
+ { "code": "654023", "name": "霍城县" },
+ { "code": "654024", "name": "巩留县" },
+ { "code": "654025", "name": "新源县" },
+ { "code": "654026", "name": "昭苏县" },
+ { "code": "654027", "name": "特克斯县" },
+ { "code": "654028", "name": "尼勒克县" }
+ ]
+ },
+ {
+ "code": "6542",
+ "name": "塔城地区",
+ "children": [
+ { "code": "654201", "name": "塔城市" },
+ { "code": "654202", "name": "乌苏市" },
+ { "code": "654221", "name": "额敏县" },
+ { "code": "654223", "name": "沙湾县" },
+ { "code": "654224", "name": "托里县" },
+ { "code": "654225", "name": "裕民县" },
+ { "code": "654226", "name": "和布克赛尔蒙古自治县" }
+ ]
+ },
+ {
+ "code": "6543",
+ "name": "阿勒泰地区",
+ "children": [
+ { "code": "654301", "name": "阿勒泰市" },
+ { "code": "654321", "name": "布尔津县" },
+ { "code": "654322", "name": "富蕴县" },
+ { "code": "654323", "name": "福海县" },
+ { "code": "654324", "name": "哈巴河县" },
+ { "code": "654325", "name": "青河县" },
+ { "code": "654326", "name": "吉木乃县" }
+ ]
+ },
+ {
+ "code": "6590",
+ "name": "自治区直辖县级行政区划",
+ "children": [
+ { "code": "659001", "name": "石河子市" },
+ { "code": "659002", "name": "阿拉尔市" },
+ { "code": "659003", "name": "图木舒克市" },
+ { "code": "659004", "name": "五家渠市" },
+ { "code": "659006", "name": "铁门关市" }
+ ]
+ }
+ ]
+ }
+]
diff --git a/cool/components/distpicker/components/index.vue b/cool/components/distpicker/components/index.vue
new file mode 100644
index 0000000..12ab7be
--- /dev/null
+++ b/cool/components/distpicker/components/index.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/distpicker/index.js b/cool/components/distpicker/index.js
new file mode 100644
index 0000000..20b96b7
--- /dev/null
+++ b/cool/components/distpicker/index.js
@@ -0,0 +1,7 @@
+import Distpicker from "./components";
+
+export default {
+ components: {
+ Distpicker
+ }
+};
diff --git a/cool/components/editor-quill/components/index.vue b/cool/components/editor-quill/components/index.vue
new file mode 100644
index 0000000..0966f9d
--- /dev/null
+++ b/cool/components/editor-quill/components/index.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
diff --git a/cool/components/editor-quill/index.js b/cool/components/editor-quill/index.js
new file mode 100644
index 0000000..90bbfd1
--- /dev/null
+++ b/cool/components/editor-quill/index.js
@@ -0,0 +1,7 @@
+import EditorQuill from "./components";
+
+export default {
+ components: {
+ EditorQuill
+ }
+};
diff --git a/cool/components/editor-quill/package.json b/cool/components/editor-quill/package.json
new file mode 100644
index 0000000..30b5cc1
--- /dev/null
+++ b/cool/components/editor-quill/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "editor-quill",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "quill": "^1.3.7"
+ }
+}
diff --git a/cool/components/log/index.js b/cool/components/log/index.js
new file mode 100644
index 0000000..ae50073
--- /dev/null
+++ b/cool/components/log/index.js
@@ -0,0 +1,4 @@
+import service from "./service";
+import views from "./views";
+
+export default { service, views };
diff --git a/cool/components/log/service/index.js b/cool/components/log/service/index.js
new file mode 100644
index 0000000..afe78ea
--- /dev/null
+++ b/cool/components/log/service/index.js
@@ -0,0 +1,7 @@
+import SysLog from "./log";
+
+export default {
+ system: {
+ log: new SysLog()
+ }
+};
diff --git a/cool/components/log/service/log.js b/cool/components/log/service/log.js
new file mode 100644
index 0000000..03b3776
--- /dev/null
+++ b/cool/components/log/service/log.js
@@ -0,0 +1,32 @@
+import { BaseService, Service, Permission } from "cl-admin";
+
+@Service("sys/log")
+class SysLog extends BaseService {
+ @Permission("clear")
+ clear() {
+ return this.request({
+ url: "/clear",
+ method: "POST"
+ });
+ }
+
+ @Permission("getKeep")
+ getKeep() {
+ return this.request({
+ url: "/getKeep"
+ });
+ }
+
+ @Permission("setKeep")
+ setKeep(value) {
+ return this.request({
+ url: "/setKeep",
+ method: "POST",
+ data: {
+ value
+ }
+ });
+ }
+}
+
+export default SysLog;
diff --git a/cool/components/log/views/index.js b/cool/components/log/views/index.js
new file mode 100644
index 0000000..b84bd84
--- /dev/null
+++ b/cool/components/log/views/index.js
@@ -0,0 +1,8 @@
+export default [
+ {
+ moduleName: "sys.log",
+ label: "请求日志",
+ path: "/sys/log",
+ component: () => import("./log")
+ }
+];
diff --git a/cool/components/log/views/log.vue b/cool/components/log/views/log.vue
new file mode 100644
index 0000000..3504640
--- /dev/null
+++ b/cool/components/log/views/log.vue
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+ 清空
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/param/index.js b/cool/components/param/index.js
new file mode 100644
index 0000000..743cb9d
--- /dev/null
+++ b/cool/components/param/index.js
@@ -0,0 +1,4 @@
+import service from "./service";
+import views from './views'
+
+export default { service, views };
diff --git a/cool/components/param/service/index.js b/cool/components/param/service/index.js
new file mode 100644
index 0000000..8c27eca
--- /dev/null
+++ b/cool/components/param/service/index.js
@@ -0,0 +1,7 @@
+import SysParam from "./param";
+
+export default {
+ system: {
+ param: new SysParam()
+ }
+};
diff --git a/cool/components/param/service/param.js b/cool/components/param/service/param.js
new file mode 100644
index 0000000..bc0be39
--- /dev/null
+++ b/cool/components/param/service/param.js
@@ -0,0 +1,6 @@
+import { BaseService, Service } from "cl-admin";
+
+@Service("sys/param")
+class SysParam extends BaseService {}
+
+export default SysParam;
diff --git a/cool/components/param/views/index.js b/cool/components/param/views/index.js
new file mode 100644
index 0000000..ecdaa4c
--- /dev/null
+++ b/cool/components/param/views/index.js
@@ -0,0 +1,8 @@
+export default [
+ {
+ moduleName: "sys.param",
+ label: "参数列表",
+ path: "/sys/param",
+ component: () => import("./param")
+ }
+];
diff --git a/cool/components/param/views/param.vue b/cool/components/param/views/param.vue
new file mode 100644
index 0000000..ba135f8
--- /dev/null
+++ b/cool/components/param/views/param.vue
@@ -0,0 +1,216 @@
+
+
+
+
+
+ {{
+ item.label
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ item.label
+ }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/perf/index.js b/cool/components/perf/index.js
new file mode 100644
index 0000000..743cb9d
--- /dev/null
+++ b/cool/components/perf/index.js
@@ -0,0 +1,4 @@
+import service from "./service";
+import views from './views'
+
+export default { service, views };
diff --git a/cool/components/perf/service/index.js b/cool/components/perf/service/index.js
new file mode 100644
index 0000000..d2fef22
--- /dev/null
+++ b/cool/components/perf/service/index.js
@@ -0,0 +1,7 @@
+import SysInfo from "./info";
+
+export default {
+ system: {
+ info: new SysInfo()
+ }
+};
diff --git a/cool/components/perf/service/info.js b/cool/components/perf/service/info.js
new file mode 100644
index 0000000..06f5aa1
--- /dev/null
+++ b/cool/components/perf/service/info.js
@@ -0,0 +1,13 @@
+import { BaseService, Service, Permission } from "cl-admin";
+
+@Service("sys/info")
+class SysInfo extends BaseService {
+ @Permission("record")
+ record() {
+ return this.request({
+ url: "/record"
+ });
+ }
+}
+
+export default SysInfo;
diff --git a/cool/components/perf/views/components/common.js b/cool/components/perf/views/components/common.js
new file mode 100644
index 0000000..2f8b7ba
--- /dev/null
+++ b/cool/components/perf/views/components/common.js
@@ -0,0 +1,28 @@
+import VueEcharts from "vue-echarts";
+
+function unit_size(v) {
+ if (v === 0) return "0 B";
+ let k = 1024;
+ let sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
+ let i = Math.floor(Math.log(v) / Math.log(k));
+
+ return (v / Math.pow(k, i)).toPrecision(3) + " " + sizes[i];
+}
+
+export default {
+ components: {
+ VueEcharts
+ },
+
+ filters: {
+ unit_size,
+
+ fixed2(v) {
+ return v ? parseFloat(parseFloat(v).toFixed(2)) : 0;
+ }
+ },
+
+ methods: {
+ conByte: unit_size
+ }
+};
diff --git a/cool/components/perf/views/components/ct.vue b/cool/components/perf/views/components/ct.vue
new file mode 100644
index 0000000..1a69a0f
--- /dev/null
+++ b/cool/components/perf/views/components/ct.vue
@@ -0,0 +1,253 @@
+
+
+
+
+
+
负载状态
+
+
+
+
+ - CPU:{{ cpu.perc | fixed2 }} %
+ - 内存:{{ mem.perc | fixed2 }} %
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
内存使用率
+
+
+
+
+ - 总数:{{ mem.total | unit_size }}
+ - 已使用:{{ mem.used | unit_size }}
+
+
+
+
+
+
+
+
+
+
+
{{ item.mount }}
+
+
+
+
+ - 总数:{{ item.size | unit_size }}
+ - 已使用:{{ item.used | unit_size }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/perf/views/components/mysql.vue b/cool/components/perf/views/components/mysql.vue
new file mode 100644
index 0000000..a5ac86d
--- /dev/null
+++ b/cool/components/perf/views/components/mysql.vue
@@ -0,0 +1,275 @@
+
+
+
Mysql
+
+
+
+
+
+
+
+
+
+ -
+
已使用
+ {{ data_size }}
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
缓存数
+ {{ Threads_cached }}
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
连接数
+ {{ Threads_connected }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/perf/views/components/network.vue b/cool/components/perf/views/components/network.vue
new file mode 100644
index 0000000..6633ecc
--- /dev/null
+++ b/cool/components/perf/views/components/network.vue
@@ -0,0 +1,345 @@
+
+
+
+
+
+
+
diff --git a/cool/components/perf/views/components/redis.vue b/cool/components/perf/views/components/redis.vue
new file mode 100644
index 0000000..64c5e33
--- /dev/null
+++ b/cool/components/perf/views/components/redis.vue
@@ -0,0 +1,324 @@
+
+
+
Redis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/perf/views/index.js b/cool/components/perf/views/index.js
new file mode 100644
index 0000000..7bb72a8
--- /dev/null
+++ b/cool/components/perf/views/index.js
@@ -0,0 +1,8 @@
+export default [
+ {
+ moduleName: "sys.perf",
+ label: "状态监控",
+ path: "/sys/perf",
+ component: () => import("./perf")
+ }
+];
diff --git a/cool/components/perf/views/perf.vue b/cool/components/perf/views/perf.vue
new file mode 100644
index 0000000..5efc1f1
--- /dev/null
+++ b/cool/components/perf/views/perf.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/task/index.js b/cool/components/task/index.js
new file mode 100644
index 0000000..0683c4e
--- /dev/null
+++ b/cool/components/task/index.js
@@ -0,0 +1,7 @@
+import service from "./service";
+import views from './views'
+
+export default {
+ service,
+ views
+};
diff --git a/cool/components/task/package.json b/cool/components/task/package.json
new file mode 100644
index 0000000..50af67e
--- /dev/null
+++ b/cool/components/task/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "task",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "vuedraggable": "^2.24.3"
+ }
+}
diff --git a/cool/components/task/service/index.js b/cool/components/task/service/index.js
new file mode 100644
index 0000000..e256a3d
--- /dev/null
+++ b/cool/components/task/service/index.js
@@ -0,0 +1,7 @@
+import SysTask from "./task";
+
+export default {
+ system: {
+ task: new SysTask()
+ }
+};
diff --git a/cool/components/task/service/task.js b/cool/components/task/service/task.js
new file mode 100644
index 0000000..2126402
--- /dev/null
+++ b/cool/components/task/service/task.js
@@ -0,0 +1,41 @@
+import { BaseService, Service, Permission } from "cl-admin";
+
+@Service("sys/task")
+class SysTask extends BaseService {
+ @Permission("stop")
+ stop(data) {
+ return this.request({
+ url: "/stop",
+ method: "POST",
+ data
+ });
+ }
+
+ @Permission("start")
+ start(data) {
+ return this.request({
+ url: "/start",
+ method: "POST",
+ data
+ });
+ }
+
+ @Permission("once")
+ once(data) {
+ return this.request({
+ url: "/once",
+ method: "POST",
+ data
+ });
+ }
+
+ @Permission("log")
+ log(params) {
+ return this.request({
+ url: "/log",
+ params
+ });
+ }
+}
+
+export default SysTask;
diff --git a/cool/components/task/views/index.js b/cool/components/task/views/index.js
new file mode 100644
index 0000000..c4f4ad4
--- /dev/null
+++ b/cool/components/task/views/index.js
@@ -0,0 +1,8 @@
+export default [
+ {
+ moduleName: "sys.task",
+ label: "任务列表",
+ path: "/sys/task",
+ component: () => import("./task")
+ }
+];
diff --git a/cool/components/task/views/task.vue b/cool/components/task/views/task.vue
new file mode 100644
index 0000000..308e528
--- /dev/null
+++ b/cool/components/task/views/task.vue
@@ -0,0 +1,1133 @@
+
+
+
+
+
+
+
diff --git a/cool/components/upload/components/index.js b/cool/components/upload/components/index.js
new file mode 100644
index 0000000..a0568ea
--- /dev/null
+++ b/cool/components/upload/components/index.js
@@ -0,0 +1,7 @@
+import Upload from "./index.vue";
+import UploadSpace from "./space";
+
+export default {
+ Upload,
+ UploadSpace
+};
diff --git a/cool/components/upload/components/index.vue b/cool/components/upload/components/index.vue
new file mode 100644
index 0000000..d9a4166
--- /dev/null
+++ b/cool/components/upload/components/index.vue
@@ -0,0 +1,583 @@
+
+
+
+
+
+
+
+
+
+
+ {{ _text }}
+
+
+
+
+ 点击上传
+
+
+
+
+
+
+
{{ _urls[0].name }}
+
+
+
+
+ {{ _text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/upload/components/space.vue b/cool/components/upload/components/space.vue
new file mode 100644
index 0000000..a87eacb
--- /dev/null
+++ b/cool/components/upload/components/space.vue
@@ -0,0 +1,721 @@
+
+
+
+ 点击上传
+
+
+
+
+
+
+
+
+
+
+
+
+ 使用选中文件
+
+ 删除选中文件
+
+
+ 点击上传
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 将文件拖到此处,或点击上传
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cool/components/upload/index.js b/cool/components/upload/index.js
new file mode 100644
index 0000000..21a489c
--- /dev/null
+++ b/cool/components/upload/index.js
@@ -0,0 +1,4 @@
+import service from "./service";
+import components from "./components";
+
+export default { components, service };
diff --git a/cool/components/upload/service/index.js b/cool/components/upload/service/index.js
new file mode 100644
index 0000000..010e0f9
--- /dev/null
+++ b/cool/components/upload/service/index.js
@@ -0,0 +1,9 @@
+import SpaceInfo from "./info";
+import SpaceType from "./type";
+
+export default {
+ space: {
+ info: new SpaceInfo(),
+ type: new SpaceType()
+ }
+};
diff --git a/cool/components/upload/service/info.js b/cool/components/upload/service/info.js
new file mode 100644
index 0000000..a83958b
--- /dev/null
+++ b/cool/components/upload/service/info.js
@@ -0,0 +1,6 @@
+import { BaseService, Service } from "cl-admin";
+
+@Service("app/space/info")
+class SpaceInfo extends BaseService {}
+
+export default SpaceInfo;
diff --git a/cool/components/upload/service/type.js b/cool/components/upload/service/type.js
new file mode 100644
index 0000000..5e17bc4
--- /dev/null
+++ b/cool/components/upload/service/type.js
@@ -0,0 +1,6 @@
+import { BaseService, Service } from "cl-admin";
+
+@Service("app/space/type")
+class SpaceType extends BaseService { }
+
+export default SpaceType;
diff --git a/cool/core/common/index.js b/cool/core/common/index.js
new file mode 100644
index 0000000..fc56843
--- /dev/null
+++ b/cool/core/common/index.js
@@ -0,0 +1,11 @@
+Promise.prototype.done = function (cb) {
+ let P = this.constructor;
+
+ return this.then(
+ (value) => P.resolve(cb()).then(() => value),
+ (reason) =>
+ P.resolve(cb()).then(() => {
+ throw reason;
+ })
+ );
+};
diff --git a/cool/core/index.js b/cool/core/index.js
new file mode 100644
index 0000000..9a476e7
--- /dev/null
+++ b/cool/core/index.js
@@ -0,0 +1,12 @@
+import { BaseService, Service, Permission } from "./service";
+import { SET_SERVICE, SET_ROUTER, SET_COMPONENT } from "./set";
+import "./common";
+
+async function bootstrap(options = {}) {
+ const { components } = options;
+
+ SET_ROUTER();
+ SET_SERVICE();
+ SET_COMPONENT({ events: components });
+}
+export { Service, Permission, BaseService, bootstrap };
diff --git a/cool/core/service/base.js b/cool/core/service/base.js
new file mode 100644
index 0000000..cb47aeb
--- /dev/null
+++ b/cool/core/service/base.js
@@ -0,0 +1,118 @@
+import request from "@/service/request";
+import { baseUrl } from "@/config/env";
+
+export default class BaseService {
+ constructor() {
+ const crud = {
+ page: "page",
+ list: "list",
+ info: "info",
+ add: "add",
+ delete: "delete",
+ update: "update"
+ };
+
+ if (!this.permission) {
+ this.permission = {};
+ }
+
+ for (let i in crud) {
+ if (this.namespace) {
+ this.permission[i] = this.namespace.replace(/\//g, ":") + ":" + crud[i];
+ } else {
+ this.permission[i] = crud[i];
+ }
+ }
+ }
+
+ request(options = {}) {
+ if (!options.params) {
+ options.params = {};
+ }
+
+ let path = "";
+
+ if (process.env.NODE_ENV == "development") {
+ path = this.proxy || baseUrl;
+ } else {
+ if (this.proxy) {
+ path = this.url;
+ } else {
+ path = baseUrl;
+ }
+ }
+
+ if (this.namespace) {
+ path += "/" + this.namespace;
+ }
+
+ if (options.url.indexOf("http") !== 0) {
+ if (options.url[0] === "@") {
+ options.url = options.url.replace("@", "");
+ } else {
+ options.url = path + options.url;
+ }
+ }
+
+ return request(options);
+ }
+
+ list(params) {
+ return this.request({
+ url: "/list",
+ method: "POST",
+ data: {
+ ...params
+ }
+ });
+ }
+
+ page(params) {
+ return this.request({
+ url: "/page",
+ method: "POST",
+ data: {
+ ...params
+ }
+ });
+ }
+
+ info(params) {
+ return this.request({
+ url: "/info",
+ params: {
+ ...params
+ }
+ });
+ }
+
+ update(params) {
+ return this.request({
+ url: "/update",
+ method: "POST",
+ data: {
+ ...params
+ }
+ });
+ }
+
+ delete(params) {
+ return this.request({
+ url: "/delete",
+ method: "POST",
+ data: {
+ ...params
+ }
+ });
+ }
+
+ add(params) {
+ return this.request({
+ url: "/add",
+ method: "POST",
+ data: {
+ ...params
+ }
+ });
+ }
+}
diff --git a/cool/core/service/desorator.js b/cool/core/service/desorator.js
new file mode 100644
index 0000000..4d60563
--- /dev/null
+++ b/cool/core/service/desorator.js
@@ -0,0 +1,40 @@
+import { isObject } from "../utils";
+
+export function Permission(value) {
+ return function (target, key, descriptor) {
+ if (!target.permission) {
+ target.permission = {};
+ }
+
+ setTimeout(() => {
+ target.permission[key] = (
+ (target.namespace ? target.namespace + "/" : "") + value
+ ).replace(/\//g, ":");
+ }, 0);
+
+ return descriptor;
+ };
+}
+
+export function Service(value) {
+ const { devServer } = require("@/../vue.config.js");
+
+ return function (target) {
+ // 命名
+ if (typeof value == "string") {
+ target.prototype.namespace = value;
+ }
+
+ // 复杂项
+ if (isObject(value)) {
+ let { proxy, namespace, url } = value;
+
+ target.prototype.namespace = namespace;
+
+ if (proxy) {
+ target.prototype.proxy = proxy;
+ target.prototype.url = url || devServer.proxy[proxy].target;
+ }
+ }
+ };
+}
diff --git a/cool/core/service/index.js b/cool/core/service/index.js
new file mode 100644
index 0000000..f96b8cd
--- /dev/null
+++ b/cool/core/service/index.js
@@ -0,0 +1,4 @@
+import BaseService from "./base";
+import { Service, Permission } from "./desorator";
+
+export { BaseService, Service, Permission };
diff --git a/cool/core/set/component.js b/cool/core/set/component.js
new file mode 100644
index 0000000..a9139be
--- /dev/null
+++ b/cool/core/set/component.js
@@ -0,0 +1,150 @@
+import Vue from "vue";
+import Cool from "cool";
+import store from '@/store'
+import router from '@/router'
+import { deepMerge, isFunction, isObject } from "../utils";
+
+export default function (options = {}) {
+ if (!options.events) {
+ options.events = {};
+ }
+
+ // 组件模块
+ let componentModules = [];
+
+ // 组件列表
+ let components = [];
+
+ // 安装组件
+ function install(comp) {
+ let { store: _store, components, service, directives, filters, pages, views, name } = comp;
+ let { onInstall, onSuccess, onFail } = options.events[name] || {};
+
+ try {
+ const next = () => {
+ // 注册vuex模块
+ if (_store) {
+ for (let i in _store) {
+ store.registerModule(`${name}-${i}`, _store[i]);
+ }
+ }
+
+ // 注册组件
+ if (components) {
+ for (let i in components) {
+ Vue.component(components[i].name, components[i]);
+ }
+ }
+
+ // 注册请求服务
+ if (service) {
+ deepMerge(store.$service, service);
+ }
+
+ // 注册指令
+ if (directives) {
+ for (let i in directives) {
+ Vue.directive(i, directives[i]);
+ }
+ }
+
+ // 注册过滤器
+ if (filters) {
+ for (let i in filters) {
+ Vue.filter(i, filters[i]);
+ }
+ }
+
+ // 注册页面
+ if (pages) {
+ pages.forEach((e) => {
+ router.addRoute(e);
+ });
+ }
+
+ // 注册视图
+ if (views) {
+ views.forEach((e) => {
+ if (!e.meta) {
+ e.meta = {};
+ }
+
+ if (e.moduleName) {
+ componentModules.push(e);
+ } else {
+ e.meta.label = e.label;
+
+ if (e.path) {
+ router.$plugin.addViews([e], {
+ ignore404: true
+ });
+ } else {
+ console.error(`[${name}-views]:path in null`);
+ }
+ }
+ });
+ }
+
+ // 包安装成功
+ if (onSuccess) onSuccess(comp);
+ };
+
+ // 安装前
+ if (onInstall) {
+ onInstall(comp, { next });
+ } else {
+ next();
+ }
+ } catch (e) {
+ console.error(e);
+
+ // 安装失败
+ if (onFail) onFail(comp, e);
+ }
+ }
+
+ // 解析组件
+ Cool.components.map((e) => {
+ if (!e) {
+ return null;
+ }
+
+ let comp = null;
+
+ if (isObject(e)) {
+ comp = e;
+ } else {
+ comp = {
+ name: e[0],
+ value: e[1],
+ options: e[2]
+ };
+ }
+
+ if (comp.value) {
+ if (isFunction(comp.value.install)) {
+ comp.value = comp.value.install(Vue, comp.options);
+ }
+ }
+
+ // 是否开启
+ if (comp.options && comp.options.enable === false) {
+ return null;
+ }
+
+ if (comp) {
+ comp = {
+ name: comp.name,
+ options: comp.options,
+ ...comp.value
+ };
+
+ components.push(comp);
+ install(comp);
+ }
+ });
+
+ // 设置缓存
+ store.commit("SET_COMPONENT_MODULES", componentModules);
+ store.commit("SET_COMPONENT", components);
+}
diff --git a/cool/core/set/index.js b/cool/core/set/index.js
new file mode 100644
index 0000000..6029c5d
--- /dev/null
+++ b/cool/core/set/index.js
@@ -0,0 +1,5 @@
+import SET_SERVICE from "./service";
+import SET_ROUTER from "./router";
+import SET_COMPONENT from "./component";
+
+export { SET_SERVICE, SET_ROUTER, SET_COMPONENT };
diff --git a/cool/core/set/router.js b/cool/core/set/router.js
new file mode 100644
index 0000000..4d10f12
--- /dev/null
+++ b/cool/core/set/router.js
@@ -0,0 +1,116 @@
+import VueRouter from 'vue-router'
+import { Message } from "element-ui";
+import store from "@/store";
+import router, { ignore } from '@/router'
+import storage from '../utils/storage'
+
+// Remove Navigating to current location (XXX) is not allowed
+const routerPush = VueRouter.prototype.push;
+VueRouter.prototype.push = function push(location) {
+ return routerPush.call(this, location).catch((error) => error);
+};
+
+export default function () {
+ router.$plugin = {
+ addViews: (list, options) => {
+ if (!options) {
+ options = {};
+ }
+
+ // Parse route config
+ list.map((e) => {
+ if (!e.component) {
+ let url = e.viewPath;
+
+ if (url) {
+ if (
+ /^(http[s]?:\/\/)([0-9a-z.]+)(:[0-9]+)?([/0-9a-z.]+)?(\?[0-9a-z&=]+)?(#[0-9-a-z]+)?/i.test(
+ url
+ )
+ ) {
+ e.meta.iframeUrl = url;
+ e.component = () => import(`cool/components/base/pages/iframe/index.vue`);
+ } else {
+ if (url.indexOf("views/") === 0) {
+ e.component = () => import(`@/${url}`);
+ } else {
+ console.error(url, "异常");
+ }
+ }
+ } else {
+ e.redirect = "/404";
+ }
+ }
+ });
+
+ // Batch add route
+ list.forEach((e) => {
+ router.addRoute("index", e);
+ });
+
+ // Add 404 rule
+ if (!options.ignore404) {
+ router.addRoute({
+ path: "*",
+ redirect: "/404"
+ });
+ }
+ },
+
+ to: (url) => {
+ if (router.path != url) {
+ router.push(url);
+ }
+ }
+ };
+
+ router.beforeEach((to, from, next) => {
+ const { token, browser } = store.getters
+
+ if (token) {
+ if (to.path.indexOf('/login') === 0) {
+ // 登录成功且 token 未过期,回到首页
+ if (!storage.isExpired('token')) {
+ return next('/')
+ }
+ } else {
+ // 添加路由进程
+ store.commit("ADD_PROCESS", {
+ label: (to.meta && to.meta.label) || to.name,
+ value: to.fullPath
+ });
+ }
+ } else {
+ if (!ignore.token.some((e) => to.path.indexOf(e) === 0)) {
+ return next("/login");
+ }
+ }
+
+ // H5 下关闭左侧菜单
+ if (browser.isMobile) {
+ store.commit("COLLAPSE_MENU", true);
+ }
+
+ next()
+ })
+
+ let lock = false;
+
+ router.onError((err) => {
+ if (!lock) {
+ lock = true;
+
+ if (err.code == "MODULE_NOT_FOUND") {
+ console.error(err.message.replace("Cannot find module ", ""), "路由组件不存在");
+
+ Message.error(`路由组件路径错误`);
+ } else {
+ console.error(err);
+ }
+
+ setTimeout(() => {
+ lock = false;
+ }, 0);
+ }
+ });
+}
diff --git a/cool/core/set/service.js b/cool/core/set/service.js
new file mode 100644
index 0000000..c91bac0
--- /dev/null
+++ b/cool/core/set/service.js
@@ -0,0 +1,53 @@
+import Vue from "vue";
+import path from "path";
+import store from '@/store'
+
+export default function () {
+ const files = require.context("@/service/", true, /\.js$/);
+ const ignore = ["./request.js"];
+
+ let modules = {};
+
+ files
+ .keys()
+ .filter((e) => !ignore.includes(e))
+ .map((e) => {
+ if (e.includes("--ignore")) {
+ return false;
+ }
+
+ let list = e.substr(2).split("/");
+ let parents = list.slice(0, list.length - 1);
+ let name = path.basename(e, ".js");
+
+ let curr = modules;
+ let prev = null;
+ let key = null;
+
+ parents.forEach((k) => {
+ if (!curr[k]) {
+ curr[k] = {};
+ }
+
+ prev = curr;
+ curr = curr[k];
+ key = k;
+ });
+
+ let ep = files(e);
+
+ if (ep.default) {
+ let service = new ep.default();
+
+ if (name == "index") {
+ prev[key] = service;
+ } else {
+ curr[name] = service;
+ }
+ } else {
+ console.error(`Service must export default [${e}]`);
+ }
+ });
+
+ Vue.prototype.$service = store.$service = modules;
+}
diff --git a/cool/core/utils/index.js b/cool/core/utils/index.js
new file mode 100644
index 0000000..8d5553b
--- /dev/null
+++ b/cool/core/utils/index.js
@@ -0,0 +1,256 @@
+import { routerMode } from "@/config/env";
+
+export function getUrlParam(name) {
+ let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
+ let r = window.location.search.substr(1).match(reg);
+ if (r != null) return decodeURIComponent(r[2]);
+ return null;
+}
+
+export function isPc() {
+ const userAgentInfo = navigator.userAgent;
+ const Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
+ let flag = true;
+ for (let v = 0; v < Agents.length; v++) {
+ if (userAgentInfo.indexOf(Agents[v]) > 0) {
+ flag = false;
+ break;
+ }
+ }
+ return flag;
+}
+
+export const isIOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
+
+export function getBrowser() {
+ let ua = navigator.userAgent.toLowerCase();
+ let btypeInfo = (ua.match(/firefox|chrome|safari|opera/g) || "other")[0];
+ if ((ua.match(/msie|trident/g) || [])[0]) {
+ btypeInfo = "msie";
+ }
+ let pc = "";
+ let prefix = "";
+ let plat = "";
+
+ let isTocuh =
+ "ontouchstart" in window || ua.indexOf("touch") !== -1 || ua.indexOf("mobile") !== -1;
+ if (isTocuh) {
+ if (ua.indexOf("ipad") !== -1) {
+ pc = "pad";
+ } else if (ua.indexOf("mobile") !== -1) {
+ pc = "mobile";
+ } else if (ua.indexOf("android") !== -1) {
+ pc = "androidPad";
+ } else {
+ pc = "pc";
+ }
+ } else {
+ pc = "pc";
+ }
+ switch (btypeInfo) {
+ case "chrome":
+ case "safari":
+ case "mobile":
+ prefix = "webkit";
+ break;
+ case "msie":
+ prefix = "ms";
+ break;
+ case "firefox":
+ prefix = "Moz";
+ break;
+ case "opera":
+ prefix = "O";
+ break;
+ default:
+ prefix = "webkit";
+ break;
+ }
+ plat = ua.indexOf("android") > 0 ? "android" : navigator.platform.toLowerCase();
+ return {
+ version: (ua.match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
+ plat: plat,
+ type: btypeInfo,
+ pc: pc,
+ prefix: prefix,
+ isMobile: pc == "pc" ? false : true
+ };
+}
+
+export function href(path, newWindow) {
+ let { search, origin } = window.location;
+
+ let url = "";
+
+ if (routerMode == "history") {
+ url = origin + path;
+ } else {
+ url = origin + search + "#" + path;
+ }
+
+ if (newWindow) {
+ window.open(url);
+ } else {
+ window.location.href = url;
+ }
+}
+
+export function orderBy(list, key) {
+ return list.sort((a, b) => a[key] - b[key]);
+}
+
+export function deepTree(list) {
+ let newList = [];
+ let map = {};
+
+ list.forEach((e) => (map[e.id] = e));
+
+ list.forEach((e) => {
+ let parent = map[e.parentId];
+
+ if (parent) {
+ (parent.children || (parent.children = [])).push(e);
+ } else {
+ newList.push(e);
+ }
+ });
+
+ const fn = (list) => {
+ list.map((e) => {
+ if (e.children instanceof Array) {
+ e.children = orderBy(e.children, "orderNum");
+
+ fn(e.children);
+ }
+ });
+ };
+
+ fn(newList);
+
+ return orderBy(newList, "orderNum");
+}
+
+export function revDeepTree(list = []) {
+ let d = [];
+ let id = 0;
+
+ const deep = (list, parentId) => {
+ list.forEach((e) => {
+ e.id = id++;
+ e.parentId = parentId;
+
+ d.push(e);
+
+ if (e.children && isArray(e.children)) {
+ deep(e.children, e.id);
+ }
+ });
+ };
+
+ deep(list || [], null);
+
+ return d;
+}
+
+export function debounce(fn, delay) {
+ let timer = null;
+
+ return function () {
+ let args = arguments;
+ let context = this;
+
+ if (timer) {
+ clearTimeout(timer);
+
+ timer = setTimeout(function () {
+ fn.apply(context, args);
+ }, delay);
+ } else {
+ timer = setTimeout(function () {
+ fn.apply(context, args);
+ }, delay);
+ }
+ };
+}
+
+export function isArray(value) {
+ if (typeof Array.isArray === "function") {
+ return Array.isArray(value);
+ } else {
+ return Object.prototype.toString.call(value) === "[object Array]";
+ }
+}
+
+export function isObject(value) {
+ return Object.prototype.toString.call(value) === "[object Object]";
+}
+
+export function isNumber(value) {
+ return !isNaN(Number(value));
+}
+
+export function isFunction(value) {
+ return typeof value == "function";
+}
+
+export function isString(value) {
+ return typeof value == "string";
+}
+
+export function isEmpty(value) {
+ if (isArray(value)) {
+ return value.length === 0;
+ }
+
+ if (isObject(value)) {
+ return Object.keys(value).length === 0;
+ }
+
+ return value === "" || value === undefined || value === null;
+}
+
+export function last(data) {
+ if (isArray(data) || isString(data)) {
+ return data[data.length - 1];
+ }
+}
+
+export function cloneDeep(obj) {
+ let d = isArray(obj) ? obj : {};
+
+ if (isObject(obj)) {
+ for (let key in obj) {
+ if (obj.hasOwnProperty && obj.hasOwnProperty(key)) {
+ if (obj[key] && typeof obj[key] === "object") {
+ d[key] = cloneDeep(obj[key]);
+ } else {
+ d[key] = obj[key];
+ }
+ }
+ }
+ }
+
+ return d;
+}
+
+export function clone(obj) {
+ return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
+}
+
+export function deepMerge(a, b) {
+ let k;
+ for (k in b) {
+ a[k] =
+ a[k] && a[k].toString() === "[object Object]" ? deepMerge(a[k], b[k]) : (a[k] = b[k]);
+ }
+ return a;
+}
+
+export function contains(parent, node) {
+ if (document.documentElement.contains) {
+ return parent !== node && parent.contains(node);
+ } else {
+ while (node && (node = node.parentNode)) if (node === parent) return true;
+ return false;
+ }
+}
diff --git a/cool/core/utils/storage.js b/cool/core/utils/storage.js
new file mode 100644
index 0000000..e350abb
--- /dev/null
+++ b/cool/core/utils/storage.js
@@ -0,0 +1,81 @@
+import store from 'store'
+
+export default {
+ // 后缀标识
+ suffix: "_deadtime",
+
+ /**
+ * 获取
+ * @param {string} key 关键字
+ */
+ get(key) {
+ return store.get(key)
+ },
+
+ /**
+ * 获取全部
+ */
+ info() {
+ let d = {}
+
+ store.each(function (value, key) {
+ d[key] = value
+ })
+
+ return d
+ },
+
+ /**
+ * 设置
+ * @param {string} key 关键字
+ * @param {*} value 值
+ * @param {number} expires 过期时间
+ */
+ set(key, value, expires) {
+ store.set(key, value);
+
+ if (expires) {
+ store.set(`${key}${this.suffix}`, Date.parse(new Date()) + expires * 1000);
+ }
+ },
+
+ /**
+ * 是否过期
+ * @param {string} key 关键字
+ */
+ isExpired(key) {
+ return (this.getExpiration(key) || 0) - Date.parse(new Date()) <= 2000;
+ },
+
+ /**
+ * 获取到期时间
+ * @param {string} key 关键字
+ */
+ getExpiration(key) {
+ return this.get(key + this.suffix)
+ },
+
+ /**
+ * 移除
+ * @param {string} key 关键字
+ */
+ remove(key) {
+ store.remove(key)
+ this.removeExpiration(key)
+ },
+
+ /**
+ * 移除到期时间
+ * @param {string} key 关键字
+ */
+ removeExpiration(key) {
+ store.remove(key + this.suffix)
+ },
+
+ /**
+ * 清理
+ */
+ clearAll() {
+ store.clearAll()
+ }
+};
diff --git a/cool/index.js b/cool/index.js
new file mode 100644
index 0000000..e4ea4c8
--- /dev/null
+++ b/cool/index.js
@@ -0,0 +1,55 @@
+import Base from "./components/base";
+import Upload from "./components/upload";
+import Chat from "./components/chat";
+import Codemirror from "./components/codemirror";
+import Copy from "./components/copy";
+import Demo from "./components/demo";
+import Distpicker from "./components/distpicker";
+import EditorQuill from "./components/editor-quill";
+import Log from "./components/log";
+import Param from "./components/param";
+import Perf from "./components/perf";
+import Task from "./components/task";
+import Crud from "cl-admin-crud";
+import Export from "cl-admin-export";
+
+export default {
+ components: [
+ ["base", Base],
+ [
+ "upload",
+ Upload,
+ {
+ icon: "el-icon-picture",
+ text: "选择图片",
+ limitSize: 1,
+ rename: true
+ }
+ ],
+ [
+ "crud",
+ Crud,
+ {
+ crud: {
+ dict: {
+ sort: {
+ prop: "order",
+ order: "sort"
+ }
+ }
+ }
+ }
+ ],
+ ["export", Export],
+ // ["chat", Chat],
+ ["codemirror", Codemirror],
+ ["copy", Copy],
+ ["demo", Demo],
+ ["distpicker", Distpicker],
+ ["editor-quill", EditorQuill],
+ ["log", Log],
+ ["param", Param],
+ ["perf", Perf],
+ ["task", Task]
+ ]
+};
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..e91c1e1
--- /dev/null
+++ b/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "cool-admin-vue",
+ "version": "3.0.0",
+ "private": true,
+ "scripts": {
+ "serve": "vue-cli-service serve",
+ "build": "vue-cli-service build",
+ "report": "vue-cli-service build --report",
+ "lint": "vue-cli-service lint"
+ },
+ "dependencies": {
+ "axios": "^0.21.1",
+ "cl-admin": "^1.1.13",
+ "cl-admin-crud": "^1.2.7",
+ "cl-admin-export": "^1.0.5",
+ "core-js": "^3.9.0",
+ "dayjs": "^1.10.3",
+ "echarts": "^4.5.0",
+ "element-ui": "^2.13.0",
+ "nprogress": "^0.2.0",
+ "qs": "^6.9.1",
+ "store": "^2.0.12",
+ "vue": "^2.6.10",
+ "vue-echarts": "^5.0.0-beta.0",
+ "vue-router": "^3.5.1",
+ "vuex": "^3.6.2"
+ },
+ "devDependencies": {
+ "@typescript-eslint/parser": "^3.0.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+ "@vue/babel-preset-jsx": "^1.1.2",
+ "@vue/cli-plugin-babel": "^4.1.0",
+ "@vue/cli-plugin-eslint": "^4.1.0",
+ "@vue/cli-plugin-router": "^4.1.0",
+ "@vue/cli-plugin-vuex": "^4.1.0",
+ "@vue/cli-service": "^4.1.0",
+ "@vue/eslint-config-prettier": "^6.0.0",
+ "babel-eslint": "^10.0.3",
+ "babel-plugin-component": "^1.1.1",
+ "babel-plugin-jsx-v-model": "^2.0.3",
+ "clean-webpack-plugin": "^3.0.0",
+ "eslint": "^7.0.0",
+ "eslint-plugin-prettier": "^3.1.1",
+ "eslint-plugin-vue": "^6.2.2",
+ "node-sass": "^4.13.0",
+ "prettier": "^2.0.5",
+ "sass-loader": "^8.0.0",
+ "svg-sprite-loader": "^5.0.0",
+ "typescript": "^3.9.3",
+ "vue-template-compiler": "^2.6.10",
+ "webpack-cli": "^3.3.12"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..3080304
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ plugins: {
+ autoprefixer: {}
+ }
+};
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..0b823a3
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..340e6c7
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+ COOL-ADMIN
+ <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
+
+ <% } %>
+
+
+
+
+
+
+
+
COOL-ADMIN
+
正在加载资源...
+
初次加载资源可能需要较多时间 请耐心等待
+
+
+
+
+
+
+ <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
+
+ <% } %>
+
+
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..fca4b9f
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/assets/css/common.scss b/src/assets/css/common.scss
new file mode 100644
index 0000000..b82fc7b
--- /dev/null
+++ b/src/assets/css/common.scss
@@ -0,0 +1,14 @@
+$color-main: #2f3447;
+$color-danger: #f56c6c;
+$color-primary: #4165d7;
+$color-success: #67c23a;
+$color-info: #909399;
+$color-warning: #e6a23c;
+
+@mixin text_ellipsis($line: 1) {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: $line;
+}
diff --git a/src/assets/css/element-variables.scss b/src/assets/css/element-variables.scss
new file mode 100644
index 0000000..28b86c4
--- /dev/null
+++ b/src/assets/css/element-variables.scss
@@ -0,0 +1,9 @@
+$--color-primary: $color-primary;
+$--color-success: $color-success;
+$--color-danger: $color-danger;
+$--color-warning: $color-warning;
+$--color-info: $color-info;
+
+$--font-path: "~element-ui/lib/theme-chalk/fonts";
+
+@import "~element-ui/packages/theme-chalk/src/index";
diff --git a/src/assets/css/index.scss b/src/assets/css/index.scss
new file mode 100644
index 0000000..1619837
--- /dev/null
+++ b/src/assets/css/index.scss
@@ -0,0 +1,40 @@
+* {
+ padding: 0;
+ margin: 0;
+ font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei",
+ "微软雅黑", Arial, sans-serif;
+}
+
+*::-webkit-scrollbar {
+ width: 10px;
+ height: 10px;
+}
+
+*::-webkit-scrollbar-thumb {
+ background-color: rgba(144, 147, 153, 0.3);
+}
+
+*::-webkit-scrollbar-track {
+ background: transparent;
+}
+
+#app {
+ height: 100vh;
+ width: 100vw;
+ overflow: hidden;
+}
+
+a {
+ text-decoration: none;
+}
+
+input,
+button {
+ outline: none;
+}
+
+input {
+ &:-webkit-autofill {
+ box-shadow: 0 0 0px 1000px white inset;
+ }
+}
diff --git a/src/assets/icon/logo/silder-simple.png b/src/assets/icon/logo/silder-simple.png
new file mode 100644
index 0000000..a75c618
Binary files /dev/null and b/src/assets/icon/logo/silder-simple.png differ
diff --git a/src/assets/icon/logo/silder.png b/src/assets/icon/logo/silder.png
new file mode 100644
index 0000000..ebf6856
Binary files /dev/null and b/src/assets/icon/logo/silder.png differ
diff --git a/src/config/env.js b/src/config/env.js
new file mode 100644
index 0000000..4f30a2a
--- /dev/null
+++ b/src/config/env.js
@@ -0,0 +1,58 @@
+import store from "store";
+import { getUrlParam } from "cl-admin/utils";
+
+// 路由模式
+const routerMode = "history";
+
+// 开发模式
+const isDev = process.env.NODE_ENV == "development";
+
+// Host
+const host = "https://show.cool-admin.com";
+
+// 请求地址
+const baseUrl = (function () {
+ let proxy = getUrlParam("proxy");
+
+ if (proxy) {
+ store.set("proxy", proxy);
+ } else {
+ proxy = store.get("proxy") || "dev";
+ }
+
+ switch (process.env.NODE_ENV) {
+ case "development":
+ return `/${proxy}/admin`;
+ case "production":
+ return `/api/admin`;
+ default:
+ return "";
+ }
+})();
+
+// Socket
+const socketUrl = (isDev ? `${host}` : "") + "/socket";
+
+// 阿里字体图标库 https://at.alicdn.com/t/**.css
+const iconfontUrl = ``;
+
+// 程序配置参数
+const app = {
+ name: "cool-admin",
+
+ conf: {
+ // 是否显示一级菜单栏
+ showAMenu: false,
+ // 是否显示路由导航栏
+ showRouteNav: true,
+ // 是否显示页面进程栏
+ showProcess: true,
+ // 自定义菜单
+ customMenu: false
+ }
+};
+
+// 自定义菜单列表
+const menuList = [];
+
+export { routerMode, baseUrl, socketUrl, iconfontUrl, app, isDev, menuList };
diff --git a/src/element.js b/src/element.js
new file mode 100644
index 0000000..ed190b9
--- /dev/null
+++ b/src/element.js
@@ -0,0 +1,172 @@
+import Vue from "vue";
+import {
+ Pagination,
+ Dialog,
+ Autocomplete,
+ Dropdown,
+ DropdownMenu,
+ DropdownItem,
+ Menu,
+ Submenu,
+ MenuItem,
+ MenuItemGroup,
+ Input,
+ InputNumber,
+ Radio,
+ RadioGroup,
+ RadioButton,
+ Checkbox,
+ CheckboxButton,
+ CheckboxGroup,
+ Switch,
+ Select,
+ Option,
+ OptionGroup,
+ Button,
+ ButtonGroup,
+ Table,
+ TableColumn,
+ DatePicker,
+ TimeSelect,
+ TimePicker,
+ Popover,
+ Tooltip,
+ Breadcrumb,
+ BreadcrumbItem,
+ Form,
+ FormItem,
+ Tabs,
+ TabPane,
+ Tag,
+ Tree,
+ Alert,
+ Slider,
+ Icon,
+ Row,
+ Col,
+ Upload,
+ Progress,
+ Spinner,
+ Badge,
+ Card,
+ Rate,
+ Steps,
+ Step,
+ Carousel,
+ CarouselItem,
+ Collapse,
+ CollapseItem,
+ Cascader,
+ ColorPicker,
+ Transfer,
+ Container,
+ Header,
+ Aside,
+ Main,
+ Footer,
+ Timeline,
+ TimelineItem,
+ Link,
+ Divider,
+ Image,
+ Calendar,
+ Backtop,
+ PageHeader,
+ CascaderPanel,
+ Loading,
+ MessageBox,
+ Message,
+ Notification,
+ Drawer,
+ Scrollbar,
+ InfiniteScroll
+} from "element-ui";
+
+import "@/assets/css/element-variables.scss";
+
+Vue.use(Pagination);
+Vue.use(Dialog);
+Vue.use(Autocomplete);
+Vue.use(Dropdown);
+Vue.use(DropdownMenu);
+Vue.use(DropdownItem);
+Vue.use(Menu);
+Vue.use(Submenu);
+Vue.use(MenuItem);
+Vue.use(MenuItemGroup);
+Vue.use(Input);
+Vue.use(InputNumber);
+Vue.use(Radio);
+Vue.use(RadioGroup);
+Vue.use(RadioButton);
+Vue.use(Checkbox);
+Vue.use(CheckboxButton);
+Vue.use(CheckboxGroup);
+Vue.use(Switch);
+Vue.use(Select);
+Vue.use(Option);
+Vue.use(OptionGroup);
+Vue.use(Button);
+Vue.use(ButtonGroup);
+Vue.use(Table);
+Vue.use(TableColumn);
+Vue.use(DatePicker);
+Vue.use(TimeSelect);
+Vue.use(TimePicker);
+Vue.use(Popover);
+Vue.use(Tooltip);
+Vue.use(Breadcrumb);
+Vue.use(BreadcrumbItem);
+Vue.use(Form);
+Vue.use(FormItem);
+Vue.use(Tabs);
+Vue.use(TabPane);
+Vue.use(Tag);
+Vue.use(Tree);
+Vue.use(Alert);
+Vue.use(Slider);
+Vue.use(Icon);
+Vue.use(Row);
+Vue.use(Col);
+Vue.use(Upload);
+Vue.use(Progress);
+Vue.use(Spinner);
+Vue.use(Badge);
+Vue.use(Card);
+Vue.use(Rate);
+Vue.use(Steps);
+Vue.use(Step);
+Vue.use(Carousel);
+Vue.use(CarouselItem);
+Vue.use(Collapse);
+Vue.use(CollapseItem);
+Vue.use(Cascader);
+// Vue.use(ColorPicker);
+// Vue.use(Transfer);
+// Vue.use(Container);
+// Vue.use(Header);
+// Vue.use(Aside);
+// Vue.use(Main);
+// Vue.use(Footer);
+// Vue.use(Timeline);
+// Vue.use(TimelineItem);
+Vue.use(Link);
+Vue.use(Divider);
+Vue.use(Image);
+Vue.use(Calendar);
+Vue.use(Backtop);
+// Vue.use(PageHeader);
+Vue.use(CascaderPanel);
+Vue.use(Drawer);
+Vue.use(Scrollbar);
+Vue.use(InfiniteScroll);
+
+Vue.use(Loading.directive);
+
+Vue.prototype.$loading = Loading.service;
+Vue.prototype.$msgbox = MessageBox;
+Vue.prototype.$alert = MessageBox.alert;
+Vue.prototype.$confirm = MessageBox.confirm;
+Vue.prototype.$prompt = MessageBox.prompt;
+Vue.prototype.$notify = Notification;
+Vue.prototype.$message = Message;
diff --git a/src/icons/svg/icon-activity.svg b/src/icons/svg/icon-activity.svg
new file mode 100644
index 0000000..be00ee9
--- /dev/null
+++ b/src/icons/svg/icon-activity.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-app.svg b/src/icons/svg/icon-app.svg
new file mode 100644
index 0000000..1d82a1c
--- /dev/null
+++ b/src/icons/svg/icon-app.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-approve.svg b/src/icons/svg/icon-approve.svg
new file mode 100644
index 0000000..e77593c
--- /dev/null
+++ b/src/icons/svg/icon-approve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-auth.svg b/src/icons/svg/icon-auth.svg
new file mode 100644
index 0000000..b299f59
--- /dev/null
+++ b/src/icons/svg/icon-auth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-ban.svg b/src/icons/svg/icon-ban.svg
new file mode 100644
index 0000000..0376a77
--- /dev/null
+++ b/src/icons/svg/icon-ban.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-camera.svg b/src/icons/svg/icon-camera.svg
new file mode 100644
index 0000000..c277464
--- /dev/null
+++ b/src/icons/svg/icon-camera.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-card.svg b/src/icons/svg/icon-card.svg
new file mode 100644
index 0000000..f6ae0e8
--- /dev/null
+++ b/src/icons/svg/icon-card.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-cart.svg b/src/icons/svg/icon-cart.svg
new file mode 100644
index 0000000..f6833eb
--- /dev/null
+++ b/src/icons/svg/icon-cart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-command.svg b/src/icons/svg/icon-command.svg
new file mode 100644
index 0000000..172c809
--- /dev/null
+++ b/src/icons/svg/icon-command.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-common.svg b/src/icons/svg/icon-common.svg
new file mode 100644
index 0000000..7fe6060
--- /dev/null
+++ b/src/icons/svg/icon-common.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-count.svg b/src/icons/svg/icon-count.svg
new file mode 100644
index 0000000..daf26ba
--- /dev/null
+++ b/src/icons/svg/icon-count.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-crown.svg b/src/icons/svg/icon-crown.svg
new file mode 100644
index 0000000..71429de
--- /dev/null
+++ b/src/icons/svg/icon-crown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-dept.svg b/src/icons/svg/icon-dept.svg
new file mode 100644
index 0000000..1182824
--- /dev/null
+++ b/src/icons/svg/icon-dept.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-discover.svg b/src/icons/svg/icon-discover.svg
new file mode 100644
index 0000000..3747d7e
--- /dev/null
+++ b/src/icons/svg/icon-discover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-emoji.svg b/src/icons/svg/icon-emoji.svg
new file mode 100644
index 0000000..2809858
--- /dev/null
+++ b/src/icons/svg/icon-emoji.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-favor.svg b/src/icons/svg/icon-favor.svg
new file mode 100644
index 0000000..98ad58e
--- /dev/null
+++ b/src/icons/svg/icon-favor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-goods.svg b/src/icons/svg/icon-goods.svg
new file mode 100644
index 0000000..391d0ea
--- /dev/null
+++ b/src/icons/svg/icon-goods.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-home.svg b/src/icons/svg/icon-home.svg
new file mode 100644
index 0000000..94cf445
--- /dev/null
+++ b/src/icons/svg/icon-home.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-hot.svg b/src/icons/svg/icon-hot.svg
new file mode 100644
index 0000000..b907eeb
--- /dev/null
+++ b/src/icons/svg/icon-hot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-info.svg b/src/icons/svg/icon-info.svg
new file mode 100644
index 0000000..797ed3a
--- /dev/null
+++ b/src/icons/svg/icon-info.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-like.svg b/src/icons/svg/icon-like.svg
new file mode 100644
index 0000000..c49af81
--- /dev/null
+++ b/src/icons/svg/icon-like.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-living.svg b/src/icons/svg/icon-living.svg
new file mode 100644
index 0000000..47fd717
--- /dev/null
+++ b/src/icons/svg/icon-living.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-log.svg b/src/icons/svg/icon-log.svg
new file mode 100644
index 0000000..190b185
--- /dev/null
+++ b/src/icons/svg/icon-log.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-menu.svg b/src/icons/svg/icon-menu.svg
new file mode 100644
index 0000000..7b16097
--- /dev/null
+++ b/src/icons/svg/icon-menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-message.svg b/src/icons/svg/icon-message.svg
new file mode 100644
index 0000000..0110fc8
--- /dev/null
+++ b/src/icons/svg/icon-message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-monitor.svg b/src/icons/svg/icon-monitor.svg
new file mode 100644
index 0000000..29f7eee
--- /dev/null
+++ b/src/icons/svg/icon-monitor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-new.svg b/src/icons/svg/icon-new.svg
new file mode 100644
index 0000000..3ebc4bf
--- /dev/null
+++ b/src/icons/svg/icon-new.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-news.svg b/src/icons/svg/icon-news.svg
new file mode 100644
index 0000000..5cec609
--- /dev/null
+++ b/src/icons/svg/icon-news.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-pending.svg b/src/icons/svg/icon-pending.svg
new file mode 100644
index 0000000..90be6b0
--- /dev/null
+++ b/src/icons/svg/icon-pending.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-pic.svg b/src/icons/svg/icon-pic.svg
new file mode 100644
index 0000000..0c68a0d
--- /dev/null
+++ b/src/icons/svg/icon-pic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-question.svg b/src/icons/svg/icon-question.svg
new file mode 100644
index 0000000..8fbe696
--- /dev/null
+++ b/src/icons/svg/icon-question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-rank.svg b/src/icons/svg/icon-rank.svg
new file mode 100644
index 0000000..60916c5
--- /dev/null
+++ b/src/icons/svg/icon-rank.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-scan.svg b/src/icons/svg/icon-scan.svg
new file mode 100644
index 0000000..6e1e2c7
--- /dev/null
+++ b/src/icons/svg/icon-scan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-search.svg b/src/icons/svg/icon-search.svg
new file mode 100644
index 0000000..166aebf
--- /dev/null
+++ b/src/icons/svg/icon-search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-system.svg b/src/icons/svg/icon-system.svg
new file mode 100644
index 0000000..a370d13
--- /dev/null
+++ b/src/icons/svg/icon-system.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-tag (1).svg b/src/icons/svg/icon-tag (1).svg
new file mode 100644
index 0000000..4079665
--- /dev/null
+++ b/src/icons/svg/icon-tag (1).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-tag.svg b/src/icons/svg/icon-tag.svg
new file mode 100644
index 0000000..84adbce
--- /dev/null
+++ b/src/icons/svg/icon-tag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-task.svg b/src/icons/svg/icon-task.svg
new file mode 100644
index 0000000..1a3ff3b
--- /dev/null
+++ b/src/icons/svg/icon-task.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-time.svg b/src/icons/svg/icon-time.svg
new file mode 100644
index 0000000..7ac6296
--- /dev/null
+++ b/src/icons/svg/icon-time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-user.svg b/src/icons/svg/icon-user.svg
new file mode 100644
index 0000000..66d8df7
--- /dev/null
+++ b/src/icons/svg/icon-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-video.svg b/src/icons/svg/icon-video.svg
new file mode 100644
index 0000000..1eee5b9
--- /dev/null
+++ b/src/icons/svg/icon-video.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-wallet.svg b/src/icons/svg/icon-wallet.svg
new file mode 100644
index 0000000..d9a1412
--- /dev/null
+++ b/src/icons/svg/icon-wallet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-warn.svg b/src/icons/svg/icon-warn.svg
new file mode 100644
index 0000000..3eab18d
--- /dev/null
+++ b/src/icons/svg/icon-warn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon-workbench.svg b/src/icons/svg/icon-workbench.svg
new file mode 100644
index 0000000..e67c8ed
--- /dev/null
+++ b/src/icons/svg/icon-workbench.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/perf-cache.svg b/src/icons/svg/perf-cache.svg
new file mode 100644
index 0000000..5212052
--- /dev/null
+++ b/src/icons/svg/perf-cache.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/perf-connect.svg b/src/icons/svg/perf-connect.svg
new file mode 100644
index 0000000..3e37961
--- /dev/null
+++ b/src/icons/svg/perf-connect.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/perf-cpu.svg b/src/icons/svg/perf-cpu.svg
new file mode 100644
index 0000000..9a9cc0c
--- /dev/null
+++ b/src/icons/svg/perf-cpu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/perf-db.svg b/src/icons/svg/perf-db.svg
new file mode 100644
index 0000000..2b8ca77
--- /dev/null
+++ b/src/icons/svg/perf-db.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/perf-disk.svg b/src/icons/svg/perf-disk.svg
new file mode 100644
index 0000000..8fcd4a6
--- /dev/null
+++ b/src/icons/svg/perf-disk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/perf-lb.svg b/src/icons/svg/perf-lb.svg
new file mode 100644
index 0000000..ff0c36b
--- /dev/null
+++ b/src/icons/svg/perf-lb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/perf-network.svg b/src/icons/svg/perf-network.svg
new file mode 100644
index 0000000..38176a8
--- /dev/null
+++ b/src/icons/svg/perf-network.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..6baca22
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,29 @@
+import Vue from "vue";
+import App from "./App.vue";
+import { bootstrap } from "cool/core";
+// import { bootstrap } from "cl-admin";
+import "./element";
+
+// 路由
+import router from "@/router";
+
+// 缓存
+import store from "@/store";
+
+// 阻止显示生产模式的消息
+Vue.config.productionTip = false;
+
+// 配置
+bootstrap()
+ .then(() => {
+ store.dispatch("appLoad");
+
+ new Vue({
+ router,
+ store,
+ render: (h) => h(App)
+ }).$mount("#app");
+ })
+ .catch((err) => {
+ console.error("COOL-ADMIN 启动失败", err);
+ });
diff --git a/src/pages/home/components/category-ratio.vue b/src/pages/home/components/category-ratio.vue
new file mode 100644
index 0000000..c35af69
--- /dev/null
+++ b/src/pages/home/components/category-ratio.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
diff --git a/src/pages/home/components/count-effect.vue b/src/pages/home/components/count-effect.vue
new file mode 100644
index 0000000..65f6e27
--- /dev/null
+++ b/src/pages/home/components/count-effect.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
diff --git a/src/pages/home/components/count-paid.vue b/src/pages/home/components/count-paid.vue
new file mode 100644
index 0000000..bcd92fa
--- /dev/null
+++ b/src/pages/home/components/count-paid.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
diff --git a/src/pages/home/components/count-sales.vue b/src/pages/home/components/count-sales.vue
new file mode 100644
index 0000000..c0649b8
--- /dev/null
+++ b/src/pages/home/components/count-sales.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+ -
+ 周同比
+
+
+
+ -4%
+
+
+
+ -
+ 日同比
+
+
+
+ +7%
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/home/components/count-views.vue b/src/pages/home/components/count-views.vue
new file mode 100644
index 0000000..58af33d
--- /dev/null
+++ b/src/pages/home/components/count-views.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
diff --git a/src/pages/home/components/hot-search.vue b/src/pages/home/components/hot-search.vue
new file mode 100644
index 0000000..de7b54b
--- /dev/null
+++ b/src/pages/home/components/hot-search.vue
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索用户数
+ 1242
+
+
+
+ +7%
+
+
+
+
+
+
+
+
+
+
+
+ 搜索用户数
+ 1242
+
+
+
+ +7%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/home/components/sales-rank.vue b/src/pages/home/components/sales-rank.vue
new file mode 100644
index 0000000..11eab08
--- /dev/null
+++ b/src/pages/home/components/sales-rank.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+ -
+ 1
+ 北京市朝阳区三里屯路
+ 323201
+
+ -
+ 2
+ 北京市朝阳区建国路-华贸购物中心
+ 278442
+
+ -
+ 3
+ 北京市朝阳区朝阳北路
+ 202368
+
+ -
+ 4
+ 北京市东城区王府井大街
+ 156320
+
+ -
+ 5
+ 北京市西城区西单北大街-大悦城
+ 98852
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/home/components/tab-chart.vue b/src/pages/home/components/tab-chart.vue
new file mode 100644
index 0000000..5df0e56
--- /dev/null
+++ b/src/pages/home/components/tab-chart.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
diff --git a/src/pages/home/index.vue b/src/pages/home/index.vue
new file mode 100644
index 0000000..37ce7ad
--- /dev/null
+++ b/src/pages/home/index.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/layout/index.vue b/src/pages/layout/index.vue
new file mode 100644
index 0000000..de9d715
--- /dev/null
+++ b/src/pages/layout/index.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
diff --git a/src/pages/layout/slider.vue b/src/pages/layout/slider.vue
new file mode 100644
index 0000000..8f23396
--- /dev/null
+++ b/src/pages/layout/slider.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
diff --git a/src/pages/layout/topbar.vue b/src/pages/layout/topbar.vue
new file mode 100644
index 0000000..66a6f7b
--- /dev/null
+++ b/src/pages/layout/topbar.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ userInfo.nickName | default_name }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000..ade11be
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,42 @@
+import Vue from "vue";
+import VueRouter from "vue-router";
+import { routerMode } from "@/config/env";
+
+Vue.use(VueRouter);
+
+// 忽略规则
+const ignore = {
+ token: ["/login", "/403", "/404", "/500", "/502"]
+};
+
+// 路由列表
+const routes = [
+ {
+ path: "/",
+ name: "index",
+ component: () => import(`@/pages/layout/index.vue`),
+ children: [
+ {
+ path: "/",
+ name: "数据统计",
+ component: () => import("@/pages/home/index.vue")
+ }
+ ]
+ }
+];
+
+const Router = new VueRouter({
+ mode: routerMode || "history",
+ base: process.env.BASE_URL,
+ routes,
+ scrollBehavior(to, from, savedPosition) {
+ if (savedPosition) {
+ return savedPosition;
+ } else {
+ return { x: 0, y: 0 };
+ }
+ }
+});
+
+export { ignore, routes };
+export default Router;
diff --git a/src/service/request.js b/src/service/request.js
new file mode 100644
index 0000000..eaf5dc6
--- /dev/null
+++ b/src/service/request.js
@@ -0,0 +1,149 @@
+import axios from "axios";
+import store from "@/store";
+import { isDev } from "@/config/env";
+import { href, storage } from "cl-admin/utils";
+import NProgress from "nprogress";
+import "nprogress/nprogress.css";
+
+axios.defaults.timeout = 30000;
+axios.defaults.withCredentials = true;
+
+NProgress.configure({
+ showSpinner: false
+});
+
+// 请求队列
+let requests = [];
+
+// Token 是否刷新中
+let isRefreshing = false;
+
+// 忽略规则
+const ignore = {
+ NProgress: ["/sys/info/record"],
+ token: ["/login", "/captcha"]
+};
+
+// Request
+axios.interceptors.request.use(
+ (config) => {
+ const token = store.getters.token || "";
+
+ if (config.url) {
+ if (!ignore.token.some((e) => config.url.includes(e))) {
+ config.headers["Authorization"] = token;
+ }
+
+ if (!ignore.NProgress.some((e) => config.url.includes(e))) {
+ NProgress.start();
+ }
+ }
+
+ // 请求信息
+ if (isDev) {
+ console.group(config.url);
+ console.log("method:", config.method);
+ console.table("data:", config.method == "get" ? config.params : config.data);
+ console.groupEnd();
+ }
+
+ // 验证 token
+ if (token) {
+ if (config.url.includes("refreshToken")) {
+ return config;
+ }
+
+ // 判断 token 是否过期
+ if (storage.isExpired("token")) {
+ // 判断 refreshToken 是否过期
+ if (storage.isExpired("refreshToken")) {
+ store.dispatch("userRemove");
+ return href("/login");
+ }
+
+ // 是否在刷新中
+ if (!isRefreshing) {
+ isRefreshing = true;
+
+ store.dispatch("refreshToken").then((token) => {
+ requests.forEach((cb) => cb(token));
+ requests = [];
+ isRefreshing = false;
+ });
+ }
+
+ return new Promise((resolve) => {
+ // 继续请求
+ requests.push((token) => {
+ // 重新设置 token
+ config.headers["Authorization"] = token;
+ resolve(config);
+ });
+ });
+ }
+ }
+
+ return config;
+ },
+ (error) => {
+ return Promise.reject(error);
+ }
+);
+
+// Response
+axios.interceptors.response.use(
+ (res) => {
+ NProgress.done();
+ const { code, data, message } = res.data;
+
+ if (!res.data) {
+ return res;
+ }
+
+ switch (code) {
+ case 1000:
+ return data;
+ default:
+ return Promise.reject(message);
+ }
+ },
+ async (error) => {
+ NProgress.done();
+
+ if (error.response) {
+ const { status, config } = error.response;
+
+ switch (status) {
+ case 401:
+ await store.dispatch("userRemove");
+ href("/login");
+ break;
+
+ case 403:
+ console.error(`${config.url} 无权限访问!!`);
+ href("/403");
+ break;
+
+ case 404:
+ break;
+
+ case 500:
+ if (!isDev) {
+ href("/500");
+ }
+ break;
+
+ case 502:
+ href("/502");
+ break;
+
+ default:
+ console.error(status, config.url);
+ }
+ }
+
+ return Promise.reject(error.message);
+ }
+);
+
+export default axios;
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..383da6e
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,8 @@
+import Vue from "vue";
+import Vuex from "vuex";
+
+Vue.use(Vuex);
+
+export default new Vuex.Store({
+ modules: {}
+});
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..c1beab9
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,121 @@
+const path = require("path");
+
+const isProduction = process.env.NODE_ENV === "production";
+
+function resolve(dir) {
+ return path.join(__dirname, dir);
+}
+
+module.exports = {
+ publicPath: "/",
+ lintOnSave: true,
+ productionSourceMap: false,
+ parallel: require("os").cpus().length > 1,
+
+ css: {
+ extract: isProduction,
+ sourceMap: false,
+ loaderOptions: {
+ sass: {
+ prependData: `@import "@/assets/css/common.scss";`
+ }
+ }
+ },
+
+ devServer: {
+ port: 9000,
+ open: false,
+ compress: false,
+ overlay: {
+ warnings: false,
+ errors: true
+ },
+ disableHostCheck: true,
+ proxy: {
+ "/dev": {
+ target: "https://admin.cn.utools.club",
+ changeOrigin: true,
+ pathRewrite: {
+ "^/dev": ""
+ }
+ },
+
+ "/oss-upload": {
+ target: "https://cool-admin-pro.oss-cn-shanghai.aliyuncs.com",
+ changeOrigin: true,
+ pathRewrite: {
+ "^/oss-upload": ""
+ }
+ },
+
+ "/pro": {
+ target: "https://show.cool-admin.com",
+ changeOrigin: true,
+ pathRewrite: {
+ "^/pro": "/api"
+ }
+ }
+ }
+ },
+
+ chainWebpack: (config) => {
+ // svg
+ config.module.rule("svg").uses.clear();
+
+ config.module
+ .rule("svg-sprite-loader")
+ .test(/.svg$/)
+ .exclude.add(/node_modules/)
+ .end()
+ .use("svg-sprite-loader")
+ .loader("svg-sprite-loader")
+ .options({
+ symbolId: "[name]"
+ });
+
+ // 去掉元素之间空格
+ config.module
+ .rule("vue")
+ .use("vue-loader")
+ .loader("vue-loader")
+ .tap((options) => {
+ options.compilerOptions.preserveWhitespace = true;
+ return options;
+ })
+ .end();
+
+ // 移除 prefetch 插件
+ config.plugins.delete("prefetch-index");
+
+ // 移除 preload 插件,避免加载多余的资源
+ config.plugins.delete("preload-index");
+
+ // 设置别名
+ config.resolve.alias.set("cool", resolve("cool"));
+
+ // 生产模式下
+ if (isProduction) {
+ config.performance.set("hints", false);
+
+ config.optimization.splitChunks({
+ chunks: "all",
+ cacheGroups: {
+ // 公用模块抽离
+ common: {
+ chunks: "initial",
+ minSize: 0,
+ minChunks: 2
+ },
+ // 第三方库抽离
+ vendor: {
+ priority: 1,
+ test: /node_modules/,
+ chunks: "initial",
+ minSize: 0,
+ minChunks: 2
+ }
+ }
+ });
+ }
+ }
+};